diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index ed53edc25c0fa6f7c069b0354381f8d8a4dd8872..1257eaea6283636ac9ce5c2798a04826486c56e4 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -66,6 +66,8 @@ php_ini_path_cgi=/etc/php5/cgi/php.ini check_apache_config=y enable_sni=y enable_ip_wildcard=y +overtraffic_notify_admin=y +overtraffic_notify_client=y nginx_cgi_socket=/var/run/fcgiwrap.socket php_fpm_init_script=php5-fpm php_fpm_ini_path=/etc/php5/fpm/php.ini diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index 72c8ac0576fc513ad25d937591c1b7919fd79323..2cf2170ecc1d7e121fbb946407921dc631171b89 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -500,6 +500,18 @@ $form["tabs"]['web'] = array( 'default' => 'y', 'value' => array(0 => 'n', 1 => 'y') ), + 'overtraffic_notify_admin' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ), + 'overtraffic_notify_client' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ), 'user' => array( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index af97459f0155595bb6b6cc52d30f9161f2cf38e6..b6b70887d2994eb07bc8ddbcf10fbacd8b631164 100644 --- a/interface/web/admin/lib/lang/en_server_config.lng +++ b/interface/web/admin/lib/lang/en_server_config.lng @@ -168,4 +168,6 @@ $wb["firewall_txt"] = 'Firewall'; $wb["mailbox_quota_stats_txt"] = 'Mailbox quota statistics'; $wb["enable_ip_wildcard_txt"] = 'Enable IP wildcard (*)'; $wb["web_folder_protection_txt"] = 'Web folder protection'; +$wb["overtraffic_notify_admin_txt"] = 'Send overtraffic notification to admin'; +$wb["overtraffic_notify_client_txt"] = 'Send overtraffic notification to client'; ?> \ No newline at end of file diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm index c0c9b3b963778968925170ad7f31669d2ef40795..a41efef09834b687caf84365fdec4155c5427092 100644 --- a/interface/web/admin/templates/server_config_web_edit.htm +++ b/interface/web/admin/templates/server_config_web_edit.htm @@ -94,6 +94,18 @@
{tmpl_var name='enable_ip_wildcard'}
+ +
+

{tmpl_var name='overtraffic_notify_admin_txt'}

+
+ {tmpl_var name='overtraffic_notify_admin'} +
+
+
+

{tmpl_var name='overtraffic_notify_client_txt'}

+
+ {tmpl_var name='overtraffic_notify_client'} +
{tmpl_var name='ssl_settings_txt'}
diff --git a/server/conf/mail/web_traffic_notification_en.txt b/server/conf/mail/web_traffic_notification_en.txt new file mode 100644 index 0000000000000000000000000000000000000000..9b917920d5796f377f2e05a0fb8668fd752bb802 --- /dev/null +++ b/server/conf/mail/web_traffic_notification_en.txt @@ -0,0 +1,3 @@ +Subject:Website traffic notification + +The website {domain} is over traffic and has been disabled. \ No newline at end of file diff --git a/server/cron_daily.php b/server/cron_daily.php index 2a4b7472a8b7245d183767a4aa9152006f79f4ed..cd86c1ca0fce9cbde1563a9d84f19b37c2b7432c 100644 --- a/server/cron_daily.php +++ b/server/cron_daily.php @@ -447,6 +447,8 @@ if ($app->dbmaster == $app->db) { if ($app->dbmaster == $app->db) { + $global_config = $app->getconf->get_global_config('mail'); + $current_month = date('Y-m'); //* Check website traffic quota @@ -478,12 +480,63 @@ if ($app->dbmaster == $app->db) { ($reseller_traffic_quota > 0 && $web_traffic > $reseller_traffic_quota)) {*/ if($web_traffic_quota > 0 && $web_traffic > $web_traffic_quota) { $app->dbmaster->datalogUpdate('web_domain', "traffic_quota_lock = 'y',active = 'n'", 'domain_id', $rec['domain_id']); - $app->log('Traffic quota for '.$rec['domain_id'].' exceeded. Disabling website.',LOGLEVEL_DEBUG); + $app->log('Traffic quota for '.$rec['domain'].' exceeded. Disabling website.',LOGLEVEL_DEBUG); + + //* Send traffic notifications + if($web_config['overtraffic_notify_admin'] == 'y' || $web_config['overtraffic_notify_client'] == 'y') { + + if(file_exists($conf['rootpath'].'/conf-custom/mail/web_traffic_notification_'.$conf['language'].'.txt')) { + $lines = file($conf['rootpath'].'/conf-custom/mail/web_traffic_notification_'.$conf['language'].'.txt'); + } elseif(file_exists($conf['rootpath'].'/conf-custom/mail/web_traffic_notification_en.txt')) { + $lines = file($conf['rootpath'].'/conf-custom/mail/web_traffic_notification_en.txt'); + } elseif(file_exists($conf['rootpath'].'/conf/mail/web_traffic_notification_'.$conf['language'].'.txt')) { + $lines = file($conf['rootpath'].'/conf/mail/web_traffic_notification_'.$conf['language'].'.txt'); + } else { + $lines = file($conf['rootpath'].'/conf/mail/web_traffic_notification_en.txt'); + } + + //* Get subject + $parts = explode(':',trim($lines[0])); + unset($parts[0]); + $traffic_mail_subject = implode(':',$parts); + unset($lines[0]); + + //* Get message + $traffic_mail_message = trim(implode($lines)); + unset($tmp); + + //* Replace placeholders + $traffic_mail_message = str_replace('{domain}',$rec['domain'],$traffic_mail_message); + + $mailHeaders = "MIME-Version: 1.0" . "\n"; + $mailHeaders .= "Content-type: text/plain; charset=utf-8" . "\n"; + $mailHeaders .= "Content-Transfer-Encoding: 8bit" . "\n"; + $mailHeaders .= "From: ". $global_config['admin_mail'] . "\n"; + $mailHeaders .= "Reply-To: ". $global_config['admin_mail'] . "\n"; + $mailSubject = "=?utf-8?B?".base64_encode($traffic_mail_subject)."?="; + + //* send email to admin + if($global_config['admin_mail'] != '' && $web_config['overtraffic_notify_admin'] == 'y') { + mail($global_config['admin_mail'], $mailSubject, $traffic_mail_message, $mailHeaders); + } + + //* Send email to client + if($web_config['overtraffic_notify_admin'] == 'y') { + $client_group_id = $rec["sys_groupid"]; + $client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id"); + if($client['email'] != '') { + mail($client['email'], $mailSubject, $traffic_mail_message, $mailHeaders); + } + } + + } + + } else { //* unlock the website, if traffic is lower then quota if($rec['traffic_quota_lock'] == 'y') { $app->dbmaster->datalogUpdate('web_domain', "traffic_quota_lock = 'n',active = 'y'", 'domain_id', $rec['domain_id']); - $app->log('Traffic quota for '.$rec['domain_id'].' ok again. Re-enabling website.',LOGLEVEL_DEBUG); + $app->log('Traffic quota for '.$rec['domain'].' ok again. Re-enabling website.',LOGLEVEL_DEBUG); } } } diff --git a/server/lib/classes/getconf.inc.php b/server/lib/classes/getconf.inc.php index c2207a1ccd009df5b05112d77a806e214cd69a57..b995a3976027e1bffdafdb4e884adffa1ff4fa42 100644 --- a/server/lib/classes/getconf.inc.php +++ b/server/lib/classes/getconf.inc.php @@ -52,7 +52,7 @@ class getconf { public function get_global_config($section = '') { global $app; - if(!is_array($this->config['global'])) { + if(!@is_array($this->config['global'])) { $app->uses('ini_parser'); $tmp = $app->db->queryOneRecord('SELECT config FROM sys_ini WHERE sysini_id = 1'); $this->config['global'] = $app->ini_parser->parse_ini_string(stripslashes($tmp['config']));