From f4038a2160d55a7f519a3b42be1aa96e29e9a908 Mon Sep 17 00:00:00 2001
From: ftimme <ft@falkotimme.com>
Date: Wed, 27 Feb 2013 09:01:40 -0500
Subject: [PATCH] - Fixed "FUNCTION databasename.CONCAT does not exist" error for older MySQL versions.

---
 interface/lib/classes/functions.inc.php |   93 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 87 insertions(+), 6 deletions(-)

diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index e109650..a79942d 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -32,9 +32,10 @@
 //* 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.");
@@ -45,7 +46,7 @@
 			$mail_config['use_smtp'] = true;
 			$app->ispcmail->setOptions($mail_config);
 		}
-		$app->ispcmail->setSender($from);
+		$app->ispcmail->setSender($from, $from_name);
 		$app->ispcmail->setSubject($subject);
 		$app->ispcmail->setMailText($text);
 		
@@ -117,9 +118,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 = '';
@@ -299,7 +302,85 @@
 		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);
+        }
+    }
+    
+    /** 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);
+    }
 		
 }
 

--
Gitblit v1.9.1