Server : LiteSpeed System : Linux server 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : alsaif ( 1057) PHP Version : 7.4.33 Disable Function : show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/alsaif/domains/alsaif.group/public_html/libraries/regularlabs/src/ |
<?php
/**
* @package Regular Labs Library
* @version 23.9.3039
*
* @author Peter van Westen <info@regularlabs.com>
* @link https://regularlabs.com
* @copyright Copyright © 2023 Regular Labs All Rights Reserved
* @license GNU General Public License version 2 or later
*/
namespace RegularLabs\Library;
defined('_JEXEC') or die;
use Exception;
use Joomla\CMS\Cache\CacheController as JCacheController;
use Joomla\CMS\Factory as JFactory;
/**
* Class CacheNew
*
* @package RegularLabs\Library
*/
class CacheNew
{
static array $cache = [];
/**
* @var [JCacheController]
*/
private array $file_cache_controllers = [];
private bool $force_caching = true;
private string $group;
private string $id;
private int $time_to_life_in_seconds = 0;
private bool $use_files = false;
/**
* @param $id
*/
public function __construct($id, $group = 'regularlabs')
{
if ( ! is_string($id))
{
$id = json_encode($id);
}
$this->id = md5($id);
$this->group = $group;
}
/**
* @return bool
*/
public function exists()
{
if ( ! $this->use_files)
{
return $this->existsMemory();
}
return $this->existsMemory() || $this->existsFile();
}
/**
* @return null|mixed
*/
public function get()
{
return $this->use_files
? $this->getFile()
: $this->getMemory();
}
/**
* @param $data
*
* @return mixed
*/
public function set($data)
{
return $this->use_files
? $this->setFile($data)
: $this->setMemory($data);
}
/**
* @param int $time_to_life_in_minutes
* @param bool $force_caching
*
* @return $this
*/
public function useFiles($time_to_life_in_minutes = 0, $force_caching = true)
{
$this->use_files = true;
// convert ttl to minutes
$this->time_to_life_in_seconds = $time_to_life_in_minutes * 60;
$this->force_caching = $force_caching;
return $this;
}
/**
* @return bool
*/
private function existsFile()
{
if (JFactory::getConfig()->get('debug') || JFactory::getApplication()->input->get('debug'))
{
return false;
}
return $this->getFileCache()->contains($this->id);
}
/**
* @return bool
*/
private function existsMemory()
{
return isset(static::$cache[$this->id]);
}
/**
* @return false|mixed
* @throws Exception
*/
private function getFile()
{
if ($this->existsMemory())
{
return $this->getMemory();
}
$data = $this->getFileCache()->get($this->id);
$this->setMemory($data);
return $data;
}
// Get the cached object from the Joomla cache
/**
* @return JCacheController
*/
private function getFileCache()
{
$id = json_encode([$this->group, $this->time_to_life_in_seconds, $this->force_caching]);
if (isset($this->file_cache_controllers[$id]))
{
return $this->file_cache_controllers[$id];
}
$cache = JFactory::getCache($this->group, 'output');
if ($this->time_to_life_in_seconds)
{
// convert ttl to minutes
$cache->setLifeTime($this->time_to_life_in_seconds * 60);
}
if ($this->force_caching)
{
$cache->setCaching(true);
}
$this->file_cache_controllers[$id] = $cache;
return $this->file_cache_controllers[$id];
}
/**
* @return null|mixed
*/
private function getMemory()
{
if ( ! $this->existsMemory())
{
return null;
}
$data = static::$cache[$this->id];
return is_object($data) ? clone $data : $data;
}
/**
* @param mixed $data
*
* @return mixed
* @throws Exception
*/
private function setFile($data)
{
$this->setMemory($data);
if (JFactory::getConfig()->get('debug') || JFactory::getApplication()->input->get('debug'))
{
return $data;
}
$this->getFileCache()->store($data, $this->id);
return $data;
}
/**
* @param mixed $data
*
* @return mixed
*/
private function setMemory($data)
{
static::$cache[$this->id] = $data;
return $data;
}
}