. * * 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. ************************************************************************/ use Espo\Core\Container; use Espo\Entities\Extension; use Espo\ORM\EntityManager; /** @noinspection PhpMultipleClassDeclarationsInspection */ class BeforeUpgrade { private ?Container $container = null; /** * @throws Exception */ public function run(Container $container): void { $this->container = $container; $this->processCheckExtensions(); } /** * @throws Error */ private function processCheckExtensions(): void { $errorMessageList = []; $this->processCheckExtension('Google Integration', '1.8.3', $errorMessageList); $this->processCheckExtension('Outlook Integration', '1.6.12', $errorMessageList); if (!count($errorMessageList)) { return; } $message = implode("\n\n", $errorMessageList); throw new Error($message); } private function processCheckExtension(string $name, string $minVersion, array &$errorMessageList): void { $em = $this->container->getByClass(EntityManager::class); $extension = $em->getRDBRepository(Extension::ENTITY_TYPE) ->where([ 'name' => $name, 'isInstalled' => true, ]) ->findOne(); if (!$extension) { return; } $version = $extension->get('version'); if (version_compare($version, $minVersion, '>=')) { return; } $message = "EspoCRM 9.3 is not compatible with '$name' extension of versions lower than $minVersion. " . "You need to upgrade the extension."; $errorMessageList[] = $message; } }