File "hustle-renderer-sshare.php"
Full Path: /home/londdqdw/public_html/06/wp-content/plugins/wordpress-popup/inc/front/hustle-renderer-sshare.php
File size: 12.35 KB
MIME-type: text/x-php
Charset: utf-8
<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
/**
* Hustle_Renderer_Sshare
*
* @package Hustle
*/
/**
* Class Hustle_Renderer_Sshare
* Used to render Social sharing modules.
*
* @since 4.0
*/
class Hustle_Renderer_Sshare extends Hustle_Renderer_Abstract {
/**
* Get the content container tag.
*
* @since 4.0
* @param string $subtype Sub type.
* @param string $custom_classes Custom classes.
* @return string
*/
protected function get_wrapper_main( $subtype, $custom_classes ) {
$module_id = $this->module->module_id;
$display = $this->module->display;
// Tracking enabled data.
$tracking_enabled_data = $this->module->is_tracking_enabled( $subtype ) ? 'enabled' : 'disabled';
// Type of module
// Applies for all except "float" modules.
$module_type = 'inline';
// Main data attributes for module.
$module_data = sprintf(
'
data-id="%s"
data-render-id="%d"
data-tracking="%s"
data-sub-type="%s"
',
esc_attr( $module_id ),
self::$render_ids[ $module_id ],
esc_attr( $tracking_enabled_data ),
esc_attr( $subtype )
);
// If this instance is a floating module.
// This happens when floating is enabled in either desktop or mobile.
if ( Hustle_SShare_Model::FLOAT_MODULE === $subtype ) {
$module_type = 'float';
// Check if the module has floating active for desktop.
if ( self::$is_preview ) {
$module_data .= 'data-desktop="true"';
} elseif ( $this->module->is_display_type_active( Hustle_SShare_Model::FLOAT_DESKTOP ) ) {
$offset = 'css_selector' === $display->float_desktop_offset ? 'selector' : $display->float_desktop_offset;
$selector = 'selector' === $offset ? trim( $display->float_desktop_css_selector ) : '';
$position_x = $display->float_desktop_position;
$position_y = $display->float_desktop_position_y;
$module_data .= sprintf(
'
data-desktop="true"
data-desktop-offset="%s"
data-desktop-selector="%s"
data-desktop-positionX="%s"
data-desktop-positionY="%s"
',
esc_attr( $offset ),
esc_attr( $selector ),
esc_attr( $position_x ),
esc_attr( $position_y )
);
} else {
$module_data .= 'data-desktop="false"';
}
// Check if the module has floating active for mobile.
if ( $this->module->is_display_type_active( Hustle_SShare_Model::FLOAT_MOBILE ) ) {
$offset = 'css_selector' === $display->float_mobile_offset ? 'selector' : $display->float_mobile_offset;
$selector = 'selector' === $offset ? trim( $display->float_mobile_css_selector ) : '';
$position_x = $display->float_mobile_position;
$position_y = $display->float_mobile_position_y;
$module_data .= sprintf(
'
data-mobiles="true"
data-mobiles-offset="%s"
data-mobiles-selector="%s"
data-mobiles-positionX="%s"
data-mobiles-positionY="%s"
',
esc_attr( $offset ),
esc_attr( $selector ),
esc_attr( $position_x ),
esc_attr( $position_y )
);
} else {
$module_data .= 'data-mobiles="false"';
}
} else {
$module_data .= sprintf(
'
data-delay="%s"
data-intro="%s"
',
'0',
'no_animation'
);
if ( Hustle_SShare_Model::INLINE_MODULE === $subtype ) {
$module_data .= sprintf(
'data-alignment="%s"',
esc_attr( $display->inline_align )
);
}
}
$inline_style = ! self::$is_preview ? 'style="opacity:0;"' : 'style="opacity:1;"';
if ( self::$is_preview ) {
$custom_classes .= ' hustle-displaying-in-large';
}
$html = sprintf(
'<div class="hustle-ui hustle-%s hustle_module_id_%d %s" %s %s>',
esc_attr( $module_type ),
$this->module->module_id,
esc_attr( $custom_classes ),
$module_data,
$inline_style
);
return $html;
}
/**
* Get the wrapper content.
*
* @since 4.0
*
* @param string $subtype Sub type.
* @return string
*/
protected function get_wrapper_content( $subtype ) {
$module_type = 'inline';
if ( Hustle_SShare_Model::FLOAT_MODULE === $subtype ) {
$module_type = 'float';
}
$html = sprintf(
'<div class="hustle-%s-content">',
$module_type
);
return $html;
}
/**
* Get the body content.
*
* @since 4.0
*
* @param string $subtype Sub type.
* @return string
*/
protected function get_module_body( $subtype ) {
$html = '';
$module_id = $this->module->module_id;
// Prevent php error messages on wizard preview when no services are active.
$content = $this->module->content;
$display = $this->module->display;
$design = $this->module->design;
$icons_design = $design->icon_style;
$icons_custom_color = 'false';
$icons_grid_desktop = 'inline';
$icons_grid_mobiles = 'inline';
$icons_counter = 'none';
$icons_animated = false;
$icons_animation = 'zoom';
if ( 'flat' === $icons_design ) {
$icons_design = 'default';
} elseif ( 'outline' === $icons_design ) {
$icons_design = 'outlined';
}
if ( Hustle_SShare_Model::FLOAT_MODULE === $subtype ) {
// Check if icons custom color is enabled.
$icons_custom_color = ( '1' === $design->floating_customize_colors ) ? 'true' : 'false';
// Check if the module has floating active for desktop.
if ( $this->module->is_display_type_active( Hustle_SShare_Model::FLOAT_DESKTOP ) ) {
$position_x = $display->float_desktop_position;
$position_y = $display->float_desktop_position_y;
if ( 'center' !== $display->float_desktop_position ) {
$icons_grid_desktop = 'stacked';
}
if ( 'center' === $position_x ) {
if ( 'top' === $position_y ) {
$icons_animation = 'bounceDownUp';
} else {
$icons_animation = 'bounceUpDown';
}
}
}
// Check if the module has floating active for mobile.
if ( $this->module->is_display_type_active( Hustle_SShare_Model::FLOAT_MOBILE ) ) {
$position_x = $display->float_mobile_position;
$position_y = $display->float_mobile_position_y;
if ( 'center' !== $display->float_mobile_position ) {
$icons_grid_mobiles = 'stacked';
}
if ( 'center' === $position_x ) {
if ( 'top' === $position_y ) {
$icons_animation = 'bounceDownUp';
} else {
$icons_animation = 'bounceUpDown';
}
}
}
if ( self::$is_preview ) {
$icons_grid_desktop = 'stacked';
$icons_grid_mobiles = 'stacked';
}
// Check if counter is enabled.
if ( '1' === $content->counter_enabled ) {
$icons_counter = ( '1' === $design->floating_inline_count ) ? 'inline' : 'stacked';
}
// Check if icons are animated.
if ( '1' === $design->floating_animate_icons ) {
$icons_animated = true;
}
} else {
// Check if icons custom color is enabled.
$icons_custom_color = ( '1' === $design->widget_customize_colors ) ? 'true' : 'false';
// Check if counter is enabled.
if ( '1' === $content->counter_enabled ) {
$icons_counter = ( '1' === $design->widget_inline_count ) ? 'inline' : 'stacked';
}
// Check if icons are animated.
if ( '1' === $design->widget_animate_icons ) {
$icons_animated = true;
}
}
$html .= sprintf(
'<div class="hustle-social hustle-social--%s" data-custom="%s" data-grid-desktop="%s" data-grid-mobiles="%s">',
esc_attr( $icons_design ),
esc_attr( $icons_custom_color ),
esc_attr( $icons_grid_desktop ),
esc_attr( $icons_grid_mobiles )
);
$html .= sprintf(
'<ul class="hustle-counter--%s%s"%s>',
esc_attr( $icons_counter ),
( true === $icons_animated ? ' hustle-animated' : '' ),
( true === $icons_animated ? ' data-animation="' . esc_attr( $icons_animation ) . '"' : '' )
);
$social_icons = $content->social_icons;
/**
* Filters the icons to be shown.
* Here you can add custom icons to be printed. It only works for networks
* using custom links (non-native ones), and without counters.
* The icon and visual attributes must be handled via custom CSS.
*
* @since 4.1.2
*
* @param array $social_icons {
* Selected social networks for the module.
* Contains an array for each platform. The platform's slug is the key of its array.
* The array for each platform must contain:
*
* @type string 'platform' The network's slug. Same as the array key. Lowercase, no spaces nor special chars.
* @type string 'label' The network's display name.
* @type string 'type' click|native Whether the counter would be retrieved from clicks or an API. Use 'click'.
* @type string 'link' The URL to which the user will go when clicking the icon. Required if a sharing
* endpoint isn't especified in the filter @see hustle_native_share_enpoints.
* @type int 'counter' The default number for the counter. This will be static, it won't increase for now.
* }
*/
$social_icons = apply_filters( 'hustle_social_sharing_get_selected_networks', $social_icons, $this->module );
// Extra indentation to mimic html tree.
if ( ! empty( $social_icons ) ) {
foreach ( $social_icons as $icon => $data ) {
$type = isset( $data['type'] ) ? $data['type'] : '';
$label = isset( $data['label'] ) ? $data['label'] : '';
$link = isset( $data['link'] ) ? $data['link'] : '';
if ( 'facebook' === $data['platform'] ) {
$type = 'click';
}
if ( '' === $link && 'email' !== $icon ) {
$href_value = 'href="#"';
$link_type = 'native';
} else {
// Check if is email to insert mailto.
if ( 'email' === $icon ) {
$query_args = array(
'subject' => rawurlencode( Opt_In_Utils::replace_global_placeholders( $data['title'] ) ),
'body' => rawurlencode( Opt_In_Utils::replace_global_placeholders( $data['message'] ) ),
);
$mail_url = add_query_arg( $query_args, 'mailto:' );
$href_value = 'href="' . esc_url( $mail_url ) . '"';
$title = apply_filters( 'hustle_social_share_platform_title', rawurlencode( html_entity_decode( esc_html( get_the_title() ) ) ) );
} else {
$link = apply_filters( 'hustle_social_share_custom_link', $link, $data, $this->module );
$href_value = 'href="' . esc_url( $link ) . '" target="_blank" rel="noopener"';
}
$link_type = 'custom';
}
if ( 'fivehundredpx' === $icon ) {
$icon = '500px';
$network = 'fivehundredpx';
} else {
$network = $icon;
}
$html .= '<li>';
$html .= sprintf(
'<a %1$s class="hustle-share-icon hustle-share--%2$s" data-network="%3$s" data-counter="%4$s" data-link="%5$s" data-count="%6$s">',
$href_value,
esc_attr( $icon ),
esc_attr( $network ),
'0' === $content->counter_enabled ? 'none' : esc_attr( $type ),
esc_attr( $link_type ),
esc_attr( $data['counter'] )
);
$html .= sprintf(
'<i class="hustle-icon-social-%s" aria-hidden="true"></i>',
esc_attr( $icon )
);
if ( '1' === $content->counter_enabled ) {
if ( 'native' === $type && ! self::$is_preview ) {
$counter_content = '<i class="hustle-icon-loader hustle-loading-icon" aria-hidden="true"></i>';
} else {
$counter_content = ( '' !== $data['counter'] ) ? esc_attr( $data['counter'] ) : '0';
}
$html .= sprintf(
'<span class="hustle-counter" aria-hidden="true">%s</span>',
$counter_content
);
}
$html .= sprintf(
'<span class="hustle-screen-reader">Share on %s</span>',
esc_html( $label )
);
$html .= '</a>';
$html .= '</li>';
}
}
$html .= '</ul>';
$html .= '</div>';
return $html;
}
/**
* Handle AJAX display
*
* @since 4.0
* @param Hustle_Sshare_Model $module Module.
* @param array $data Data.
* @param bool $is_preview Is preview.
* @return string
*/
public function ajax_display( Hustle_Sshare_Model $module, $data = array(), $is_preview = true ) {
self::$is_preview = $is_preview;
if ( ! empty( $data ) ) {
$this->module = $module->load_preview( $data );
} else {
$this->module = $module->load();
}
$response = array(
'style' => array(),
'script' => array(),
'module' => $this->module,
);
$response['floatingHtml'] = $this->get_module( Hustle_SShare_Model::FLOAT_MODULE, 'hustle-show', $is_preview );
$response['widgetHtml'] = $this->get_module( Hustle_SShare_Model::WIDGET_MODULE, 'hustle-show', $is_preview );
// This might be used later for ajax loading.
ob_start();
$this->print_styles( $is_preview );
$styles = ob_get_clean();
$response['style'] = $styles;
return $response;
}
}