Merge branch 'master' of github.com:roundcube/roundcubemail
| | |
| | | CHANGELOG Roundcube Webmail |
| | | =========================== |
| | | |
| | | - Fix inactive Save search option after advanced search (#1488607) |
| | | - Fix Remove from group option is active for contact search result (#1488608) |
| | | - Disable autocapitalization in login form on iPad/iPhone (#1488609) |
| | | - Fix focus on the list when list row is clicked (#1488600) |
| | | - Added separate From and To columns apart from smart From/To column (#1486891) |
| | | - Fix fallback to Larry skin when configured skin isn't available (#1488591) |
| | |
| | | - Fixed issue with DBMail bug [http://pear.php.net/bugs/bug.php?id=19077] (#1488594) |
| | | |
| | | * version 5.2 [2012-07-24] |
| | | ----------------------------------------------------------- |
| | | - Added GUI for variables setting - RFC5229 (patch from Paweł Słowik) |
| | |
| | | return PEAR::raiseError(trim($response . $line), 6); |
| | | } |
| | | |
| | | if (preg_match('/^{([0-9]+)}/i', $line, $matches)) { |
| | | // "\+?" is added in the regexp to workaround DBMail bug |
| | | // http://dbmail.org/mantis/view.php?id=963 |
| | | if (preg_match('/^{([0-9]+)\+?}/i', $line, $matches)) { |
| | | // Matches literal string responses. |
| | | $line = $this->_recvBytes($matches[1] + 2); |
| | | |
| | |
| | | $rcmail = rcmail::get_instance(); |
| | | |
| | | if ($this->init_ldap($args['host'])) { |
| | | $results = $this->ldap->search('*', $args['user'], TRUE); |
| | | $results = $this->ldap->search('*', $args['user'], true); |
| | | if (count($results->records) == 1) { |
| | | $args['user_name'] = $results->records[0]['name']; |
| | | if (!$args['user_email'] && strpos($results->records[0]['email'], '@')) { |
| | | $args['user_email'] = rcube_idn_to_ascii($results->records[0]['email']); |
| | | $user_name = is_array($results->records[0]['name']) ? $results->records[0]['name'][0] : $results->records[0]['name']; |
| | | $user_email = is_array($results->records[0]['email']) ? $results->records[0]['email'][0] : $results->records[0]['email']; |
| | | |
| | | $args['user_name'] = $user_name; |
| | | if (!$args['user_email'] && strpos($user_email, '@')) { |
| | | $args['user_email'] = rcube_idn_to_ascii($user_email); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | private function init_ldap($host) |
| | | { |
| | | if ($this->ldap) |
| | | if ($this->ldap) { |
| | | return $this->ldap->ready; |
| | | } |
| | | |
| | | $rcmail = rcmail::get_instance(); |
| | | |
| | |
| | | <email>alec@alec.pl</email> |
| | | <active>yes</active> |
| | | </lead> |
| | | <date>2012-08-07</date> |
| | | <date>2012-08-13</date> |
| | | <version> |
| | | <release>1.0.6</release> |
| | | <release>1.0.7</release> |
| | | <api>1.1</api> |
| | | </version> |
| | | <stability> |
| | |
| | | protected $tagname = 'input'; |
| | | protected $type = 'text'; |
| | | protected $allowed = array( |
| | | 'type','name','value','size','tabindex', |
| | | 'type','name','value','size','tabindex','autocapitalize', |
| | | 'autocomplete','checked','onchange','onclick','disabled','readonly', |
| | | 'spellcheck','results','maxlength','src','multiple','placeholder', |
| | | ); |
| | |
| | | } |
| | | |
| | | // use VLV pseudo-search for autocompletion |
| | | $rcmail = rcmail::get_instance(); |
| | | $rcube = rcube::get_instance(); |
| | | |
| | | if ($this->prop['vlv_search'] && $this->conn && join(',', (array)$fields) == join(',', $rcmail->config->get('contactlist_fields'))) |
| | | if ($this->prop['vlv_search'] && $this->conn && join(',', (array)$fields) == join(',', $rcube->config->get('contactlist_fields'))) |
| | | { |
| | | // add general filter to query |
| | | if (!empty($this->prop['filter']) && empty($this->filter)) |
| | |
| | | if (empty($url) && !preg_match('/_(task|action)=logout/', $_SERVER['QUERY_STRING'])) |
| | | $url = $_SERVER['QUERY_STRING']; |
| | | |
| | | // Disable autocapitalization on iPad/iPhone (#1488609) |
| | | $attrib['autocapitalize'] = 'off'; |
| | | |
| | | // set atocomplete attribute |
| | | $user_attrib = $autocomplete > 0 ? array() : array('autocomplete' => 'off'); |
| | | $host_attrib = $autocomplete > 0 ? array() : array('autocomplete' => 'off'); |
| | |
| | | |
| | | // if a group is currently selected, and there is at least one contact selected |
| | | // thend we can enable the group-remove-selected command |
| | | this.enable_command('group-remove-selected', typeof this.env.group != 'undefined' && list.selection.length > 0); |
| | | |
| | | this.enable_command('group-remove-selected', this.env.group && list.selection.length > 0); |
| | | this.enable_command('compose', this.env.group || list.selection.length > 0); |
| | | this.enable_command('edit', id && writable); |
| | | this.enable_command('delete', list.selection.length && writable); |
| | |
| | | $OUTPUT->command('set_env', 'source', ''); |
| | | $OUTPUT->command('set_env', 'group', ''); |
| | | |
| | | // unselect currently selected directory/group |
| | | if (!$sid) |
| | | if (!$sid) { |
| | | // unselect currently selected directory/group |
| | | $OUTPUT->command('unselect_directory'); |
| | | // enable "Save search" command |
| | | $OUTPUT->command('enable_command', 'search-create', true); |
| | | } |
| | | $OUTPUT->command('update_group_commands'); |
| | | |
| | | // send response |
| | |
| | | function rcmail_wrap_and_quote($text, $length = 72) |
| | | { |
| | | // Rebuild the message body with a maximum of $max chars, while keeping quoted message. |
| | | $max = min(77, $length + 8); |
| | | $max = max(75, $length + 8); |
| | | $lines = preg_split('/\r?\n/', trim($text)); |
| | | $out = ''; |
| | | |
| | |
| | | $form['addressing']['content']['email']['class'] = 'disabled'; |
| | | } |
| | | |
| | | $IDENTITY_RECORD['email'] = rcube_idn_to_utf8($IDENTITY_RECORD['email']); |
| | | $IDENTITY_RECORD['reply-to'] = rcube_idn_to_utf8($IDENTITY_RECORD['reply-to']); |
| | | $IDENTITY_RECORD['bcc'] = rcube_idn_to_utf8($IDENTITY_RECORD['bcc']); |
| | | $IDENTITY_RECORD['email'] = rcube_idn_to_utf8($IDENTITY_RECORD['email']); |
| | | |
| | | // Allow plugins to modify identity form content |
| | | $plugin = $RCMAIL->plugins->exec_hook('identity_form', array( |
| | |
| | | // Validate e-mail addresses |
| | | $email_checks = array(rcube_idn_to_ascii($save_data['email'])); |
| | | foreach (array('reply-to', 'bcc') as $item) { |
| | | foreach (rcube_mime::decode_address_list(rcube_idn_to_ascii($save_data[$item]), null, false) as $rcpt) |
| | | $email_checks[] = $rcpt['mailto']; |
| | | foreach (rcube_mime::decode_address_list($save_data[$item], null, false) as $rcpt) |
| | | $email_checks[] = rcube_idn_to_ascii($rcpt['mailto']); |
| | | } |
| | | |
| | | foreach ($email_checks as $email) { |
| | |
| | | |
| | | if ($save_data['email']) |
| | | $save_data['email'] = rcube_idn_to_ascii($save_data['email']); |
| | | if ($save_data['bcc']) |
| | | $save_data['bcc'] = rcube_idn_to_ascii($save_data['bcc']); |
| | | if ($save_data['reply-to']) |
| | | $save_data['reply-to'] = rcube_idn_to_ascii($save_data['reply-to']); |
| | | |
| | | if (!$plugin['abort']) |
| | | $updated = $RCMAIL->user->update_identity($iid, $save_data); |
| | | else |
| | |
| | | $save_data = $plugin['record']; |
| | | |
| | | if ($save_data['email']) |
| | | $save_data['email'] = rcube_idn_to_ascii($save_data['email']); |
| | | if ($save_data['bcc']) |
| | | $save_data['bcc'] = rcube_idn_to_ascii($save_data['bcc']); |
| | | if ($save_data['reply-to']) |
| | | $save_data['reply-to'] = rcube_idn_to_ascii($save_data['reply-to']); |
| | | $save_data['email'] = rcube_idn_to_ascii($save_data['email']); |
| | | |
| | | if (!$plugin['abort']) |
| | | $insert_id = $save_data['email'] ? $RCMAIL->user->insert_identity($save_data) : null; |
| | |
| | | background-position: 6px 2px; |
| | | } |
| | | |
| | | #mailboxlist li:first-child { |
| | | border-radius: 4px 4px 0 0; |
| | | } |
| | | |
| | | #mailboxlist li.mailbox a { |
| | | padding-left: 36px; |
| | | white-space: nowrap; |
| | |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .uibox .boxfooter { |
| | | border-radius: 0 0 4px 4px; |
| | | } |
| | | |
| | | .boxfooter .listbutton { |
| | | display: inline-block; |
| | | text-decoration: none; |
| | |
| | | margin-top: 1px; |
| | | } |
| | | |
| | | .uibox .boxfooter .listbutton:first-child { |
| | | border-radius: 0 0 0 4px; |
| | | } |
| | | |
| | | .boxfooter .listbutton .inner { |
| | | display: inline-block; |
| | | width: 48px; |