Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/FileManager/src/Utility/StorageManager.php
<?php

namespace Croogo\FileManager\Utility;

use
ReflectionClass;
use
RuntimeException;

/**
 * StorageManager - manages and instantiates gaufrette storage engine instances
 *
 * @author Florian Krämer
 * @copyright 2012 Florian Krämer
 * @license MIT
 */
class StorageManager
{

   
/**
     * Adapter configs
     *
     * @var array
     */
   
protected $_adapterConfig = [
       
'Local' => [
           
'adapterOptions' => [TMP, true],
           
'adapterClass' => '\League\Flysystem\Adapter\Local',
           
'class' => '\League\Flysystem\Filesystem']];

   
/**
     * Sets the default or active adapter that is used
     *
     * @var string
     */
   
protected $_activeAdapter = 'Local';

   
/**
     * Return a singleton instance of the StorageManager.
     *
     * @return ClassRegistry instance
     */
   
public static function &getInstance()
    {
        static
$instance = [];
        if (!
$instance) {
           
$instance[0] = new StorageManager();
        }

        return
$instance[0];
    }

   
/**
     * Sets or gets the active storage adapter
     *
     * @param string
     * @return mixed
     */
   
public static function config($adapter = null, $options = [])
    {
       
$_this = StorageManager::getInstance();

        if (!empty(
$adapter) && !empty($options)) {
            return
$_this->_adapterConfig[$adapter] = $options;
        }

        if (empty(
$adapter)) {
            return
$_this->_adapterConfig[$_this->_activeAdapter];
        }

        if (isset(
$_this->_adapterConfig[$adapter])) {
            return
$_this->_adapterConfig[$adapter];
        }

        return
false;
    }

   
/**
     * Sets or gets the active storage adapter
     *
     * @param string
     * @return mixed
     */
   
public static function activeAdapter($name = null)
    {
       
$_this = StorageManager::getInstance();

        if (empty(
$name)) {
            return
$_this->_activeAdapter;
        }

        if (isset(
$_this->_adapterConfig[$name])) {
            return
$_this->_activeAdapter = $name;
        }

        return
false;
    }

   
/**
     * Flush all or a single adapter from the config
     *
     * @param string $name Config name, if none all adapters are flushed
     * @throws RuntimeException
     * @return bool True on success
     */
   
public static function flush($name = null)
    {
       
$_this = StorageManager::getInstance();

        if (empty(
$name)) {
           
$_this->_adapterConfig = [];
           
$_this->_activeAdapter = '';
        }

        if (isset(
$_this->_adapterConfig[$name])) {
            if (
$_this->_activeAdapter == $name) {
                throw new
RuntimeException(__d('FileStorage', 'You can not flush the active adapter {0}', $name));
            }
            unset(
$_this->_adapterConfig[$name]);

            return
true;
        }

        return
false;
    }

   
/**
     * StorageAdapter
     *
     * @param mixed $adapterName string of adapter configuration or array of settings
     * @param bool $renewObject Creates a new instance of the given adapter in the configuration
     * @throws RuntimeException
     * @return Flysystem object as configured by first arg
     */
   
public static function adapter($adapterName = null, $renewObject = false)
    {
       
$_this = StorageManager::getInstance();

        if (empty(
$adapterName)) {
           
$adapterName = $_this->_activeAdapter;
        }

       
$isConfigured = true;
        if (
is_string($adapterName)) {
            if (!empty(
$_this->_adapterConfig[$adapterName])) {
               
$adapter = $_this->_adapterConfig[$adapterName];
            } else {
                throw new
RuntimeException(__d('FileStorage', 'Invalid Storage Adapter {0}', $adapterName));
            }

            if (!empty(
$_this->_adapterConfig[$adapterName]['object']) && $renewObject === false) {
                return
$_this->_adapterConfig[$adapterName]['object'];
            }
        }

        if (
is_array($adapterName)) {
           
$adapter = $adapterName;
           
$isConfigured = false;
        }

       
$class = $adapter['adapterClass'];
       
$rc = new ReflectionClass($class);
       
$adapterObject = $rc->newInstanceArgs($adapter['adapterOptions']);
       
$engineObject = new $adapter['class']($adapterObject);
        if (
$isConfigured) {
           
$_this->_adapterConfig[$adapterName]['object'] = &$engineObject;
        }

        return
$engineObject;
    }

   
/**
     * @return array
     */
   
public static function configured()
    {
       
$_this = StorageManager::getInstance();
       
$config = [];
        foreach (
$_this->_adapterConfig as $k => $v) {
            if (empty(
$v['description'])) {
                continue;
            }
           
$config[$k] = $v['description'];
        }

        return
$config;
    }
}