setActionObject($actionObject); } } /** * @return void */ public function setActionObject(\Espo\Core\Upgrades\Actions\Base $actionObject) { $this->actionObject = $actionObject; } /** * @return ?\Espo\Core\Upgrades\Actions\Base */ protected function getActionObject() { return $this->actionObject; } /** * Check dependencies. * * @param array $dependencyList * @return bool * @throws Error */ public function checkDependencies($dependencyList) { if (!is_array($dependencyList)) { /** @phpstan-ignore-line */ $dependencyList = (array) $dependencyList; } /** @var array $dependencyList */ $actionObject = $this->getActionObject(); assert($actionObject !== null); foreach ($dependencyList as $extensionName => $extensionVersion) { $dependencyExtensionEntity = $actionObject ->getEntityManager() ->getRDBRepository('Extension') ->where([ 'name' => trim($extensionName), 'isInstalled' => true, ]) ->findOne(); $versionString = is_array($extensionVersion) ? implode(', ', $extensionVersion) : $extensionVersion; $errorMessage = 'Dependency Error: The extension "' . $extensionName .'" with version "'. $versionString . '" is missing.'; if ( !isset($dependencyExtensionEntity) || !$actionObject->checkVersions( $extensionVersion, $dependencyExtensionEntity->get('version'), $errorMessage ) ) { throw new Error($errorMessage); } } return true; } }