diff options
Diffstat (limited to 'modules-available/sysconfig/addmodule.inc.php')
-rw-r--r-- | modules-available/sysconfig/addmodule.inc.php | 59 |
1 files changed, 54 insertions, 5 deletions
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 */ |