| | |
| | | /** |
| | | * Garbage collector for cache entries. |
| | | * Remove all expired message cache records |
| | | * @return void |
| | | */ |
| | | function rcmail_cache_gc() |
| | | { |
| | |
| | | * @param string Input string |
| | | * @param string Suspected charset of the input string |
| | | * @param string Target charset to convert to; defaults to RCMAIL_CHARSET |
| | | * @return Converted string |
| | | * @return string Converted string |
| | | */ |
| | | function rcube_charset_convert($str, $from, $to=NULL) |
| | | { |
| | |
| | | static $mbstring_list = null; |
| | | static $convert_warning = false; |
| | | static $conv = null; |
| | | |
| | | |
| | | $error = false; |
| | | |
| | | $to = empty($to) ? strtoupper(RCMAIL_CHARSET) : rcube_parse_charset($to); |
| | |
| | | * Sometimes charset string is malformed, there are also charset aliases |
| | | * but we need strict names for charset conversion (specially utf8 class) |
| | | * |
| | | * @param string Input charset name |
| | | * @return The validated charset name |
| | | * @param string Input charset name |
| | | * @return string The validated charset name |
| | | */ |
| | | function rcube_parse_charset($input) |
| | | { |
| | |
| | | '/UNICODE-1-1-*/', // RFC1641/1642 |
| | | '/^X-/', // X- prefix (e.g. X-ROMAN8 => ROMAN8) |
| | | ), '', $charset); |
| | | |
| | | if ($charset == 'BINARY') |
| | | return $charsets[$input] = null; |
| | | |
| | | # Aliases: some of them from HTML5 spec. |
| | | $aliases = array( |
| | |
| | | '204' => 'WINDOWS-1251', |
| | | '222' => 'WINDOWS-874', |
| | | '238' => 'WINDOWS-1250', |
| | | 'MS950' => 'CP950', |
| | | 'WINDOWS949' => 'UHC', |
| | | ); |
| | | |
| | | // allow A-Z and 0-9 only |
| | |
| | | * Converts string from standard UTF-7 (RFC 2152) to UTF-8. |
| | | * |
| | | * @param string Input string |
| | | * @return The converted string |
| | | * @return string The converted string |
| | | */ |
| | | function rcube_utf7_to_utf8($str) |
| | | { |
| | |
| | | * Converts string from UTF-16 to UTF-8 (helper for utf-7 to utf-8 conversion) |
| | | * |
| | | * @param string Input string |
| | | * @return The converted string |
| | | * @return string The converted string |
| | | */ |
| | | function rcube_utf16_to_utf8($str) |
| | | { |
| | |
| | | * @param string Encoding type: text|html|xml|js|url |
| | | * @param string Replace mode for tags: show|replace|remove |
| | | * @param boolean Convert newlines |
| | | * @return The quoted string |
| | | * @return string The quoted string |
| | | */ |
| | | function rep_specialchars_output($str, $enctype='', $mode='', $newlines=TRUE) |
| | | { |
| | |
| | | { |
| | | if (!$html_encode_arr) |
| | | { |
| | | $html_encode_arr = get_html_translation_table(HTML_SPECIALCHARS); |
| | | $html_encode_arr = get_html_translation_table(HTML_SPECIALCHARS); |
| | | unset($html_encode_arr['?']); |
| | | } |
| | | |
| | |
| | | } |
| | | else if ($mode=='remove') |
| | | $str = strip_tags($str); |
| | | |
| | | |
| | | $out = strtr($str, $encode_arr); |
| | | |
| | | // avoid douple quotation of & |
| | | $out = preg_replace('/&([A-Za-z]{2,6}|#[0-9]{2,4});/', '&\\1;', strtr($str, $encode_arr)); |
| | | |
| | | $out = preg_replace('/&([A-Za-z]{2,6}|#[0-9]{2,4});/', '&\\1;', $out); |
| | | |
| | | return $newlines ? nl2br($out) : $out; |
| | | } |
| | | |
| | |
| | | * Print or write debug messages |
| | | * |
| | | * @param mixed Debug message or data |
| | | * @return void |
| | | */ |
| | | function console() |
| | | { |
| | |
| | | * |
| | | * @param $name name of log file |
| | | * @param line Line to append |
| | | * @return void |
| | | */ |
| | | function write_log($name, $line) |
| | | { |
| | |
| | | |
| | | /** |
| | | * Write login data (name, ID, IP address) to the 'userlogins' log file. |
| | | * |
| | | * @return void |
| | | */ |
| | | function rcmail_log_login() |
| | | { |
| | |
| | | |
| | | /** |
| | | * @access private |
| | | * @return mixed |
| | | */ |
| | | function rcube_timer() |
| | | { |
| | |
| | | |
| | | /** |
| | | * @access private |
| | | * @return void |
| | | */ |
| | | function rcube_print_time($timer, $label='Timer', $dest='console') |
| | | { |
| | |
| | | foreach ($a_folders as $folder) |
| | | rcmail_build_folder_tree($a_mailboxes, $folder, $delimiter); |
| | | } |
| | | |
| | | |
| | | // allow plugins to alter the folder tree or to localize folder names |
| | | $hook = $RCMAIL->plugins->exec_hook('render_mailboxlist', array('list' => $a_mailboxes, 'delimiter' => $delimiter)); |
| | | |
| | |
| | | * Return the mailboxlist as html_select object |
| | | * |
| | | * @param array Named parameters |
| | | * @return object html_select HTML drop-down object |
| | | * @return html_select HTML drop-down object |
| | | */ |
| | | function rcmail_mailbox_select($p = array()) |
| | | { |
| | |
| | | /** |
| | | * Create a hierarchical array of the mailbox list |
| | | * @access private |
| | | * @return void |
| | | */ |
| | | function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='') |
| | | { |
| | | global $RCMAIL; |
| | | |
| | | $pos = strpos($folder, $delm); |
| | | |
| | | if ($pos !== false) { |
| | | $subFolders = substr($folder, $pos+1); |
| | | $currentFolder = substr($folder, 0, $pos); |
| | | $virtual = !isset($arrFolders[$currentFolder]); |
| | | |
| | | // sometimes folder has a delimiter as the last character |
| | | if (!strlen($subFolders)) |
| | | $virtual = false; |
| | | else if (!isset($arrFolders[$currentFolder])) |
| | | $virtual = true; |
| | | else |
| | | $virtual = $arrFolders[$currentFolder]['virtual']; |
| | | } |
| | | else { |
| | | $subFolders = false; |
| | |
| | | } |
| | | |
| | | $path .= $currentFolder; |
| | | |
| | | // Check \Noselect option (if options are in cache) |
| | | if (!$virtual && ($opts = $RCMAIL->imap->mailbox_options($path))) { |
| | | $virtual = in_array('\\Noselect', $opts); |
| | | } |
| | | |
| | | if (!isset($arrFolders[$currentFolder])) { |
| | | $arrFolders[$currentFolder] = array( |
| | |
| | | else |
| | | $arrFolders[$currentFolder]['virtual'] = $virtual; |
| | | |
| | | if (!empty($subFolders)) |
| | | if (strlen($subFolders)) |
| | | rcmail_build_folder_tree($arrFolders[$currentFolder]['folders'], $subFolders, $delm, $path.$delm); |
| | | } |
| | | |
| | |
| | | /** |
| | | * Return html for a structured list <ul> for the mailbox tree |
| | | * @access private |
| | | * @return string |
| | | */ |
| | | function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, &$jslist, $attrib, $nestLevel=0) |
| | | { |
| | |
| | | /** |
| | | * Return html for a flat list <select> for the mailbox tree |
| | | * @access private |
| | | * @return string |
| | | */ |
| | | function rcmail_render_folder_tree_select(&$arrFolders, &$mbox_name, $maxlength, &$select, $realnames=false, $nestLevel=0) |
| | | { |
| | |
| | | /** |
| | | * Return internal name for the given folder if it matches the configured special folders |
| | | * @access private |
| | | * @return string |
| | | */ |
| | | function rcmail_folder_classname($folder_id) |
| | | { |
| | |
| | | * Output HTML editor scripts |
| | | * |
| | | * @param string Editor mode |
| | | * @return void |
| | | */ |
| | | function rcube_html_editor($mode='') |
| | | { |
| | |
| | | |
| | | $RCMAIL->output->include_script('tiny_mce/tiny_mce.js'); |
| | | $RCMAIL->output->include_script('editor.js'); |
| | | $RCMAIL->output->add_script('rcmail_editor_init("$__skin_path", |
| | | "'.JQ($lang).'", '.intval($CONFIG['enable_spellcheck']).', "'.$mode.'");'); |
| | | $RCMAIL->output->add_script(sprintf("rcmail_editor_init('\$__skin_path', '%s', %d, '%s');", |
| | | JQ($lang), intval($CONFIG['enable_spellcheck']), $mode), |
| | | 'foot'); |
| | | } |
| | | |
| | | |
| | |
| | | * |
| | | * @param integer HTTPS port number |
| | | * @param boolean Enables 'use_https' option checking |
| | | * @return boolean |
| | | */ |
| | | function rcube_https_check($port=null, $use_https=true) |
| | | { |
| | |
| | | } |
| | | |
| | | |
| | | // for backward compatibility |
| | | /** |
| | | * For backward compatibility. |
| | | * |
| | | * @global rcmail $RCMAIL |
| | | * @param string $var_name Variable name. |
| | | * @return void |
| | | */ |
| | | function rcube_sess_unset($var_name=null) |
| | | { |
| | | global $RCMAIL; |
| | |
| | | } |
| | | |
| | | |
| | | // Replaces hostname variables |
| | | |
| | | /** |
| | | * Replaces hostname variables |
| | | * |
| | | * @param string $name Hostname |
| | | * @return string |
| | | */ |
| | | function rcube_parse_host($name) |
| | | { |
| | | // %n - host |
| | |
| | | |
| | | /** |
| | | * E-mail address validation |
| | | * |
| | | * @param string $email Email address |
| | | * @param boolean $dns_check True to check dns |
| | | * @return boolean |
| | | */ |
| | | function check_email($email, $dns_check=true) |
| | | { |
| | |
| | | * Report error according to configured debug_level |
| | | * |
| | | * @param array Named parameters |
| | | * @return void |
| | | * @see raise_error() |
| | | */ |
| | | function log_bug($arg_arr) |
| | |
| | | flush(); |
| | | } |
| | | } |
| | | |