Commit 31f6ceb5 authored by mcramer's avatar mcramer
Browse files

Changed: tools.inc.php removed from different places and converted to class where neccessary

Fixed: Subtemplates can now be given on client creation in remoting (i.e. 10/34/21 for multiple addons)
Changed: template applying moved to separate class
Fixed: force_suexec was not taken from templates
parent 36bb8160
......@@ -199,8 +199,8 @@ class ApsGUIController extends ApsBase
{
global $app;
include_once(ISPC_WEB_PATH.'/sites/tools.inc.php');
$app->uses('tools_sites');
$webserver_id = 0;
$websrv = $this->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = '".$this->db->quote($settings['main_domain'])."';");
if(!empty($websrv)) $webserver_id = $websrv['server_id'];
......@@ -231,8 +231,8 @@ class ApsGUIController extends ApsBase
$tmp = array();
$tmp['parent_domain_id'] = $websrv['domain_id'];
$tmp['sys_groupid'] = $websrv['sys_groupid'];
$dbname_prefix = replacePrefix($global_config['dbname_prefix'], $tmp);
$dbuser_prefix = replacePrefix($global_config['dbuser_prefix'], $tmp);
$dbname_prefix = $app->tools_sites->replacePrefix($global_config['dbname_prefix'], $tmp);
$dbuser_prefix = $app->tools_sites->replacePrefix($global_config['dbuser_prefix'], $tmp);
unset($tmp);
//* get the default database server of the client
......
<?php
/**
* client_templates
*
* @author Marius Cramer <m.cramer@pixcept.de> pixcept KG
* @author (original tools.inc.php) Till Brehm, projektfarm Gmbh
* @author (original tools.inc.php) Oliver Vogel www.muv.com
*/
class client_templates {
function apply_client_templates($clientId, $limits = array()) {
global $app;
if(!is_array($limits)) $limits = array();
/*
* Get the master-template for the client
*/
$sql = "SELECT template_master, template_additional FROM client WHERE client_id = " . intval($clientId);
$record = $app->db->queryOneRecord($sql);
$masterTemplateId = $record['template_master'];
$additionalTemplateStr = $record['template_additional'];
/*
* 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);
}
/*
* Process the additional tempaltes here (add them to the limits
* if != -1)
*/
$addTpl = explode('/', $additionalTemplateStr);
foreach ($addTpl as $item){
if (trim($item) != ''){
$sql = "SELECT * FROM client_template WHERE template_id = " . intval($item);
$addLimits = $app->db->queryOneRecord($sql);
/* maybe the template is deleted in the meantime */
if (is_array($addLimits)){
foreach($addLimits as $k => $v){
/* we can remove this condition, but it is easier to debug with it (don't add ids and other non-limit values) */
if (strpos($k, 'limit') !== false){
/* process the numerical limits */
if (is_numeric($v)){
/* switch for special cases */
switch ($k){
case 'limit_cron_frequency':
if ($v < $limits[$k]) $limits[$k] = $v;
/* silent adjustment of the minimum cron frequency to 1 minute */
/* maybe this control test should be done via validator definition in tform.php file, but I don't know how */
if ($limits[$k] < 1) $limits[$k] = 1;
break;
default:
if ($limits[$k] > -1){
if ($v == -1){
$limits[$k] = -1;
}
else {
$limits[$k] += $v;
}
}
}
}
/* process the string limits (CHECKBOXARRAY, SELECT etc.) */
elseif (is_string($v)){
switch ($app->tform->formDef["tabs"]["limits"]["fields"][$k]['formtype']){
case 'CHECKBOXARRAY':
if (!isset($limits[$k])){
$limits[$k] = array();
}
$limits_values = $limits[$k];
if (is_string($limits[$k])){
$limits_values = explode($app->tform->formDef["tabs"]["limits"]["fields"][$k]["separator"],$limits[$k]);
}
$additional_values = explode($app->tform->formDef["tabs"]["limits"]["fields"][$k]["separator"],$v);
/* unification of limits_values (master template) and additional_values (additional template) */
$limits_unified = array();
foreach($app->tform->formDef["tabs"]["limits"]["fields"][$k]["value"] as $key => $val){
if (in_array($key,$limits_values) || in_array($key,$additional_values)) $limits_unified[] = $key;
}
$limits[$k] = implode($app->tform->formDef["tabs"]["limits"]["fields"][$k]["separator"],$limits_unified);
break;
case 'SELECT':
$limit_values = array_keys($app->tform->formDef["tabs"]["limits"]["fields"][$k]["value"]);
/* choose the lower index of the two SELECT items */
$limits[$k] = $limit_values[min(array_search($limits[$k], $limit_values), array_search($v, $limit_values))];
break;
}
}
}
}
}
}
}
/*
* Write all back to the database
*/
$update = '';
foreach($limits as $k => $v){
if ((strpos($k, 'limit') !== false or $k == 'ssh_chroot' or $k == 'web_php_options' or $k == 'force_suexec') && !is_array($v)){
if ($update != '') $update .= ', ';
$update .= '`' . $k . "`='" . $v . "'";
}
}
if($update != '') {
$sql = 'UPDATE client SET ' . $update . " WHERE client_id = " . intval($clientId);
$app->db->query($sql);
}
}
}
\ No newline at end of file
......@@ -1063,7 +1063,7 @@ class remoting {
$this->server->fault('permission_denied','You do not have the permissions to access this function.');
return false;
}
$affected_rows = $this->klientadd('../client/form/client.tform.php',$reseller_id, $params);
$affected_rows = $this->klientadd('../client/form/' . ($reseller_id ? 'reseller' : 'client') . '.tform.php',$reseller_id, $params);
return $affected_rows;
}
......@@ -1077,7 +1077,7 @@ class remoting {
$this->server->fault('permission_denied','You do not have the permissions to access this function.');
return false;
}
$affected_rows = $this->updateQuery('../client/form/client.tform.php', $reseller_id, $client_id, $params);
$affected_rows = $this->updateQuery('../client/form/' . ($reseller_id ? 'reseller' : 'client') . '.tform.php', $reseller_id, $client_id, $params);
$app->remoting_lib->ispconfig_sysuser_update($params,$client_id);
......@@ -2612,13 +2612,6 @@ class remoting {
//* load the user profile of the client
$app->remoting_lib->loadUserProfile($reseller_id);
//* load the client template
if(isset($params['template_master']) and $params['template_master'] > 0)
{
$template=$app->db->queryOneRecord("SELECT * FROM client_template WHERE template_id=".intval($params['template_master']));
if(is_array($template)) $params=array_merge($params,$template);
}
//* Get the SQL query
$sql = $app->remoting_lib->getSQL($params,'INSERT',0);
......@@ -2647,7 +2640,7 @@ class remoting {
$this->id = $insert_id;
$this->dataRecord = $params;
$app->plugin->raiseEvent('client:client:on_after_insert',$this);
$app->plugin->raiseEvent('client:' . ($reseller_id ? 'reseller' : 'client') . ':on_after_insert',$this);
/*
if($app->db->errorMessage != '') {
......
<?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.
*/
class tools_monitor {
function showServerLoad() {
global $app;
/* fetch the Data from the DB */
$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'server_load' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
if(isset($record['data'])) {
$data = unserialize($record['data']);
/*
Format the data
*/
if (strlen($data['up_minutes']) == "1") $data['up_minutes'] = "0".$data['up_minutes'];
$html =
'<div class="systemmonitor-state state-'.$record['state'].'">
<div class="systemmonitor-content icons32 ico-'.$record['state'].'">
<table>
<tr>
<td>' . $app->lng("Server online since").':</td>
<td>' . $data['up_days'] . ' days, ' . $data['up_hours'] . ':' . $data['up_minutes'] . ' hours</center></td>
</tr>
<tr>
<td>' . $app->lng("Users online").':</td>
<td>' . $data['user_online'] . '</td>
</tr>' .
'<tr>
<td>' . $app->lng("System load 1 minute") . ':</td>
<td>' . $data['load_1'] . '</td>
</tr>
<tr>
<td>' . $app->lng("System load 5 minutes") . ':</td>
<td>' . $data['load_5'] . '</td>
</tr>
<tr>
<td>'.$app->lng("System load 15 minutes").':</td>
<td>' . $data['load_15'] . '</td>
</tr>
</table>
</div>
</div>';
} else {
$html = '<p>'.$app->lng("no_data_serverload_txt").'</p>';
}
return $html;
}
function showDiskUsage () {
global $app;
/* fetch the Data from the DB */
$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'disk_usage' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
if(isset($record['data'])) {
$data = unserialize($record['data']);
/*
Format the data
*/
$html =
'<div class="systemmonitor-state state-'.$record['state'].'">
<div class="systemmonitor-content icons32 ico-'.$record['state'].'">
<table>
<tr>
<td>'.$app->lng("monitor_diskusage_filesystem_txt").'</td>
<td>'.$app->lng("monitor_diskusage_type_txt").'</td>
<td>'.$app->lng("monitor_diskusage_size_txt").'</td>
<td>'.$app->lng("monitor_diskusage_used_txt").'</td>
<td>'.$app->lng("monitor_diskusage_available_txt").'</td>
<td>'.$app->lng("monitor_diskusage_usage_txt").'</td>
<td>'.$app->lng("monitor_diskusage_mounted_txt").'</td>
</tr>';
foreach($data as $line) {
$html .= '<tr>';
foreach ($line as $item) {
$html .= '<td>' . $item . '</td>';
}
$html .= '</tr>';
}
$html .= '</table>';
$html .= '</div></div>';
} else {
$html = '<p>'.$app->lng("no_data_diskusage_txt").'</p>';
}
return $html;
}
function showMemUsage () {
global $app;
/* fetch the Data from the DB */
$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'mem_usage' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
if(isset($record['data'])) {
$data = unserialize($record['data']);
/*
Format the data
*/
$html =
'<div class="systemmonitor-state state-'.$record['state'].'">
<div class="systemmonitor-content icons32 ico-'.$record['state'].'">
<table>';
foreach($data as $key => $value) {
if ($key != '') {
$html .= '<tr>
<td>' . $key . ':</td>
<td>' . $value . '</td>
</tr>';
}
}
$html .= '</table>';
$html .= '</div></div>';
} else {
$html = '<p>'.$app->lng("no_data_memusage_txt").'</p>';
}
return $html;
}
function showCpuInfo () {
global $app;
/* fetch the Data from the DB */
$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'cpu_info' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
if(isset($record['data'])) {
$data = unserialize($record['data']);
/*
Format the data
*/
$html =
'<div class="systemmonitor-state state-'.$record['state'].'">
<div class="systemmonitor-content icons32 ico-'.$record['state'].'">
<table>';
foreach($data as $key => $value) {
if ($key != '') {
$html .= '<tr>
<td>' . $key . ':</td>
<td>' . $value . '</td>
</tr>';
}
}
$html .= '</table>';
$html .= '</div></div>';
} else {
$html = '<p>'.$app->lng("no_data_cpuinfo_txt").'</p>';
}
return $html;
}
function showServices () {
global $app;
/* fetch the Data from the DB */
$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'services' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
if(isset($record['data'])) {
$data = unserialize($record['data']);
/*
Format the data
*/
$html =
'<div class="systemmonitor-state state-'.$record['state'].'">
<div class="systemmonitor-content icons32 ico-'.$record['state'].'">
<table>';
if($data['webserver'] != -1) {
if($data['webserver'] == 1) {
$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
} else {
$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
}
$html .= '<tr>
<td>'.$app->lng("monitor_services_web_txt").'</td>
<td>'.$status.'</td>
</tr>';
}
if($data['ftpserver'] != -1) {
if($data['ftpserver'] == 1) {
$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
} else {
$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
}
$html .= '<tr>
<td>'.$app->lng("monitor_services_ftp_txt").'</td>
<td>'.$status.'</td>
</tr>';
}
if($data['smtpserver'] != -1) {
if($data['smtpserver'] == 1) {
$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
} else {
$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
}
$html .= '<tr>
<td>'.$app->lng("monitor_services_smtp_txt").'</td>
<td>'.$status.'</td>
</tr>';
}
if($data['pop3server'] != -1) {
if($data['pop3server'] == 1) {
$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
} else {
$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
}
$html .= '<tr>
<td>'.$app->lng("monitor_services_pop_txt").'</td>
<td>'.$status.'</td>
</tr>';
}
if($data['imapserver'] != -1) {
if($data['imapserver'] == 1) {
$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
} else {
$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
}
$html .= '<tr>
<td>'.$app->lng("monitor_services_imap_txt").'</td>
<td>'.$status.'</td>
</tr>';
}
if($data['bindserver'] != -1) {
if($data['bindserver'] == 1) {
$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
} else {
$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
}
$html .= '<tr>
<td>'.$app->lng("monitor_services_mydns_txt").'</td>
<td>'.$status.'</td>
</tr>';
}
if($data['mysqlserver'] != -1) {
if($data['mysqlserver'] == 1) {
$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
} else {
$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
}
$html .= '<tr>
<td>'.$app->lng("monitor_services_mysql_txt").'</td>
<td>'.$status.'</td>
</tr>';
}
$html .= '</table></div></div>';
} else {
$html = '<p>'.$app->lng("no_data_services_txt").'</p>';
}
return $html;
}
function showSystemUpdate() {
global $app;
/* fetch the Data from the DB */
$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'system_update' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
if(isset($record['data'])) {
$html =
'<div class="systemmonitor-state state-'.$record['state'].'">
<div class="systemmonitor-content icons32 ico-'.$record['state'].'">';
/*
* First, we have to detect, if there is any monitoring-data.
* If not (because the destribution is not supported) show this.
*/
if ($record['state'] == 'no_state') {
$html .= '<p>'.$app->lng("monitor_updates_nosupport_txt").'</p>';
}
else {
$data = unserialize($record['data']);
$html .= nl2br(html_entity_decode($data['output']));
}
$html .= '</div></div>';
} else {
$html = '<p>'.$app->lng("no_data_updates_txt").'</p>';
}
return $html;
}
function showOpenVzBeancounter() {
global $app;
/* fetch the Data from the DB */
$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'openvz_beancounter' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
if(isset($record['data'])) {
$html =
'<div class="systemmonitor-state state-'.$record['state'].'">
<div class="systemmonitor-content icons32 ico-'.$record['state'].'">';
/*
* First, we have to detect, if there is any monitoring-data.
* If not (because the server is not a VE) show this.
*/
$data = unserialize($record['data']);
if ((!isset($data)) || ($data == '')) {
$html .= '<p>'.$app->lng("monitor_beancounter_nosupport_txt").'</p>';
}
else {
$html .= '<pre>' . nl2br($data) . '</pre>';
}
$html .= '</div></div>';
} else {
$html = '<p>'.$app->lng("no_data_updates_txt").'</p>';
}
return $html;
}
function showRaidState() {
global $app;
/* fetch the Data from the DB */
$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'raid_state' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
if(isset($record['data'])) {
$html =
'<div class="systemmonitor-state state-'.$record['state'].'">
<div class="systemmonitor-content icons32 ico-'.$record['state'].'">';
/*
* First, we have to detect, if there is any monitoring-data.
* If not (because the RAID-Controler is not supported yet) show this.
*/
if ($record['state'] == 'no_state') {
$html .= '<p>'.$app->lng("monitor_nosupportedraid1_txt").'</p>';
}
else {
$data = unserialize($record['data']);
$html .= nl2br($data['output']);
}
$html .= '</div></div>';
} else {
$html = '<p>'.$app->lng("no_data_raid_txt").'</p>';
}
return $html;
}
function showRKHunter() {
global $app;
/* fetch the Data from the DB */
$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'rkhunter' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
if(isset($record['data'])) {
$html =
'<div class="systemmonitor-state state-'.$record['state'].'">
<div class="systemmonitor-content icons32 ico-'.$record['state'].'">';
/*
* First, we have to detect, if there is any monitoring-data.
* If not (because rkhunter is not installed) show this.
*/
$data = unserialize($record['data']);
if ($data['output'] == '') {
$html .= '<p>'.$app->lng("monitor_norkhunter_txt").'</p>';
}