diff --git a/application/Espo/Modules/Crm/Classes/RecordHooks/CampaignTrackingUrl/BeforeCreate.php b/application/Espo/Modules/Crm/Classes/RecordHooks/CampaignTrackingUrl/BeforeCreate.php new file mode 100644 index 0000000000..0c428727cc --- /dev/null +++ b/application/Espo/Modules/Crm/Classes/RecordHooks/CampaignTrackingUrl/BeforeCreate.php @@ -0,0 +1,53 @@ +. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. + ************************************************************************/ + +namespace Espo\Modules\Crm\Classes\RecordHooks\CampaignTrackingUrl; + +use Espo\Core\Acl; +use Espo\Core\Exceptions\Forbidden; +use Espo\Core\Record\Hook\SaveHook; +use Espo\Modules\Crm\Entities\CampaignTrackingUrl; +use Espo\ORM\Entity; + +/** + * @implements SaveHook + */ +class BeforeCreate implements SaveHook +{ + public function __construct( + private Acl $acl + ) {} + + public function process(Entity $entity): void + { + if (!$this->acl->check($entity, Acl\Table::ACTION_EDIT)) { + throw new Forbidden("No 'edit' access."); + } + } +} diff --git a/application/Espo/Modules/Crm/Classes/RecordHooks/MassEmail/BeforeCreate.php b/application/Espo/Modules/Crm/Classes/RecordHooks/MassEmail/BeforeCreate.php new file mode 100644 index 0000000000..bcb1b70c60 --- /dev/null +++ b/application/Espo/Modules/Crm/Classes/RecordHooks/MassEmail/BeforeCreate.php @@ -0,0 +1,54 @@ +. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. + ************************************************************************/ + +namespace Espo\Modules\Crm\Classes\RecordHooks\MassEmail; + +use Espo\Core\Acl; +use Espo\Core\Acl\Table; +use Espo\Core\Exceptions\Forbidden; +use Espo\Core\Record\Hook\SaveHook; +use Espo\Modules\Crm\Entities\MassEmail; +use Espo\ORM\Entity; + +/** + * @implements SaveHook + */ +class BeforeCreate implements SaveHook +{ + public function __construct( + private Acl $acl + ) {} + + public function process(Entity $entity): void + { + if (!$this->acl->check($entity, Table::ACTION_EDIT)) { + throw new Forbidden("No 'edit' access."); + } + } +} diff --git a/application/Espo/Modules/Crm/Hooks/MassEmail/DeleteQueue.php b/application/Espo/Modules/Crm/Hooks/MassEmail/DeleteQueue.php new file mode 100644 index 0000000000..7fa248756e --- /dev/null +++ b/application/Espo/Modules/Crm/Hooks/MassEmail/DeleteQueue.php @@ -0,0 +1,57 @@ +. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. + ************************************************************************/ + +namespace Espo\Modules\Crm\Hooks\MassEmail; + +use Espo\Core\Hook\Hook\AfterRemove; +use Espo\Modules\Crm\Entities\EmailQueueItem; +use Espo\Modules\Crm\Entities\MassEmail; +use Espo\ORM\Entity; +use Espo\ORM\EntityManager; +use Espo\ORM\Repository\Option\RemoveOptions; + +/** + * @implements AfterRemove + */ +class DeleteQueue implements AfterRemove +{ + public function __construct(private EntityManager $entityManager) {} + + public function afterRemove(Entity $entity, RemoveOptions $options): void + { + $deleteQuery = $this->entityManager + ->getQueryBuilder() + ->delete() + ->from(EmailQueueItem::ENTITY_TYPE) + ->where(['massEmailId' => $entity->getId()]) + ->build(); + + $this->entityManager->getQueryExecutor()->execute($deleteQuery); + } +} diff --git a/application/Espo/Modules/Crm/Resources/metadata/recordDefs/CampaignTrackingUrl.json b/application/Espo/Modules/Crm/Resources/metadata/recordDefs/CampaignTrackingUrl.json index 9e77ee7f65..5f8e897dc6 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/recordDefs/CampaignTrackingUrl.json +++ b/application/Espo/Modules/Crm/Resources/metadata/recordDefs/CampaignTrackingUrl.json @@ -6,5 +6,8 @@ "delete": { "allowed": true } - } + }, + "beforeCreateHookClassNameList": [ + "Espo\\Modules\\Crm\\Classes\\RecordHooks\\CampaignTrackingUrl\\BeforeCreate" + ] } diff --git a/application/Espo/Modules/Crm/Resources/metadata/recordDefs/MassEmail.json b/application/Espo/Modules/Crm/Resources/metadata/recordDefs/MassEmail.json index 9e77ee7f65..13d6d7b06e 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/recordDefs/MassEmail.json +++ b/application/Espo/Modules/Crm/Resources/metadata/recordDefs/MassEmail.json @@ -6,5 +6,8 @@ "delete": { "allowed": true } - } + }, + "beforeCreateHookClassNameList": [ + "Espo\\Modules\\Crm\\Classes\\RecordHooks\\MassEmail\\BeforeCreate" + ] } diff --git a/application/Espo/Modules/Crm/Services/CampaignTrackingUrl.php b/application/Espo/Modules/Crm/Services/CampaignTrackingUrl.php index 994f47e26d..6e6cec8704 100644 --- a/application/Espo/Modules/Crm/Services/CampaignTrackingUrl.php +++ b/application/Espo/Modules/Crm/Services/CampaignTrackingUrl.php @@ -29,9 +29,6 @@ namespace Espo\Modules\Crm\Services; -use Espo\Core\Exceptions\Forbidden; -use Espo\ORM\Entity; - use Espo\Services\Record; /** @@ -40,13 +37,4 @@ use Espo\Services\Record; class CampaignTrackingUrl extends Record { protected $mandatorySelectAttributeList = ['campaignId']; - - protected function beforeCreateEntity(Entity $entity, $data) - { - parent::beforeCreateEntity($entity, $data); - - if (!$this->getAcl()->check($entity, 'edit')) { - throw new Forbidden(); - } - } } diff --git a/application/Espo/Modules/Crm/Services/MassEmail.php b/application/Espo/Modules/Crm/Services/MassEmail.php index d26d298818..7b1934941b 100644 --- a/application/Espo/Modules/Crm/Services/MassEmail.php +++ b/application/Espo/Modules/Crm/Services/MassEmail.php @@ -29,10 +29,6 @@ namespace Espo\Modules\Crm\Services; -use Espo\Core\Acl\Table; -use Espo\Core\Exceptions\Forbidden; -use Espo\Modules\Crm\Entities\EmailQueueItem; -use Espo\ORM\Entity; use Espo\Services\Record; /** @@ -41,29 +37,4 @@ use Espo\Services\Record; class MassEmail extends Record { protected $mandatorySelectAttributeList = ['campaignId']; - - protected function beforeCreateEntity(Entity $entity, $data) - { - parent::beforeCreateEntity($entity, $data); - - if (!$this->acl->check($entity, Table::ACTION_EDIT)) { - throw new Forbidden(); - } - } - - protected function afterDeleteEntity(Entity $entity) - { - parent::afterDeleteEntity($entity); - - $delete = $this->entityManager - ->getQueryBuilder() - ->delete() - ->from(EmailQueueItem::ENTITY_TYPE) - ->where([ - 'massEmailId' => $entity->getId(), - ]) - ->build(); - - $this->entityManager->getQueryExecutor()->execute($delete); - } }