From 78fc9a64bdd7fc1ac11c8718e097799236c0ba23 Mon Sep 17 00:00:00 2001 From: Marius Cramer <m.cramer@pixcept.de> Date: Sun, 03 Nov 2013 07:23:46 -0500 Subject: [PATCH] Merge branch 'master' of /home/git/repositories/florian030/ispconfig3 --- interface/lib/classes/functions.inc.php | 182 ++++++++++++++++++++++++++++++++------------ 1 files changed, 131 insertions(+), 51 deletions(-) diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php index fe02f14..5b98c20 100644 --- a/interface/lib/classes/functions.inc.php +++ b/interface/lib/classes/functions.inc.php @@ -32,58 +32,35 @@ //* This class is loaded automatically by the ispconfig framework. class functions { - + var $idn_converter = null; + var $idn_converter_name = ''; - public function mail($to, $subject, $text, $from, $filepath = '', $filetype = 'application/pdf', $filename = '', $cc = '', $bcc = '') { + public function mail($to, $subject, $text, $from, $filepath = '', $filetype = 'application/pdf', $filename = '', $cc = '', $bcc = '', $from_name = '') { global $app,$conf; if($conf['demo_mode'] == true) $app->error("Mail sending disabled in demo mode."); + $app->uses('getconf,ispcmail'); + $mail_config = $app->getconf->get_global_config('mail'); + if($mail_config['smtp_enabled'] == 'y') { + $mail_config['use_smtp'] = true; + $app->ispcmail->setOptions($mail_config); + } + $app->ispcmail->setSender($from, $from_name); + $app->ispcmail->setSubject($subject); + $app->ispcmail->setMailText($text); + if($filepath != '') { if(!file_exists($filepath)) $app->error("Mail attachement does not exist ".$filepath); - - $content = file_get_contents($filepath); - $content = chunk_split(base64_encode($content)); - $uid = strtoupper(md5(uniqid(time()))); - $subject = "=?utf-8?B?".base64_encode($subject)."?="; - - if($filename == '') { - $path_parts = pathinfo($filepath); - $filename = $path_parts["basename"]; - unset($path_parts); - } - - $header = "Return-Path: $from\nFrom: $from\nReply-To: $from\n"; - if($cc != '') $header .= "Cc: $cc\n"; - if($bcc != '') $header .= "Bcc: $bcc\n"; - $header .= "MIME-Version: 1.0\n"; - $header .= "Content-Type: multipart/mixed; boundary=$uid\n"; - - $header .= "--$uid\n"; - $header .= "Content-Type: text/plain;\n\tcharset=\"UTF-8\"\n"; - $header .= "Content-Transfer-Encoding: 8bit\n\n"; - $header .= "$text\n"; - - $header .= "--$uid\n"; - $header .= "Content-Type: $filetype; name=\"$filename\"\n"; - - $header .= "Content-Transfer-Encoding: base64\n"; - $header .= "Content-Disposition: attachment; filename=\"$filename\"\n\n"; - $header .= "$content\n"; - - $header .= "--$uid--"; - - mail($to, $subject, "", $header); - } else { - $header = "From: $from\nReply-To: $from\n"; - if($cc != '') $header .= "Cc: $cc\n"; - if($bcc != '') $header .= "Bcc: $bcc\n"; - $header .= "Content-Type: text/plain;\n\tcharset=\"UTF-8\"\n"; - $header .= "Content-Transfer-Encoding: 8bit\n\n"; - $subject = "=?utf-8?B?".base64_encode($subject)."?="; - mail($to, $subject, $text, $header); + $app->ispcmail->readAttachFile($filepath); } - + + if($cc != '') $app->ispcmail->setHeader('Cc', $cc); + if($bcc != '') $app->ispcmail->setHeader('Bcc', $bcc); + + $app->ispcmail->send($to); + $app->ispcmail->finish(); + return true; } @@ -95,9 +72,11 @@ return $out; } - public function currency_format($number) { + public function currency_format($number, $view = '') { global $app; - $number_format_decimals = (int)$app->lng('number_format_decimals'); + if($view != '') $number_format_decimals = (int)$app->lng('number_format_decimals_'.$view); + if(!$number_format_decimals) $number_format_decimals = (int)$app->lng('number_format_decimals'); + $number_format_dec_point = $app->lng('number_format_dec_point'); $number_format_thousands_sep = $app->lng('number_format_thousands_sep'); if($number_format_thousands_sep == 'number_format_thousands_sep') $number_format_thousands_sep = ''; @@ -105,10 +84,21 @@ } public function get_ispconfig_url() { + global $app; + $url = (stristr($_SERVER['SERVER_PROTOCOL'],'HTTPS') || stristr($_SERVER['HTTPS'],'on'))?'https':'http'; - $url .= '://'.$_SERVER['SERVER_NAME']; - if($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) { - $url .= ':'.$_SERVER['SERVER_PORT']; + if($_SERVER['SERVER_NAME'] != '_') { + $url .= '://'.$_SERVER['SERVER_NAME']; + if($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) { + $url .= ':'.$_SERVER['SERVER_PORT']; + } + } else { + $app->uses("getconf"); + $server_config = $app->getconf->get_server_config(1,'server'); + $url .= '://'.$server_config['hostname']; + if($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) { + $url .= ':'.$_SERVER['SERVER_PORT']; + } } return $url; } @@ -277,8 +267,98 @@ return $result_array; } - + public function intval($string, $force_numeric = false) { + if(intval($string) == 2147483647 || ($string > 0 && intval($string) < 0)) { + if($force_numeric == true) return floatval($string); + elseif(preg_match('/^([-]?)[0]*([1-9][0-9]*)([^0-9].*)*$/', $string, $match)) return $match[1].$match[2]; + else return 0; + } else { + return intval($string); + } + } + + /** + * Function to change bytes to kB, MB, GB or TB + * @param int $size - size in bytes + * @param int precicion - after-comma-numbers (default: 2) + * @return string - formated bytes + */ + public function formatBytes($size, $precision = 2) { + $base=log($size)/log(1024); + $suffixes=array('','k','M','G','T'); + return round(pow(1024,$base-floor($base)),$precision).$suffixes[floor($base)]; + } + + /** IDN converter wrapper. + * all converter classes should be placed in ISPC_CLASS_PATH.'/idn/' + */ + private function _idn_encode_decode($domain, $encode = true) { + if($domain == '') return ''; + if(preg_match('/^[0-9\.]+$/', $domain)) return $domain; // may be an ip address - anyway does not need to bee encoded + + // get domain and user part if it is an email + $user_part = false; + if(strpos($domain, '@') !== false) { + $user_part = substr($domain, 0, strrpos($domain, '@')); + $domain = substr($domain, strrpos($domain, '@') + 1); + } + + if($encode == true) { + if(function_exists('idn_to_ascii')) { + $domain = idn_to_ascii($domain); + } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) { + /* use idna class: + * @author Matthias Sommerfeld <mso@phlylabs.de> + * @copyright 2004-2011 phlyLabs Berlin, http://phlylabs.de + * @version 0.8.0 2011-03-11 + */ + + if(!is_object($this->idn_converter) || $this->idn_converter_name != 'idna_convert.class') { + include_once(ISPC_CLASS_PATH.'/idn/idna_convert.class.php'); + $this->idn_converter = new idna_convert(array('idn_version' => 2008)); + $this->idn_converter_name = 'idna_convert.class'; + } + $domain = $this->idn_converter->encode($domain); + } + } else { + if(function_exists('idn_to_utf8')) { + $domain = idn_to_utf8($domain); + } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) { + /* use idna class: + * @author Matthias Sommerfeld <mso@phlylabs.de> + * @copyright 2004-2011 phlyLabs Berlin, http://phlylabs.de + * @version 0.8.0 2011-03-11 + */ + + if(!is_object($this->idn_converter) || $this->idn_converter_name != 'idna_convert.class') { + include_once(ISPC_CLASS_PATH.'/idn/idna_convert.class.php'); + $this->idn_converter = new idna_convert(array('idn_version' => 2008)); + $this->idn_converter_name = 'idna_convert.class'; + } + $domain = $this->idn_converter->decode($domain); + } + } + + if($user_part !== false) return $user_part . '@' . $domain; + else return $domain; + } + + public function idn_encode($domain) { + $domains = explode("\n", $domain); + for($d = 0; $d < count($domains); $d++) { + $domains[$d] = $this->_idn_encode_decode($domains[$d], true); + } + return implode("\n", $domains); + } + + public function idn_decode($domain) { + $domains = explode("\n", $domain); + for($d = 0; $d < count($domains); $d++) { + $domains[$d] = $this->_idn_encode_decode($domains[$d], false); + } + return implode("\n", $domains); + } } -?> \ No newline at end of file +?> -- Gitblit v1.9.1