File "SWP_JSON_Cache_Handler.php"

Full Path: /home/bfxleof/www/wp-content/plugins/social-warfare/lib/utilities/SWP_JSON_Cache_Handler.php
File size: 3.14 KB
MIME-type: text/x-php
Charset: utf-8

<?php

/**
 * A Class for Fetching Remote JSON data and caching it in a manner that will
 * easily allow other classes to access the data for the purpose of generating
 * notices, updating the sidebar, etc.
 *
 * Everything is stored in local properties to allow the debug method to simply
 * dump the $this item allowing us to see the results of everything that has
 * been processed by this class.
 *
 * @package   SocialWarfare\Functions
 * @copyright Copyright (c) 2018, Warfare Plugins, LLC
 * @license   GPL-3.0+
 * @since     3.1.0 | 27 JUN 2018 | Created
 *
 */
class SWP_JSON_Cache_Handler {


	/**
	 * SWP_Debug_Trait provides useful tool like error handling and a debug
	 * method which outputs the contents of the current object.
	 *
	 */
	use SWP_Debug_Trait;


	/**
	 * The fetched from the remote JSON file.
	 *
	 * @var string
	 *
	 */
	private $response = '';


	/**
	 * The responsed parsed into an associative array.
	 *
	 * @var array
	 *
	 */
	private $parsed_response = array();


	/**
	 * The cached JSON data fetched from the database.
	 *
	 * @var array
	 *
	 */
	private $cached_data = array();


	/**
	 * Instantiate the class object.
	 *
	 * Check if the cache is fresh, if not, ping the JSON file on our server,
	 * parse the results, and store them in an options field in the database.
	 *
	 * @since  3.1.0 | 28 JUN 2018 | Created
	 * @param  void
	 * @return void
	 *
	 */
	public function __construct() {
		if( false === $this->is_cache_fresh() ):
			$this->fetch_new_json_data();
			add_action( 'wp_footer', array( $this, 'debug' ) );
		endif;
	}


	/**
	 * Fetch new JSON data.
	 *
	 * @since  3.1.0 | 28 JUN 2018 | Created
	 * @param  void
	 * @return void
	 *
	 */
	private function fetch_new_json_data() {

		// Fetch the response.
        $response = wp_remote_get( 'https://warfareplugins.com/json_updates.php' );
		$this->response = wp_remote_retrieve_body( $response );

		// Create the cache data array.
		$this->parsed_response = array();

		if( !empty($this->response) ):
			$this->parsed_response = json_decode( $this->response , true );
		endif;

		$this->parsed_response['timestamp'] = time();

		// Store the data in the database.
		update_option('swp_json_cache' , $this->parsed_response , true );

	}


	/**
	 * A method to determin if the cached data is still fresh.
	 *
	 * @since  3.1.0 | 28 JUN 2018 | Created
	 * @param  void
	 * @return boolean true if fresh, false if expired.
	 *
	 */
	private function is_cache_fresh() {

		// If we're debugging, the cache is expired and needs to fetch.
		if( true == SWP_Utility::debug( 'json_fetch' ) ):
			return false;
		endif;

		$this->cache_data = get_option('swp_json_cache');

		// If no cached data, the cache is not fresh.
		if( false === $this->cache_data):
			return false;
		endif;

		// Forumlate the timestamps.
		$timestamp = $this->cache_data['timestamp'];
		$current_time = time();
		$time_between_checks = ( 6 * 60 * 60 );

		// Compare the timestamps.
		if ($current_time > $timestamp + $time_between_checks ) :
			return false;
		endif;

		return true;

	}
}