| | |
| | | | rcube_shared.inc | |
| | | | | |
| | | | This file is part of the Roundcube PHP suite | |
| | | | Copyright (C) 2005-2007, Roundcube Dev. - Switzerland | |
| | | | Copyright (C) 2005-2007, The Roundcube Dev Team | |
| | | | Licensed under the GNU GPL | |
| | | | | |
| | | | CONTENTS: | |
| | |
| | | function get_boolean($str) |
| | | { |
| | | $str = strtolower($str); |
| | | if (in_array($str, array('false', '0', 'no', 'nein', ''), TRUE)) |
| | | if (in_array($str, array('false', '0', 'no', 'off', 'nein', ''), TRUE)) |
| | | return FALSE; |
| | | else |
| | | return TRUE; |
| | |
| | | |
| | | return floatval($bytes); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Create a human readable string for a number of bytes |
| | | * |
| | |
| | | */ |
| | | function show_bytes($bytes) |
| | | { |
| | | if ($bytes > 1073741824) |
| | | if ($bytes >= 1073741824) |
| | | { |
| | | $gb = $bytes/1073741824; |
| | | $str = sprintf($gb>=10 ? "%d " : "%.1f ", $gb) . rcube_label('GB'); |
| | | } |
| | | else if ($bytes > 1048576) |
| | | else if ($bytes >= 1048576) |
| | | { |
| | | $mb = $bytes/1048576; |
| | | $str = sprintf($mb>=10 ? "%d " : "%.1f ", $mb) . rcube_label('MB'); |
| | | } |
| | | else if ($bytes > 1024) |
| | | else if ($bytes >= 1024) |
| | | $str = sprintf("%d ", round($bytes/1024)) . rcube_label('KB'); |
| | | else |
| | | $str = sprintf('%d ', $bytes) . rcube_label('B'); |
| | | |
| | | return $str; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Convert paths like ../xxx to an absolute path using a base url |
| | |
| | | // cut base_url to the last directory |
| | | if (strrpos($base_url, '/')>7) |
| | | { |
| | | $host_url = substr($base_url, 0, strpos($base_url, '/')); |
| | | $host_url = substr($base_url, 0, strpos($base_url, '/', 7)); |
| | | $base_url = substr($base_url, 0, strrpos($base_url, '/')); |
| | | } |
| | | |
| | | // $path is absolute |
| | | if ($path{0}=='/') |
| | | if ($path[0] == '/') |
| | | $abs_path = $host_url.$path; |
| | | else |
| | | { |
| | |
| | | { |
| | | if (strrpos($base_url, '/')) |
| | | $base_url = substr($base_url, 0, strrpos($base_url, '/')); |
| | | |
| | | |
| | | $path = substr($path, 3); |
| | | } |
| | | |
| | | $abs_path = $base_url.'/'.$path; |
| | | } |
| | | |
| | | |
| | | return $abs_path; |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * Replace the middle part of a string with ... |
| | | * if it is longer than the allowed length |
| | | * Truncate string if it is longer than the allowed length |
| | | * Replace the middle or the ending part of a string with a placeholder |
| | | * |
| | | * @param string Input string |
| | | * @param int Max. length |
| | | * @param string Replace removed chars with this |
| | | * @param bool Set to True if string should be truncated from the end |
| | | * @return string Abbreviated string |
| | | */ |
| | | function abbreviate_string($str, $maxlength, $place_holder='...') |
| | | function abbreviate_string($str, $maxlength, $place_holder='...', $ending=false) |
| | | { |
| | | $length = mb_strlen($str); |
| | | |
| | | if ($length > $maxlength) |
| | | { |
| | | if ($ending) |
| | | return mb_substr($str, 0, $maxlength) . $place_holder; |
| | | |
| | | $place_holder_length = mb_strlen($place_holder); |
| | | $first_part_length = floor(($maxlength - $place_holder_length)/2); |
| | | $second_starting_location = $length - $maxlength + $first_part_length + $place_holder_length; |
| | |
| | | if (!$mime_type) { |
| | | $mime_type = $failover; |
| | | } |
| | | else { |
| | | // Sometimes (PHP-5.3?) content-type contains charset definition, |
| | | // Remove it (#1487122) also "charset=binary" is useless |
| | | $mime_type = array_shift(preg_split('/[; ]/', $mime_type)); |
| | | } |
| | | |
| | | return $mime_type; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Detect image type of the given binary data by checking magic numbers |
| | | * |
| | | * @param string Binary file content |
| | | * @return string Detected mime-type or jpeg as fallback |
| | | */ |
| | | function rc_image_content_type($data) |
| | | { |
| | | $type = 'jpeg'; |
| | | if (preg_match('/^\x89\x50\x4E\x47/', $data)) $type = 'png'; |
| | | else if (preg_match('/^\x47\x49\x46\x38/', $data)) $type = 'gif'; |
| | | else if (preg_match('/^\x00\x00\x01\x00/', $data)) $type = 'ico'; |
| | | // else if (preg_match('/^\xFF\xD8\xFF\xE0/', $data)) $type = 'jpeg'; |
| | | |
| | | return 'image/' . $type; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * A method to guess encoding of a string. |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * intl replacement functions |
| | | */ |
| | | |
| | | if (!function_exists('idn_to_utf8')) |
| | | { |
| | | function idn_to_utf8($domain, $flags=null) |
| | | { |
| | | static $idn, $loaded; |
| | | |
| | | if (!$loaded) { |
| | | $idn = new Net_IDNA2(); |
| | | $loaded = true; |
| | | } |
| | | |
| | | if ($idn && $domain && preg_match('/(^|\.)xn--/i', $domain)) { |
| | | try { |
| | | $domain = $idn->decode($domain); |
| | | } |
| | | catch (Exception $e) { |
| | | } |
| | | } |
| | | return $domain; |
| | | } |
| | | } |
| | | |
| | | if (!function_exists('idn_to_ascii')) |
| | | { |
| | | function idn_to_ascii($domain, $flags=null) |
| | | { |
| | | static $idn, $loaded; |
| | | |
| | | if (!$loaded) { |
| | | $idn = new Net_IDNA2(); |
| | | $loaded = true; |
| | | } |
| | | |
| | | if ($idn && $domain && preg_match('/[^\x20-\x7E]/', $domain)) { |
| | | try { |
| | | $domain = $idn->encode($domain); |
| | | } |
| | | catch (Exception $e) { |
| | | } |
| | | } |
| | | return $domain; |
| | | } |
| | | } |
| | | |