Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/concrete5/flysystem/src/MountManager.php
Строк: 91
<?php

namespace ConcreteFlysystem;

use 
LogicException;
use 
InvalidArgumentException;

class 
MountManager
{
    
/**
     * @var  array  $filesystems
     */
    
protected $filesystems = array();

    
/**
     * Constructor
     *
     * @param   array  $filesystems
     */
    
public function __construct(array $filesystems = array())
    {
        
$this->mountFilesystems($filesystems);
    }

    
/**
     * Mount filesystems
     *
     * @param   array  $filesystems  [:prefix => Filesystem,]
     * @return  $this
     */
    
public function mountFilesystems(array $filesystems)
    {
        foreach (
$filesystems as $prefix => $filesystem) {
            
$this->mountFilesystem($prefix$filesystem);
        }

        return 
$this;
    }

    
/**
     * Mount filesystems
     *
     * @param   string               $prefix
     * @param   FilesystemInterface  $filesystem
     * @return  $this
     */
    
public function mountFilesystem($prefixFilesystemInterface $filesystem)
    {
        if ( ! 
is_string($prefix)) {
            throw new 
InvalidArgumentException(__METHOD__.' expects argument #1 to be a string.');
        }

        
$this->filesystems[$prefix] = $filesystem;

        return 
$this;
    }

    
/**
     * Get the filesystem with the corresponding prefix
     *
     * @param    string               $prefix
     * @return   FilesystemInterface
     * @throws   LogicException
     */
    
public function getFilesystem($prefix)
    {
        if ( ! isset(
$this->filesystems[$prefix])) {
            throw new 
LogicException('No filesystem mounted with prefix ' $prefix);
        }

        return 
$this->filesystems[$prefix];
    }

    
/**
     * Retrieve the prefix form an arguments array
     *
     * @param   array  $arguments
     * @return  array  [:prefix, :arguments]
     */
    
public function filterPrefix(array $arguments)
    {
        if (empty(
$arguments)) {
            throw new 
LogicException('At least one argument needed');
        }

        
$path array_shift($arguments);

        if ( ! 
is_string($path)) {
            throw new 
InvalidArgumentException('First argument should be a string');
        }

        if ( ! 
preg_match('#^[a-zA-Z0-9]+://.*#'$path)) {
            throw new 
InvalidArgumentException('No prefix detected in for path: ' $path);
        }

        list (
$prefix$path) = explode('://'$path2);
        
array_unshift($arguments$path);

        return array(
$prefix$arguments);
    }

    
/**
     * Call forwarder
     *
     * @param   string  $method
     * @param   array   $arguments
     * @return  mixed
     */
    
public function __call($method$arguments)
    {
        list(
$prefix$arguments) = $this->filterPrefix($arguments);

        
$filesystem $this->getFilesystem($prefix);
        
$callback = array($filesystem$method);

        return 
call_user_func_array($callback$arguments);
    }
}
Онлайн: 0
Реклама