chg: [requestProcessor] Improved processor collection for local tools processor
parent
274caff4c8
commit
285061c4c6
|
@ -4,6 +4,13 @@ namespace App\Model\Table;
|
||||||
|
|
||||||
use App\Model\Table\AppTable;
|
use App\Model\Table\AppTable;
|
||||||
use Cake\Filesystem\Folder;
|
use Cake\Filesystem\Folder;
|
||||||
|
use Cake\Http\Exception\MethodNotAllowedException;
|
||||||
|
use Cake\Core\Exception\Exception;
|
||||||
|
|
||||||
|
class MissingRequestProcessorException extends Exception
|
||||||
|
{
|
||||||
|
protected $_defaultCode = 404;
|
||||||
|
}
|
||||||
|
|
||||||
class RequestProcessorTable extends AppTable
|
class RequestProcessorTable extends AppTable
|
||||||
{
|
{
|
||||||
|
@ -42,7 +49,19 @@ class RequestProcessorTable extends AppTable
|
||||||
throw new \Exception(__('Processor {0}.{1} not found', $scope, $action));
|
throw new \Exception(__('Processor {0}.{1} not found', $scope, $action));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new \Exception(__('Processor not found'), 1);
|
throw new MissingRequestProcessorException(__('Processor not found'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLocalToolProcessor($action, $toolName)
|
||||||
|
{
|
||||||
|
$scope = "LocalTool";
|
||||||
|
$specificScope = "{$toolName}LocalTool";
|
||||||
|
try { // try to get specific processor for module name or fall back to generic local tool processor
|
||||||
|
$processor = $this->getProcessor($specificScope, $action);
|
||||||
|
} catch (MissingRequestProcessorException $e) {
|
||||||
|
$processor = $this->getProcessor($scope, $action);
|
||||||
|
}
|
||||||
|
return $processor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function listProcessors($scope=null)
|
public function listProcessors($scope=null)
|
||||||
|
@ -53,7 +72,7 @@ class RequestProcessorTable extends AppTable
|
||||||
if (isset($this->requestProcessors[$scope])) {
|
if (isset($this->requestProcessors[$scope])) {
|
||||||
return $this->requestProcessors[$scope];
|
return $this->requestProcessors[$scope];
|
||||||
} else {
|
} else {
|
||||||
throw new \Exception(__('Processors for {0} not found', $scope));
|
throw new MissingRequestProcessorException(__('Processors for {0} not found', $scope));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,7 +88,7 @@ class RequestProcessorTable extends AppTable
|
||||||
$processorMainClassName = str_replace('.php', '', $processorFile);
|
$processorMainClassName = str_replace('.php', '', $processorFile);
|
||||||
$processorMainClassNameShort = str_replace('RequestProcessor.php', '', $processorFile);
|
$processorMainClassNameShort = str_replace('RequestProcessor.php', '', $processorFile);
|
||||||
$processorMainClass = $this->getProcessorClass($processorDir->pwd() . DS . $processorFile, $processorMainClassName);
|
$processorMainClass = $this->getProcessorClass($processorDir->pwd() . DS . $processorFile, $processorMainClassName);
|
||||||
if ($processorMainClass !== false) {
|
if (is_object($processorMainClass)) {
|
||||||
$this->requestProcessors[$processorMainClassNameShort] = $processorMainClass;
|
$this->requestProcessors[$processorMainClassNameShort] = $processorMainClass;
|
||||||
foreach ($this->requestProcessors[$processorMainClassNameShort]->getRegisteredActions() as $registeredAction) {
|
foreach ($this->requestProcessors[$processorMainClassNameShort]->getRegisteredActions() as $registeredAction) {
|
||||||
$scope = $this->requestProcessors[$processorMainClassNameShort]->getScope();
|
$scope = $this->requestProcessors[$processorMainClassNameShort]->getScope();
|
||||||
|
@ -79,17 +98,59 @@ class RequestProcessorTable extends AppTable
|
||||||
$this->requestProcessors[$processorMainClassNameShort]->{$registeredAction}->enabled = false;
|
$this->requestProcessors[$processorMainClassNameShort]->{$registeredAction}->enabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$this->requestProcessors[$processorMainClassNameShort] = new \stdClass();
|
||||||
|
$this->requestProcessors[$processorMainClassNameShort]->{$registeredAction} = new \stdClass();
|
||||||
|
$this->requestProcessors[$processorMainClassNameShort]->{$registeredAction}->action = "N/A";
|
||||||
|
$this->requestProcessors[$processorMainClassNameShort]->{$registeredAction}->enabled = false;
|
||||||
|
$this->requestProcessors[$processorMainClassNameShort]->{$registeredAction}->error = $processorMainClass;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getProcessorClass
|
||||||
|
*
|
||||||
|
* @param string $filePath
|
||||||
|
* @param string $processorMainClassName
|
||||||
|
* @return object|string Object loading success, string containing the error if failure
|
||||||
|
*/
|
||||||
private function getProcessorClass($filePath, $processorMainClassName)
|
private function getProcessorClass($filePath, $processorMainClassName)
|
||||||
{
|
{
|
||||||
require_once($filePath);
|
try {
|
||||||
$reflection = new \ReflectionClass($processorMainClassName);
|
require_once($filePath);
|
||||||
$processorMainClass = $reflection->newInstance(true);
|
try {
|
||||||
if ($processorMainClass->checkLoading() === 'Assimilation successful!') {
|
$reflection = new \ReflectionClass($processorMainClassName);
|
||||||
return $processorMainClass;
|
} catch (\ReflectionException $e) {
|
||||||
|
return $e->getMessage();
|
||||||
|
}
|
||||||
|
$processorMainClass = $reflection->newInstance(true);
|
||||||
|
if ($processorMainClass->checkLoading() === 'Assimilation successful!') {
|
||||||
|
return $processorMainClass;
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return $e->getMessage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* createInboxEntry
|
||||||
|
*
|
||||||
|
* @param Object|Array $processor can either be the processor object or an array containing data to fetch it
|
||||||
|
* @param Array $data
|
||||||
|
* @return Array
|
||||||
|
*/
|
||||||
|
public function createInboxEntry($processor, $data)
|
||||||
|
{
|
||||||
|
if (!is_object($processor) && !is_array($processor)) {
|
||||||
|
throw new MethodNotAllowedException(__("Invalid processor passed"));
|
||||||
|
}
|
||||||
|
if (is_array($processor)) {
|
||||||
|
if (empty($processor['scope']) || empty($processor['action'])) {
|
||||||
|
throw new MethodNotAllowedException(__("Invalid data passed. Missing either `scope` or `action`"));
|
||||||
|
}
|
||||||
|
$processor = $this->getProcessor('User', 'Registration');
|
||||||
|
}
|
||||||
|
return $processor->create($data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue