From acdd2013a7c660340fabb5fb55be1e78103388c6 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Fri, 03 Sep 2010 09:10:37 -0400
Subject: [PATCH] FS#1262 - client menu depending on limits

---
 interface/lib/classes/auth.inc.php      |   30 ++++
 interface/web/mail/lib/module.conf.php  |  143 ++++++++++++++---------
 interface/web/sites/lib/module.conf.php |  187 +++++++++++++++++--------------
 3 files changed, 218 insertions(+), 142 deletions(-)

diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index a264169..0315ed9 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -29,6 +29,12 @@
 */
 
 class auth {
+	var $client_limits = null;
+
+	public function get_user_id()
+	{
+		return $_SESSION['s']['user']['userid'];
+	}
 	
 	public function is_admin() {
 		if($_SESSION['s']['user']['typ'] == 'admin') {
@@ -36,7 +42,7 @@
 		} else {
 			return false;
 		}
-	}
+	}	
 	
 	public function has_clients($userid) {
 		global $app, $conf;
@@ -69,6 +75,25 @@
 			return false;
 		}
 	}
+
+	//** This function returns given client limit as integer, -1 means no limit
+	public function get_client_limit($userid, $limitname)
+	{
+		global $app;
+		
+		// simple query cache
+		if($this->client_limits===null) 
+			$this->client_limits = $app->db->queryOneRecord("SELECT client.* FROM sys_user, client WHERE sys_user.userid = $userid AND sys_user.client_id = client.client_id");
+		
+		// isn't client -> no limit
+		if(!$this->client_limits)
+			return -1;
+		
+		if(isset($this->client_limits['limit_'.$limitname]))
+			return $this->client_limits['limit_'.$limitname];
+		else
+			trigger_error('Wrong limit identifier');		
+	}	
 	
 	//** This function removes a given group id from a given user.
 	public function remove_group_from_user($userid,$groupid) {
@@ -99,8 +124,7 @@
 			exit;
 		}
 	}
-	
-	
+		
 }
 
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php
index a0f1b74..c69fe41 100644
--- a/interface/web/mail/lib/module.conf.php
+++ b/interface/web/mail/lib/module.conf.php
@@ -1,5 +1,7 @@
 <?php
 
+$userid=$app->auth->get_user_id();
+
 $module['name'] 		= 'mail';
 $module['title'] 		= 'top_menu_email';
 $module['template'] 	= 'module.tpl.htm';
@@ -10,60 +12,86 @@
 //**** Email accounts menu
 $items = array();
 
-$items[] = array( 'title' 	=> 'Domain',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/mail_domain_list.php',
-				  'html_id' => 'mail_domain_list');
+if($app->auth->get_client_limit($userid,'maildomain') != 0)
+{
+	$items[] = array( 'title' 	=> 'Domain',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_domain_list.php',
+					  'html_id' => 'mail_domain_list');
+}
+	
+if($app->auth->get_client_limit($userid,'mailaliasdomain') != 0)
+{
+	$items[] = array( 'title' 	=> 'Domain Alias',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_aliasdomain_list.php',
+					  'html_id' => 'mail_aliasdomain_list');
+}
 
-$items[] = array( 'title' 	=> 'Domain Alias',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/mail_aliasdomain_list.php',
-				  'html_id' => 'mail_aliasdomain_list');
+if($app->auth->get_client_limit($userid,'mailbox') != 0)
+{
+	$items[] = array( 'title' 	=> 'Email Mailbox',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_user_list.php',
+					  'html_id' => 'mail_user_list');
+}
 
-$items[] = array( 'title' 	=> 'Email Mailbox',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/mail_user_list.php',
-				  'html_id' => 'mail_user_list');
+if($app->auth->get_client_limit($userid,'mailalias') != 0)
+{
+	$items[] = array( 'title' 	=> 'Email Alias',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_alias_list.php',
+					  'html_id' => 'mail_alias_list');
+}
 
-$items[] = array( 'title' 	=> 'Email Alias',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/mail_alias_list.php',
-				  'html_id' => 'mail_alias_list');
+if($app->auth->get_client_limit($userid,'mailforward') != 0)
+{
+	$items[] = array( 'title' 	=> 'Email Forward',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_forward_list.php',
+					  'html_id' => 'mail_forward_list');
+}
 
-$items[] = array( 'title' 	=> 'Email Forward',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/mail_forward_list.php',
-				  'html_id' => 'mail_forward_list');
+if($app->auth->get_client_limit($userid,'mailcatchall') != 0)
+{
+	$items[] = array( 'title' 	=> 'Email Catchall',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_domain_catchall_list.php',
+					  'html_id' => 'mail_domain_catchall_list');
+}
 
