Changeset 5415 in subversion
- Timestamp:
- Nov 11, 2011 10:04:45 AM (19 months ago)
- Location:
- branches/release-0.7
- Files:
-
- 1 added
- 29 edited
-
CHANGELOG (modified) (1 diff)
-
config/main.inc.php.dist (modified) (2 diffs)
-
plugins/acl/acl.js (modified) (1 diff)
-
plugins/acl/acl.php (modified) (2 diffs)
-
plugins/newmail_notifier/localization/lv_LV.inc (added)
-
program/include/rcube_addressbook.php (modified) (3 diffs)
-
program/include/rcube_contacts.php (modified) (8 diffs)
-
program/include/rcube_imap.php (modified) (1 diff)
-
program/include/rcube_ldap.php (modified) (8 diffs)
-
program/include/rcube_session.php (modified) (1 diff)
-
program/js/app.js (modified) (3 diffs)
-
program/localization/en_US/labels.inc (modified) (2 diffs)
-
program/localization/pl_PL/labels.inc (modified) (1 diff)
-
program/steps/addressbook/copy.inc (modified) (1 diff)
-
program/steps/addressbook/import.inc (modified) (1 diff)
-
program/steps/addressbook/mailto.inc (modified) (1 diff)
-
program/steps/addressbook/save.inc (modified) (1 diff)
-
program/steps/addressbook/search.inc (modified) (2 diffs)
-
program/steps/mail/addcontact.inc (modified) (3 diffs)
-
program/steps/mail/autocomplete.inc (modified) (6 diffs)
-
program/steps/mail/func.inc (modified) (1 diff)
-
program/steps/mail/show.inc (modified) (3 diffs)
-
program/steps/settings/func.inc (modified) (1 diff)
-
program/steps/settings/save_prefs.inc (modified) (1 diff)
-
skins/default/common.css (modified) (4 diffs)
-
skins/default/ie6hacks.css (modified) (1 diff)
-
skins/default/mail.css (modified) (3 diffs)
-
skins/default/templates/message.html (modified) (1 diff)
-
skins/default/templates/messagepreview.html (modified) (1 diff)
-
tests/mailfunc.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/release-0.7/CHANGELOG
r5402 r5415 2 2 =========================== 3 3 4 - Add option to skip alternative email addresses in autocompletion 5 - Fix inconsistent behaviour of Compose button in Drafts folder, add Edit button for drafts 6 - Fix problem with parsing HTML message body with non-unicode characters (#1487813) 7 - Add option to define matching method for addressbook search (#1486564, #1487907) 4 8 - Make email recipients separator configurable 5 9 - Fix so folders with \Noinferiors attribute aren't listed in parent selector -
branches/release-0.7/config/main.inc.php.dist
r5402 r5415 628 628 $rcmail_config['address_template'] = '{street}<br/>{locality} {zipcode}<br/>{country} {region}'; 629 629 630 // Matching mode for addressbook search (including autocompletion) 631 // 0 - partial (*abc*), default 632 // 1 - strict (abc) 633 // 2 - prefix (abc*) 634 // Note: For LDAP sources fuzzy_search must be enabled to use 'partial' or 'prefix' mode 635 $rcmail_config['addressbook_search_mode'] = 0; 636 630 637 // ---------------------------------- 631 638 // USER PREFERENCES … … 775 782 $rcmail_config['spellcheck_before_send'] = false; 776 783 784 // Skip alternative email addresses in autocompletion (show one address per contact) 785 $rcmail_config['autocomplete_single'] = false; 786 777 787 // end of config file -
branches/release-0.7/plugins/acl/acl.js
r5263 r5415 2 2 * ACL plugin script 3 3 * 4 * @version 0.6. 24 * @version 0.6.3 5 5 * @author Aleksander Machniak <alec@alec.pl> 6 6 */ -
branches/release-0.7/plugins/acl/acl.php
r5263 r5415 4 4 * Folders Access Control Lists Management (RFC4314, RFC2086) 5 5 * 6 * @version 0.6. 26 * @version 0.6.3 7 7 * @author Aleksander Machniak <alec@alec.pl> 8 8 * … … 92 92 93 93 if ($this->init_ldap()) { 94 $this->ldap->set_pagesize((int)$this->rc->config->get('autocomplete_max', 15)); 95 $result = $this->ldap->search('*', $search); 94 $max = (int) $this->rc->config->get('autocomplete_max', 15); 95 $mode = (int) $this->rc->config->get('addressbook_search_mode'); 96 97 $this->ldap->set_pagesize($max); 98 $result = $this->ldap->search('*', $search, $mode); 96 99 97 100 foreach ($result->records as $record) { -
branches/release-0.7/program/include/rcube_addressbook.php
r5328 r5415 97 97 * @param array List of fields to search in 98 98 * @param string Search value 99 * @param int Matching mode: 100 * 0 - partial (*abc*), 101 * 1 - strict (=), 102 * 2 - prefix (abc*) 99 103 * @param boolean True if results are requested, False if count only 100 104 * @param boolean True to skip the count query (select only) … … 102 106 * @return object rcube_result_set List of contact records and 'count' value 103 107 */ 104 abstract function search($fields, $value, $ strict=false, $select=true, $nocount=false, $required=array());108 abstract function search($fields, $value, $mode=0, $select=true, $nocount=false, $required=array()); 105 109 106 110 /** … … 400 404 $out = array(); 401 405 foreach ($data as $c => $values) { 402 if ( strpos($c, $col) === 0) {406 if ($c === $col || strpos($c, $col.':') === 0) { 403 407 if ($flat) { 404 408 $out = array_merge($out, (array)$values); -
branches/release-0.7/program/include/rcube_contacts.php
r5402 r5415 178 178 " AND user_id=?", 179 179 $group_id, $this->user_id); 180 180 181 181 if ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) { 182 182 $sql_arr['ID'] = $sql_arr['contactgroup_id']; 183 183 return $sql_arr; 184 184 } 185 185 186 186 return null; 187 187 } … … 269 269 * @param mixed $fields The field name of array of field names to search in 270 270 * @param mixed $value Search value (or array of values when $fields is array) 271 * @param boolean $strict True for strict (=), False for partial (LIKE) matching 271 * @param int $mode Matching mode: 272 * 0 - partial (*abc*), 273 * 1 - strict (=), 274 * 2 - prefix (abc*) 272 275 * @param boolean $select True if results are requested, False if count only 273 276 * @param boolean $nocount True to skip the count query (select only) … … 276 279 * @return object rcube_result_set Contact records and 'count' value 277 280 */ 278 function search($fields, $value, $ strict=false, $select=true, $nocount=false, $required=array())281 function search($fields, $value, $mode=0, $select=true, $nocount=false, $required=array()) 279 282 { 280 283 if (!is_array($fields)) … … 284 287 285 288 $where = $and_where = array(); 289 $mode = intval($mode); 286 290 287 291 foreach ($fields as $idx => $col) { … … 296 300 else if ($col == '*') { 297 301 $words = array(); 298 foreach (explode(" ", self::normalize_string($value)) as $word) 299 $words[] = $this->db->ilike('words', '%'.$word.'%'); 302 foreach (explode(" ", self::normalize_string($value)) as $word) { 303 switch ($mode) { 304 case 1: // strict 305 $words[] = '(' . $this->db->ilike('words', $word.' %') 306 . ' OR ' . $this->db->ilike('words', '% '.$word.' %') 307 . ' OR ' . $this->db->ilike('words', '% '.$word) . ')'; 308 break; 309 case 2: // prefix 310 $words[] = '(' . $this->db->ilike('words', $word.'%') 311 . ' OR ' . $this->db->ilike('words', '% '.$word.'%') . ')'; 312 break; 313 default: // partial 314 $words[] = $this->db->ilike('words', '%'.$word.'%'); 315 } 316 } 300 317 $where[] = '(' . join(' AND ', $words) . ')'; 301 318 } … … 304 321 // table column 305 322 if (in_array($col, $this->table_cols)) { 306 if ($strict) { 323 switch ($mode) { 324 case 1: // strict 307 325 $where[] = $this->db->quoteIdentifier($col).' = '.$this->db->quote($val); 308 } 309 else { 326 break; 327 case 2: // prefix 328 $where[] = $this->db->ilike($col, $val.'%'); 329 break; 330 default: // partial 310 331 $where[] = $this->db->ilike($col, '%'.$val.'%'); 311 332 } … … 314 335 else { 315 336 if (in_array($col, $this->fulltext_cols)) { 316 foreach (explode(" ", self::normalize_string($val)) as $word) 317 $words[] = $this->db->ilike('words', '%'.$word.'%'); 337 foreach (explode(" ", self::normalize_string($val)) as $word) { 338 switch ($mode) { 339 case 1: // strict 340 $words[] = '(' . $this->db->ilike('words', $word.' %') 341 . ' OR ' . $this->db->ilike('words', '% '.$word.' %') 342 . ' OR ' . $this->db->ilike('words', '% '.$word) . ')'; 343 break; 344 case 2: // prefix 345 $words[] = '(' . $this->db->ilike('words', $word.'%') 346 . ' OR ' . $this->db->ilike('words', ' '.$word.'%') . ')'; 347 break; 348 default: // partial 349 $words[] = $this->db->ilike('words', '%'.$word.'%'); 350 } 351 } 318 352 $where[] = '(' . join(' AND ', $words) . ')'; 319 353 } … … 363 397 foreach ((array)$row[$col] as $value) { 364 398 // composite field, e.g. address 365 if (is_array($value)) { 366 $value = implode($value); 367 } 368 $value = mb_strtolower($value); 369 if (($strict && $value == $search) || (!$strict && strpos($value, $search) !== false)) { 370 $found[$colname] = true; 371 break; 399 foreach ((array)$value as $val) { 400 $val = mb_strtolower($val); 401 switch ($mode) { 402 case 1: 403 $got = ($val == $search); 404 break; 405 case 2: 406 $got = ($search == substr($val, 0, strlen($search))); 407 break; 408 default: 409 $got = (strpos($val, $search) !== false); 410 break; 411 } 412 413 if ($got) { 414 $found[$colname] = true; 415 break 2; 416 } 372 417 } 373 418 } -
branches/release-0.7/program/include/rcube_imap.php
r5402 r5415 479 479 function get_mailbox_name() 480 480 { 481 return $this-> conn->connected() ? $this->mailbox : '';481 return $this->mailbox; 482 482 } 483 483 -
branches/release-0.7/program/include/rcube_ldap.php
r5402 r5415 691 691 * @param mixed $fields The field name of array of field names to search in 692 692 * @param mixed $value Search value (or array of values when $fields is array) 693 * @param boolean $strict True for strict, False for partial (fuzzy) matching 693 * @param int $mode Matching mode: 694 * 0 - partial (*abc*), 695 * 1 - strict (=), 696 * 2 - prefix (abc*) 694 697 * @param boolean $select True if results are requested, False if count only 695 698 * @param boolean $nocount (Not used) … … 698 701 * @return array Indexed list of contact records and 'count' value 699 702 */ 700 function search($fields, $value, $strict=false, $select=true, $nocount=false, $required=array()) 701 { 703 function search($fields, $value, $mode=0, $select=true, $nocount=false, $required=array()) 704 { 705 $mode = intval($mode); 706 702 707 // special treatment for ID-based search 703 708 if ($fields == 'ID' || $fields == $this->primary_key) … … 731 736 732 737 // get all entries of this page and post-filter those that really match the query 738 $search = mb_strtolower($value); 733 739 $this->result = new rcube_result_set(0); 734 740 $entries = ldap_get_entries($this->conn, $this->ldap_result); 741 735 742 for ($i = 0; $i < $entries['count']; $i++) { 736 743 $rec = $this->_ldap2result($entries[$i]); 737 if (stripos($rec['name'] . $rec['email'], $value) !== false) { 738 $this->result->add($rec); 739 $this->result->count++; 744 foreach (array('email', 'name') as $f) { 745 $val = mb_strtolower($rec[$f]); 746 switch ($mode) { 747 case 1: 748 $got = ($val == $search); 749 break; 750 case 2: 751 $got = ($search == substr($val, 0, strlen($search))); 752 break; 753 default: 754 $got = (strpos($val, $search) !== false); 755 break; 756 } 757 758 if ($got) { 759 $this->result->add($rec); 760 $this->result->count++; 761 break; 762 } 740 763 } 741 764 } … … 746 769 // use AND operator for advanced searches 747 770 $filter = is_array($value) ? '(&' : '(|'; 748 $wc = !$strict && $this->prop['fuzzy_search'] ? '*' : ''; 771 // set wildcards 772 $wp = $ws = ''; 773 if (!empty($this->prop['fuzzy_search']) && $mode != 1) { 774 $ws = '*'; 775 if (!$mode) { 776 $wp = '*'; 777 } 778 } 749 779 750 780 if ($fields == '*') … … 760 790 { 761 791 foreach ($this->prop['search_fields'] as $field) { 762 $filter .= "($field=$w c" . $this->_quote_string($value) . "$wc)";792 $filter .= "($field=$wp" . $this->_quote_string($value) . "$ws)"; 763 793 } 764 794 } … … 769 799 $val = is_array($value) ? $value[$idx] : $value; 770 800 if ($f = $this->_map_field($field)) { 771 $filter .= "($f=$w c" . $this->_quote_string($val) . "$wc)";801 $filter .= "($f=$wp" . $this->_quote_string($val) . "$ws)"; 772 802 } 773 803 } … … 1418 1448 $groups = array(); 1419 1449 if ($search) { 1420 $search = strtolower($search);1450 $search = mb_strtolower($search); 1421 1451 foreach ($group_cache as $group) { 1422 if (str str(strtolower($group['name']), $search))1452 if (strpos(mb_strtolower($group['name']), $search) !== false) 1423 1453 $groups[] = $group; 1424 1454 } … … 1496 1526 } 1497 1527 1498 $group_sortnames[] = strtolower($ldap_data[$i][$sort_attr][0]);1528 $group_sortnames[] = mb_strtolower($ldap_data[$i][$sort_attr][0]); 1499 1529 } 1500 1530 -
branches/release-0.7/program/include/rcube_session.php
r5405 r5415 411 411 { 412 412 if ($this->key && $this->memcache) 413 $ this->mc_read($this->key);413 $data = $this->mc_read($this->key); 414 414 else if ($this->key) 415 $this->db_read($this->key); 415 $data = $this->db_read($this->key); 416 417 if ($data) 418 session_decode($data); 416 419 } 417 420 -
branches/release-0.7/program/js/app.js
r5402 r5415 208 208 'print', 'load-attachment', 'load-headers', 'forward-attachment']; 209 209 210 if (this.env.action =='show' || this.env.action=='preview') {210 if (this.env.action == 'show' || this.env.action == 'preview') { 211 211 this.enable_command(this.env.message_commands, this.env.uid); 212 212 this.enable_command('reply-list', this.env.list_post); … … 461 461 462 462 // check input before leaving compose step 463 if (this.task =='mail' && this.env.action=='compose' && $.inArray(command, this.env.compose_commands)<0) {463 if (this.task == 'mail' && this.env.action == 'compose' && $.inArray(command, this.env.compose_commands)<0) { 464 464 if (this.cmp_hash != this.compose_field_hash() && !confirm(this.get_label('notsentwarning'))) 465 465 return false; … … 816 816 if (this.task == 'mail') { 817 817 url += '&_mbox='+urlencode(this.env.mailbox); 818 819 if (this.env.mailbox == this.env.drafts_mailbox) { 820 var uid; 821 if (uid = this.get_single_uid()) 822 url += '&_draft_uid='+uid; 823 } 824 else if (props) 818 if (props) 825 819 url += '&_to='+urlencode(props); 826 820 } -
branches/release-0.7/program/localization/en_US/labels.inc
r5210 r5415 226 226 $labels['showimages'] = 'Display images'; 227 227 $labels['alwaysshow'] = 'Always show images from $sender'; 228 $labels['isdraft'] = 'This is a draft message.'; 228 229 229 230 $labels['htmltoggle'] = 'HTML'; … … 431 432 $labels['replysamefolder'] = 'Place replies in the folder of the message being replied to'; 432 433 $labels['defaultaddressbook'] = 'Add new contacts to the selected addressbook'; 434 $labels['autocompletesingle'] = 'Skip alternative email addresses in autocompletion'; 433 435 $labels['spellcheckbeforesend'] = 'Check spelling before sending a message'; 434 436 $labels['spellcheckoptions'] = 'Spellcheck Options'; -
branches/release-0.7/program/localization/pl_PL/labels.inc
r5277 r5415 486 486 $labels['dateformat'] = 'Format daty'; 487 487 $labels['timeformat'] = 'Format czasu'; 488 $labels['isdraft'] = 'To jest kopia robocza wiadomoà 489 Âci.'; 490 $labels['autocompletesingle'] = 'Nie pokazuj alternatywnych adresów przy autouzupeà 491 Ânianiu'; 488 492 489 493 ?> -
branches/release-0.7/program/steps/addressbook/copy.inc
r4960 r5415 61 61 // Note: Some addressbooks allows empty email address field 62 62 if (!empty($a_record['email'])) 63 $result = $TARGET->search('email', $a_record['email'], true, true, true);63 $result = $TARGET->search('email', $a_record['email'], 1, true, true); 64 64 else if (!empty($a_record['name'])) 65 $result = $TARGET->search('name', $a_record['name'], true, true, true);65 $result = $TARGET->search('name', $a_record['name'], 1, true, true); 66 66 else 67 67 $result = new rcube_result_set(); -
branches/release-0.7/program/steps/addressbook/import.inc
r5010 r5415 175 175 if (!$replace && $email) { 176 176 // compare e-mail address 177 $existing = $CONTACTS->search('email', $email, false, false);177 $existing = $CONTACTS->search('email', $email, 1, false); 178 178 if (!$existing->count && $vcard->displayname) { // compare display name 179 $existing = $CONTACTS->search('name', $vcard->displayname, false, false);179 $existing = $CONTACTS->search('name', $vcard->displayname, 1, false); 180 180 } 181 181 if ($existing->count) { -
branches/release-0.7/program/steps/addressbook/mailto.inc
r5328 r5415 32 32 $CONTACTS->set_page(1); 33 33 $CONTACTS->set_pagesize(count($cid) + 2); // +2 to skip counting query 34 $recipients = $CONTACTS->search($CONTACTS->primary_key, $cid, false, true, true, 'email');34 $recipients = $CONTACTS->search($CONTACTS->primary_key, $cid, 0, true, true, 'email'); 35 35 } 36 36 } -
branches/release-0.7/program/steps/addressbook/save.inc
r5108 r5415 163 163 $existing = false; 164 164 foreach ($CONTACTS->get_col_values('email', $a_record, true) as $email) { 165 if ($email && ($res = $CONTACTS->search('email', $email, false, false, true)) && $res->count) {165 if ($email && ($res = $CONTACTS->search('email', $email, 1, false, true)) && $res->count) { 166 166 $OUTPUT->show_message('contactexists', 'notice', null, false); 167 167 break; -
branches/release-0.7/program/steps/addressbook/search.inc
r5189 r5415 138 138 } 139 139 140 // Values matching mode 141 $mode = (int) $RCMAIL->config->get('addressbook_search_mode'); 142 140 143 // get sources list 141 144 $sources = $RCMAIL->get_address_sources(); … … 169 172 170 173 // get contacts count 171 $result = $source->search($fields, $search, false, false);174 $result = $source->search($fields, $search, $mode, false); 172 175 173 176 if (!$result->count) { -
branches/release-0.7/program/steps/mail/addcontact.inc
r5322 r5415 51 51 $OUTPUT->send(); 52 52 } 53 53 54 54 $email = rcube_idn_to_ascii($contact['email']); 55 55 if (!check_email($email, false)) { … … 66 66 // TODO: show dialog to complete record 67 67 // if ($error['type'] == rcube_addressbook::ERROR_VALIDATE) { } 68 68 69 69 $OUTPUT->show_message($error['message'] ? $error['message'] : 'errorsavingcontact', 'error'); 70 70 $OUTPUT->send(); … … 72 72 73 73 // check for existing contacts 74 $existing = $CONTACTS->search('email', $contact['email'], true, false);74 $existing = $CONTACTS->search('email', $contact['email'], 1, false); 75 75 76 76 if ($done = $existing->count) -
branches/release-0.7/program/steps/mail/autocomplete.inc
r5402 r5415 41 41 42 42 43 $MAXNUM = (int)$RCMAIL->config->get('autocomplete_max', 15); 43 $MAXNUM = (int) $RCMAIL->config->get('autocomplete_max', 15); 44 $mode = (int) $RCMAIL->config->get('addressbook_search_mode'); 45 $single = (bool) $RCMAIL->config->get('autocomplete_single'); 44 46 $search = get_input_value('_search', RCUBE_INPUT_GPC, true); 45 47 $source = get_input_value('_source', RCUBE_INPUT_GPC); … … 52 54 53 55 if (!empty($book_types) && strlen($search)) { 54 $contacts = array();56 $contacts = array(); 55 57 $books_num = count($book_types); 58 $search_lc = mb_strtolower($search); 56 59 57 60 foreach ($book_types as $id) { … … 59 62 $abook->set_pagesize($MAXNUM); 60 63 61 if ($result = $abook->search(array('email','name'), $search, false, true, true, 'email')) {64 if ($result = $abook->search(array('email','name'), $search, $mode, true, true, 'email')) { 62 65 while ($sql_arr = $result->iterate()) { 63 66 // Contact can have more than one e-mail address … … 65 68 $email_cnt = count($email_arr); 66 69 foreach ($email_arr as $email) { 67 if (empty($email)) 68 continue; 69 $contact = format_email_recipient($email, $sql_arr['name']); 70 // skip entries that don't match 71 if ($email_cnt > 1 && stripos($contact, $search) === false) { 70 if (empty($email)) { 72 71 continue; 73 72 } 73 74 $contact = format_email_recipient($email, $sql_arr['name']); 75 76 // skip entries that don't match 77 if ($email_cnt > 1 && strpos(mb_strtolower($contact), $search_lc) === false) { 78 continue; 79 } 80 74 81 // skip duplicates 75 82 if (!in_array($contact, $contacts)) { … … 78 85 break 2; 79 86 } 87 88 // skip redundant entries (show only first email address) 89 if ($single) { 90 break; 91 } 80 92 } 81 93 } … … 83 95 84 96 // also list matching contact groups 85 if ($abook->groups ) {97 if ($abook->groups && count($contacts) < $MAXNUM) { 86 98 foreach ($abook->list_groups($search) as $group) { 87 99 $abook->reset(); -
branches/release-0.7/program/steps/mail/func.inc
r5402 r5415 639 639 if (!$p['skip_washer_style_callback']) 640 640 $washer->add_callback('style', 'rcmail_washtml_callback'); 641 642 // Remove non-UTF8 characters (#1487813) 643 $html = rc_utf8_clean($html); 641 644 642 645 $html = $washer->wash($html); -
branches/release-0.7/program/steps/mail/show.inc
r5274 r5415 151 151 } 152 152 153 function rcmail_remote_objects_msg( $attrib)153 function rcmail_remote_objects_msg() 154 154 { 155 155 global $MESSAGE, $RCMAIL; 156 156 157 if (!$attrib['id']) 158 $attrib['id'] = 'rcmremoteobjmsg'; 157 $attrib['id'] = 'remote-objects-message'; 158 $attrib['class'] = 'notice'; 159 $attrib['style'] = 'display: none'; 159 160 160 161 $msg = Q(rcube_label('blockedimages')) . ' '; … … 169 170 $RCMAIL->output->add_gui_object('remoteobjectsmsg', $attrib['id']); 170 171 return html::div($attrib, $msg); 172 } 173 174 function rcmail_message_buttons() 175 { 176 global $MESSAGE, $RCMAIL, $CONFIG; 177 178 $mbox = $RCMAIL->imap->get_mailbox_name(); 179 $delim = $RCMAIL->imap->get_hierarchy_delimiter(); 180 $dbox = $CONFIG['drafts_mbox']; 181 182 // the message is not a draft 183 if ($mbox != $dbox && strpos($mbox, $dbox.$delim) !== 0) { 184 return ''; 185 } 186 187 $attrib['id'] = 'message-buttons'; 188 $attrib['class'] = 'notice'; 189 190 $msg = Q(rcube_label('isdraft')) . ' '; 191 $msg .= html::a(array('href' => "#edit", 'onclick' => JS_OBJECT_NAME.".command('edit')"), Q(rcube_label('edit'))); 192 193 return html::div($attrib, $msg); 194 } 195 196 function rcmail_message_objects($attrib) 197 { 198 global $RCMAIL, $MESSAGE; 199 200 if (!$attrib['id']) 201 $attrib['id'] = 'message-objects'; 202 203 $content = array( 204 rcmail_message_buttons(), 205 rcmail_remote_objects_msg(), 206 ); 207 208 $plugin = $RCMAIL->plugins->exec_hook('message_objects', 209 array('content' => $content, 'message' => $MESSAGE)); 210 211 $content = implode("\n", $plugin['content']); 212 213 return html::div($attrib, $content); 171 214 } 172 215 … … 190 233 'messageattachments' => 'rcmail_message_attachments', 191 234 'mailboxname' => 'rcmail_mailbox_name_display', 192 'blockedobjects' => 'rcmail_remote_objects_msg')); 235 'messageobjects' => 'rcmail_message_objects', 236 )); 193 237 194 238 -
branches/release-0.7/program/steps/settings/func.inc
r5366 r5415 660 660 } 661 661 662 if (!isset($no_override['autocomplete_single'])) { 663 $field_id = 'rcmfd_autocomplete_single'; 664 $checkbox = new html_checkbox(array('name' => '_autocomplete_single', 'id' => $field_id, 'value' => 1)); 665 666 $blocks['main']['options']['autocomplete_single'] = array( 667 'title' => html::label($field_id, Q(rcube_label('autocompletesingle'))), 668 'content' => $checkbox->show($config['autocomplete_single']?1:0), 669 ); 670 } 671 662 672 break; 663 673 -
branches/release-0.7/program/steps/settings/save_prefs.inc
r5210 r5415 94 94 $a_user_prefs = array( 95 95 'default_addressbook' => get_input_value('_default_addressbook', RCUBE_INPUT_POST, true), 96 'autocomplete_single' => isset($_POST['_autocomplete_single']) ? TRUE : FALSE, 96 97 ); 97 98 -
branches/release-0.7/skins/default/common.css
r5337 r5415 231 231 232 232 #message div.notice, 233 # remote-objects-message233 #message-objects div.notice 234 234 { 235 235 background: url(images/display/icons.png) 6px 3px no-repeat; … … 239 239 240 240 #message div.error, 241 #message div.warning 241 #message div.warning, 242 #message-objects div.warning, 243 #message-objects div.error 242 244 { 243 245 background: url(images/display/icons.png) 6px -97px no-repeat; … … 246 248 } 247 249 248 #message div.confirmation 250 #message div.confirmation, 251 #message-objects div.confirmation 249 252 { 250 253 background: url(images/display/icons.png) 6px -47px no-repeat; … … 253 256 } 254 257 255 #message div.loading 258 #message div.loading, 259 #message-objects div.loading 256 260 { 257 261 background: url(images/display/loading.gif) 6px 3px no-repeat; -
branches/release-0.7/skins/default/ie6hacks.css
r5111 r5415 21 21 #message div.warning, 22 22 #message div.confirmation, 23 #remote-objects-message 23 #message-objects div.notice, 24 #message-objects div.error, 25 #message-objects div.warning, 26 #message-objects div.confirmation 24 27 { 25 28 background-image: url(images/display/icons.gif); -
branches/release-0.7/skins/default/mail.css
r5342 r5415 1198 1198 } 1199 1199 1200 #remote-objects-message 1201 { 1202 display: none; 1200 #message-objects div 1201 { 1203 1202 margin: 8px; 1204 1203 min-height: 20px; … … 1206 1205 } 1207 1206 1208 # remote-objects-messagea1207 #message-objects div a 1209 1208 { 1210 1209 color: #666666; … … 1212 1211 } 1213 1212 1214 # remote-objects-messagea:hover1213 #message-objects div a:hover 1215 1214 { 1216 1215 color: #333333; -
branches/release-0.7/skins/default/templates/message.html
r4762 r5415 37 37 <roundcube:object name="messageFullHeaders" id="full-headers" /> 38 38 <roundcube:object name="messageAttachments" id="attachment-list" /> 39 40 <roundcube:object name="blockedObjects" id="remote-objects-message" /> 39 <roundcube:object name="messageObjects" id="message-objects" /> 41 40 <roundcube:object name="messageBody" id="messagebody" /> 42 41 </div> -
branches/release-0.7/skins/default/templates/messagepreview.html
r4455 r5415 14 14 </div> 15 15 16 <roundcube:object name=" blockedObjects" id="remote-objects-message" />16 <roundcube:object name="messageObjects" id="message-objects" /> 17 17 <roundcube:object name="messageBody" id="messagebody" /> 18 18 -
branches/release-0.7/tests/mailfunc.php
r4710 r5415 101 101 102 102 /** 103 * Test washtml class on non-unicode characters (#1487813) 104 */ 105 function test_washtml_utf8() 106 { 107 $part = $this->get_html_part('src/invalidchars.html'); 108 $washed = rcmail_print_body($part); 109 110 $this->assertPattern('/<p>ÃÂÃÅŸÃÅòÃŞû<\/p>/', $washed, "Remove non-unicode characters from HTML message body"); 111 } 112 113 /** 103 114 * Test links pattern replacements in plaintext messages 104 115 */
Note: See TracChangeset
for help on using the changeset viewer.
