1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 
<?php
/* --------------------------------------------------------------
   EnvironmentHttpContextFactory.inc.php 2016-04-26
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2016 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

MainFactory::load_class('AbstractHttpContextFactory');

/**
 * Class EnvironmentHttpViewControllerRegistryFactory
 *
 * @category   System
 * @package    Http
 * @subpackage Factories
 * @extends    AbstractHttpViewControllerRegistryFactory
 */
class EnvironmentHttpViewControllerRegistryFactory extends AbstractHttpViewControllerRegistryFactory
{
    /**
     * @var ClassFinderInterface
     */
    protected $classFinder;
    
    /**
     * Initializes the HttpViewControllerRegistryFactory
     *
     * @param ClassFinderInterface $classFinder
     *
     */
    public function __construct(ClassFinderInterface $classFinder)
    {
        $this->classFinder = $classFinder;
    }   
    
    /**
     * Creates and returns a new http view controller registry.
     *
     * @return HttpViewControllerRegistryInterface
     */
    public function create()
    {
        $registry = MainFactory::create('HttpViewControllerRegistry');
        
        $this->_addAvailableControllers($registry);
        
        return $registry;
    }
    

    /**
     * Adds new available controller to the registry.
     *
     * @param HttpViewControllerRegistryInterface $registry Registry object which adds the new controller entries.
     */
    protected function _addAvailableControllers(HttpViewControllerRegistryInterface $registry)
    {
        $controllers = $this->classFinder->findByParent('HttpViewController');
        
        foreach($controllers->getArray() as $className => $classFile)
        {
            $callableControllerName = $this->_getShortenNameOrUseOriginal($className);
            $registry->set($callableControllerName, $className);
        }
    }
    
    
    protected function _getShortenNameOrUseOriginal($originalClassName)
    {
        $suffixToCut = 'Controller';
        
        if(substr($originalClassName, 0-strlen($suffixToCut), strlen($suffixToCut)) === $suffixToCut)
        {
            $shorten = substr($originalClassName, 0, strlen($originalClassName) - strlen($suffixToCut));
            return $shorten;
        }
        return $originalClassName;
    }
    
    
}