. * * 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\Actions; use Espo\Core\Exceptions\Error; use Espo\Entities\Extension; use Espo\ORM\EntityManager; use RuntimeException; class Helper { private ?Base $actionObject = null; public function __construct(private EntityManager $entityManager) {} public function setActionObject(Base $actionObject): void { $this->actionObject = $actionObject; } /** * Check dependencies. * * @param array $dependencyList * @throws Error */ public function checkDependencies(mixed $dependencyList): bool { if (!$this->actionObject) { throw new RuntimeException("No action passed."); } if (!is_array($dependencyList)) { $dependencyList = (array) $dependencyList; } /** @var array $dependencyList */ foreach ($dependencyList as $extensionName => $extensionVersion) { $entity = $this->entityManager ->getRDBRepositoryByClass(Extension::class) ->where([ 'name' => trim($extensionName), 'isInstalled' => true, ]) ->findOne(); $versionString = is_array($extensionVersion) ? implode(', ', $extensionVersion) : $extensionVersion; $errorMessage = "Dependency error: Extension '$extensionName' with version '$versionString' is missing."; if ( !$entity || !$this->actionObject->checkVersions( $extensionVersion, $entity->getVersion(), $errorMessage ) ) { throw new Error($errorMessage); } } return true; } }