File "lib-article.php"

Full Path: /var/www/bvnghean.vn/save_bvnghean.vn/wp-content/themes/magone/includes/lib/lib-article.php
File size: 61.88 KB
MIME-type: text/x-php
Charset: utf-8

<?php

// common field for article boxes
global $MagOne_Article_Common_Fields;
$MagOne_Article_Common_Fields = array(
	'title' => array(
		'label' => esc_html__('Title', 'magone'),
		'description' => esc_html__('Title of Block', 'magone'),
	),
	'title_url' => array(
		'label' => esc_html__('Title URL', 'magone'), 
		'description' => esc_html__('URL for Title of Block. Leave blank to use default', 'magone'),
		'type' => 'url'
	),
	'title_icon' => array(
		'label' => esc_html__('Title FontAwesome Icon Code', 'magone'), 
		'description' => wp_kses(
			sprintf(__('Example: fa-home. <a href="%s" target="_blank">Check Full List of Icon Codes Here</a>', 'magone'), esc_url('https://fortawesome.github.io/Font-Awesome/icons/')),
			array(
				'a' => array(
					'href' => array(),
					'target' => array()
				),					
			)
		)
	),
	'title_bg_color' => array(
		'label' => esc_html__('Title Background Color', 'magone'), 
		'description' => esc_html__('Leave blank to use transparent', 'magone'),
		'type' => 'color'
	),
	'title_text_color' => array(
		'label' => esc_html__('Title Text Color', 'magone'), 
		'description' => esc_html__('Leave blank to use default color', 'magone'),		
		'type' => 'color'
	),
	'title_border_bottom_color' => array(
		'label' => esc_html__('Title Border Bottom Color', 'magone'), 
		'description' => esc_html__('Leave blank to to hide', 'magone'),		
		'type' => 'color'
	),
	'main_color' => array(
		'label' => esc_html__('Main Color', 'magone'), 
		'description' => esc_html__('Select the main color of box', 'magone'),
		'type' => 'color', 
		'default' => ''
	),
	'thumb_bg_color' => array(
		'label' => esc_html__('Thumbnail Background Color', 'magone'), 
		'description' => esc_html__('Thumbnail background color', 'magone'),
		'type' => 'color', 
		'default' => ''
	),
	'enable_tab' => array(
		'label' => esc_html__('Connect as Tabs', 'magone'), 
		'description' => esc_html__('All consecutive blocks which were enabled this option will be grouped into a tab', 'magone'),
		'type' => 'checkbox', 
		'default' => false
	),
	'count' => array(
		'label' => esc_html__('Count', 'magone'), 
		'description' => esc_html__('Number of posts will be loaded', 'magone'),
		'type' => 'number', 
		'default' => 6
	),	
	'orderby' => array(
		'label' => esc_html__('Content Orderby', 'magone'), 		
		'type' => 'select', 
		'choices' => array(
			'latest' => esc_html__('Latest', 'magone'), 
			'random' => esc_html__('Random', 'magone'),			
			'comment' => esc_html__('Most Commented', 'magone'),
			'popular' => esc_html__('Popular (Most Viewed)', 'magone'),	
			'latest-review' => esc_html__('Latest Reviews', 'magone'),	
			'random-review' => esc_html__('Random Reviews', 'magone'),	
			'popular-review' => esc_html__('Popular (Highest) Reviews', 'magone'),			
		),
		'default' => 'latest'
	),
	'duration' => array(
		'label' => esc_html__('Date Range', 'magone'), 		
		'description' => esc_html__('Date range limit to load post from base on publish date', 'magone'),
		'type' => 'select', 
		'choices' => array(
			'all' => esc_html__('All Time', 'magone'),
			'year' => esc_html__('Last 365 days', 'magone'), 
			'month' => esc_html__('Last 30 days', 'magone'),			
			'week' => esc_html__('Last 7 days', 'magone'),						
		),
		'default' => 'all'
	),
	'show_view_all' => array(
		'label' => esc_html__('Show View All', 'magone'), 
		'description' => esc_html__('Show View All button. Uncheck to hide', 'magone'),
		'type' => 'checkbox', 
		'default' => true
	),
	'item_title' => array(
		'label' => esc_html__('Item Title', 'magone'), 
		'type' => 'select',
		'choices' => array(
			'in' => esc_html__('In Thumbnail', 'magone'), 
			'out' => esc_html__('Out of Thumbnail', 'magone'),			
			'none' => esc_html__('Not Display', 'magone'),			
		),
		'default' => 'in'
	),
	'cates' => array(
		'label' => esc_html__('Load from Categories', 'magone'),
		'description' => esc_html__('The categories that will be loaded posts from. Leave blank to load from all', 'magone'),
		'type' => 'categories'
	),
	'cate_scenario' => array(
		'label' => esc_html__('Category Scenario', 'magone'), 
		'description' => esc_html__('If you choose many categories to load, what relation between them?', 'magone'),
		'type' => 'select', 
		'default' => 'combination',
		'choices' => array(
//			'separate' => esc_html__('Separate (will display category list to switch)', 'magone'), 			
			'combination' => esc_html__('Combination (posts has one OR more above categories)', 'magone'), 			
			'intersection' => esc_html__('Intersection (posts has ALL above categories)', 'magone'), 
		),
	),	
	'exclude_cates' => array(
		'label' => esc_html__('Exclude Categories', 'magone'),
		'description' => esc_html__('The categories that will not be loaded posts from. Leave blank to load from all', 'magone'),
		'type' => 'categories'
	),
	'authors' => array(
		'label' => esc_html__('Load from Authors', 'magone'),
		'description' => esc_html__('The authors that will be loaded posts from. Leave blank to load from all', 'magone'),
		'type' => 'users'
	),
	'exclude_authors' => array(
		'label' => esc_html__('Exclude Authors', 'magone'),
		'description' => esc_html__('The authors that will not be loaded posts from. Leave blank to load from all', 'magone'),
		'type' => 'users'
	),
	'tags' => array(
		'label' => esc_html__('Load from Tags', 'magone'),
		'description' => esc_html__('The tags that will be loaded posts from. Leave blank to load from all', 'magone'),
		'type' => 'tags'
	),
	'ignore_sticky_posts' => array(
		'label' => esc_html__('Ignore Sticky Posts', 'magone'), 
		'description' => esc_html__('Do not move sticky posts to the start of the set', 'magone'),
		'type' => 'checkbox', 
		'default' => true
	),
	'exclude_loaded_posts' => array(
		'label' => esc_html__('Exclude Loaded Posts', 'magone'), 
		'description' => esc_html__('Do not get the loaded posts from previous blocks', 'magone'),
		'type' => 'checkbox', 
		'default' => false
	),	
	'show_comment' => array(
		'label' => esc_html__('Show Comment', 'magone'), 
		'description' => esc_html__('Show comment number. Uncheck to hide', 'magone'),
		'type' => 'checkbox', 
		'default' => true
	),
	'show_readmore' => array(
		'label' => esc_html__('Show Read More', 'magone'), 
		'description' => esc_html__('Show readmore link. Uncheck to hide', 'magone'),
		'type' => 'checkbox', 
		'default' => true
	),
	'show_author' => array(
		'label' => esc_html__('Show Author', 'magone'), 
		'description' => esc_html__('Show / hide author name in item detail', 'magone'),
		'type' => 'select', 
		'default' => 'icon',
		'choices' => array(
			'none' => esc_html__('Not show', 'magone'), 
			'name' => esc_html__('Show name only', 'magone'), 
			'icon' => esc_html__('Show name with icon', 'magone'), 
			'avatar' => esc_html__('Show name with avatar', 'magone')
		),
	),
	'show_date' => array(
		'label' => esc_html__('Show Date', 'magone'), 
		'description' => esc_html__('Show / hide date / time in item detail. The format will follow the site date time format', 'magone'),
		'type' => 'select', 
		'default' => 'date',
		'choices' => array(
			'none' => esc_html__('Not Show', 'magone'), 
			'full' => esc_html__('Date and Time', 'magone'), 
			'date' => esc_html__('Only Date', 'magone'), 
			'time' => esc_html__('Only Time', 'magone'), 
			'short' => esc_html__('Short Date Time', 'magone'), 
			'pretty' => esc_html__('Pretty Date Time', 'magone')
		)
	),
	'meta_item_order' => array(
		'label' => esc_html__('Meta Item Order', 'magone'), 
		'description' => esc_html__('Pick order for meta items: comment, date, author', 'magone'),
		'type' => 'select', 
		'default' => 'a_c_d',
		'choices' => array(
			'c_d_a' => esc_html__('Comment - Date - Author', 'magone'), 
			'c_a_d' => esc_html__('Comment - Author - Date', 'magone'), 
			'a_c_d' => esc_html__('Author - Comment - Date', 'magone'), 
			'a_d_c' => esc_html__('Author - Date - Comment', 'magone'), 
			'd_a_c' => esc_html__('Date - Author - Comment', 'magone'), 
			'd_c_a' => esc_html__('Date - Comment - Author', 'magone'), 					
		)
	),
	
	'show_format_icon' => array(
		'label' => esc_html__('Show Format Icon', 'magone'), 
		'description' => esc_html__('Show format icon when mouse hover an item of box', 'magone'),
		'type' => 'checkbox', 
		'default' => false
	),
	'show_review_score' => array(
		'label' => esc_html__('Show Review Score', 'magone'), 
		'description' => esc_html__('Show review score if have', 'magone'),
		'type' => 'checkbox', 
		'default' => false
	),
	'show_view_count' => array(
		'label' => esc_html__('Show View Count', 'magone'), 
		'description' => esc_html__('Show view count', 'magone'),
		'type' => 'checkbox', 
		'default' => false
	),
	'number_cates' => array(
		'label' => esc_html__('Number Categories', 'magone'), 
		'description' => esc_html__('Number categories name will be displayed in each item. Set to 0 to hide', 'magone'),
		'type' => 'range', 
		'max' => 4,
		'default' => 1
	),
	'snippet_length' => array(
		'label' => esc_html__('Snippet Length', 'magone'), 
		'description' => esc_html__('Snippet / excerpt length. Input 0 to hide', 'magone'),
		'type' => 'range', 
		'max' => 500,
		'default' => 150
	),
	'thumbnail_height' => array(
		'label' => esc_html__('Thumbnail Height', 'magone'), 
		'description' => esc_html__('Thumbnail image height. Set to 0 and the box will show image as natural height without cropping', 'magone'),
		'type' => 'range', 
		'max' => 800,
		'default' => 150
	),
	'pagination' => array(
		'label' => esc_html__('Pagination', 'magone'), 	
		'description' => esc_html__('Will not show if you did not ignore sticky posts', 'magone'), 	
		'type' => 'select', 
		'choices' => array(
			'' => esc_html__('None', 'magone'), 
			'number' => esc_html__('Number', 'magone'), 
			'loadmore' => esc_html__('Loadmore', 'magone'), 
			'nextprev' => esc_html__('Next / Previous', 'magone')
		),
		'default' => '',		
	),
	
	
	'rainbow_thumb_bg' => array(
		'label' => esc_html__('Show Rainbow Thumbnail Background Color', 'magone'), 
		'description' => esc_html__('Regardless the Thumbnail Background Color option, just using random colors instead', 'magone'),
		'type' => 'checkbox', 
		'default' => false
	),
);

