77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @package   FOF
 | |
|  * @copyright Copyright (c)2010-2021 Nicholas K. Dionysopoulos / Akeeba Ltd
 | |
|  * @license   GNU General Public License version 2, or later
 | |
|  */
 | |
| 
 | |
| namespace FOF30\Factory\Magic;
 | |
| 
 | |
| defined('_JEXEC') || die;
 | |
| 
 | |
| use FOF30\Controller\DataController;
 | |
| use FOF30\Factory\Exception\ControllerNotFound;
 | |
| 
 | |
| /**
 | |
|  * Creates a DataController object instance based on the information provided by the fof.xml configuration file
 | |
|  */
 | |
| class ControllerFactory extends BaseFactory
 | |
| {
 | |
| 	/**
 | |
| 	 * Create a new object instance
 | |
| 	 *
 | |
| 	 * @param   string  $name    The name of the class we're making
 | |
| 	 * @param   array   $config  The config parameters which override the fof.xml information
 | |
| 	 *
 | |
| 	 * @return  DataController  A new DataController object
 | |
| 	 */
 | |
| 	public function make($name = null, array $config = [])
 | |
| 	{
 | |
| 		if (empty($name))
 | |
| 		{
 | |
| 			throw new ControllerNotFound($name);
 | |
| 		}
 | |
| 
 | |
| 		$appConfig = $this->container->appConfig;
 | |
| 		$name      = ucfirst($name);
 | |
| 
 | |
| 		$defaultConfig = [
 | |
| 			'name'           => $name,
 | |
| 			'default_task'   => $appConfig->get("views.$name.config.default_task", 'main'),
 | |
| 			'autoRouting'    => $appConfig->get("views.$name.config.autoRouting", 1),
 | |
| 			'csrfProtection' => $appConfig->get("views.$name.config.csrfProtection", 2),
 | |
| 			'viewName'       => $appConfig->get("views.$name.config.viewName", null),
 | |
| 			'modelName'      => $appConfig->get("views.$name.config.modelName", null),
 | |
| 			'taskPrivileges' => $appConfig->get("views.$name.acl"),
 | |
| 			'cacheableTasks' => $appConfig->get("views.$name.config.cacheableTasks", [
 | |
| 				'browse',
 | |
| 				'read',
 | |
| 			]),
 | |
| 			'taskMap'        => $appConfig->get("views.$name.taskmap"),
 | |
| 		];
 | |
| 
 | |
| 		$config = array_merge($defaultConfig, $config);
 | |
| 
 | |
| 		$className = $this->container->getNamespacePrefix($this->getSection()) . 'Controller\\DefaultDataController';
 | |
| 
 | |
| 		if (!class_exists($className, true))
 | |
| 		{
 | |
| 			$className = 'FOF30\\Controller\\DataController';
 | |
| 		}
 | |
| 
 | |
| 		$controller = new $className($this->container, $config);
 | |
| 
 | |
| 		$taskMap = $config['taskMap'];
 | |
| 
 | |
| 		if (is_array($taskMap) && !empty($taskMap))
 | |
| 		{
 | |
| 			foreach ($taskMap as $virtualTask => $method)
 | |
| 			{
 | |
| 				$controller->registerTask($virtualTask, $method);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return $controller;
 | |
| 	}
 | |
| }
 |