From 406487d50c480c7289424bec4b8d23d679cc3cc6 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 3 Apr 2024 09:23:47 +0300 Subject: [PATCH] before upgrade extension check --- upgrades/8.2/scripts/BeforeUpgrade.php | 52 ++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/upgrades/8.2/scripts/BeforeUpgrade.php b/upgrades/8.2/scripts/BeforeUpgrade.php index f0a478dd95..4d87b22ac5 100644 --- a/upgrades/8.2/scripts/BeforeUpgrade.php +++ b/upgrades/8.2/scripts/BeforeUpgrade.php @@ -33,11 +33,16 @@ 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(); + $this->checkRepositories($container->getByClass(EntityManager::class)); } @@ -93,4 +98,51 @@ class BeforeUpgrade throw new Exception($msg); } + + /** + * @throws Error + */ + private function processCheckExtensions(): void + { + $errorMessageList = []; + + $this->processCheckExtension('Advanced Pack', '3.1.0', $errorMessageList); + $this->processCheckExtension('Real Estate', '1.8.0', $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->get('entityManager'); + + $extension = $em->getRDBRepository('Extension') + ->where([ + 'name' => $name, + 'isInstalled' => true, + ]) + ->findOne(); + + if (!$extension) { + return; + } + + $version = $extension->get('version'); + + if (version_compare($version, $minVersion, '>=')) { + return; + } + + $message = + "EspoCRM 8.2 is not compatible with '$name' extension of versions lower than $minVersion. " . + "Please upgrade the extension or uninstall it."; + + $errorMessageList[] = $message; + } }