Thomas Bruederli
2013-01-25 490119976193a92acdbacd50b86ee7afd9e38ef8
program/steps/mail/list_contacts.inc
@@ -5,7 +5,7 @@
 | program/steps/mail/list_contacts.inc                                  |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2012, The Roundcube Dev Team                            |
 | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -19,15 +19,59 @@
 +-----------------------------------------------------------------------+
*/
$jsenv = array();
$afields = $RCMAIL->config->get('contactlist_fields');
$sort_col = $RCMAIL->config->get('addressbook_sort_col', 'name');
$page_size = $RCMAIL->config->get('addressbook_pagesize', $RCMAIL->config->get('pagesize', 50));
$page = max(1, intval($_GET['_page']));
// Use search result
if (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search']])) {
    $search  = (array)$_SESSION['search'][$_REQUEST['_search']];
    // get records from all sources
    foreach ($search as $s => $set) {
        $CONTACTS = $RCMAIL->get_address_book($s);
        // reset page
        $CONTACTS->set_page(1);
        $CONTACTS->set_pagesize(9999);
        $CONTACTS->set_search_set($set);
        // get records
        $result = $CONTACTS->list_records($afields);
        while ($row = $result->next()) {
            $row['sourceid'] = $s;
            $key = rcube_addressbook::compose_contact_key($row, $sort_col);
            $records[$key] = $row;
        }
        unset($result);
    }
    // sort the records
    ksort($records, SORT_LOCALE_STRING);
    // create resultset object
    $count  = count($records);
    $first  = ($page-1) * $page_size;
    $result = new rcube_result_set($count, $first);
    // we need only records for current page
    if ($page_size < $count) {
        $records = array_slice($records, $first, $page_size);
    }
    $result->records = array_values($records);
}
// list contacts from selected source
else {
$source = get_input_value('_source', RCUBE_INPUT_GPC);
$CONTACTS = $RCMAIL->get_address_book($source);
$PAGE_SIZE = $RCMAIL->config->get('addressbook_pagesize', $RCMAIL->config->get('pagesize', 50));
if ($CONTACTS && $CONTACTS->ready) {
    // set list properties
    $CONTACTS->set_pagesize($PAGE_SIZE);
    $CONTACTS->set_page(max(1, intval($_GET['_page'])));
        $CONTACTS->set_pagesize($page_size);
        $CONTACTS->set_page($page);
    // list groups of this source (on page one)
    if ($CONTACTS->groups && $CONTACTS->list_page == 1) {
@@ -57,10 +101,11 @@
    // get contacts for this user
    $CONTACTS->set_group(0);
    $afields = $RCMAIL->config->get('contactlist_fields');
    $result = $CONTACTS->list_records($afields);
    }
}
    if (!$result->count && $result->searchonly) {
if (!empty($result) && !$result->count && $result->searchonly) {
        $OUTPUT->show_message('contactsearchonly', 'notice');
    }
    else if (!empty($result) && $result->count > 0) {
@@ -80,11 +125,11 @@
            }
        }
    }
}
// update env
$OUTPUT->set_env('contactdata', $jsresult);
$OUTPUT->set_env('pagecount', ceil($result->count / $PAGE_SIZE));
$OUTPUT->set_env('pagecount', ceil($result->count / $page_size));
$OUTPUT->command('set_page_buttons');
// send response