From e6f21118b8d63de797c2af889c710d33ce908c8c Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sun, 17 Aug 2014 09:11:56 +0200 Subject: Fix contacts list update after adding/deleting/moving a contact (#1490028, #1490033) --- program/steps/addressbook/delete.inc | 40 ++++++++++++++++++++++-------------- program/steps/addressbook/move.inc | 24 ++++++++++++++-------- program/steps/addressbook/save.inc | 21 ++----------------- program/steps/addressbook/undo.inc | 3 --- 4 files changed, 42 insertions(+), 46 deletions(-) (limited to 'program/steps') diff --git a/program/steps/addressbook/delete.inc b/program/steps/addressbook/delete.inc index 3d57d7074..f5b8e4eb5 100644 --- a/program/steps/addressbook/delete.inc +++ b/program/steps/addressbook/delete.inc @@ -77,6 +77,17 @@ foreach ($cids as $source => $cid) { } } +if (!empty($_SESSION['contact_undo'])) { + $_SESSION['contact_undo']['ts'] = time(); + $msg = html::span(null, $RCMAIL->gettext('contactdeleted')) + . ' ' . html::a(array('onclick' => rcmail_output::JS_OBJECT_NAME.".command('undo', '', this)"), $RCMAIL->gettext('undo')); + + $OUTPUT->show_message($msg, 'confirmation', null, true, $undo_time); +} +else { + $OUTPUT->show_message('contactdeleted', 'confirmation'); +} + $page = isset($_SESSION['page']) ? $_SESSION['page'] : 1; // update saved search after data changed @@ -87,8 +98,13 @@ if (($records = rcmail_search_update(true)) !== false) { $result = new rcube_result_set($count, $first); $pages = ceil((count($records) + $delcnt) / $PAGE_SIZE); + // last page and it's empty, display previous one + if ($result->count && $result->count <= ($PAGE_SIZE * ($page - 1))) { + $OUTPUT->command('list_page', 'prev'); + $rowcount = $RCMAIL->gettext('loading'); + } // get records from the next page to add to the list - if ($_GET['_from'] != 'show' && $pages > 1 && $page < $pages) { + else if ($pages > 1 && $page < $pages) { // sort the records ksort($records, SORT_LOCALE_STRING); @@ -110,10 +126,15 @@ if (($records = rcmail_search_update(true)) !== false) { else { // count contacts for this user $result = $CONTACTS->count(); + $pages = ceil(($result->count + $delcnt) / $PAGE_SIZE); + // last page and it's empty, display previous one + if ($result->count && $result->count <= ($PAGE_SIZE * ($page - 1))) { + $OUTPUT->command('list_page', 'prev'); + $rowcount = $RCMAIL->gettext('loading'); + } // get records from the next page to add to the list - $pages = ceil(($result->count + $delcnt) / $PAGE_SIZE); - if ($_GET['_from'] != 'show' && $pages > 1 && $page < $pages) { + else if ($pages > 1 && $page < $pages) { $CONTACTS->set_page($page); $records = $CONTACTS->list_records(null, -$delcnt); } @@ -121,18 +142,7 @@ else { // update message count display $OUTPUT->set_env('pagecount', ceil($result->count / $PAGE_SIZE)); -$OUTPUT->command('set_rowcount', rcmail_get_rowcount_text($result)); - -if (!empty($_SESSION['contact_undo'])) { - $_SESSION['contact_undo']['ts'] = time(); - $msg = html::span(null, $RCMAIL->gettext('contactdeleted')) - . ' ' . html::a(array('onclick' => rcmail_output::JS_OBJECT_NAME.".command('undo', '', this)"), $RCMAIL->gettext('undo')); - - $OUTPUT->show_message($msg, 'confirmation', null, true, $undo_time); -} -else { - $OUTPUT->show_message('contactdeleted', 'confirmation'); -} +$OUTPUT->command('set_rowcount', $rowcount ? $rowcount : rcmail_get_rowcount_text($result)); // add new rows from next page (if any) if (!empty($records)) { diff --git a/program/steps/addressbook/move.inc b/program/steps/addressbook/move.inc index 7a730af77..e83276523 100644 --- a/program/steps/addressbook/move.inc +++ b/program/steps/addressbook/move.inc @@ -142,10 +142,6 @@ foreach ($cids as $source => $source_cids) { } if (!$deleted || $deleted != $all) { - // update saved search after data changed - if ($deleted) { - rcmail_search_update(); - } $OUTPUT->command('list_contacts'); } else { @@ -157,8 +153,13 @@ else { $result = new rcube_result_set($count, $first); $pages = ceil((count($records) + $delcnt) / $PAGE_SIZE); + // last page and it's empty, display previous one + if ($result->count && $result->count <= ($PAGE_SIZE * ($page - 1))) { + $OUTPUT->command('list_page', 'prev'); + $rowcount = $RCMAIL->gettext('loading'); + } // get records from the next page to add to the list - if ($_GET['_from'] != 'show' && $pages > 1 && $page < $pages) { + else if ($pages > 1 && $page < $pages) { // sort the records ksort($records, SORT_LOCALE_STRING); @@ -180,10 +181,15 @@ else { else { // count contacts for this user $result = $CONTACTS->count(); - // get records from the next page to add to the list - $pages = ceil(($result->count + $deleted) / $PAGE_SIZE); + $pages = ceil(($result->count + $deleted) / $PAGE_SIZE); - if ($_GET['_from'] != 'show' && $pages > 1 && $page < $pages) { + // last page and it's empty, display previous one + if ($result->count && $result->count <= ($PAGE_SIZE * ($page - 1))) { + $OUTPUT->command('list_page', 'prev'); + $rowcount = $RCMAIL->gettext('loading'); + } + // get records from the next page to add to the list + else if ($pages > 1 && $page < $pages) { $CONTACTS->set_page($page); $records = $CONTACTS->list_records(null, -$deleted); } @@ -191,7 +197,7 @@ else { // update message count display $OUTPUT->set_env('pagecount', ceil($result->count / $PAGE_SIZE)); - $OUTPUT->command('set_rowcount', rcmail_get_rowcount_text($result)); + $OUTPUT->command('set_rowcount', $rowcount ? $rowcount : rcmail_get_rowcount_text($result)); // add new rows from next page (if any) if (!empty($records)) { diff --git a/program/steps/addressbook/save.inc b/program/steps/addressbook/save.inc index e0e38d4d9..45880cb3e 100644 --- a/program/steps/addressbook/save.inc +++ b/program/steps/addressbook/save.inc @@ -231,29 +231,12 @@ else { $CONTACTS->add_to_group($plugin['group_id'], $plugin['ids']); } } - else { - $counts = $CONTACTS->count(); - } // show confirmation $OUTPUT->show_message('successfullysaved', 'confirmation', null, false); - // add contact row to the list - if (empty($_REQUEST['_search']) && (string)$source === (string)$orig_source) { - $CONTACTS->reset(); - $result = $CONTACTS->search($CONTACTS->primary_key, $insert_id); - - rcmail_js_contacts_list($result, 'parent.'); - $OUTPUT->command('parent.contact_list.select', rcube_utils::html_identifier($insert_id)); - - // update record count display - $CONTACTS->reset(); - $OUTPUT->command('parent.set_rowcount', rcmail_get_rowcount_text($counts)); - } - // just refresh the list (#1490015) - else { - $OUTPUT->command('parent.command', 'list'); - } + $OUTPUT->command('parent.set_rowcount', $RCMAIL->gettext('loading')); + $OUTPUT->command('parent.list_contacts'); $OUTPUT->send('iframe'); } diff --git a/program/steps/addressbook/undo.inc b/program/steps/addressbook/undo.inc index ec3feb9c0..91547b765 100644 --- a/program/steps/addressbook/undo.inc +++ b/program/steps/addressbook/undo.inc @@ -45,9 +45,6 @@ foreach ((array)$undo['data'] as $source => $cid) { } } -// update saved search after data changed -rcmail_search_update(); - $RCMAIL->session->remove('contact_undo'); $OUTPUT->show_message('contactrestored', 'confirmation'); -- cgit v1.2.3