Advertisement
arie_cristianD

add sponsored rel atribute

Oct 9th, 2023
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 24.80 KB | None | 0 0
  1. <?php
  2. /**
  3.  * @author : Jegtheme
  4.  */
  5.  
  6. namespace JNews\Module;
  7.  
  8. use JNews\Image\ImageNormalLoad;
  9.  
  10. abstract class ModuleViewAbstract {
  11.     /**
  12.      * @var array
  13.      */
  14.     protected static $instance;
  15.  
  16.     /**
  17.      * Option Field
  18.      *
  19.      * @var array
  20.      */
  21.     protected $options;
  22.  
  23.     /**
  24.      * @var string
  25.      */
  26.     protected $unique_id;
  27.  
  28.     /**
  29.      * Array of attribute
  30.      *
  31.      * @var array
  32.      */
  33.     protected $attribute;
  34.  
  35.     /**
  36.      * @var ModuleManager
  37.      */
  38.     protected $manager;
  39.  
  40.     /**
  41.      * @var string
  42.      */
  43.     protected $class_name;
  44.  
  45.     /**
  46.      * @var ModuleOptionAbstract
  47.      */
  48.     protected $option_class;
  49.  
  50.     /**
  51.      * @var String
  52.      */
  53.     protected $content;
  54.  
  55.     /**
  56.      * @return ModuleViewAbstract
  57.      * @var $manager
  58.      */
  59.     public static function getInstance() {
  60.         $class = get_called_class();
  61.  
  62.         if ( ! isset( self::$instance[ $class ] ) ) {
  63.             self::$instance[ $class ] = new $class();
  64.         }
  65.  
  66.         return self::$instance[ $class ];
  67.     }
  68.  
  69.     /**
  70.      * ModuleViewAbstract constructor.
  71.      */
  72.     protected function __construct() {
  73.         $this->class_name = jnews_get_shortcode_name_from_view( get_class( $this ) );
  74.         $this->manager    = ModuleManager::getInstance();
  75.  
  76.         // set option class
  77.         $class_option       = str_replace( '_View', '_Option', get_class( $this ) );
  78.         $this->option_class = call_user_func( array( $class_option, 'getInstance' ) );
  79.  
  80.         $this->set_options();
  81.     }
  82.  
  83.     private function set_options() {
  84.         $options = $this->option_class->get_options();
  85.  
  86.         foreach ( $options as $option ) {
  87.             $this->options[ $option['param_name'] ] = isset( $option['std'] ) ? $option['std'] : '';
  88.         }
  89.     }
  90.  
  91.     private function compatible_column() {
  92.         return $this->option_class->compatible_column();
  93.     }
  94.  
  95.     public function color_scheme() {
  96.         return $this->attribute['scheme'];
  97.     }
  98.  
  99.     public function get_vc_class_name() {
  100.         $class_name = null;
  101.  
  102.         if ( isset( $this->attribute['css'] ) ) {
  103.             $css_exploded = explode( '{', $this->attribute['css'] );
  104.             $class        = $css_exploded[0];
  105.             $class_name   = substr( $class, 1 );
  106.         }
  107.  
  108.         if ( isset( $this->attribute['boxed'] ) && $this->attribute['boxed'] ) {
  109.             $class_name .= ' jeg_pb_boxed';
  110.         }
  111.         if ( isset( $this->attribute['boxed_shadow'] ) && $this->attribute['boxed_shadow'] ) {
  112.             $class_name .= ' jeg_pb_boxed_shadow';
  113.         }
  114.  
  115.         return $class_name;
  116.     }
  117.  
  118.     public function is_compatible_widget() {
  119.         $column = $this->compatible_column();
  120.         return in_array( 4, $column ) ? true : false;
  121.     }
  122.  
  123.     /**
  124.      * @param $attr
  125.      *
  126.      * @return string
  127.      */
  128.     public function get_module_column_class( $attr ) {
  129.         if ( isset( $attr['column_width'] ) && $attr['column_width'] !== 'auto' ) {
  130.             switch ( $attr['column_width'] ) {
  131.                 case 4:
  132.                     $class_name = 'jeg_col_1o3';
  133.                     break;
  134.                 case 8:
  135.                     $class_name = 'jeg_col_2o3';
  136.                     break;
  137.                 case 12:
  138.                     $class_name = 'jeg_col_3o3';
  139.                     break;
  140.                 default:
  141.                     $class_name = 'jeg_col_3o3';
  142.             }
  143.  
  144.             return $class_name;
  145.         }
  146.         return $this->manager->get_column_class();
  147.  
  148.     }
  149.  
  150.     /**
  151.      * Call from VC to build Module
  152.      *
  153.      * @param $attr
  154.      * @param $content
  155.      *
  156.      * @return string
  157.      */
  158.     public function build_module( $attr, $content = null ) {
  159.         $this->content = $content;
  160.         $this->generate_unique_id();
  161.         $attr = $this->get_attribute( $attr );
  162.         $this->load_vc_icon_elements( $attr );
  163.  
  164.         $column_class = $this->get_module_column_class( $attr );
  165.         $output       = $this->render_module( $attr, $column_class );
  166.  
  167.         if ( ! $this->is_column_compatible() && ( current_user_can( 'editor' ) || current_user_can( 'administrator' ) ) ) {
  168.             $output = $output . $this->render_uncompatible();
  169.         }
  170.  
  171.         do_action( $this->class_name );
  172.  
  173.         return $output;
  174.     }
  175.  
  176.     /**
  177.      * @param $attr
  178.      */
  179.     public function load_vc_icon_elements( $attr ) {
  180.         if ( function_exists( 'vc_icon_element_fonts_enqueue' ) ) {
  181.             $flag        = false;
  182.             $params_icon = array(
  183.                 'header_icon'          => isset( $attr['header_icon'] ) ? $attr['header_icon'] : '',
  184.                 'button_download_icon' => isset( $attr['button_download_icon'] ) ? $attr['button_download_icon'] : '',
  185.                 'button_icon'          => isset( $attr['button_icon'] ) ? $attr['button_icon'] : '',
  186.                 'icon'                 => isset( $attr['icon'] ) ? $attr['icon'] : '',
  187.                 'newsticker_icon'      => isset( $attr['newsticker_icon'] ) ? $attr['newsticker_icon'] : '',
  188.             );
  189.  
  190.             foreach ( $params_icon as $key => $value ) {
  191.                 if ( ! $flag ) {
  192.                     if ( ! empty( $value ) && is_string( $value ) ) {
  193.                         $class = explode( ' ', $value );
  194.                         if ( 'fa' !== $class[0] ) {
  195.                             $flag = true;
  196.                         }
  197.                     }
  198.                 } else {
  199.                     break;
  200.                 }
  201.             }
  202.             if ( $flag ) {
  203.                 vc_icon_element_fonts_enqueue( 'fontawesome' );
  204.             }
  205.         }
  206.     }
  207.  
  208.     /**
  209.      * Render if module is not compatible
  210.      *
  211.      * @return string
  212.      */
  213.     public function render_uncompatible() {
  214.         $compatible = $this->compatible_column();
  215.         $column     = $this->manager->get_current_width();
  216.         $text       = wp_kses( sprintf( __( 'This module works best for column <strong>%s</strong> ( current column width <strong>%s</strong> ). This warning will only show if you login as Admin.', 'jnews' ), implode( ', ', $compatible ), $column ), wp_kses_allowed_html() );
  217.         $element    =
  218.             "<div class=\"alert alert-error alert-compatibility\">
  219.                <strong>" . jnews_return_translation( 'Optimal Column', 'jnews', 'optimal_column' ) . "</strong> {$text}
  220.            </div>";
  221.  
  222.         return $element;
  223.     }
  224.  
  225.     /**
  226.      * Check if column is not compatible
  227.      *
  228.      * @return bool
  229.      */
  230.     public function is_column_compatible() {
  231.         $compatible = $this->compatible_column();
  232.         $column     = $this->manager->get_current_width();
  233.         return $column === null ? true : in_array( $column, $compatible );
  234.     }
  235.  
  236.     /**
  237.      * @return int
  238.      */
  239.     public function get_post_id() {
  240.         global $wp_query;
  241.         return isset( $wp_query->post ) ? $wp_query->post->ID : null;
  242.     }
  243.  
  244.     /**
  245.      * Generate Unique ID For Module
  246.      */
  247.     public function generate_unique_id() {
  248.         $this->unique_id = 'jnews_module_' . $this->get_post_id() . '_' . $this->manager->get_module_count() . '_' . uniqid();
  249.         // need to increase module count
  250.         $this->manager->increase_module_count();
  251.     }
  252.  
  253.     /**
  254.      * Get Unique ID
  255.      */
  256.     public function get_unique_id() {
  257.         return $this->unique_id;
  258.     }
  259.  
  260.     /**
  261.      * Render Widget
  262.      *
  263.      * @param $instance
  264.      */
  265.     public function render_widget( $instance ) {
  266.         if ( $this->is_compatible_widget() ) {
  267.             echo jnews_sanitize_output( $this->build_module( $instance ) );
  268.         }
  269.     }
  270.  
  271.     /**
  272.      * Render VC shortcode
  273.      *
  274.      * @param $attr
  275.      * @param $content
  276.      *
  277.      * @return mixed
  278.      */
  279.     public function render_shortcode( $attr, $content ) {
  280.         return $this->build_module( $attr, $content );
  281.     }
  282.  
  283.     /**
  284.      * get thumbnail
  285.      *
  286.      * @param $post_id
  287.      * @param $size
  288.      *
  289.      * @return mixed|string
  290.      */
  291.     public function get_thumbnail( $post_id, $size ) {
  292.         if ( isset( $this->attribute['force_normal_image_load'] ) && ( 'true' === $this->attribute['force_normal_image_load'] || 'yes' === $this->attribute['force_normal_image_load'] ) ) {
  293.             return ImageNormalLoad::getInstance()->image_thumbnail( $post_id, $size );
  294.         }
  295.         return apply_filters( 'jnews_image_thumbnail', $post_id, $size );
  296.  
  297.     }
  298.  
  299.     /**
  300.      * Render primary category
  301.      *
  302.      * @param $post_id
  303.      *
  304.      * @return mixed|string
  305.      */
  306.     public function get_primary_category( $post_id ) {
  307.         $cat_id   = jnews_get_primary_category( $post_id );
  308.         $category = '';
  309.  
  310.         if ( $cat_id ) {
  311.             $category = get_category( $cat_id );
  312.             if ( $category && ( isset( $category->slug ) && isset( $category->name ) ) ) {
  313.                 $class    = 'class="category-' . $category->slug . '"';
  314.                 $category = '<a href="' . get_category_link( $cat_id ) . "\" {$class}>" . $category->name . '</a>';
  315.             }
  316.         }
  317.  
  318.         return $category;
  319.     }
  320.  
  321.     public function except_more() {
  322.         return isset( $this->attribute['excerpt_ellipsis'] ) ? $this->attribute['excerpt_ellipsis'] : ' ...';
  323.     }
  324.  
  325.     public function excerpt_length() {
  326.         if ( isset( $this->attribute['excerpt_length'] ) ) {
  327.             if ( isset( $this->attribute['excerpt_length']['size'] ) && is_numeric( $this->attribute['excerpt_length']['size'] ) ) {
  328.                 return $this->attribute['excerpt_length']['size'];
  329.             }
  330.  
  331.             return $this->attribute['excerpt_length'];
  332.         }
  333.         return 20;
  334.     }
  335.  
  336.     public function format_date( $post, $custom_date = null ) {
  337.         if ( isset( $this->attribute['date_format'] ) ) {
  338.             $date_format = $this->attribute['date_format'];
  339.  
  340.             if ( $date_format === 'ago' ) {
  341.                 return jnews_ago_time( human_time_diff( $custom_date ?: get_the_time( 'U', $post ), current_time( 'timestamp' ) ) );
  342.             } elseif ( $date_format === 'custom' ) {
  343.                 return jeg_get_post_date( $this->attribute['date_format_custom'], $post );
  344.             } elseif ( $date_format ) {
  345.                 return jeg_get_post_date( '', $post );
  346.             }
  347.         }
  348.  
  349.         return jeg_get_post_date( '', $post );
  350.     }
  351.  
  352.     protected function get_excerpt( $post ) {
  353.         $excerpt = $post->post_excerpt;
  354.  
  355.         if ( empty( $excerpt ) ) {
  356.             $excerpt = $post->post_content;
  357.         }
  358.  
  359.         $excerpt = preg_replace( '/\[[^\]]+\]/', '', $excerpt );
  360.         $excerpt = wp_trim_words( $excerpt, $this->excerpt_length(), $this->except_more() );
  361.  
  362.         return apply_filters( 'jnews_module_excerpt', $excerpt, $post->ID, $this->excerpt_length(), $this->except_more() );
  363.     }
  364.  
  365.     protected function collect_post_id( $content ) {
  366.         $post_ids = array();
  367.         foreach ( $content['result'] as $result ) {
  368.             $post_ids[] = $result->ID;
  369.         }
  370.  
  371.         return $post_ids;
  372.     }
  373.  
  374.     /**
  375.      * build query
  376.      *
  377.      * @param $attr
  378.      *
  379.      * @return array
  380.      */
  381.     protected function build_query( $attr ) {
  382.         if ( isset( $attr['unique_content'] ) && $attr['unique_content'] !== 'disable' ) {
  383.             $exclude_post         = ! empty( $attr['exclude_post'] ) ? explode( ',', $attr['exclude_post'] ) : array();
  384.             $attr['exclude_post'] = implode( ',', array_merge( $this->manager->get_unique_article( $attr['unique_content'] ), $exclude_post ) );
  385.  
  386.             // we need to alter attribute here...
  387.             $this->set_attribute( $attr );
  388.         }
  389.  
  390.         $result = ModuleQuery::do_query( $attr );
  391.  
  392.         if ( isset( $attr['unique_content'] ) && $attr['unique_content'] !== 'disable' ) {
  393.             $this->manager->add_unique_article( $attr['unique_content'], $this->collect_post_id( $result ) );
  394.         }
  395.  
  396.         if ( isset( $result['result'] ) ) {
  397.             foreach ( $result['result'] as $post ) {
  398.                 do_action( 'jnews_json_archive_push', $post->ID );
  399.             }
  400.         }
  401.  
  402.         return $result;
  403.     }
  404.  
  405.     /**
  406.      * Post meta 1
  407.      *
  408.      * @param  object  $post
  409.      * @param  boolean $avatar
  410.      *
  411.      * @return string
  412.      */
  413.     public function post_meta_1( $post, $avatar = false, $feed = false ) {
  414.         $output = '';
  415.  
  416.         if ( get_theme_mod( 'jnews_show_block_meta', true ) ) {
  417.             $comment    = jnews_get_comments_number( $post->ID );
  418.             $view_count = jnews_meta_views( $post->ID );
  419.  
  420.             // author detail
  421.             $author        = isset( $post->post_author ) ? $post->post_author : 'rss_post';
  422.             $is_rss        = jnews_get_rss_post_id( $author );
  423.             $author_url    = $is_rss ? ( isset( $post->post_author_url ) ? $post->post_author_url : '' ) : get_author_posts_url( $author );
  424.             $author_name   = $is_rss ? $post->post_author_name : get_the_author_meta( 'display_name', $author );
  425.             $author_avatar = ( $is_rss ? false : $avatar) ?
  426.                 '<div class="jeg_author_avatar">
  427.                    ' . get_avatar( get_the_author_meta( 'ID', $post->post_author ), 80, null, get_the_author_meta( 'display_name', $post->post_author ) ) . '
  428.                </div>' : '';
  429.  
  430.  
  431.             $trending = ( vp_metabox( 'jnews_single_post.trending_post', null, $post->ID ) ) ? "<div class=\"jeg_meta_trending\"><a href=\"" . get_the_permalink( $post ) . "\"><i class=\"fa fa-bolt\"></i></a></div>" : "";
  432.  
  433.             if ( jnews_is_review( $post->ID ) ) {
  434.                 $rating = jnews_generate_rating( $post->ID, 'jeg_landing_review' );
  435.  
  436.                 $output .= "<div class=\"jeg_post_meta\">";
  437.                 $output .= $trending;
  438.                 $output .= get_theme_mod( 'jnews_show_block_meta_rating', true ) ? $rating : "";
  439.                 $output .= get_theme_mod( 'jnews_show_block_meta_author', true ) ? ( jnews_check_coauthor_plus() ? "<div class=\"jeg_meta_author coauthor\">" . jnews_get_author_coauthor( $post->ID, false, 'by', 1 ) . "</div>" : "<div class=\"jeg_meta_author\"><span class=\"by\">" . jnews_return_translation( 'by', 'jnews', 'by' ) . "</span> <a href=\"{$author_url}\">{$author_name}</a></div>" ) : "";
  440.                 $output .= "</div>";
  441.             } else {
  442.                 $output .= "<div class=\"jeg_post_meta\">";
  443.                 $output .= $trending;
  444.                 $output .= get_theme_mod( 'jnews_show_block_meta_author', true ) ? ( jnews_check_coauthor_plus() ? "<div class=\"jeg_meta_author coauthor\">" . jnews_get_author_coauthor( $post->ID, $avatar, 'by', 1 ) . "</div>" : "<div class=\"jeg_meta_author\">" . $author_avatar . "<span class=\"by\">" . jnews_return_translation( 'by', 'jnews', 'by' ) . "</span> <a href=\"{$author_url}\">{$author_name}</a></div>" ) : "";
  445.                 $output .= get_theme_mod( 'jnews_show_block_meta_date', true ) ? "<div class=\"jeg_meta_date\"><a href=\"" . get_the_permalink( $post ) . "\"><i class=\"fa fa-clock-o\"></i> " . $this->format_date( $post ) . "</a></div>" : "";
  446.                 $output .= get_theme_mod( 'jnews_show_block_meta_comment', true ) && ! $feed ? "<div class=\"jeg_meta_comment\"><a href=\"" . jnews_get_respond_link( $post->ID ) . "\" ><i class=\"fa fa-comment-o\"></i> {$comment} </a></div>" : "";
  447.                 $output .= get_theme_mod( 'jnews_show_block_meta_views', false ) && ! $feed ? "<div class=\"jeg_meta_views\"><a href=\"" . get_the_permalink( $post->ID ) . "\" ><i class=\"fa fa-eye\"></i> {$view_count} </a></div>" : "";
  448.                 $output .= "</div>";
  449.             }
  450.         }
  451.  
  452.         return apply_filters( 'jnews_module_post_meta_1', $output, $post, self::getInstance() );
  453.     }
  454.  
  455.     /**
  456.      * Post Meta Type 2
  457.      *
  458.      * @param $post
  459.      *
  460.      * @return string
  461.      */
  462.     public function post_meta_2( $post ) {
  463.         $output = '';
  464.  
  465.         if ( get_theme_mod( 'jnews_show_block_meta', true ) ) {
  466.             $trending   = ( vp_metabox( 'jnews_single_post.trending_post', null, $post->ID ) ) ? "<div class=\"jeg_meta_trending\"><a href=\"" . get_the_permalink( $post ) . "\"><i class=\"fa fa-bolt\"></i></a></div>" : "";
  467.             $view_count = jnews_meta_views( $post->ID );
  468.  
  469.             if ( jnews_is_review( $post->ID ) ) {
  470.                 $output .= "<div class=\"jeg_post_meta\">";
  471.                 $output .= $trending;
  472.                 $output .= get_theme_mod( 'jnews_show_block_meta_rating', true ) ? jnews_generate_rating( $post->ID, 'jeg_landing_review' ) : "";
  473.                 $output .= "</div>";
  474.             } else {
  475.                 $output .= "<div class=\"jeg_post_meta\">";
  476.                 $output .= $trending;
  477.                 $output .= get_theme_mod( 'jnews_show_block_meta_date', true ) ? "<div class=\"jeg_meta_date\"><a href=\"" . get_the_permalink( $post ) . "\" ><i class=\"fa fa-clock-o\"></i> " . $this->format_date( $post ) . "</a></div>" : "";
  478.                 $output .= get_theme_mod( 'jnews_show_block_meta_views', false ) ? "<div class=\"jeg_meta_views\"><a href=\"" . get_the_permalink( $post->ID ) . "\" ><i class=\"fa fa-eye\"></i> {$view_count} </a></div>" : "";
  479.                 $output .= "</div>";
  480.             }
  481.         }
  482.  
  483.  
  484.         return apply_filters( 'jnews_module_post_meta_2', $output, $post, self::getInstance() );
  485.     }
  486.  
  487.     /**
  488.      * Post meta type 3
  489.      *
  490.      * @param $post
  491.      *
  492.      * @return string
  493.      */
  494.     public function post_meta_3( $post ) {
  495.         $output = '';
  496.  
  497.         if ( get_theme_mod( 'jnews_show_block_meta', true ) ) {
  498.             $trending   = ( vp_metabox( 'jnews_single_post.trending_post', null, $post->ID ) ) ? "<div class=\"jeg_meta_trending\"><a href=\"" . get_the_permalink( $post ) . "\"><i class=\"fa fa-bolt\"></i></a></div>" : "";
  499.             $view_count = jnews_meta_views( $post->ID );
  500.  
  501.             if ( jnews_is_review( $post->ID ) ) {
  502.                 $rating = jnews_generate_rating( $post->ID, 'jeg_landing_review' );
  503.  
  504.                 $output .= "<div class=\"jeg_post_meta\">";
  505.                 $output .= $trending;
  506.                 $output .= get_theme_mod( 'jnews_show_block_meta_rating', true ) ? $rating : "";
  507.                 $output .= get_theme_mod( 'jnews_show_block_meta_date', true ) ? "<div class=\"jeg_meta_date\"><a href=\"" . get_the_permalink( $post ) . "\"><i class=\"fa fa-clock-o\"></i> " . $this->format_date( $post ) . "</a></div>" : "";
  508.                 $output .= "</div>";
  509.             } else {
  510.  
  511.                 // author detail
  512.                 $author      = $post->post_author;
  513.                 $author_url  = jnews_get_rss_post_id($author) ? $post->post_author_url : get_author_posts_url($author);
  514.                 $author_name = jnews_get_rss_post_id($author) ? $post->post_author_name : get_the_author_meta( 'display_name', $author );
  515.  
  516.                 $output .= "<div class=\"jeg_post_meta\">";
  517.                 $output .= $trending;
  518.                 $output .= get_theme_mod( 'jnews_show_block_meta_author', true ) ? ( jnews_check_coauthor_plus() ? "<div class=\"jeg_meta_author coauthor\">" . jnews_get_author_coauthor( $post->ID, false, 'by', 1 ) . "</div>" : "<div class=\"jeg_meta_author\"><span class=\"by\">" . jnews_return_translation( 'by', 'jnews', 'by' ) . "</span> <a href=\"{$author_url}\">{$author_name}</a></div>" ) : "";
  519.                 $output .= get_theme_mod( 'jnews_show_block_meta_date', true ) ? "<div class=\"jeg_meta_date\"><a href=\"" . get_the_permalink( $post ) . "\"><i class=\"fa fa-clock-o\"></i> " . $this->format_date( $post ) . "</a></div>" : "";
  520.                 $output .= get_theme_mod( 'jnews_show_block_meta_views', false ) ? "<div class=\"jeg_meta_views\"><a href=\"" . get_the_permalink( $post->ID ) . "\" ><i class=\"fa fa-eye\"></i> {$view_count} </a></div>" : "";
  521.                 $output .= "</div>";
  522.  
  523.             }
  524.         }
  525.  
  526.         return apply_filters( 'jnews_module_post_meta_3', $output, $post, self::getInstance() );
  527.     }
  528.  
  529.     /**
  530.      * Get attribute
  531.      *
  532.      * @param $attr
  533.      *
  534.      * @return array
  535.      */
  536.     public function get_attribute( $attr ) {
  537.         $this->attribute = wp_parse_args( $attr, $this->options );
  538.  
  539.         return $this->attribute;
  540.     }
  541.  
  542.     public function set_attribute( $attr ) {
  543.         $this->attribute = $attr;
  544.     }
  545.  
  546.     /**
  547.      * Empty Content
  548.      *
  549.      * @return string
  550.      */
  551.     public function empty_content() {
  552.         $no_content = "<div class='jeg_empty_module'>" . jnews_return_translation( 'No Content Available', 'jnews', 'no_content_available' ) . '</div>';
  553.  
  554.         return apply_filters( 'jnews_module_no_content', $no_content );
  555.     }
  556.  
  557.     public function render_module_ads( $ajax_class = '' ) {
  558.         $attr     = $this->attribute;
  559.         $addclass = isset( $attr['ads_class'] ) ? 'jnews_' . $attr['ads_class'] . '_ads' : '';
  560.  
  561.         return "<div class='jeg_ad jeg_ad_module {$addclass} {$ajax_class}'>" . $this->build_module_ads( $attr ) . '</div>';
  562.     }
  563.  
  564.     public function build_module_ads( $attr, $echo = false ) {
  565.         $type     = $attr['ads_type'];
  566.         $addclass = isset( $attr['ads_class'] ) ? $attr['ads_class'] : '';
  567.         $ads_html = '';
  568.  
  569.         if ( $type === 'image' ) {
  570.             $ads_tab  = $attr['ads_image_new_tab'] ? '_blank' : '_self';
  571.             $ads_rel  = '_blank' === $ads_tab ? 'rel="nofollow noopener sponsored"' : 'rel="noopener sponsored"';
  572.             $ads_link = $attr['ads_image_link'];
  573.             $ads_text = $attr['ads_image_alt'];
  574.  
  575.             $ads_images = array(
  576.                 'ads_image'        => $attr['ads_image'],
  577.                 'ads_image_tablet' => $attr['ads_image_tablet'],
  578.                 'ads_image_phone'  => $attr['ads_image_phone'],
  579.             );
  580.  
  581.             foreach ( $ads_images as $key => $ads_image ) {
  582.                 if ( filter_var( $ads_image, FILTER_VALIDATE_URL ) === false ) {
  583.                     if ( isset( $ads_image['url'] ) && ! empty( $ads_image['url'] ) ) {
  584.                         $ads_images[ $key ] = $ads_image['url'];
  585.                     } else {
  586.                         $images             = wp_get_attachment_image_src( $ads_image, 'full' );
  587.                         $ads_images[ $key ] = isset( $images[0] ) ? $images[0] : '';
  588.                     }
  589.                 }
  590.             }
  591.  
  592.             foreach ( $ads_images as $key => $ads_image ) {
  593.                 if ( ! empty( $ads_image ) ) {
  594.                     if ( isset( $attr['ads_image_normal_load'] ) && $attr['ads_image_normal_load'] ) {
  595.                         $ads_html .=
  596.                             "<a href='{$ads_link}' target='{$ads_tab}' {$ads_rel} class='adlink {$key} {$addclass}'>
  597.                                 <img src='{$ads_image}' alt='{$ads_text}' data-pin-no-hover=\"true\">
  598.                             </a>";
  599.                     } else {
  600.                         $ads_html .=
  601.                             "<a href='{$ads_link}' target='{$ads_tab}' {$ads_rel} class='adlink {$key} {$addclass}'>
  602.                                 <img src='" . apply_filters( 'jnews_empty_image', '' ) . "' class='lazyload' data-src='{$ads_image}' alt='{$ads_text}' data-pin-no-hover=\"true\">
  603.                             </a>";
  604.                     }
  605.                 }
  606.             }
  607.         }
  608.  
  609.         if ( $type === 'shortcode' ) {
  610.             $shortcode = stripslashes( $attr['shortcode'] );
  611.             $ads_html  = "<div class='{$addclass}'>" . do_shortcode( $shortcode ) . "</div>";
  612.         }
  613.  
  614.         if ( $type === 'code' ) {
  615.             $attr['content'] = isset( $attr['code'] ) ? $attr['code'] : $attr['content'];
  616.             $code            = stripslashes( empty( $this->content ) ? $attr['content'] : $this->content );
  617.             $ads_html        = "<div class='{$addclass}'>" . do_shortcode( $code ) . "</div>";
  618.         }
  619.  
  620.         if ( $type === 'googleads' ) {
  621.             $publisherid = $attr['google_publisher_id'];
  622.             $slotid      = $attr['google_slot_id'];
  623.  
  624.             if ( ! empty( $publisherid ) && ! empty( $slotid ) ) {
  625.                 $column = $this->manager->get_current_width();
  626.  
  627.                 $desktopsize_ad = array( '300', '250' );
  628.                 $tabsize_ad     = array( '300', '250' );
  629.                 $phonesize_ad   = array( '300', '250' );
  630.  
  631.                 if ( $column >= 8 ) {
  632.                     $desktopsize_ad = array( '728', '90' );
  633.                     $tabsize_ad     = array( '468', '60' );
  634.                     $phonesize_ad   = array( '320', '50' );
  635.                 }
  636.  
  637.                 $desktopsize = $attr['google_desktop'];
  638.                 $tabsize     = $attr['google_tab'];
  639.                 $phonesize   = $attr['google_phone'];
  640.  
  641.                 if ( $desktopsize !== 'auto' ) {
  642.                     $desktopsize_ad = explode( 'x', $desktopsize );
  643.                 }
  644.                 if ( $tabsize !== 'auto' ) {
  645.                     $tabsize_ad = explode( 'x', $tabsize );
  646.                 }
  647.                 if ( $phonesize !== 'auto' ) {
  648.                     $phonesize_ad = explode( 'x', $phonesize );
  649.                 }
  650.  
  651.                 $randomstring = jeg_generate_random_string();
  652.                 $ad_style     = '';
  653.  
  654.                 if ( $desktopsize !== 'hide' && is_array( $desktopsize_ad ) && isset( $desktopsize_ad['0'] ) && isset( $desktopsize_ad['1'] ) ) {
  655.                     $ad_style .= ".adsslot_{$randomstring}{ width:{$desktopsize_ad[0]}px !important; height:{$desktopsize_ad[1]}px !important; }\n";
  656.                 }
  657.                 if ( $tabsize !== 'hide' && is_array( $tabsize_ad ) && isset( $tabsize_ad['0'] ) && isset( $tabsize_ad['1'] ) ) {
  658.                     $ad_style .= "@media (max-width:1199px) { .adsslot_{$randomstring}{ width:{$tabsize_ad[0]}px !important; height:{$tabsize_ad[1]}px !important; } }\n";
  659.                 }
  660.                 if ( $phonesize !== 'hide' && is_array( $phonesize_ad ) && isset( $phonesize_ad['0'] ) && isset( $phonesize_ad['1'] ) ) {
  661.                     $ad_style .= "@media (max-width:767px) { .adsslot_{$randomstring}{ width:{$phonesize_ad[0]}px !important; height:{$phonesize_ad[1]}px !important; } }\n";
  662.                 }
  663.  
  664.                 $googleads       = '//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
  665.                 $external_script = "<script async defer src='{$googleads}'></script>";
  666.                 if ( method_exists( '\JNews\Asset\FrontendAsset', 'autoptimize_option' ) ) {
  667.                     if ( get_theme_mod( 'jnews_extreme_autoptimize_script_loader', false ) && \JNews\Asset\FrontendAsset::autoptimize_option( 'autoptimize_js_aggregate' ) && \JNews\Asset\FrontendAsset::autoptimize_option( 'autoptimize_js' ) ) {
  668.                         $external_script = "<script>(jnewsads = window.jnewsads || []); if ('object' === typeof jnewsads && 'object' === typeof jnews.library) { if (jnewsads.length) { if (!jnews.library.isObjectSame(jnewsads[0], { defer: true, async: true, url:  '{$googleads}' })) { jnewsads.push({ defer: true, async: true, url:  '{$googleads}' }); } } else { jnewsads.push({ defer: true, async: true, url:  '{$googleads}' }); } }</script>";
  669.                     }
  670.                 }
  671.  
  672.                 $ads_html .=
  673.                     "<div class=\"{$addclass}\">
  674.                        <style type='text/css' scoped>
  675.                            {$ad_style}
  676.                        </style>
  677.                        <ins class=\"adsbygoogle adsslot_{$randomstring}\" style=\"display:inline-block;\" data-ad-client=\"{$publisherid}\" data-ad-slot=\"{$slotid}\"></ins>
  678.                        {$external_script}
  679.                        <script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
  680.                    </div>";
  681.             }
  682.         }
  683.  
  684.         $bottom_text = $attr['ads_bottom_text'];
  685.  
  686.         if ( $bottom_text ) {
  687.             $ads_text_html = jnews_return_translation( 'ADVERTISEMENT', 'jnews', 'advertisement' );
  688.             $ads_html      = $ads_html . "<div class='ads-text'>{$ads_text_html}</div>";
  689.         }
  690.  
  691.         $ads_html = "<div class='ads-wrapper'>{$ads_html}</div>";
  692.  
  693.         if ( $echo ) {
  694.             echo jnews_sanitize_by_pass( $ads_html );
  695.         } else {
  696.             return $ads_html;
  697.         }
  698.     }
  699.  
  700.     protected function random_ads_position( $count ) {
  701.         $position = - 1;
  702.         $attr     = $this->attribute;
  703.  
  704.         if ( isset( $attr['ads_type'] ) && $attr['ads_type'] !== 'disable' ) {
  705.             $position = $attr['ads_random'] ? rand( $attr['ads_position']['size'] ?? $attr['ads_position'], ( $count - 2 ) ) : $position = $attr['ads_position'];
  706.         }
  707.  
  708.         if ( is_array( $position ) && isset( $position['size'] ) ) { /* check ads position for Elementor */
  709.             $position = $position['size'];
  710.         }
  711.  
  712.         return (int) $position;
  713.     }
  714.  
  715.     public function element_id( $attr ) {
  716.         return isset( $attr['el_id'] ) && ! empty( $attr['el_id'] ) ? "id='{$attr['el_id']}'" : null;
  717.  
  718.     }
  719.  
  720.     public function content_template() {
  721.     }
  722.  
  723.     abstract public function render_module( $attr, $column_class );
  724. }
  725.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement