Current File : /home/aventura/www/site/wp-content/themes/kleo/lib/item-likes.php
<?php

/*
Add likes to posts

*/

class ItemLikes {

	public function __construct() {
		add_filter( 'body_class', array( &$this, 'body_class' ) );
		add_action( 'publish_post', array( &$this, 'setup_likes' ) );
		add_action( 'kleo_post_footer', array( &$this, 'show_likes' ) );
		add_action( 'kleo_show_love', array( &$this, 'show_likes' ) );
		add_action( 'wp_ajax_item-likes', array( &$this, 'ajax_callback' ) );
		add_action( 'wp_ajax_nopriv_item-likes', array( &$this, 'ajax_callback' ) );
		add_shortcode( 'item_likes', array( &$this, 'shortcode' ) );
		add_action( 'widget_init', function () {
			register_widget( 'ItemLikes_Widget' );
		} );
	}

	public function show_likes() {
		//$post_types = array( 'post', 'attachment' );
		//$post_types = apply_filters( 'kleo_likes_post_types', $post_types );
		//$current_post_type = get_post_type();

		//if( in_array( $current_post_type, $post_types ) ) {
		echo $this->do_likes();
		//}
	}

	function setup_likes( $post_id ) {
		if ( ! is_numeric( $post_id ) ) {
			return;
		}

		add_post_meta( $post_id, '_item_likes', '0', true );
	}

	function ajax_callback( $post_id ) {
		if ( isset( $_POST['likes_id'] ) ) {
			// Click event. Get and Update Count
			$post_id = str_replace( 'item-likes-', '', $_POST['likes_id'] );
			echo $this->like_this( $post_id, sq_option( 'likes_zero_text', '' ), sq_option( 'likes_one_text', '' ), sq_option( 'likes_more_text', '' ), 'update' );
		} else {
			// AJAXing data in. Get Count
			$post_id = str_replace( 'item-likes-', '', $_POST['post_id'] );
			echo $this->like_this( $post_id, sq_option( 'likes_zero_text', '' ), sq_option( 'likes_one_text', '' ), sq_option( 'likes_more_text', '' ), 'get' );
		}

		exit;
	}

	function like_this( $post_id, $zero_postfix = false, $one_postfix = false, $more_postfix = false, $action = 'get' ) {
		if ( ! is_numeric( $post_id ) ) {
			return;
		}
		$zero_postfix = strip_tags( $zero_postfix );
		$one_postfix  = strip_tags( $one_postfix );
		$more_postfix = strip_tags( $more_postfix );

		if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
			global $sitepress;
			if ( is_object( $sitepress ) ) {
				$post_id = icl_object_id( $post_id, 'post', true, $sitepress->get_default_language() );
			}
		}

		switch ( $action ) {

			case 'get':
				$likes = get_post_meta( $post_id, '_item_likes', true );
				if ( ! $likes ) {
					$likes = 0;
					add_post_meta( $post_id, '_item_likes', $likes, true );
				}

				if ( $likes == 0 ) {
					$postfix = $zero_postfix;
				} elseif ( $likes == 1 ) {
					$postfix = $one_postfix;
				} else {
					$postfix = $more_postfix;
				}

				return '<span class="item-likes-count">' . $likes . '</span> <span class="item-likes-postfix">' . $postfix . '</span>';
				break;

			case 'update':
				$likes = get_post_meta( $post_id, '_item_likes', true );
				if ( isset( $_COOKIE[ 'item_likes_' . $post_id ] ) ) {
					return $likes;
				}

				$likes ++;
				update_post_meta( $post_id, '_item_likes', $likes );
				setcookie( 'item_likes_' . $post_id, $post_id, time() * 20, '/' );

				if ( $likes == 0 ) {
					$postfix = $zero_postfix;
				} elseif ( $likes == 1 ) {
					$postfix = $one_postfix;
				} else {
					$postfix = $more_postfix;
				}

				return '<span class="item-likes-count">' . $likes . '</span> <span class="item-likes-postfix">' . $postfix . '</span>';
				break;

		}
	}

	function shortcode( $atts ) {
		extract( shortcode_atts( array(), $atts ) );

		return $this->do_likes();
	}

	function do_likes( $post_id = null ) {
		if ( ! $post_id ) {
			global $post;
			$post_id = $post->ID;
		}

		if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
			global $sitepress;
			$post_id = icl_object_id( $post_id, 'post', true, $sitepress->get_default_language() );
		}

		$output = $this->like_this( $post_id, sq_option( 'likes_zero_text', '' ), sq_option( 'likes_one_text', '' ), sq_option( 'likes_more_text', '' ) );

		$class = 'item-likes';
		$title = sq_option( 'like_this_text', 'Like this' );
		if ( isset( $_COOKIE[ 'item_likes_' . $post_id ] ) ) {
			$class = 'item-likes liked';
			$title = sq_option( 'likes_already', 'You already like this' );
		}

		return '<a href="#" class="' . $class . '" id="item-likes-' . $post_id . '" title="' . $title . '">' . $output . '</a>';
	}

	function body_class( $classes ) {

		if ( sq_option( 'likes_ajax', 0 ) == 1 ) {
			$classes[] = 'ajax-item-likes';
		}

		return $classes;
	}

}

