1<?php 2/** 3 * Copyright 2008-2017 Horde LLC (http://www.horde.org/) 4 * 5 * See the enclosed file LICENSE for license information (BSD). If you 6 * did not receive this file, see http://www.horde.org/licenses/bsd. 7 * 8 * @author James Pepin <james@bluestatedigital.com> 9 * @category Horde 10 * @license http://www.horde.org/licenses/bsd BSD 11 * @package Controller 12 */ 13 14/** 15 * Class to execute the controller request 16 * 17 * @author James Pepin <james@bluestatedigital.com> 18 * @category Horde 19 * @copyright 2008-2017 Horde LLC 20 * @license http://www.horde.org/licenses/bsd BSD 21 * @package Controller 22 */ 23class Horde_Controller_Runner 24{ 25 protected $_logger; 26 27 public function __construct(Horde_Log_Logger $logger) 28 { 29 $this->_logger = $logger; 30 } 31 32 public function execute(Horde_Injector $injector, 33 Horde_Controller_Request $request, 34 Horde_Controller_RequestConfiguration $config) 35 { 36 $this->_logger->debug('RequestConfiguration in Horde_Controller_Runner: ' . print_r($config, true)); 37 38 $exporter = $injector->getInstance($config->getSettingsExporterName()); 39 $exporter->exportBindings($injector); 40 41 $controller = $config->getControllerName(); 42 if (!$controller) { 43 throw new Horde_Controller_Exception('No controller defined'); 44 } 45 46 $implementationBinder = new Horde_Injector_Binder_Implementation($controller); 47 $injector->addBinder('Horde_Controller', new Horde_Injector_Binder_AnnotatedSetters($implementationBinder)); 48 49 $filterRunner = $injector->createInstance('Horde_Controller_FilterRunner'); 50 $exporter->exportFilters($filterRunner, $injector); 51 52 $response = $filterRunner->processRequest($request, $injector->createInstance('Horde_Controller_Response')); 53 if ($response->internalRedirect()) { 54 $this->_logger->debug('Internal redirect'); 55 return $this->execute($injector->createChildInjector(), $request, $response->getRedirectConfiguration()); 56 } 57 58 $this->_logger->debug('Returning Horde_Controller_Response'); 59 return $response; 60 } 61} 62