summaryrefslogtreecommitdiffstats
path: root/modules-available/baseconfig
diff options
context:
space:
mode:
authorSimon Rettberg2016-05-13 18:24:08 +0200
committerSimon Rettberg2016-05-13 18:24:08 +0200
commit7d916647e1b82fcc8a17b68d3ae0615af42f53e0 (patch)
treeda83387a203c3b25980c4a5068418862c2b6a0a9 /modules-available/baseconfig
parentStill working in modularization cleanup and refinement (diff)
downloadslx-admin-7d916647e1b82fcc8a17b68d3ae0615af42f53e0.tar.gz
slx-admin-7d916647e1b82fcc8a17b68d3ae0615af42f53e0.tar.xz
slx-admin-7d916647e1b82fcc8a17b68d3ae0615af42f53e0.zip
Get baseconfig ready for modularization
Diffstat (limited to 'modules-available/baseconfig')
-rw-r--r--modules-available/baseconfig/hooks/translation.inc.php16
-rw-r--r--modules-available/baseconfig/inc/baseconfigutil.inc.php42
-rw-r--r--modules-available/baseconfig/lang/de/config-variable-categories.json12
-rw-r--r--modules-available/baseconfig/lang/de/template-tags.json11
-rw-r--r--modules-available/baseconfig/lang/en/config-variable-categories.json13
-rw-r--r--modules-available/baseconfig/lang/en/template-tags.json4
-rw-r--r--modules-available/baseconfig/lang/pt/config-variable-categories.json10
-rw-r--r--modules-available/baseconfig/lang/pt/template-tags.json1
-rw-r--r--modules-available/baseconfig/page.inc.php229
-rw-r--r--modules-available/baseconfig/templates/_page.html158
10 files changed, 258 insertions, 238 deletions
diff --git a/modules-available/baseconfig/hooks/translation.inc.php b/modules-available/baseconfig/hooks/translation.inc.php
index 4f2cd8f7..7588fe38 100644
--- a/modules-available/baseconfig/hooks/translation.inc.php
+++ b/modules-available/baseconfig/hooks/translation.inc.php
@@ -18,10 +18,10 @@ $HANDLER['subsections'] = array(
* Configuration categories
*/
$HANDLER['grep_config-variable-categories'] = function($module) {
- $want = array();
- $res = Database::simpleQuery("SELECT catid FROM cat_setting ORDER BY catid ASC");
- while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
- $want['cat_' . $row['catid']] = true;
+ $module->activate();
+ $want = BaseConfigUtil::getCategories();
+ foreach ($want as &$entry) {
+ $entry = true;
}
return $want;
};
@@ -30,10 +30,10 @@ $HANDLER['grep_config-variable-categories'] = function($module) {
* Configuration variables
*/
$HANDLER['grep_config-variables'] = function($module) {
- $want = array();
- $res = Database::simpleQuery("SELECT setting FROM setting ORDER BY setting ASC");
- while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
- $want[$row['setting']] = true;
+ $module->activate();
+ $want = BaseConfigUtil::getVariables();
+ foreach ($want as &$entry) {
+ $entry = true;
}
return $want;
};
diff --git a/modules-available/baseconfig/inc/baseconfigutil.inc.php b/modules-available/baseconfig/inc/baseconfigutil.inc.php
new file mode 100644
index 00000000..33875156
--- /dev/null
+++ b/modules-available/baseconfig/inc/baseconfigutil.inc.php
@@ -0,0 +1,42 @@
+<?php
+
+class BaseConfigUtil
+{
+
+ /**
+ * Return all config variables to be handled directly by the baseconfig edit module.
+ * The array will contain a list of mapping of type:
+ * VARNAME => array(
+ * catid => xx,
+ * defaultvalue => xx,
+ * permissions => xx,
+ * validator => xx,
+ * )
+ *
+ * @return array all known config variables
+ */
+ public static function getVariables()
+ {
+ $settings = array();
+ foreach (glob('modules/*/baseconfig/settings.json', GLOB_NOSORT) as $file) {
+ $data = json_decode(file_get_contents($file), true);
+ if (is_array($data)) {
+ $settings += $data;
+ }
+ }
+ return $settings;
+ }
+
+ public static function getCategories()
+ {
+ $categories = array();
+ foreach (glob('modules/*/baseconfig/categories.json', GLOB_NOSORT) as $file) {
+ $data = json_decode(file_get_contents($file), true);
+ if (is_array($data)) {
+ $categories += $data;
+ }
+ }
+ return $categories;
+ }
+
+} \ No newline at end of file
diff --git a/modules-available/baseconfig/lang/de/config-variable-categories.json b/modules-available/baseconfig/lang/de/config-variable-categories.json
index b8cb6935..d8d7e91f 100644
--- a/modules-available/baseconfig/lang/de/config-variable-categories.json
+++ b/modules-available/baseconfig/lang/de/config-variable-categories.json
@@ -1,9 +1,9 @@
{
- "cat_1": "Inaktivit\u00e4t und Abschaltung",
- "cat_2": "Internetzugriff",
- "cat_3": "Zeitsynchronisation",
- "cat_4": "Grundsystem",
"cat_5": "Gemeinsames Netzlaufwerk",
- "cat_6": "Unkategorisiert",
- "cat_7": "vmchooser"
+ "networking": "Netzwerk-\/Internetzugriff",
+ "other": "Unkategorisiert",
+ "power": "Inaktivit\u00e4t und Abschaltung",
+ "sysconfig": "Grundsystem",
+ "timesync": "Zeitsynchronisation",
+ "vmchooser": "vmChooser"
} \ No newline at end of file
diff --git a/modules-available/baseconfig/lang/de/template-tags.json b/modules-available/baseconfig/lang/de/template-tags.json
index de2007d9..1c71e174 100644
--- a/modules-available/baseconfig/lang/de/template-tags.json
+++ b/modules-available/baseconfig/lang/de/template-tags.json
@@ -1,13 +1,6 @@
{
"lang_basicConfiguration": "Basiskonfiguration",
- "lang_catUser": "Benutzerverwaltung",
"lang_clientRelatedConfig": "Die Optionen auf dieser Seite beziehen sich auf das Verhalten der bwLehrpool-Clients.",
- "lang_create": "Schaffen",
- "lang_delete": "L\u00f6schen",
- "lang_newUser": "Neuer Benutzer",
- "lang_partitionMountPoint": "Mount Point",
- "lang_reset": "Zur\u00fccksetzen",
- "lang_save": "Speichern",
- "lang_userName": "Benutzername",
- "lang_userPasswd": "Passwort"
+ "lang_enableOverride": "\u00dcberschreiben",
+ "lang_reset": "Zur\u00fccksetzen"
} \ No newline at end of file
diff --git a/modules-available/baseconfig/lang/en/config-variable-categories.json b/modules-available/baseconfig/lang/en/config-variable-categories.json
index 7c0ab654..f0324e6b 100644
--- a/modules-available/baseconfig/lang/en/config-variable-categories.json
+++ b/modules-available/baseconfig/lang/en/config-variable-categories.json
@@ -1,9 +1,8 @@
{
- "cat_1": "Inactivity and Shutdown",
- "cat_2": "Internet Access",
- "cat_3": "Time Synchronization",
- "cat_4": "Basic System",
- "cat_5": "Common network share",
- "cat_6": "Uncategorized",
- "cat_7": "vmchooser"
+ "networking": "Internet Access",
+ "other": "Uncategorized",
+ "power": "Inactivity and Shutdown",
+ "sysconfig": "Basic System",
+ "timesync": "Time Synchronization",
+ "vmchooser": "vmChooser"
} \ No newline at end of file
diff --git a/modules-available/baseconfig/lang/en/template-tags.json b/modules-available/baseconfig/lang/en/template-tags.json
index 369fa081..84eb01d7 100644
--- a/modules-available/baseconfig/lang/en/template-tags.json
+++ b/modules-available/baseconfig/lang/en/template-tags.json
@@ -4,8 +4,7 @@
"lang_catUser": "User Managment",
"lang_clientRelatedConfig": "The options on this page are related to the bwLehrpool client machines.",
"lang_confirm": "Would you like to save the settings on [ \/srv\/openslx\/www\/boot\/config ] ?",
- "lang_create": "Create",
- "lang_delete": "Delete",
+ "lang_enableOverride": "Override",
"lang_helpId": "Partition Id",
"lang_helpMountPoint": "Must be a directory: \/example\/directory\/",
"lang_helpOptions": "Currently, only option 'bootable' is available",
@@ -19,7 +18,6 @@
"lang_reset": "Reset",
"lang_resetConfirm": "Do you really wish to reset the variable to their default values?",
"lang_resetDefault": "Reset Default",
- "lang_save": "Save",
"lang_userName": "Username",
"lang_userPasswd": "Password"
} \ No newline at end of file
diff --git a/modules-available/baseconfig/lang/pt/config-variable-categories.json b/modules-available/baseconfig/lang/pt/config-variable-categories.json
index b04839e8..99819f51 100644
--- a/modules-available/baseconfig/lang/pt/config-variable-categories.json
+++ b/modules-available/baseconfig/lang/pt/config-variable-categories.json
@@ -1,7 +1,7 @@
{
- "cat_1": "Inatividade e Desligamento",
- "cat_2": "Acesso \u00e0 Internet",
- "cat_3": "Sincroniza\u00e7\u00e3o de Tempo",
- "cat_4": "Sistema B\u00e1sico",
- "cat_7": "vmchooser"
+ "networking": "Acesso \u00e0 Internet",
+ "power": "Inatividade e Desligamento",
+ "sysconfig": "Sistema B\u00e1sico",
+ "timesync": "Sincroniza\u00e7\u00e3o de Tempo",
+ "vmchooser": "vmchooser"
} \ No newline at end of file
diff --git a/modules-available/baseconfig/lang/pt/template-tags.json b/modules-available/baseconfig/lang/pt/template-tags.json
index f6037d65..79e3e911 100644
--- a/modules-available/baseconfig/lang/pt/template-tags.json
+++ b/modules-available/baseconfig/lang/pt/template-tags.json
@@ -18,7 +18,6 @@
"lang_reset": "Limpar",
"lang_resetConfirm": "Voc\u00ea realmente deseja restaurar as vari\u00e1veis para seus valores padr\u00f5es?",
"lang_resetDefault": "Restaurar Padr\u00e3o",
- "lang_save": "Salvar",
"lang_userName": "Nome",
"lang_userPasswd": "Senha"
} \ No newline at end of file
diff --git a/modules-available/baseconfig/page.inc.php b/modules-available/baseconfig/page.inc.php
index 356ee2ec..5e209f4e 100644
--- a/modules-available/baseconfig/page.inc.php
+++ b/modules-available/baseconfig/page.inc.php
@@ -4,61 +4,82 @@ class Page_BaseConfig extends Page
{
private $qry_extra = array();
+ /**
+ * @var bool|string in case we're in module mode, set to the id of the module
+ */
+ private $targetModule = false;
+
protected function doPreprocess()
{
User::load();
- // Determine if we're setting global, distro or location
- if (isset($_REQUEST['distroid'])) {
- // TODO: Everything
- $this->qry_extra[] = array(
- 'name' => 'distroid',
- 'value' => (int)$_REQUEST['distroid'],
- 'table' => 'setting_distro',
- );
- if (isset($_REQUEST['locationid'])) {
- $this->qry_extra[] = array(
- 'name' => 'locationid',
- 'value' => (int)$_REQUEST['locationid'],
- 'table' => 'setting_location',
- );
- }
- }
+ // Determine if we're setting global or module specific
+ $this->getModuleSpecific();
- if (isset($_POST['setting']) && is_array($_POST['setting'])) {
- if (User::hasPermission('superadmin')) {
- // Build variables for specific sub-settings
+ $newValues = Request::post('setting');
+ if (is_array($newValues)) {
+ if (!User::hasPermission('superadmin')) {
+ Message::addError('main.no-permission');
+ Util::redirect('?do=baseconfig');
+ }
+ // Build variables for specific sub-settings
+ if (empty($this->qry_extra['field'])) {
$qry_insert = '';
$qry_values = '';
- foreach ($this->qry_extra as $item) {
- $qry_insert = ', ' . $item['name'];
- $qry_values = ', :' . $item['name'];
+ $params = array();
+ } else {
+ $qry_insert = ', ' . $this->qry_extra['field'];
+ $qry_values = ', :field_value';
+ $params = array('field_value' => $this->qry_extra['field_value']);
+ $delExtra = " AND {$this->qry_extra['field']} = :field_value ";
+ $delParams = array('field_value' => $this->qry_extra['field_value']);
+ }
+ if ($this->targetModule === false) {
+ $override = false;
+ } else {
+ // Not editing global settings
+ if ($this->getCurrentModuleName() === false) {
+ Message::addError('main.value-invalid', $this->qry_extra['field'], $this->qry_extra['field_value']);
+ Util::redirect('?do=BaseConfig');
}
- // Load all existing config options to validate input
- $res = Database::simpleQuery('SELECT setting, validator FROM setting');
- while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
- $key = $row['setting'];
- $validator = $row['validator'];
- $displayValue = (isset($_POST['setting'][$key]) ? $_POST['setting'][$key] : '');
- // Validate data first!
- $mangledValue = Validator::validate($validator, $displayValue);
- if ($mangledValue === false) {
- Message::addWarning('main.value-invalid', $key, $displayValue);
- continue;
- }
- // Now put into DB
- Database::exec("INSERT INTO setting_global (setting, value, displayvalue $qry_insert)
- VALUES (:key, :value, :displayvalue $qry_values)
- ON DUPLICATE KEY UPDATE value = :value, displayvalue = :displayvalue",
- $this->qry_extra + array(
- 'key' => $key,
- 'value' => $mangledValue,
- 'displayvalue' => $displayValue
- )
- );
+ // Honor override checkbox
+ $override = Request::post('override', array());
+ }
+ // Load all existing config options to validate input
+ $vars = BaseConfigUtil::getVariables();
+ foreach ($vars as $key => $var) {
+ if (is_array($override) && (!isset($override[$key]) || $override[$key] !== 'on')) {
+ // module mode - override not set - delete
+ $delParams['key'] = $key;
+ Database::exec("DELETE FROM {$this->qry_extra['table']} WHERE setting = :key $delExtra", $delParams);
+ continue;
}
- Message::addSuccess('settings-updated');
+ $validator = $var['validator'];
+ $displayValue = (isset($newValues[$key]) ? $newValues[$key] : '');
+ // Validate data first!
+ $mangledValue = Validator::validate($validator, $displayValue);
+ if ($mangledValue === false) {
+ Message::addWarning('main.value-invalid', $key, $displayValue);
+ continue;
+ }
+ // Now put into DB
+ Database::exec("INSERT INTO {$this->qry_extra['table']} (setting, value, displayvalue $qry_insert)"
+ . " VALUES (:key, :value, :displayvalue $qry_values)"
+ . " ON DUPLICATE KEY UPDATE value = :value, displayvalue = :displayvalue",
+ array(
+ 'key' => $key,
+ 'value' => $mangledValue,
+ 'displayvalue' => $displayValue
+ ) + $params
+ );
+ }
+ Message::addSuccess('settings-updated');
+ if ($this->targetModule === false) {
Util::redirect('?do=BaseConfig');
+ } elseif (empty($this->qry_extra['field'])) {
+ Util::redirect('?do=BaseConfig&module=' . $this->targetModule);
+ } else {
+ Util::redirect('?do=BaseConfig&module=' . $this->targetModule . '&' . $this->qry_extra['field'] . '=' . $this->qry_extra['field_value']);
}
}
}
@@ -69,31 +90,117 @@ class Page_BaseConfig extends Page
Message::addError('main.no-permission');
Util::redirect('?do=Main');
}
- // Build left joins for specific settings
- $joins = '';
- foreach ($this->qry_extra as $item) {
- $joins .= " LEFT JOIN {$item['table']} ";
+ // Check if valid submodule mode, stire name if any
+ if ($this->targetModule !== false) {
+ $this->qry_extra['subheading'] = $this->getCurrentModuleName();
+ if ($this->qry_extra['subheading'] === false) {
+ Message::addError('main.value-invalid', $this->qry_extra['field'], $this->qry_extra['field_value']);
+ Util::redirect('?do=BaseConfig');
+ }
}
- // List global config option
+ // List config options
$settings = array();
- $res = Database::simpleQuery('SELECT cat_setting.catid, setting.setting, setting.defaultvalue, setting.permissions, setting.validator, tbl.displayvalue
- FROM setting
- INNER JOIN cat_setting USING (catid)
- LEFT JOIN setting_global AS tbl USING (setting)
- ORDER BY cat_setting.sortval ASC, setting.setting ASC');
+ $vars = BaseConfigUtil::getVariables();
+ $cats = BaseConfigUtil::getCategories();
+ // Get stuff that's set in DB already
+ if (isset($this->qry_extra['field'])) {
+ $where = " WHERE {$this->qry_extra['field']} = :field_value";
+ $params = array('field_value' => $this->qry_extra['field_value']);
+ } else {
+ $where = '';
+ $params = array();
+ }
+ // Populate structure with existing config from db
+ $res = Database::simpleQuery("SELECT setting, displayvalue FROM {$this->qry_extra['table']} "
+ . " {$where} ORDER BY setting ASC", $params);
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
+ if (!isset($vars[$row['setting']]) || !is_array($vars[$row['setting']])) {
+ $unknown[] = $row['setting'];
+ continue;
+ }
+ $row += $vars[$row['setting']];
$row['description'] = Util::markup(Dictionary::translateFile('config-variables', $row['setting']));
if (is_null($row['displayvalue'])) $row['displayvalue'] = $row['defaultvalue'];
$row['item'] = $this->makeInput($row['validator'], $row['setting'], $row['displayvalue']);
- $settings[$row['catid']]['settings'][] = $row;
- if (!isset($settings[$row['catid']]['category_id'])) {
- $settings[$row['catid']]['category_name'] = Dictionary::translateFile('config-variable-categories', 'cat_' . $row['catid']);
- $settings[$row['catid']]['category_id'] = $row['catid'];
+ if (!isset($row['catid'])) {
+ $row['catid'] = 'unknown';
}
+ $settings[$row['catid']]['settings'][$row['setting']] = $row;
}
+ // Add entries that weren't in the db (global), setup override checkbox (module specific)
+ foreach ($vars as $key => $var) {
+ if (isset($settings[$var['catid']]['settings'][$key])) {
+ // Value is set in DB
+ $settings[$var['catid']]['settings'][$key]['checked'] = 'checked';
+ continue;
+ }
+ // Value is not set in DB
+ $settings[$var['catid']]['settings'][$key] = $var + array(
+ 'setting' => $key,
+ 'item' => $this->makeInput($var['validator'], $key, $var['defaultvalue'])
+ );
+ }
+ // Sort categories
+ $sortvals = array();
+ foreach ($settings as $catid => &$setting) {
+ $sortvals[] = isset($cats[$catid]) ? (int)$cats[$catid] : 99999;
+ $setting['category_id'] = $catid;
+ $setting['category_name'] = Dictionary::translateFile('config-variable-categories', 'cat_' . $catid);
+ if ($setting['category_name'] === false) {
+ $setting['category_name'] = $catid;
+ }
+ $setting['settings'] = array_values($setting['settings']);
+ }
+ unset($setting);
+ array_multisort($sortvals, SORT_ASC, SORT_NUMERIC, $settings);
Render::addTemplate('_page', array(
- 'categories' => array_values($settings)
- ));
+ 'override' => $this->targetModule !== false,
+ 'categories' => array_values($settings),
+ 'target_module' => $this->targetModule,
+ ) + $this->qry_extra);
+ }
+
+ private function getCurrentModuleName()
+ {
+ if (isset($this->qry_extra['tostring'])) {
+ $method = explode('::', $this->qry_extra['tostring']);
+ return call_user_func($method, $this->qry_extra['field_value']);
+ }
+ if (isset($this->qry_extra['field'])) {
+ return $this->targetModule . ' // ' . $this->qry_extra['field'] . '=' . $this->qry_extra['field_value'];
+ }
+ return $this->targetModule;
+ }
+
+ private function getModuleSpecific()
+ {
+ $module = Request::any('module', '', 'string');
+ if ($module === '') {
+ $this->qry_extra = array(
+ 'table' => 'setting_global',
+ );
+ return;
+ }
+ //\\//\\//\\
+ if (!Module::isAvailable($module)) {
+ Message::addError('main.no-such-module', $module);
+ Util::redirect('?do=baseconfig');
+ }
+ $file = 'modules/' . $module . '/baseconfig/hook.json';
+ if (!file_exists($file)) {
+ Message::addError('no-module-hook', $module);
+ Util::redirect('?do=baseconfig');
+ }
+ $hook = json_decode(file_get_contents($file), true);
+ if (empty($hook['table'])) {
+ Message::addError('invalid-hook', $module);
+ Util::redirect('?do=baseconfig');
+ }
+ if (isset($hook['field'])) {
+ $hook['field_value'] = Request::any($hook['field'], '0', 'string');
+ }
+ $this->targetModule = $module;
+ $this->qry_extra = $hook;
}
/**
diff --git a/modules-available/baseconfig/templates/_page.html b/modules-available/baseconfig/templates/_page.html
index da155ad2..e8b85dd3 100644
--- a/modules-available/baseconfig/templates/_page.html
+++ b/modules-available/baseconfig/templates/_page.html
@@ -1,6 +1,12 @@
<h1>{{lang_basicConfiguration}}</h1>
+<h2>{{subheading}}</h2>
<p>{{lang_clientRelatedConfig}}</p>
<form action="?do=BaseConfig" method="post">
+ <input type="hidden" name="token" value="{{token}}">
+ {{#override}}
+ <input name="module" type="hidden" value="{{target_module}}">
+ <input name="{{field}}" type="hidden" value="{{field_value}}">
+ {{/override}}
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<input type="text" name="prevent_autofill" id="prevent_autofill" value="" style="display:none;">
<input type="password" name="password_fake" id="password_fake" value="" style="display:none;">
@@ -15,11 +21,18 @@
<div class="panel-body">
<div class="list-group">
{{#settings}}
- <div class="list-group-item {{class}}">
+ <div class="list-group-item">
<div class="row">
- <div class="col-md-5">
- {{setting}}
- <div class="slx-default">{{defaultvalue}}</div>
+ <div class="col-md-5 slx-cfg-toggle">
+ <div>{{setting}}</div>
+ {{^override}}
+ <div class="slx-default">
+ {{defaultvalue}}
+ </div>
+ {{/override}}
+ {{#override}}
+ <input name="override[{{setting}}]" id="CB_{{setting}}" type="checkbox" {{checked}}> <label for="CB_{{setting}}">{{lang_enableOverride}}</label>
+ {{/override}}
</div>
<div class="col-md-5">
{{{item}}}
@@ -47,139 +60,8 @@
</div>
</div>
{{/categories}}
-
-
-
- <!-- User Managment Section -->
- <div class="panel panel-default">
- <div class="panel-heading" role="tab" id="headingUsers">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseUsers" aria-expanded="false" aria-controls="collapseUsers">
- {{lang_catUser}}
- </a>
- <span style="display:inline-block; float: right; margin-top: -7px;">
- <a class="btn btn-default " data-toggle="modal" data-target="#add-user">
- <span class="glyphicon glyphicon-plus"></span>
- </a>
- </span>
- </div>
- <div id="collapseUsers" class="accordion-body collapse" role="tabpanel" aria-labelledby="headingUsers">
- <div class="panel-body">
- <div class="list-group">
- {{#users}}
- <div class="list-group-item">
- <div class="row">
- <div class="col-md-5">
- <input name="user-{{id}}-name" type="text" class="form-control" size="30" value="{{name}}" />
- </div>
- <div class="col-md-5">
- <input name="user-{{id}}-password" type="text" class="form-control" size="30" placeholder="{{lang_userPasswd}}" />
- </div>
- <div class="col-md-2">
- <a class="btn btn-danger" href="?do=BaseConfig&deleteUser={{id}}&token={{token}}" ><span class="glyphicon glyphicon-trash"></span> {{lang_delete}}</a>
- </div>
- </div>
- </div>
- {{/users}}
- </div>
- </div>
- </div>
- </div>
</div>
- <input type="hidden" name="token" value="{{token}}">
- <button class="btn btn-lg btn-primary" type="submit">{{lang_save}}</button>
- <button class="btn btn-lg btn-primary" type="reset">{{lang_reset}}</button>
- <a class="btn btn-lg btn-primary" href="api.php?do=getconfig">Download</a>
+ <button class="btn btn-primary" type="submit">{{lang_save}}</button>
+ <button class="btn btn-default" type="reset">{{lang_reset}}</button>
+ <a class="btn btn-default" href="api.php?do=getconfig">Download</a>
</form>
-<p>
- <form method="post" action="?do=BaseConfig">
- <input type="hidden" name="token" value="{{token}}">
- <input type="hidden" name="action" value="reset">
- <button class="btn btn-default" type="submit" onclick="return confirm('{{lang_resetConfirm}}');">{{lang_resetDefault}}</button>
- </form>
-</p>
-<!-- Create User Window -->
-<form action="?do=BaseConfig" method="post">
- <div class="modal fade" id="add-user" tabindex="-1" role="dialog">
- <div class="modal-dialog">
-
- <div class="modal-content">
- <div class="modal-header">{{lang_newUser}}</div>
- <div class="modal-body">
-
- <p>
- <input name="new-user-name" placeholder="{{lang_userName}}" class="form-control" type="text">
- </p>
- <p>
- <input name="new-user-passwd" placeholder="{{lang_userPasswd}}" class="form-control" type="password">
- </p>
- <input type="submit" class="btn btn-primary" value="{{lang_create}}">
- </div>
- <div class="modal-footer"><a class="btn btn-primary" data-dismiss="modal">{{lang_close}}</a></div>
- </div>
- </div>
- </div>
- <input type="hidden" name="action" value="new_user">
- <input type="hidden" name="token" value="{{token}}">
-</form>
-<!-- Create Partition Window -->
-<form action="?do=BaseConfig" method="post">
- <div class="modal fade" id="add-partition" tabindex="-1" role="dialog">
- <div class="modal-dialog">
-
- <div class="modal-content">
- <div class="modal-header">{{lang_newPartition}}</div>
- <div class="modal-body">
-
- <div class="input-group">
- <span class="input-group-addon">{{lang_partitionId}}</span>
- <input name="new-partition-id" class="form-control" type="text">
- </div>
- <p class="help-block">{{lang_helpId}}</p>
- <div class="input-group">
- <span class="input-group-addon">{{lang_partitionSize}}</span>
- <input name="new-partition-size" class="form-control" type="text">
- </div>
- <p class="help-block">{{lang_helpSize}}</p>
- <div class="input-group">
- <span class="input-group-addon">{{lang_partitionMountPoint}}</span>
- <input name="new-partition-mount-point" class="form-control" type="text">
- </div>
- <p class="help-block">{{lang_helpMountPoint}}</p>
- <div class="input-group">
- <span class="input-group-addon">{{lang_partitionOptions}}</span>
- <input name="new-partition-options" class="form-control" type="text">
- </div>
- <p class="help-block">{{lang_helpOptions}}</p>
- <input type="submit" class="btn btn-primary" value="{{lang_create}}">
- </div>
- <div class="modal-footer"><a class="btn btn-primary" data-dismiss="modal">{{lang_close}}</a></div>
- </div>
- </div>
- </div>
- <input type="hidden" name="action" value="new_partition">
- <input type="hidden" name="token" value="{{token}}">
-</form>
-<script type="text/javascript">
-
-function saveConfig(){
- if(confirm('{{lang_confirm}}'))
- window.location = 'api.php?do=getconfig&user={{user}}&save=true';
- else
- window.location = 'api.php?do=getconfig&user={{user}}';
-}
-
-document.addEventListener("DOMContentLoaded", function() {
- document.getElementById("cat-extra-6").innerHTML = "<div class='list-group'> <div class='list-group-item' style='background-color:#f5f5f5;color:#428bca;'> " +
- "{{lang_catPartition}} <span style='display:inline-block; float: right; margin-top: -7px;'> <a class='btn btn-default ' data-toggle='modal' " +
- "data-target='#add-partition'> <span class='glyphicon glyphicon-plus'></span> </a> </span> </div> {{#partitions}} <div class='list-group-item'> " +
- "<div class='row'> <div class='col-md-1'> <input name='partition-{{id}}-partition_id' type='text' class='form-control' size='30' value='{{partition_id}}'" +
- " placeholder='{{lang_partitionId}}' /> </div> <div class='col-md-1'> <input name='partition-{{id}}-size' type='text' class='form-control' size='30' " +
- "value='{{size}}' placeholder='{{lang_partitionSize}}'/> </div> <div class='col-md-4'> <input name='partition-{{id}}-mount_point' type='text' " +
- "class='form-control' size='30' value='{{mount_point}}' placeholder='{{lang_partitionMountPoint}}'/> </div> <div class='col-md-4'> <input " +
- "name='partition-{{id}}-options' type='text' class='form-control' size='30' value='{{options}}' placeholder='{{lang_partitionOptions}}'/> </div> " +
- "<div class='col-md-2'> <a class='btn btn-danger' href='?do=BaseConfig&deletePartition={{id}}&token={{token}}' ><span class='glyphicon glyphicon-trash'>" +
- "</span> {{lang_delete}}</a> </div> </div> </div> {{/partitions}} </div> </div>";
- $("[name^='switch']").bootstrapSwitch();
-}
-
-</script>