Advertisement
arie_cristianD

overriding_TabPostWidget

Jul 5th, 2023
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.80 KB | None | 0 0
  1. <?php
  2. /**
  3.  * @author : Jegtheme
  4.  */
  5. namespace JNews\Widget\Normal\Element;
  6.  
  7. use JNews\Module\ModuleQuery;
  8. use JNews\Widget\Normal\NormalWidgetInterface;
  9.  
  10. Class TabPostWidget implements NormalWidgetInterface
  11. {
  12.     public function get_options()
  13.     {
  14.         $fields = array();
  15.  
  16.         if(!function_exists('JNews_View_Counter'))
  17.         {
  18.             $fields['plugin'] = array(
  19.                 'title'     => esc_html__('Info : ', 'jnews'),
  20.                 'desc'      => esc_html__('Widget Tab Post needs JNews - View Counter to be installed', 'jnews'),
  21.                 'type'      => 'alert',
  22.             );
  23.         }
  24.  
  25.         $fields['title'] = array(
  26.             'title'     => esc_html__('Title', 'jnews'),
  27.             'desc'      => esc_html__('Title on widget header.', 'jnews'),
  28.             'type'      => 'text'
  29.         );
  30.  
  31.         $fields['limit'] = array(
  32.             'title'     => esc_html__('Total limit post', 'jnews'),
  33.             'desc'      => esc_html__('Set the number of post shown on widget.', 'jnews'),
  34.             'type'      => 'slider',
  35.             'options'    => array(
  36.                 'min'  => '2',
  37.                 'max'  => '10',
  38.                 'step' => '1',
  39.             ),
  40.             'default'   => 4,
  41.         );
  42.  
  43.         $fields['range'] = array(
  44.             'title'     => esc_html__('Time Range', 'jnews'),
  45.             'desc'      => esc_html__('Choose time range for this field.', 'jnews'),
  46.             'type'      => 'select',
  47.             'default'   => 'all',
  48.             'options'   => array(
  49.                 'daily'      => esc_html__('Last 24 hours', 'jnews'),
  50.                 'weekly'     => esc_html__('Last 7 days', 'jnews'),
  51.                 'monthly'    => esc_html__('Last 30 days', 'jnews'),
  52.                 'all'        => esc_html__('All-time', 'jnews'),
  53.             )
  54.         );
  55.  
  56.         return $fields;
  57.     }
  58.  
  59.     public function trending_content($mostpopular)
  60.     {
  61.         $output = '';
  62.  
  63.         foreach($mostpopular as $key => $value)
  64.         {
  65.             $title      = get_the_title($value->ID);
  66.             $permalink  = get_the_permalink($value->ID);
  67.             $thumbnail  = apply_filters('jnews_image_thumbnail', $value->ID, 'jnews-120x86');
  68.             $date       = jeg_get_post_date('', $value->ID);
  69.             $additional_class = (!has_post_thumbnail($value->ID)) ? ' no_thumbnail' : '';
  70.  
  71.             $post_meta = ( get_theme_mod('jnews_show_block_meta', true) && get_theme_mod('jnews_show_block_meta_date', true) ) ?
  72.                 "<div class=\"jeg_post_meta\">
  73.                    <div class=\"jeg_meta_date\"><i class=\"fa fa-clock-o\"></i> {$date}</div>
  74.                </div>" : "";
  75.  
  76.             $output .=
  77.                 "<div " . jnews_post_class("jeg_post jeg_pl_sm" . $additional_class, $value->ID) . ">
  78.                    <div class=\"jeg_thumb\">
  79.                        " . jnews_edit_post( $value->ID ) . "
  80.                        <a href=\"{$permalink}\">{$thumbnail}</a>
  81.                    </div>
  82.                    <div class=\"jeg_postblock_content\">
  83.                        <h3 class=\"jeg_post_title\"><a property=\"url\" href=\"{$permalink}\">{$title}</a></h3>
  84.                        {$post_meta}
  85.                    </div>
  86.                </div>";
  87.         }
  88.  
  89.         return $output;
  90.     }
  91.  
  92.     public function render_widget($instance, $text_content = null)
  93.     {
  94.         $output = "<div class=\"jeg_tabpost_widget\">";
  95.  
  96.         if( ! function_exists('JNews_View_Counter') )
  97.         {
  98.             $output .=
  99.                 "<div class=\"alert alert-error\">
  100.                    <strong>" . esc_html__('Plugin Install','jnews') . "</strong>" . ' : ' . esc_html__('Widget Tab Post needs JNews - View Counter to be installed', 'jnews') .
  101.                 "</div>";
  102.         }
  103.  
  104.         $output .= $this->header_tab();
  105.         $output .= "<div class=\"jeg_tabpost_content\">";
  106.  
  107.         $instance['limit'] = isset($instance['limit']) ? $instance['limit'] : 4;
  108.         $instance['range'] = isset($instance['range']) ? $instance['range'] : 'all';
  109.  
  110.         $output .= $this->trending_tab($instance);
  111.         $output .= $this->latest_tab($instance);
  112.  
  113.         $output .= "</div></div>";
  114.         echo jnews_sanitize_output($output);
  115.     }
  116.  
  117.     public function trending_tab($instance)
  118.     {
  119.         $output = "<div class=\"jeg_tabpost_item active\" id=\"jeg_tabpost_1\"><div class=\"jegwidgetpopular\">";
  120.         if(function_exists('jnews_view_counter_query'))
  121.         {
  122.             switch($instance['range']) {
  123.                 case 'monthly' :
  124.                     $sort_by = 'popular_post_month';
  125.                     break;
  126.                 case 'weekly' :
  127.                     $sort_by = 'popular_post_week';
  128.                     break;
  129.                 case 'daily' :
  130.                     $sort_by = 'popular_post_day';
  131.                     break;
  132.                 default :
  133.                     $sort_by = 'popular_post';
  134.                     break;
  135.             }
  136.  
  137.             $results = ModuleQuery::do_query(array(
  138.                 'post_type'                 => 'post',
  139.                 'sort_by'                   => $sort_by,
  140.                 'post_offset'               => 0,
  141.                 'number_post'               => $instance['limit'],
  142.                 'pagination_number_post'    => $instance['limit'],
  143.             ));
  144.  
  145.             $output .= $this->trending_content($results['result']);
  146.         }
  147.         $output .= "</div></div>";
  148.         return $output;
  149.     }
  150.  
  151.  
  152.     public function latest_tab($instance)
  153.     {
  154.         $output = "<div class=\"jeg_tabpost_item\" id=\"jeg_tabpost_2\"><div class=\"jegwidgetpopular\">";
  155.  
  156.         $results = ModuleQuery::do_query(array(
  157.             'post_type'                 => 'post',
  158.             'sort_by'                   => 'latest',
  159.             'post_offset'               => 0,
  160.             'number_post'               => $instance['limit'],
  161.             'pagination_number_post'    => $instance['limit'],
  162.         ));
  163.  
  164.         foreach($results['result'] as $result)
  165.         {
  166.             $title      = get_the_title($result);
  167.             $permalink  = get_the_permalink($result);
  168.             $thumbnail  = apply_filters('jnews_image_thumbnail', $result->ID, 'jnews-120x86');
  169.             $date       = jeg_get_post_date('', $result);
  170.             $additional_class = (!has_post_thumbnail($result->ID)) ? ' no_thumbnail' : '';
  171.  
  172.             $post_meta = ( get_theme_mod('jnews_show_block_meta', true) && get_theme_mod('jnews_show_block_meta_date', true) ) ?
  173.                 "<div class=\"jeg_post_meta\">
  174.                    <div class=\"jeg_meta_like\"><i class=\"fa fa-clock-o\"></i> {$date}</div>
  175.                </div>" : "";
  176.  
  177.             $output .=
  178.                 "<div " . jnews_post_class("jeg_post jeg_pl_sm" . $additional_class, $result->ID) . ">
  179.                    <div class=\"jeg_thumb\">
  180.                        " . jnews_edit_post( $result->ID ) . "
  181.                        <a href=\"{$permalink}\">{$thumbnail}</a>
  182.                    </div>
  183.                    <div class=\"jeg_postblock_content\">
  184.                        <h3 class=\"jeg_post_title\"><a property=\"url\" href=\"{$permalink}\">{$title}</a></h3>
  185.                        {$post_meta}
  186.                    </div>
  187.                </div>";
  188.         }
  189.  
  190.         $output .= "</div></div>";
  191.         return $output;
  192.     }
  193.  
  194.     public function header_tab()
  195.     {
  196.         return
  197.             "<ul class=\"jeg_tabpost_nav\">
  198.                <li data-tab-content=\"jeg_tabpost_1\" class=\"active\">" . jnews_return_translation('Trending', 'jnews', 'trending') . "</li>
  199.                <li data-tab-content=\"jeg_tabpost_2\">" . jnews_return_translation('Latest', 'jnews', 'latest') . "</li>
  200.            </ul>";
  201.     }
  202.  
  203.  
  204.     protected function get_widget_template(){
  205.         // do nothing
  206.     }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement