name = esc_html__( 'Text', 'charitable' );
$this->type = 'text';
$this->icon = 'fa-list-ul';
$this->order = 100;
// Edit/Duplication information.
$this->can_be_edited = true;
$this->can_be_deleted = true;
$this->can_be_duplicated = true;
$this->edit_label = esc_html__( 'Edit Text', 'charitable' );
$this->edit_type = 'text'; // was settings.
$this->edit_section = 'standard';
$this->html_field = 'content';
// Misc.
$this->tooltip = esc_html__( 'Placeholder tool tip', 'charitable' );
$this->preview_character_limit = 2500;
// Define additional field properties.
add_action( 'charitable_frontend_js', [ $this, 'frontend_js' ] );
}
/**
* Text options panel inside the builder.
*
* @since 1.8.0
*
* @param array $field Text settings.
*/
public function field_options( $field ) {
/*
* Basic field options.
*/
// Options open markup.
}
/**
* Render the field.
*
* @since 1.8.0
*
* @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 ) {
$content = ! empty( $field_data['content'] ) ? ( $field_data['content'] ) : ''; // todo: santitize
$headline = ! empty( $field_data['headline'] ) ? esc_html( $field_data['headline'] ) : esc_html__( 'Headline', 'charitable' );
$field_preview_html = '
' . $headline . '
';
if ( '' !== trim( $content ) ) {
$field_preview_html .= wpautop(
wp_kses(
strlen( $content ) > $this->preview_character_limit ? substr( $content, 0, $this->preview_character_limit ) . '...' : $content,
[
'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' => [],
],
]
)
) . '
';
} else {
$field_preview_html .= '
';
}
$field_preview_html .= '
';
$html = $field_preview_html;
return $html;
}
/**
* Text 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 wp_kses_post( $html );
}
/**
* The display on the campaign front-end.
*
* @since 1.8.0
*
* @param string $field_type The passed field type.
* @param array $field_data Any field data.
* @param array $campaign_data Amount 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 WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
* The display on the form settings backend when the user clicks on the field/block.
*
* @since 1.8.0
*
* @param array $field_id Field id.
* @param array $campaign_data Campaign 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;
ob_start();
?>