Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Cache/Cache.php
Строк: 131
<?php
namespace ConcreteCoreCache;

use 
Core;
use 
Config;
use 
StashDriverBlackHole;
use 
StashDriverComposite;
use 
StashPool;

abstract class 
Cache
{
    
/** @var Pool */
    
protected $pool null;
    
/** @var bool */
    
protected $enabled false;
    
/** @var StashInterfacesDriverInterface */
    
protected $driver null;

    public function 
__construct() {
        
$this->init();
    }

    
/**
     * Initializes the cache by setting up the cache pool and enabling the cache
     * @return void
     */
    
abstract protected function init();

    
/**
     * Loads the composite driver from constants
     * @param $level
     * @return StashInterfacesDriverInterface
     */
    
protected function loadConfig($level)
    {
        
$drivers = array();
        
$driver_configs Config::get("concrete.cache.levels.{$level}.drivers", array());

        foreach (
$driver_configs as $driver_build) {
            if (!
$driver_build) {
                continue;
            }

            
$class array_get($driver_build'class''');
            if (
$class && class_exists($class)) {
                
$implements class_implements($class);

                
// Make sure that the provided class implements the DriverInterface
                
if (isset($implements['StashInterfacesDriverInterface'])) {
                    
/** @type StashInterfacesDriverInterface $temp_driver */
                    
$temp_driver = new $class();

                    if (
$options array_get($driver_build'options'null)) {
                        
$temp_driver->setOptions($options);
                    }

                    
$drivers[] = $temp_driver;
                } else {
                    throw new 
RuntimeException('Cache driver class must implement StashInterfacesDriverInterface.');
                }
            }
        }


        
$count count($drivers);
        if (
$count 1) {
            
$driver = new Composite();
            
$driver->setOptions(array('drivers' => $drivers));
        } elseif (
$count === 1) {
            
$driver $drivers[0];
        } else {
            
$driver = new BlackHole();
        }

        return 
$driver;
    }

    
/**
     * Deletes an item from the cache
     * @param string $key Name of the cache item ID
     * @return bool True if deleted, false if not
     */
    
public function delete($key)
    {
        if (
$this->enabled) {
            return 
$this->pool->getItem($key)->clear();
        } else {
            return 
false;
        }
    }

    
/**
     * Checks if an item exists in the cache
     * @param string $key Name of the cache item ID
     * @return bool True if exists, false if not
     */
    
public function exists($key)
    {
        if (
$this->enabled) {
            return !
$this->pool->getItem($key)->isMiss();
        } else {
            return 
false;
        }
    }

    
/**
     * Removes all values from the cache
     */
    
public function flush()
    {
        return 
$this->pool->flush();
    }

    
/**
     * Gets a value from the cache
     * @param string $key Name of the cache item ID
     * @return StashInterfacesItemInterface
     */
    
public function getItem($key)
    {
        return 
$this->pool->getItem($key);
    }

    
/**
     * Enables the cache
     */
    
public function enable()
    {
        if (
$this->driver !== null) {
            
$this->pool->setDriver($this->driver);
        }
        
$this->enabled true;
    }

    
/**
     * Disables the cache
     */
    
public function disable()
    {
        
// save the current driver if not yet black hole so it can be restored on enable()
        
if (!($this->pool->getDriver() instanceof BlackHole)) {
            
$this->driver $this->pool->getDriver();
        }
        
$this->pool->setDriver(new BlackHole());
        
$this->enabled false;
    }

    
/**
     * Returns true if the cache is enabled, false if not
     * @return bool
     */
    
public function isEnabled()
    {
        return 
$this->enabled;
    }

    
/**
     * Disables all cache levels
     */
    
public static function disableAll()
    {
        
Core::make('cache/request')->disable();
        
Core::make('cache/expensive')->disable();
        
Core::make('cache')->disable();
    }

    
/**
     * Enables all cache levels
     */
    
public static function enableAll()
    {
        
Core::make('cache/request')->enable();
        
Core::make('cache/expensive')->enable();
        
Core::make('cache')->enable();
    }
}
Онлайн: 0
Реклама