. * * 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; abstract class Base { protected ActionManager $actionManager; protected ?string $name = null; /** @var array */ protected array $params = []; const UPLOAD = 'upload'; const INSTALL = 'install'; const UNINSTALL = 'uninstall'; const DELETE = 'delete'; public function __construct(Container $container) { $this->actionManager = new ActionManager($this->name ?? '', $container, $this->params); } /** * @return array * @throws Error */ public function getManifest(): array { return $this->actionManager->getManifest(); } /** * @return array * @throws Error */ public function getManifestById(string $processId): array { $actionClass = $this->actionManager->getActionClass(self::INSTALL); $actionClass->setProcessId($processId); return $actionClass->getManifest(); } /** * @throws Error */ public function upload(string $data): string { $this->actionManager->setAction(self::UPLOAD); return $this->actionManager->run($data); } /** * @param array $data * @throws Error */ public function install(array $data): mixed { $this->actionManager->setAction(self::INSTALL); return $this->actionManager->run($data); } /** * @param array $data * @throws Error */ public function uninstall(array $data): mixed { $this->actionManager->setAction(self::UNINSTALL); return $this->actionManager->run($data); } /** * @param array $data * @throws Error */ public function delete(array $data): mixed { $this->actionManager->setAction(self::DELETE); return $this->actionManager->run($data); } /** * @param array $params * @throws Error */ public function runInstallStep(string $stepName, array $params = []): void { $this->runActionStep(self::INSTALL, $stepName, $params); } /** * @param array $params * @throws Error * @noinspection PhpSameParameterValueInspection */ private function runActionStep(string $actionName, string $stepName, array $params = []): void { $actionClass = $this->actionManager->getActionClass($actionName); $methodName = 'step' . ucfirst($stepName); if (!method_exists($actionClass, $methodName)) { if (!empty($params['id'])) { $actionClass->setProcessId($params['id']); $actionClass->throwErrorAndRemovePackage("Step \"$stepName\" is not found."); } throw new Error('Step "'. $stepName .'" is not found.'); } $actionClass->$methodName($params); // throw an Exception on error } }