| | |
| | | |
| | | |
| | | /** |
| | | * Get localized text in the desired language |
| | | * |
| | | * @param mixed Named parameters array or label name |
| | | * @return string Localized text |
| | | */ |
| | | function rcube_label($attrib) |
| | | { |
| | | global $sess_user_lang, $OUTPUT; |
| | | static $sa_text_data, $s_language, $utf8_decode; |
| | | |
| | | // extract attributes |
| | | if (is_string($attrib)) |
| | | $attrib = array('name' => $attrib); |
| | | |
| | | $nr = is_numeric($attrib['nr']) ? $attrib['nr'] : 1; |
| | | $vars = isset($attrib['vars']) ? $attrib['vars'] : ''; |
| | | |
| | | $command_name = !empty($attrib['command']) ? $attrib['command'] : NULL; |
| | | $alias = $attrib['name'] ? $attrib['name'] : ($command_name && $command_label_map[$command_name] ? $command_label_map[$command_name] : ''); |
| | | |
| | | |
| | | // load localized texts |
| | | if (!$sa_text_data || $s_language != $sess_user_lang) |
| | | { |
| | | $sa_text_data = array(); |
| | | |
| | | // get english labels (these should be complete) |
| | | @include(INSTALL_PATH.'program/localization/en_US/labels.inc'); |
| | | @include(INSTALL_PATH.'program/localization/en_US/messages.inc'); |
| | | |
| | | if (is_array($labels)) |
| | | $sa_text_data = $labels; |
| | | if (is_array($messages)) |
| | | $sa_text_data = array_merge($sa_text_data, $messages); |
| | | |
| | | // include user language files |
| | | if ($sess_user_lang!='en' && is_dir(INSTALL_PATH.'program/localization/'.$sess_user_lang)) |
| | | { |
| | | include_once(INSTALL_PATH.'program/localization/'.$sess_user_lang.'/labels.inc'); |
| | | include_once(INSTALL_PATH.'program/localization/'.$sess_user_lang.'/messages.inc'); |
| | | |
| | | if (is_array($labels)) |
| | | $sa_text_data = array_merge($sa_text_data, $labels); |
| | | if (is_array($messages)) |
| | | $sa_text_data = array_merge($sa_text_data, $messages); |
| | | } |
| | | |
| | | $s_language = $sess_user_lang; |
| | | } |
| | | |
| | | // text does not exist |
| | | if (!($text_item = $sa_text_data[$alias])) |
| | | { |
| | | /* |
| | | raise_error(array( |
| | | 'code' => 500, |
| | | 'type' => 'php', |
| | | 'line' => __LINE__, |
| | | 'file' => __FILE__, |
| | | 'message' => "Missing localized text for '$alias' in '$sess_user_lang'"), TRUE, FALSE); |
| | | */ |
| | | return "[$alias]"; |
| | | } |
| | | |
| | | // make text item array |
| | | $a_text_item = is_array($text_item) ? $text_item : array('single' => $text_item); |
| | | |
| | | // decide which text to use |
| | | if ($nr==1) |
| | | $text = $a_text_item['single']; |
| | | else if ($nr>0) |
| | | $text = $a_text_item['multiple']; |
| | | else if ($nr==0) |
| | | { |
| | | if ($a_text_item['none']) |
| | | $text = $a_text_item['none']; |
| | | else if ($a_text_item['single']) |
| | | $text = $a_text_item['single']; |
| | | else if ($a_text_item['multiple']) |
| | | $text = $a_text_item['multiple']; |
| | | } |
| | | |
| | | // default text is single |
| | | if ($text=='') |
| | | $text = $a_text_item['single']; |
| | | |
| | | // replace vars in text |
| | | if (is_array($attrib['vars'])) |
| | | { |
| | | foreach ($attrib['vars'] as $var_key=>$var_value) |
| | | $a_replace_vars[substr($var_key, 0, 1)=='$' ? substr($var_key, 1) : $var_key] = $var_value; |
| | | } |
| | | |
| | | if ($a_replace_vars) |
| | | $text = preg_replace('/\${?([_a-z]{1}[_a-z0-9]*)}?/ei', '$a_replace_vars["\1"]', $text); |
| | | |
| | | // remove variables in text which were not available in arg $vars and $nr |
| | | eval("\$text = <<<EOF |
| | | $text |
| | | EOF; |
| | | "); |
| | | |
| | | // format output |
| | | if (($attrib['uppercase'] && strtolower($attrib['uppercase']=='first')) || $attrib['ucfirst']) |
| | | return ucfirst($text); |
| | | else if ($attrib['uppercase']) |
| | | return strtoupper($text); |
| | | else if ($attrib['lowercase']) |
| | | return strtolower($text); |
| | | |
| | | return $text; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Send HTTP headers to prevent caching this page |
| | | */ |
| | | function send_nocacheing_headers() |
| | |
| | | |
| | | |
| | | /** |
| | | * Return the last occurence of a string in another string |
| | | * |
| | | * @param haystack string string in which to search |
| | | * @param needle string string for which to search |
| | | * @return index of needle within haystack, or false if not found |
| | | */ |
| | | function strrstr($haystack, $needle) |
| | | { |
| | | $pver = phpversion(); |
| | | if ($pver[0] >= 5) |
| | | return strrpos($haystack, $needle); |
| | | else |
| | | { |
| | | $index = strpos(strrev($haystack), strrev($needle)); |
| | | if($index === false) |
| | | return false; |
| | | |
| | | $index = strlen($haystack) - strlen($needle) - $index; |
| | | return $index; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * A method to guess the mime_type of an attachment. |
| | | * |
| | | * @param string $path Path to the file. |
| | |
| | | */ |
| | | function rc_mime_content_type($path, $failover = 'unknown/unknown') |
| | | { |
| | | global $CONFIG; |
| | | $mime_type = null; |
| | | $mime_magic = rcmail::get_instance()->config->get('mime_magic'); |
| | | |
| | | $mime_magic = $CONFIG['mime_magic']; |
| | | |
| | | if (function_exists('mime_content_type')) { |
| | | return mime_content_type($path); |
| | | if (!extension_loaded('fileinfo')) { |
| | | @dl('fileinfo.' . PHP_SHLIB_SUFFIX); |
| | | } |
| | | if (!extension_loaded('fileinfo')) { |
| | | if (!dl('fileinfo.' . PHP_SHLIB_SUFFIX)) { |
| | | return $failover; |
| | | |
| | | if (function_exists('finfo_open')) { |
| | | if ($finfo = finfo_open(FILEINFO_MIME, $mime_magic)) { |
| | | $mime_type = finfo_file($finfo, $path); |
| | | finfo_close($finfo); |
| | | } |
| | | } |
| | | $finfo = finfo_open(FILEINFO_MIME, $mime_magic); |
| | | if (!$finfo) { |
| | | return $failover; |
| | | else if (function_exists('mime_content_type')) { |
| | | $mime_type = mime_content_type($path); |
| | | } |
| | | $mime_type = finfo_file($finfo,$path); |
| | | |
| | | if (!$mime_type) { |
| | | return $failover; |
| | | $mime_type = $failover; |
| | | } |
| | | finfo_close($finfo); |
| | | |
| | | return $mime_type; |
| | | } |
| | | |
| | | ?> |
| | | |
| | | /** |
| | | * A method to guess encoding of a string. |
| | | * |
| | | * @param string $string String. |
| | | * @param string $failover Default result for failover. |
| | | * |
| | | * @return string |
| | | */ |
| | | function rc_detect_encoding($string, $failover='') |
| | | { |
| | | if (!function_exists('mb_detect_encoding')) { |
| | | return $failover; |
| | | } |
| | | |
| | | // FIXME: the order is important, because sometimes |
| | | // iso string is detected as euc-jp and etc. |
| | | $enc = array( |
| | | 'UTF-8', 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', |
| | | 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', |
| | | 'ISO-8859-10', 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16', |
| | | 'WINDOWS-1252', 'WINDOWS-1251', 'EUC-JP', 'EUC-TW', 'KOI8-R' |
| | | ); |
| | | |
| | | $result = mb_detect_encoding($string, join(',', $enc)); |
| | | |
| | | return $result ? $result : $failover; |
| | | } |
| | | |
| | | ?> |