From 32d037d949715f553d737201ab6960ea18067098 Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Thu, 16 Jan 2020 21:57:21 +0100 Subject: [sysconfig] New step after creating a module to directly assign it to system configs --- modules-available/sysconfig/addconfig.inc.php | 2 +- modules-available/sysconfig/addmodule.inc.php | 59 ++++++++++++++++++++-- .../sysconfig/addmodule_adauth.inc.php | 6 +++ .../sysconfig/addmodule_branding.inc.php | 5 +- .../sysconfig/addmodule_custommodule.inc.php | 5 +- .../sysconfig/addmodule_ldapauth.inc.php | 5 ++ .../sysconfig/addmodule_screensaver.inc.php | 5 +- .../sysconfig/addmodule_sshconfig.inc.php | 5 +- modules-available/sysconfig/lang/de/module.json | 1 + modules-available/sysconfig/lang/en/module.json | 1 + modules-available/sysconfig/templates/assign.html | 21 ++++++++ 11 files changed, 105 insertions(+), 10 deletions(-) create mode 100644 modules-available/sysconfig/templates/assign.html diff --git a/modules-available/sysconfig/addconfig.inc.php b/modules-available/sysconfig/addconfig.inc.php index 68efc29c..58cd6a1c 100644 --- a/modules-available/sysconfig/addconfig.inc.php +++ b/modules-available/sysconfig/addconfig.inc.php @@ -30,7 +30,7 @@ abstract class AddConfig_Base Util::redirect('?do=SysConfig'); } self::$instance = new $step(); - if (($editId = Request::any('edit', false, 'int')) !== false) { + if ($editId = Request::any('edit')) { self::$instance->edit = ConfigTgz::get($editId); if (self::$instance->edit === false) Util::traceError('Invalid config id for editing'); diff --git a/modules-available/sysconfig/addmodule.inc.php b/modules-available/sysconfig/addmodule.inc.php index 0dd28651..b4a84537 100644 --- a/modules-available/sysconfig/addmodule.inc.php +++ b/modules-available/sysconfig/addmodule.inc.php @@ -22,19 +22,20 @@ abstract class AddModule_Base /** * * @param string $step name of class representing the current step + * @param int $editId (optional) overwrite for the request parameter 'edit' */ - public static function setStep($step) + public static function setStep($step, $editId = false) { if (empty($step) || !class_exists($step) || get_parent_class($step) !== 'AddModule_Base') { Message::addError('invalid-action', $step); Util::redirect('?do=SysConfig'); } self::$instance = new $step(); - if (Request::any('edit')) { - self::$instance->edit = ConfigModule::get(Request::any('edit')); + if ($editId = $editId ? $editId : Request::any('edit')) { + self::$instance->edit = ConfigModule::get($editId); if (self::$instance->edit === false) Util::traceError('Invalid module id for editing'); - if (!preg_match('/^' . self::$instance->edit->moduleType() . '_/', $step)) + if ($step !== 'AddModule_Assign' && !preg_match('/^' . self::$instance->edit->moduleType() . '_/', $step)) Util::traceError('Module to edit is of different type!'); Util::addRedirectParam('edit', self::$instance->edit->id()); } @@ -99,7 +100,7 @@ abstract class AddModule_Base if (self::$instance === false) { Util::traceError('No step instance yet'); } - if (self::$instance->edit !== false) { + if (get_class(self::$instance) !== 'AddModule_Assign' && self::$instance->edit !== false) { Message::addInfo('replacing-module', self::$instance->edit->title()); } self::$instance->renderInternal(); @@ -136,6 +137,54 @@ class AddModule_Start extends AddModule_Base } +/** + * End dialog for adding module. Here the user + * can assign the module to configs. + */ +class AddModule_Assign extends AddModule_Base +{ + + protected function preprocessInternal() + { + $assign = Request::any('assign', false, 'boolean'); + + if ($assign) { + $configIds = Request::any('configs', [], 'array'); + $moduleId = $this->edit->id(); + $moduleType = $this->edit->moduleType(); + + if (ConfigModule::getList()[$moduleType]['unique']) { + $moduleIds = []; + foreach (ConfigModule::getAll($moduleType) as $module) { + $moduleIds[] = $module->id(); + } + + Database::exec("DELETE FROM configtgz_x_module WHERE configid IN (:configids) AND moduleid IN (:moduleids)", + array('configids' => $configIds, 'moduleids' => $moduleIds)); + } + + foreach ($configIds as $configId) { + Database::exec("INSERT INTO configtgz_x_module (configid, moduleid) VALUES (:configid, :moduleid)", array( + 'configid' => $configId, + 'moduleid' => $moduleId + )); + ConfigTgz::get($configId)->generate(); + } + + Util::redirect('?do=SysConfig'); + } + } + + protected function renderInternal() + { + $data = ['edit' => $this->edit->id(), 'configs' => SysConfig::getAll()]; + if (count($data['configs']) === 0) + Util::redirect('?do=SysConfig'); + Render::addDialog(Dictionary::translate('lang_moduleAssign'), false, 'assign', $data); + } + +} + /* * Helper functions to set/get a batch of vars from/to post variables or a module */ diff --git a/modules-available/sysconfig/addmodule_adauth.inc.php b/modules-available/sysconfig/addmodule_adauth.inc.php index 83f4e289..583844d0 100644 --- a/modules-available/sysconfig/addmodule_adauth.inc.php +++ b/modules-available/sysconfig/addmodule_adauth.inc.php @@ -524,6 +524,12 @@ class AdAuth_Finish extends AddModule_Base $this->taskIds = array( 'tm-config' => $tgz, ); + + if ($this->edit === false) { + AddModule_Base::setStep('AddModule_Assign', $module->id()); + return; + } + } protected function renderInternal() diff --git a/modules-available/sysconfig/addmodule_branding.inc.php b/modules-available/sysconfig/addmodule_branding.inc.php index dd98d7af..d941a7a7 100644 --- a/modules-available/sysconfig/addmodule_branding.inc.php +++ b/modules-available/sysconfig/addmodule_branding.inc.php @@ -231,8 +231,11 @@ class Branding_Finish extends AddModule_Base // Yay if ($this->edit !== false) Message::addSuccess('module-edited'); - else + else { Message::addSuccess('module-added'); + AddModule_Base::setStep('AddModule_Assign', $module->id()); + return; + } Util::redirect('?do=SysConfig'); } diff --git a/modules-available/sysconfig/addmodule_custommodule.inc.php b/modules-available/sysconfig/addmodule_custommodule.inc.php index c234f765..86b98206 100644 --- a/modules-available/sysconfig/addmodule_custommodule.inc.php +++ b/modules-available/sysconfig/addmodule_custommodule.inc.php @@ -154,8 +154,11 @@ class CustomModule_CompressModule extends AddModule_Base // Yay if ($this->edit !== false) Message::addSuccess('module-edited'); - else + else { Message::addSuccess('module-added'); + AddModule_Base::setStep('AddModule_Assign', $module->id()); + return; + } Util::redirect('?do=SysConfig'); } diff --git a/modules-available/sysconfig/addmodule_ldapauth.inc.php b/modules-available/sysconfig/addmodule_ldapauth.inc.php index 001353d0..98f98c6d 100644 --- a/modules-available/sysconfig/addmodule_ldapauth.inc.php +++ b/modules-available/sysconfig/addmodule_ldapauth.inc.php @@ -293,6 +293,11 @@ class LdapAuth_Finish extends AddModule_Base $this->taskIds = array( 'tm-config' => $tgz, ); + + if ($this->edit === false) { + AddModule_Base::setStep('AddModule_Assign', $module->id()); + return; + } } protected function renderInternal() diff --git a/modules-available/sysconfig/addmodule_screensaver.inc.php b/modules-available/sysconfig/addmodule_screensaver.inc.php index 4fd8f17d..7417c200 100644 --- a/modules-available/sysconfig/addmodule_screensaver.inc.php +++ b/modules-available/sysconfig/addmodule_screensaver.inc.php @@ -167,8 +167,11 @@ class Screensaver_Finish extends AddModule_Base // Yay if ($task !== false && $this->edit !== false) Message::addSuccess('module-edited'); - elseif ($task !== false) + elseif ($task !== false) { Message::addSuccess('module-added'); + AddModule_Base::setStep('AddModule_Assign', $module->id()); + return; + } Util::redirect('?do=SysConfig'); } } diff --git a/modules-available/sysconfig/addmodule_sshconfig.inc.php b/modules-available/sysconfig/addmodule_sshconfig.inc.php index ec01f878..495ba2a9 100644 --- a/modules-available/sysconfig/addmodule_sshconfig.inc.php +++ b/modules-available/sysconfig/addmodule_sshconfig.inc.php @@ -68,8 +68,11 @@ class SshConfig_Finish extends AddModule_Base // Yay if ($this->edit !== false) Message::addSuccess('module-edited'); - else + else { Message::addSuccess('module-added'); + AddModule_Base::setStep('AddModule_Assign', $module->id()); + return; + } Util::redirect('?do=SysConfig'); } diff --git a/modules-available/sysconfig/lang/de/module.json b/modules-available/sysconfig/lang/de/module.json index 4b401437..02d55e5b 100644 --- a/modules-available/sysconfig/lang/de/module.json +++ b/modules-available/sysconfig/lang/de/module.json @@ -4,6 +4,7 @@ "lang_configurationCompilation": "Konfiguration zusammenstellen", "lang_contentOf": "Inhalt von", "lang_moduleAdd": "Modul hinzuf\u00fcgen", + "lang_moduleAssign": "Modul zu Systemkonfigurationen zuweisen", "lang_noModuleFromThisGroup": "(Kein Modul dieser Gruppe)", "lang_unknwonTaskManager": "Unbekannter Taskmanager-Fehler", "module_name": "Lokalisierung + Integration", diff --git a/modules-available/sysconfig/lang/en/module.json b/modules-available/sysconfig/lang/en/module.json index ba2d0591..278de8ed 100644 --- a/modules-available/sysconfig/lang/en/module.json +++ b/modules-available/sysconfig/lang/en/module.json @@ -4,6 +4,7 @@ "lang_configurationCompilation": "Compile configuration", "lang_contentOf": "Content of", "lang_moduleAdd": "Add Module", + "lang_moduleAssign": "Assign Module to System Configurations", "lang_noModuleFromThisGroup": "(No module from this group)", "lang_unknwonTaskManager": "Unknown Task Manager error", "module_name": "Localization", diff --git a/modules-available/sysconfig/templates/assign.html b/modules-available/sysconfig/templates/assign.html new file mode 100644 index 00000000..b3e3d267 --- /dev/null +++ b/modules-available/sysconfig/templates/assign.html @@ -0,0 +1,21 @@ +
+ + + + + {{#configs}} +
+ +
+ + +
+
+ +
+ {{/configs}} + +
+ +
+
\ No newline at end of file -- cgit v1.2.3-55-g7522