From 2e18b36a287ad9b25619f9e2a073dcedf6d620ee Mon Sep 17 00:00:00 2001
From: Simon Rettberg
Date: Wed, 18 May 2016 18:04:56 +0200
Subject: MORE WMORK
---
apis/update.inc.php | 7 +-
config.php.example | 2 +-
inc/dictionary.inc.php | 7 +-
inc/message.inc.php | 85 +++++++--
inc/module.inc.php | 21 ++-
inc/property.inc.php | 6 +
inc/render.inc.php | 39 +++--
inc/user.inc.php | 2 +-
index.php | 2 +-
modules-available/backup/page.inc.php | 1 -
modules-available/baseconfig/config.json | 3 +-
modules-available/baseconfig/templates/_page.html | 2 +-
.../baseconfig_partitions_cdn/config.json | 4 +
.../baseconfig_partitions_cdn/page.inc.php | 133 ++++++++++++++
.../baseconfig_partitions_cdn/templates/_page.html | 74 ++++++++
.../dozmod/hooks/main-warning.inc.php | 11 ++
modules-available/dozmod/lang/de/messages.json | 1 +
modules-available/dozmod/lang/en/messages.json | 1 +
modules-available/js_chart/clientscript.js | 11 ++
modules-available/js_chart/config.json | 1 +
modules-available/js_circles/clientscript.js | 7 +
modules-available/js_circles/config.json | 1 +
modules-available/main/lang/de/global-tags.json | 2 +
modules-available/main/lang/de/template-tags.json | 8 +-
modules-available/main/lang/en/global-tags.json | 2 +
modules-available/main/lang/en/template-tags.json | 8 +-
modules-available/main/page.inc.php | 44 ++---
.../main/templates/messagebox-error.html | 1 -
.../main/templates/messagebox-info.html | 1 -
.../main/templates/messagebox-success.html | 1 -
.../main/templates/messagebox-warning.html | 1 -
modules-available/main/templates/messagebox.html | 7 +
modules-available/main/templates/page-main.html | 31 ----
.../minilinux/hooks/main-warning.inc.php | 6 +
modules-available/minilinux/lang/de/messages.json | 3 +
modules-available/minilinux/lang/en/messages.json | 3 +
modules-available/serversetup-bwlp/config.json | 4 +
.../serversetup-bwlp/lang/de/messages.json | 3 +
.../serversetup-bwlp/lang/de/module.json | 4 +
.../serversetup-bwlp/lang/de/template-tags.json | 26 +++
.../serversetup-bwlp/lang/en/messages.json | 3 +
.../serversetup-bwlp/lang/en/module.json | 3 +
.../serversetup-bwlp/lang/en/template-tags.json | 38 ++++
.../serversetup-bwlp/lang/pt/messages.json | 3 +
.../serversetup-bwlp/lang/pt/module.json | 3 +
.../serversetup-bwlp/lang/pt/template-tags.json | 39 +++++
modules-available/serversetup-bwlp/page.inc.php | 140 +++++++++++++++
.../serversetup-bwlp/templates/ipaddress.html | 34 ++++
.../serversetup-bwlp/templates/ipxe.html | 70 ++++++++
.../serversetup-bwlp/templates/ipxe_update.html | 20 +++
modules-available/serversetup/config.json | 4 -
.../serversetup/lang/de/messages.json | 3 -
modules-available/serversetup/lang/de/module.json | 4 -
.../serversetup/lang/de/template-tags.json | 26 ---
.../serversetup/lang/en/messages.json | 3 -
modules-available/serversetup/lang/en/module.json | 3 -
.../serversetup/lang/en/template-tags.json | 38 ----
.../serversetup/lang/pt/messages.json | 3 -
modules-available/serversetup/lang/pt/module.json | 3 -
.../serversetup/lang/pt/template-tags.json | 39 -----
modules-available/serversetup/page.inc.php | 194 ---------------------
.../serversetup/templates/ipaddress.html | 35 ----
.../serversetup/templates/ipxe-adv.html | 149 ----------------
.../serversetup/templates/ipxe-smp.html | 62 -------
.../serversetup/templates/ipxe_update.html | 20 ---
modules-available/statistics/config.json | 2 +-
modules-available/statistics/page.inc.php | 2 -
.../sysconfig/addmodule_branding.inc.php | 1 -
.../sysconfig/addmodule_custommodule.inc.php | 1 -
modules-available/sysconfig/clientscript.js | 21 +++
.../sysconfig/hooks/main-warning.inc.php | 6 +
.../sysconfig/inc/configmodule.inc.php | 2 +-
modules-available/sysconfig/lang/de/messages.json | 27 +--
modules-available/sysconfig/lang/en/messages.json | 27 +--
modules-available/sysconfig/page.inc.php | 1 -
modules-available/syslog/clientscript.js | 8 +
modules-available/syslog/page.inc.php | 3 -
modules-available/syslog/style.css | 45 +++++
modules-available/systemstatus/config.json | 3 +-
modules-available/systemstatus/page.inc.php | 4 +-
modules-available/translation/page.inc.php | 3 +
.../vmstore/hooks/main-warning.inc.php | 10 ++
modules-available/vmstore/lang/de/messages.json | 3 +
modules-available/vmstore/lang/en/messages.json | 3 +
script/bootstrap-tagsinput.min.js | 8 -
script/chart.min.js | 11 --
script/circles.min.js | 7 -
script/custom.js | 32 ----
script/fileselect.js | 6 -
style/bootstrap-tagsinput.css | 45 -----
90 files changed, 930 insertions(+), 866 deletions(-)
create mode 100644 modules-available/baseconfig_partitions_cdn/config.json
create mode 100644 modules-available/baseconfig_partitions_cdn/page.inc.php
create mode 100644 modules-available/baseconfig_partitions_cdn/templates/_page.html
create mode 100644 modules-available/dozmod/hooks/main-warning.inc.php
create mode 100644 modules-available/js_chart/clientscript.js
create mode 100644 modules-available/js_chart/config.json
create mode 100644 modules-available/js_circles/clientscript.js
create mode 100644 modules-available/js_circles/config.json
delete mode 100644 modules-available/main/templates/messagebox-error.html
delete mode 100644 modules-available/main/templates/messagebox-info.html
delete mode 100644 modules-available/main/templates/messagebox-success.html
delete mode 100644 modules-available/main/templates/messagebox-warning.html
create mode 100644 modules-available/main/templates/messagebox.html
create mode 100644 modules-available/minilinux/hooks/main-warning.inc.php
create mode 100644 modules-available/minilinux/lang/de/messages.json
create mode 100644 modules-available/minilinux/lang/en/messages.json
create mode 100644 modules-available/serversetup-bwlp/config.json
create mode 100644 modules-available/serversetup-bwlp/lang/de/messages.json
create mode 100644 modules-available/serversetup-bwlp/lang/de/module.json
create mode 100644 modules-available/serversetup-bwlp/lang/de/template-tags.json
create mode 100644 modules-available/serversetup-bwlp/lang/en/messages.json
create mode 100644 modules-available/serversetup-bwlp/lang/en/module.json
create mode 100644 modules-available/serversetup-bwlp/lang/en/template-tags.json
create mode 100644 modules-available/serversetup-bwlp/lang/pt/messages.json
create mode 100644 modules-available/serversetup-bwlp/lang/pt/module.json
create mode 100644 modules-available/serversetup-bwlp/lang/pt/template-tags.json
create mode 100644 modules-available/serversetup-bwlp/page.inc.php
create mode 100644 modules-available/serversetup-bwlp/templates/ipaddress.html
create mode 100644 modules-available/serversetup-bwlp/templates/ipxe.html
create mode 100644 modules-available/serversetup-bwlp/templates/ipxe_update.html
delete mode 100644 modules-available/serversetup/config.json
delete mode 100644 modules-available/serversetup/lang/de/messages.json
delete mode 100644 modules-available/serversetup/lang/de/module.json
delete mode 100644 modules-available/serversetup/lang/de/template-tags.json
delete mode 100644 modules-available/serversetup/lang/en/messages.json
delete mode 100644 modules-available/serversetup/lang/en/module.json
delete mode 100644 modules-available/serversetup/lang/en/template-tags.json
delete mode 100644 modules-available/serversetup/lang/pt/messages.json
delete mode 100644 modules-available/serversetup/lang/pt/module.json
delete mode 100644 modules-available/serversetup/lang/pt/template-tags.json
delete mode 100644 modules-available/serversetup/page.inc.php
delete mode 100644 modules-available/serversetup/templates/ipaddress.html
delete mode 100644 modules-available/serversetup/templates/ipxe-adv.html
delete mode 100644 modules-available/serversetup/templates/ipxe-smp.html
delete mode 100644 modules-available/serversetup/templates/ipxe_update.html
create mode 100644 modules-available/sysconfig/clientscript.js
create mode 100644 modules-available/sysconfig/hooks/main-warning.inc.php
create mode 100644 modules-available/syslog/clientscript.js
create mode 100644 modules-available/syslog/style.css
create mode 100644 modules-available/vmstore/hooks/main-warning.inc.php
create mode 100644 modules-available/vmstore/lang/de/messages.json
create mode 100644 modules-available/vmstore/lang/en/messages.json
delete mode 100644 script/bootstrap-tagsinput.min.js
delete mode 100644 script/chart.min.js
delete mode 100644 script/circles.min.js
delete mode 100644 script/custom.js
delete mode 100644 style/bootstrap-tagsinput.css
diff --git a/apis/update.inc.php b/apis/update.inc.php
index 3ba7f9a0..fb5af7d6 100644
--- a/apis/update.inc.php
+++ b/apis/update.inc.php
@@ -1,5 +1,9 @@
0, 'main.settings' => 1, 'main.status' => 2, 'main.users' => 3);
$MENU_SETTING_SORT_ORDER = array(
'news' => 0, 'sysconfig' => 1, 'baseconfig' => 2, 'locations' => 3, // main.content
diff --git a/inc/dictionary.inc.php b/inc/dictionary.inc.php
index 0dafe9d9..5679c52d 100644
--- a/inc/dictionary.inc.php
+++ b/inc/dictionary.inc.php
@@ -90,12 +90,9 @@ class Dictionary
return self::translateFileModule('main', 'global-tags', $tag);
}
- public static function getMessage($id)
+ public static function getMessage($module, $id)
{
- if (!preg_match('/^(\w+)\.(.+)$/', $id, $out)) {
- return 'Invalid Message ID format: ' . $id;
- }
- $string = self::translateFileModule($out[1], 'messages', $out[2]);
+ $string = self::translateFileModule($module, 'messages', $id);
if ($string === false) {
return "($id) ({{0}}, {{1}}, {{2}}, {{3}})";
}
diff --git a/inc/message.inc.php b/inc/message.inc.php
index 15e89041..9197e4c2 100644
--- a/inc/message.inc.php
+++ b/inc/message.inc.php
@@ -13,7 +13,7 @@ class Message
*/
public static function addError($id)
{
- self::add('error', $id, func_get_args());
+ self::add('danger', $id, func_get_args());
}
public static function addWarning($id)
@@ -40,10 +40,35 @@ class Message
if (strstr($id, '.') === false) {
$id = Page::getModule()->getIdentifier() . '.' . $id;
}
+ if (count($params) > 1 && $params[1] === true) {
+ $params = array_slice($params, 2);
+ $linkModule = true;
+ } else {
+ $params = array_slice($params, 1);
+ $linkModule = false;
+ }
+ switch ($type) {
+ case 'danger':
+ $icon = 'exclamation-sign';
+ break;
+ case 'warning':
+ $icon = 'warning';
+ break;
+ case 'info':
+ $icon = 'info-sign';
+ break;
+ case 'success':
+ $icon = 'ok';
+ break;
+ default:
+ $icon = '';
+ }
self::$list[] = array(
'type' => $type,
+ 'icon' => $icon,
'id' => $id,
- 'params' => array_slice($params, 1)
+ 'params' => $params,
+ 'link' => $linkModule
);
if (self::$flushed) self::renderList();
}
@@ -59,25 +84,36 @@ class Message
if (empty(self::$list))
return;
// Ajax
- if (AJAX) {
- foreach (self::$list as $item) {
- $message = Dictionary::getMessage($item['id']);
- foreach ($item['params'] as $index => $text) {
- $message = str_replace('{{' . $index . '}}', '' . htmlspecialchars($text) . '', $message);
- }
- echo Render::parse('messagebox-' . $item['type'], array('message' => $message), 'main');
- }
- self::$list = array();
- return;
- }
- // Non-Ajax
+ $mangled = array();
foreach (self::$list as $item) {
- $message = Dictionary::getMessage($item['id']);
+ if (!preg_match('/^(\w+)\.(.+)$/', $item['id'], $out)) {
+ $message = 'Invalid Message ID format: ' . $item['id'];
+ } else {
+ $message = Dictionary::getMessage($out[1], $out[2]);
+ }
foreach ($item['params'] as $index => $text) {
$message = str_replace('{{' . $index . '}}', '' . htmlspecialchars($text) . '', $message);
}
- Render::addTemplate('messagebox-' . $item['type'], array('message' => $message), 'main');
- self::$alreadyDisplayed[] = $item;
+ if ($item['link'] && isset($out[1])) {
+ $item['link'] = $out[1];
+ }
+ $mangled[] = array(
+ 'type' => $item['type'],
+ 'icon' => $item['icon'],
+ 'message' => $message,
+ 'link' => $item['link']
+ );
+ }
+ if (AJAX) {
+ foreach ($mangled as $entry) {
+ echo Render::parse('messagebox', $entry, 'main');
+ }
+ } else {
+ // Non-Ajax
+ foreach ($mangled as $entry) {
+ Render::addTemplate('messagebox', $entry, 'main');
+ }
+ self::$alreadyDisplayed = array_merge(self::$alreadyDisplayed, self::$list);
}
self::$list = array();
}
@@ -90,7 +126,11 @@ class Message
{
$return = '';
foreach (self::$list as $item) {
- $message = Dictionary::getMessage($item['id']);
+ if (!preg_match('/^(\w+)\.(.+)$/', $item['id'], $out)) {
+ $message = 'Invalid Message ID format: ' . $item['id'];
+ } else {
+ $message = Dictionary::getMessage($out[1], $out[2]);
+ }
foreach ($item['params'] as $index => $text) {
$message = str_replace('{{' . $index . '}}', $text, $message);
}
@@ -110,7 +150,11 @@ class Message
$messages = is_array($_REQUEST['message']) ? $_REQUEST['message'] : array($_REQUEST['message']);
foreach ($messages as $message) {
$data = explode('|', $message);
- if (count($data) < 2 || !preg_match('/^(error|warning|info|success)$/', $data[0])) continue;
+ if (substr($data[0], -1) === '@') {
+ $data[0] = substr($data[0], 0, -1);
+ array_splice($data, 1, 0, true);
+ }
+ if (count($data) < 2 || !preg_match('/^(danger|warning|info|success)$/', $data[0])) continue;
self::add($data[0], $data[1], array_slice($data, 1));
}
}
@@ -123,6 +167,9 @@ class Message
{
$parts = array();
foreach (array_merge(self::$list, self::$alreadyDisplayed) as $item) {
+ if (isset($item['link']) && $item['link']) {
+ $item['type'] .= '@';
+ }
$str = 'message[]=' . urlencode($item['type'] . '|' .$item['id']);
if (!empty($item['params'])) {
$str .= '|' . urlencode(implode('|', $item['params']));
diff --git a/inc/module.inc.php b/inc/module.inc.php
index 246505b5..13d9c1e4 100644
--- a/inc/module.inc.php
+++ b/inc/module.inc.php
@@ -22,8 +22,9 @@ class Module
/**
* Check whether given module is available, that is, all dependencies are
- * met. If the module is available, it will be activated, so all it's classes
- * are available through the auto-loader.
+ * met. If the module is available, it will be activated, so all its classes
+ * are available through the auto-loader, and any js or css is added to the
+ * final page output.
*
* @param string $moduleId module to check
* @return bool true if module is available and activated
@@ -88,6 +89,20 @@ class Module
return self::$modules;
}
+ /**
+ * @return \Module[] List of modules that have been activated
+ */
+ public static function getActivated()
+ {
+ $ret = array();
+ foreach (self::$modules as $module) {
+ if ($module->activated) {
+ $ret[] = $module;
+ }
+ }
+ return $ret;
+ }
+
public static function init()
{
if (self::$modules !== false)
@@ -97,7 +112,7 @@ class Module
return;
self::$modules = array();
while (($dir = readdir($dh)) !== false) {
- if (empty($dir) || preg_match('/[^a-zA-Z0-9]/', $dir))
+ if (empty($dir) || preg_match('/[^a-zA-Z0-9_]/', $dir))
continue;
if (!is_file('modules/' . $dir . '/config.json'))
continue;
diff --git a/inc/property.inc.php b/inc/property.inc.php
index 13e3c66d..eae5033c 100644
--- a/inc/property.inc.php
+++ b/inc/property.inc.php
@@ -185,4 +185,10 @@ class Property
return self::get('password-type', 'password');
}
+
+ public static function getIpxeDefault()
+ {
+ return self::get('default-ipxe');
+ }
+
}
diff --git a/inc/render.inc.php b/inc/render.inc.php
index 5fc5be92..b422d7f9 100644
--- a/inc/render.inc.php
+++ b/inc/render.inc.php
@@ -46,9 +46,8 @@ class Render
public static function output()
{
Header('Content-Type: text/html; charset=utf-8');
- $zip = isset($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false);
- if ($zip)
- ob_start();
+ $modules = Module::getActivated();
+ ob_start('ob_gzhandler');
echo
'
@@ -59,9 +58,16 @@ class Render
-
+ ';
+ // Include any module specific styles
+ foreach ($modules as $module) {
+ $file = $module->getDir() . '/style.css';
+ if (file_exists($file)) {
+ echo '';
+ }
+ }
+ echo '
-
@@ -80,20 +86,21 @@ class Render
- ',
+
+ ';
+ foreach ($modules as $module) {
+ $file = $module->getDir() . '/clientscript.js';
+ if (file_exists($file)) {
+ echo '';
+ }
+ }
+ echo
self::$footer
,
'