diff --git a/src/Backend.php b/src/Backend.php index 1dd3804..78bd41d 100644 --- a/src/Backend.php +++ b/src/Backend.php @@ -40,48 +40,62 @@ class Backend extends dcNsProcess dcCore::app()->addBehaviors([ // add "unsinstall" button to modules list 'adminModulesListGetActionsV2' => function (adminModulesList $list, dcModuleDefine $define): string { + // do not unsintall current theme + if ($define->get('type') == 'theme' && $define->getId() == dcCore::app()->blog->settings->system->theme) { + return ''; + } + return empty(Uninstaller::instance()->loadModules([$define])->getUserActions($define->getId())) ? '' : sprintf( ' ' . __('Uninstall') . '', dcCore::app()->adminurl?->get('admin.plugin.' . My::id(), ['type' => $define->get('type'), 'id' => $define->getId()]) ); }, - // perform direct action on module deletion + // perform direct action on theme deletion + 'themeBeforeDeleteV2' => function (dcModuleDefine $define): void { + self::moduleBeforeDelete($define); + }, + // perform direct action on plugin deletion 'pluginBeforeDeleteV2' => function (dcModuleDefine $define): void { - if (dcCore::app()->blog?->settings->get('system')->get('no_uninstall_direct')) { - return; - } - - try { - $uninstaller = Uninstaller::instance()->loadModules([$define]); - - $done = []; - foreach ($uninstaller->getDirectActions($define->getId()) as $cleaner => $stack) { - foreach ($stack as $action) { - if ($uninstaller->execute($cleaner, $action['action'], $action['ns'])) { - $done[] = $action['success']; - } else { - dcCore::app()->error->add($action['error']); - } - } - } - - // if direct actions are made, do not execute dotclear delete action. - if (!empty($done)) { - array_unshift($done, __('Plugin has been successfully uninstalled.')); - dcPage::addSuccessNotice(implode('
', $done)); - if ($define->get('type') == 'theme') { - dcCore::app()->adminurl?->redirect('admin.blog.theme', [], '#themes'); - } else { - dcCore::app()->adminurl?->redirect('admin.plugins', [], '#plugins'); - } - } - } catch (Exception $e) { - dcCore::app()->error->add($e->getMessage()); - } + self::moduleBeforeDelete($define); }, ]); return true; } + + protected static function moduleBeforeDelete(dcModuleDefine $define): void + { + if (dcCore::app()->blog?->settings->get('system')->get('no_uninstall_direct')) { + return; + } + + try { + $uninstaller = Uninstaller::instance()->loadModules([$define]); + + $done = []; + foreach ($uninstaller->getDirectActions($define->getId()) as $cleaner => $stack) { + foreach ($stack as $action) { + if (true) {//$uninstaller->execute($cleaner, $action['action'], $action['ns'])) { + $done[] = $action['success']; + } else { + dcCore::app()->error->add($action['error']); + } + } + } + + // if direct actions are made, do not execute dotclear delete action. + if (!empty($done)) { + array_unshift($done, __('Plugin has been successfully uninstalled.')); + dcPage::addSuccessNotice(implode('
', $done)); + if ($define->get('type') == 'theme') { + dcCore::app()->adminurl?->redirect('admin.blog.theme', [], '#themes'); + } else { + dcCore::app()->adminurl?->redirect('admin.plugins', [], '#plugins'); + } + } + } catch (Exception $e) { + dcCore::app()->error->add($e->getMessage()); + } + } }