
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
<?php
/* -----------------------------------------------------------------------------
 * 
 * Adapter for WordPress Popular Posts plugin
 * http://wordpress.org/extend/plugins/wordpress-popular-posts
 * 
 * -------------------------------------------------------------------------- */


/* -----------------------------------------------------------------------------
 * Get Post Views
 * -------------------------------------------------------------------------- */

if ( ! function_exists( 'presso_get_post_views' ) ) {
	function presso_get_post_views( $post_id='' ) {
		if ( empty( $post_id ) ) {
			$post_id = get_the_id();
		}

		$views = intval( wpp_get_views( $post_id, 'all', false ) );

		if ( $views < 0 ) {
			$views = 0;
		}

		return $views;
	}
}


/* -----------------------------------------------------------------------------
 * Get Popular Post List
 * -------------------------------------------------------------------------- */

if ( ! function_exists( 'presso_get_popular_posts' ) ) {
	function presso_get_popular_posts( $count, $range = 'daily' ) {
		global $wpdb;
		
		$count = intval( $count );
		
		$transient_key = 'presso_get_popular_posts_'.$count.$range;

		$result = get_transient( $transient_key );

		if ( empty( $result ) ) {

			// /* SAMPLE FINAL QUERY */
			// SELECT p.* FROM wp_demo_presso_posts p
			// INNER JOIN (   SELECT postid, SUM( pageviews ) pageviews
			//     FROM wp_demo_presso_popularpostsdata   GROUP BY postid   ORDER BY pageviews   LIMIT 0, 2
			// ) v ON p.ID = v.postid
	 
			$sql = "SELECT p.* FROM {$wpdb->posts} p";
			$sql .= " INNER JOIN (";

			$sql .= presso_get_post_views_raw_query( $count, $range );
		
			$sql .= ") pvw ON p.ID = pvw.postid";
			$sql .= "   ORDER BY pvw.pageviews";

			$query = $wpdb->prepare(
				$sql,
				current_time('mysql')
			);

			$result = $wpdb->query( $query );

			set_transient( $transient_key, $result, PRESSO_POPULAR_POSTS_CACHE_EXPIRATION );
		}

		return $result;
	}
}


/* -----------------------------------------------------------------------------
 * Get Post Views Query
 * -------------------------------------------------------------------------- */

if ( ! function_exists( 'presso_get_post_views_raw_query' ) ) {
	function presso_get_post_views_raw_query( $count, $range = 'daily' ) {
		global $wpdb;

		if ( empty( $range ) ) $range = 'daily';

		if ( 'monthly' == $range ) {
			$interval = '30 DAY';

		} elseif ( 'weekly' == $range ) {
			$interval = '7 DAY';

		} else { // daily
			$interval = '1 DAY';

		}

		$sql = '';
		if ( 'all' == $range ) {
			$sql .= " SELECT postid, pageviews";
			$sql .= " FROM {$wpdb->prefix}popularpostsdata";
			
		} else {
			$sql .= " SELECT postid, SUM( pageviews ) pageviews";
			$sql .= $wpdb->prepare( " FROM {$wpdb->prefix}popularpostssummary   WHERE last_viewed > DATE_SUB('%s', INTERVAL {$interval})   GROUP BY postid", current_time('mysql') );
		}

		if ( $count > 0 ) {
			$sql .= $wpdb->prepare( "   ORDERBY pageviews DESC   LIMIT 0, %d", $count );
		}

		return $sql;
	}
}