From 0336b76a96d6e73f04e6c0169a1046b8142b85bb Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Tue, 2 Apr 2024 10:45:35 +0300 Subject: [PATCH] before upgrade script --- upgrades/8.2/scripts/BeforeUpgrade.php | 96 ++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 upgrades/8.2/scripts/BeforeUpgrade.php diff --git a/upgrades/8.2/scripts/BeforeUpgrade.php b/upgrades/8.2/scripts/BeforeUpgrade.php new file mode 100644 index 0000000000..f0a478dd95 --- /dev/null +++ b/upgrades/8.2/scripts/BeforeUpgrade.php @@ -0,0 +1,96 @@ +. + * + * 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\ORM\EntityManager; + +/** @noinspection PhpMultipleClassDeclarationsInspection */ +class BeforeUpgrade +{ + /** + * @throws Exception + */ + public function run(Container $container): void + { + $this->checkRepositories($container->getByClass(EntityManager::class)); + } + + /** + * @throws Exception + */ + private function checkRepositories(EntityManager $em): void + { + /** @var class-string[] $classNameList */ + $classNameList = [ + "Espo\\Repositories\\ActionHistoryRecord", + "Espo\\Repositories\\NextNumber", + "Espo\\Repositories\\AuthLogRecord", + "Espo\\Repositories\\AuthToken", + "Espo\\Modules\\Crm\\Repositories\\Account", + "Espo\\Modules\\Crm\\Repositories\\Call", + "Espo\\Modules\\Crm\\Repositories\\CaseObj", + "Espo\\Modules\\Crm\\Repositories\\Contact", + "Espo\\Modules\\Crm\\Repositories\\KnowledgeBaseArticle", + "Espo\\Modules\\Crm\\Repositories\\Lead", + "Espo\\Modules\\Crm\\Repositories\\Meeting", + "Espo\\Modules\\Crm\\Repositories\\Opportunity", + "Espo\\Modules\\Crm\\Repositories\\TargetList", + "Espo\\Modules\\Crm\\Repositories\\Task", + ]; + + $list = []; + + foreach ($em->getMetadata()->getEntityTypeList() as $entityType) { + if (!$em->hasRepository($entityType)) { + continue; + } + + $repository = $em->getRepository($entityType); + + if (in_array(get_class($repository), $classNameList)) { + continue; + } + + foreach ($classNameList as $className) { + if (is_a($repository, $className)) { + $list[] = get_class($repository); + } + } + } + + if ($list === []) { + return; + } + + $msg = implode(', ', $list) . + " should extend from Espo\\Core\\Repositories\\Database. Fix before upgrading."; + + throw new Exception($msg); + } +}