From 2db42a8180b716de7fa83ed9cd96dbe9b59e9aff Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Wed, 5 May 2010 19:57:13 +0000
Subject: [PATCH] The very first version of a dashboard (very very simple, just
 that we have some...)

---
 interface/lib/lang/de.lng                     |   1 +
 interface/lib/lang/en.lng                     |   1 +
 interface/web/dashboard/dashboard.php         | 119 ++++++++++++++++++
 interface/web/dashboard/lib/admin.conf.php    |  29 +++++
 interface/web/dashboard/lib/lang/de.lng       |   4 +
 interface/web/dashboard/lib/lang/en.lng       |   4 +
 interface/web/dashboard/lib/module.conf.php   |  46 +++++++
 .../web/dashboard/templates/dashboard.htm     |  36 ++++++
 interface/web/nav.php                         |  26 ++--
 .../themes/default/css/navigation/nav_top.css |   4 +
 .../default/css/screen/content_ispc.css       |  30 +++++
 .../themes/default/icons/x32/dashboard.png    | Bin 0 -> 2676 bytes
 .../themes/default/icons/x64/dashboard.png    | Bin 0 -> 7482 bytes
 .../default_64_navimg/css/additional.css      |   5 +
 14 files changed, 296 insertions(+), 9 deletions(-)
 create mode 100644 interface/web/dashboard/dashboard.php
 create mode 100644 interface/web/dashboard/lib/admin.conf.php
 create mode 100644 interface/web/dashboard/lib/lang/de.lng
 create mode 100644 interface/web/dashboard/lib/lang/en.lng
 create mode 100644 interface/web/dashboard/lib/module.conf.php
 create mode 100644 interface/web/dashboard/templates/dashboard.htm
 create mode 100644 interface/web/themes/default/icons/x32/dashboard.png
 create mode 100644 interface/web/themes/default/icons/x64/dashboard.png

diff --git a/interface/lib/lang/de.lng b/interface/lib/lang/de.lng
index 9d2a67029..247e6a454 100644
--- a/interface/lib/lang/de.lng
+++ b/interface/lib/lang/de.lng
@@ -33,4 +33,5 @@ $wb['top_menu_tools'] = 'Tools';
 $wb['top_menu_help'] = 'Support';
 $wb['top_menu_billing'] = 'Billing';
 $wb['top_menu_domain'] = 'Domänen';
+$wb['top_menu_dashboard'] = 'Startseite';
 ?>
diff --git a/interface/lib/lang/en.lng b/interface/lib/lang/en.lng
index da7caf12f..1693bb154 100644
--- a/interface/lib/lang/en.lng
+++ b/interface/lib/lang/en.lng
@@ -33,5 +33,6 @@ $wb['top_menu_tools'] = 'Tools';
 $wb['top_menu_help'] = 'Help';
 $wb['top_menu_billing'] = 'Billing';
 $wb['top_menu_domain'] = 'Domains';
+$wb['top_menu_dashboard'] = 'Home';
 $wb['toolsarea_head_txt'] = 'Tools';
 ?>
