/**
  * since yarpp v4.2.5
  * @param $posts: related posts result
  * @param array $args: keys 'function','args','related_ID'
  */
 public function _yarpp_results($posts, $args)
 {
     global $wp_query;
     $wp_query->posts = $posts;
     /*$cat_posts = $wp_query;
       $arrExlpodeFields = array('title');*/
     /*if(isset($args['args']['compatible_vars']) && is_array($args['args']['compatible_vars'])){
           $this->compatible_vars = array_merge($this->compatible_vars, $args['args']['compatible_vars']);
       }
       $this->compatible_vars = array_merge($this->compatible_vars, $args['args']['skin']->instance->get_migrate());
       foreach($this->compatible_vars as $var => $val){
           $$var = is_string($val) && isset($$val)? $$val : $val;
       }
       */
     //default sidebar params
     $sidebar_params = array('before_widget' => '<div id="%1$s" class="hw-widget %2$s">', 'after_widget' => '</div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>');
     //valid posts
     if (!isset($args['args']['skin'])) {
         return $posts;
     }
     $hwrp = $skin = $args['args']['skin'];
     if (isset($args['args']['hwrp_current'])) {
         $hwrp = (object) $args['args']['hwrp_current'];
         //get current post type related data
     }
     //migrate vars
     $migrate_data = $skin->instance->get_migrate();
     extract($migrate_data);
     //get sidebar wrapper
     if (isset($skin->box_skin)) {
         global $wp_registered_sidebars;
         $sidebar = $args['args']['skin']->box_skin;
         $sidebar_widget_skin = $args['args']['skin']->box_widget_skin;
         //override sidebar skin box with other
         $sidebar_params = array();
         //extract($sidebar_params);   //extract sidebar param
         if ($sidebar_widget_skin) {
             //get change default sidebar skin, here we create 4 holder: sidebar_default, skin1,skin2,skin3
             $skin_data = HW_AWC_Sidebar_Settings::get_sidebar_setting($sidebar_widget_skin, $sidebar);
             HW_SKIN::apply_skin_data($skin_data, array($this, '_hw_skin_resume_skin_data'), array('sidebar' => $sidebar, 'sidebar_widget_skin' => $sidebar_widget_skin, 'sidebar_params' => &$sidebar_params));
             $sidebar_params = HW_AWC::format_widget_sidebar_params(null, $sidebar, array('classname' => 'hw-related-posts hw-awc-override', 'sidebar_params' => $sidebar_params));
         }
     }
     //check related content from widget config
     if (!empty($skin->widget_config)) {
         $widget_instance = AWC_WidgetFeature_saveconfig::get_widget_setting_instance($skin->widget_config, array('widget' => 'hw_taxonomy_post_list_widget', 'group' => 'main_loop'));
         //valid data
         if (!isset($widget_instance['query_data'])) {
             $widget_instance['query_data'] = 'current_context';
         }
         //get global $wp_query
         //override sidebar params from awc feature assign to widget
         if (isset($sidebar_params) && isset($sidebar)) {
             $sidebar_params = HW_AWC::format_sidebar_params($sidebar, $sidebar_params, $widget_instance);
         }
     }
     /**
      * display related content
      */
     if (!isset($widget_instance)) {
         extract($sidebar_params);
     }
     //extract sidebar param if not use HWTPL config
     if (isset($before_widget)) {
         echo $before_widget;
     }
     //widget title
     if (isset($before_title)) {
         echo $before_title;
     }
     echo apply_filters('hw_related_posts_title', $hwrp->title);
     if (isset($after_title)) {
         echo $after_title;
     }
     //do action before
     do_action('hoangweb_before_loop');
     do_action('hw_yarpp_results_before', $hwrp);
     if (isset($widget_instance)) {
         /**
          * output widget, when using the_widget to show widget content,
          * note that you set up & enable sidebar skin at /admin.php?page=hw_sidebar_widgets_settings this mean sidebar apply to yarpp it work for that skin
          * And no related to active sidebar that using on website, which call by function 'dynamic_sidebar' /hw_dynamic_sidebar
          */
         the_widget('HW_Taxonomy_Post_List_widget', $widget_instance, $sidebar_params);
     } else {
         if (isset($args['args']['template'])) {
             include $args['args']['template'];
         }
     }
     //do action after
     do_action('hw_yarpp_results_after', $hwrp);
     do_action('hoangweb_after_loop');
     if (isset($after_widget)) {
         echo $after_widget;
     }
     return false;
     //disable behavior as default $yarpp->display_related do
 }
 /**
  * main loop
  */
 public static function hw_theme_get_main()
 {
     //init
     //hw_taxonomy_post_list_widget widget setting
     $setting = array();
     //default sidebar params
     $sidebar_params = array('before_widget' => '<div id="%1$s" class="hw-widget %2$s *1" >', 'after_widget' => '</div>', 'before_title' => '<h3 class="widget-title %1$s {css_title}">', 'after_title' => '</h3>');
     //override loop template base context
     $loop_temp = HW__Template::get_current_context_loop_template();
     global $wp_registered_sidebars;
     global $wp_registered_widgets;
     if (!empty($loop_temp)) {
         //$widg = AWC_WidgetFeature_saveconfig::get_widget_setting($loop_temp['widget_config']);
         $setting = AWC_WidgetFeature_saveconfig::get_widget_setting_instance($loop_temp['widget_config'], array('widget' => 'hw_taxonomy_post_list_widget', 'group' => 'main_loop'));
         //valid data
         if (!isset($setting['query_data'])) {
             $setting['query_data'] = 'current_context';
         }
         //get global $wp_query
         //$setting['widget_title'] = 'sdfgdg';  //set widget title by skin
         //get sidebar box
         if ($loop_temp['sidebar'] && isset($wp_registered_sidebars[$loop_temp['sidebar']])) {
             $sidebar = $loop_temp['sidebar'];
             //sidebar id
             $sidebar_params = $wp_registered_sidebars[$sidebar];
             if (isset($loop_temp['sidebar_widget_skin'])) {
                 $sidebar_widget_skin = $loop_temp['sidebar_widget_skin'];
                 //get change default sidebar skin, here we create 4 holder: sidebar_default, skin1,skin2,skin3
                 $skin_data = HW_AWC_Sidebar_Settings::get_sidebar_setting($sidebar_widget_skin, $sidebar);
                 HW_SKIN::apply_skin_data($skin_data, 'HW__Template::_hw_skin_resume_skin_data', array('sidebar' => $sidebar, 'sidebar_widget_skin' => $sidebar_widget_skin, 'sidebar_params' => &$sidebar_params));
             }
         }
         list($widget_id, $t) = each($wp_registered_widgets);
         //get first widget as demo
         $sidebar_params = HW_AWC::format_widget_sidebar_params($widget_id, $sidebar_params, array('classname' => 'main-content hw-awc-override', 'widget_id' => 'hw-main-loop-content'));
         //override sidebar params from awc feature assign to widget
         if (isset($sidebar_params) && isset($sidebar)) {
             $sidebar_params = HW_AWC::format_sidebar_params($sidebar, $sidebar_params, $setting);
         }
         //important: since any sidebar skin use wrapper class 'hw-awc-override'
         //$sidebar_params['before_widget'] = sprintf($sidebar_params['before_widget'], /*$widget_id, $classname*/'hw-main-loop-content','main-content hw-awc-override');
         do_action('hw_before_loop');
         /**
          * output widget, when using the_widget to show widget content,
          *
          * note that you set up & enable sidebar skin at /admin.php?page=hw_sidebar_widgets_settings this mean sidebar apply to yarpp it work for that skin
          * And no related to active sidebar that using on website, which call by function 'dynamic_sidebar' /hw_dynamic_sidebar
          */
         if (class_exists('HW_Taxonomy_Post_List_widget')) {
             the_widget('HW_Taxonomy_Post_List_widget', $setting, $sidebar_params);
         }
         do_action('hw_after_loop');
     } elseif (APF_Page_Templates::get_instance()->hw_loop_template()) {
         //do nothing
     } else {
         $context = HW__Template::get_current_template_file();
         //determine current template
         $current = self::get_current_template();
         if ($current && method_exists($current, 'Main')) {
             $current->Main();
             //display main content of current template
         }
         //filter default template
         do_action('hw_theme_get_main_default', $context);
     }
 }
 public function widget($args, $instance)
 {
     $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base);
     //$content = isset($instance['content'])? $instance['content'] : '';  //marquee content
     $source = isset($instance['source']) ? $instance['source'] : 'content';
     //data source
     $data = isset($instance['data']) ? $instance['data'] : array();
     if (isset($data[$source])) {
         //get data content
         $content = $data = $data[$source];
     }
     //parse source for slides
     if ($source == 'slides' && is_numeric($data)) {
         $data = hwmq_get_mlslider_data($data);
     }
     //skin
     $hash_skin = isset($instance['skin']) ? $instance['skin'] : 'default';
     // before and after widget arguments are defined by themes
     echo $args['before_widget'];
     if (!empty($title)) {
         echo $args['before_title'] . $title . $args['after_title'];
     }
     // This is where you run the code and display the output
     if ($this->skin) {
         $skin_options = isset($instance['skin_settings']) ? $instance['skin_settings'] : array();
         HW_SKIN::apply_skin_data(array('instance' => $this->skin, 'hash_skin' => $hash_skin, 'skin_options' => $skin_options), array('callback_before' => array($this, '_hw_skin_apply_skin_data_callback_before'), 'callback_after' => array($this, '_hw_skin_apply_skin_data_callback_after')), array('instance' => $instance, 'data' => $data));
     }
     echo $args['after_widget'];
 }
 /**
  * apply sidebar skin for dynamic
  * @param $sidebar sidebar id
  * @param $skin sidebar skin style
  * @param $override_params arguments
  * @param $widget_id specific  widget id
  */
 public static function apply_sidebar_skin($sidebar, $skin, $override_params = array(), $widget_id = null)
 {
     global $wp_registered_sidebars;
     global $wp_registered_widgets;
     //valid
     if (!isset($wp_registered_sidebars[$sidebar])) {
         return;
     }
     $sidebar_params = $wp_registered_sidebars[$sidebar];
     //sidebar params
     //get change default sidebar skin, here we create 4 holder: sidebar_default, skin1,skin2,skin3
     $skin_data = HW_AWC_Sidebar_Settings::get_sidebar_setting($skin, $sidebar);
     //valid widget id
     if (empty($widget_id) && !isset($wp_registered_widgets[$widget_id])) {
         list($widget_id, $t) = each($wp_registered_widgets);
         //get first widget as demo
     }
     //change sidebar params from skin
     HW_SKIN::apply_skin_data($skin_data, array(__CLASS__, '_hw_skin_resume_skin_data'), array('sidebar' => $sidebar, 'sidebar_widget_skin' => $skin, 'sidebar_params' => &$sidebar_params));
     $params = array('classname' => $widget_id . ' hw-awc-override', 'widget_id' => $widget_id);
     $params = array_merge($params, $override_params);
     //format sidebar variables
     $sidebar_params = HW_AWC::format_widget_sidebar_params($widget_id, $sidebar_params, $params);
     return $sidebar_params;
 }
 /**
  * @param $atts
  */
 public function _gallery_shortcode($atts)
 {
     global $post;
     // If no attributes have been passed, the gallery should be pulled from the current post.
     $gallery_id = false;
     if (empty($atts)) {
         $gallery_id = $post->ID;
         $data = is_preview() ? $this->gallery->_get_gallery($gallery_id) : $this->gallery->get_gallery($gallery_id);
     } else {
         if (isset($atts['id'])) {
             $gallery_id = (int) $atts['id'];
             $data = is_preview() ? $this->gallery->_get_gallery($gallery_id) : $this->gallery->get_gallery($gallery_id);
         } else {
             if (isset($atts['slug'])) {
                 $gallery_id = $atts['slug'];
                 $data = is_preview() ? $this->gallery->_get_gallery_by_slug($gallery_id) : $this->gallery->get_gallery_by_slug($gallery_id);
             } else {
                 // A custom attribute must have been passed. Allow it to be filtered to grab data from a custom source.
                 $data = apply_filters('hw_envira_gallery_custom_gallery_data', false, $atts, $post);
             }
         }
     }
     // If there is no data to output or the gallery is inactive, do nothing.
     if (!$data || empty($data['gallery']) || isset($data['status']) && 'inactive' == $data['status'] && !is_preview()) {
         return;
     }
     // Get rid of any external plugins trying to jack up our stuff where a gallery is present.
     $this->plugin_humility();
     // If this is a feed view, customize the output and return early.
     if (is_feed()) {
         return $this->do_feed_output($data);
     }
     $i = 1;
     $args = array();
     $args['wrapper_id'] = sanitize_html_class($data['id']);
     $args['wrapper_class'] = $this->get_gallery_classes($data);
     $args['columns_class'] = $this->get_config('columns', $data);
     $galleries = array();
     foreach ($data['gallery'] as $id => $item) {
         // Skip over images that are pending (ignore if in Preview mode).
         if (isset($item['status']) && 'pending' == $item['status'] && !is_preview()) {
             continue;
         }
         $gallery = array();
         $image = $this->get_image_src($id, $item, $data);
         $gallery = array_merge($item);
         $gallery['index'] = $i;
         $gallery['id'] = $id;
         $gallery['item_classes'] = $this->get_gallery_item_classes($item, $i, $data);
         $gallery['margin_bottom'] = HW_Validation::format_unit($this->get_config('margin', $data));
         $gallery['img_src'] = esc_url($image[0]);
         $gallery['img_width'] = esc_url($image[1]);
         $gallery['img_height'] = esc_url($image[2]);
         $thumb = wp_get_attachment_image_src($id, 'thumbnail');
         $gallery['thumb_src'] = $thumb[0];
         $gallery['thumb_width'] = $thumb[1];
         $gallery['thumb_height'] = $thumb[2];
         $gallery['placeholder'] = esc_url(plugins_url('assets/css/images/holder.gif', dirname(dirname(__FILE__))));
         $galleries[$id] = $gallery;
         // Increment the iterator.
         $i++;
     }
     /*---start skin---*/
     //$skin = $this->get_config( 'hw_skin', $data );
     $skin = !empty($data['config']['hw_skin']) ? $data['config']['hw_skin'] : $this->get_config('hw_skin', array());
     if (empty($skin['hash_skin'])) {
         return;
     }
     //get skin options
     $data['options'] = isset($skin['skin_options']) ? $skin['skin_options'] : array();
     $data['json_options'] = HW_SKIN_Option::build_json_options($data['options']);
     //$this->skin->get_current();
     //change sidebar params from skin
     return HW_SKIN::apply_skin_data($skin, array('callback_before' => array(__CLASS__, '_hw_skin_before_include_skin_file')), array('galleries' => $galleries, 'args' => $args, 'data' => $data), false);
 }
 /**
  * Display download attachments for a given post
  * from: wp-content/plugins/download-attachments/includes/functions.php
  *
  * @param 	int $post_id
  * @param	array $args
  * @return 	mixed
  */
 public function hw_da_display_download_attachments($post_id = 0, $args = array())
 {
     $post_id = (int) (empty($post_id) ? get_the_ID() : $post_id);
     $options = get_option('download_attachments_general');
     $setting = HW_Module_downloadattachment::get()->get_values();
     $defaults = array('container' => 'div', 'container_class' => 'download-attachments', 'container_id' => '', 'style' => isset($options['display_style']) ? esc_attr($options['display_style']) : 'list', 'link_before' => '', 'link_after' => '', 'content_before' => isset($setting['content_before']) ? $setting['content_before'] : '', 'content_after' => isset($setting['content_after']) ? $setting['content_after'] : '', 'display_index' => isset($options['frontend_columns']['index']) ? (int) $options['frontend_columns']['index'] : false, 'display_user' => (int) $options['frontend_columns']['author'], 'display_icon' => (int) $options['frontend_columns']['icon'], 'display_count' => (int) $options['frontend_columns']['downloads'], 'display_size' => (int) $options['frontend_columns']['size'], 'display_date' => (int) $options['frontend_columns']['date'], 'display_caption' => (int) $options['frontend_content']['caption'], 'display_description' => (int) $options['frontend_content']['description'], 'display_empty' => 0, 'display_option_none' => __('No attachments to download', 'download-attachments'), 'use_desc_for_title' => 0, 'exclude' => '', 'include' => '', 'title' => __('Download Attachments', 'download-attachments'), 'title_container' => 'p', 'title_class' => 'download-title', 'orderby' => 'menu_order', 'order' => 'asc', 'echo' => 1);
     $args = apply_filters('da_display_attachments_defaults', array_merge($defaults, $args), $post_id);
     $args['display_index'] = apply_filters('da_display_attachments_index', (int) $args['display_index']);
     $args['display_user'] = apply_filters('da_display_attachments_user', (int) $args['display_user']);
     $args['display_icon'] = apply_filters('da_display_attachments_icon', (int) $args['display_icon']);
     $args['display_count'] = apply_filters('da_display_attachments_count', (int) $args['display_count']);
     $args['display_size'] = apply_filters('da_display_attachments_size', (int) $args['display_size']);
     $args['display_date'] = apply_filters('da_display_attachments_date', (int) $args['display_date']);
     $args['display_caption'] = apply_filters('da_display_attachments_caption', (int) $args['display_caption']);
     $args['display_description'] = apply_filters('da_display_attachments_description', (int) $args['display_description']);
     $args['display_empty'] = apply_filters('da_display_attachments_empty', (int) $args['display_empty']);
     $args['use_desc_for_title'] = (int) $args['use_desc_for_title'];
     $args['echo'] = (int) $args['echo'];
     $args['style'] = in_array($args['style'], array('list', 'table', 'none', ''), true) ? $args['style'] : $defaults['style'];
     $args['orderby'] = in_array($args['orderby'], array('menu_order', 'attachment_id', 'attachment_date', 'attachment_title', 'attachment_size', 'attachment_downloads'), true) ? $args['orderby'] : $defaults['orderby'];
     $args['order'] = in_array($args['order'], array('asc', 'desc'), true) ? $args['order'] : $defaults['order'];
     $args['link_before'] = trim($args['link_before']);
     $args['link_after'] = trim($args['link_after']);
     $args['display_option_none'] = ($info = trim($args['display_option_none'])) !== '' ? $info : $defaults['display_option_none'];
     $args['title'] = apply_filters('da_display_attachments_title', trim($args['title']));
     $attachments = da_get_download_attachments($post_id, apply_filters('da_display_attachments_args', array('include' => $args['include'], 'exclude' => $args['exclude'], 'orderby' => $args['orderby'], 'order' => $args['order'])));
     $count = count($attachments);
     //load active skin
     $current_skin = HW_Module_downloadattachment::get()->get_field_value('skin');
     $headers = array('index' => '', 'file' => __('Tệp'));
     $data = array();
     if ($count > 0) {
         $i = 1;
         //caption
         if ($args['display_caption'] === 1 || $args['display_description'] === 1 && $args['use_desc_for_title'] === 0) {
             $headers['caption'] = __('Mô tả');
         }
         //date
         if ($args['display_date'] === 1) {
             $headers['attachment-date'] = __('Date added', 'download-attachments');
         }
         //user
         if ($args['display_user'] === 1) {
             $headers['attachment-user'] = __('Added by', 'download-attachments');
         }
         //size
         if ($args['display_size'] === 1) {
             $headers['attachment-size'] = __('File size', 'download-attachments');
         }
         //display download count
         if ($args['display_count'] === 1) {
             $headers['attachment-downloads'] = __('Downloads', 'download-attachments');
         }
         foreach ($attachments as $attachment) {
             if ($attachment['attachment_exclude']) {
                 continue;
             }
             $row = array();
             if ($args['use_desc_for_title'] === 1 && $attachment['attachment_description'] !== '') {
                 $title = apply_filters('da_display_attachment_title', $attachment['attachment_description']);
             } else {
                 $title = apply_filters('da_display_attachment_title', $attachment['attachment_title']);
             }
             //attachment type
             $row['class'] = $attachment['attachment_type'];
             #if ( $args['display_index'] === 1 )
             $row['index'] = $i;
             //index count
             // title
             // type
             if ($args['display_icon'] === 1) {
                 $row['icon'] = '<img class="attachment-icon" src="' . $attachment['attachment_icon_url'] . '" alt="' . $attachment['attachment_type'] . '" /> ';
             } else {
                 $row['icon'] = '';
             }
             // link before
             if ($args['link_before'] !== '') {
                 $row['link_before'] = $args['link_before'];
             } else {
                 $row['link_before'] = '';
             }
             $row['url'] = $options['pretty_urls'] === true ? home_url('/' . $options['download_link'] . '/' . $attachment['attachment_id'] . '/') : hw_modules_url('download-attachments/includes/download.php?id=' . $attachment['attachment_id']);
             $row['title'] = $title;
             $row['link'] = '<a href="' . ($options['pretty_urls'] === true ? home_url('/' . $options['download_link'] . '/' . $attachment['attachment_id'] . '/') : hw_modules_url('download-attachments/includes/download.php?id=' . $attachment['attachment_id'])) . '" class="attachment-link" title="' . $title . '">' . $title . '</a>';
             $row['link_after'] = $args['link_after'];
             //link after
             // caption
             if ($args['display_caption'] === 1) {
                 $row['caption'] = $attachment['attachment_caption'];
             }
             // description
             if ($args['display_description'] === 1 && $args['use_desc_for_title'] === 0) {
                 $row['description'] = $attachment['attachment_description'];
             }
             // date
             if ($args['display_date'] === 1) {
                 $row['date'] = $attachment['attachment_date'];
             }
             // user
             if ($args['display_user'] === 1) {
                 $row['user'] = $attachment['attachment_user_name'];
             }
             // size
             if ($args['display_size'] === 1) {
                 $row['size'] = $attachment['attachment_size'];
             }
             // downloads
             if ($args['display_count'] === 1) {
                 $row['count'] = $attachment['attachment_downloads'];
             }
             $data[] = $row;
             $i++;
         }
     }
     //change sidebar params from skin
     return HW_SKIN::apply_skin_data($current_skin, array('callback_before' => array(__CLASS__, '_hw_skin_before_include_skin_file')), array('attachments' => $data, 'headers' => $headers, 'args' => $args), false);
 }