<?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;
}
}