From ec3c438fee1d68aec52cc98aed698603a17eb216 Mon Sep 17 00:00:00 2001 From: Jean-Christian Denis Date: Sun, 14 May 2023 20:53:32 +0200 Subject: [PATCH] be more accurate to enable direct action on disabled module --- src/Backend.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Backend.php b/src/Backend.php index 04b8903..03a1ea5 100644 --- a/src/Backend.php +++ b/src/Backend.php @@ -81,15 +81,23 @@ class Backend extends dcNsProcess */ protected static function moduleBeforeDelete(dcModuleDefine $define): void { - if (dcCore::app()->blog?->settings->get('system')->get('no_uninstall_direct') - || $define->get('state') != dcModuleDefine::STATE_ENABLED - ) { + if (dcCore::app()->blog?->settings->get('system')->get('no_uninstall_direct')) { return; } try { $uninstaller = Uninstaller::instance()->loadModules([$define]); + // Do not perform action on disabled module if a duplicate exists. + if ($define->get('state') != dcModuleDefine::STATE_ENABLED) { + if (!in_array($define->get('type'), ['plugin', 'theme']) + || $define->get('type') == 'plugin' && 1 < count(dcCore::app()->plugins->getDefines(['id' => $define->getId()])) + || $define->get('type') == 'theme' && 1 < count(dcCore::app()->themes->getDefines(['id' => $define->getId()])) + ) { + return; + } + } + $done = []; foreach ($uninstaller->getDirectActions($define->getId()) as $cleaner => $stack) { foreach ($stack as $action) {