Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
fancy-facebook-comments
/
public
:
class-fancy-facebook-comments-public.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php /** * Contains functions responsible for functionality at front-end of website * * @since 1.0 * */ /** * This class defines all code necessary for functionality at front-end of website * * @since 1.0 * */ class Fancy_Facebook_Comments_Public { /** * Options saved in database. * * @since 1.0 */ private $options; /** * Current version of the plugin. * * @since 1.0 */ private $version; /** * Get saved options. * * @since 1.0 * @param array $options Plugin options saved in database * @param string $version Current version of the plugin */ public function __construct( $options, $version ) { $this->options = $options; $this->version = $version; } /** * Get http/https protocol at the website * * @since 1.0 */ public function get_http_protocol() { if ( isset( $_SERVER['HTTPS'] ) && ! empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] != 'off' ) { return "https://"; } else { return "http://"; } } /** * Render Facebook Comments at posts/pages * * @since 1.1.1 */ public function render_facebook_comments_at_posts() { add_filter( 'the_content', array( $this, 'render_facebook_comments' ), intval( $this->options['priority'] ) ); add_filter( 'the_excerpt', array( $this, 'render_facebook_comments' ), intval( $this->options['priority'] ) ); } /** * Return Facebook Comments HTML * * @since 1.2.8 */ public function facebook_comments_amp_html( $post_url ) { $amp_html = '<script async custom-element="amp-facebook-comments" src="https://cdn.ampproject.org/v0/amp-facebook-comments-0.1.js"></script><amp-facebook-comments height="657" width="700" data-locale="' . ( $this->options["comment_lang"] != "" ? esc_attr( $this->options["comment_lang"] ) : "en_GB" ) . '" data-numposts="' . ( $this->options["comment_numposts"] != "" ? esc_attr( $this->options["comment_numposts"] ) : "" ) . '" data-order-by="' . ( $this->options["comment_orderby"] != "" ? esc_attr( $this->options["comment_orderby"] ) : "" ) . '" layout="responsive" data-href="' . esc_url_raw( $post_url ) . '"></amp-facebook-comments>'; return $amp_html; } /** * Enable Facebook Comments at selected pages * * @since 1.0 */ public function render_facebook_comments( $content ) { global $post; if ( ! $post ) { return $content; } $post_meta = get_post_meta( $post->ID, '_heateor_ffc_meta', true ); if ( isset( $post_meta['facebook_comments'] ) && $post_meta['facebook_comments'] == 1 && ( ! is_front_page() || ( is_front_page() && 'page' == get_option( 'show_on_front' ) ) ) ) { return $content; } $bp_activity = false; if ( current_filter() == 'bp_activity_entry_meta' ) { if ( isset( $this->options['bp_activity'] ) ) { $bp_activity = true; } } $post_types = get_post_types( array( 'public' => true ), 'names', 'and' ); $post_types = array_diff( $post_types, array( 'post', 'page' ) ); // default post url $post_url = get_permalink( $post->ID ); if ( $bp_activity ) { $post_url = bp_get_activity_thread_permalink(); } else { if ( $this->options['url_to_comment'] == 'default' ) { $post_url = get_permalink( $post->ID ); if ( $post_url == '' ) { $post_url = html_entity_decode( esc_url( $this->get_http_protocol() . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ) ); } } elseif ( $this->options['url_to_comment'] == 'home' ) { $post_url = home_url(); } elseif ( $this->options['url_to_comment'] == 'custom' ) { $post_url = $this->options['url_to_comment_custom'] ? $this->options['url_to_comment_custom'] : get_permalink( $post->ID ); } } $facebook_comments_style = '<style type="text/css">.fb-comments,.fb-comments span,.fb-comments span iframe[style]{min-width:100%!important;width:100%!important}</style><div id="fb-root"></div>'; $post_url = $this->generate_facebook_comments_url( $post_url ); if ( $this->is_amp_page() ) { $facebook_comments_html = $this->facebook_comments_amp_html( $post_url ); } else { $facebook_comments_html = $this->facebook_comments_html( $post_url ); } $container_style = 'width:100%;text-align:' . $this->options['title_alignment'] . ';'; if ( $this->options['bg_color'] ) { $container_style .= 'background-color:' . $this->options['bg_color'] . ';'; } $title_style = 'padding:10px;'; if ( $this->options['title_font_size'] ) { $title_style .= 'font-size:' . $this->options['title_font_size'] . 'px;'; } if ( $this->options['title_font_family'] ) { $title_style .= 'font-family:' . $this->options['title_font_family'] . ';'; } if ( $this->options['title_color'] ) { $title_style .= 'color:' . $this->options['title_color'] . ';'; } $horizontal_div = "<div class='heateorFfcClear'></div><div style='" . $container_style . "' class='heateor_ffc_facebook_comments'>"; if ( ! $this->is_amp_page() ) { $horizontal_div .= "<" . esc_html( $this->options['heading_tag'] ) . " class='heateor_ffc_facebook_comments_title' style='" . esc_attr( $title_style ) . "' >" . esc_html( ucfirst( get_option( 'heateor_ffc' )['commenting_label'] ) ) . "</" . esc_html( $this->options['heading_tag'] ) . ">"; } $horizontal_div .= $facebook_comments_html . "</div><div class='heateorFfcClear'></div>"; if ( $bp_activity ) { echo $horizontal_div; } // show Facebook Comments box if ( ( isset( $this->options['home'] ) && is_front_page() ) || ( isset( $this->options['category'] ) && is_category() ) || ( isset( $this->options['archive'] ) && is_archive() ) || ( isset( $this->options['post'] ) && is_single() && isset( $post->post_type ) && $post->post_type == 'post' ) || ( isset( $this->options['page'] ) && is_page() && isset( $post->post_type ) && $post->post_type == 'page' ) || ( isset( $this->options['excerpt'] ) && (is_home() || current_filter() == 'the_excerpt' ) ) || ( isset( $this->options['bb_reply'] ) && current_filter() == 'bbp_get_reply_content' ) || ( isset( $this->options['bb_forum'] ) && ( isset( $this->options['top'] ) && current_filter() == 'bbp_template_before_single_forum' || isset( $this->options['bottom'] ) && current_filter() == 'bbp_template_after_single_forum' ) ) || ( isset( $this->options['bb_topic'] ) && ( isset( $this->options['top'] ) && in_array( current_filter(), array( 'bbp_template_before_single_topic', 'bbp_template_before_lead_topic' ) ) || isset( $this->options['bottom'] ) && in_array( current_filter(), array( 'bbp_template_after_single_topic', 'bbp_template_after_lead_topic' ) ) ) ) || ( isset( $this->options['woocom_shop'] ) && current_filter() == 'woocommerce_after_shop_loop_item' ) || ( isset( $this->options['woocom_product'] ) && current_filter() == 'woocommerce_share' ) || ( isset( $this->options['woocom_thankyou'] ) && current_filter() == 'woocommerce_thankyou' ) || (current_filter() == 'bp_before_group_header' && isset( $this->options['bp_group'] ) ) ) { if ( in_array( current_filter(), array( 'bbp_template_before_single_topic', 'bbp_template_before_lead_topic', 'bbp_template_before_single_forum', 'bbp_template_after_single_topic', 'bbp_template_after_lead_topic', 'bbp_template_after_single_forum', 'woocommerce_after_shop_loop_item', 'woocommerce_share', 'woocommerce_thankyou', 'bp_before_group_header' ) ) ) { echo '<div class="heateorFfcClear"></div>' . $horizontal_div . '<div class="heateorFfcClear"></div>'; } else { if ( isset( $this->options['top'] ) && isset( $this->options['bottom'] ) ) { $content = $horizontal_div . '<br/>' . $content . '<br/>' . $horizontal_div; } else { if ( isset( $this->options['top'] ) ) { $content = $horizontal_div . $content; } elseif ( isset( $this->options['bottom'] ) ) { $content = $content . $horizontal_div; } } $content = $facebook_comments_style . $content; } } elseif ( count( $post_types ) ) { foreach ( $post_types as $post_type ) { if ( isset( $this->options[$post_type] ) && ( is_single() || is_page() ) && isset( $post->post_type ) && $post->post_type == $post_type ) { if ( isset( $this->options['top'] ) && isset( $this->options['bottom'] ) ) { $content = $horizontal_div . '<br/>' . $content . '<br/>' . $horizontal_div; } else { if ( isset( $this->options['top'] ) ) { $content = $horizontal_div . $content; } elseif ( isset( $this->options['bottom'] ) ) { $content = $content . $horizontal_div; } } $content = $facebook_comments_style . $content; } } } return $content; } /** * Generate url to load Facebook Comments for * * @since 1.2.3 */ public function generate_facebook_comments_url( $post_url ) { global $post; if ( $this->options['qs_params'] ) { $qs_params = explode( ',', $this->options['qs_params'] ); foreach ( $qs_params as $key => $val ) { $qs_params[$key] = trim( $val ); } $post_url = remove_query_arg( $qs_params, $post_url ); } return apply_filters( 'heateor_ffc_facebook_comments_target_url', $post_url, $post ); } /** * Show opt-in for Facebook Comments Moderation add-on * * @since 1.1.5 */ public function facebook_comments_moderation_optin() { global $heateor_fcm_options; if ( defined( 'HEATEOR_FB_COM_MOD_VERSION' ) && version_compare( '1.2.4', HEATEOR_FB_COM_MOD_VERSION ) < 0 && isset( $heateor_fcm_options['gdpr_enable'] ) ) { return '<div class="heateor_ss_fb_comments_optin_container"><label><input type="checkbox" class="heateor_ss_fb_comments_optin" value="1" />' . str_replace( $heateor_fcm_options['ppu_placeholder'], '<a href="'. $heateor_fcm_options['privacy_policy_url'] .'" target="_blank">' . $heateor_fcm_options['ppu_placeholder'] . '</a>', wp_strip_all_tags( $heateor_fcm_options['privacy_policy_optin_text'] ) ) . '</label></div>'; } return ''; } /** * Show opt-in for Facebook Comments Notifier add-on * * @since 1.1.5 */ public function facebook_comments_notifier_optin() { global $heateor_fcn_options; if ( defined( 'HEATEOR_FB_COM_NOT_VERSION' ) && version_compare( '1.1.6', HEATEOR_FB_COM_NOT_VERSION ) < 0 && isset( $heateor_fcn_options['gdpr_enable'] ) ) { return '<div class="heateor_ss_fb_comments_notifier_optin_container"><label><input type="checkbox" class="heateor_ss_fb_comments_notifier_optin" value="1" />' . str_replace( $heateor_fcn_options['ppu_placeholder'], '<a href="' . $heateor_fcn_options['privacy_policy_url'] . '" target="_blank">' . $heateor_fcn_options['ppu_placeholder'] . '</a>', wp_strip_all_tags( $heateor_fcn_options['privacy_policy_optin_text'] ) ) . '</label></div>'; } return ''; } /** * Script for GDPR optin of Facebook Comments Moderation add-on * * @since 1.1.5 */ public function facebook_comments_moderation_optin_script() { if ( defined( 'HEATEOR_FB_COM_MOD_VERSION' ) && version_compare( '1.2.3', HEATEOR_FB_COM_MOD_VERSION ) < 0 ) { return '<script type="text/javascript">jQuery(window).load(function(){jQuery("input.heateor_ss_fb_comments_optin").click(function(){if(jQuery(this).is(":checked")){heateorFcmOptin=1}else heateorFcmOptin=0});});</script>'; } return ''; } /** * Script for GDPR optin of Facebook Comments Notifier add-on * * @since 1.1.5 */ public function facebook_comments_notifier_optin_script() { if ( defined( 'HEATEOR_FB_COM_NOT_VERSION' ) && version_compare( '1.1.5', HEATEOR_FB_COM_NOT_VERSION ) < 0 ) { return '<script type="text/javascript">jQuery(window).load(function(){jQuery("input.heateor_ss_fb_comments_notifier_optin").click(function(){if(jQuery(this).is(":checked")){heateorFcnOptin=1}else heateorFcnOptin=0});});</script>'; } return ''; } /** * Return Facebook Comments HTML * * @since 1.0 */ public function facebook_comments_html( $post_url ) { $commenting_html = ''; if ( ! isset( $this->options['dont_load_sdk'] ) ) { $commenting_html = '<script type="text/javascript">!function(e,n,t){var o,c=e.getElementsByTagName(n)[0];e.getElementById(t)||(o=e.createElement(n),o.id=t,o.src="//connect.facebook.net/' . ( $this->options['comment_lang'] != '' ? $this->options["comment_lang"] : 'en_GB' ) . '/sdk.js#xfbml=1&version=v20.0",c.parentNode.insertBefore(o,c))}(document,"script","facebook-jssdk");</script>'; } $commenting_html .= $this->facebook_comments_moderation_optin(); $commenting_html .= $this->facebook_comments_notifier_optin(); $commenting_html .= '<div class="fb-comments" data-href="' . $post_url . '" data-colorscheme="' . $this->options['theme'] . '" data-numposts="' . ( $this->options['comment_numposts'] != '' ? $this->options["comment_numposts"] : '' ) . '" data-width="' . ( $this->options['comment_width'] != '' ? $this->options["comment_width"] : '100%' ) . '" data-order-by="' . ( $this->options['comment_orderby'] != '' ? $this->options["comment_orderby"] : '' ) . '" ></div>'; $commenting_html .= $this->facebook_comments_moderation_optin_script(); $commenting_html .= $this->facebook_comments_notifier_optin_script(); return $commenting_html; } /** * Inline style to load at front end * * @since 1.1.10 */ public function frontend_inline_style() { if ( isset( $this->options['custom_css'] ) && $this->options['custom_css'] ) { echo '<style type="text/css">' . $this->options['custom_css'] . '</style>'; } } /** * Check if current page is AMP * * @since 1.1.13 */ private function is_amp_page() { if ( ( function_exists( 'is_amp_endpoint' ) && is_amp_endpoint() ) || ( function_exists( 'ampforwp_is_amp_endpoint' ) && ampforwp_is_amp_endpoint() ) ) { return true; } return false; } /** * Load comments for the non-SSL version of SSL urls * * @since 1.2 */ public function custom_target_url( $post_url, $post ) { return str_replace( 'https://', 'http://', $post_url ); } }