Files
nurinda.co.id---old/wp-content/plugins/mashsharer/includes/sharecount-functions.php
T

415 lines
12 KiB
PHP

<?php
/**
* Helper functions for retriving the share counts from social networks
*
* @package MASHSB
* @subpackage Functions/sharecount
* @copyright Copyright (c) 2015, René Hermenau
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
* @since 3.0.0
*/
// Exit if accessed directly
if( !defined( 'ABSPATH' ) ) {
exit;
}
/**
* Save fb share count asycronically via ajax
*/
function mashsb_set_fb_sharecount() {
$postId = isset( $_POST['postid'] ) ? intval($_POST['postid']) : false;
// Ajax result
$result = isset( $_POST['shares'] ) ? intval($_POST['shares']) : false;
$comment_count = isset( $result['comment_count'] ) ? (int)$result['comment_count'] : 0;
$share_count = isset( $result['share_count'] ) ? (int)$result['share_count'] : 0;
if( !$postId || empty($postId) ) {
wp_die('MashShare: do not collect shares');
}
// Cache results
$cacheJsonShares = mashsb_get_jsonshares_post_meta( $postId );
$cacheTotalShares = mashsb_get_total_shares_post_meta( $postId );
// New shares
$cacheJsonShares['facebook_total'] = $share_count + $comment_count;
$cacheJsonShares['facebook_likes'] = $share_count;
$cacheJsonShares['facebook_comments'] = $comment_count;
// Update shares but only if new shares are larger than cached values
// Performance reasons AND to ensure that shares does not get lost if page permalink is changed
update_post_meta( $postId, 'mashsb_jsonshares', json_encode($cacheJsonShares) );
$newTotalShares = mashsb_get_total_shares($postId);
if ($newTotalShares > $cacheTotalShares && is_numeric($newTotalShares) ){
update_post_meta( $postId, 'mashsb_shares', $newTotalShares );
}
wp_die( json_encode( $cacheJsonShares ) );
}
add_action( 'wp_ajax_mashsb_set_fb_shares', 'mashsb_set_fb_sharecount' );
add_action( 'wp_ajax_nopriv_mashsb_set_fb_shares', 'mashsb_set_fb_sharecount' );
/**
* Get post meta mashsb_jsonshares
* @param bool $postId
* @return array
*/
function mashsb_get_jsonshares_post_meta( $postId = false ) {
$result = array();
if( $postId === false )
return $result;
$result = json_decode(get_post_meta( $postId, 'mashsb_jsonshares', true ), true);
return $result;
}
/**
* Get total shares
* @param int $postId
* @return int
*/
function mashsb_get_total_shares($postId){
$mode = isset( $mashsb_options['facebook_count_mode'] ) ? $mashsb_options['facebook_count_mode'] : 'total';
$result = json_decode(get_post_meta( $postId, 'mashsb_jsonshares', true ), true);
$fbtotal = isset($result['facebook_total']) ? $result['facebook_total'] : 0;
$fbshares = isset($result['facebook_likes']) ? $result['facebook_likes'] : 0;
$fbcomments = isset($result['facebook_comments']) ? $result['facebook_comments'] : 0;
$twitter = isset($result['twitter']) ? $result['twitter'] : 0;
$pinterest = isset($result['pinterest']) ? $result['pinterest'] : 0;
$linkedin = isset($result['linkedin']) ? $result['linkedin'] : 0;
if( $mode === 'total' ) {
$shares = $fbtotal + $twitter + $pinterest + $linkedin;
}
if( $mode === 'shares' ) {
$shares = $fbshares + $twitter + $pinterest + $linkedin;
}
return (int)$shares;
}
/**
* Get post meta mashsb_shares
* @param bool $postId
* @return mixed string|boolean
*/
function mashsb_get_total_shares_post_meta($postId = false){
if ($postId === false)
return false;
$result = get_post_meta( $postId, 'mashsb_shares', true );
return (int)$result;
}
/**
* Check if the facebook rate limit has been exceeded
* @return boolean
*/
function mashsb_rate_limit_exceeded(){
//return true; // Uncomment this for testing
if (false === get_transient('mashsb_rate_limit')){
return false;
}
return true;
}
/**
* Check if cache time is expired and post must be refreshed
*
* @global array $post
* @return boolean
*/
function mashsb_is_cache_refresh() {
global $post, $mashsb_options;
if (isset($mashsb_options['disable_sharecount'])){
return false;
}
// Force Cache Reload
if( isset( $_GET['mashsb-refresh'] ) ) {
return true;
}
// Preview Mode
if( isset($_GET['preview_id'] ) ) {
return false;
}
// Debug mode or cache activated
if( MASHSB_DEBUG || isset( $mashsb_options['disable_cache'] ) ) {
MASHSB()->logger->info( 'mashsb_is_cache_refresh: MASHSB_DEBUG - refresh Cache' );
return true;
}
// if it's a crawl deactivate cache
if( isset( $_SERVER['HTTP_USER_AGENT'] ) && preg_match( '/bot|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'] ) ) {
return false;
}
/*
* Deactivate share count on:
* - 404 pages
* - search page
* - empty url
* - disabled permalinks
* - admin pages
*
Exit here to save cpu time
*/
if( is_admin() || is_404() || is_search() || !mashsb_is_enabled_permalinks() ) {
return false;
}
/*
* Refreshing cache on multiple blog posts like categories will lead
* to high load and multiple API requests so we only check
* the main url
*/
if( !is_singular() || !isset($post->ID) ) {
return false;
}
$last_updated = 0;
$last_updated = get_post_meta( $post->ID, 'mashsb_timestamp', true );
// No timestamp! So let's create cache for the first time
if( empty( $last_updated ) || $last_updated < 0 ) {
// Write timestamp (Use this on top of this condition. If this is not on top following return statements will be skipped and ignored - possible bug?)
return true;
}
// The caching expiration
$expiration = mashsb_get_expiration();
$next_update = $last_updated + $expiration;
// Refresh Cache when last update plus expiration time is older than current time
if( ($last_updated + $expiration) <= time() ) {
// Write timestamp (Use this on top of this condition. If this is not on top following return statements will be skipped and ignored - possible bug?)
return true;
}
return false;
}
/**
* Check if cache time is expired and post must be refreshed
* This is used for the caching method async only
*
* @global array $post
* @return boolean
*/
function mashsb_is_async_cache_refresh() {
global $post, $mashsb_options;
// Never
if (isset($mashsb_options['refresh_loading'])){
return false;
}
if (isset($mashsb_options['disable_sharecount'])){
return false;
}
// Force Cache Reload
if( isset( $_GET['mashsb-refresh'] ) ) {
return true;
}
// Preview Mode
if( isset($_GET['preview_id'] ) ) {
return false;
}
// Debug mode or cache activated
if( MASHSB_DEBUG || isset( $mashsb_options['disable_cache'] ) ) {
MASHSB()->logger->info( 'mashsb_is_cache_refresh: MASHSB_DEBUG - refresh Cache' );
return true;
}
// if it's a crawl deactivate cache
if( isset( $_SERVER['HTTP_USER_AGENT'] ) && preg_match( '/bot|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'] ) ) {
return false;
}
/*
* Deactivate share count on:
* - 404 pages
* - search page
* - empty url
* - disabled permalinks
* - admin pages
*
Exit here to save cpu time
*/
if( is_admin() || is_404() || is_search() || !mashsb_is_enabled_permalinks() ) {
return false;
}
/*
* Refreshing cache on multiple blog posts like categories will lead
* to high load and multiple API requests so we only check
* the main url
*/
if( !is_singular() || !isset($post->ID) ) {
return false;
}
$last_updated = 0;
$last_updated = get_post_meta( $post->ID, 'mashsb_timestamp', true );
// No timestamp! So let's create cache for the first time
if( empty( $last_updated ) || $last_updated < 0 ) {
// Write timestamp (Use this on top of this condition. If this is not on top following return statements will be skipped and ignored - possible bug?)
return true;
}
// The caching expiration
$expiration = mashsb_get_expiration();
// Refresh Cache when last update plus expiration time is older than current time
if( ($last_updated + $expiration) <= time() ) {
// Write timestamp (Use this on top of this condition. If this is not on top following return statements will be skipped and ignored - possible bug?)
return true;
}
return false;
}
/**
* Check via ajax if cache should be updated
*
* @deprecated not used
* @return string numerical
*/
function mashsb_ajax_refresh_cache() {
if( mashsb_is_cache_refresh() ) {
wp_die( '1' );
} else {
wp_die( '0' );
}
}
add_action( 'wp_ajax_mashsb_refresh_cache', 'mashsb_ajax_refresh_cache' );
add_action( 'wp_ajax_nopriv_mashsb_refresh_cache', 'mashsb_ajax_refresh_cache' );
/**
* Get expiration time for new Asyn Cache Method
*
* @since 3.0.0
* @return int
*/
function mashsb_get_expiration_method_async() {
// post age in seconds
$post_age = floor( date( 'U' ) - get_post_time( 'U', true ) );
$three_months_period = apply_filters('mashsb_three_months', 5184000);
$three_weeks_period = apply_filters('mashsb_three_weeks', 1814400);
if( isset( $post_age ) && $post_age > $three_months_period ) {
// Post older than 60 days - expire cache after 12 hours
$seconds = apply_filters('mashsb_refresh_60_days', 43200);
} else if( isset( $post_age ) && $post_age > $three_weeks_period ) {
// Post older than 21 days - expire cache after 4 hours.
$seconds = apply_filters('mashsb_refresh_21_days', 14400);
} else {
// expire cache after one hour
$seconds = apply_filters('mashsb_refresh_1_hour', 3600);
}
return $seconds;
}
/**
* Get expiration time for old method "Refresh On Loading"
*
* @since 3.0.0
* @return int
*/
function mashsb_get_expiration_method_loading() {
global $mashsb_options;
// Get the expiration time
$seconds = isset( $mashsb_options['mashsharer_cache'] ) ? ( int ) ($mashsb_options['mashsharer_cache']) : 300;
return $seconds;
}
/**
* Get expiration time
*
* @return int
*/
function mashsb_get_expiration() {
global $mashsb_options;
$expiration = (isset( $mashsb_options['caching_method'] ) && $mashsb_options['caching_method'] == 'async_cache') ? mashsb_get_expiration_method_async() : mashsb_get_expiration_method_loading();
// Set expiration time to zero if debug mode is enabled or cache deactivated
if( MASHSB_DEBUG || isset( $mashsb_options['disable_cache'] ) ) {
$expiration = 0;
}
return ( int ) $expiration;
}
/**
* Check if permalinks are enabled
*
* @return boolean true when enabled
*/
function mashsb_is_enabled_permalinks() {
$permalinks = get_option('permalink_structure');
if (!empty($permalinks)) {
return true;
}
return false;
}
/**
* Return the current main url
*
* @return mixed string|bool current url or false
*/
function mashsb_get_main_url() {
global $wp;
$url = home_url( add_query_arg( array(), $wp->request ) );
if( !empty( $url ) ) {
return mashsb_sanitize_url( $url );
} else {
return '';
}
}
/**
* Sanitize url and remove mashshare specific url parameters
*
* @param string $url
* @return string $url
*/
function mashsb_sanitize_url( $url ) {
if( empty( $url ) ) {
return "";
}
$url1 = str_replace( '?mashsb-refresh', '', $url );
$url2 = str_replace( '&mashsb-refresh', '', $url1 );
$url3 = str_replace( '%26mashsb-refresh', '', $url2 );
return $url3;
}