diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2019-09-09 17:17:39 +0200 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2019-09-09 22:56:06 +0200 |
commit | ae1cc1d14dda99f62714d5e658e6cb71378aaae2 (patch) | |
tree | ef6251a499db11e4b3db7772f4d6ac5a3de6ed15 | |
parent | 849d025d093d1c80d3820901d20bf6a664c6af02 (diff) | |
download | nextcloud-server-ae1cc1d14dda99f62714d5e658e6cb71378aaae2.tar.gz nextcloud-server-ae1cc1d14dda99f62714d5e658e6cb71378aaae2.zip |
entities equip the RuleMatcher on the events they are aware of
Operations will receive the matcher instance
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r-- | apps/workflowengine/lib/AppInfo/Application.php | 11 | ||||
-rw-r--r-- | apps/workflowengine/lib/Entity/File.php | 19 | ||||
-rw-r--r-- | lib/public/WorkflowEngine/IEntity.php | 7 | ||||
-rw-r--r-- | lib/public/WorkflowEngine/IOperation.php | 7 |
4 files changed, 38 insertions, 6 deletions
diff --git a/apps/workflowengine/lib/AppInfo/Application.php b/apps/workflowengine/lib/AppInfo/Application.php index e691c53d528..f5653a6e48c 100644 --- a/apps/workflowengine/lib/AppInfo/Application.php +++ b/apps/workflowengine/lib/AppInfo/Application.php @@ -24,6 +24,7 @@ namespace OCA\WorkflowEngine\AppInfo; use OCA\WorkflowEngine\Manager; use OCP\Template; use OCA\WorkflowEngine\Controller\RequestTime; +use OCP\WorkflowEngine\IEntity; use OCP\WorkflowEngine\IOperation; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\GenericEvent; @@ -83,13 +84,17 @@ class Application extends \OCP\AppFramework\App { foreach ($configuredEvents as $operationClass => $events) { foreach ($events as $entityClass => $eventNames) { - array_map(function (string $eventName) use ($operationClass) { + array_map(function (string $eventName) use ($operationClass, $entityClass) { $this->dispatcher->addListener( $eventName, - function (GenericEvent $event) use ($eventName, $operationClass) { + function (GenericEvent $event) use ($eventName, $operationClass, $entityClass) { + $ruleMatcher = $this->manager->getRuleMatcher(); + /** @var IEntity $entity */ + $entity = $this->getContainer()->query($entityClass); + $entity->prepareRuleMatcher($ruleMatcher, $eventName, $event); /** @var IOperation $operation */ $operation = $this->getContainer()->query($operationClass); - $operation->onEvent($eventName, $event); + $operation->onEvent($eventName, $event, $ruleMatcher); } ); }, $eventNames); diff --git a/apps/workflowengine/lib/Entity/File.php b/apps/workflowengine/lib/Entity/File.php index b420217c4b6..dd15b0fd435 100644 --- a/apps/workflowengine/lib/Entity/File.php +++ b/apps/workflowengine/lib/Entity/File.php @@ -28,6 +28,8 @@ use OCP\IL10N; use OCP\IURLGenerator; use OCP\WorkflowEngine\GenericEntityEvent; use OCP\WorkflowEngine\IEntity; +use OCP\WorkflowEngine\IRuleMatcher; +use Symfony\Component\EventDispatcher\GenericEvent; class File implements IEntity { @@ -60,4 +62,21 @@ class File implements IEntity { new GenericEntityEvent($this->l10n->t('File copied'), $namespace . 'postCopy' ), ]; } + + /** + * @since 18.0.0 + */ + public function prepareRuleMatcher(IRuleMatcher $ruleMatcher, string $eventName, GenericEvent $event): void { + switch ($eventName) { + case 'postCreate': + case 'postWrite': + case 'postDelete': + case 'postTouch': + $ruleMatcher->setEntitySubject($this, $event->getSubject()); + break; + case 'postRename': + case 'postCopy': + $ruleMatcher->setEntitySubject($this, $event->getSubject()[1]); + } + } } diff --git a/lib/public/WorkflowEngine/IEntity.php b/lib/public/WorkflowEngine/IEntity.php index 5ac1082a5a3..c08e9072a38 100644 --- a/lib/public/WorkflowEngine/IEntity.php +++ b/lib/public/WorkflowEngine/IEntity.php @@ -24,6 +24,8 @@ declare(strict_types=1); namespace OCP\WorkflowEngine; +use Symfony\Component\EventDispatcher\GenericEvent; + /** * Interface IEntity * @@ -67,4 +69,9 @@ interface IEntity { */ public function getEvents(): array; + /** + * @since 18.0.0 + */ + public function prepareRuleMatcher(IRuleMatcher $ruleMatcher, string $eventName, GenericEvent $event): void; + } diff --git a/lib/public/WorkflowEngine/IOperation.php b/lib/public/WorkflowEngine/IOperation.php index 8bba92351a2..d16fd618a84 100644 --- a/lib/public/WorkflowEngine/IOperation.php +++ b/lib/public/WorkflowEngine/IOperation.php @@ -91,12 +91,13 @@ interface IOperation { * Is being called by the workflow engine when an event was triggered that * is configured for this operation. An evaluation whether the event * qualifies for this operation to run has still to be done by the - * implementor. + * implementor by calling the RuleMatchers getMatchingOperations method + * and evaluating the results. * - * If the implementor is an IComplexOpe ration, this method will not be + * If the implementor is an IComplexOperation, this method will not be * called automatically. It can be used or left as no-op by the implementor. * * @since 18.0.0 */ - public function onEvent(string $eventName, GenericEvent $event): void; + public function onEvent(string $eventName, GenericEvent $event, IRuleMatcher $ruleMatcher): void; } |