summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2016-04-28 21:31:15 +0200
committerSimon Rettberg2016-04-28 21:31:15 +0200
commit95db8e184b378534db0ac08d14ae8500ee5090c3 (patch)
treef39cee8160ef4266e49dbe04d3e8fe6400ce2133
parentMerge branch 'master' into modularization (diff)
downloadslx-admin-95db8e184b378534db0ac08d14ae8500ee5090c3.tar.gz
slx-admin-95db8e184b378534db0ac08d14ae8500ee5090c3.tar.xz
slx-admin-95db8e184b378534db0ac08d14ae8500ee5090c3.zip
Implemented new menu, added logic for defining dependencies, move translation files around
-rw-r--r--inc/dashboard.inc.php71
-rw-r--r--inc/dictionary.inc.php67
-rw-r--r--inc/message.inc.php4
-rw-r--r--inc/module.inc.php173
-rw-r--r--inc/render.inc.php56
-rw-r--r--index.php51
-rw-r--r--lang/en/modules/main/pagenav.json2
-rw-r--r--modules/adduser/config.json1
-rw-r--r--modules/adduser/page.inc.php (renamed from modules/adduser/module.inc.php)0
-rw-r--r--modules/backup/config.json2
-rw-r--r--modules/backup/page.inc.php (renamed from modules/backup/module.inc.php)0
-rw-r--r--modules/baseconfig/config.json4
-rw-r--r--modules/baseconfig/lang/en/module.json3
-rw-r--r--modules/baseconfig/page.inc.php (renamed from modules/baseconfig/module.inc.php)0
-rw-r--r--modules/baseconfig/templates/_page.html24
-rw-r--r--modules/citymanagement/config.json1
-rw-r--r--modules/citymanagement/page.inc.php (renamed from modules/citymanagement/module.inc.php)0
-rw-r--r--modules/dozmod/config.json2
-rw-r--r--modules/dozmod/page.inc.php (renamed from modules/dozmod/module.inc.php)0
-rw-r--r--modules/eventlog/config.json2
-rw-r--r--modules/eventlog/page.inc.php (renamed from modules/eventlog/module.inc.php)0
-rw-r--r--modules/imgmanagement/config.json1
-rw-r--r--modules/imgmanagement/page.inc.php (renamed from modules/imgmanagement/module.inc.php)0
-rw-r--r--modules/internetaccess/config.json2
-rw-r--r--modules/internetaccess/page.inc.php (renamed from modules/internetaccess/module.inc.php)0
-rw-r--r--modules/locations/config.json2
-rw-r--r--modules/locations/page.inc.php (renamed from modules/locations/module.inc.php)0
-rw-r--r--modules/main/category-icons.json (renamed from style/categories.json)0
-rw-r--r--modules/main/config.json1
-rw-r--r--modules/main/lang/en/categories.json6
-rw-r--r--modules/main/lang/en/templates/dialog-generic.json (renamed from lang/en/modules/main/dialog-generic.json)0
-rw-r--r--modules/main/lang/en/templates/main-menu.json (renamed from lang/en/modules/main/main-menu.json)6
-rw-r--r--modules/main/lang/en/templates/messagebox-warning.json (renamed from lang/en/modules/main/messagebox-warning.json)0
-rw-r--r--modules/main/lang/en/templates/page-main-guest.json (renamed from lang/en/modules/main/page-main-guest.json)0
-rw-r--r--modules/main/lang/en/templates/page-main.json (renamed from lang/en/modules/main/page-main.json)0
-rw-r--r--modules/main/page.inc.php (renamed from modules/main/module.inc.php)0
-rw-r--r--modules/main/templates/main-menu.html63
-rw-r--r--modules/main/templates/main-menu.html.topnavbar92
-rw-r--r--modules/minilinux/config.json2
-rw-r--r--modules/minilinux/page.inc.php (renamed from modules/minilinux/module.inc.php)0
-rw-r--r--modules/news/config.json2
-rw-r--r--modules/news/page.inc.php (renamed from modules/news/module.inc.php)0
-rw-r--r--modules/serversetup/config.json2
-rw-r--r--modules/serversetup/page.inc.php (renamed from modules/serversetup/module.inc.php)0
-rw-r--r--modules/session/config.json1
-rw-r--r--modules/session/page.inc.php (renamed from modules/session/module.inc.php)0
-rw-r--r--modules/statistics/config.json2
-rw-r--r--modules/statistics/page.inc.php (renamed from modules/statistics/module.inc.php)0
-rw-r--r--modules/support/config.json2
-rw-r--r--modules/support/page.inc.php (renamed from modules/support/module.inc.php)0
-rw-r--r--modules/sysconfig/config.json2
-rw-r--r--modules/sysconfig/page.inc.php (renamed from modules/sysconfig/module.inc.php)0
-rw-r--r--modules/sysconfignew/config.json1
-rw-r--r--modules/sysconfignew/page.inc.php (renamed from modules/sysconfignew/module.inc.php)0
-rw-r--r--modules/syslog/config.json2
-rw-r--r--modules/syslog/page.inc.php (renamed from modules/syslog/module.inc.php)0
-rw-r--r--modules/systemstatus/config.json2
-rw-r--r--modules/systemstatus/page.inc.php (renamed from modules/systemstatus/module.inc.php)0
-rw-r--r--modules/translation/config.json2
-rw-r--r--modules/translation/page.inc.php (renamed from modules/translation/module.inc.php)0
-rw-r--r--modules/usermanagement/config.json2
-rw-r--r--modules/usermanagement/page.inc.php (renamed from modules/usermanagement/module.inc.php)0
-rw-r--r--modules/vmstore/config.json2
-rw-r--r--modules/vmstore/page.inc.php (renamed from modules/vmstore/module.inc.php)0
-rw-r--r--modules/webinterface/config.json2
-rw-r--r--modules/webinterface/page.inc.php (renamed from modules/webinterface/module.inc.php)0
-rw-r--r--style/default.css299
67 files changed, 587 insertions, 374 deletions
diff --git a/inc/dashboard.inc.php b/inc/dashboard.inc.php
new file mode 100644
index 00000000..ef8be110
--- /dev/null
+++ b/inc/dashboard.inc.php
@@ -0,0 +1,71 @@
+<?php
+
+class Dashboard
+{
+
+ private static $iconCache = array();
+
+ public static function createMenu()
+ {
+ $modulesAssoc = array();
+ $all = Module::getEnabled();
+ foreach ($all as $module) {
+ $cat = $module->getCategory();
+ if ($cat === false)
+ continue;
+ $modulesAssoc[$cat][] = $module;
+ }
+ $modulesArray = array();
+ foreach ($modulesAssoc as $id => $list) {
+ $momomo = array();
+ foreach ($list as $module) {
+ $momomo[] = array(
+ 'displayName' => $module->getDisplayName(),
+ 'identifier' => $module->getIdentifier(),
+ 'className' => ($module->getIdentifier() === Page::getModule()->getIdentifier()) ? 'active' : ''
+ );
+ }
+ $modulesArray[] = array(
+ 'icon' => self::getCategoryIcon($id),
+ 'displayName' => Dictionary::getCategoryName($id),
+ 'modules' => $momomo
+ );
+ }
+ Render::setDashboard(array(
+ 'categories' => $modulesArray,
+ 'url' => urlencode($_SERVER['REQUEST_URI']),
+ 'langs' => Dictionary::getLanguages(true),
+ 'dbupdate' => Database::needSchemaUpdate(),
+ 'user' => User::getName(),
+ 'warning' => User::getName() !== false && User::getLastSeenEvent() < Property::getLastWarningId(),
+ 'needsSetup' => User::getName() !== false && Property::getNeedsSetup()
+ ));
+ }
+
+ public static function getCategoryIcon($category)
+ {
+ if ($category === false) {
+ return '';
+ }
+ if (!preg_match('/^(\w+)\.(\w+)$/', $category, $out)) {
+ error_log('Requested category icon for invalid category "' . $category . '"');
+ return '';
+ }
+ $module = $out[1];
+ $icon = $out[2];
+ if (!isset(self::$iconCache[$module])) {
+ $path = 'modules/' . $module . '/category-icons.json';
+ $data = json_decode(file_get_contents($path), true);
+ if (!is_array($data)) {
+ return '';
+ }
+ self::$iconCache[$module] =& $data;
+ }
+ if (!isset(self::$iconCache[$module][$icon])) {
+ error_log('Icon "' . $icon . '" not found in module "' . $module . '"');
+ return '';
+ }
+ return 'glyphicon glyphicon-' . self::$iconCache[$module][$icon];
+ }
+
+} \ No newline at end of file
diff --git a/inc/dictionary.inc.php b/inc/dictionary.inc.php
index ec4f4195..b56106cc 100644
--- a/inc/dictionary.inc.php
+++ b/inc/dictionary.inc.php
@@ -3,11 +3,9 @@
class Dictionary
{
- private static $messageArray = false;
private static $languages = false;
private static $languagesLong = false;
private static $stringCache = array();
- private static $hardcodedMessages = false;
public static function init()
{
@@ -51,57 +49,64 @@ class Dictionary
define('LANG', $language);
}
- public static function getArrayTemplate($template, $module = false, $lang = false)
+ public static function getArrayTemplate($template, $module, $lang = false)
{
- return self::getArray($module . "/" . $template, $lang);
+ return self::getArray($module, 'templates/' . $template, $lang);
}
- public static function getArray($module, $lang = false, $isMessage = false)
+ public static function getArray($module, $path, $lang = false)
{
if ($lang === false)
$lang = LANG;
- if(!$isMessage)
- $file = Util::safePath("lang/" . $lang . "/modules/" . $module . ".json");
- else
- $file = Util::safePath("lang/" . $lang . "/" . $module . ".json");
-
+ $file = Util::safePath("modules/{$module}/lang/{$lang}/{$path}.json");
if (isset(self::$stringCache[$file]))
return self::$stringCache[$file];
$content = @file_get_contents($file);
- if ($content === false) {// File does not exist for language {
- return array();
+ if ($content === false) { // File does not exist for language
+ $content = '[]';
+ error_log("getArray called for non-existent $file");
}
$json = json_decode($content, true);
- if (!is_array($json))
- return array();
+ if (!is_array($json)) {
+ $json = array();
+ }
return self::$stringCache[$file] = $json;
}
- public static function translate($section, $string = false)
+ public static function translate($module, $path, $string)
{
- if ($string === false) {
- // Fallback: General "hardcoded" messages
- $string = $section;
- if (self::$hardcodedMessages === false)
- self::$hardcodedMessages = json_decode(file_get_contents("lang/" . LANG . "/messages-hardcoded.json"), true);
- if (!isset(self::$hardcodedMessages[$string]))
- return "(missing: $string :missing)";
- return self::$hardcodedMessages[$string];
- }
- $strings = self::getArray($section, false, true);
+ $strings = self::getArray($module, $path);
if (!isset($strings[$string])) {
- return "(missing: '$string' in '$section')";
+ return false;
}
return $strings[$string];
}
public static function getMessage($id)
{
- if (self::$messageArray === false)
- self::$messageArray = json_decode(file_get_contents("lang/" . LANG . "/messages.json"), true);
- if (!isset(self::$messageArray[$id]))
- return "(missing: $id :missing)";
- return self::$messageArray[$id];
+ if (!preg_match('/^(\w+)\.(\w+)$/', id, $out)) {
+ return 'Invalid Message ID format: ' . $id;
+ }
+ $string = self::translate($out[1], 'messages', $out[2]);
+ if ($string === false) {
+ return $id;
+ }
+ return $string;
+ }
+
+ public static function getCategoryName($category)
+ {
+ if ($category === false) {
+ return 'No Category';
+ }
+ if (!preg_match('/^(\w+)\.(\w+)$/', $category, $out)) {
+ return 'Invalid Category ID format: ' . $category;
+ }
+ $string = self::translate($out[1], 'categories', $out[2]);
+ if ($string === false) {
+ return $category;
+ }
+ return $string;
}
/**
diff --git a/inc/message.inc.php b/inc/message.inc.php
index d2fd74b9..96fb94c5 100644
--- a/inc/message.inc.php
+++ b/inc/message.inc.php
@@ -52,6 +52,8 @@ class Message
*/
public static function renderList()
{
+ if (empty(self::$list))
+ return;
// Ajax
if (AJAX) {
foreach (self::$list as $item) {
@@ -65,7 +67,6 @@ class Message
return;
}
// Non-Ajax
- if (!self::$flushed) Render::openTag('div', array('class' => 'container'));
foreach (self::$list as $item) {
$message = Dictionary::getMessage($item['id']);
foreach ($item['params'] as $index => $text) {
@@ -74,7 +75,6 @@ class Message
Render::addTemplate('messagebox-' . $item['type'], array('message' => $message),'main');
self::$alreadyDisplayed[] = $item;
}
- if (!self::$flushed) Render::closeTag('div');
self::$list = array();
self::$flushed = true;
}
diff --git a/inc/module.inc.php b/inc/module.inc.php
new file mode 100644
index 00000000..9126cb32
--- /dev/null
+++ b/inc/module.inc.php
@@ -0,0 +1,173 @@
+<?php
+
+class Module
+{
+ /*
+ * Static
+ */
+
+ /**
+ * @var \Module[]
+ */
+ private static $modules = false;
+
+ public static function get($name)
+ {
+ if (!isset(self::$modules[$name]))
+ return false;
+ if (!self::resolveDeps(self::$modules[$name]))
+ return false;
+ return self::$modules[$name];
+ }
+
+ private static function resolveDepsByName($name)
+ {
+ if (!isset(self::$modules[$name]))
+ return false;
+ return self::resolveDeps(self::$modules[$name]);
+ }
+
+ private static function resolveDeps($mod)
+ {
+ if (!$mod->depsChecked) {
+ $mod->depsChecked = true;
+ foreach ($mod->dependencies as $dep) {
+ if (!self::resolveDepsByName($dep)) {
+ if ($mod->enabled) {
+ error_log("Disabling module $name: Dependency $dep failed.");
+ }
+ $mod->enabled = false;
+ $mod->depsMissing = true;
+ return false;
+ }
+ }
+ }
+ return $mod->enabled;
+ }
+
+ /**
+ * @return \Module[] List of enabled modules
+ */
+ public static function getEnabled()
+ {
+ $ret = array();
+ foreach (self::$modules as $module) {
+ if (self::resolveDeps($module))
+ $ret[] = $module;
+ }
+ return $ret;
+ }
+
+ public static function init()
+ {
+ if (self::$modules !== false)
+ return;
+ $dh = opendir('modules');
+ if ($dh === false)
+ return;
+ self::$modules = array();
+ while (($dir = readdir($dh)) !== false) {
+ if (empty($dir) || preg_match('/[^a-zA-Z0-9]/', $dir))
+ continue;
+ if (!is_file('modules/' . $dir . '/config.json'))
+ continue;
+ $name = strtolower($dir);
+ self::$modules[$name] = new Module($dir);
+ }
+ closedir($dh);
+ }
+
+ /*
+ * Non-static
+ */
+
+ private $enabled = false;
+ private $category = false;
+ private $depsMissing = false;
+ private $depsChecked = false;
+ private $activated = false;
+ private $dependencies = array();
+ private $name;
+
+ private function __construct($name)
+ {
+ $file = 'modules/' . $name . '/config.json';
+ $json = @json_decode(@file_get_contents($file), true);
+ $this->enabled = isset($json['enabled']) && ($json['enabled'] === true || $json['enabled'] === 'true');
+ if (isset($json['dependencies']) && is_array($json['dependencies'])) {
+ $this->dependencies = $json['dependencies'];
+ }
+ if (isset($json['category']) && is_string($json['category'])) {
+ $this->category = $json['category'];
+ }
+ $this->name = $name;
+ }
+
+ public function newPage()
+ {
+ $modulePath = 'modules/' . $this->name . '/page.inc.php';
+ if (!file_exists($modulePath)) {
+ Util::traceError("Module doesn't have a page: " . $modulePath);
+ }
+ require_once $modulePath;
+ $class = 'Page_' . $this->name;
+ return new $class();
+ }
+
+ public function activate()
+ {
+ if ($this->activated || !$this->enabled)
+ return;
+ $this->activated = true;
+ spl_autoload_register(function($class) {
+ $file = 'modules/' . $this->name . '/inc/' . preg_replace('/[^a-z0-9]/', '', strtolower($class)) . '.inc.php';
+ if (!file_exists($file))
+ return;
+ require_once $file;
+ });
+ foreach ($this->dependencies as $dep) {
+ $get = self::get($dep);
+ if ($get !== false) {
+ $get->activate();
+ }
+ }
+ }
+
+ public function getIdentifier()
+ {
+ return $this->name;
+ }
+
+ public function getDisplayName()
+ {
+ $string = Dictionary::translate($this->name, 'module', 'module_name');
+ if ($string === false) {
+ return $this->name;
+ }
+ return $string;
+ }
+
+ public function getCategory()
+ {
+ return $this->category;
+ }
+
+ public function getCategoryName()
+ {
+ return Dictionary::getCategoryName($this->category);
+ }
+
+ public function translate($tag, $section = 'module')
+ {
+ $string = Dictionary::translate($this->name, $section, $tag);
+ if ($string === false) {
+ $string = Dictionary::translate('core', $section, $tag);
+ }
+ if ($string === false) {
+ error_log('Translation not found. Module: ' . $this->name . ', section: ' . $section . ', tag: ' . $tag);
+ $string = '!!' . $tag . '!!';
+ }
+ return $string;
+ }
+
+}
diff --git a/inc/render.inc.php b/inc/render.inc.php
index 10d18514..14d5a810 100644
--- a/inc/render.inc.php
+++ b/inc/render.inc.php
@@ -41,22 +41,19 @@ class Render
if ($zip)
ob_start();
$page = strtolower($_GET['do']);
- if(User::isLoggedIn())
- self::createDashboard($page);
echo
'<!DOCTYPE html>
<html>
<head>
<title>', RENDER_DEFAULT_TITLE, self::$title, '</title>
<meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Bootstrap -->
<link href="style/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="style/bootstrap-tagsinput.css" rel="stylesheet" media="screen">
<link href="style/default.css" rel="stylesheet" media="screen">
- <link href="style/bootstrap-switch.css" rel="stylesheet" media="screen">
- <script src="script/bootstrap-switch.js"></script>
<script type="text/javascript">
var TOKEN = "' . Session::get('token') . '";
</script>
@@ -65,15 +62,13 @@ class Render
,
' </head>
<body>
- <div class="container-fluid" id="mainpage">
- <div class="row">
',
- self::$dashboard
- ,
+ self::$dashboard,
+ '<div class="main" id="mainpage"><div class="container-fluid">
+ ',
self::$body
,
- ' </div>
- </div>
+ '</div></div>
<script src="script/jquery.js"></script>
<script src="script/bootstrap.min.js"></script>
<script src="script/taskmanager.js"></script>
@@ -259,46 +254,9 @@ class Render
/**
* Create the dashboard menu
*/
- private static function createDashboard($page)
+ public static function setDashboard($params)
{
- // Check all required modules
- $requiredModules = array('adduser','main','session','translation','usermanagement');
- $notFound = '';
- foreach ($requiredModules as $module) {
- if(!is_dir('modules/' . $module . '/')){
- $notFound .= '\'' . $module . '\' ';
- }
- }
- if(strlen($notFound) > 0){
- Util::traceError('At least one required module was not found: ' . $notFound);
- }else{
- $modules = array_diff(scandir('modules/'), array('..', '.'));
- $categories = array();
- foreach ($modules as $module) {
- $json = json_decode(file_get_contents("modules/" . $module . "/config.json"),true);
- $categories[$json['category']][] = $module;
- }
- unset($categories['hidden']);
- self::$dashboard = '<div class="col-sm-3 col-md-2 sidebar">';
- foreach ($categories as $cat => $modules) {
- self::$dashboard .= '<div class="dash-header"></span> <span class="glyphicon glyphicon-' . self::getGlyphicon($cat)
- . '" aria-hidden="true"></span> ' . Dictionary::translate('lang_' . $cat) . '</div>';
- self::$dashboard .= '<ul class="nav nav-sidebar">';
- foreach ($modules as $module) {
- self::$dashboard .= '<li class="' . (($page == $module) ? 'active' : '')
- . '"><a href="?do=' . ucfirst($module) . '"> ' . (Dictionary::translate('lang_' . $module)) . '</a></li>';
- }
- self::$dashboard .= '</ul>';
- }
- self::$dashboard .= '</div> <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">';
- }
- }
-
- /**
- * get categories glyph icons
- */
- private static function getGlyphicon($category){
- return json_decode(file_get_contents("style/categories.json"),true)[$category];
+ self::$dashboard = self::parse('main-menu', $params, 'main');
}
}
diff --git a/index.php b/index.php
index 84450da5..06be1b05 100644
--- a/index.php
+++ b/index.php
@@ -13,7 +13,7 @@ if (CONFIG_SQL_PASS === '%MYSQL_OPENSLX_PASS%') {
require_once('inc/user.inc.php');
/**
- * Page class which all "modules" must be extending from
+ * Page class which all module's pages must be extending from
*/
abstract class Page
{
@@ -47,29 +47,39 @@ abstract class Page
{
self::$instance->doAjax();
}
+
+ public static function translate($tag, $section = 'module')
+ {
+ return self::$module->translate($tag, $section);
+ }
+
+ public static function getModule()
+ {
+ return self::$module;
+ }
/**
- *
* @var \Page
*/
private static $instance = false;
- public static $name = false;
+
+ /**
+ * @var \Module
+ */
+ private static $module = false;
- public static function set($name)
+ public static function init()
{
+ $name = empty($_REQUEST['do']) ? 'Main' : $_REQUEST['do'];
$name = preg_replace('/[^A-Za-z]/', '', $name);
- $modulePath = 'modules/' . strtolower($name) . '/module.inc.php';
- $moduleConfig = json_decode(file_get_contents('modules/' . strtolower($name) . '/config.json'),true);
- if (!file_exists($modulePath) || empty($moduleConfig) || $moduleConfig['enabled'] != 'true') {
- Util::traceError('Invalid module file: ' . $modulePath);
- }
- require_once $modulePath;
- $className = 'Page_' . $name;
- if (!class_exists($className) || get_parent_class($className) !== 'Page') {
- Util::traceError('Module not found: ' . $name);
+ $name = strtolower($name);
+ Module::init();
+ self::$module = Module::get($name);
+ if (self::$module === false) {
+ Util::traceError('Invalid Module: ' . $name);
}
- self::$instance = new $className();
- self::$name = strtolower($name);
+ self::$module->activate();
+ self::$instance = self::$module->newPage();
}
}
@@ -97,7 +107,7 @@ function slxAutoloader($class)
spl_autoload_register('slxAutoloader');
// Now determine which module to run
-Page::set(empty($_REQUEST['do']) ? 'Main' : $_REQUEST['do']);
+Page::init();
// Deserialize any messages to display
if (!AJAX && isset($_REQUEST['message'])) {
@@ -126,14 +136,7 @@ if (AJAX) {
Page::preprocess();
// Generate Main menu
-Render::addTemplate('main-menu', array(
- 'url' => urlencode($_SERVER['REQUEST_URI']),
- 'langs' => Dictionary::getLanguages(true),
- 'dbupdate' => Database::needSchemaUpdate(),
- 'user' => User::getName(),
- 'warning' => User::getName() !== false && User::getLastSeenEvent() < Property::getLastWarningId(),
- 'needsSetup' => User::getName() !== false && Property::getNeedsSetup()
-),'main');
+Dashboard::createMenu();
Message::renderList();
diff --git a/lang/en/modules/main/pagenav.json b/lang/en/modules/main/pagenav.json
deleted file mode 100644
index 2c63c085..00000000
--- a/lang/en/modules/main/pagenav.json
+++ /dev/null
@@ -1,2 +0,0 @@
-{
-}
diff --git a/modules/adduser/config.json b/modules/adduser/config.json
index d5da4cc8..4da67ef8 100644
--- a/modules/adduser/config.json
+++ b/modules/adduser/config.json
@@ -1,4 +1,3 @@
{
- "category":"hidden",
"enabled":"true"
}
diff --git a/modules/adduser/module.inc.php b/modules/adduser/page.inc.php
index c236cb6f..c236cb6f 100644
--- a/modules/adduser/module.inc.php
+++ b/modules/adduser/page.inc.php
diff --git a/modules/backup/config.json b/modules/backup/config.json
index 4e7fa5fb..6c189b63 100644
--- a/modules/backup/config.json
+++ b/modules/backup/config.json
@@ -1,4 +1,4 @@
{
- "category":"content",
+ "category":"main.content",
"enabled":"true"
}
diff --git a/modules/backup/module.inc.php b/modules/backup/page.inc.php
index 4095f875..4095f875 100644
--- a/modules/backup/module.inc.php
+++ b/modules/backup/page.inc.php
diff --git a/modules/baseconfig/config.json b/modules/baseconfig/config.json
index 93209f62..b72e9c23 100644
--- a/modules/baseconfig/config.json
+++ b/modules/baseconfig/config.json
@@ -1,4 +1,4 @@
{
- "category":"settings",
- "enabled":"true"
+ "category": "main.settings",
+ "enabled": true
}
diff --git a/modules/baseconfig/lang/en/module.json b/modules/baseconfig/lang/en/module.json
new file mode 100644
index 00000000..7b1bb316
--- /dev/null
+++ b/modules/baseconfig/lang/en/module.json
@@ -0,0 +1,3 @@
+{
+ "module_name": "Config Variables"
+}
diff --git a/modules/baseconfig/module.inc.php b/modules/baseconfig/page.inc.php
index 3d187d30..3d187d30 100644
--- a/modules/baseconfig/module.inc.php
+++ b/modules/baseconfig/page.inc.php
diff --git a/modules/baseconfig/templates/_page.html b/modules/baseconfig/templates/_page.html
index c72f0a5e..273ee50c 100644
--- a/modules/baseconfig/templates/_page.html
+++ b/modules/baseconfig/templates/_page.html
@@ -163,16 +163,6 @@
<input type="hidden" name="token" value="{{token}}">
</form>
<script type="text/javascript">
-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>";
function saveConfig(){
if(confirm('{{lang_confirm}}'))
@@ -181,6 +171,18 @@ function saveConfig(){
window.location = 'api.php?do=getconfig&user={{user}}';
}
-$("[name^='switch']").bootstrapSwitch();
+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>
diff --git a/modules/citymanagement/config.json b/modules/citymanagement/config.json
index 3cd4afd3..aff54b3a 100644
--- a/modules/citymanagement/config.json
+++ b/modules/citymanagement/config.json
@@ -1,5 +1,4 @@
{
- "category":"hidden",
"enabled":"false",
"permission":"0"
}
diff --git a/modules/citymanagement/module.inc.php b/modules/citymanagement/page.inc.php
index acc30bf9..acc30bf9 100644
--- a/modules/citymanagement/module.inc.php
+++ b/modules/citymanagement/page.inc.php
diff --git a/modules/dozmod/config.json b/modules/dozmod/config.json
index 4e7fa5fb..6c189b63 100644
--- a/modules/dozmod/config.json
+++ b/modules/dozmod/config.json
@@ -1,4 +1,4 @@
{
- "category":"content",
+ "category":"main.content",
"enabled":"true"
}
diff --git a/modules/dozmod/module.inc.php b/modules/dozmod/page.inc.php
index f98d8952..f98d8952 100644
--- a/modules/dozmod/module.inc.php
+++ b/modules/dozmod/page.inc.php
diff --git a/modules/eventlog/config.json b/modules/eventlog/config.json
index d42dc3e3..650ab2fe 100644
--- a/modules/eventlog/config.json
+++ b/modules/eventlog/config.json
@@ -1,4 +1,4 @@
{
- "category":"status",
+ "category":"main.status",
"enabled":"true"
}
diff --git a/modules/eventlog/module.inc.php b/modules/eventlog/page.inc.php
index 7cfc8a55..7cfc8a55 100644
--- a/modules/eventlog/module.inc.php
+++ b/modules/eventlog/page.inc.php
diff --git a/modules/imgmanagement/config.json b/modules/imgmanagement/config.json
index 49daa91a..5c5c05ca 100644
--- a/modules/imgmanagement/config.json
+++ b/modules/imgmanagement/config.json
@@ -1,5 +1,4 @@
{
- "category":"hidden",
"enabled":"false",
"permission":"1"
}
diff --git a/modules/imgmanagement/module.inc.php b/modules/imgmanagement/page.inc.php
index 27844e23..27844e23 100644
--- a/modules/imgmanagement/module.inc.php
+++ b/modules/imgmanagement/page.inc.php
diff --git a/modules/internetaccess/config.json b/modules/internetaccess/config.json
index 4e7fa5fb..6c189b63 100644
--- a/modules/internetaccess/config.json
+++ b/modules/internetaccess/config.json
@@ -1,4 +1,4 @@
{
- "category":"content",
+ "category":"main.content",
"enabled":"true"
}
diff --git a/modules/internetaccess/module.inc.php b/modules/internetaccess/page.inc.php
index b949be26..b949be26 100644
--- a/modules/internetaccess/module.inc.php
+++ b/modules/internetaccess/page.inc.php
diff --git a/modules/locations/config.json b/modules/locations/config.json
index 4e7fa5fb..6c189b63 100644
--- a/modules/locations/config.json
+++ b/modules/locations/config.json
@@ -1,4 +1,4 @@
{
- "category":"content",
+ "category":"main.content",
"enabled":"true"
}
diff --git a/modules/locations/module.inc.php b/modules/locations/page.inc.php
index 60af719b..60af719b 100644
--- a/modules/locations/module.inc.php
+++ b/modules/locations/page.inc.php
diff --git a/style/categories.json b/modules/main/category-icons.json
index 97b76eac..97b76eac 100644
--- a/style/categories.json
+++ b/modules/main/category-icons.json
diff --git a/modules/main/config.json b/modules/main/config.json
index d5da4cc8..4da67ef8 100644
--- a/modules/main/config.json
+++ b/modules/main/config.json
@@ -1,4 +1,3 @@
{
- "category":"hidden",
"enabled":"true"
}
diff --git a/modules/main/lang/en/categories.json b/modules/main/lang/en/categories.json
new file mode 100644
index 00000000..3d67bcfd
--- /dev/null
+++ b/modules/main/lang/en/categories.json
@@ -0,0 +1,6 @@
+{
+ "settings": "Settings",
+ "status": "Status",
+ "content": "Content",
+ "users": "Users"
+}
diff --git a/lang/en/modules/main/dialog-generic.json b/modules/main/lang/en/templates/dialog-generic.json
index c7551ed3..c7551ed3 100644
--- a/lang/en/modules/main/dialog-generic.json
+++ b/modules/main/lang/en/templates/dialog-generic.json
diff --git a/lang/en/modules/main/main-menu.json b/modules/main/lang/en/templates/main-menu.json
index d22f90d7..635c7aa8 100644
--- a/lang/en/modules/main/main-menu.json
+++ b/modules/main/lang/en/templates/main-menu.json
@@ -22,5 +22,7 @@
"lang_translations": "Translations",
"lang_vmLocation": "VM Location",
"lang_warning": "Warning",
- "lang_webInterface": "Web interface"
-} \ No newline at end of file
+ "lang_webInterface": "Web interface",
+ "lang_loggedInPrefix": "Logged in as",
+ "lang_loggedInSuffix": " "
+}
diff --git a/lang/en/modules/main/messagebox-warning.json b/modules/main/lang/en/templates/messagebox-warning.json
index 2c63c085..2c63c085 100644
--- a/lang/en/modules/main/messagebox-warning.json
+++ b/modules/main/lang/en/templates/messagebox-warning.json
diff --git a/lang/en/modules/main/page-main-guest.json b/modules/main/lang/en/templates/page-main-guest.json
index 6526f5bd..6526f5bd 100644
--- a/lang/en/modules/main/page-main-guest.json
+++ b/modules/main/lang/en/templates/page-main-guest.json
diff --git a/lang/en/modules/main/page-main.json b/modules/main/lang/en/templates/page-main.json
index 8031ac1c..8031ac1c 100644
--- a/lang/en/modules/main/page-main.json
+++ b/modules/main/lang/en/templates/page-main.json
diff --git a/modules/main/module.inc.php b/modules/main/page.inc.php
index 369d4b54..369d4b54 100644
--- a/modules/main/module.inc.php
+++ b/modules/main/page.inc.php
diff --git a/modules/main/templates/main-menu.html b/modules/main/templates/main-menu.html
index c4534c2f..556548e9 100644
--- a/modules/main/templates/main-menu.html
+++ b/modules/main/templates/main-menu.html
@@ -1,42 +1,64 @@
-<!-- Fixed navbar -->
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="container-fluid">
+<div class="slx-topbar">
+ <div>
+ {{#dbupdate}}
+ <a href="api.php?do=update"><span class="slx-warning-badge badge"><span class="glyphicon glyphicon-exclamation-sign"></span> DB-Update</span></a>
+ {{/dbupdate}}
+ {{#warning}}
+ <a href="?do=EventLog"><span class="slx-warning-badge badge"><span class="glyphicon glyphicon-exclamation-sign"></span> {{lang_warning}}</span></a>
+ {{/warning}}
+ {{#needsSetup}}
+ <a href="?do=Main"><span class="slx-warning-badge badge"><span class="glyphicon glyphicon-exclamation-sign"></span> {{lang_needsSetup}}</span></a>
+ {{/needsSetup}}
+ </div>
+</div>
+<div class="sidebar-bg"></div>
+<nav class="navbar navbar-inverse sidebar" role="navigation">
+ <div class="container-fluid">
+ <!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
- <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-sidebar-navbar-collapse-1">
+ <span class="sr-only">{{lang_toggleNavigation}}</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
- <a class="navbar-brand" href="?do=Main">OpenSLX Admin</a>
+ <a class="navbar-brand" href="#">OpenSLX</a>
</div>
- <div class="navbar-collapse collapse">
+ <!-- Collect the nav links, forms, and other content for toggling -->
+ <div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1">
<ul class="nav navbar-nav">
- {{#dbupdate}}
- <li><a href="api.php?do=update"><span class="slx-warning-badge badge"><span class="glyphicon glyphicon-exclamation-sign"></span> DB-Update</span></a></li>
- {{/dbupdate}}
- {{#warning}}
- <li><a href="?do=EventLog"><span class="slx-warning-badge badge"><span class="glyphicon glyphicon-exclamation-sign"></span> {{lang_warning}}</span></a></li>
- {{/warning}}
- {{#needsSetup}}
- <li><a href="?do=Main"><span class="slx-warning-badge badge"><span class="glyphicon glyphicon-exclamation-sign"></span> {{lang_needsSetup}}</span></a></li>
- {{/needsSetup}}
- </ul>
- <ul class="nav navbar-nav navbar-right">
+ {{#categories}}
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="sidebar-visible-inline {{icon}}"></span> {{displayName}}<b class="caret sidebar-hide"></b></a>
+ <ul class="dropdown-menu sidebar-visible-block" role="menu">
+ {{#modules}}
+ <li class="{{className}}"><a href="?do={{identifier}}">{{displayName}}</a></li>
+ {{/modules}}
+ </ul>
+ </li>
+ {{/categories}}
<li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown"><img src="lang/{{current_lang}}/flag.png"><b class="caret"></b></a>
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+ <img src="lang/{{current_lang}}/flag.png" alt="{{current_lang}}">
+ <span class="sidebar-visible-inline">{{lang_language}}</span>
+ <b class="caret"></b>
+ </a>
<ul class="dropdown-menu">
+ <li><a href="?do=Translation">{{lang_translations}}</a></li>
<li class="dropdown-header">{{lang_language}}</li>
{{#langs}}
<li><a href="?lang={{cc}}&amp;url={{url}}"><img src="lang/{{cc}}/flag.png" alt="{{name}}"> {{name}}</a></li>
{{/langs}}
</ul>
</li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
{{#user}}
+ <li><span>{{lang_loggedInPrefix}} {{user}} {{lang_loggedInSuffix}}</span></li>
<li>
<form method="post" action="?do=Session">
<input type="hidden" name="token" value="{{token}}">
<input type="hidden" name="action" value="logout">
- <b>{{user}}</b>
<button class="btn btn-default btn-xs" type="submit">{{lang_logout}}</button>
</form>
</li>
@@ -47,5 +69,4 @@
</ul>
</div>
</div>
-</div>
-
+</nav>
diff --git a/modules/main/templates/main-menu.html.topnavbar b/modules/main/templates/main-menu.html.topnavbar
deleted file mode 100644
index 8da8edd0..00000000
--- a/modules/main/templates/main-menu.html.topnavbar
+++ /dev/null
@@ -1,92 +0,0 @@
-<!-- Fixed navbar -->
-<div class="navbar navbar-default navbar-fixed-top">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <a class="navbar-brand" href="?do=Main">OpenSLX Admin</a>
- </div>
- <div class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{lang_settings}}<b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li class="dropdown-header">{{lang_client}}</li>
- <li><a href="?do=News">{{lang_news}}</a></li>
- <li><a href="?do=SysConfig">{{lang_localization}}</a></li>
- <li><a href="?do=MiniLinux">bwLehrpool Mini-Linux</a></li>
- <li><a href="?do=BaseConfig">{{lang_configurationVariables}}</a></li>
- <li><a href="?do=Locations">{{lang_locations}}</a></li>
- <li class="divider"></li>
- <li class="dropdown-header">{{lang_server}}</li>
- <li><a href="?do=ServerSetup">{{lang_configurationBasic}}</a></li>
- <li><a href="?do=InternetAccess">{{lang_internetAccess}}</a></li>
- <li><a href="?do=VmStore">{{lang_vmLocation}}</a></li>
- <li><a href="?do=WebInterface">{{lang_webInterface}}</a></li>
- <li><a href="?do=Backup">{{lang_backup}}</a></li>
- </ul>
- </li>
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{lang_status}}<b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li><a href="?do=SystemStatus">{{lang_serverStatus}}</a></li>
- <li><a href="?do=EventLog">{{lang_eventLog}}</a></li>
- <li class="divider"></li>
- <li><a href="?do=SysLog">{{lang_clientLog}}</a></li>
- <li><a href="?do=Statistics">{{lang_clientStats}}</a></li>
- </ul>
- </li>
- <li>
- <a href="?do=DozMod">{{lang_dozmod}}</a>
- </li>
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown"><img src="lang/{{current_lang}}/flag.png" alt="{{current_lang}}"><b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li><a href="?do=Translation">{{lang_translations}}</a></li>
- <li class="dropdown-header">{{lang_language}}</li>
- {{#langs}}
- <li><a href="?lang={{cc}}&amp;url={{url}}"><img src="lang/{{cc}}/flag.png" alt="{{name}}"> {{name}}</a></li>
- {{/langs}}
- </ul>
- </li>
- {{#dbupdate}}
- <li><a href="api.php?do=update"><span class="slx-warning-badge badge"><span class="glyphicon glyphicon-exclamation-sign"></span> DB-Update</span></a></li>
- {{/dbupdate}}
- {{#warning}}
- <li><a href="?do=EventLog"><span class="slx-warning-badge badge"><span class="glyphicon glyphicon-exclamation-sign"></span> {{lang_warning}}</span></a></li>
- {{/warning}}
- {{#needsSetup}}
- <li><a href="?do=Main"><span class="slx-warning-badge badge"><span class="glyphicon glyphicon-exclamation-sign"></span> {{lang_needsSetup}}</span></a></li>
- {{/needsSetup}}
- </ul>
- <ul class="nav navbar-nav navbar-right">
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown"><img src="lang/{{current_lang}}/flag.png"><b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li class="dropdown-header">{{lang_language}}</li>
- {{#langs}}
- <li><a href="?lang={{cc}}&amp;url={{url}}"><img src="lang/{{cc}}/flag.png" alt="{{name}}"> {{name}}</a></li>
- {{/langs}}
- </ul>
- </li>
- {{#user}}
- <li>
- <form method="post" action="?do=Session">
- <input type="hidden" name="token" value="{{token}}">
- <input type="hidden" name="action" value="logout">
- <b>{{user}}</b>
- <button class="btn btn-default btn-xs" type="submit">{{lang_logout}}</button>
- </form>
- </li>
- {{/user}}
- {{^user}}
- <li><a href="?do=Session&amp;action=login">{{lang_login}}</a></li>
- {{/user}}
- </ul>
- </div>
- </div>
-</div>
-
diff --git a/modules/minilinux/config.json b/modules/minilinux/config.json
index 93209f62..f2abe27c 100644
--- a/modules/minilinux/config.json
+++ b/modules/minilinux/config.json
@@ -1,4 +1,4 @@
{
- "category":"settings",
+ "category":"main.settings",
"enabled":"true"
}
diff --git a/modules/minilinux/module.inc.php b/modules/minilinux/page.inc.php
index 91be456e..91be456e 100644
--- a/modules/minilinux/module.inc.php
+++ b/modules/minilinux/page.inc.php
diff --git a/modules/news/config.json b/modules/news/config.json
index 4e7fa5fb..6c189b63 100644
--- a/modules/news/config.json
+++ b/modules/news/config.json
@@ -1,4 +1,4 @@
{
- "category":"content",
+ "category":"main.content",
"enabled":"true"
}
diff --git a/modules/news/module.inc.php b/modules/news/page.inc.php
index 9bbadc4f..9bbadc4f 100644
--- a/modules/news/module.inc.php
+++ b/modules/news/page.inc.php
diff --git a/modules/serversetup/config.json b/modules/serversetup/config.json
index 93209f62..f2abe27c 100644
--- a/modules/serversetup/config.json
+++ b/modules/serversetup/config.json
@@ -1,4 +1,4 @@
{
- "category":"settings",
+ "category":"main.settings",
"enabled":"true"
}
diff --git a/modules/serversetup/module.inc.php b/modules/serversetup/page.inc.php
index e37d7d40..e37d7d40 100644
--- a/modules/serversetup/module.inc.php
+++ b/modules/serversetup/page.inc.php
diff --git a/modules/session/config.json b/modules/session/config.json
index d5da4cc8..4da67ef8 100644
--- a/modules/session/config.json
+++ b/modules/session/config.json
@@ -1,4 +1,3 @@
{
- "category":"hidden",
"enabled":"true"
}
diff --git a/modules/session/module.inc.php b/modules/session/page.inc.php
index ef135f9d..ef135f9d 100644
--- a/modules/session/module.inc.php
+++ b/modules/session/page.inc.php
diff --git a/modules/statistics/config.json b/modules/statistics/config.json
index 17acab76..b0123727 100644
--- a/modules/statistics/config.json
+++ b/modules/statistics/config.json
@@ -1,5 +1,5 @@
{
- "category":"status",
+ "category":"main.status",
"enabled":"true",
"permission":"0"
}
diff --git a/modules/statistics/module.inc.php b/modules/statistics/page.inc.php
index faf88521..faf88521 100644
--- a/modules/statistics/module.inc.php
+++ b/modules/statistics/page.inc.php
diff --git a/modules/support/config.json b/modules/support/config.json
index 4e7fa5fb..6c189b63 100644
--- a/modules/support/config.json
+++ b/modules/support/config.json
@@ -1,4 +1,4 @@
{
- "category":"content",
+ "category":"main.content",
"enabled":"true"
}
diff --git a/modules/support/module.inc.php b/modules/support/page.inc.php
index d4012c1a..d4012c1a 100644
--- a/modules/support/module.inc.php
+++ b/modules/support/page.inc.php
diff --git a/modules/sysconfig/config.json b/modules/sysconfig/config.json
index 93209f62..f2abe27c 100644
--- a/modules/sysconfig/config.json
+++ b/modules/sysconfig/config.json
@@ -1,4 +1,4 @@
{
- "category":"settings",
+ "category":"main.settings",
"enabled":"true"
}
diff --git a/modules/sysconfig/module.inc.php b/modules/sysconfig/page.inc.php
index 0c06e125..0c06e125 100644
--- a/modules/sysconfig/module.inc.php
+++ b/modules/sysconfig/page.inc.php
diff --git a/modules/sysconfignew/config.json b/modules/sysconfignew/config.json
index d5da4cc8..4da67ef8 100644
--- a/modules/sysconfignew/config.json
+++ b/modules/sysconfignew/config.json
@@ -1,4 +1,3 @@
{
- "category":"hidden",
"enabled":"true"
}
diff --git a/modules/sysconfignew/module.inc.php b/modules/sysconfignew/page.inc.php
index 105ad6c7..105ad6c7 100644
--- a/modules/sysconfignew/module.inc.php
+++ b/modules/sysconfignew/page.inc.php
diff --git a/modules/syslog/config.json b/modules/syslog/config.json
index d42dc3e3..650ab2fe 100644
--- a/modules/syslog/config.json
+++ b/modules/syslog/config.json
@@ -1,4 +1,4 @@
{
- "category":"status",
+ "category":"main.status",
"enabled":"true"
}
diff --git a/modules/syslog/module.inc.php b/modules/syslog/page.inc.php
index 43a9bd28..43a9bd28 100644
--- a/modules/syslog/module.inc.php
+++ b/modules/syslog/page.inc.php
diff --git a/modules/systemstatus/config.json b/modules/systemstatus/config.json
index d42dc3e3..650ab2fe 100644
--- a/modules/systemstatus/config.json
+++ b/modules/systemstatus/config.json
@@ -1,4 +1,4 @@
{
- "category":"status",
+ "category":"main.status",
"enabled":"true"
}
diff --git a/modules/systemstatus/module.inc.php b/modules/systemstatus/page.inc.php
index 2a5382e1..2a5382e1 100644
--- a/modules/systemstatus/module.inc.php
+++ b/modules/systemstatus/page.inc.php
diff --git a/modules/translation/config.json b/modules/translation/config.json
index 4e7fa5fb..6c189b63 100644
--- a/modules/translation/config.json
+++ b/modules/translation/config.json
@@ -1,4 +1,4 @@
{
- "category":"content",
+ "category":"main.content",
"enabled":"true"
}
diff --git a/modules/translation/module.inc.php b/modules/translation/page.inc.php
index 3548f727..3548f727 100644
--- a/modules/translation/module.inc.php
+++ b/modules/translation/page.inc.php
diff --git a/modules/usermanagement/config.json b/modules/usermanagement/config.json
index 90787d94..b9fc3ad3 100644
--- a/modules/usermanagement/config.json
+++ b/modules/usermanagement/config.json
@@ -1,5 +1,5 @@
{
- "category":"users",
+ "category":"main.users",
"enabled":"true",
"permission":"0"
}
diff --git a/modules/usermanagement/module.inc.php b/modules/usermanagement/page.inc.php
index 01b5f755..01b5f755 100644
--- a/modules/usermanagement/module.inc.php
+++ b/modules/usermanagement/page.inc.php
diff --git a/modules/vmstore/config.json b/modules/vmstore/config.json
index 93209f62..f2abe27c 100644
--- a/modules/vmstore/config.json
+++ b/modules/vmstore/config.json
@@ -1,4 +1,4 @@
{
- "category":"settings",
+ "category":"main.settings",
"enabled":"true"
}
diff --git a/modules/vmstore/module.inc.php b/modules/vmstore/page.inc.php
index 81f92ee3..81f92ee3 100644
--- a/modules/vmstore/module.inc.php
+++ b/modules/vmstore/page.inc.php
diff --git a/modules/webinterface/config.json b/modules/webinterface/config.json
index 4e7fa5fb..6c189b63 100644
--- a/modules/webinterface/config.json
+++ b/modules/webinterface/config.json
@@ -1,4 +1,4 @@
{
- "category":"content",
+ "category":"main.content",
"enabled":"true"
}
diff --git a/modules/webinterface/module.inc.php b/modules/webinterface/page.inc.php
index c301dec9..c301dec9 100644
--- a/modules/webinterface/module.inc.php
+++ b/modules/webinterface/page.inc.php
diff --git a/style/default.css b/style/default.css
index 72f82823..d845ec36 100644
--- a/style/default.css
+++ b/style/default.css
@@ -1,9 +1,9 @@
html {
overflow-y: scroll;
+ height: 100%;
}
body {
- padding-top: 70px;
padding-bottom: 10px;
}
@@ -167,10 +167,6 @@ body {
to { transform: scale( 1 ) rotate( 360deg ); }
}
-.slx-warning-badge {
- color: #ff6;
-}
-
.slx-footer {
color: #999;
padding: 5px;
@@ -247,133 +243,206 @@ input[readonly] {
padding: 19px;
}
-
-
-/*
- * Base structure
- */
-
-
-
-/*
- * Global add-ons
- */
-
-.sub-header {
- padding-bottom: 10px;
- border-bottom: 1px solid #eee;
-}
-
-/*
- * Top navigation
- * Hide default border to remove 1px line.
- */
-.navbar-fixed-top {
- border: 0;
-}
-
/*
* Sidebar
*/
-/* Hide for mobile, show later */
-.sidebar {
- display: none;
-}
-@media (min-width: 768px) {
- .sidebar {
- position: fixed;
- top: 51px;
- bottom: 0;
- left: 0;
- z-index: 1000;
- display: block;
- padding: 20px;
- padding-top: 8px;
- overflow-x: hidden;
- overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
- background-color: #373d47;
- }
-}
-
-/* Sidebar navigation */
-.nav-sidebar {
- margin-right: -21px; /* 20px padding + 1px border */
- margin-left: -20px;
-}
-.nav-sidebar > li > a {
- padding: 7px;
- padding-right: 20px;
- padding-left: 20px;
- color: #CCCCCC;
-}
-.nav-sidebar > .active > a,
-.nav-sidebar > .active > a:hover,
-.nav-sidebar > .active > a:focus {
- color: #FFFFFF;
- background-color: #24272d;
-}
-.nav-sidebar > li > a:hover,
-.nav-sidebar > li > a:focus {
- background-color: #2C323D;
+nav.sidebar.navbar {
+ border-radius: 0px;
}
-
-/*
- *
- * Dashboard custom
- *
- * Main content
- */
-
-.main {
- padding: 20px;
-}
-@media (min-width: 768px) {
- .main {
- padding-right: 40px;
- padding-left: 40px;
- }
+nav.sidebar, .main {
+ -webkit-transition: margin 200ms ease-out;
+ -moz-transition: margin 200ms ease-out;
+ -o-transition: margin 200ms ease-out;
+ transition: margin 200ms ease-out;
}
-.main .page-header {
- margin-top: 0;
-}
-
-
-/*
- * Placeholder dashboard ideas
- */
-.placeholders {
- margin-bottom: 30px;
- text-align: center;
+.sidebar-bg {
+ -webkit-transition: width 200ms ease-out;
+ -moz-transition: width 200ms ease-out;
+ -o-transition: width 200ms ease-out;
+ transition: width 200ms ease-out;
}
-.placeholders h4 {
- margin-bottom: 0;
-}
-.placeholder {
- margin-bottom: 20px;
-}
-.placeholder img {
- display: inline-block;
- border-radius: 50%;
+
+nav.sidebar li {
+ -webkit-transition: width 10ms linear;
+ -moz-transition: width 10ms linear;
+ -o-transition: width 10ms linear;
+ transition: width 10ms linear;
}
-.dash-header {
- padding-top: 5px;
- padding-left: 10px;
- padding-bottom: 5px;
- font-size: 17px;
- margin-right: -21px;
- margin-left: -20px;
- color: #FFFFFF;
+/* Add gap to nav and right windows.*/
+.main {
+ padding: 10px 10px 0 10px;
+ margin-top: 0px;
+}
+
+.slx-topbar {
+ position: absolute;
+ top: 10px;
+ padding: 0px;
+ z-index: 100;
+}
+
+.slx-topbar div {
+ margin-left: 225px;
+}
+
+.sidebar-bg {
+ position: fixed;
+}
+
+.sidebar-visible-inline, .sidebar-visible-block {
+ display: none;
+}
+
+/* .....NavBar: Fully showing nav bar..... */
+
+@media (min-width: 1200px) {
+
+ .navbar-right {
+ float: left !important;
+ margin-top: 30px;
+ }
+
+ .navbar-nav > li {
+ width: 100%;
+ }
+
+ .slx-topbar
+ {
+ background:#F2DEDE;
+ width:100%;
+ }
+
+ .main
+ {
+ float:right;
+ margin-left:240px;
+ margin-top:32px;
+ min-width:900px;
+ position:absolute;
+ width:calc(100%-200px);
+ }
+
+ .navbar-inverse,.sidebar-bg
+ {
+ background-color:#373D47;
+ border:none;
+ }
+
+ .sidebar-bg
+ {
+ height:5000px;
+ width:240px;
+ z-index:-10;
+ }
+
+ .dropdown-menu-autoexpand, .sidebar-visible-block
+ {
+ display: block;
+ }
+
+ .sidebar-visible-inline {
+ display: inline;
+ }
+
+ .sidebar-hide, .dropdown-menu .divider
+ {
+ display: none;
+ }
+
+ .dropdown-toggle
+ {
+ background-color: transparent !important;
+ color: #fff !important;
+ cursor: default !important;
+ padding-bottom: 0 !important;
+ padding-left: 8px !important;
+ font-size: 115%;
+ }
+
+ nav.sidebar .navbar-brand,nav.sidebar .navbar-header
+ {
+ margin-left:0;
+ text-align:center;
+ width:100%;
+ }
+
+ nav.sidebar a
+ {
+ padding-right:13px;
+ }
+
+ nav.sidebar .navbar-nav .dropdown-menu
+ {
+ -webkit-box-shadow:none;
+ background-color:transparent;
+ border:0;
+ box-shadow:none;
+ float:none;
+ margin-top:0;
+ position:static;
+ width:auto;
+ }
+
+ nav.sidebar .navbar-collapse,nav.sidebar .container-fluid
+ {
+ padding:0;
+ }
+
+ .navbar-inverse .navbar-nav .dropdown-menu>li>a
+ {
+ color:#CCC;
+ }
+
+ .navbar-inverse .navbar-nav .dropdown-menu > li.active > a {
+ background-color: #24272D;
+ }
+
+ .navbar-inverse .navbar-nav li {
+ width: 100%;
+ }
+
+ .navbar-inverse .navbar-nav li > span, .navbar-inverse .navbar-nav li > form {
+ color: #fff;
+ font-weight: bold;
+ margin: 2px 5px;
+ text-align: center;
+ }
+
+ nav.sidebar
+ {
+ float: left;
+ height: 100%;
+ margin-bottom: 0;
+ margin-left: 0;
+ width: 240px;
+ }
+
+ nav.sidebar .navbar-nav .dropdown-menu>li>a:hover, nav.sidebar .navbar-nav .dropdown-menu>li>a:focus {
+ background-color: #2C323D;
+ }
+
+}
+
+@media (min-width: 1440px) {
+ .main {
+ min-width: 1150px;
+ max-width: 1300px;
+ }
+}
+
+section{
+ padding-left: 15px;
}
/*
* Sysconfig Module Editor
*/
-.mod-nav{
+.mod-nav {
width: 250px;
float: left;
margin-right: 4px;