143 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  *  @author          Tassos.gr <info@tassos.gr>
 | |
|  *  @link            https://www.tassos.gr
 | |
|  *  @copyright       Copyright © 2024 Tassos All Rights Reserved
 | |
|  *  @license         GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
 | |
| */
 | |
| 
 | |
| namespace NRFramework;
 | |
| 
 | |
| defined('_JEXEC') or die;
 | |
| 
 | |
| /**
 | |
|  *  Cache Manager
 | |
|  * 
 | |
|  *  Singleton
 | |
|  */
 | |
| class CacheManager
 | |
| {
 | |
| 	/**
 | |
| 	 *  'static' cache array
 | |
| 	 *   @var  array
 | |
| 	 */
 | |
|     protected $cache = [];
 | |
| 
 | |
|     /**
 | |
|      *  Cache mechanism object
 | |
|      *  @var object
 | |
|      */
 | |
|     protected $cache_mechanism = null;
 | |
|     
 | |
|     /**
 | |
|      *  Construct
 | |
|      */
 | |
|     protected function __construct($cache_mechanism)
 | |
|     {
 | |
|         $this->cache_mechanism = $cache_mechanism;
 | |
|     }
 | |
| 
 | |
|     static public function getInstance($cache_mechanism)
 | |
|     {
 | |
|         static $instance = null;
 | |
| 
 | |
| 		if ($instance === null)
 | |
| 		{
 | |
|             $instance = new CacheManager($cache_mechanism);
 | |
| 		}
 | |
| 		
 | |
|         return $instance;
 | |
|     }
 | |
| 
 | |
| 	/**
 | |
| 	 *  Check if a hash already exists in memory
 | |
| 	 *
 | |
| 	 *  @param   string   $hash  The hash string
 | |
| 	 *
 | |
| 	 *  @return  boolean         
 | |
| 	 */
 | |
| 	public function has($hash)
 | |
| 	{
 | |
| 		return isset($this->cache[$hash]);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *  Returns a hash's value
 | |
| 	 *
 | |
| 	 *  @param   string  $hash  The hash string
 | |
| 	 *  @param   string  $clone Why the hell we clone objects here?
 | |
| 	 *
 | |
| 	 *  @return  mixed          False on error, Object on success
 | |
| 	 */
 | |
| 	public function get($hash, $clone = true)
 | |
| 	{
 | |
| 		if (!$this->has($hash))
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		return is_object($this->cache[$hash]) && $clone ? clone $this->cache[$hash] : $this->cache[$hash];
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *  Sets a hash value
 | |
| 	 *
 | |
| 	 *  @param  string  $hash  The hash string
 | |
| 	 *  @param  mixed   $data  Can be string or object
 | |
| 	 *
 | |
| 	 *  @return mixed
 | |
| 	 */
 | |
| 	public function set($hash, $data)
 | |
| 	{
 | |
| 		$this->cache[$hash] = $data;
 | |
| 		return $data;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *  Reads a hash value from memory or file
 | |
| 	 *
 | |
| 	 *  @param   string   $hash   The hash string
 | |
| 	 *  @param   boolean  $force  If true, the filesystem will be used as well on the /cache/ folder
 | |
| 	 *
 | |
| 	 *  @return  mixed            The hash object value
 | |
| 	 */
 | |
| 	public function read($hash, $force = false)
 | |
| 	{
 | |
| 		if ($this->has($hash))
 | |
| 		{
 | |
| 			return $this->get($hash);
 | |
| 		}
 | |
| 
 | |
| 		if ($force)
 | |
| 		{
 | |
| 			$this->cache_mechanism->setCaching(true);
 | |
| 		}
 | |
| 
 | |
| 		return $this->cache_mechanism->get($hash);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *  Writes hash value in cache folder
 | |
| 	 *
 | |
| 	 *  @param   string   $hash  The hash string
 | |
| 	 *  @param   mixed    $data  Can be string or object
 | |
| 	 *  @param   integer  $ttl   Expiration duration in minutes. Default 1440 minutes = 1 day. 
 | |
| 	 *
 | |
| 	 *  @return  mixed           The hash object value
 | |
| 	 */
 | |
| 	public function write($hash, $data, $ttl = 1440)
 | |
| 	{
 | |
| 		if ($ttl > 0)
 | |
| 		{
 | |
| 			$this->cache_mechanism->setLifeTime($ttl);
 | |
| 		}
 | |
| 
 | |
| 		$this->cache_mechanism->setCaching(true);
 | |
| 		$this->cache_mechanism->store($data, $hash);
 | |
| 
 | |
| 		$this->set($hash, $data);
 | |
| 
 | |
| 		return $data;
 | |
| 	}
 | |
| } |