Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>tags/v20.0.0beta1
@@ -27,6 +27,7 @@ return array( | |||
'OCA\\WorkflowEngine\\Entity\\File' => $baseDir . '/../lib/Entity/File.php', | |||
'OCA\\WorkflowEngine\\Helper\\LogContext' => $baseDir . '/../lib/Helper/LogContext.php', | |||
'OCA\\WorkflowEngine\\Helper\\ScopeContext' => $baseDir . '/../lib/Helper/ScopeContext.php', | |||
'OCA\\WorkflowEngine\\Listener\\LoadAdditionalSettingsScriptsListener' => $baseDir . '/../lib/Listener/LoadAdditionalSettingsScriptsListener.php', | |||
'OCA\\WorkflowEngine\\Manager' => $baseDir . '/../lib/Manager.php', | |||
'OCA\\WorkflowEngine\\Migration\\PopulateNewlyIntroducedDatabaseFields' => $baseDir . '/../lib/Migration/PopulateNewlyIntroducedDatabaseFields.php', | |||
'OCA\\WorkflowEngine\\Migration\\Version2000Date20190808074233' => $baseDir . '/../lib/Migration/Version2000Date20190808074233.php', |
@@ -42,6 +42,7 @@ class ComposerStaticInitWorkflowEngine | |||
'OCA\\WorkflowEngine\\Entity\\File' => __DIR__ . '/..' . '/../lib/Entity/File.php', | |||
'OCA\\WorkflowEngine\\Helper\\LogContext' => __DIR__ . '/..' . '/../lib/Helper/LogContext.php', | |||
'OCA\\WorkflowEngine\\Helper\\ScopeContext' => __DIR__ . '/..' . '/../lib/Helper/ScopeContext.php', | |||
'OCA\\WorkflowEngine\\Listener\\LoadAdditionalSettingsScriptsListener' => __DIR__ . '/..' . '/../lib/Listener/LoadAdditionalSettingsScriptsListener.php', | |||
'OCA\\WorkflowEngine\\Manager' => __DIR__ . '/..' . '/../lib/Manager.php', | |||
'OCA\\WorkflowEngine\\Migration\\PopulateNewlyIntroducedDatabaseFields' => __DIR__ . '/..' . '/../lib/Migration/PopulateNewlyIntroducedDatabaseFields.php', | |||
'OCA\\WorkflowEngine\\Migration\\Version2000Date20190808074233' => __DIR__ . '/..' . '/../lib/Migration/Version2000Date20190808074233.php', |
@@ -23,6 +23,7 @@ namespace OCA\WorkflowEngine\AppInfo; | |||
use OCA\WorkflowEngine\Controller\RequestTime; | |||
use OCA\WorkflowEngine\Helper\LogContext; | |||
use OCA\WorkflowEngine\Listener\LoadAdditionalSettingsScriptsListener; | |||
use OCA\WorkflowEngine\Manager; | |||
use OCA\WorkflowEngine\Service\Logger; | |||
use OCP\AppFramework\App; | |||
@@ -34,7 +35,6 @@ use OCP\EventDispatcher\Event; | |||
use OCP\EventDispatcher\IEventDispatcher; | |||
use OCP\ILogger; | |||
use OCP\IServerContainer; | |||
use OCP\Template; | |||
use OCP\WorkflowEngine\IEntity; | |||
use OCP\WorkflowEngine\IEntityCompat; | |||
use OCP\WorkflowEngine\IOperation; | |||
@@ -43,24 +43,20 @@ use OCP\WorkflowEngine\IOperationCompat; | |||
class Application extends App implements IBootstrap { | |||
public const APP_ID = 'workflowengine'; | |||
/** @var IEventDispatcher */ | |||
protected $dispatcher; | |||
/** @var Manager */ | |||
protected $manager; | |||
public function __construct() { | |||
parent::__construct(self::APP_ID); | |||
} | |||
public function register(IRegistrationContext $context): void { | |||
$context->registerServiceAlias('RequestTimeController', RequestTime::class); | |||
$context->registerEventListener( | |||
'OCP\WorkflowEngine::loadAdditionalSettingScripts', | |||
LoadAdditionalSettingsScriptsListener::class, | |||
-100 | |||
); | |||
} | |||
public function boot(IBootContext $context): void { | |||
$this->registerHooksAndListeners( | |||
$context->getAppContainer()->query(IEventDispatcher::class) | |||
); | |||
$this->registerRuleListeners( | |||
$context->getAppContainer()->query(IEventDispatcher::class), | |||
$context->getServerContainer(), | |||
@@ -68,44 +64,19 @@ class Application extends App implements IBootstrap { | |||
); | |||
} | |||
/** | |||
* Register all hooks and listeners | |||
*/ | |||
private function registerHooksAndListeners(IEventDispatcher $dispatcher): void { | |||
$dispatcher->addListener( | |||
'OCP\WorkflowEngine::loadAdditionalSettingScripts', | |||
function () { | |||
if (!function_exists('style')) { | |||
// This is hacky, but we need to load the template class | |||
class_exists(Template::class, true); | |||
} | |||
script('core', [ | |||
'files/fileinfo', | |||
'files/client', | |||
'dist/systemtags', | |||
]); | |||
script(self::APP_ID, [ | |||
'workflowengine', | |||
]); | |||
}, | |||
-100 | |||
); | |||
} | |||
private function registerRuleListeners(IEventDispatcher $dispatcher, | |||
IServerContainer $container, | |||
ILogger $logger): void { | |||
$configuredEvents = $this->manager->getAllConfiguredEvents(); | |||
$manager = $container->query(Manager::class); | |||
$configuredEvents = $manager->getAllConfiguredEvents(); | |||
foreach ($configuredEvents as $operationClass => $events) { | |||
foreach ($events as $entityClass => $eventNames) { | |||
array_map(function (string $eventName) use ($container, $dispatcher, $logger, $operationClass, $entityClass) { | |||
array_map(function (string $eventName) use ($manager, $container, $dispatcher, $logger, $operationClass, $entityClass) { | |||
$dispatcher->addListener( | |||
$eventName, | |||
function ($event) use ($container, $eventName, $logger, $operationClass, $entityClass) { | |||
$ruleMatcher = $this->manager->getRuleMatcher(); | |||
function ($event) use ($manager, $container, $eventName, $logger, $operationClass, $entityClass) { | |||
$ruleMatcher = $manager->getRuleMatcher(); | |||
try { | |||
/** @var IEntity $entity */ | |||
$entity = $container->query($entityClass); |
@@ -0,0 +1,53 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at> | |||
* | |||
* @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at> | |||
* | |||
* @license GNU AGPL version 3 or any later version | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
*/ | |||
namespace OCA\WorkflowEngine\Listener; | |||
use OCA\WorkflowEngine\AppInfo\Application; | |||
use OCP\EventDispatcher\Event; | |||
use OCP\EventDispatcher\IEventListener; | |||
use OCP\Template; | |||
use function class_exists; | |||
use function function_exists; | |||
use function script; | |||
class LoadAdditionalSettingsScriptsListener implements IEventListener { | |||
public function handle(Event $event): void { | |||
if (!function_exists('style')) { | |||
// This is hacky, but we need to load the template class | |||
class_exists(Template::class, true); | |||
} | |||
script('core', [ | |||
'files/fileinfo', | |||
'files/client', | |||
'dist/systemtags', | |||
]); | |||
script(Application::APP_ID, [ | |||
'workflowengine', | |||
]); | |||
} | |||
} |