global $MagOne_Article_Fields;
$MagOne_Article_Fields = array();

// slider
$MagOne_Article_Fields['slider'] = $MagOne_Article_Common_Fields;
$MagOne_Article_Fields['slider']['number_cates']['default'] = 0;
$MagOne_Article_Fields['slider']['snippet_length']['default'] = 0;
$MagOne_Article_Fields['slider']['show_nav'] = array(
	'label' => esc_html__('Show Navigate Buttons', 'magone'), 
	'description' => esc_html__('The arrow buttons which allow user navigate slides', 'magone'), 
	'type' => 'checkbox', 
	'default' => true
);
$MagOne_Article_Fields['slider']['show_dots'] = array(
	'label' => esc_html__('Show Dot Buttons', 'magone'), 
	'description' => esc_html__('The dot buttons which allow user navigate slides', 'magone'), 
	'type' => 'checkbox', 
	'default' => true
);
$MagOne_Article_Fields['slider']['speed'] = array(
	'label' => esc_html__('Speed', 'magone'), 
	'description' => esc_html__('The animate speed in miliseconds', 'magone'), 
	'type' => 'number',
	'default' => 5000
);
unset($MagOne_Article_Fields['slider']['rainbow_thumb_bg']);
unset($MagOne_Article_Fields['slider']['pagination']);
unset($MagOne_Article_Fields['slider']['item_title']);


$MagOne_Article_Fields['slider']['thumbnail_height']['default'] = 400;
$MagOne_Article_Fields['slider']['thumbnail_height']['min'] = 50;
$MagOne_Article_Fields['slider']['thumbnail_height']['description'] = esc_html__('Thumbnail Image Height. If the image not fit in thumbnail window, it will be cropped', 'magone');

// carousel
$MagOne_Article_Fields['carousel'] = $MagOne_Article_Fields['slider'];
$MagOne_Article_Fields['carousel']['column'] = array(
	'label' => esc_html__('Number Column', 'magone'), 
	'description' => esc_html__('Number column of carousel', 'magone'),
	'type' => 'range', 
	'min' => 1,
	'max' => 10,
	'default' => 2
);
$MagOne_Article_Fields['carousel']['thumbnail_height']['default'] = 215;
unset($MagOne_Article_Fields['carousel']['snippet_length']);
unset($MagOne_Article_Fields['carousel']['item_title']);

// ticker
$MagOne_Article_Fields['ticker'] = $MagOne_Article_Fields['carousel'];
$MagOne_Article_Fields['ticker']['thumbnail_height']['default'] = 50;
$MagOne_Article_Fields['ticker']['column']['default'] = 4;
unset($MagOne_Article_Fields['ticker']['show_dots']);
unset($MagOne_Article_Fields['ticker']['item_title']);
unset($MagOne_Article_Fields['ticker']['meta_item_order']);
unset($MagOne_Article_Fields['ticker']['show_comment']);
unset($MagOne_Article_Fields['ticker']['show_readmore']);
unset($MagOne_Article_Fields['ticker']['show_author']);
unset($MagOne_Article_Fields['ticker']['show_date']);
unset($MagOne_Article_Fields['ticker']['show_view_count']);

// sticky
$MagOne_Article_Fields['sticky'] = $MagOne_Article_Common_Fields;
$MagOne_Article_Fields['sticky']['thumbnail_height']['default'] = 310;
$MagOne_Article_Fields['sticky']['count']['default'] = 4;
unset($MagOne_Article_Fields['sticky']['pagination']);

// complex
$MagOne_Article_Fields['complex'] = $MagOne_Article_Common_Fields;
$MagOne_Article_Fields['complex']['thumbnail_height']['default'] = 189;
$MagOne_Article_Fields['complex']['count']['default'] = 4;
unset($MagOne_Article_Fields['complex']['pagination']);

// one
$MagOne_Article_Fields['one'] = $MagOne_Article_Common_Fields;
$MagOne_Article_Fields['one']['thumbnail_height']['default'] = 370;

// two
$MagOne_Article_Fields['two'] = $MagOne_Article_Common_Fields;
$MagOne_Article_Fields['two']['thumbnail_height']['default'] = 300;
$MagOne_Article_Fields['two']['no_spacing'] = array(
	'label' => esc_html__('No Spacing', 'magone'), 
	'description' => esc_html__('Disable Spacing Between Items', 'magone'),
	'type' => 'checkbox', 
	'default' => false
);

// three
$MagOne_Article_Fields['three'] = $MagOne_Article_Common_Fields;
$MagOne_Article_Fields['three']['no_spacing'] = array(
	'label' => esc_html__('No Spacing', 'magone'), 
	'description' => esc_html__('Disable Spacing Between Items', 'magone'),
	'type' => 'checkbox', 
	'default' => false
);
// blogging
$MagOne_Article_Fields['blogging'] = $MagOne_Article_Common_Fields;
$MagOne_Article_Fields['blogging']['thumbnail_height']['default'] = 180;
unset($MagOne_Article_Fields['blogging']['item_title']);

// simple-one
$MagOne_Article_Fields['simple-one'] = $MagOne_Article_Common_Fields;
$MagOne_Article_Fields['simple-one']['thumbnail_height']['default'] = 200;
unset($MagOne_Article_Fields['simple-one']['pagination']);

// list
$MagOne_Article_Fields['list'] = $MagOne_Article_Common_Fields;
unset($MagOne_Article_Fields['list']['thumbnail_height']);
unset($MagOne_Article_Fields['list']['snippet_length']);
unset($MagOne_Article_Fields['list']['number_cates']);
unset($MagOne_Article_Fields['list']['thumb_bg_color']);
unset($MagOne_Article_Fields['list']['rainbow_thumb_bg']);
unset($MagOne_Article_Fields['list']['show_format_icon']);
unset($MagOne_Article_Fields['list']['item_title']);

$MagOne_Article_Fields['list']['show_index'] = array(
	'label' => esc_html__('Show Index', 'magone'), 
	'description' => esc_html__('Show index number before each item', 'magone'),
	'type' => 'checkbox', 
	'default' => false
);

// grid
$MagOne_Article_Fields['grid'] = $MagOne_Article_Common_Fields;
$MagOne_Article_Fields['grid']['count']['default'] = 4;
$MagOne_Article_Fields['grid']['thumbnail_height']['default'] = 400;
$MagOne_Article_Fields['grid']['number_cates']['default'] = 0;
$MagOne_Article_Fields['grid']['show_author']['default'] = '';
$MagOne_Article_Fields['grid']['show_comment']['default'] = '';
$MagOne_Article_Fields['grid']['show_date']['default'] = '';
$MagOne_Article_Fields['grid']['snippet_length']['default'] = 0;
$MagOne_Article_Fields['grid']['show_readmore']['default'] = '';
unset($MagOne_Article_Fields['grid']['item_title']);



global $Rainbow_Colors;
$Rainbow_Colors = array('#292484,#DC4225', '#81AF59,#A83279', '#417711,#DC4225',  '#E0BE00,#FD340F', '#D38312,#002F4B', '#A83279,#292484', '#002F4B,#417711');
// use this class inside LOOP only
class MagOne_Article_Item {
	var $id;
	var $link;
	var $title;
	var $title_attr;
	var $date;
	var $time;
	var $format;
	var $args;
	var $has_thumbnail;
	var $author_name;
	
	/* THIS FUNCTION RUN WHEN CREATE CLASS VARIABLE
	 * we will use this to get some basic thing that will be use in every methods
	 */
	function __construct($args = array()) {
		$this->id = get_the_ID();
		$this->link = get_permalink();
		$this->title = get_the_title();
		$this->title_attr = esc_attr($this->title);
		$this->date = get_the_date();
		$this->time = get_the_time();
		$this->format = get_post_format();
		$this->args = $args;
		$this->has_thumbnail = magone_get_post_img_src();

		// remake arguments
		if (!isset($this->args['show_date']) || !$this->args['show_date'] || $this->args['show_date'] == 'none') {
			$this->args['show_date'] = false;
		}
		if (!isset($this->args['show_author']) || !$this->args['show_author'] || $this->args['show_author'] == 'none') {
			$this->args['show_author'] = false;
		}
		if (!isset($this->args['meta_item_order'])) {
			$this->args['meta_item_order'] = 'a-c-d';
		}

		$this->args['show_review_score'] = (isset($this->args['show_review_score']) && $this->args['show_review_score']);
		
		$this->args['show_view_count'] = (isset($this->args['show_view_count']) && $this->args['show_view_count']);
		
		$this->args['show_comment'] = (isset($this->args['show_comment']) && $this->args['show_comment'] && comments_open());
		$this->args['show_meta'] = ($this->args['show_date'] || $this->args['show_author'] || $this->args['show_comment']) || $this->args['show_view_count'];
		$this->args['show_format_icon'] = (isset($this->args['show_format_icon']) && $this->args['show_format_icon']);
		if (!isset($this->args['snippet_length']) || !is_numeric($this->args['snippet_length'])) {
			$this->args['snippet_length'] = 150;
		}
		$this->args['snippet_length'] = (int) $this->args['snippet_length'];
		
		$this->args['show_readmore'] = (!empty($this->args['show_readmore']));
	}	
	
	function snippet($length = -1, $wrap = 'div', $hellip = '[...]') {
		if ($length = -1) {
			$length = 150;
			if (isset($this->args['snippet_length']) && is_numeric($this->args['snippet_length'])) {
				$length = (int) $this->args['snippet_length'];
			}
		}
		if ($length == 0) {
			return '';
		}
		
		$hellip = apply_filters('magone_article_item_snippet_hellip', $hellip);
		
		return '<'.$wrap.' class="item-snippet">'. esc_html( magone_get_the_snippet( $length, $hellip ) ) . '</'.$wrap.'>';
	}
	
	function format_icon($format = '') {
		$ret = '';
		if ($format == '') {
			$format = $this->format;
		}
		
		$ret .= ' <i class="fa post-format-icon fa-';
		switch ($format) {
			case 'aside':
				$ret .= 'plus-circle';
				break;

			case 'gallery':
				$ret .= 'picture-o';
				break;

			case 'link':
				$ret .= 'link';
				break;

			case 'image':
				$ret .= 'camera';
				break;

			case 'quote':
				$ret .= 'quote-left';
				break;

			case 'status':
				$ret .= 'send-o';
				break;

			case 'video':
				$ret .= 'film';
				break;

			case 'audio':
				$ret .= 'music';
				break;

			case 'chat':
				$ret .= 'commenting';
				break;

			default:
				// standard format
				$ret .= 'newspaper-o';
				break;
		}
		$ret .= '"></i>';
		return $ret;
	}
	
	/* size: thumbnail/medium/large/full, natural_thumbnail/medium/large/full
	 * link_wrap: true mean wrap by link, false mean image only
	 * format_icon: true: add post format icon, false: not add.
	 */
	function thumbnail($size = 'thumbnail', $inner = false, $default = true) {		
		$natural = false;
		
		if (strpos($size, 'natural-') !== false) {
			$size = str_replace('natural-', '', $size);
			$natural = true;
		}			
		$style = '';
		if (isset($this->args['thumbnail_height']) && $this->args['thumbnail_height'] && 
			is_numeric($this->args['thumbnail_height'])) {
			$style = 'sty'.'le="height: '.$this->args['thumbnail_height'].'px"';
		}
		if (magone_is_gpsi()) {
			$size = 'thumbnail';
		}
		
		// fix size of thumbnail to full from version 2.6
		// optimizer will work to display rigth image
		$size = 'full';
		
		
		$thumbnail = magone_get_post_image(
			$this->id, 
			$size, 
			array(
				'alt' => $this->title_attr, 
				'title' => $this->title_attr
			),
			$default
		);
		
		if (!$thumbnail) {
			if ($default) {
				$thumbnail = '<img src="'.esc_url(get_theme_mod('default_post_thumbnail')).'" alt="'.esc_attr($this->title_attr).'" title="'.esc_attr($this->title_attr).'"/>';
			} else {
				return '';
			}			
		}
		
		$ret = '<a '.$style.' href="'.esc_url($this->link).'" class="thumbnail '.($natural ? 'natural' : 'item').'-thumbnail">';
		
		
		
		$ret .= $thumbnail;
		if ($inner && $this->args['show_format_icon']) {
			$ret .= '<span class="item-icon"><span class="item-icon-inner">'.$this->format_icon().'</span></span>';
		}

		// // thumbnail background
		
		if (isset($this->args['rainbow_thumb_bg']) && ($this->args['rainbow_thumb_bg']))	{
			global $Rainbow_Colors;
			$color = $Rainbow_Colors[rand ( 0 , count($Rainbow_Colors) -1)];
			$colors = explode(',', $color);
			$first_color = $colors[0];
			$style = 'sty'.'le="background-color: '.$first_color.';'.
				'background-image: -webkit-linear-gradient(135deg,'.$color.');'.
				'background-image: -moz-linear-gradient(135deg,'.$color.');'.
				'background-image: -o-linear-gradient(135deg,'.$color.');'.
				'background-image: linear-gradient(135deg,'.$color.');"';
			$ret .= '<span '.$style.' class="thumbnail-overlay"></span>';				
		} else if (isset($this->args['thumb_bg_color']) && $this->args['thumb_bg_color'] && $this->args['thumb_bg_color'] != '#000000') {			
			$ret .= '<span class="thumbnail-overlay"></span>';
		}
		
		
		$ret .= '</a>';
		if (!$inner && $this->args['show_format_icon']) {
			$ret .= '<a href="'.esc_url($this->link).'" class="item-icon"><span class="item-icon-inner">'.$this->format_icon().'</span></a>';
		}

		return $ret;
	}
	
	// $wrap_tag = blank to unwrap by heading tags
	// $class only affect if has tag
	function title($wrap_tag = 'h3', $class = 'item-title') {		
		$ret = '';
		
		if ($wrap_tag && $wrap_tag != 'a') {
			$ret .= '<'.$wrap_tag.' class="'.esc_attr($class).'">';
		}
		
		$ret .= '<a href="'.esc_url($this->link).'" title="'. esc_attr($this->title_attr).'"';
		if ($wrap_tag == '' || $wrap_tag == 'a') {
			$ret .= ' class="'.esc_attr($class).'"';
		}
		$ret .= '>'.
				$this->review_score(). wp_kses($this->title, array()) . 
		'</a>';
			
		if ($wrap_tag && $wrap_tag != 'a') {
			$ret .= '</'.$wrap_tag.'>';
		}
		
		return $ret;
	}
	
	function cate($class = '', $current_cate_id = 1) {
		$ret = '';
		if (!$this->args['show_category']) {
			return $ret;
		}
		if ($current_cate_id == 1 && is_numeric($this->args['category'])) {
			$current_cate_id = (int) $this->args['category'];
		}
		$class = 'cate '.$class;
		$categories = get_the_category();
		if($categories){
			foreach($categories as $category) {
				// to make sure has as least 1 cat
				if ($ret == '') {
					$ret = '<a class="'.$class.'" href="'.esc_url(get_category_link( $category->term_id )).'" title="' . esc_attr($category->cat_name) . '">' . 
							esc_html( $category->cat_name) . 
							'</a>';
				}
				
				// if has a cat different with box title cat, pick it
				if (((int) $category->term_id) != ((int)$current_cate_id)) {
					$ret = '<a class="'.esc_attr($class).'" href="'.esc_url(get_category_link( $category->term_id )).'" title="' . esc_attr($category->cat_name) . '">' . 
							esc_html( $category->cat_name ) .
							'</a>';
					break;
				}
			}
		}
		if (!$ret) {
			$ret = $backup_ret;
		}
		return $ret;
	}
	
