summaryrefslogtreecommitdiffstats
path: root/modules-available/sysconfig/addmodule.inc.php
diff options
context:
space:
mode:
authorSimon Rettberg2016-05-03 19:03:09 +0200
committerSimon Rettberg2016-05-03 19:03:09 +0200
commit50404f3b23b7fd6aeae4c9d2f6df0ea25e984e66 (patch)
tree05e99fdffa696434960d7c77966c0bc36d6339e8 /modules-available/sysconfig/addmodule.inc.php
parentSecond half of merge.... (diff)
downloadslx-admin-50404f3b23b7fd6aeae4c9d2f6df0ea25e984e66.tar.gz
slx-admin-50404f3b23b7fd6aeae4c9d2f6df0ea25e984e66.tar.xz
slx-admin-50404f3b23b7fd6aeae4c9d2f6df0ea25e984e66.zip
WIP
Diffstat (limited to 'modules-available/sysconfig/addmodule.inc.php')
-rw-r--r--modules-available/sysconfig/addmodule.inc.php180
1 files changed, 180 insertions, 0 deletions
diff --git a/modules-available/sysconfig/addmodule.inc.php b/modules-available/sysconfig/addmodule.inc.php
new file mode 100644
index 00000000..bcd8e796
--- /dev/null
+++ b/modules-available/sysconfig/addmodule.inc.php
@@ -0,0 +1,180 @@
+<?php
+
+/**
+ * Addmodule subpage base - makes sure
+ * we have the two required methods preprocess and render
+ */
+abstract class AddModule_Base
+{
+
+ /**
+ * Holds the instance for the currently executing step
+ * @var \AddModule_Base
+ */
+ private static $instance = false;
+
+ /**
+ * Instance of ConfigModule we're editing. False if not editing but creating.
+ * @var \ConfigModule
+ */
+ protected $edit = false;
+
+ /**
+ *
+ * @param type $step
+ * @return \AddModule_Base
+ */
+ public static function setStep($step)
+ {
+ 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 (self::$instance->edit === false)
+ Util::traceError('Invalid module id for editing');
+ if (!preg_match('/^' . self::$instance->edit->moduleType() . '_/', $step))
+ Util::traceError('Module to edit is of different type!');
+ Util::addRedirectParam('edit', self::$instance->edit->id());
+ }
+ }
+
+ protected function tmError()
+ {
+ Message::addError('taskmanager-error');
+ Util::redirect('?do=SysConfig');
+ }
+
+ protected function taskError($status)
+ {
+ if (isset($status['data']['error'])) {
+ $error = $status['data']['error'];
+ } elseif (isset($status['statusCode'])) {
+ $error = $status['statusCode'];
+ } else {
+ $error = Dictionary::translate('lang_unknwonTaskManager');
+ }
+ Message::addError('task-error', $error);
+ Util::redirect('?do=SysConfig');
+ }
+
+ /**
+ * Called before any HTML rendering happens, so you can
+ * pepare stuff, validate input, and optionally redirect
+ * early if something is wrong, or you received post
+ * data etc.
+ */
+ protected function preprocessInternal()
+ {
+ // void
+ }
+
+ /**
+ * Do page rendering.
+ */
+ protected function renderInternal()
+ {
+ // void
+ }
+
+ /**
+ * Handle ajax stuff
+ */
+ protected function ajaxInternal()
+ {
+ // void
+ }
+
+ public static function preprocess()
+ {
+ if (self::$instance === false) {
+ Util::traceError('No step instance yet');
+ }
+ self::$instance->preprocessInternal();
+ }
+
+ public static function render()
+ {
+ if (self::$instance === false) {
+ Util::traceError('No step instance yet');
+ }
+ if (self::$instance->edit !== false)
+ Message::addInfo('replacing-module', self::$instance->edit->title());
+ self::$instance->renderInternal();
+ }
+
+ public static function ajax()
+ {
+ if (self::$instance === false) {
+ Util::traceError('No step instance yet');
+ }
+ self::$instance->ajaxInternal();
+ }
+
+}
+
+/**
+ * Start dialog for adding module. Here the user
+ * selects which kind of module they want to add.
+ */
+class AddModule_Start extends AddModule_Base
+{
+
+ protected function renderInternal()
+ {
+ $title = $order = array();
+ $mods = ConfigModule::getList();
+ foreach ($mods as $module) {
+ $title[] = $module['title'];
+ $order[] = $module['sortOrder'];
+ }
+ array_multisort($order, SORT_ASC, $title, SORT_ASC, $mods);
+ Render::addDialog(Dictionary::translate('lang_moduleAdd'), false, 'start', array('modules' => array_values($mods)));
+ }
+
+}
+
+/*
+ * Helper functions to set/get a batch of vars from/to post variables or a module
+ */
+
+/**
+ *
+ * @param \ConfigModule $module
+ * @param array $array
+ * @param array $keys
+ */
+function moduleToArray($module, &$array, $keys)
+{
+ foreach ($keys as $key) {
+ $array[$key] = $module->getData($key);
+ }
+}
+
+/**
+ *
+ * @param \ConfigModule $module
+ * @param array $array
+ * @param array $keys
+ */
+function arrayToModule($module, $array, $keys)
+{
+ foreach ($keys as $key) {
+ $module->setData($key, $array[$key]);
+ }
+}
+/**
+ *
+ * @param array $array
+ * @param array $keys
+ */
+function postToArray(&$array, $keys, $ignoreMissing = false)
+{
+ foreach ($keys as $key) {
+ $val = Request::post($key, '--not-in-post');
+ if ($ignoreMissing && $val === '--not-in-post') continue;
+ $array[$key] = $val;
+ }
+}