This commit is contained in:
Yuri Kuznetsov
2024-02-22 14:13:32 +02:00
parent f72c902b6a
commit 83bcb9176b
7 changed files with 172 additions and 43 deletions
@@ -0,0 +1,53 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM Open Source CRM application.
* Copyright (C) 2014-2024 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* 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 <https://www.gnu.org/licenses/>.
*
* 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<CampaignTrackingUrl>
*/
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.");
}
}
}
@@ -0,0 +1,54 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM Open Source CRM application.
* Copyright (C) 2014-2024 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* 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 <https://www.gnu.org/licenses/>.
*
* 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<MassEmail>
*/
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.");
}
}
}
@@ -0,0 +1,57 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM Open Source CRM application.
* Copyright (C) 2014-2024 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* 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 <https://www.gnu.org/licenses/>.
*
* 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<MassEmail>
*/
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);
}
}
@@ -6,5 +6,8 @@
"delete": {
"allowed": true
}
}
},
"beforeCreateHookClassNameList": [
"Espo\\Modules\\Crm\\Classes\\RecordHooks\\CampaignTrackingUrl\\BeforeCreate"
]
}
@@ -6,5 +6,8 @@
"delete": {
"allowed": true
}
}
},
"beforeCreateHookClassNameList": [
"Espo\\Modules\\Crm\\Classes\\RecordHooks\\MassEmail\\BeforeCreate"
]
}
@@ -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();
}
}
}
@@ -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);
}
}