. * * 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\Tools\Stars\Api; use Espo\Core\Acl; use Espo\Core\Api\Action; use Espo\Core\Api\Request; use Espo\Core\Api\Response; use Espo\Core\Api\ResponseComposer; use Espo\Core\Exceptions\BadRequest; use Espo\Core\Exceptions\Forbidden; use Espo\Core\Exceptions\NotFound; use Espo\Entities\User; use Espo\ORM\Entity; use Espo\ORM\EntityManager; use Espo\Tools\Stars\StarService; /** * @noinspection PhpUnused */ class DeleteUnstar implements Action { public function __construct( private EntityManager $entityManager, private Acl $acl, private User $user, private StarService $service, ) {} public function process(Request $request): Response { $id = $request->getRouteParam('id'); $entityType = $request->getRouteParam('entityType'); if (!is_string($id) || !is_string($entityType)) { throw new BadRequest(); } $entity = $this->getEntity($entityType, $id); $this->service->unstar($entity, $this->user); return ResponseComposer::json(true); } /** * @throws Forbidden * @throws NotFound */ private function getEntity(string $entityType, string $id): Entity { $entity = $this->entityManager ->getRDBRepository($entityType) ->getById($id); if (!$entity) { throw new NotFound(); } if (!$this->acl->checkEntityRead($entity)) { throw new Forbidden(); } return $entity; } }