diff --git a/interface/web/dashboard/dashboard.php b/interface/web/dashboard/dashboard.php
new file mode 100644
index 000000000..53a745c6e
--- /dev/null
+++ b/interface/web/dashboard/dashboard.php
@@ -0,0 +1,119 @@
+<?php
+/*
+Copyright (c) 2010 Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dashboard');
+
+//* Loading Template
+$app->uses('tpl');
+$app->tpl->newTemplate("templates/dashboard.htm");
+
+//* load language file
+$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'.lng';
+include($lng_file);
+$app->tpl->setVar($wb);
+
+//* set Default - Values
+$app->tpl_defaults();
+
+/*
+ * Let the user welcome
+*/
+$welcome = sprintf($wb['welcome_user_txt'], $_SESSION['s']['user']['username']);
+$app->tpl->setVar('welcome_user', $welcome);
+
+
+/*
+ * ToDo: Display errors, warnings and hints
+*/
+///*
+// * If there is any error to display, do it...
+//*/
+//$error = array();
+//
+//$error[] = array('error_msg' => 'EClaus1');
+//$error[] = array('error_msg' => 'EEClaus2');
+//$error[] = array('error_msg' => 'EClaus3');
+//$error[] = array('error_msg' => 'EClaus4');
+//
+//$app->tpl->setloop('error', $error);
+//
+///*
+// * If there is any warning to display, do it...
+//*/
+//$warning = array();
+//
+//$warning[] = array('warning_msg' => 'WClaus1');
+//$warning[] = array('warning_msg' => 'WWClaus2');
+//$warning[] = array('warning_msg' => 'WClaus3');
+//$warning[] = array('warning_msg' => 'WClaus4');
+//
+//$app->tpl->setloop('warning', $warning);
+//
+///*
+// * If there is any information to display, do it...
+//*/
+//$info = array();
+//
+//$info[] = array('info_msg' => 'IClaus1');
+//$info[] = array('info_msg' => 'IClaus2');
+//$info[] = array('info_msg' => 'IClaus3');
+//$info[] = array('info_msg' => 'IClaus4');
+//
+//$app->tpl->setloop('info', $info);
+
+/*
+ * Show all modules, the user is allowed to use
+*/
+$modules = explode(',', $_SESSION['s']['user']['modules']);
+$mod = array();
+if(is_array($modules)) {
+	foreach($modules as $mt) {
+		if(is_file('../' . $mt . '/lib/module.conf.php')) {
+			if(!preg_match("/^[a-z]{2,20}$/i", $mt)) die('module name contains unallowed chars.');
+			include_once('../' . $mt.'/lib/module.conf.php');
+			/* We don't want to show the dashboard */
+			if ($mt != 'dashboard') {
+				$mod[] = array(	'modules_title' 	=> $app->lng($module['title']),
+						'modules_startpage'	=> $module['startpage'],
+						'modules_name'  	=> $module['name']);
+			}
+		}
+	}
+
+	$app->tpl->setloop('modules', $mod);
+}
+
+//* Do Output
+$app->tpl->pparse();
+
+?>
\ No newline at end of file
diff --git a/interface/web/dashboard/lib/admin.conf.php b/interface/web/dashboard/lib/admin.conf.php
new file mode 100644
index 000000000..584f28bad
--- /dev/null
+++ b/interface/web/dashboard/lib/admin.conf.php
@@ -0,0 +1,29 @@
+<?php
+/*
+Copyright (c) 2010 Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+?>
\ No newline at end of file
diff --git a/interface/web/dashboard/lib/lang/de.lng b/interface/web/dashboard/lib/lang/de.lng
new file mode 100644
index 000000000..79ffff06e
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/de.lng
@@ -0,0 +1,4 @@
+<?php
+$wb['welcome_user_txt'] = "Herzlich Willkommen %s";
+$wb['available_modules_txt'] = "Verfügbare Module";
+?>
diff --git a/interface/web/dashboard/lib/lang/en.lng b/interface/web/dashboard/lib/lang/en.lng
new file mode 100644
index 000000000..177fad041
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/en.lng
@@ -0,0 +1,4 @@
+<?php
+$wb['welcome_user_txt'] = "Welcome %s";
+$wb['available_modules_txt'] = "Available Modules";
+?>
diff --git a/interface/web/dashboard/lib/module.conf.php b/interface/web/dashboard/lib/module.conf.php
new file mode 100644
index 000000000..28f47a26a
--- /dev/null
+++ b/interface/web/dashboard/lib/module.conf.php
@@ -0,0 +1,46 @@
+<?php
+/*
+Copyright (c) 2010 Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+$module['name'] 		= 'dashboard'; 
+$module['title'] 		= 'top_menu_dashboard';
+$module['template'] 	= 'dashboard.tpl.htm';
+$module['startpage'] 	= 'dashboard/dashboard.php';
+$module['tab_width']    = '';
+
+//$items = array();
+//
+//$items[] = array( 'title' 	=> 'Dashboard 1',
+//				  'target' 	=> 'content',
+//				  'link'	=> 'dashboard/dashboard.php');
+//
+//$module['nav'][] = array(	'title'	=> 'Dashboard 2',
+//							'open' 	=> 1,
+//							'items'	=> $items);
+
+?>
\ No newline at end of file
diff --git a/interface/web/dashboard/templates/dashboard.htm b/interface/web/dashboard/templates/dashboard.htm
new file mode 100644
index 000000000..190252b65
--- /dev/null
+++ b/interface/web/dashboard/templates/dashboard.htm
@@ -0,0 +1,36 @@
+<h1><tmpl_var name="welcome_user"></h1>
+
+<div class="panel panel_dashboard">
+	<div>
+		<tmpl_if name='error'>
+		<div class="systemmonitor-state state-error">
+			<tmpl_loop name="error">
+				<p>{tmpl_var name='error_msg'}</p>
+			</tmpl_loop>
+		</div>
+		</tmpl_if>
+		<tmpl_if name='warning'>
+		<div class="systemmonitor-state state-warning">
+			<tmpl_loop name="warning">
+				<p>{tmpl_var name='warning_msg'}</p>
+			</tmpl_loop>
+		</div>
+		</tmpl_if>
+		<tmpl_if name='info'>
+		<div class="systemmonitor-state state-info">
+			<tmpl_loop name="info">
+				<p>{tmpl_var name='info_msg'}</p>
+			</tmpl_loop>
+		</div>
+		</tmpl_if>
+	</div>
+	<p>&nbsp;</p>
+	<h2>{tmpl_var name='available_modules_txt'}</h2>
+	<tmpl_loop name='modules'>
+		<div class="dashboard-modules {tmpl_var name='modules_name'}">
+			<a href="#" onclick="capp('{tmpl_var name='modules_name'}')">
+			{tmpl_var name='modules_title'}
+			</a>
+		</div>
+	</tmpl_loop>
+</div>
diff --git a/interface/web/nav.php b/interface/web/nav.php
index 73a637172..07eb9326e 100644
--- a/interface/web/nav.php
+++ b/interface/web/nav.php
@@ -35,13 +35,21 @@ $app->uses('tpl');
 
 //** Top Naviation
 if(isset($_GET['nav']) && $_GET['nav'] == 'top') {
-	
+
 	$app->tpl->newTemplate('topnav.tpl.htm');
-	
+
 	//* Check User Login and current module
 	if(isset($_SESSION["s"]["user"]) && $_SESSION["s"]["user"]['active'] == 1 && is_array($_SESSION['s']['module'])) {
 		//* Loading modules of the user and building top navigation
 		$modules = explode(',', $_SESSION['s']['user']['modules']);
+		/*
+		 * If the dashboard is in the list of modules it always has to be the first!
+		 */
+		if (in_array('dashboard', $modules)) {
+			$key = array_search('dashboard', $modules);
+			unset($modules[$key]);
+			$modules = array_merge(array('dashboard'), $modules);
+		}
 		if(is_array($modules)) {
 			foreach($modules as $mt) {
 				if(is_file($mt.'/lib/module.conf.php')) {
@@ -49,8 +57,8 @@ if(isset($_GET['nav']) && $_GET['nav'] == 'top') {
 					include_once($mt.'/lib/module.conf.php');
 					$active = ($module['name'] == $_SESSION['s']['module']['name']) ? 1 : 0;
 					$topnav[] = array(	'title' 	=> $app->lng($module['title']),
-					  				    'active' 	=> $active,
-									    'module'	=> $module['name']);
+							'active' 	=> $active,
+							'module'	=> $module['name']);
 				}
 			}
 		}