	function cates($cate_class = 'cate-item') {
		$ret = '';
		if (!isset($this->args['number_cates'])) {
			return '';
		}
		if (!$this->args['number_cates']) {
			return '';
		}
		if (!is_numeric($this->args['number_cates'])) {
			return '';
		}
		$cate_count = (int) $this->args['number_cates'];

		$categories = get_the_category();
		if (empty($categories)) {
			return $ret;
		}
		
		$current_cate_ids = $this->args['current_cate_ids'];
		if (!is_array($current_cate_ids)) {
			$current_cate_ids = array();
		}
		
		// show categories that not in current cates
		$count = 0;
		for ($i = 0; $i < count($categories) && $count < $cate_count; $i++) {
			$cate = $categories[$i];
			if (!in_array($cate->term_id, $current_cate_ids)) {
				continue;
			}
			$count++;
			if ($ret) {
				$ret .= '<span>, </span>';
			}
			$ret .= '<a href="'.esc_url(get_category_link( $cate->term_id )).'">' .	
					esc_html( $cate->name ) . 
					'</a>';
		}
			
		
		// if not enough, add current cate to
		if ($count < $cate_count) {
			for ($i = 0; $i < count($categories) && $count < $cate_count; $i++) {
				$cate = $categories[$i];
				if (in_array($cate->term_id, $current_cate_ids)) {
					continue;
				}
				$count++;
				if ($ret) {
					$ret .= '<span>, </span>';
				}
				$ret .= '<a href="'.esc_url(get_category_link( $cate->term_id )).'">' . 
						esc_html( $cate->name ) .
						'</a>';
			}	
		}
		
		if ($ret) {
			$ret = '<div class="bg item-labels">'.$ret.'</div>';
		}
		
		return $ret;
	}
	
	function review_score() {

		$ret = '';
		if (!$this->args['show_review_score']) {
			return $ret;
		}
		$post_id = $this->id;
		$post_review_average_scale_score = get_post_meta($post_id, MAGONE_META_KEY_POST_REVIEW_AVERAGE, true);	
		$post_review_type = get_post_meta($post_id, 'post-review-type', true);
		
		if (!$post_review_average_scale_score || !$post_review_type) {
			return $ret;
		}		
		
		// backward scale
		$ret = '<span class="item-review"><i class="color fa fa-';
		if ('star' == $post_review_type) {
			$post_review_average_score = $post_review_average_scale_score * 5 / 100;
			$ret .= 'star';
		} else if ('point' == $post_review_type) {
			$post_review_average_score = $post_review_average_scale_score * 10 / 100;			
			$ret .= 'circle';
		} else {
			$post_review_average_score = $post_review_average_scale_score;
			$ret .= 'circle';
		}
		
		$ret .= '"></i> <b>'. number_format($post_review_average_score, 1).'</b></span>';
		
		
		
		return $ret;
	}
	
	function views() {
		$ret = '';		
		if (empty($this->args['show_view_count'])) {
			return $ret;
		}		
		
		$key = MAGONE_META_KEY_VIEWS;
		if (get_theme_mod('view_count_key')) {
			$key = get_theme_mod('view_count_key');
		}
		$views = get_post_meta($this->id, $key, true);
		if ($views) {
			$ret = ' <span class="meta-item meta-item-views"><i class="fa fa-eye"></i> <span>'.$views.'</span></span>';
		}
		return $ret;
	}
	
	function author() {	
		$ret = '';

		if (!$this->args['show_author']) {
			return '';
		}
		
		$id = get_the_author_meta('ID');
		$name = get_the_author_meta( 'display_name' );
		$avatar = get_avatar($id, 16, '', sprintf(esc_attr__("%s 's Author avatar", 'magone'), $name));
		
		if ($this->args['show_author'] == 'avatar' && $avatar) {
			$ret .= $avatar;// avatar from database
		} else if ($this->args['show_author'] == 'icon') {
			$ret .= '<i class="fa fa-pencil-square-o"></i>';
		}

		$ret .= ' <span>' . esc_html( $name ) . '</span>';

		return ('<a href="'.esc_url(get_author_posts_url($id)).'" target="_blank" class="meta-item meta-item-author">'.$ret.'</a>');
	}
	
	function comments() {
		if (!$this->args['show_comment']) {
			return '';
		}
		global $primary_comment_system;
		if ('wordpress' != $primary_comment_system) {
			add_filter('get_comments_number', 'magone_get_comments_number', 1, 2);
		}
		$comment_number = get_comments_number();		
		remove_filter('get_comments_number', 'magone_get_comments_number', 1);
		
		return '<a class="meta-item meta-item-comment-number" href="'.esc_url(get_comments_link()).'"><i class="fa fa-comment-o"></i> <span>' .$comment_number. '</span></a>';
	}
	
	/* type: date/short_date/time/date_time
	 */
	function date_time() {		
		if (!$this->args['show_date']) {
			return '';
		}

		$ret = '<a class="meta-item meta-item-date" href="'.esc_url($this->link).'"><i class="fa fa-clock-o"></i> <span>';

		switch ($this->args['show_date']) {
			case 'pretty':
				$ret .= sprintf( esc_html__( '%s ago', 'magone' ), human_time_diff( get_the_time( 'U' ), current_time( 'timestamp' ) ) );
				break;

			case 'short':
				if (get_option('date_format')) {
					$ret .= get_the_date(str_replace('F', 'M', get_option('date_format')));
				}
				break;
				
			case 'time':
				$ret .= $this->time;
				break;

			case 'date':
				$ret .= $this->date;
				break;
			
			default:
				$ret .= $this->date.' '.$this->time;
				break;
		}
		$ret .= '</span></a>';
		
		return $ret;
	}
	
	
	
	function meta() {
		$ret = '';
		if (!$this->args['show_meta']) {
			return '';
		}
		

		$ret = explode(',', str_replace(array('_', '-'), ',', $this->args['meta_item_order']));
		for ($i = 0; $i < count($ret); $i++) {
			if ($ret[$i] == 'a') {
				$ret[$i] = $this->author();
			} else if ($ret[$i] == 'c') {
				$ret[$i] = $this->comments();
			} else if ($ret[$i] == 'd') {
				$ret[$i] = $this->date_time();
			}
		}
		
		return ('<div class="meta-items">'. implode('', $ret) . $this->views().'</div>');
	}
	function readmore() {
		if ($this->args['show_readmore']) {			
			return '<div class="item-readmore-wrapper"><a class="item-readmore" href="'.esc_url($this->link).'#more">'.esc_html__('Read More', 'magone').'</a></div>';
		}
		return '';
	}

	function item_class ($i = 0, $extra = '') {	
		$item_class = 'shad item item-'.$i;
		if ($i % 2 == 0) {
			$item_class .= ' item-two';
		}
		if ($i % 3 == 0) {
			$item_class .= ' item-three';
		}
		if ($i % 4 == 0) {
			$item_class .= ' item-four';	
		}
		for ($j = 1; $j <= $i; $j++) {
			$item_class .= ' than-'.($j-1);
		}
		return (' class="'.$item_class.$extra.'"');
	}
}



