Aleksander Machniak
2014-08-17 e66a77e5601842a855963a25c3f4e229969c3392
Fix contacts list update after adding/deleting/moving a contact (#1490028, #1490033)
6 files modified
92 ■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/js/list.js 3 ●●●● patch | view | raw | blame | history
program/steps/addressbook/delete.inc 40 ●●●●● patch | view | raw | blame | history
program/steps/addressbook/move.inc 24 ●●●●● patch | view | raw | blame | history
program/steps/addressbook/save.inc 21 ●●●●● patch | view | raw | blame | history
program/steps/addressbook/undo.inc 3 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -54,6 +54,7 @@
- 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
-------------
program/js/list.js
@@ -1417,7 +1417,8 @@
 */
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;
program/steps/addressbook/delete.inc
@@ -77,6 +77,17 @@
    }
}
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 @@
    $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 @@
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 @@
// 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)) {
program/steps/addressbook/move.inc
@@ -142,10 +142,6 @@
}
if (!$deleted || $deleted != $all) {
    // update saved search after data changed
    if ($deleted) {
        rcmail_search_update();
    }
    $OUTPUT->command('list_contacts');
}
else {
@@ -157,8 +153,13 @@
        $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 {
        // 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 @@
    // 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)) {
program/steps/addressbook/save.inc
@@ -235,29 +235,12 @@
                $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');
    }
program/steps/addressbook/undo.inc
@@ -45,9 +45,6 @@
    }
}
// update saved search after data changed
rcmail_search_update();
$RCMAIL->session->remove('contact_undo');
$OUTPUT->show_message('contactrestored', 'confirmation');