global $kleo_item_likes;
$kleo_item_likes = new ItemLikes();

/**
 * Template Tag
 */
function kleo_item_likes( $post_id = null, $return = false ) {
	global $kleo_item_likes;
	if ( $return === true ) {
		return $kleo_item_likes->do_likes( $post_id );
	} else {
		echo $kleo_item_likes->do_likes( $post_id );
	}
}

/**
 * Widget to display posts by likes popularity
 */
class ItemLikes_Widget extends WP_Widget {

	function __construct() {
		parent::__construct( 'item_likes_widget', 'ItemLikes', array( 'description' => __( 'Displays your most popular posts sorted by most liked', 'kleo_framework' ) ) );
	}

	function widget( $args, $instance ) {
		extract( $args );

		$title         = apply_filters( 'widget_title', $instance['title'] );
		$desc          = $instance['description'];
		$posts         = empty( $instance['posts'] ) ? 1 : $instance['posts'];
		$display_count = $instance['display_count'];

		// Output our widget
		echo $before_widget;
		if ( ! empty( $title ) ) {
			echo $before_title . $title . $after_title;
		}

		if ( $desc ) {
			echo '<p>' . $desc . '</p>';
		}

		$likes_posts_args = array(
			'numberposts' => $posts,
			'orderby'     => 'meta_value_num',
			'order'       => 'DESC',
			'meta_key'    => '_item_likes',
			'post_type'   => 'post',
			'post_status' => 'publish'
		);
		$likes_posts      = get_posts( $likes_posts_args );

		echo '<ul class="popular-posts">';
		foreach ( $likes_posts as $likes_post ) {
			$count_output = '';
			if ( $display_count ) {
				$count        = get_post_meta( $likes_post->ID, '_item_likes', true );
				$count_output = " <span class='item-likes-count'>($count)</span>";
			}
			echo '<li><a href="' . get_permalink( $likes_post->ID ) . '">' . get_the_title( $likes_post->ID ) . '</a>' . $count_output . '</li>';
		}
		echo '</ul>';

		echo $after_widget;
	}

	function update( $new_instance, $old_instance ) {
		$instance                  = $old_instance;
		$instance['title']         = strip_tags( $new_instance['title'] );
		$instance['description']   = strip_tags( $new_instance['description'], '<a><b><strong><i><em><span>' );
		$instance['posts']         = strip_tags( $new_instance['posts'] );
		$instance['display_count'] = strip_tags( $new_instance['display_count'] );

		return $instance;
	}

	function form( $instance ) {
		$instance = wp_parse_args(
			(array) $instance
		);

		$defaults = array(
			'title'         => __( 'Popular Posts', 'kleo_framework' ),
			'description'   => '',
			'posts'         => 5,
			'display_count' => 1
		);

		$instance = wp_parse_args( (array) $instance, $defaults );

		$title         = $instance['title'];
		$description   = $instance['description'];
		$posts         = $instance['posts'];
		$display_count = $instance['display_count'];
		?>

		<p>
			<label
				for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', "kleo_framework" ); ?></label>
			<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
			       name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>"/>
		</p>
		<p>
			<label
				for="<?php echo $this->get_field_id( 'description' ); ?>"><?php _e( 'Description:', "kleo_framework" ); ?></label>
			<input class="widefat" id="<?php echo $this->get_field_id( 'description' ); ?>"
			       name="<?php echo $this->get_field_name( 'description' ); ?>" type="text"
			       value="<?php echo $description; ?>"/>
		</p>
		<p>
			<label
				for="<?php echo $this->get_field_id( 'posts' ); ?>"><?php _e( 'Posts:', "kleo_framework" ); ?></label>
			<input id="<?php echo $this->get_field_id( 'posts' ); ?>"
			       name="<?php echo $this->get_field_name( 'posts' ); ?>" type="text" value="<?php echo $posts; ?>"
			       size="3"/>
		</p>
		<p>
			<input id="<?php echo $this->get_field_id( 'display_count' ); ?>"
			       name="<?php echo $this->get_field_name( 'display_count' ); ?>" type="checkbox"
			       value="1" <?php checked( $display_count ); ?>>
			<label
				for="<?php echo $this->get_field_id( 'display_count' ); ?>"><?php _e( 'Display like counts', "kleo_framework" ); ?></label>
		</p>

		<?php
	}
}