tbrehm
2010-07-07 c71060dc5e1de38aebdf5d60fea7075ed946c170
Implemented: FS#556 - See limits in control panel
Implemented: FS#951 - Dashboard module
6 files added
3 files modified
371 ■■■■ changed files
interface/web/dashboard/dashboard.php 55 ●●●●● patch | view | raw | blame | history
interface/web/dashboard/dashlets/limits.php 163 ●●●●● patch | view | raw | blame | history
interface/web/dashboard/dashlets/modules.php 52 ●●●●● patch | view | raw | blame | history
interface/web/dashboard/dashlets/templates/limits.htm 11 ●●●●● patch | view | raw | blame | history
interface/web/dashboard/dashlets/templates/modules.htm 10 ●●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/en_dashlet_limits.lng 28 ●●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/en_dashlet_modules.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/dashboard/templates/dashboard.htm 19 ●●●● patch | view | raw | blame | history
interface/web/themes/default/css/screen/content_ispc.css 30 ●●●●● patch | view | raw | blame | history
interface/web/dashboard/dashboard.php
@@ -99,28 +99,45 @@
$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;
    }
    $app->tpl->setloop('modules', $mod);
}
/* Which dashlets in which column */
/******************************************************************************/
$leftcol_dashlets = array('modules');
$rightcol_dashlets = array('limits');
/******************************************************************************/
/* 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();
interface/web/dashboard/dashlets/limits.php
New file
@@ -0,0 +1,163 @@
<?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'];
    }
}
?>
interface/web/dashboard/dashlets/modules.php
New file
@@ -0,0 +1,52 @@
<?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();
    }
}
?>
interface/web/dashboard/dashlets/templates/limits.htm
New file
@@ -0,0 +1,11 @@
    <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>
interface/web/dashboard/dashlets/templates/modules.htm
New file
@@ -0,0 +1,10 @@
    <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>
interface/web/dashboard/lib/lang/en_dashlet_limits.lng
New file
@@ -0,0 +1,28 @@
<?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';
?>
interface/web/dashboard/lib/lang/en_dashlet_modules.lng
New file
@@ -0,0 +1,3 @@
<?php
$wb['available_modules_txt'] = "Available Modules";
?>
interface/web/dashboard/templates/dashboard.htm
@@ -1,6 +1,6 @@
<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>
    <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 style="float:left; width:350px;">
    <tmpl_loop name='rightcol'>
    {tmpl_var name='content'}
    <p>&nbsp;</p>
    </tmpl_loop>
    </div>
</div>
interface/web/themes/default/css/screen/content_ispc.css
@@ -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; }