-$items[] = array( 'title' 	=> 'Email Catchall',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/mail_domain_catchall_list.php',
-				  'html_id' => 'mail_domain_catchall_list');
+if($app->auth->get_client_limit($userid,'mailrouting') != 0)
+{
+	$items[] = array( 'title' 	=> 'Email Routing',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_transport_list.php',
+					  'html_id' => 'mail_transport_list');
+}
 
-$items[] = array( 'title' 	=> 'Email Routing',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/mail_transport_list.php',
-				  'html_id' => 'mail_transport_list');
-
-$module['nav'][] = array(	'title'	=> 'Email Accounts',
-							'open' 	=> 1,
-							'items'	=> $items);
+if(count($items))
+{
+	$module['nav'][] = array(	'title'	=> 'Email Accounts',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
 
 //**** Spamfilter menu
 $items = array();
 
-$items[] = array( 'title' 	=> 'Whitelist',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/spamfilter_whitelist_list.php',
-				  'html_id' => 'spamfilter_whitelist_list');
+if($app->auth->get_client_limit($userid,'spamfilter_wblist') != 0)
+{
+	$items[] = array( 'title' 	=> 'Whitelist',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/spamfilter_whitelist_list.php',
+					  'html_id' => 'spamfilter_whitelist_list');
+		
+	$items[] = array( 'title' 	=> 'Blacklist',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/spamfilter_blacklist_list.php',
+					  'html_id' => 'spamfilter_blacklist_list');
+}
 
-
-$items[] = array( 'title' 	=> 'Blacklist',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/spamfilter_blacklist_list.php',
-				  'html_id' => 'spamfilter_blacklist_list');
-
-if($_SESSION['s']['user']['typ'] == 'admin') {
+if($app->auth->is_admin()) {
 
 	$items[] = array( 	'title' 	=> 'User / Domain',
 				  		'target' 	=> 'content',
@@ -79,23 +107,30 @@
 //				  		'target' 	=> 'content',
 //				  		'link'	    => 'mail/spamfilter_config_list.php');
 }
-$module['nav'][] = array(	'title'	=> 'Spamfilter',
-							'open' 	=> 1,
-							'items'	=> $items);
+
+if(count($items))
+{
+	$module['nav'][] = array(	'title'	=> 'Spamfilter',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
 
 //**** Fetchmail menu
 $items = array();
 
-$items[] = array( 'title' 	=> 'Fetchmail',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/mail_get_list.php',
-				  'html_id' => 'mail_get_list');
+if($app->auth->get_client_limit($userid,'fetchmail') != 0)
+{
+	$items[] = array( 'title' 	=> 'Fetchmail',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_get_list.php',
+					  'html_id' => 'mail_get_list');
+		
+	$module['nav'][] = array(	'title'	=> 'Fetchmail',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
 
 
-
-$module['nav'][] = array(	'title'	=> 'Fetchmail',
-							'open' 	=> 1,
-							'items'	=> $items);
 
 //**** Statistics menu
 $items = array();
diff --git a/interface/web/sites/lib/module.conf.php b/interface/web/sites/lib/module.conf.php
index 7311d61..46502ce 100644
--- a/interface/web/sites/lib/module.conf.php
+++ b/interface/web/sites/lib/module.conf.php
@@ -1,5 +1,7 @@
 <?php
 
+$userid=$app->auth->get_user_id();
+
 $module["name"] 		= "sites";
 $module["title"] 		= "top_menu_sites";
 $module["template"] 	= "module.tpl.htm";
@@ -9,112 +11,127 @@
 /*
 	Websites menu
 */
+$items=array();
 
-$items[] = array( 'title' 	=> "Website",
-		'target' 	=> 'content',
-		'link'	=> 'sites/web_domain_list.php',
-		'html_id' => 'domain_list');
+if($app->auth->get_client_limit($userid,'web_domain') != 0)
+{
+	$items[] = array( 'title' 	=> "Website",
+			'target' 	=> 'content',
+			'link'	=> 'sites/web_domain_list.php',
+			'html_id' => 'domain_list');
+}
 
+if($app->auth->get_client_limit($userid,'web_subdomain') != 0)
+{
+	$items[] = array( 'title' 	=> "Subdomain",
+			'target' 	=> 'content',
+			'link'	=> 'sites/web_subdomain_list.php',
+			'html_id' => 'subdomain_list');
+}
 
-$items[] = array( 'title' 	=> "Subdomain",
-		'target' 	=> 'content',
-		'link'	=> 'sites/web_subdomain_list.php',
-		'html_id' => 'subdomain_list');
+if($app->auth->get_client_limit($userid,'web_aliasdomain') != 0)
+{
+	$items[] = array( 'title'   => "Aliasdomain",
+			'target'  => 'content',
+			'link'    => 'sites/web_aliasdomain_list.php',
+			'html_id' => 'aliasdomain_list');
+}
 
+if(count($items))
+{
+	$module["nav"][] = array(	'title'	=> 'Websites',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
 
-$items[] = array( 'title'   => "Aliasdomain",
-		'target'  => 'content',
-		'link'    => 'sites/web_aliasdomain_list.php',
-		'html_id' => 'aliasdomain_list');
-
-$module["nav"][] = array(	'title'	=> 'Websites',
-		'open' 	=> 1,
-		'items'	=> $items);
-
-// clean up
-unset($items);
 
 /*
 	FTP User menu
 */
-
-$items[] = array( 'title' 	=> "FTP-User",
-		'target' 	=> 'content',
-		'link'	=> 'sites/ftp_user_list.php',
-		'html_id' => 'ftp_user_list');
-
-
-$module["nav"][] = array(	'title'	=> 'FTP',
-		'open' 	=> 1,
-		'items'	=> $items);
-
-// clean up
-unset($items);
+if($app->auth->get_client_limit($userid,'ftp_user') != 0)
+{
+	$items=array();
+	
+	$items[] = array( 'title' 	=> "FTP-User",
+					  'target' 	=> 'content',
+					  'link'	=> 'sites/ftp_user_list.php',
+					  'html_id' => 'ftp_user_list');
+	
+	
+	$module["nav"][] = array(	'title'	=> 'FTP',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
 
 /*
-	Shell User menu
+	FTP User menu
 */
-
-$items[] = array( 'title' 	=> "Shell-User",
-		'target' 	=> 'content',
-		'link'	=> 'sites/shell_user_list.php',
-		'html_id' => 'shell_user_list');
-
-
-$module["nav"][] = array(	'title'	=> 'Shell',
-		'open' 	=> 1,
-		'items'	=> $items);
-
-// clean up
-unset($items);
-
-/*
- *	Webdav User menu
- */
-$items[] = array( 'title' 	=> "Webdav-User",
-		'target' 	=> 'content',
-		'link'	=> 'sites/webdav_user_list.php',
-		'html_id' => 'webdav_user_list');
-
-
-$module["nav"][] = array(	'title'	=> 'Webdav',
-		'open' 	=> 1,
-		'items'	=> $items);
-
-// clean up
-unset($items);
-
+if($app->auth->get_client_limit($userid,'shell_user') != 0)
+{
+	$items=array();
+	
+	$items[] = array( 'title' 	=> "Shell-User",
+					  'target' 	=> 'content',
+					  'link'	=> 'sites/shell_user_list.php',
+					  'html_id' => 'shell_user_list');	
+	
+	$module["nav"][] = array(	'title'	=> 'Shell',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
 
 /*
 	Databases menu
 */
+if($app->auth->get_client_limit($userid,'database') != 0)
+{
+	$items=array();
+	
+	$items[] = array( 'title' 	=> "Database",
+					  'target' 	=> 'content',
+					  'link'	=> 'sites/database_list.php',
+					  'html_id' => 'database_list'
+					  );	
+	
+	$module["nav"][] = array(	'title'	=> 'Database',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
 
-$items[] = array( 'title' 	=> "Database",
-		'target' 	=> 'content',
-		'link'	=> 'sites/database_list.php',
-		'html_id' => 'database_list');
-
-
-$module["nav"][] = array(	'title'	=> 'Database',
-		'open' 	=> 1,
-		'items'	=> $items);
-
+/*
+ *	Webdav User menu
+ */
+if($app->auth->get_client_limit($userid,'webdav_user') != 0)
+{
+	$items=array();
+	
+	$items[] = array( 'title' 	=> "Webdav-User",
+			'target' 	=> 'content',
+			'link'	=> 'sites/webdav_user_list.php',
+			'html_id' => 'webdav_user_list');
+	
+	
+	$module["nav"][] = array(	'title'	=> 'Webdav',
+			'open' 	=> 1,
+			'items'	=> $items);
+}
 
 /*
     Cron menu
 */
-$items = array();
-
-$items[] = array( 'title'   => "Cron Jobs",
-		'target'  => 'content',
-		'link'    => 'sites/cron_list.php',
-		'html_id' => 'cron_list');
-
-
-$module["nav"][] = array(   'title' => 'Cron',
-		'open'  => 1,
-		'items' => $items);
-
+if($app->auth->get_client_limit($userid,'cron') != 0)
+{
+	$items = array();	
+	
+	$items[] = array( 'title'   => "Cron Jobs",
+	                  'target'  => 'content',
+	                  'link'    => 'sites/cron_list.php',
+					  'html_id' => 'cron_list');	
+	
+	$module["nav"][] = array(   'title' => 'Cron',
+	                            'open'  => 1,
+	                            'items' => $items);
+}
 
 //**** Statistics menu
 $items = array();

--
Gitblit v1.9.1