66 lines
1.5 KiB
PHP
66 lines
1.5 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* This file is part of RSS-Bridge, a PHP project capable of generating RSS and
|
||
|
* Atom feeds for websites that don't have one.
|
||
|
*
|
||
|
* For the full license information, please view the UNLICENSE file distributed
|
||
|
* with this source code.
|
||
|
*
|
||
|
* @package Core
|
||
|
* @license http://unlicense.org/ UNLICENSE
|
||
|
* @link https://github.com/rss-bridge/rss-bridge
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Factory for action objects.
|
||
|
*/
|
||
|
class ActionFactory extends FactoryAbstract {
|
||
|
/**
|
||
|
* {@inheritdoc}
|
||
|
*
|
||
|
* @param string $name {@inheritdoc}
|
||
|
*/
|
||
|
public function create($name) {
|
||
|
$filePath = $this->buildFilePath($name);
|
||
|
|
||
|
if(!file_exists($filePath)) {
|
||
|
throw new \Exception('File ' . $filePath . ' does not exist!');
|
||
|
}
|
||
|
|
||
|
require_once $filePath;
|
||
|
|
||
|
$class = $this->buildClassName($name);
|
||
|
|
||
|
if((new \ReflectionClass($class))->isInstantiable()) {
|
||
|
return new $class();
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Build class name from action name
|
||
|
*
|
||
|
* The class name consists of the action name with prefix "Action". The first
|
||
|
* character of the class name must be uppercase.
|
||
|
*
|
||
|
* Example: 'display' => 'DisplayAction'
|
||
|
*
|
||
|
* @param string $name The action name.
|
||
|
* @return string The class name.
|
||
|
*/
|
||
|
protected function buildClassName($name) {
|
||
|
return ucfirst(strtolower($name)) . 'Action';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Build file path to the action class.
|
||
|
*
|
||
|
* @param string $name The action name.
|
||
|
* @return string Path to the action class.
|
||
|
*/
|
||
|
protected function buildFilePath($name) {
|
||
|
return $this->getWorkingDir() . $this->buildClassName($name) . '.php';
|
||
|
}
|
||
|
}
|