. * * 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\Core\Action; use Espo\Core\Acl; use Espo\Core\Exceptions\BadRequest; use Espo\Core\Exceptions\Forbidden; use Espo\Core\Exceptions\ForbiddenSilent; use Espo\Core\Exceptions\NotFound; use Espo\Core\Record\ReadParams; use Espo\Core\Record\ServiceContainer as RecordServiceContainer; use Espo\ORM\Entity; use stdClass; class Service { public function __construct( private ActionFactory $factory, private Acl $acl, private RecordServiceContainer $recordServiceContainer ) {} /** * Perform an action. * * @throws Forbidden * @throws BadRequest * @throws NotFound */ public function process(string $entityType, string $action, string $id, stdClass $data): Entity { if (!$this->acl->checkScope($entityType)) { throw new ForbiddenSilent(); } if (!$action || !$id) { throw new BadRequest(); } $actionParams = new Params($entityType, $id); $actionProcessor = $this->factory->create($action, $entityType); $actionProcessor->process( $actionParams, Data::fromRaw($data) ); $service = $this->recordServiceContainer->get($entityType); return $service->read($id, ReadParams::create()); } }