2021-12-07 11:08:05 +00:00
< ? php
class ET_Builder_Module_Comments extends ET_Builder_Module {
function init () {
$this -> name = esc_html__ ( 'Comments' , 'et_builder' );
$this -> plural = esc_html__ ( 'Comments' , 'et_builder' );
$this -> slug = 'et_pb_comments' ;
$this -> vb_support = 'on' ;
$this -> main_css_element = '%%order_class%%' ;
$this -> settings_modal_toggles = array (
'general' => array (
'toggles' => array (
'elements' => et_builder_i18n ( 'Elements' ),
),
),
'advanced' => array (
'toggles' => array (
'image' => array (
'title' => et_builder_i18n ( 'Image' ),
'priority' => 30 ,
),
'text' => array (
'title' => et_builder_i18n ( 'Text' ),
'priority' => 49 ,
),
),
),
);
$this -> advanced_fields = array (
'box_shadow' => array (
'default' => array (),
'image' => array (
'label' => esc_html__ ( 'Image Box Shadow' , 'et_builder' ),
'option_category' => 'layout' ,
'tab_slug' => 'advanced' ,
'toggle_slug' => 'image' ,
'css' => array (
'main' => " { $this -> main_css_element } .commentlist img.avatar " ,
),
),
),
'borders' => array (
'default' => array (
'css' => array (
'main' => array (
'border_radii' => " { $this -> main_css_element } " ,
'border_styles' => " { $this -> main_css_element } " ,
),
'important' => 'all' ,
),
),
'image' => array (
'css' => array (
'main' => array (
'border_radii' => '%%order_class%%.et_pb_comments_module .commentlist li img.avatar' ,
'border_styles' => '%%order_class%%.et_pb_comments_module .commentlist li img.avatar' ,
),
),
'label_prefix' => et_builder_i18n ( 'Image' ),
'tab_slug' => 'advanced' ,
'toggle_slug' => 'image' ,
),
),
'margin_padding' => array (
'css' => array (
'important' => 'all' ,
),
),
'fonts' => array (
'header' => array (
'label' => esc_html__ ( 'Comment Count' , 'et_builder' ),
'css' => array (
'main' => " { $this -> main_css_element } h1.page_title, { $this -> main_css_element } h2.page_title, { $this -> main_css_element } h3.page_title, { $this -> main_css_element } h4.page_title, { $this -> main_css_element } h5.page_title, { $this -> main_css_element } h6.page_title " ,
),
'header_level' => array (
'default' => 'h1' ,
),
),
'title' => array (
'label' => esc_html__ ( 'Form Title' , 'et_builder' ),
'css' => array (
'main' => " { $this -> main_css_element } .comment-reply-title " ,
),
'line_height' => array (
'default' => '1em' ,
),
'font_size' => array (
'default' => '22px' ,
),
'letter_spacing' => array (
'default' => '0px' ,
),
'header_level' => array (
'default' => 'h3' ,
),
),
'meta' => array (
'label' => esc_html__ ( 'Meta' , 'et_builder' ),
'css' => array (
'main' => " { $this -> main_css_element } .comment_postinfo span " ,
'important' => 'all' ,
'text_align' => " { $this -> main_css_element } .comment_postinfo " ,
),
'line_height' => array (
'default' => '1em' ,
),
'font_size' => array (
'default' => '14px' ,
),
'letter_spacing' => array (
'default' => '0px' ,
),
),
'body' => array (
'label' => esc_html__ ( 'Comment' , 'et_builder' ),
'css' => array (
'main' => " { $this -> main_css_element } .comment-content p " ,
),
'line_height' => array (
'default' => '1em' ,
),
'font_size' => array (
'default' => '14px' ,
),
'letter_spacing' => array (
'default' => '0px' ,
),
),
),
'button' => array (
'button' => array (
'label' => et_builder_i18n ( 'Button' ),
'css' => array (
'main' => " { $this -> main_css_element } .et_pb_comments_module .et_pb_button " ,
'limited_main' => " { $this -> main_css_element } .et_pb_comments_module .et_pb_button " ,
'alignment' => " { $this -> main_css_element } .form-submit " ,
),
'no_rel_attr' => true ,
'use_alignment' => true ,
'box_shadow' => array (
'css' => array (
'main' => " { $this -> main_css_element } .et_pb_button " ,
),
),
'margin_padding' => array (
'css' => array (
'important' => 'all' ,
),
),
),
),
'text' => array (
'use_background_layout' => true ,
'css' => array (
'main' => '%%order_class%% p, %%order_class%% .comment_postinfo *, %%order_class%% .page_title, %%order_class%% .comment-reply-title' ,
'text_shadow' => '%%order_class%% p, %%order_class%% .comment_postinfo, %%order_class%% .page_title, %%order_class%% .comment-reply-title' ,
),
'options' => array (
'background_layout' => array (
'default_on_front' => 'light' ,
'hover' => 'tabs' ,
),
),
),
'form_field' => array (
'form_field' => array (
'label' => esc_html__ ( 'Fields' , 'et_builder' ),
'css' => array (
'main' => " { $this -> main_css_element } #commentform textarea, { $this -> main_css_element } #commentform input[type='text'], { $this -> main_css_element } #commentform input[type='email'], { $this -> main_css_element } #commentform input[type='url'] " ,
'hover' => " { $this -> main_css_element } #commentform textarea:hover, { $this -> main_css_element } #commentform input[type='text']:hover, { $this -> main_css_element } #commentform input[type='email']:hover, { $this -> main_css_element } #commentform input[type='url']:hover " ,
'focus' => " { $this -> main_css_element } #commentform textarea:focus, { $this -> main_css_element } #commentform input[type='text']:focus, { $this -> main_css_element } #commentform input[type='email']:focus, { $this -> main_css_element } #commentform input[type='url']:focus " ,
'focus_hover' => " { $this -> main_css_element } #commentform textarea:focus:hover, { $this -> main_css_element } #commentform input[type='text']:focus:hover, { $this -> main_css_element } #commentform input[type='email']:focus:hover, { $this -> main_css_element } #commentform input[type='url']:focus:hover " ,
'placeholder' => " { $this -> main_css_element } #commentform textarea::-webkit-input-placeholder, { $this -> main_css_element } #commentform textarea::-moz-placeholder, { $this -> main_css_element } #commentform textarea:-ms-input-placeholder, { $this -> main_css_element } #commentform input::-webkit-input-placeholder, { $this -> main_css_element } #commentform input::-moz-placeholder, { $this -> main_css_element } #commentform input:-ms-input-placeholder " ,
'placeholder_focus' => " { $this -> main_css_element } #commentform textarea:focus::-webkit-input-placeholder, { $this -> main_css_element } #commentform textarea:focus::-moz-placeholder, { $this -> main_css_element } #commentform textarea:focus:-ms-input-placeholder, { $this -> main_css_element } #commentform input:focus::-webkit-input-placeholder, { $this -> main_css_element } #commentform input:focus::-moz-placeholder, { $this -> main_css_element } #commentform input:focus:-ms-input-placeholder " ,
'margin' => " { $this -> main_css_element } #commentform .comment-form-comment, { $this -> main_css_element } #commentform .comment-form-author, { $this -> main_css_element } #commentform .comment-form-email, { $this -> main_css_element } #commentform .comment-form-url " ,
),
'box_shadow' => array (
'name' => 'fields' ,
'css' => array (
'main' => " { $this -> main_css_element } #commentform textarea, { $this -> main_css_element } #commentform input[type='text'], { $this -> main_css_element } #commentform input[type='email'], { $this -> main_css_element } #commentform input[type='url'] " ,
),
),
'border_styles' => array (
'form_field' => array (
'name' => 'fields' ,
'css' => array (
'main' => array (
'border_radii' => " { $this -> main_css_element } #commentform textarea, { $this -> main_css_element } #commentform input[type='text'], { $this -> main_css_element } #commentform input[type='email'], { $this -> main_css_element } #commentform input[type='url'] " ,
'border_styles' => " { $this -> main_css_element } #commentform textarea, { $this -> main_css_element } #commentform input[type='text'], { $this -> main_css_element } #commentform input[type='email'], { $this -> main_css_element } #commentform input[type='url'] " ,
),
'important' => 'all' ,
),
'label_prefix' => esc_html__ ( 'Fields' , 'et_builder' ),
),
'form_field_focus' => array (
'name' => 'fields_focus' ,
'css' => array (
'main' => array (
'border_radii' => " { $this -> main_css_element } #commentform textarea:focus, { $this -> main_css_element } #commentform input[type='text']:focus, { $this -> main_css_element } #commentform input[type='email']:focus, { $this -> main_css_element } #commentform input[type='url']:focus " ,
'border_styles' => " { $this -> main_css_element } #commentform textarea:focus, { $this -> main_css_element } #commentform input[type='text']:focus, { $this -> main_css_element } #commentform input[type='email']:focus, { $this -> main_css_element } #commentform input[type='url']:focus " ,
),
),
'label_prefix' => esc_html__ ( 'Fields Focus' , 'et_builder' ),
),
),
'font_field' => array (
'css' => array (
'main' => " { $this -> main_css_element } #commentform textarea, { $this -> main_css_element } #commentform input[type='text'], { $this -> main_css_element } #commentform input[type='email'], { $this -> main_css_element } #commentform input[type='url'], { $this -> main_css_element } #commentform label " ,
'important' => 'all' ,
),
'line_height' => array (
'default' => '1em' ,
),
'font_size' => array (
'default' => '18px' ,
),
'letter_spacing' => array (
'default' => '0px' ,
),
),
),
),
'filters' => array (
'child_filters_target' => array (
'tab_slug' => 'advanced' ,
'toggle_slug' => 'image' ,
),
),
'image' => array (
'css' => array (
'main' => " { $this -> main_css_element } .commentlist img.avatar " ,
),
),
);
$this -> custom_css_fields = array (
'main_header' => array (
'label' => esc_html__ ( 'Comments Count' , 'et_builder' ),
'selector' => 'h1#comments' ,
),
'comment_body' => array (
'label' => esc_html__ ( 'Comment Body' , 'et_builder' ),
'selector' => '.comment-body' ,
),
'comment_meta' => array (
'label' => esc_html__ ( 'Comment Meta' , 'et_builder' ),
'selector' => '.comment_postinfo' ,
),
'comment_content' => array (
'label' => esc_html__ ( 'Comment Content' , 'et_builder' ),
'selector' => '.comment_area .comment-content' ,
),
'comment_avatar' => array (
'label' => esc_html__ ( 'Comment Avatar' , 'et_builder' ),
'selector' => '.comment_avatar' ,
),
'reply_button' => array (
'label' => esc_html__ ( 'Reply Button' , 'et_builder' ),
'selector' => '.comment-reply-link.et_pb_button' ,
),
'new_title' => array (
'label' => esc_html__ ( 'New Comment Title' , 'et_builder' ),
'selector' => 'h3#reply-title' ,
),
'message_field' => array (
'label' => esc_html__ ( 'Message Field' , 'et_builder' ),
'selector' => '.comment-form-comment textarea#comment' ,
),
'name_field' => array (
'label' => esc_html__ ( 'Name Field' , 'et_builder' ),
'selector' => '.comment-form-author input' ,
),
'email_field' => array (
'label' => esc_html__ ( 'Email Field' , 'et_builder' ),
'selector' => '.comment-form-email input' ,
),
'website_field' => array (
'label' => esc_html__ ( 'Website Field' , 'et_builder' ),
'selector' => '.comment-form-url input' ,
),
'submit_button' => array (
'label' => esc_html__ ( 'Submit Button' , 'et_builder' ),
'selector' => '.form-submit .et_pb_button#et_pb_submit' ,
),
);
$this -> help_videos = array (
array (
'id' => 'k6vskmOxM4U' ,
'name' => esc_html__ ( 'An introduction to the Comments module' , 'et_builder' ),
),
);
}
function get_fields () {
$fields = array (
'show_avatar' => array (
'label' => esc_html__ ( 'Show Author Avatar' , 'et_builder' ),
'description' => esc_html__ ( 'Disabling the author avatar will remove the profile picture from the module.' , 'et_builder' ),
'type' => 'yes_no_button' ,
'option_category' => 'configuration' ,
'options' => array (
'on' => et_builder_i18n ( 'Yes' ),
'off' => et_builder_i18n ( 'No' ),
),
'toggle_slug' => 'elements' ,
'default_on_front' => 'on' ,
'mobile_options' => true ,
'hover' => 'tabs' ,
),
'show_reply' => array (
'label' => esc_html__ ( 'Show Reply Button' , 'et_builder' ),
'description' => esc_html__ ( 'Disabling the reply button will prevent visitors from creating threaded comments.' , 'et_builder' ),
'type' => 'yes_no_button' ,
'option_category' => 'configuration' ,
'options' => array (
'on' => et_builder_i18n ( 'Yes' ),
'off' => et_builder_i18n ( 'No' ),
),
'toggle_slug' => 'elements' ,
'default_on_front' => 'on' ,
'mobile_options' => true ,
'hover' => 'tabs' ,
),
'show_count' => array (
'label' => esc_html__ ( 'Show Comment Count' , 'et_builder' ),
'description' => esc_html__ ( 'Disabling the comment count will remove the number of comments from the top of the module.' , 'et_builder' ),
'type' => 'yes_no_button' ,
'option_category' => 'configuration' ,
'options' => array (
'on' => et_builder_i18n ( 'Yes' ),
'off' => et_builder_i18n ( 'No' ),
),
'toggle_slug' => 'elements' ,
'default_on_front' => 'on' ,
'mobile_options' => true ,
'hover' => 'tabs' ,
),
2021-12-20 18:06:11 +00:00
'show_meta' => array (
'label' => esc_html__ ( 'Show Meta' , 'et_builder' ),
'type' => 'yes_no_button' ,
'option_category' => 'configuration' ,
'options' => array (
'on' => esc_html__ ( 'Yes' , 'et_builder' ),
'off' => esc_html__ ( 'No' , 'et_builder' ),
),
'default_on_front' => 'on' ,
'toggle_slug' => 'elements' ,
'description' => esc_html__ ( 'Turn meta on or off.' , 'et_builder' ),
'mobile_options' => true ,
'hover' => 'tabs' ,
),
2021-12-07 11:08:05 +00:00
);
return $fields ;
}
/**
* Get comments markup for comments module
*
* @ since 4.0 . 9 Add custom form title heading level .
*
* @ param { string } $header_level
* @ param { string } $form_title_level
*
* @ return string of comment section markup
*/
static function get_comments ( $header_level , $form_title_level ) {
global $et_pb_comments_print , $et_comments_header_level , $et_comments_form_title_level ;
// Globally flag that comment module is being printed
$et_pb_comments_print = true ;
// set custom header level for comments form
$et_comments_header_level = $header_level ;
$et_comments_form_title_level = $form_title_level ;
// remove filters to make sure comments module rendered correctly if the below filters were applied earlier.
remove_filter ( 'get_comments_number' , '__return_zero' );
remove_filter ( 'comments_open' , '__return_false' );
remove_filter ( 'comments_array' , '__return_empty_array' );
// Custom action before calling comments_template.
do_action ( 'et_fb_before_comments_template' );
ob_start ();
comments_template ( '' , true );
$comments_content = ob_get_contents ();
ob_end_clean ();
// Custom action after calling comments_template.
do_action ( 'et_fb_after_comments_template' );
// Globally flag that comment module has been printed
$et_pb_comments_print = false ;
$et_comments_header_level = '' ;
return $comments_content ;
}
/**
* Action and filter hooks that are called before comment content rendering . These are
* abstracted into method so module which extends comment module can modify these
*
* @ since 3.29
*/
function before_comments_content () {
// Modify the comments request to make sure it's unique.
// Otherwise WP generates SQL error and doesn't allow multiple comments sections on single page
add_action ( 'pre_get_comments' , array ( $this , 'et_pb_modify_comments_request' ), 1 );
// include custom comments_template to display the comment section with Divi style
add_filter ( 'comments_template' , array ( $this , 'et_pb_comments_template' ) );
// Modify submit button to be advanced button style ready
add_filter ( 'comment_form_submit_button' , array ( $this , 'et_pb_comments_submit_button' ) );
}
/**
* Comment content rendering . These are abstracted into method so module which extends comment
* module can modify these
*
* @ since 3.29
* @ since 4.0 . 9 Add form title heading level .
*/
function get_comments_content () {
$header_level = et_ () -> array_get ( $this -> props , 'header_level' );
$form_title_level = et_ () -> array_get ( $this -> props , 'title_level' );
$header_level_processed = et_pb_process_header_level ( $header_level , 'h1' );
$form_title_level_processed = et_pb_process_header_level ( $form_title_level , 'h3' );
return self :: get_comments ( $header_level_processed , $form_title_level_processed );
}
/**
* Action and filter hooks that are called after comment content rendering . These are
* abstracted into method so module which extends comment module can modify these
*/
function after_comments_content () {
// remove all the actions and filters to not break the default comments section from theme
remove_filter ( 'comments_template' , array ( $this , 'et_pb_comments_template' ) );
remove_action ( 'pre_get_comments' , array ( $this , 'et_pb_modify_comments_request' ), 1 );
}
function et_pb_comments_template () {
return realpath ( dirname ( __FILE__ ) . '/..' ) . '/comments_template.php' ;
}
function et_pb_comments_submit_button ( $submit_button ) {
return sprintf (
'<button name="%1$s" type="submit" id="%2$s" class="%3$s">%4$s</button>' ,
esc_attr ( 'submit' ),
esc_attr ( 'et_pb_submit' ),
esc_attr ( 'submit' ),
esc_html__ ( 'Submit Comment' , 'et_builder' )
);
}
function et_pb_modify_comments_request ( $params ) {
// modify the request parameters the way it doesn't change the result just to make request with unique parameters
$params -> query_vars [ 'type__not_in' ] = 'et_pb_comments_random_type_' . $this -> et_pb_unique_comments_module_class ;
}
/**
* Renders the module output .
*
* @ param array $attrs List of attributes .
* @ param string $content Content being processed .
* @ param string $render_slug Slug of module that is used for rendering output .
*
* @ return string
*/
public function render ( $attrs , $content , $render_slug ) {
$multi_view = et_pb_multi_view_options ( $this );
$button_custom = $this -> props [ 'custom_button' ];
$show_avatar = $this -> props [ 'show_avatar' ];
$show_reply = $this -> props [ 'show_reply' ];
$show_count = $this -> props [ 'show_count' ];
2021-12-20 18:06:11 +00:00
$show_meta = $this -> props [ 'show_meta' ];
$show_rating = et_ () -> array_get ( $this -> props , 'show_rating' , '' );
2021-12-07 11:08:05 +00:00
$header_level = $this -> props [ 'header_level' ];
$video_background = $this -> video_background ();
$parallax_image_background = $this -> get_parallax_image_background ();
$custom_icon_values = et_pb_responsive_options () -> get_property_values ( $this -> props , 'button_icon' );
$custom_icon = isset ( $custom_icon_values [ 'desktop' ] ) ? $custom_icon_values [ 'desktop' ] : '' ;
$custom_icon_tablet = isset ( $custom_icon_values [ 'tablet' ] ) ? $custom_icon_values [ 'tablet' ] : '' ;
$custom_icon_phone = isset ( $custom_icon_values [ 'phone' ] ) ? $custom_icon_values [ 'phone' ] : '' ;
$this -> et_pb_unique_comments_module_class = ET_Builder_Element :: get_module_order_class ( $render_slug ); // use this variable to make the comments request unique for each module instance
// Action & filter hooks before comment content rendering
$this -> before_comments_content ();
// Comment content rendering
$comments_content = $this -> get_comments_content ();
// Action & filter hooks after comment content rendering
$this -> after_comments_content ();
// Image - CSS Filters.
if ( et_ () -> array_get ( $this -> advanced_fields , 'image.css' , false ) ) {
$this -> add_classname (
$this -> generate_css_filters (
$this -> slug ,
'child_' ,
et_ () -> array_get ( $this -> advanced_fields [ 'image' ][ 'css' ], 'main' , '%%order_class%%' )
)
);
}
$comments_custom_icon = 'on' === $button_custom ? $custom_icon : '' ;
$comments_custom_icon_tablet = 'on' === $button_custom ? $custom_icon_tablet : '' ;
$comments_custom_icon_phone = 'on' === $button_custom ? $custom_icon_phone : '' ;
// Background layout data attributes.
$data_background_layout = et_pb_background_layout_options () -> get_background_layout_attrs ( $this -> props );
// Module classname
$this -> add_classname (
array (
'et_pb_comments_module' ,
$this -> get_text_orientation_classname (),
)
);
// Background layout class names.
$background_layout_class_names = et_pb_background_layout_options () -> get_background_layout_class ( $this -> props );
$this -> add_classname ( $background_layout_class_names );
if ( 'off' === $show_avatar ) {
$this -> add_classname ( 'et_pb_no_avatar' );
}
if ( 'off' === $show_reply ) {
$this -> add_classname ( 'et_pb_no_reply_button' );
}
if ( 'off' === $show_count ) {
$this -> add_classname ( 'et_pb_no_comments_count' );
}
2021-12-20 18:06:11 +00:00
if ( 'off' === $show_meta ) {
$this -> add_classname ( 'et_pb_no_comments_meta' );
}
if ( 'off' === $show_rating ) {
$this -> add_classname ( 'et_pb_no_comments_rating' );
}
2021-12-07 11:08:05 +00:00
// Removed automatically added classname
$this -> remove_classname ( $render_slug );
$multi_view_data_attr = $multi_view -> render_attrs (
array (
'classes' => array (
2021-12-20 18:06:11 +00:00
'et_pb_no_avatar' => array (
2021-12-07 11:08:05 +00:00
'show_avatar' => 'off' ,
),
2021-12-20 18:06:11 +00:00
'et_pb_no_reply_button' => array (
2021-12-07 11:08:05 +00:00
'show_reply' => 'off' ,
),
2021-12-20 18:06:11 +00:00
'et_pb_no_comments_count' => array (
2021-12-07 11:08:05 +00:00
'show_count' => 'off' ,
),
2021-12-20 18:06:11 +00:00
'et_pb_no_comments_meta' => array (
'show_meta' => 'off' ,
),
/* WooCommerce Reviews Module uses the following class. */
'et_pb_no_comments_rating' => array (
'show_rating' => 'off' ,
),
2021-12-07 11:08:05 +00:00
),
)
);
$output = sprintf (
' < div % 3 $s class = " %2 $s " % 4 $s % 7 $s % 8 $s % 9 $s % 10 $s >
% 5 $s
% 6 $s
% 1 $s
</ div > ' ,
$comments_content ,
$this -> module_classname ( $render_slug ),
$this -> module_id (),
'' !== $comments_custom_icon ? sprintf ( ' data-icon="%1$s"' , esc_attr ( et_pb_process_font_icon ( $comments_custom_icon ) ) ) : '' ,
$video_background , // #5
$parallax_image_background ,
et_core_esc_previously ( $data_background_layout ),
'' !== $comments_custom_icon_tablet ? sprintf ( ' data-icon-tablet="%1$s"' , esc_attr ( et_pb_process_font_icon ( $comments_custom_icon_tablet ) ) ) : '' ,
'' !== $comments_custom_icon_phone ? sprintf ( ' data-icon-phone="%1$s"' , esc_attr ( et_pb_process_font_icon ( $comments_custom_icon_phone ) ) ) : '' ,
$multi_view_data_attr // #10
);
return $output ;
}
}
if ( et_builder_should_load_all_module_data () ) {
new ET_Builder_Module_Comments ();
}
if ( et_is_woocommerce_plugin_active () && defined ( 'ET_BUILDER_DIR' ) ) {
// Use separate files for better organization.
require_once ET_BUILDER_DIR . 'module/woocommerce/Reviews.php' ;
}