. * * 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\Upgrades; use Espo\Core\Container; use Espo\Core\Exceptions\Error; use Espo\Core\Upgrades\Actions\Base as ActionBase; class ActionManager { private string $managerName; private Container $container; /** @var array> */ private $objects; protected ?string $currentAction; /** @var array */ protected array $params; /** * @param array $params */ public function __construct(string $managerName, Container $container, array $params) { $this->managerName = $managerName; $this->container = $container; $params['name'] = $managerName; $this->params = $params; } protected function getManagerName(): string { return $this->managerName; } protected function getContainer(): Container { return $this->container; } public function setAction(string $action): void { $this->currentAction = $action; } public function getAction(): string { assert($this->currentAction !== null); return $this->currentAction; } /** * @return array */ public function getParams(): array { return $this->params; } /** * @throws Error */ public function run(mixed $data): mixed { $object = $this->getObject(); return $object->run($data); } /** * @throws Error */ public function getActionClass(string $actionName): ActionBase { return $this->getObject($actionName); } /** * @return array * @throws Error */ public function getManifest(): array { return $this->getObject()->getManifest(); } /** * @param ?string $actionName * @throws Error */ protected function getObject(?string $actionName = null): ActionBase { $managerName = $this->getManagerName(); if (!$actionName) { $actionName = $this->getAction(); } if (!isset($this->objects[$managerName][$actionName])) { $class = "Espo\\Core\\Upgrades\\Actions\\" . ucfirst($managerName) . '\\' . ucfirst($actionName); if (!class_exists($class)) { throw new Error('Could not find an action ['.ucfirst($actionName).'], class ['.$class.'].'); } /** @var class-string $class */ $this->objects[$managerName][$actionName] = new $class($this->container, $this); } return $this->objects[$managerName][$actionName]; } }