tbrehm
2013-07-31 615a0a96618fa99e7e452523145d6c0f238d4473
interface/lib/classes/functions.inc.php
@@ -32,7 +32,8 @@
//* 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 = '', $from_name = '') {
      global $app,$conf;
@@ -129,10 +130,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;
   }
@@ -302,7 +314,7 @@
   }
    public function intval($string, $force_numeric = false) {
        if(intval($string) == 2147483647) {
        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;
@@ -310,6 +322,76 @@
            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);
    }
      
}