summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2014-08-17 09:11:56 +0200
committerAleksander Machniak <alec@alec.pl>2014-08-17 09:14:20 +0200
commite6f21118b8d63de797c2af889c710d33ce908c8c (patch)
treeb4cd287ed9f41a7aa4429be59dd5b02748cd7b9f
parent2d284df861ed0d0da5e9c36c437c32ba8fbf6e68 (diff)
Fix contacts list update after adding/deleting/moving a contact (#1490028, #1490033)
-rw-r--r--CHANGELOG1
-rw-r--r--program/js/list.js3
-rw-r--r--program/steps/addressbook/delete.inc40
-rw-r--r--program/steps/addressbook/move.inc24
-rw-r--r--program/steps/addressbook/save.inc21
-rw-r--r--program/steps/addressbook/undo.inc3
6 files changed, 45 insertions, 47 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 853f38e11..83f86a7b9 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -10,6 +10,7 @@ CHANGELOG Roundcube Webmail
- Fix invalid Content-Type header when send_format_flowed=false (#1489992)
- Fix errors when adding/updating contacts in active search (#1490015)
- Fix incorrect thumbnail rotation with GD and exif orientation data (#1490029)
+- Fix contacts list update after adding/deleting/moving a contact (#1490028, #1490033)
RELEASE 1.0.2
-------------
diff --git a/program/js/list.js b/program/js/list.js
index b54b4daf3..fd14c630c 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -1282,7 +1282,8 @@ use_arrow_key: function(keyCode, mod_key)
*/
scrollto: function(id)
{
- var row = this.rows[id].obj;
+ var row = this.rows[id] ? this.rows[id].obj : null;
+
if (row && this.frame) {
var scroll_to = Number(row.offsetTop),
head_offset = 0;
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');