From 5f9330bd1f70b66f3801ebbfb7f4e4834be5a7be Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 13 Nov 2019 17:00:35 +0100 Subject: [sysconfig] Allow deleting modules that are still used by a config Closes #3075 --- modules-available/sysconfig/page.inc.php | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'modules-available/sysconfig/page.inc.php') diff --git a/modules-available/sysconfig/page.inc.php b/modules-available/sysconfig/page.inc.php index 05a83924..320030f9 100644 --- a/modules-available/sysconfig/page.inc.php +++ b/modules-available/sysconfig/page.inc.php @@ -214,7 +214,7 @@ class Page_SysConfig extends Page { // Configs $res = Database::simpleQuery("SELECT c.configid, c.title, c.filepath, c.status, c.dateline, - GROUP_CONCAT(DISTINCT cl.locationid) AS loclist, GROUP_CONCAT(cxm.moduleid) AS modlist + GROUP_CONCAT(DISTINCT cl.locationid) AS loclist, GROUP_CONCAT(DISTINCT cxm.moduleid) AS modlist FROM configtgz c LEFT JOIN configtgz_x_module cxm USING (configid) LEFT JOIN configtgz_location cl ON (c.configid = cl.configid) @@ -411,20 +411,18 @@ class Page_SysConfig extends Page private function delModule() { $moduleid = Request::post('del', 'MISSING'); - $row = Database::queryFirst("SELECT title, filepath FROM configtgz_module WHERE moduleid = :moduleid LIMIT 1", array('moduleid' => $moduleid)); - if ($row === false) { + $module = Database::queryFirst("SELECT title, filepath FROM configtgz_module WHERE moduleid = :moduleid LIMIT 1", array('moduleid' => $moduleid)); + if ($module === false) { Message::addError('config-invalid', $moduleid); Util::redirect('?do=sysconfig'); } - $existing = Database::queryFirst("SELECT title FROM configtgz_x_module" - . " INNER JOIN configtgz USING (configid)" - . " WHERE moduleid = :moduleid LIMIT 1", array('moduleid' => $moduleid)); - if ($existing !== false) { - Message::addError('module-in-use', $row['title'], $existing['title']); - Util::redirect('?do=sysconfig'); - } + // Get config.tgz using this module *before* deleting it + $existing = Database::simpleQuery("SELECT configid FROM configtgz_x_module + WHERE moduleid = :moduleid", array('moduleid' => $moduleid)); + // Delete DB entries and file + Database::exec("DELETE FROM configtgz_module WHERE moduleid = :moduleid LIMIT 1", array('moduleid' => $moduleid)); $task = Taskmanager::submit('DeleteFile', array( - 'file' => $row['filepath'] + 'file' => $module['filepath'] )); if (isset($task['statusCode']) && $task['statusCode'] === Taskmanager::TASK_WAITING) { $task = Taskmanager::waitComplete($task['id']); @@ -432,9 +430,15 @@ class Page_SysConfig extends Page if (!isset($task['statusCode']) || $task['statusCode'] === Taskmanager::TASK_ERROR) { Message::addWarning('main.task-error', $task['data']['error']); } elseif ($task['statusCode'] === Taskmanager::TASK_FINISHED) { - Message::addSuccess('module-deleted', $row['title']); + Message::addSuccess('module-deleted', $module['title']); + } + // Rebuild depending config.tgz + while ($crow = $existing->fetch(PDO::FETCH_ASSOC)) { + $config = ConfigTgz::get($crow['configid']); + if ($config !== false) { + $config->generate(); + } } - Database::exec("DELETE FROM configtgz_module WHERE moduleid = :moduleid LIMIT 1", array('moduleid' => $moduleid)); Util::redirect('?do=sysconfig'); } -- cgit v1.2.3-55-g7522