diff --git a/application/Espo/Hooks/Common/Webhook.php b/application/Espo/Hooks/Common/Webhook.php index 5f9928b718..4a9e297d7b 100644 --- a/application/Espo/Hooks/Common/Webhook.php +++ b/application/Espo/Hooks/Common/Webhook.php @@ -29,34 +29,34 @@ namespace Espo\Hooks\Common; +use Espo\Core\Hook\Hook\AfterRemove; +use Espo\Core\Hook\Hook\AfterSave; use Espo\ORM\Entity; use Espo\Core\ORM\Entity as CoreEntity; use Espo\Core\ORM\Repository\Option\SaveOption; use Espo\Core\Utils\Metadata; use Espo\Core\Webhook\Manager as WebhookManager; +use Espo\ORM\Repository\Option\RemoveOptions; +use Espo\ORM\Repository\Option\SaveOptions; -class Webhook +/** + * @implements AfterSave + * @implements AfterRemove + */ +class Webhook implements AfterSave, AfterRemove { public static int $order = 101; public function __construct(private Metadata $metadata, private WebhookManager $webhookManager) {} - /** - * @param array $options - */ - public function afterSave(Entity $entity, array $options): void + public function afterSave(Entity $entity, SaveOptions $options): void { - if (!empty($options[SaveOption::SILENT])) { - return; - } - - if (!$this->metadata->get(['scopes', $entity->getEntityType(), 'object'])) { - return; - } - - if (!$entity instanceof CoreEntity) { + if ( + $this->toSkip($options, $entity) || + !$entity instanceof CoreEntity + ) { return; } @@ -67,23 +67,21 @@ class Webhook } } - /** - * @param array $options - */ - public function afterRemove(Entity $entity, array $options): void + public function afterRemove(Entity $entity, RemoveOptions $options): void { - if (!empty($options[SaveOption::SILENT])) { - return; - } - - if (!$this->metadata->get(['scopes', $entity->getEntityType(), 'object'])) { - return; - } - - if (!$entity instanceof CoreEntity) { + if ( + $this->toSkip($options, $entity) || + !$entity instanceof CoreEntity + ) { return; } $this->webhookManager->processDelete($entity); } + + private function toSkip(SaveOptions|RemoveOptions $options, Entity $entity): bool + { + return $options->get(SaveOption::SILENT) || + !$this->metadata->get("scopes.{$entity->getEntityType()}.object"); + } }