diff options
author | Simon Rettberg | 2016-04-28 21:31:15 +0200 |
---|---|---|
committer | Simon Rettberg | 2016-04-28 21:31:15 +0200 |
commit | 95db8e184b378534db0ac08d14ae8500ee5090c3 (patch) | |
tree | f39cee8160ef4266e49dbe04d3e8fe6400ce2133 | |
parent | Merge branch 'master' into modularization (diff) | |
download | slx-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.php | 71 | ||||
-rw-r--r-- | inc/dictionary.inc.php | 67 | ||||
-rw-r--r-- | inc/message.inc.php | 4 | ||||
-rw-r--r-- | inc/module.inc.php | 173 | ||||
-rw-r--r-- | inc/render.inc.php | 56 | ||||
-rw-r--r-- | index.php | 51 | ||||
-rw-r--r-- | lang/en/modules/main/pagenav.json | 2 | ||||
-rw-r--r-- | modules/adduser/config.json | 1 | ||||
-rw-r--r-- | modules/adduser/page.inc.php (renamed from modules/adduser/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/backup/config.json | 2 | ||||
-rw-r--r-- | modules/backup/page.inc.php (renamed from modules/backup/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/baseconfig/config.json | 4 | ||||
-rw-r--r-- | modules/baseconfig/lang/en/module.json | 3 | ||||
-rw-r--r-- | modules/baseconfig/page.inc.php (renamed from modules/baseconfig/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/baseconfig/templates/_page.html | 24 | ||||
-rw-r--r-- | modules/citymanagement/config.json | 1 | ||||
-rw-r--r-- | modules/citymanagement/page.inc.php (renamed from modules/citymanagement/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/dozmod/config.json | 2 | ||||
-rw-r--r-- | modules/dozmod/page.inc.php (renamed from modules/dozmod/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/eventlog/config.json | 2 | ||||
-rw-r--r-- | modules/eventlog/page.inc.php (renamed from modules/eventlog/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/imgmanagement/config.json | 1 | ||||
-rw-r--r-- | modules/imgmanagement/page.inc.php (renamed from modules/imgmanagement/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/internetaccess/config.json | 2 | ||||
-rw-r--r-- | modules/internetaccess/page.inc.php (renamed from modules/internetaccess/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/locations/config.json | 2 | ||||
-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.json | 1 | ||||
-rw-r--r-- | modules/main/lang/en/categories.json | 6 | ||||
-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.html | 63 | ||||
-rw-r--r-- | modules/main/templates/main-menu.html.topnavbar | 92 | ||||
-rw-r--r-- | modules/minilinux/config.json | 2 | ||||
-rw-r--r-- | modules/minilinux/page.inc.php (renamed from modules/minilinux/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/news/config.json | 2 | ||||
-rw-r--r-- | modules/news/page.inc.php (renamed from modules/news/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/serversetup/config.json | 2 | ||||
-rw-r--r-- | modules/serversetup/page.inc.php (renamed from modules/serversetup/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/session/config.json | 1 | ||||
-rw-r--r-- | modules/session/page.inc.php (renamed from modules/session/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/statistics/config.json | 2 | ||||
-rw-r--r-- | modules/statistics/page.inc.php (renamed from modules/statistics/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/support/config.json | 2 | ||||
-rw-r--r-- | modules/support/page.inc.php (renamed from modules/support/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/sysconfig/config.json | 2 | ||||
-rw-r--r-- | modules/sysconfig/page.inc.php (renamed from modules/sysconfig/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/sysconfignew/config.json | 1 | ||||
-rw-r--r-- | modules/sysconfignew/page.inc.php (renamed from modules/sysconfignew/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/syslog/config.json | 2 | ||||
-rw-r--r-- | modules/syslog/page.inc.php (renamed from modules/syslog/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/systemstatus/config.json | 2 | ||||
-rw-r--r-- | modules/systemstatus/page.inc.php (renamed from modules/systemstatus/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/translation/config.json | 2 | ||||
-rw-r--r-- | modules/translation/page.inc.php (renamed from modules/translation/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/usermanagement/config.json | 2 | ||||
-rw-r--r-- | modules/usermanagement/page.inc.php (renamed from modules/usermanagement/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/vmstore/config.json | 2 | ||||
-rw-r--r-- | modules/vmstore/page.inc.php (renamed from modules/vmstore/module.inc.php) | 0 | ||||
-rw-r--r-- | modules/webinterface/config.json | 2 | ||||
-rw-r--r-- | modules/webinterface/page.inc.php (renamed from modules/webinterface/module.inc.php) | 0 | ||||
-rw-r--r-- | style/default.css | 299 |
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'); } } @@ -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}}&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}}&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}}&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&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; |