Commit c71060dc authored by tbrehm's avatar tbrehm
Browse files

Implemented: FS#556 - See limits in control panel

Implemented: FS#951 - Dashboard module
parent 1ac4ff4c
......@@ -99,27 +99,44 @@ if($_SESSION["s"]["user"]["typ"] == 'admin') {
$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']);
}
}
/* Load the dashlets*/
$dashlet_list = array();
$handle = @opendir(ISPC_WEB_PATH.'/dashboard/dashlets');
while ($file = @readdir ($handle)) {
if ($file != '.' && $file != '..' && !is_dir($file)) {
$dashlet_name = substr($file,0,-4);
$dashlet_class = 'dashlet_'.$dashlet_name;
include_once(ISPC_WEB_PATH.'/dashboard/dashlets/'.$file);
$dashlet_list[$dashlet_name] = new $dashlet_class;
}
}
/* Which dashlets in which column */
/******************************************************************************/
$leftcol_dashlets = array('modules');
$rightcol_dashlets = array('limits');
/******************************************************************************/
$app->tpl->setloop('modules', $mod);
/* Fill the left column */
$leftcol = array();
foreach($leftcol_dashlets as $name) {
if(isset($dashlet_list[$name])) {
$leftcol[]['content'] = $dashlet_list[$name]->show();
}
}
$app->tpl->setloop('leftcol', $leftcol);
/* Fill the right columnn */
$rightcol = array();
foreach($rightcol_dashlets as $name) {
if(isset($dashlet_list[$name])) {
$rightcol[]['content'] = $dashlet_list[$name]->show();
}
}
$app->tpl->setloop('rightcol', $rightcol);
//* Do Output
$app->tpl->pparse();
......
<?php
class dashlet_limits {
function show() {
global $app, $conf;
$limits = array();
/* Limits to be shown*/
$limits[] = array('field' => 'limit_maildomain',
'db_table' => 'mail_domain',
'db_where' => '');
$limits[] = array('field' => 'limit_mailbox',
'db_table' => 'mail_user',
'db_where' => '');
$limits[] = array('field' => 'limit_mailalias',
'db_table' => 'mail_forwarding',
'db_where' => "type = 'alias'");
$limits[] = array('field' => 'limit_mailaliasdomain',
'db_table' => 'mail_forwarding',
'db_where' => "type = 'aliasdomain'");
$limits[] = array('field' => 'limit_mailforward',
'db_table' => 'mail_forwarding',
'db_where' => "type = 'forward'");
$limits[] = array('field' => 'limit_mailcatchall',
'db_table' => 'mail_forwarding',
'db_where' => "type = 'catchall'");
$limits[] = array('field' => 'limit_mailrouting',
'db_table' => 'mail_transport',
'db_where' => "");
$limits[] = array('field' => 'limit_mailfilter',
'db_table' => 'mail_user_filter',
'db_where' => "");
$limits[] = array('field' => 'limit_fetchmail',
'db_table' => 'mail_get',
'db_where' => "");
$limits[] = array('field' => 'limit_spamfilter_wblist',
'db_table' => 'spamfilter_wblist',
'db_where' => "");
$limits[] = array('field' => 'limit_spamfilter_user',
'db_table' => 'spamfilter_users',
'db_where' => "");
$limits[] = array('field' => 'limit_spamfilter_policy',
'db_table' => 'spamfilter_policy',
'db_where' => "");
$limits[] = array('field' => 'limit_web_domain',
'db_table' => 'web_domain',
'db_where' => "type = 'vhost'");
$limits[] = array('field' => 'limit_web_subdomain',
'db_table' => 'web_domain',
'db_where' => "type = 'subdomain'");
$limits[] = array('field' => 'limit_web_aliasdomain',
'db_table' => 'web_domain',
'db_where' => "type = 'aliasdomain'");
$limits[] = array('field' => 'limit_ftp_user',
'db_table' => 'ftp_user',
'db_where' => "");
$limits[] = array('field' => 'limit_shell_user',
'db_table' => 'shell_user',
'db_where' => "");
$limits[] = array('field' => 'limit_dns_zone',
'db_table' => 'dns_soa',
'db_where' => "");
$limits[] = array('field' => 'limit_dns_record',
'db_table' => 'dns_rr',
'db_where' => "");
$limits[] = array('field' => 'limit_database',
'db_table' => 'web_database',
'db_where' => "");
$limits[] = array('field' => 'limit_cron',
'db_table' => 'cron',
'db_where' => "");
$limits[] = array('field' => 'limit_client',
'db_table' => 'client',
'db_where' => "");
//* Loading Template
$app->uses('tpl,tform');
$tpl = new tpl;
$tpl->newTemplate("dashlets/templates/limits.htm");
$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_limits.lng';
include($lng_file);
$tpl->setVar($wb);
if($app->auth->is_admin()) {
$user_is_admin = 1;
} else {
$user_is_admin = 0;
}
$tpl->setVar('is_admin',$user_is_admin);
if($user_is_admin == 0) {
$client_group_id = $_SESSION["s"]["user"]["default_group"];
$client = $app->db->queryOneRecord("SELECT * FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
$rows = array();
foreach($limits as $limit) {
$field = $limit['field'];
if($client[$field] != 0) {
$value = ($client[$field] == '-1')?$wb['unlimited_txt']:$client[$field];
$rows[] = array('field' => $field,
'field_txt' => $wb[$field.'_txt'],
'value' => $value,
'usage' => $this->_get_limit_usage($limit));
}
}
$tpl->setLoop('rows',$rows);
}
return $tpl->grab();
}
function _get_limit_usage($limit) {
global $app;
$sql = "SELECT count(sys_userid) as number FROM ".$limit['db_table']." WHERE ";
if($limit['db_where'] != '') $sql .= $limit['db_where']." AND ";
$sql .= $app->tform->getAuthSQL('r');
$rec = $app->db->queryOneRecord($sql);
return $rec['number'];
}
}
?>
\ No newline at end of file
<?php
class dashlet_modules {
function show() {
global $app, $conf;
//* Loading Template
$app->uses('tpl');
$tpl = new tpl;
$tpl->newTemplate("dashlets/templates/modules.htm");
$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_modules.lng';
include($lng_file);
$tpl->setVar($wb);
/*
* 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']);
}
}
}
$tpl->setloop('modules', $mod);
}
return $tpl->grab();
}
}
?>
\ No newline at end of file
<h2>{tmpl_var name='limits_txt'}</h2>
<div style="width:350px;">
<table class="list">
<tmpl_loop name='rows'>
<tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
<td>{tmpl_var name='field_txt'}</td>
<td>{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}</td>
</tr>
</tmpl_loop>
</table>
</div>
\ No newline at end of file
<h2>{tmpl_var name='available_modules_txt'}</h2>
<div style="width:350px;">
<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>
\ No newline at end of file
<?php
$wb['limits_txt'] = "Account limits";
$wb['of_txt'] = "of";
$wb['unlimited_txt'] = "Unlimited";
$wb['limit_maildomain_txt'] = "Number of email domains";
$wb['limit_mailbox_txt'] = "Number of mailboxes";
$wb["limit_mailalias_txt"] = 'Number of email aliases';
$wb["limit_mailaliasdomain_txt"] = 'Number of domain aliases';
$wb["limit_mailforward_txt"] = 'Number of email forwarders';
$wb["limit_mailcatchall_txt"] = 'Number of email catchall accounts';
$wb["limit_mailrouting_txt"] = 'Number of email routes';
$wb["limit_mailfilter_txt"] = 'Number of email filters';
$wb["limit_fetchmail_txt"] = 'Number of fetchmail accounts';
$wb["limit_spamfilter_wblist_txt"] = 'Number of spamfilter white / blacklist filters';
$wb["limit_spamfilter_user_txt"] = 'Number of spamfilter users';
$wb["limit_spamfilter_policy_txt"] = 'Number of spamfilter policys';
$wb["limit_cron_txt"] = 'Number of cron jobs';
$wb["limit_web_domain_txt"] = 'Number of web domains';
$wb["limit_web_aliasdomain_txt"] = 'Number of web aliasdomains';
$wb["limit_web_subdomain_txt"] = 'Number of web subdomains';
$wb["limit_ftp_user_txt"] = 'Number of FTP users';
$wb["limit_dns_zone_txt"] = 'Number of DNS zones';
$wb["limit_dns_record_txt"] = 'Number DNS records';
$wb["limit_shell_user_txt"] = 'Number of Shell users';
$wb["limit_webdav_user_txt"] = 'Number of Webdav users';
$wb["limit_client_txt"] = 'Number of Clients';
$wb["limit_database_txt"] = 'Number of Databases';
?>
<?php
$wb['available_modules_txt'] = "Available Modules";
?>
<h1><tmpl_var name="welcome_user"></h1>
<hr />
<div class="panel panel_dashboard">
<div>
<tmpl_if name='error'>
......@@ -25,15 +25,16 @@
</div>
</tmpl_if>
</div>
<div style="float:left; width:350px;">
<tmpl_loop name='leftcol'>
{tmpl_var name='content'}
<p>&nbsp;</p>
</tmpl_loop>
</div>
<div style="float:left; width:350px;">
<tmpl_loop name='rightcol'>
{tmpl_var name='content'}
<p>&nbsp;</p>
<h2>{tmpl_var name='available_modules_txt'}</h2>
<div style="width:700px;">
<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>
</div>
......
......@@ -233,8 +233,8 @@
/* Dashboard */
.dashboard-modules {
float:left;
width:100px;
height: 100px;
width:60px;
height: 60px;
border:1px dotted #888888;
background-color: #cccccc;
margin:10px;
......@@ -248,20 +248,24 @@
display:block;
font-weight:bold;
height:30px;
padding-top:70px;
width:100px;
padding-top:42px;
width:60px;
text-decoration: none;
}
.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; }
.dashboard-modules.admin { background-image: url('../../icons/x32/system.png') !important; }
.dashboard-modules.client { background-image: url('../../icons/x32/client.png') !important; }
.dashboard-modules.mail { background-image: url('../../icons/x32/email.png') !important; }
.dashboard-modules.monitor { background-image: url('../../icons/x32/monitor.png') !important; }
.dashboard-modules.dns { background-image: url('../../icons/x32/dns.png') !important; }
.dashboard-modules.tools { background-image: url('../../icons/x32/tools.png') !important; }
.dashboard-modules.help { background-image: url('../../icons/x32/help.png') !important; }
.dashboard-modules.domain { background-image: url('../../icons/x32/domain.png') !important; }
.dashboard-modules.sites { background-image: url('../../icons/x32/sites.png') !important; }
.panel_dashboard h2 {
font-size:20px;
}
/* Image-Replacement */
.swap { background-repeat:no-repeat; }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment