From 6d5dbae53cd4b4b97da0b0c558292a7f1062a524 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Fri, 25 Jul 2008 11:13:15 -0400 Subject: [PATCH] Prefer File_Info over mime_content_type + detect mime type when uploading + some code style --- program/include/rcube_shared.inc | 176 ++++++++++++++-------------------------------------------- 1 files changed, 43 insertions(+), 133 deletions(-) diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc index 03525b3..000483e 100644 --- a/program/include/rcube_shared.inc +++ b/program/include/rcube_shared.inc @@ -84,124 +84,6 @@ /** - * Get localized text in the desired language - * - * @param mixed Named parameters array or label name - * @return string Localized text - */ -function rcube_label($attrib) -{ - global $OUTPUT; - static $sa_text_data = false; - static $s_language, $utf8_decode; - - $sess_user_lang = $_SESSION['language']; - - // 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===false || $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() @@ -674,29 +556,57 @@ */ 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; } -?> \ No newline at end of file + +/** + * 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; +} + +?> -- Gitblit v1.9.1