From a932880cc9dcd6da7e42f5a69534322c79f75953 Mon Sep 17 00:00:00 2001 From: mcramer <m.cramer@pixcept.de> Date: Mon, 18 Jun 2012 12:43:12 -0400 Subject: [PATCH] FS#2288 - Importer for data from Plesk control panel (first INCOMPLETE version, see bugtracker for status) --- interface/lib/classes/functions.inc.php | 94 +++++++++++++++++++++++++++++++---------------- 1 files changed, 62 insertions(+), 32 deletions(-) diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php index 2fe7191..2b11427 100644 --- a/interface/lib/classes/functions.inc.php +++ b/interface/lib/classes/functions.inc.php @@ -34,7 +34,7 @@ class functions { - public function mail($to, $subject, $text, $from, $filepath = '', $filetype = 'application/pdf', $filename = '') { + public function mail($to, $subject, $text, $from, $filepath = '', $filetype = 'application/pdf', $filename = '', $cc = '', $bcc = '') { global $app,$conf; if($conf['demo_mode'] == true) $app->error("Mail sending disabled in demo mode."); @@ -53,7 +53,9 @@ unset($path_parts); } - $header = "Return-Path: $form\nFrom: $from\nReply-To: $from\n"; + $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"; @@ -74,6 +76,8 @@ 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)."?="; @@ -101,7 +105,7 @@ } public function get_ispconfig_url() { - $url = (stristr($_SERVER['SERVER_PROTOCOL'],'HTTPS'))?'https':'http'; + $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']; @@ -111,38 +115,64 @@ function json_encode($data) { if(!function_exists('json_encode')){ - switch ($type = gettype($data)){ - case 'NULL': - return 'null'; - case 'boolean': - return ($data ? 'true' : 'false'); - case 'integer': - case 'double': - case 'float': - return $data; - case 'string': - return '"' . addslashes($data) . '"'; - case 'object': - $data = get_object_vars($data); - case 'array': - $output_index_count = 0; - $output_indexed = array(); - $output_associative = array(); - foreach($data as $key => $value){ - $output_indexed[] = $this->json_encode($value); - $output_associative[] = $this->json_encode($key) . ':' . $this->json_encode($value); - if($output_index_count !== NULL && $output_index_count++ !== $key){ - $output_index_count = NULL; - } + if(is_array($data) || is_object($data)){ + $islist = is_array($data) && (empty($data) || array_keys($data) === range(0,count($data)-1)); + + if($islist){ + $json = '[' . implode(',', array_map(array($this, "json_encode"), $data) ) . ']'; + } else { + $items = Array(); + foreach( $data as $key => $value ) { + $items[] = $this->json_encode("$key") . ':' . $this->json_encode($value); } - if($output_index_count !== NULL){ - return '[' . implode(',', $output_indexed) . ']'; - } else { - return '{' . implode(',', $output_associative) . '}'; + $json = '{' . implode(',', $items) . '}'; + } + } elseif(is_string($data)){ + # Escape non-printable or Non-ASCII characters. + # I also put the \\ character first, as suggested in comments on the 'addclashes' page. + $string = '"'.addcslashes($data, "\\\"\n\r\t/".chr(8).chr(12)).'"'; + $json = ''; + $len = strlen($string); + # Convert UTF-8 to Hexadecimal Codepoints. + for($i = 0; $i < $len; $i++){ + $char = $string[$i]; + $c1 = ord($char); + + # Single byte; + if($c1 <128){ + $json .= ($c1 > 31) ? $char : sprintf("\\u%04x", $c1); + continue; } - default: - return ''; // Not supported + + # Double byte + $c2 = ord($string[++$i]); + if(($c1 & 32) === 0){ + $json .= sprintf("\\u%04x", ($c1 - 192) * 64 + $c2 - 128); + continue; + } + + # Triple + $c3 = ord($string[++$i]); + if(($c1 & 16) === 0){ + $json .= sprintf("\\u%04x", (($c1 - 224) <<12) + (($c2 - 128) << 6) + ($c3 - 128)); + continue; + } + + # Quadruple + $c4 = ord($string[++$i]); + if(($c1 & 8) === 0){ + $u = (($c1 & 15) << 2) + (($c2>>4) & 3) - 1; + + $w1 = (54<<10) + ($u<<6) + (($c2 & 15) << 2) + (($c3>>4) & 3); + $w2 = (55<<10) + (($c3 & 15)<<6) + ($c4-128); + $json .= sprintf("\\u%04x\\u%04x", $w1, $w2); + } + } + } else { + # int, floats, bools, null + $json = strtolower(var_export($data, true)); } + return $json; } else { return json_encode($data); } -- Gitblit v1.9.1