// show article boxes
global $MagOne_Article_Box_Loaded_Posts;
$MagOne_Article_Box_Loaded_Posts = array();
function magone_article_box_content($widget_id, $type = '', $atts = array(), $content = '', $cate_ids = array(), $cates = array()) {		
	$atts['current_cate_ids'] = $cate_ids;
	if ($widget_id != 'magone-archive-blog-rolls') {
		$query_args = array();
		global $MagOne_Article_Box_Loaded_Posts;
		
		// Preparing query arguments to load
		
		$query_args['post_type'] = 'post';
		$query_args['post_status'] = 'publish';
		$query_args['posts_per_page'] = (int) $atts['count'];
		if (isset($atts['paged'])) {
			$query_args['paged'] = (int) $atts['paged'];
		}

		if ($atts['ignore_sticky_posts']) {
			$query_args['ignore_sticky_posts'] = true;		
		}
		
		if ($widget_id != 'ajax') {			
			if ($atts['exclude_loaded_posts'] && count($MagOne_Article_Box_Loaded_Posts)) {
				$query_args['post__not_in'] = $MagOne_Article_Box_Loaded_Posts;				
			}
		} else {
			if ($atts['exclude_loaded_posts'] && isset($atts['post__not_in'])) {
				$query_args['post__not_in'] = $atts['post__not_in'];
			}
		}

		/* arguments for categories */
		if (count($cate_ids)) {
			if ($atts['cate_scenario'] == 'combination') {
				$query_args['category__in'] = $cate_ids;
			} else if ($atts['cate_scenario'] == 'intersection') {
				$query_args['category__and'] = $cate_ids;
			} else {
				$query_args['cat'] = $cate_ids[0];
			}
		}
		if ($atts['exclude_cates']) {
			if (is_string($atts['exclude_cates'])) {
				$atts['exclude_cates'] = explode(',', $atts['exclude_cates']);
				foreach ($atts['exclude_cates'] as $key => $value) {
					$atts['exclude_cates'][$key] = (int) $value;
				}
			}			
			$query_args['category__not_in'] = $atts['exclude_cates'];			
		}
		
		$view_meta_key = get_theme_mod('view_count_meta_key_name', MAGONE_META_KEY_VIEWS);
		
		if ('popular' == $atts['orderby']) {
			$query_args['meta_key'] = $view_meta_key;
			$query_args['orderby'] = 'meta_value_num';
		} 
		elseif ('comment' == $atts['orderby']) {
			$query_args['orderby'] = 'comment_count';
		} 
		elseif ('random' == $atts['orderby']) {
			$query_args['orderby'] = 'rand';
		} 
		elseif ('latest-review' == $atts['orderby']) {
			$query_args['meta_key'] = MAGONE_META_KEY_POST_REVIEW_AVERAGE;
		} 
		elseif ('random-review' == $atts['orderby']) {
			$query_args['meta_key'] = MAGONE_META_KEY_POST_REVIEW_AVERAGE;
			$query_args['orderby'] = 'rand';
		} 
		elseif ('popular-review' == $atts['orderby']) {
			$query_args['meta_key'] = MAGONE_META_KEY_POST_REVIEW_AVERAGE;
			$query_args['orderby'] = 'meta_value_num';
		}

		if ($atts['tags']) {			
			if (is_string($atts['tags'])) {
				$atts['tags'] = explode(',', $atts['tags']);
			}
			$query_args['tag__in'] = $atts['tags'];
		}
		

		if ($atts['authors']) {
			if (is_string($atts['authors'])) {
				$atts['authors'] = explode(',', $atts['authors']);
			}
			$query_args['author__in'] = $atts['authors'];
		}

		if ($atts['exclude_authors']) {
			if (is_string($atts['exclude_authors'])) {
				$atts['exclude_authors'] = explode(',', $atts['exclude_authors']);
			}
			$query_args['author__not_in'] = $atts['exclude_authors'];
		}
		
		// since 3.3
		if (isset($atts['duration'])) {
			if ('year' == $atts['duration']) {//1 year ago
				$query_args['date_query'] = array(
					array(
						'column' => 'post_date_gmt',
						'after' => '1 year ago',
					)
				);
				
			} else if ('month' == $atts['duration']) {//1 month ago
				$query_args['date_query'] = array(
					array(
						'column' => 'post_date_gmt',
						'after' => '1 month ago',
					)				
				);
			} else if ('week' == $atts['duration']) {//1 week ago
				$query_args['date_query'] = array(
					array(
						'column' => 'post_date_gmt',
						'after' => '1 week ago',
					)
				);
			}
		}
		
		// loading entries	
		$entries = new WP_Query( $query_args );			
	} 
	// if this is archive page, use global query
	else {
		global $wp_query;
		$entries = $wp_query;
	}
	

	
	if ($widget_id != 'ajax' && isset($atts['pagination']) && $atts['pagination']) {
		$atts['max_num_pages'] = $entries->max_num_pages;
		$atts['found_posts'] = $entries->found_posts;
		if ($atts['exclude_loaded_posts'] && count($MagOne_Article_Box_Loaded_Posts)) {
			$atts['post__not_in'] = $MagOne_Article_Box_Loaded_Posts;
		}
		wp_localize_script( 'magone-main', 'Atts_'.$widget_id, $atts);
	}
	
	$entry_length = 0;
	if (isset($entries->posts) && is_array($entries->posts)) {
		$entry_length = count($entries->posts);
	}

	// widget content
	$ret = '';
	$ret_0 = '';
	$ret_1 = '';
	$ret_2 = '';
	$ret_3 = '';
	$page_total = 1;
	$page_first = $entry_length;
	$page_other = 0;
	$ret_mobile = '';
		
	if ($type == 'grid') {
		// find page information for GRID widget
		if ($entry_length > 5) {
			$page_total = ceil($entry_length / 5);
			for ($page_other = 5; $page_other >= 1; $page_other-=1) { // use this if want other pages always crowder than first page
				$page_first = $entry_length - ($page_total - 1) * $page_other;
				if (abs($page_first - $page_other) <= 2) {
					break;
				}
			}
		}
		if ($page_other > 5) {
			$page_other = 5;
			$page_first = $entry_length - $page_total * $page_other;	
		}
	}
	
	if ( ! isset( $atts['item_title'] )  || ! $atts['item_title'] ) {
		$atts['item_title'] = 'in';
	}


	// fill widget content with items
	$i = 0;	
	if ($entries->have_posts()) :		
		while ( $entries->have_posts() ) : $entries->the_post();
			$e = new MagOne_Article_Item($atts);
			global $MagOne_Article_Box_Loaded_Posts;
			if ($MagOne_Article_Box_Loaded_Posts == null) {
				$MagOne_Article_Box_Loaded_Posts = array();
			}
			if (is_array($MagOne_Article_Box_Loaded_Posts)) {
				array_push($MagOne_Article_Box_Loaded_Posts, $e->id);
			}
			$thumb_size = 'full';
			switch ($type) {
				case 'slider':
					$slider_item = '<div class="item slider-item slider-item-'.$i.'"><div class="slider-item-inner">'
						. 		$e->thumbnail('full')
						.		'<div class="slider-item-content">'
						.			$e->cates()
						.			$e->meta()
						.			$e->title();
					if ($e->args['snippet_length'] || $e->args['show_readmore']) {
					$slider_item .= '<div class="slider-item-sub">'
						. 			$e->snippet(-1, 'span')
						. 			$e->readmore()
						. '</div>';
					}
					$slider_item .= ''
						. 		'</div>' /*slider-item-content*/
						. '</div></div>';/* slide-item and inner */
					
					if ( is_rtl() ) {						
						$ret = $slider_item . $ret;
					} 
					else {
						$ret .= $slider_item;
					}
					break;

				case 'sticky':					
					if ($i != 1 && $i != 2 && $i != 3 && isset($e->args['thumbnail_height']) && ($e->args['thumbnail_height'] == 'auto' || $e->args['thumbnail_height'] == 0)) {
						$thumb_size = 'natural-medium';
					}
					if ($i == 4) {
						$ret .= '<div class="clear"></div>';
					}
					$ret .= '<div '.$e->item_class($i, ($i >= 4)?' item-extra':'').'>'
						. 		'<div class="item-main">'
						.			$e->thumbnail($thumb_size)
						.			'<div class="item-content'. ( $atts['item_title'] == 'in' ? ' gradident' : '' ) . '">'
						.				$e->cates()
						.				( $atts['item_title'] == 'in' ? $e->title() : '' )
						.			'</div>'
						.		'</div>';
					if ( $i == 0 && 
						 ( $e->args['snippet_length'] || 
						   $e->args['show_meta']
						 ) ||
						 $atts['item_title'] == 'out'
						) {
						$ret .= '<div class="item-sub bg">' . 
									( $atts['item_title'] == 'out' ? $e->title() : '' ) .
									( $i == 0 ? $e->snippet() : '' ). 
									( $i == 0 ? $e->meta() : '' ) . 
								'</div>';
					}
					$ret .= '</div>';
					break;

				case 'complex':	
					if ($i == 0 && isset($e->args['thumbnail_height']) && ($e->args['thumbnail_height'] == 'auto' || $e->args['thumbnail_height'] == 0)) {
						$thumb_size = 'natural-medium';
					}
					if ($i % 2 == 0 && $i >= 4) {
						$ret .= '<div class="clear"></div>';
					}
					$ret .= '<div '.$e->item_class($i, ($i >= 4)?' item-extra':'').'>'
						. 		'<div class="item-main">'
						.			($i == 0? $e->thumbnail($thumb_size) : '')
						.			'<div class="item-content'. ( 0 == $i && $atts['item_title'] == 'in' ?' gradient':'').'">'
						.				$e->cates()
						.				( $i || 'in' == $atts['item_title'] ? $e->title() : '' )
						.			'</div>'
						.		'</div>';
					if ($i == 0 && ($e->args['snippet_length'] || $e->args['show_meta'] || 'out' == $atts['item_title'])) {
						$ret .= '<div class="item-sub">' . 
								( 'out' == $atts['item_title'] ? $e->title() : '' ) .
								$e->snippet() . $e->readmore(). $e->meta()	. '</div>';
					}
					$ret .= '</div>';
					break;
					
				case 'simple-one':
					if (isset($e->args['thumbnail_height']) && ($e->args['thumbnail_height'] == 'auto' || $e->args['thumbnail_height'] == '0')) {
						$thumb_size = 'natural-medium';
					}
					$ret .= '<div '.$e->item_class($i, $i>0?' item-extra': '').'>'
							. 		'<div class="item-main">'
							.			($i==0?$e->thumbnail($thumb_size):'')
							.			'<div class="item-content'. ( 0 == $i && $atts['item_title'] == 'in' ?' gradient':'').'">'
							.				$e->cates()
							.				( $i || 'in' == $atts['item_title'] ? $e->title() : '' )
							.			'</div>'
							.		'</div>';
					if ($i == 0 && ($e->args['snippet_length'] || $e->args['show_meta'] || 'out' == $atts['item_title'])) {
						$ret .= 	'<div class="item-sub">' 
							.	( 'out' == $atts['item_title'] ? $e->title() : '' )
							. 		$e->snippet() . $e->readmore() . $e->meta()	
							. 	'</div>'
							. 	'<div class="clear"></div>';
					}
					$ret .= '</div>';// end item
					break;
				
				case 'carousel':
					$carousel_item = '<div class="item carousel-item carousel-item-' . $i . '"><div class="carousel-item-inner">'
						. 		$e->thumbnail('full')
						.		'<div class="carousel-item-content">'
						.			$e->cates()
						.	 		$e->title()
						.			$e->meta()
						. 		'</div>' /*carousel-item-content*/
						. '</div></div>';/* carousel-item and inner */			
					if ( is_rtl() ) {						
						$ret = $carousel_item . $ret;
					} 
					else {
						$ret .= $carousel_item;
					}
					break;
					
				case 'blogging':
					$e->has_thumbnail = magone_get_post_img_src( $e->id, 'thumbnail' );
					$thumb_size = 'full';
					if ($i == 0 && isset($e->args['thumbnail_height']) && ($e->args['thumbnail_height'] == 'auto' || $e->args['thumbnail_height'] == 0)) {
						$thumb_size = 'natural-medium';
					}

					$ret .= '<div '.$e->item_class($i, (!$e->has_thumbnail)?' no-thumbnail': '').'>'
						.		(($e->has_thumbnail)? $e->thumbnail($thumb_size, true):'')
						.		'<div class="item-content">'
						.			$e->cates()
						.			$e->title()
						.			$e->meta()
						.			'<div class="item-sub">' . $e->snippet() . $e->readmore() .	'</div>'
						.			'<div class="clear"></div>'
						.		'</div><div class="clear"></div>'/*end item content*/
						.	'</div>'; // end item
					
					break;

				case 'one':
					if (isset($e->args['thumbnail_height']) && ($e->args['thumbnail_height'] == 'auto' || $e->args['thumbnail_height'] == 0)) {
						$thumb_size = 'natural-full';
					}
					
					$ret .= '<div '.$e->item_class($i).'>'
						. 		'<div class="item-main">'
						.		$e->thumbnail($thumb_size)
						.			'<div class="item-content'. ( $atts['item_title'] == 'in' ? ' gradident' : '' ) . '">'
						.				$e->cates()
						.				( $atts['item_title'] == 'in' ? $e->title() : '' )
						.			'</div>'
						.		'</div>';
					if ( $e->args['snippet_length'] || 
						 $e->args['show_meta'] || 
						 $e->args['show_readmore'] || 
						 'out' == $atts['item_title'] ) {
						$ret .= 	'<div class="item-sub">' .
								( 'out' == $atts['item_title'] ? $e->title() : '' )
							. 		$e->meta() . $e->snippet() . $e->readmore()	
							. 	'</div>'
							. 	'<div class="clear"></div>';
					}
					$ret .= '</div>';// end item				
					
					break;

				case 'two':
					if (isset($e->args['thumbnail_height']) && ($e->args['thumbnail_height'] == 'auto' || $e->args['thumbnail_height'] == '0')) {
						$thumb_size = 'natural-medium';
					}
					$ret = '<div '.$e->item_class($i).'>'
							. 		'<div class="item-main">'
							.			$e->thumbnail($thumb_size)
							.			'<div class="item-content'. ( $atts['item_title'] == 'in' ? ' gradident' : '' ) . '">'
							.				$e->cates()
							.				( $atts['item_title'] == 'in' ? $e->title() : '' )
							.			'</div>'
							.		'</div>';
					if ( $e->args['snippet_length'] || 
						 $e->args['show_date'] || 
						 $e->args['show_comment'] || 
						 $e->args['show_readmore'] || 
						 'out' == $atts['item_title'] ) {
						$ret .= '<div class="item-sub">' .
								( 'out' == $atts['item_title'] ? $e->title() : '' )
							. 		$e->snippet() . $e->readmore() . $e->meta()
							. 	'</div>'
							. 	'<div class="clear"></div>';
					}
					$ret .= '</div>';// end item

					if ($i % 2) {
						$ret_2 .= $ret;
					} else {
						$ret_1 .= $ret;
					}
					$ret_mobile .= $ret;
					$ret_0 .= $ret;
					if ($i % 2 == 1) {
						$ret_0 .= '<div class="clear"></div>';
					}
					break;
					
				case 'three':
					if ($e->args['thumbnail_height'] == 'auto' || $e->args['thumbnail_height'] == 0) {
						$thumb_size = 'natural-medium';
					}

					$ret = '<div '.$e->item_class($i).'>'
						. 		'<div class="item-main">'
						.			$e->thumbnail($thumb_size)
						.			'<div class="item-content'. ( $atts['item_title'] == 'in' ? ' gradident' : '' ) . '">'
						.			$e->cates() 
						.			( $atts['item_title'] == 'in' ? $e->title() : '' )
						.		'</div>'
						.	'</div>';
					if ($e->args['snippet_length'] || $e->args['show_meta'] || $e->args['show_readmore'] || 'out' == $atts['item_title']) {
						$ret .= '<div class="item-sub">' . ( 'out' == $atts['item_title'] ? $e->title() : '' ) . $e->snippet() . $e->readmore() . $e->meta() . '</div>';
					}
					$ret .= '</div>';

					if ($i % 3 == 0) {
						$ret_1 .= $ret;
					} else if ($i % 3 == 1) {
						$ret_2 .= $ret;
					} else {
						$ret_3 .= $ret;
					}
					$ret_mobile .= $ret;
					$ret_0 .= $ret;
					if ($i % 3 == 2) {
						$ret_0 .= '<div class="clear"></div>';
					}
					break;


				case 'ticker':										
					if (isset($e->args['thumbnail_height']) && ($e->args['thumbnail_height'] == 'auto' || $e->args['thumbnail_height'] == '0')) {
						$thumb_size = 'natural-thumbnail';
					}
					$ticker_item = '<div class="ticker-item carousel-item-'.$i.'"><div class="ticker-item-inner">'
						. 		$e->thumbnail($thumb_size)
						.		'<div class="ticker-item-content">'
						.			$e->cates()
						.	 		$e->title()
						. 		'</div>' /*ticker-item-content*/
						. '</div><div class="clear"></div></div>';/* ticker-item and inner */
					
					if ( is_rtl() ) {						
						$ret = $ticker_item . $ret;
					} 
					else {
						$ret .= $ticker_item;
					}
					
					break;

				case 'grid':
					$page_current = 0;					
					if ($i >= $page_first) {
						$page_current = ceil(($i + 1 - $page_first) / $page_other);
					}
					$start_index = 0;
					if ($page_current >= 1) {
						$start_index = ($page_current - 1) * $page_other + $page_first;
					}
					$page_layout = ($page_current == 0 ? $page_first : $page_other);
					$page_type = ($page_current % 2 ? 'odd' : 'even');
					$start_next_sub_index = ($page_type == 'even' ? ($start_index + 1) : ($start_index + $page_layout - 1));
								
					if ($i == $start_index) {
						// close previous page and its end sub
						if ($i > 0) {
							$ret .= '<div class="clear"></div></div><div class="clear"></div></div>';
						}

						// and open a new page										
						$ret .= '<div class="grid-page">';

						// also open the first sub page
						$sub_style = '';
						if (isset($e->args['thumbnail_height']) && is_numeric($e->args['thumbnail_height'])) {
							$sub_style .= ' sty'.'le="height:'.$e->args['thumbnail_height'].'px"';
						}			
						$ret .= '<div class="grid-sub grid-sub-'.($entry_length == 1? 'full' : ($page_type == 'even' ? 'wide' : 'narrow')).' grid-sub-'.($page_type == 'even' ? 1 : ($page_layout - 1)).'"'.$sub_style.'>';				
						
					} 

					// determine if it's started of next sub-page
					$start_sub_index = $start_index;

					if ($i == $start_next_sub_index) {
						$ret .= '<div class="clear"></div></div>';					

						// start new sub
						$sub_style = '';
						if (isset($e->args['thumbnail_height']) && is_numeric($e->args['thumbnail_height'])) {
							$sub_style .= ' st'.'yle="height:'.$e->args['thumbnail_height'].'px"';
						}						
						$ret .= '<div class="grid-sub grid-sub-'.($entry_length == 1? 'full' : ($page_type == 'even' ? 'narrow' : 'wide')).' grid-sub-'.($page_type == 'even' ? ($page_layout - 1) : 1).'"'.$sub_style.'>';					
					}
					if ($i >= $start_next_sub_index) {
						$start_sub_index = $start_next_sub_index;
					}
					
					// add item to grid page
					$ret .= '<div class="item grid-item grid-item-'.$i.' grid-sub-item-'.($i - $start_sub_index).'"><div class="grid-item-inner">'
						. 		$e->thumbnail('full')
						.		'<div class="grid-item-content item-content gradient">'
						.			$e->cates()
						.			$e->meta()
						.			$e->title()
						. 			$e->snippet()
						. 			$e->readmore()
						. 		'</div>' /*grid-item-content*/
						. '</div></div>';/* grid-item and inner */
					
					if ($i == $entry_length - 1) {
						// close sub-page and last page
						$ret .= '<div class="clear"></div></div><div class="clear"></div></div>';	
					}
					break;

				case 'list':
					$ret .= '<div '.$e->item_class($i, ' table').'>'.
						'<div class="tr">'.
							($e->args['show_index']? '<div class="td item-index">'.($i+1).'.</div>':'').
							'<div class="td">'.
								'<h3 class="item-title">'.									
										($e->args['show_author']? $e->author(). ': ' : '') .
										'<a href="'.esc_url($e->link).'"><span class="title-name">'.$e->review_score().  wp_kses($e->title, array()).'</span></a>'.
										($e->args['show_comment']? ' <a class="meta-item meta-item-comment-number" href="'.esc_url(get_comments_link()).'"><i class="fa fa-comment-o color"></i> <span class="color">' .get_comments_number(). '</span></a>': ''). $e->views() .
								'</h3>'.
								($e->args['show_date']? ('<span class="meta-item meta-item-date">'.$e->date_time().'</span>'):'').
							'</div>'.
							($e->args['show_readmore']? 
							'<div class="td item-readmore">'.
								'<a href="'.esc_url($e->link).'#more"><i class="fa fa-angle-right"></i></a>'.
							'</div>':'').
						'</div>'.
					'</div><div class="clear"></div>';
					break;

				default:
					break;
			}
			$i++;
			if ($widget_id != 'magone-archive-blog-rolls' && $i >= (int) $atts['count']) {
				break;
			}
		endwhile;
		
		// pre-made content
		if ($type == 'two') :
			if (isset($atts['thumbnail_height']) && !$atts['thumbnail_height']) {
				$ret = '<div class="two-col two-col-left col-1">'. $ret_1 . '</div>'
					. '<div class="two-col two-col-right col-2">'	. $ret_2 . '</div>'
					. '<div class="two-col-mobile mobile">'. $ret_mobile . '</div>';
			} else {
				$ret = $ret_0;
			}
		endif;
		if ($type == 'three') :
			if (isset($atts['thumbnail_height']) && !$e->args['thumbnail_height']) {
				$ret = '<div class="three-col col-1">'. $ret_1 . '</div>'
					. '<div class="three-col col-2">'. $ret_2 . '</div>'
					. '<div class="three-col col-3">'. $ret_3 . '</div>'
					. '<div class="three-col-mobile mobile">'. $ret_mobile . '</div>';
			} else {
				$ret = $ret_0;
			}
		endif;
		
	else:
		$ret = esc_html__('Not found any post', 'magone');
	endif;
	wp_reset_postdata();
	return $ret;
}

