From 0c702ba44e114965f8afe09dfbac126691420479 Mon Sep 17 00:00:00 2001 From: vogelor <vogelor@ispconfig3> Date: Tue, 16 Dec 2008 05:15:31 -0500 Subject: [PATCH] Clients can now have client-templates (template custom coming soon) --- interface/web/client/client_template_list.php | 1 interface/web/client/client_edit.php | 11 ++- install/sql/ispconfig3.sql | 9 ++ interface/web/client/templates/client_edit_limits.htm | 6 ++ interface/web/client/tools.inc.php | 66 ++++++++++++++++++++++ interface/web/client/form/client.tform.php | 11 +++ interface/web/client/client_template_del.php | 1 interface/web/client/form/client_template.tform.php | 2 interface/web/client/client_template_edit.php | 18 +++++ 9 files changed, 117 insertions(+), 8 deletions(-) diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index be62ad2..736fb66 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -96,6 +96,8 @@ `password` varchar(255) default NULL, `language` varchar(255) NOT NULL default 'en', `usertheme` varchar(255) NOT NULL default 'default', + `template_master` bigint(20) NOT NULL default '0', + `template_additional` varchar(255) NOT NULL default '', PRIMARY KEY (`client_id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; @@ -132,7 +134,12 @@ `limit_dns_zone` int(11) NOT NULL default '-1', `limit_dns_record` int(11) NOT NULL default '-1', `limit_database` int(11) NOT NULL default '-1', - `limit_client` int(11) NOT NULL default '0', + `limit_client` int(11) NOT NULL default '0', + `sys_userid` int(11) NOT NULL default '0', + `sys_groupid` int(11) NOT NULL default '0', + `sys_perm_user` varchar(5) default NULL, + `sys_perm_group` varchar(5) default NULL, + `sys_perm_other` varchar(5) default NULL, PRIMARY KEY (`template_id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; diff --git a/interface/web/client/client_edit.php b/interface/web/client/client_edit.php index 23e445f..9200440 100644 --- a/interface/web/client/client_edit.php +++ b/interface/web/client/client_edit.php @@ -40,6 +40,7 @@ require_once('../../lib/config.inc.php'); require_once('../../lib/app.inc.php'); +require_once('tools.inc.php'); //* Check permissions for module $app->auth->check_module_permissions('client'); @@ -83,8 +84,9 @@ $app->auth->add_group_to_user($_SESSION['s']['user']['userid'],$groupid); $app->db->query("UPDATE client SET parent_client_id = ".intval($_SESSION['s']['user']['client_id'])." WHERE client_id = ".$this->id); } - - + + /* If there is a client-template, process it */ + applyClientTemplates($this->id); } @@ -122,9 +124,10 @@ $sql = "UPDATE sys_user SET modules = '$modules' WHERE client_id = $client_id"; $app->db->query($sql); } + /* + * If there is a client-template, process it */ + applyClientTemplates($this->id); } - - } $page = new page_action; diff --git a/interface/web/client/client_template_del.php b/interface/web/client/client_template_del.php index c4d3e90..0ad1749 100644 --- a/interface/web/client/client_template_del.php +++ b/interface/web/client/client_template_del.php @@ -44,6 +44,7 @@ //* Check permissions for module $app->auth->check_module_permissions('client'); +if(!$_SESSION["s"]["user"]["typ"] == 'admin') die('Client-Templates are only for Admins.'); $app->uses('tpl,tform'); $app->load('tform_actions'); diff --git a/interface/web/client/client_template_edit.php b/interface/web/client/client_template_edit.php index 8a0705e..6ae4588 100644 --- a/interface/web/client/client_template_edit.php +++ b/interface/web/client/client_template_edit.php @@ -40,10 +40,10 @@ require_once('../../lib/config.inc.php'); require_once('../../lib/app.inc.php'); +require_once('tools.inc.php'); //* Check permissions for module $app->auth->check_module_permissions('client'); - if(!$_SESSION["s"]["user"]["typ"] == 'admin') die('Client-Templates are only for Admins.'); // Loading classes @@ -52,6 +52,22 @@ class page_action extends tform_actions { + /* + This function is called automatically right after + the data was successful updated in the database. + */ + function onAfterUpdate() { + global $app; + + /* + * the template has changed. apply the new data to all clients + */ + $sql = "SELECT client_id FROM client WHERE template_master = " . $this->id; + $clients = $app->db->queryAllRecords($sql); + foreach ($clients as $client){ + applyClientTemplates($client['client_id']); + } + } } $page = new page_action; diff --git a/interface/web/client/client_template_list.php b/interface/web/client/client_template_list.php index 85e3ee2..093de6e 100644 --- a/interface/web/client/client_template_list.php +++ b/interface/web/client/client_template_list.php @@ -14,7 +14,6 @@ //* Check permissions for module $app->auth->check_module_permissions('client'); - if(!$_SESSION["s"]["user"]["typ"] == 'admin') die('Client-Templates are only for Admins.'); $app->uses('listform_actions'); diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php index b1caeaa..c0e4571 100644 --- a/interface/web/client/form/client.tform.php +++ b/interface/web/client/form/client.tform.php @@ -297,6 +297,17 @@ ################################## # Begin Datatable fields ################################## + 'template_master' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'SELECT', + 'default' => '1', + 'datasource' => array ( 'type' => 'SQL', + 'querystring' => "SELECT template_id,template_name FROM client_template WHERE template_type ='m'", + 'keyfield'=> 'template_id', + 'valuefield'=> 'template_name' + ), + 'value' => array('0' => 'custom') + ), 'default_mailserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php index 59be804..71146bd 100644 --- a/interface/web/client/form/client_template.tform.php +++ b/interface/web/client/form/client_template.tform.php @@ -42,7 +42,7 @@ $form["db_history"] = "no"; $form["tab_default"] = "template"; $form["list_default"] = "client_template_list.php"; -$form["auth"] = 'no'; +$form["auth"] = 'yes'; $form["auth_preset"]["userid"] = 0; // 0 = id of the user, > 0 id must match with id of current user $form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm index 360311b..8792e00 100644 --- a/interface/web/client/templates/client_edit_limits.htm +++ b/interface/web/client/templates/client_edit_limits.htm @@ -3,6 +3,12 @@ <div class="panel panel_client"> <div class="pnl_formsarea"> + <fieldset id="wf_area_client"><legend>Client-Template</legend> + <span class="wf_oneField"> + <label for="template_master" class="wf_preField">{tmpl_var name='template_master_txt'}</label> + <select id="template_master" name="template_master">{tmpl_var name='template_master'}</select> + </span> + </fieldset> <fieldset id="wf_area_client"><legend>Limits</legend> <span class="wf_oneField"> <label for="default_mailserver" class="wf_preField">{tmpl_var name='default_mailserver_txt'}</label> diff --git a/interface/web/client/tools.inc.php b/interface/web/client/tools.inc.php new file mode 100644 index 0000000..d98392f --- /dev/null +++ b/interface/web/client/tools.inc.php @@ -0,0 +1,66 @@ +<?php +/* +Copyright (c) 2007-2008, 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. +*/ + +function applyClientTemplates($clientId){ + global $app; + /* + * Get the master-template for the client + */ + $sql = "SELECT template_master FROM client WHERE client_id = " . intval($clientId); + $record = $app->db->queryOneRecord($sql); + $masterTemplateId = $record['template_master']; + + /* + * if the master-Template is custom there is NO changing + */ + if ($masterTemplateId > 0){ + $sql = "SELECT * FROM client_template WHERE template_id = " . intval($masterTemplateId); + $limits = $app->db->queryOneRecord($sql); + } + + /* + * TODO: Process the additional tempaltes here (add them to the limits + * if != -1) + * (like $limits['limit_database'] += $limitAdditional) + */ + + /* + * Write all back to the database + */ + $update = ''; + foreach($limits as $k => $v){ + if (strpos($k, 'limit') !== false){ + if ($update != '') $update .= ', '; + $update .= '`' . $k . "`='" . $v . "'"; + } + } + $sql = 'UPDATE client SET ' . $update . " WHERE client_id = " . intval($clientId); + $app->db->query($sql); +} +?> -- Gitblit v1.9.1