// Copyright: Copyright (C) 2002-2007 Pristine Communications // This file is in UTF-8 萬國碼 // Set the include path if (!defined("INCPATH_SET")) { require_once dirname(__FILE__) . "/incpath.inc.php"; } // Referenced subroutines require_once "monica/callform.inc.php"; require_once "monica/commtext.inc.php"; require_once "monica/formfunc.inc.php"; require_once "monica/getlang.inc.php"; require_once "monica/gettext.inc.php"; require_once "monica/htmlchar.inc.php"; require_once "monica/markabbr.inc.php"; require_once "monica/requri.inc.php"; require_once "monica/sql.inc.php"; // locale_date: Obtain a localed date representation function locale_date($date, $lang = null) { if (is_null($lang)) { $lang = getlang(); } switch ($lang) { case "zh-tw": $d = localtime($date); return sprintf("%d 年 %d 月 %d 日", $d[5]+1900-1911, $d[4]+1, $d[3]); case "de": return date("F j Y", $date); case "en": default: return date("F j Y", $date); } return; } // locale_month: Obtain a localed month representation function locale_month($date, $lang = null) { if (is_null($lang)) { $lang = getlang(); } switch ($lang) { case "zh-tw": $d = localtime($date); return sprintf("%d 年 %d 月", $d[5]+1900-1911, $d[4]+1); case "de": case "en": default: return date("F Y", $date); } return; } // locale_year: Obtain a localed year representation function locale_year($date, $lang = null) { if (is_null($lang)) { $lang = getlang(); } switch ($lang) { case "zh-tw": $d = localtime($date); return sprintf("%d 年", $d[5]+1900-1911); case "de": case "en": default: return date("Y", $date); } return; } // locale_amount: Obtain a localed amount representation function locale_amount($amount, $lang = null) { if (is_null($lang)) { $lang = getlang(); } switch ($lang) { case "zh-tw": // 一萬以下 if (mb_strlen($amount) <= 4) { return $amount; // 一億以下 } elseif (mb_strlen($amount) <= 8) { $sig = mb_substr($amount, 0, -4) . "." . mb_substr($amount, -4); while (mb_substr($sig, -1) == "0") { $sig = mb_substr($sig, 0, -1); } if (mb_substr($sig, -1) == ".") { $sig = mb_substr($sig, 0, -1); } return sprintf("%s ( %s 萬)", $amount, $sig); // 一兆以下 } elseif (mb_strlen($amount) <= 12) { $sig = mb_substr($amount, 0, -8) . "." . mb_substr($amount, -8); while (mb_substr($sig, -1) == "0") { $sig = mb_substr($sig, 0, -1); } if (mb_substr($sig, -1) == ".") { $sig = mb_substr($sig, 0, -1); } return sprintf("%s ( %s 億)", $amount, $sig); // 一兆以上 } else { $sig = mb_substr($amount, 0, -12) . "." . mb_substr($amount, -12); while (mb_substr($sig, -1) == "0") { $sig = mb_substr($sig, 0, -1); } if (mb_substr($sig, -1) == ".") { $sig = mb_substr($sig, 0, -1); } return sprintf("%s ( %s 兆)", $amount, $sig); } case "en": // Less than one thousand if (mb_strlen($amount) <= 3) { return $amount; // Less than one million } elseif (mb_strlen($amount) <= 6) { $sig = mb_substr($amount, 0, -3) . "." . mb_substr($amount, -3); while (mb_substr($sig, -1) == "0") { $sig = mb_substr($sig, 0, -1); } if (mb_substr($sig, -1) == ".") { $sig = mb_substr($sig, 0, -1); } return sprintf("%s (%s thousands)", $amount, $sig); // Less than one billion } elseif (mb_strlen($amount) <= 9) { $sig = mb_substr($amount, 0, -6) . "." . mb_substr($amount, -6); while (mb_substr($sig, -1) == "0") { $sig = mb_substr($sig, 0, -1); } if (mb_substr($sig, -1) == ".") { $sig = mb_substr($sig, 0, -1); } return sprintf("%s (%s millions)", $amount, $sig); // More than one billion } else { $sig = mb_substr($amount, 0, -9) . "." . mb_substr($amount, -9); while (mb_substr($sig, -1) == "0") { $sig = mb_substr($sig, 0, -1); } if (mb_substr($sig, -1) == ".") { $sig = mb_substr($sig, 0, -1); } return sprintf("%s (%s billions)", $amount, $sig); } } return; } // report_size: Obtain a human readable size function report_size($size) { // Get the size $report = sprintf(C_("%s bytes"), number_format($size)); // Try to use KB as the unit $kb = $size / 1024; // Bounce if there are fewer than 3 digits in the rounded result if (round($kb * 100, 0) < 100) { return $report; } // Check the rounded result for each digit for ($d = 2; $d >= 0; $d--) { $digits = pow(10, $d); $rounded = round($kb * $digits, 0); // There are 3 significient digits in the rounded result if ($rounded < 1000) { return sprintf("%s (%.".$d."f KB)", $report, $rounded / $digits); } } // Try to use MB as the unit $mb = $kb / 1024; // Check each digit for ($d = 2; $d >= 0; $d--) { $digits = pow(10, $d); $rounded = round($mb * $digits, 0); // There are 3 significient digits in the rounded result if ($rounded < 1000) { return sprintf("%s (%.".$d."f MB)", $report, $rounded / $digits); } } // Try to use GB as the unit $gb = $mb / 1024; // Check each digit for ($d = 2; $d >= 0; $d--) { $digits = pow(10, $d); $rounded = round($gb * $digits, 0); // There are 3 significient digits in the rounded result if ($rounded < 1000) { return sprintf("%s (%.".$d."f GB)", $report, $rounded / $digits); } } // Try to use TB as the unit $tb = $gb / 1024; // Check each digit for ($d = 2; $d >= 0; $d--) { $digits = pow(10, $d); $rounded = round($tb * $digits, 0); // There are 3 significient digits in the rounded result if ($rounded < 1000) { return sprintf("%s (%.".$d."f TB)", $report, $rounded / $digits); } } // More than TB return sprintf("%s (%s TB)", $report, number_format(round($tb, 0))); } // auto_keep_referer: If we should keep the referer information function auto_keep_referer($auto_keep_referer = null) { // Cache the result static $cache; // Set the value if (!is_null($auto_keep_referer)) { return ($cache = $auto_keep_referer); } // Return the cache if (isset($cache)) { return $cache; } // Only work for forms if (!is_form()) { return ($cache = false); } // Not for called forms if (is_called_form()) { return ($cache = false); } // Only work for the first forms if (!is_first_form()) { return ($cache = false); } // Respect the specified referer $FORM =& curform(); if (array_key_exists("referer", $FORM)) { return ($cache = false); } // Referer not specified if (!array_key_exists("HTTP_REFERER", $_SERVER)) { return ($cache = false); } // Only keep referer from the same host // Check the prefix of the referer $prefix = REQUEST_HOSTPORT . "/"; return ($cache = (substr($_SERVER["HTTP_REFERER"], 0, strlen($prefix)) == $prefix)); } // opt_list: Return an options list function opt_list($select, $curval) { // Cache the result $cache = array(); // Not cached yet if (!array_key_exists($select, $cache)) { $result = sql_query($select); $count = sql_num_rows($result); for ($i = 0, $opts = array(); $i < $count; $i++) { $row = sql_fetch_assoc($result); $opts[] = array( "value" => $row["value"], "content" => $row["content"], ); } // Obtain the HTML $cache[$select] = opt_list_array($opts); } return preselect_options($cache[$select], $curval); } // opt_list_array: Return an options list from an array function opt_list_array($opts) { // Obtain the HTML ob_start(); ?> "; $pos = strpos($html, $option); // Not selected if there is no such value in the options if ($pos === false) { return $html; } $prefix = substr($html, 0, $pos); $suffix = substr($html, $pos + strlen($option)); $selected = "