@@ -59,21 +67,21 @@ if(isset($_GET['nav']) && $_GET['nav'] == 'top') {
 		include_once('login/lib/module.conf.php');
 		$_SESSION['s']['module'] = $module;
 		$topnav[] = array(	'title' 	=> 'Login',
-				  			'active' 	=> 1);
+				'active' 	=> 1);
 		$module = null;
 		unset($module);
 	}
 
 	//* Topnavigation
 	$app->tpl->setLoop('nav_top',$topnav);
-	
+
 }
 
 //** Side Naviation
 if(isset($_GET['nav']) && $_GET['nav'] == 'side') {
-	
+
 	$app->tpl->newTemplate('sidenav.tpl.htm');
-	
+
 	//* translating module navigation
 	$nav_translated = array();
 	if(isset($_SESSION['s']['module']['nav']) && is_array($_SESSION['s']['module']['nav'])) {
@@ -93,7 +101,7 @@ if(isset($_GET['nav']) && $_GET['nav'] == 'side') {
 	}
 
 	$app->tpl->setLoop('nav_left',$nav_translated);
-	
+
 }
 
 $app->tpl_defaults();
diff --git a/interface/web/themes/default/css/navigation/nav_top.css b/interface/web/themes/default/css/navigation/nav_top.css
index 1b5207563..13dc1c898 100644
--- a/interface/web/themes/default/css/navigation/nav_top.css
+++ b/interface/web/themes/default/css/navigation/nav_top.css
@@ -95,4 +95,8 @@
 		background-image: url('../../icons/x32/domain.png') !important;
 	}
 