function magone_article_box_style($widget_id, $type = '', $atts = array(), $content = '') {
	$style = '';
	$wid = '#'.$widget_id;
	
	if (isset($atts['main_color']) && $atts['main_color'] && $atts['main_color'] != 'false') {
		// common style
		$style .= 
		$wid.' a,'.
		$wid.' .slider-item .meta-item .fa,'.
		$wid.' .color {color: '.$atts['main_color'].'}'.
		$wid.' .border,'.
		$wid.' a.feed-widget-pagination-button:hover {color: white}'.
		$wid.' a.feed-widget-pagination-button.active:hover {color: '.$atts['main_color'].'}'.
		
		$wid.' .bg,'.
		$wid.'.box-title h2.widget-title,'.
		($type=='slider'? $wid.' .slider-item .item-readmore:hover,': '').
		($type=='grid'? $wid.' .grid-item .item-readmore:hover,': '').
		$wid.' .owl-dot.active {background: '.$atts['main_color'].'}'.
		
		$wid.'.box-title h2.widget-title a,'.
		$wid.' .item-labels a,'.
		$wid.' .item-title a,'.
		$wid.' .meta-item,'.
		$wid.' .feed-widget-labels a'.
		($type=='slider'? ', '.$wid.' .slider-item .item-readmore': '').
		($type=='grid'? ', '.$wid.' .grid-item .item-readmore': '').
		' {color:white}'.
		
		($type=='slider'? $wid.' .slider-item .meta-item .fa {color: '.$atts['main_color'].'}': '').
		($type == 'grid' ? $wid.' .grid-item .meta-item .fa {color: '.$atts['main_color'].'}':'').
		($type == 'list' ? $wid.'.list .meta-item {color: '.$atts['main_color'].'}':'').
		($type == 'two' ? $wid.'.two .meta-items .meta-item {color: #333':'').
		($type == 'three' ? $wid.'.three .meta-items .meta-item {color: #000':'').
		
		($type=='complex'? $wid.'.complex .than-0 .item-labels {background: none}': '').				
		($type=='blogging'? $wid.'.blogging .item-labels {background: none}': '').
		($type=='left'? $wid.'.left .item-extra .item-labels {background: none}': '').
		($type=='right'? $wid.'.right .item-extra .item-labels {background: none}': '').
		($type=='simple-one'? $wid.'.simple-one .item-extra .item-labels {background: none}': '').
		($type=='ticker'? $wid.'.ticker .item-labels {background: none}': '').
				
		($type=='complex'? $wid.'.complex .than-0 .item-labels a,'.$wid.'.complex .item-sub .meta-item {color: '.$atts['main_color'].'}': '').
		($type=='blogging'? $wid.'.blogging .item-labels a {color: '.$atts['main_color'].'}': '').
		($type=='left'? $wid.'.left .item-extra .item-labels a {color: '.$atts['main_color'].'}': '').
		($type=='right'? $wid.'.right .item-extra .item-labels a {color: '.$atts['main_color'].'}': '').
		($type=='simple-one'? $wid.'.simple-one .item-extra .item-labels a {color: '.$atts['main_color'].'}': '').
		($type=='ticker'? $wid.'.ticker .item-labels a {color: '.$atts['main_color'].'}': '').
				
		($type=='complex'? $wid.'.complex .than-0 .item-title a {color: black}': '').
		($type=='blogging'? $wid.'.blogging .item-title a {color: black}': '').
		($type=='one'? $wid.'.one .meta-item {color: black}': '').
		($type=='left'? $wid.'.left .item-extra .item-title a {color: black}': '').
		($type=='right'? $wid.'.right .item-extra .item-title a {color: black}': '').
		($type=='simple-one'? $wid.'.simple-one .item-extra .item-title a {color: black}': '').
		($type=='ticker'? $wid.'.ticker .item-title a {color: black}': '').
		($type == 'list' ? $wid.'.list .item-title a {color: '.$atts['main_color'].'}':'').
				
		($type=='blogging'? $wid.'.blogging .meta-item {color: #666}': '').
		($type=='left'? $wid.'.left .item-sub .meta-item {color: #666}': '').
		($type=='right'? $wid.'.right .item-sub .meta-item {color: #666}': '').
		($type=='simple-one'? $wid.'.simple-one .item-sub .meta-item {color: #666}': '');
	}

	if (isset($atts['thumb_bg_color']) && $atts['thumb_bg_color'] && $atts['thumb_bg_color'] != '#000000' && 
		(!isset($atts['rainbow_thumb_bg']) || !$atts['rainbow_thumb_bg'])) {
		$style .= $wid.' .thumbnail-overlay {
			background-color: '.$atts['thumb_bg_color'].';
			background-image: -webkit-linear-gradient(135deg,'.$atts['thumb_bg_color'].',#000);
			background-image: -moz-linear-gradient(135deg,'.$atts['thumb_bg_color'].',#000);
			background-image: -o-linear-gradient(135deg,'.$atts['thumb_bg_color'].',#000);
			background-image: linear-gradient(135deg,'.$atts['thumb_bg_color'].',#000);
		}';
	}

	if ($style) {
		$style = '<sty'.'le type="t'.'ext/c'.'ss" scoped>'.$style.'</style>';
	}
	return $style;
}


global $widget_id;
$widget_id = 0;
function magone_article_box($type = '', $atts = array(), $content = '', $label_widget_id = '') {
	/* included sticky will change behaves of pagination */
	if (isset($atts['ignore_sticky_posts']) && !$atts['ignore_sticky_posts']) {		
		$atts['pagination'] = false;
	}
	
	// extract data	
	global $MagOne_Article_Fields;	
	
	if ($type) {
		foreach ($MagOne_Article_Fields[$type] as $key => $value) {
			if (!isset($atts[$key])) {
				if (isset($value['default'])) {
					$atts[$key] = $value['default'];
				} else {
					$atts[$key] = '';
				}				
			}
		}
	}
	
	$html = '';
	$hh_1 = '';
	$hh_2 = '';
	$hh_3 = '';
	
	if (!$label_widget_id) {
		global $widget_id;
		$widget_id++;
		$label_widget_id = 'Label'.$widget_id;
	}
	
	
	$cate_ids = array();
	$cates = array();
	if ($atts['cates']) {
		if (is_string($atts['cates'])) {
			$cate_ids = explode(',', $atts['cates']);
		} else if ($atts['cates']) {
			$cate_ids = $atts['cates'];
		}
		
		if (count($cate_ids)) {
			foreach ($cate_ids as $index => $id) {
				$cate_ids[$index] = (int) $id;
				$cates[$index] = get_category((int) $id);		
				if (is_object($cates[$index])) {
					$cates[$index]->link = get_category_link((int) $id);
				}				
			}
		}
	}
	
	// create widget header
	$title_icon = '';
	if ($atts['title_icon']) {
		$title_icon = apply_filters('sneeit_get_font_awesome_tag', $atts['title_icon']) .' ';
	}
	if ($atts['title']) {
		$title_style = '';
		if (isset($atts['title_border_bottom_color']) && $atts['title_border_bottom_color'] != '' &&
				(!isset($atts['title_bg_color']) || $atts['title_border_bottom_color'] != $atts['title_bg_color'])) {			
			$title_style = 'border-bottom: 2px solid '.$atts['title_border_bottom_color'] . '; margin-bottom: 10px;';
		}
				
		$text_color = '';
		if (isset($atts['title_text_color']) && $atts['title_text_color'] != '') {
			$title_style .= 'color: '.$atts['title_text_color'] . ';';
			$text_color = ' styl'.'e="'.$title_style. '"';			
		}
		
		
		$hh_1 .= '<h2 class="widget-title feed-widget-title';
		if (isset($atts['title_bg_color']) && $atts['title_bg_color'] != '') {
			$hh_1 .= ' box-title';
			$title_style .= 'background: '.$atts['title_bg_color'] . ';';
		}
		if ($title_style) {
			$title_style = ' styl'.'e="'.$title_style. '"';
		}
		
		$hh_1 .= '"'.$title_style.'>';
		
		
		if (count($cates) == 1) {
			// target to first label if has only 1 label
			if ($atts['title_url']) {
				$hh_1 .= '<a href="'. esc_url($atts['title_url']) .'"'.$text_color.'>'.$title_icon.$atts['title'].'</a>';
			} else if ($atts['orderby'] == 'latest' && $atts['tags'] == ''  && $atts['authors'] == '') {
				$hh_1 .= '<a href="'. esc_url($cates[0]->link) .'"'.$text_color.'>'.$title_icon.$atts['title'].'</a>';
			} else {
				$hh_1 .= '<span'.$text_color.'>'.$title_icon.$atts['title'].'</span>';
			}
			if ($atts['show_view_all'] && $atts['orderby'] == 'latest' && $atts['tags'] == ''  && $atts['authors'] == '') {
				$hh_3 .= '<div class="feed-widget-viewall"><a href="'.esc_url($cates[0]->link).'"><span>'.esc_html__('VIEW ALL', 'magone').'</span> <i class="fa fa-chevron-right"></i></a></div>';		
			}
		} else if (count($cates) == 0) { // leave blank, load all
			// target to latest posts if user selected all labels
			if ($atts['title_url']) {
				$hh_1 .= '<a href="'. esc_url($atts['title_url']) .'"'.$text_color.'>'.$title_icon.$atts['title'].'</a>';
			} else if ($atts['orderby'] == 'latest' && $atts['tags'] == ''  && $atts['authors'] == '') {
				$hh_1 .= '<a href="'.  esc_url(get_home_url()).'/?s="'.$text_color.'>'.$title_icon.$atts['title'].'</a>';
			} else {
				$hh_1 .= '<span'.$text_color.'>'.$title_icon.$atts['title'].'</span>';
			}
						
			if ($atts['show_view_all'] && $atts['orderby'] == 'latest' && $atts['tags'] == ''  && $atts['authors'] == '') {
				$hh_3 .= '<div class="feed-widget-viewall"><a href="'.  esc_url(get_home_url()).'/?s=">'.esc_html__('VIEW ALL', 'magone').' <i class="fa fa-chevron-right"></i></a></div>';			
			
			}
		} else {
			// in other case show plain text only
			if ($atts['title_url']) {
				$hh_1 .= '<a href="'. esc_url($atts['title_url']) .'"'.$text_color.'>'.$title_icon.$atts['title'].'</a>';
			} else {
				$hh_1 .= '<span'.$text_color.'>'.$title_icon.$atts['title'].'</span>';
			}				
		}
		$hh_1 .= '</h2>';
	}

	// the list of labels (disabling)
	if (count($cates) > 1 && 0) {
		$hh_2 .= '<div class="feed-widget-labels">';
		$hh_2 .= '<ul class="bg">';
		for ($i = 0; $i < count($cates); $i++) {			
			$hh_2 .= '<li><a href="javascript: void(0)" '.(($i==0)?'class="active" ':'').'data-id="'.esc_attr($cate_ids[$i]).'"><span class="check"><i class="fa fa-check"></i></span> '.$cates[$i]->category_nicename.' <span class="down"><i class="fa fa-angle-down"></i></span></a></li>';
		}
		$hh_2 .= '</ul>';
		$hh_2 .= '</div>';
	}
	
	if ($hh_1 || $hh_2 || $hh_3) {
		
		$html .= '<div class="feed-widget-header"';		
		if (!empty($atts['title_border_bottom_color']) && empty($atts['title_bg_color']) && $atts['title_bg_color'] == $atts['title_border_bottom_color']) {
			$html .= ' sty'.'le="border-bottom: 2px solid '.$atts['title_border_bottom_color'] . '; margin-bottom: 10px;"';
		}
		$html .= '>'.$hh_1.$hh_2.$hh_3.'<div class="clear"></div></div>';
	}

	// widget content
	$html .= '<div class="widget-content feed-widget-content widget-content-'.$label_widget_id.'" id="widget-content-'.$label_widget_id.'">';
	
	
	$html .= magone_article_box_content($label_widget_id, $type, $atts, $content, $cate_ids, $cates);	
	
	$html .= '</div><div class="clear"></div>';

	// pagination holder
	if (isset($atts['pagination']) && $atts['pagination']) {
		$html .= '<div class="clear"></div><div class="feed-widget-pagination feed-widget-pagination-'.$atts['pagination'].'" data-widget_id="'.$label_widget_id.'" data-type="'.$type.'"></div><div class="clear"></div>';
	}
	// data for owl
	$ret_data = '';
	if ($type == 'slider' || $type == 'carousel' || $type == 'ticker') :
		$ret_data .= '<span class="hide widget-data" data-type="'.$type.'">';
		if (isset($atts['column']) && is_numeric($atts['column']) && ((int) $atts['column'] >= 1)) {
			$ret_data .= '<span class="data-item data-column">'.$atts['column'].'</span>';	
		}
		if (isset($atts['speed']) && is_numeric($atts['speed']) && ((int) $atts['speed'] > 1)) {
			$ret_data .= '<span class="data-item data-speed">'.$atts['speed'].'</span>';
		}
		if (isset($atts['show_dots']) && $atts['show_dots']) {
			$ret_data .= '<span class="data-item data-show_dots">'.$atts['show_dots'].'</span>';	
		}
		if (isset($atts['show_nav']) && $atts['show_nav']) {
			$ret_data .= '<span class="data-item data-show_nav">'.$atts['show_nav'].'</span>';	
		}		
		
		$ret_data .= '</span>';			
	endif;
	
	// wrap widget with html
	$html = '<div class="widget Label '.
			$type.
			' label feed '.
			(isset($atts['enable_tab']) && $atts['enable_tab']? 'tab ':'').
			(isset($atts['padding_thumbnail']) && !$atts['padding_thumbnail']? 'padding-thumb ':'').
			(isset($atts['show_index']) && !$atts['show_index']? 'show-index ':'').
			(isset($atts['title']) && !$atts['title']? 'no-title ':'has-title ').
			(isset($atts['thumbnail_height']) && !$atts['thumbnail_height']? 'auto-height ':'fix-height ').
			(isset($atts['no_spacing']) && $atts['no_spacing']? 'no-spacing ':''). 
			(isset($atts['show_format_icon']) && !$atts['show_format_icon']? 'none-icon ':'').'" id="'.$label_widget_id.'">'.$html.$ret_data.'</div>';
	
	
	// style to widget
	$html .= magone_article_box_style($label_widget_id, $type, $atts, $content);
	
	// add clear bar to protect layout
	if ($type == 'left') {
		$html = '<div class="clear"></div>' . $html;		
	} else if ($type == 'right') {
		$html .= '<div class="clear"></div>';
	} else {
		$html = '<div class="clear"></div>' . $html . '<div class="clear"></div>';
	}
	
	return $html.$ret_data;

}