From 0203f16312bc949a5cf46ce90fa43de9119e23a8 Mon Sep 17 00:00:00 2001 From: alecpl Date: Mon, 5 Mar 2012 19:56:17 +0000 Subject: - Fix duplicate names handling in addressbook searches (#1488375) --- CHANGELOG | 1 + program/steps/addressbook/delete.inc | 3 ++- program/steps/addressbook/export.inc | 3 ++- program/steps/addressbook/func.inc | 18 ++++++++++++++++++ program/steps/addressbook/list.inc | 2 +- program/steps/addressbook/search.inc | 3 ++- program/steps/addressbook/undo.inc | 7 ------- 7 files changed, 26 insertions(+), 11 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 59c44b964..5864b2b2b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Fix duplicate names handling in addressbook searches (#1488375) - Fix displaying HTML messages from Disqus (#1488372) - Exclude E_STRICT from error_reporting for PHP 5.4 - Copy all skins in installto script (#1488376) diff --git a/program/steps/addressbook/delete.inc b/program/steps/addressbook/delete.inc index beba1ae73..f19dcf482 100644 --- a/program/steps/addressbook/delete.inc +++ b/program/steps/addressbook/delete.inc @@ -72,6 +72,7 @@ $page = isset($_SESSION['page']) ? $_SESSION['page'] : 1; // update saved search after data changed if (($search_request = $_REQUEST['_search']) && isset($_SESSION['search'][$search_request])) { + $sort_col = $RCMAIL->config->get('addressbook_sort_col', 'name'); $search = (array)$_SESSION['search'][$search_request]; $records = array(); @@ -94,7 +95,7 @@ if (($search_request = $_REQUEST['_search']) && isset($_SESSION['search'][$searc while ($row = $result->next()) { $row['sourceid'] = $s; - $key = $row['name'] . ':' . $row['sourceid']; + $key = rcmail_contact_key($row, $sort_col); $records[$key] = $row; } unset($result); diff --git a/program/steps/addressbook/export.inc b/program/steps/addressbook/export.inc index 0fe193bf2..c0dbd8bf1 100644 --- a/program/steps/addressbook/export.inc +++ b/program/steps/addressbook/export.inc @@ -27,6 +27,7 @@ // Use search result if (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search']])) { + $sort_col = $RCMAIL->config->get('addressbook_sort_col', 'name'); $search = (array)$_SESSION['search'][$_REQUEST['_search']]; $records = array(); @@ -44,7 +45,7 @@ if (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search while ($row = $result->next()) { $row['sourceid'] = $s; - $key = $row['name'] . ':' . $row['sourceid']; + $key = rcmail_contact_key($row, $sort_col); $records[$key] = $row; } unset($result); diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc index f261527e4..84796baee 100644 --- a/program/steps/addressbook/func.inc +++ b/program/steps/addressbook/func.inc @@ -729,6 +729,24 @@ function rcmail_format_date_col($val) } +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 * diff --git a/program/steps/addressbook/list.inc b/program/steps/addressbook/list.inc index de7149bce..91852a421 100644 --- a/program/steps/addressbook/list.inc +++ b/program/steps/addressbook/list.inc @@ -50,7 +50,7 @@ if (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search while ($row = $result->next()) { $row['sourceid'] = $s; - $key = $row[$sort_col] . ':' . $row['sourceid']; + $key = rcmail_contact_key($row, $sort_col); $records[$key] = $row; } unset($result); diff --git a/program/steps/addressbook/search.inc b/program/steps/addressbook/search.inc index 54d2c4dab..2c6548184 100644 --- a/program/steps/addressbook/search.inc +++ b/program/steps/addressbook/search.inc @@ -147,6 +147,7 @@ function rcmail_contact_search() $sources = $RCMAIL->get_address_sources(); $search_set = array(); $records = array(); + $sort_col = $RCMAIL->config->get('addressbook_sort_col', 'name'); foreach ($sources as $s) { $source = $RCMAIL->get_address_book($s['id']); @@ -185,7 +186,7 @@ function rcmail_contact_search() while ($row = $result->next()) { $row['sourceid'] = $s['id']; - $key = $row['name'] . ':' . $row['sourceid']; + $key = rcmail_contact_key($row, $sort_col); $records[$key] = $row; } diff --git a/program/steps/addressbook/undo.inc b/program/steps/addressbook/undo.inc index 88701a4e6..4283ed185 100644 --- a/program/steps/addressbook/undo.inc +++ b/program/steps/addressbook/undo.inc @@ -68,13 +68,6 @@ if ($delcnt && ($search_request = $_REQUEST['_search']) && isset($_SESSION['sear continue; } - while ($row = $result->next()) { - $row['sourceid'] = $s; - $key = $row['name'] . ':' . $row['sourceid']; - $records[$key] = $row; - } - unset($result); - $search[$s] = $source->get_search_set(); } -- cgit v1.2.3