summaryrefslogtreecommitdiffstats
path: root/modules-available/sysconfig/addmodule.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/sysconfig/addmodule.inc.php')
-rw-r--r--modules-available/sysconfig/addmodule.inc.php59
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
*/