+	.topnav-dashboard {
+		background-image: url('../../icons/x32/dashboard.png') !important;
+	}
+
 }
\ No newline at end of file
diff --git a/interface/web/themes/default/css/screen/content_ispc.css b/interface/web/themes/default/css/screen/content_ispc.css
index 0f52f10cc..10803ced9 100644
--- a/interface/web/themes/default/css/screen/content_ispc.css
+++ b/interface/web/themes/default/css/screen/content_ispc.css
@@ -230,6 +230,36 @@
 		padding:0px 5px;
 	}
 
+	/* Dashboard */
+	.dashboard-modules {
+		float:left;
+		width:100px;
+		height: 20px;
+		border:1px dotted #888888;
+		background-color: #cccccc;
+		margin:10px;
+		padding:10px;
+		background-position: center 5px;
+		background-repeat: no-repeat;
+		padding-top: 70px;
+		text-align: center;
+	}
+
+	.dashboard-modules a{
+		color: Black;
+		font-weight: bold;
+	}
+
+	.dashboard-modules.admin { background-image: url('../../icons/x64/system.png') !important; }
+	.dashboard-modules.client { background-image: url('../../icons/x64/client.png') !important; }
+	.dashboard-modules.mail { background-image: url('../../icons/x64/email.png') !important; }
+	.dashboard-modules.monitor { background-image: url('../../icons/x64/monitor.png') !important; }
+	.dashboard-modules.dns { background-image: url('../../icons/x64/dns.png') !important; }
+	.dashboard-modules.tools { background-image: url('../../icons/x64/tools.png') !important; }
+	.dashboard-modules.help { background-image: url('../../icons/x64/help.png') !important; }
+	.dashboard-modules.domain { background-image: url('../../icons/x64/domain.png') !important; }
+	.dashboard-modules.sites { background-image: url('../../icons/x64/sites.png') !important; }
+
 	/* Image-Replacement */
 	.swap { background-repeat:no-repeat; }
 	.swap span { display:none; height:16px; } 
diff --git a/interface/web/themes/default/icons/x32/dashboard.png b/interface/web/themes/default/icons/x32/dashboard.png
new file mode 100644
index 0000000000000000000000000000000000000000..0094f836cd7a745b5023217afff165387ada1af9
GIT binary patch
literal 2676
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

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/icons/x64/dashboard.png b/interface/web/themes/default/icons/x64/dashboard.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b20e566319bbe83fd14ec0de677797a6e34ab2e
GIT binary patch
literal 7482
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
a5FnelMYV)Itlk$t0ekDCggQ%7+W!G#Ge}+l

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default_64_navimg/css/additional.css b/interface/web/themes/default_64_navimg/css/additional.css
index 95798061d..a58c80716 100644
--- a/interface/web/themes/default_64_navimg/css/additional.css
+++ b/interface/web/themes/default_64_navimg/css/additional.css
@@ -52,4 +52,9 @@
 	.topnav-domain {
 		background-image: url('../../icons/x64/domain.png') !important;
 	}
+
+	.topnav-dashboard {
+		background-image: url('../../icons/x64/dashboard.png') !important;
+	}
+
 }
\ No newline at end of file
-- 
GitLab