name = esc_html__( 'Organizer', 'charitable' );
$this->type = 'organizer';
$this->icon = 'fa-user';
$this->order = 30;
$this->align_default = 'left';
// Edit/Duplication information.
$this->edit_label = esc_html__( 'Edit Organizer', 'charitable' );
$this->edit_type = 'organizer';
$this->edit_section = 'standard';
$this->can_be_edited = true;
$this->can_be_deleted = true;
$this->can_be_duplicated = true;
// Misc.
$this->tooltip = '';
// Define additional field properties.
add_action( 'charitable_builder_frontend_js', [ $this, 'frontend_js' ] );
add_action( 'charitable_builder_backend_scripts', [ $this, 'builder_js' ] );
}
/**
* Organizer options panel inside the builder.
*
* @since 1.8.0
*
* @param array $field Organizer settings.
*/
public function field_options( $field ) {
/*
* Basic field options.
*/
// Options open markup.
}
/**
* Render the field.
*
* @since 1.8.0
* @version 1.1.8.16 added 'charitable_campaign_builder_organizer_image' filter.
*
* @param array $field_data Any field data.
* @param array $campaign_data Amount data and settings.
* @param integer $field_id The field ID.
* @param string $mode Where the field is being displayed ("preview" or "template").
* @param array $template_data Tempalate data.
*/
public function render( $field_data = false, $campaign_data = false, $field_id = false, $mode = 'template', $template_data = false ) {
if ( 'preview' === $mode ) {
// Define data.
$campaign_creator_id = ! empty( $campaign_data['settings']['general']['campaign_creator_id'] ) ? intval( $campaign_data['settings']['general']['campaign_creator_id'] ) : false;
if ( false === $campaign_creator_id && ! empty( $campaign_data['id'] ) ) {
$campaign_post = get_post( intval( $campaign_data['id'] ) );
$campaign_creator_id = ! empty( $campaign_post->post_author ) ? $campaign_post->post_author : false;
}
$campaign_creator_id = ( false === $campaign_creator_id ) ? get_current_user_id() : $campaign_creator_id;
$image_url = apply_filters( 'charitable_campaign_builder_organizer_image', esc_url( get_avatar_url( $campaign_creator_id ) ), $campaign_creator_id, $campaign_data );
$creator_name = $this->get_creator_data( $campaign_creator_id );
$role_or_title = ! empty( $field_data['role_or_title'] ) ? esc_html( $field_data['role_or_title'] ) : 'Organizer';
$organizer_content = ! empty( $field_data['content'] ) ? $this->format( $field_id, $field_data['content'], $campaign_data ) : '';
$image_bg_css = ( $image_url ) ? ' style="background-image: url(' . esc_url( $image_url ) . ');"' : false;
return '
' . esc_html( $creator_name ) . '
' . $role_or_title . '
' . ( $organizer_content ) . '
';
} else {
// Define data.
$campaign_creator_id = ! empty( $campaign_data['settings']['general']['campaign_creator_id'] ) ? intval( $campaign_data['settings']['general']['campaign_creator_id'] ) : false;
if ( false === $campaign_creator_id && ! empty( $campaign_data['id'] ) ) {
$campaign_post = get_post( intval( $campaign_data['id'] ) );
$campaign_creator_id = ! empty( $campaign_post->post_author ) ? $campaign_post->post_author : false;
}
$campaign_creator_id = ( false === $campaign_creator_id ) ? get_current_user_id() : $campaign_creator_id;
$image_url = apply_filters( 'charitable_campaign_builder_organizer_image', esc_url( get_avatar_url( $campaign_creator_id ) ), $campaign_creator_id, $campaign_data );
$creator_name = $this->get_creator_data( $campaign_creator_id );
$role_or_title = ! empty( $field_data['role_or_title'] ) ? esc_html( $field_data['role_or_title'] ) : 'Organizer';
$organizer_content = ! empty( $field_data['content'] ) ? trim( $field_data['content'] ) : '';
$image_bg_css = ( $image_url ) ? ' style="background-image: url(' . esc_url( $image_url ) . ');"' : false;
return '
' . esc_html( $creator_name ) . '
' . $role_or_title . '
' . $this->format( $field_id, $organizer_content, $campaign_data ) . '
';
}
}
/**
* Organizer preview inside the builder.
*
* @since 1.8.0
*
* @param array $field_data Field data and settings.
* @param array $campaign_data Campaign data and settings.
* @param array $field_id Field ID.
* @param string $theme Template data.
*/
public function field_preview( $field_data = false, $campaign_data = false, $field_id = false, $theme = '' ) {
$html = $this->field_title( $this->name );
$html .= $this->field_wrapper( $this->render( $field_data, $campaign_data, $field_id, 'preview' ), $field_data );
echo $html; // phpcs:ignore
}
/**
* Organizer display on the form front-end.
*
* @since 1.8.0
*
* @param string $field_type Field Type.
* @param array $field_data Deprecated.
* @param array $campaign_data Form data and settings.
*/
public function field_display( $field_type = '', $field_data = false, $campaign_data = false ) {
$html = $this->field_display_wrapper( $this->render( $field_data, $campaign_data ), $field_data );
echo apply_filters( 'charitable_campaign_builder_' . $this->type . '_field_display', $html, $campaign_data ); // phpcs:ignore
}
/**
* Organizer display on the form front-end.
*
* @since 1.8.0
*
* @param array $field_id Field id.
* @param array $campaign_data Form data and settings.
*/
public function settings_display( $field_id = false, $campaign_data = false ) {
$charitable_builder_form_fields = new Charitable_Builder_Form_Fields();
$settings = isset( $campaign_data['fields'][ $field_id ] ) ? $campaign_data['fields'][ $field_id ] : false;
// special check - if "default" is just a filename, readjust the default to a full url.
if ( ! empty( $settings['default'] ) && ! empty( $campaign_data['template_id'] ) ) {
$default_basename = basename( $settings['default'] );
if ( $default_basename === $settings['default'] ) {
$settings['default'] = charitable()->get_path( 'assets', false ) . 'images/campaign-builder/templates/' . $campaign_data['template_id'] . '/' . $default_basename;
}
}
ob_start();
?>
name ); ?> (ID: )
generate_text( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
isset( $settings['role_or_title'] ) ? $settings['role_or_title'] : esc_html__( 'Organizer', 'charitable' ),
esc_html__( 'Role or Title', 'charitable' ),
array(
'id' => 'field_' . esc_attr( $this->type ) . '_role_or_title' . '_' . intval( $field_id ), // phpcs:ignore
'name' => array( '_fields', intval( $field_id ), 'role_or_title' ),
'field_id' => intval( $field_id ),
'tooltip' => esc_html__( 'Add a headline to this field.', 'charitable' ),
'class' => 'charitable-campaign-builder-headline',
)
);
$campaign_creator_id = ! empty( $campaign_data['settings']['general']['campaign_creator_id'] ) ? intval( $campaign_data['settings']['general']['campaign_creator_id'] ) : false;
$users = apply_filters( 'charitable_allowed_campaign_creators', [] );
if ( empty( $users ) ) {
$users = get_users();
}
foreach ( $users as $user ) {
$users_to_pass[ $user->data->ID ] = array(
'avatar' => esc_url( get_avatar_url( $user->data->ID ) ),
'text' => ( '' . charitable_get_creator_data( $user->data->ID ) ),
'meta' => ' ( ID: ' . $user->data->ID . ' ) Joined: ' . gmdate( 'M d, Y ', strtotime( $user->data->user_registered ) ) . ' ',
);
}
echo $charitable_builder_form_fields->generate_user_dropdown_mini( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
$campaign_data,
esc_html__( 'Campaign Creator', 'charitable' ),
array(
'from' => 'field',
'id' => 'field_' . esc_attr( $this->type ) . '_campaign_creator' . '_' . intval( $field_id ), // phpcs:ignore
'name' => array( '_fields', intval( $field_id ), 'campaign_creator' ),
'field_id' => esc_attr( $field_id ),
'default' => get_current_user_id(), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
'options' => $users_to_pass, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
'selected_value' => intval( $campaign_creator_id ),
'container_class' => 'campaign-builder-campaign-creator-id-mini',
)
);
echo $charitable_builder_form_fields->generate_textbox( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
isset( $settings['content'] ) ? $settings['content'] : false,
esc_html__( 'Organizer Description', 'charitable' ),
array(
'id' => 'field_' . esc_attr( $this->type ) . '_html' . '_' . intval( $field_id ), // phpcs:ignore
'name' => array( '_fields', intval( $field_id ), 'content' ),
'field_id' => esc_attr( $field_id ),
'tooltip' => esc_html( $this->tooltip ),
'class' => 'campaign-builder-htmleditor',
'rows' => 30,
'html' => true,
'code' => false,
'container_class' => 'campaign-builder-campaign-creator-description',
'special' => 'organizer_content',
)
);
echo $charitable_builder_form_fields->generate_number_slider( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
isset( $settings['width_percentage'] ) ? $settings['width_percentage'] : 100,
esc_html__( 'Width', 'charitable' ),
array(
'id' => 'field_' . esc_attr( $this->type ) . '_width_percentage' . '_' . intval( $field_id ), // phpcs:ignore
'name' => array( '_fields', intval( $field_id ), 'width_percentage' ),
'field_type' => esc_attr( $this->type ),
'field_id' => intval( $field_id ),
'symbol' => '%',
'min' => 0,
'min_actual' => 40,
'css_class' => 'charitable-indicator-on-hover',
'tooltip' => esc_html__( 'Adjust the width of the field within the column.', 'charitable' ),
)
);
echo $charitable_builder_form_fields->generate_align( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
isset( $settings['align'] ) ? $settings['align'] : esc_attr( $this->align_default ),
esc_html__( 'Align', 'charitable' ),
array(
'id' => 'field_' . esc_attr( $this->type ) . '_align' . '_' . intval( $field_id ), // phpcs:ignore
'name' => array( '_fields', intval( $field_id ), 'align' ),
'field_id' => intval( $field_id ),
)
);
echo $charitable_builder_form_fields->generate_text( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
isset( $settings['css_class'] ) ? $settings['css_class'] : false,
esc_html__( 'CSS Class', 'charitable' ),
array(
'id' => 'field_' . esc_attr( $this->type ) . '_css_class' . '_' . intval( $field_id ), // phpcs:ignore
'name' => array( '_fields', intval( $field_id ), 'css_class' ),
'field_id' => intval( $field_id ),
'tooltip' => esc_html__( 'Add CSS classes (seperated by a space) for this field to customize it\'s appearance in your theme.', 'charitable' ),
)
);
$html = ob_get_clean();
return $html;
}
/**
* Return HTML for display via ajax.
*
* @since 1.8.0
*/
public function settings_display_ajax() {
$field_id = isset( $_POST['field_id'] ) ? intval( $_POST['field_id'] ) : false; // phpcs:ignore
$campaign_id = isset( $_POST['campaign_id'] ) ? intval( $_POST['campaign_id'] ) : false; // phpcs:ignore
if ( false === $field_id ) {
return;
}
$charitable_builder_form_fields = new Charitable_Builder_Form_Fields();
$campaign_data = get_post_meta( $campaign_id, 'campaign_settings_v2', true );
$settings = isset( $campaign_data['fields'][ $field_id ] ) ? $campaign_data['fields'][ $field_id ] : false;
ob_start();
?>
generate_number_slider( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
isset( $settings['width_percentage'] ) ? $settings['width_percentage'] : 100,
esc_html__( 'Width', 'charitable' ),
array(
'id' => 'field_' . esc_attr( $this->type ) . '_width_percentage' . '_' . intval( $field_id ), // phpcs:ignore
'name' => array( '_fields', intval( $field_id ), 'width_percentage' ),
'field_type' => esc_attr( $this->type ),
'field_id' => intval( $field_id ),
'symbol' => '%',
'min' => 10,
'tooltip' => esc_html__( 'Adjust the width of the field within the column.', 'charitable' ),
)
);
echo $charitable_builder_form_fields->generate_align( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
isset( $settings['align'] ) ? $settings['align'] : false,
esc_html__( 'Align', 'charitable' ),
array(
'id' => 'field_' . esc_attr( $this->type ) . '_align' . '_' . intval( $field_id ), // phpcs:ignore
'name' => array( '_fields', intval( $field_id ), 'align' ),
'field_id' => intval( $field_id ),
)
);
echo $charitable_builder_form_fields->generate_text( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
$settings['css_class'],
esc_html__( 'CSS Class', 'charitable' ),
array(
'id' => 'field_' . esc_attr( $this->type ) . '_css_class',
'name' => array( 'fields', esc_attr( $this->type ), 'css_class' ),
'tooltip' => esc_html( $this->tooltip ),
)
);
?>
$html ] );
exit;
}
/**
* Enqueue frontend limit option js.
*
* @since 1.8.0
*
* @param string $min The suffix, if any, to include for the minified version.
*/
public function builder_js( $min = '' ) {
}
/**
* Enqueue frontend limit option js.
*
* @since 1.8.0
*
* @param string $min The suffix, if any, to include for the minified version.
*/
public function frontend_js( $min = '' ) {
}
/**
* Format and sanitize field.
*
* @since 1.8.0
*
* @param int $field_id Field type.
* @param mixed $field_submit Field value that was submitted.
* @param array $campaign_data Campaign data and settings.
*/
public function format( $field_id, $field_submit, $campaign_data ) {
$allowed_html_tags = apply_filters(
'charitable_campaign_builder_html_allowed_tags',
array(
'a' => [
'href' => [],
'class' => [],
'target' => [],
],
'p' => [
'class' => [],
],
'span' => [
'class' => [],
],
'div' => [
'class' => [],
],
'strong' => [
'class' => [],
],
'em' => [
'class' => [],
],
'b' => [
'class' => [],
],
'i' => [
'class' => [],
],
'h1' => [
'class' => [],
],
'h2' => [
'class' => [],
],
'h3' => [
'class' => [],
],
'h4' => [
'class' => [],
],
'h5' => [
'class' => [],
],
'h6' => [
'class' => [],
],
),
$campaign_data
);
return wp_kses( $field_submit, $allowed_html_tags );
}
/**
* Validate field on form submit.
*
* @since 1.8.0
*
* @param int $field Field.
* @param mixed $field_data Field data.
* @param array $campaign_data Form data and settings.
*/
public function validate( $field, $field_data = false, $campaign_data = false ) {
}
/**
* Get the creator data.
*
* @since 1.8.0
*
* @param int|null $user_id The user ID.
*
* @return string The creator data.
*/
public function get_creator_data( $user_id = null ) {
$user_info = $user_id ? new WP_User( $user_id ) : wp_get_current_user();
if ( $user_info->first_name ) {
if ( $user_info->last_name ) {
return $user_info->first_name . ' ' . $user_info->last_name;
}
return $user_info->first_name;
}
return $user_info->display_name;
}
}
new Charitable_Field_Organizer();
endif;