From a3b85d7b8560cdc1057fcaffa3acbd247b4b5b7a Mon Sep 17 00:00:00 2001 From: Thomas B. <thomas@roundcube.net> Date: Mon, 07 Oct 2013 13:19:03 -0400 Subject: [PATCH] Merge pull request #133 from cwickert/release-0.9-canned-responses --- program/steps/addressbook/func.inc | 70 +++++++++++++---------------------- 1 files changed, 26 insertions(+), 44 deletions(-) diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc index cefe49e..989b7c1 100644 --- a/program/steps/addressbook/func.inc +++ b/program/steps/addressbook/func.inc @@ -26,7 +26,7 @@ 'name' => array('type' => 'text', 'size' => 40, 'maxlength' => 50, 'limit' => 1, 'label' => rcube_label('name'), 'category' => 'main'), 'firstname' => array('type' => 'text', 'size' => 19, 'maxlength' => 50, 'limit' => 1, 'label' => rcube_label('firstname'), 'category' => 'main'), 'surname' => array('type' => 'text', 'size' => 19, 'maxlength' => 50, 'limit' => 1, 'label' => rcube_label('surname'), 'category' => 'main'), - 'email' => array('type' => 'text', 'size' => 40, 'maxlength' => 50, 'label' => rcube_label('email'), 'subtypes' => array('home','work','other'), 'category' => 'main'), + 'email' => array('type' => 'text', 'size' => 40, 'maxlength' => 254, 'label' => rcube_label('email'), 'subtypes' => array('home','work','other'), 'category' => 'main'), 'middlename' => array('type' => 'text', 'size' => 19, 'maxlength' => 50, 'limit' => 1, 'label' => rcube_label('middlename'), 'category' => 'main'), 'prefix' => array('type' => 'text', 'size' => 8, 'maxlength' => 20, 'limit' => 1, 'label' => rcube_label('nameprefix'), 'category' => 'main'), 'suffix' => array('type' => 'text', 'size' => 8, 'maxlength' => 20, 'limit' => 1, 'label' => rcube_label('namesuffix'), 'category' => 'main'), @@ -63,12 +63,6 @@ // add list of address sources to client env $js_list = $RCMAIL->get_address_sources(); - $source = get_input_value('_source', RCUBE_INPUT_GPC); - - // use first directory by default - if (!strlen($source) || !isset($js_list[$source])) - $source = $js_list[key($js_list)]['id']; - // count all/writeable sources $writeable = 0; $count = 0; @@ -93,8 +87,16 @@ $_SESSION['addressbooks_count'] = $count; $_SESSION['addressbooks_count_writeable'] = $writeable; - if (!strlen($source)) - $source = strval(key($js_list)); + // select address book + $source = get_input_value('_source', RCUBE_INPUT_GPC); + + // use first directory by default + if (!strlen($source) || !isset($js_list[$source])) { + $source = $RCMAIL->config->get('default_addressbook'); + if (!strlen($source) || !isset($js_list[$source])) { + $source = strval(key($js_list)); + } + } $CONTACTS = rcmail_contact_source($source, true); } @@ -158,17 +160,6 @@ } -function rcmail_default_source($writable=false) -{ - global $RCMAIL; - - // get list of address sources - $first = reset($RCMAIL->get_address_sources($writable)); - - // use first directory by default - return $first['id']; -} - function rcmail_set_sourcename($abook) { global $OUTPUT; @@ -176,7 +167,7 @@ // get address book name (for display) if ($abook && $_SESSION['addressbooks_count'] > 1) { $name = $abook->get_name(); - if (!$name && $source == 0) { + if (!$name) { $name = rcube_label('personaladrbook'); } $OUTPUT->set_env('sourcename', html_entity_decode($name, ENT_COMPAT, 'UTF-8')); @@ -742,30 +733,12 @@ } -function rcmail_contact_key($row, $sort_col) -{ - $key = $row[$sort_col] . ':' . $row['sourceid']; - - // add email to a key to not skip contacts with the same name (#1488375) - if (!empty($row['email'])) { - if (is_array($row['email'])) { - $key .= ':' . implode(':', $row['email']); - } - else { - $key .= ':' . $row['email']; - } - } - - return $key; -} - - /** * Returns contact ID(s) and source(s) from GET/POST data * * @return array List of contact IDs per-source */ -function rcmail_get_cids() +function rcmail_get_cids($filter = null) { // contact ID (or comma-separated list of IDs) is provided in two // forms. If _source is an empty string then the ID is a string @@ -773,6 +746,10 @@ $cid = get_input_value('_cid', RCUBE_INPUT_GPC); $source = (string) get_input_value('_source', RCUBE_INPUT_GPC); + + if (is_array($cid)) { + return $cid; + } if (!preg_match('/^[a-zA-Z0-9\+\/=_-]+(,[a-zA-Z0-9\+\/=_-]+)*$/', $cid)) { return array(); @@ -784,24 +761,29 @@ // create per-source contact IDs array foreach ($cid as $id) { - // if _source is not specified we'll find it from decoded ID + // extract source ID from contact ID (it's there in search mode) + // see #1488959 and #1488862 for reference if (!$got_source) { if ($sep = strrpos($id, '-')) { $contact_id = substr($id, 0, $sep); - $source_id = substr($id, $sep+1); + $source_id = (string) substr($id, $sep+1); if (strlen($source_id)) { - $result[(string)$source_id][] = $contact_id; + $result[$source_id][] = $contact_id; } } } else { + if (substr($id, -($got_source+1)) === "-$source") { + $id = substr($id, 0, -($got_source+1)); + } $result[$source][] = $id; } } - return $result; + return $filter !== null ? $result[$filter] : $result; } + // register UI objects $OUTPUT->add_handlers(array( 'directorylist' => 'rcmail_directory_list', -- Gitblit v1.9.1