diff options
| author | Aleksander Machniak <alec@alec.pl> | 2014-08-17 09:11:56 +0200 | 
|---|---|---|
| committer | Aleksander Machniak <alec@alec.pl> | 2014-08-17 09:11:56 +0200 | 
| commit | e66a77e5601842a855963a25c3f4e229969c3392 (patch) | |
| tree | c52631ea3f580cf36b0d2ce883e0011881155acc | |
| parent | e7cd99ca9e81e4f516576fff5954f68ce005cf7a (diff) | |
Fix contacts list update after adding/deleting/moving a contact (#1490028, #1490033)
| -rw-r--r-- | CHANGELOG | 1 | ||||
| -rw-r--r-- | program/js/list.js | 3 | ||||
| -rw-r--r-- | program/steps/addressbook/delete.inc | 40 | ||||
| -rw-r--r-- | program/steps/addressbook/move.inc | 24 | ||||
| -rw-r--r-- | program/steps/addressbook/save.inc | 21 | ||||
| -rw-r--r-- | program/steps/addressbook/undo.inc | 3 | 
6 files changed, 45 insertions, 47 deletions
@@ -54,6 +54,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 65e09e878..7e84ef2ae 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -1417,7 +1417,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 fd0517fe8..4f30fd4b7 100644 --- a/program/steps/addressbook/save.inc +++ b/program/steps/addressbook/save.inc @@ -235,29 +235,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');  | 
