| | |
| | | { |
| | | $charset = strtoupper($charset); |
| | | |
| | | # RFC1642 |
| | | $charset = str_replace('UNICODE-1-1-', '', $charset); |
| | | $charset = preg_replace(array( |
| | | '/^[^0-9A-Z]+/', // e.g. _ISO-8859-JP$SIO |
| | | '/\$.*$/', // e.g. _ISO-8859-JP$SIO |
| | | '/UNICODE-1-1-/', // RFC1642 |
| | | ), '', $charset); |
| | | |
| | | # Aliases: some of them from HTML5 spec. |
| | | $aliases = array( |
| | |
| | | * @return string Field value or NULL if not available |
| | | */ |
| | | function get_input_value($fname, $source, $allow_html=FALSE, $charset=NULL) |
| | | { |
| | | { |
| | | global $OUTPUT; |
| | | $value = NULL; |
| | | |
| | |
| | | return rcube_charset_convert($value, $OUTPUT->get_charset(), $charset); |
| | | else |
| | | return $value; |
| | | } |
| | | |
| | | /** |
| | | * Convert array of request parameters (prefixed with _) |
| | | * to a regular array with non-prefixed keys. |
| | | * |
| | | * @param int Source to get value from (GPC) |
| | | * @return array Hash array with all request parameters |
| | | */ |
| | | function request2param($mode = RCUBE_INPUT_GPC) |
| | | { |
| | | $out = array(); |
| | | $src = $mode == RCUBE_INPUT_GET ? $_GET : ($mode == RCUBE_INPUT_POST ? $_POST : $_REQUEST); |
| | | foreach ($src as $key => $value) { |
| | | $fname = $key[0] == '_' ? substr($key, 1) : $key; |
| | | $out[$fname] = get_input_value($key, $mode); |
| | | } |
| | | |
| | | return $out; |
| | | } |
| | | |
| | | /** |
| | | * Remove all non-ascii and non-word chars |
| | |
| | | while ($table_data && ($sql_arr = $db->fetch_assoc($table_data))) |
| | | { |
| | | $zebra_class = $c % 2 ? 'even' : 'odd'; |
| | | $table->add_row(array('id' => 'rcmrow' . $sql_arr[$id_col], 'class' => "contact $zebra_class")); |
| | | $table->add_row(array('id' => 'rcmrow' . $sql_arr[$id_col], 'class' => $zebra_class)); |
| | | |
| | | // format each col |
| | | foreach ($a_show_cols as $col) |
| | |
| | | foreach ($table_data as $row_data) |
| | | { |
| | | $zebra_class = $c % 2 ? 'even' : 'odd'; |
| | | $table->add_row(array('id' => 'rcmrow' . $row_data[$id_col], 'class' => "contact $zebra_class")); |
| | | $table->add_row(array('id' => 'rcmrow' . $row_data[$id_col], 'class' => $zebra_class)); |
| | | |
| | | // format each col |
| | | foreach ($a_show_cols as $col) |
| | |
| | | |
| | | |
| | | /** |
| | | * Compose a valid representaion of name and e-mail address |
| | | * Compose a valid representation of name and e-mail address |
| | | * |
| | | * @param string E-mail address |
| | | * @param string Person name |
| | |
| | | if ($name && $name != $email) |
| | | { |
| | | // Special chars as defined by RFC 822 need to in quoted string (or escaped). |
| | | return sprintf('%s <%s>', preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $name) ? '"'.addcslashes($name, '"').'"' : $name, $email); |
| | | return sprintf('%s <%s>', preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $name) ? '"'.addcslashes($name, '"').'"' : $name, trim($email)); |
| | | } |
| | | else |
| | | return $email; |
| | | return trim($email); |
| | | } |
| | | |
| | | |
| | |
| | | { |
| | | $args = func_get_args(); |
| | | |
| | | if (class_exists('rcmail', false)) |
| | | rcmail::get_instance()->plugins->exec_hook('console', $args); |
| | | if (class_exists('rcmail', false)) { |
| | | $rcmail = rcmail::get_instance(); |
| | | if (is_object($rcmail->plugins)) |
| | | $rcmail->plugins->exec_hook('console', $args); |
| | | } |
| | | |
| | | $msg = array(); |
| | | foreach ($args as $arg) |
| | |
| | | $line = $log['line']; |
| | | $date = $log['date']; |
| | | if ($log['abort']) |
| | | return; |
| | | return true; |
| | | } |
| | | |
| | | $log_entry = sprintf("[%s]: %s\n", $date, $line); |
| | |
| | | $CONFIG['log_dir'] = INSTALL_PATH.'logs'; |
| | | |
| | | // try to open specific log file for writing |
| | | if ($fp = @fopen($CONFIG['log_dir'].'/'.$name, 'a')) { |
| | | $logfile = $CONFIG['log_dir'].'/'.$name; |
| | | if ($fp = @fopen($logfile, 'a')) { |
| | | fwrite($fp, $log_entry); |
| | | fflush($fp); |
| | | fclose($fp); |
| | | return true; |
| | | } |
| | | else |
| | | trigger_error("Error writing to log file $logfile; Please check permissions", E_USER_WARNING); |
| | | } |
| | | return false; |
| | | } |
| | |
| | | { |
| | | global $RCMAIL; |
| | | |
| | | $p += array('maxlength' => 100, 'relanames' => false); |
| | | $p += array('maxlength' => 100, 'realnames' => false); |
| | | $a_mailboxes = array(); |
| | | |
| | | foreach ($RCMAIL->imap->list_mailboxes() as $folder) |
| | | rcmail_build_folder_tree($a_mailboxes, $folder, $RCMAIL->imap->get_hierarchy_delimiter()); |
| | | if (empty($p['exceptions']) || !in_array($folder, $p['exceptions'])) |
| | | rcmail_build_folder_tree($a_mailboxes, $folder, $RCMAIL->imap->get_hierarchy_delimiter()); |
| | | |
| | | $select = new html_select($p); |
| | | |
| | |
| | | */ |
| | | function rcube_html_editor($mode='') |
| | | { |
| | | global $OUTPUT, $CONFIG; |
| | | global $RCMAIL, $CONFIG; |
| | | |
| | | $lang = $tinylang = strtolower(substr($_SESSION['language'], 0, 2)); |
| | | if (!file_exists(INSTALL_PATH . 'program/js/tiny_mce/langs/'.$tinylang.'.js')) |
| | | $tinylang = 'en'; |
| | | $hook = $RCMAIL->plugins->exec_hook('hmtl_editor', array('mode' => $mode)); |
| | | |
| | | $OUTPUT->include_script('tiny_mce/tiny_mce.js'); |
| | | $OUTPUT->include_script('editor.js'); |
| | | $OUTPUT->add_script('rcmail_editor_init("$__skin_path", "'.JQ($tinylang).'", '.intval($CONFIG['enable_spellcheck']).', "'.$mode.'");'); |
| | | if ($hook['abort']) |
| | | return; |
| | | |
| | | $lang = strtolower(substr($_SESSION['language'], 0, 2)); |
| | | if (!file_exists(INSTALL_PATH . 'program/js/tiny_mce/langs/'.$lang.'.js')) |
| | | $lang = 'en'; |
| | | |
| | | $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.'");'); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Check if working in SSL mode |
| | | * |
| | | * @param integer HTTPS port number |
| | | * @param boolean Enables 'use_https' option checking |
| | | */ |
| | | function rcube_https_check($port=null, $use_https=true) |
| | | { |
| | | global $RCMAIL; |
| | | |
| | | if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') |
| | | return true; |
| | | if ($port && $_SERVER['SERVER_PORT'] == $port) |
| | | return true; |
| | | if ($use_https && $RCMAIL->config->get('use_https')) |
| | | return true; |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * E-mail address validation |
| | | */ |
| | | function check_email($email) |
| | | { |
| | | // Check for invalid characters |
| | | if (preg_match('/[\x00-\x1F\x7F-\xFF]/', $email)) |
| | | return false; |
| | | |
| | | // Check that there's one @ symbol, and that the lengths are right |
| | | if (!preg_match('/^([^@]{1,64})@([^@]{1,255})$/', $email, $email_array)) |
| | | return false; |
| | | |
| | | // Check local part |
| | | $local_array = explode('.', $email_array[1]); |
| | | foreach ($local_array as $local_part) |
| | | if (!preg_match('/^(([A-Za-z0-9!#$%&\'*+\/=?^_`{|}~-]+)|("[^"]+"))$/', $local_part)) |
| | | return false; |
| | | |
| | | // Check domain part |
| | | if (preg_match('/^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}$/', $email_array[2]) |
| | | || preg_match('/^\[(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}\]$/', $email_array[2])) |
| | | return true; // If an IP address |
| | | else { |
| | | // If not an IP address |
| | | $domain_array = explode('.', $email_array[2]); |
| | | if (sizeof($domain_array) < 2) |
| | | return false; // Not enough parts to be a valid domain |
| | | |
| | | foreach ($domain_array as $domain_part) |
| | | if (!preg_match('/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]))$/', $domain_part)) |
| | | return false; |
| | | |
| | | if (!rcmail::get_instance()->config->get('email_dns_check')) |
| | | return true; |
| | | |
| | | if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' && version_compare(PHP_VERSION, '5.3.0', '<')) |
| | | return true; |
| | | |
| | | // find MX record(s) |
| | | if (getmxrr($email_array[2], $mx_records)) |
| | | return true; |
| | | |
| | | // find any DNS record |
| | | if (checkdnsrr($email_array[2], 'ANY')) |
| | | return true; |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Helper class to turn relative urls into absolute ones |