| | |
| | | | program/steps/addressbook/func.inc | |
| | | | | |
| | | | This file is part of the RoundCube Webmail client | |
| | | | Copyright (C) 2005, RoundCube Dev. - Switzerland | |
| | | | All rights reserved. | |
| | | | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | |
| | | | Licensed under the GNU GPL | |
| | | | | |
| | | | PURPOSE: | |
| | | | Provide addressbook functionality and GUI objects | |
| | |
| | | |
| | | */ |
| | | |
| | | $CONTACTS_LIST = array(); |
| | | // instantiate a contacts object according to the given source |
| | | $CONTACTS = $RCMAIL->get_address_book(($source = get_input_value('_source', RCUBE_INPUT_GPC))); |
| | | |
| | | $CONTACTS->set_pagesize($CONFIG['pagesize']); |
| | | |
| | | // set list properties and session vars |
| | | if (strlen($_GET['_page'])) |
| | | { |
| | | $CONTACTS_LIST['page'] = $_GET['_page']; |
| | | $_SESSION['page'] = $_GET['_page']; |
| | | } |
| | | if (!empty($_GET['_page'])) |
| | | $CONTACTS->set_page(($_SESSION['page'] = intval($_GET['_page']))); |
| | | else |
| | | $CONTACTS_LIST['page'] = $_SESSION['page'] ? $_SESSION['page'] : 1; |
| | | $CONTACTS->set_page(isset($_SESSION['page']) ?$_SESSION['page'] : 1); |
| | | |
| | | // set message set for search result |
| | | if (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search']])) |
| | | $CONTACTS->set_search_set($_SESSION['search'][$_REQUEST['_search']]); |
| | | |
| | | // set data source env |
| | | $OUTPUT->set_env('source', $source ? $source : '0'); |
| | | $OUTPUT->set_env('readonly', $CONTACTS->readonly, false); |
| | | |
| | | // add list of address sources to client env |
| | | $js_list = array(); |
| | | if (strtolower($CONFIG['address_book_type']) != 'ldap') { |
| | | // We are using the DB address book, add it. |
| | | $js_list = array("0" => array('id' => 0, 'readonly' => false)); |
| | | } |
| | | if (is_array($CONFIG['ldap_public'])) { |
| | | foreach ($CONFIG['ldap_public'] as $id => $prop) |
| | | $js_list[$id] = array('id' => $id, 'readonly' => !$prop['writable']); |
| | | } |
| | | $OUTPUT->set_env('address_sources', $js_list); |
| | | |
| | | |
| | | function rcmail_directory_list($attrib) |
| | | { |
| | | global $CONFIG, $OUTPUT; |
| | | |
| | | if (!$attrib['id']) |
| | | $attrib['id'] = 'rcmdirectorylist'; |
| | | |
| | | $out = ''; |
| | | $local_id = '0'; |
| | | $current = get_input_value('_source', RCUBE_INPUT_GPC); |
| | | $line_templ = html::tag('li', array('id' => 'rcmli%s', 'class' => '%s'), |
| | | html::a(array('href' => '%s', 'onclick' => "return ".JS_OBJECT_NAME.".command('list','%s',this)"), '%s')); |
| | | |
| | | if (strtolower($CONFIG['address_book_type']) != 'ldap') { |
| | | $out .= sprintf($line_templ, $local_id, (!$current ? 'selected' : ''), |
| | | Q(rcmail_url(null, array('_source' => $local_id))), $local_id, rcube_label('personaladrbook')); |
| | | } // end if |
| | | else { |
| | | // DB address book not used, see if a source is set, if not use the |
| | | // first LDAP directory. |
| | | if (!$current) { |
| | | $current = key((array)$CONFIG['ldap_public']); |
| | | } // end if |
| | | } // end else |
| | | |
| | | foreach ((array)$CONFIG['ldap_public'] as $id => $prop) { |
| | | $js_id = JQ($id); |
| | | $dom_id = preg_replace('/[^a-z0-9\-_]/i', '', $id); |
| | | $out .= sprintf($line_templ, $dom_id, ($current == $id ? 'selected' : ''), |
| | | Q(rcmail_url(null, array('_source' => $id))), $js_id, (!empty($prop['name']) ? Q($prop['name']) : Q($id))); |
| | | } |
| | | |
| | | $OUTPUT->add_gui_object('folderlist', $attrib['id']); |
| | | |
| | | return html::tag('ul', $attrib, $out, html::$common_attrib); |
| | | } |
| | | |
| | | |
| | | // return the message list as HTML table |
| | | function rcmail_contacts_list($attrib) |
| | | { |
| | | global $DB, $CONFIG, $OUTPUT, $CONTACTS_LIST, $JS_OBJECT_NAME; |
| | | |
| | | //$skin_path = $CONFIG['skin_path']; |
| | | //$image_tag = '<img src="%s%s" alt="%s" border="0" />'; |
| | | global $CONTACTS, $OUTPUT; |
| | | |
| | | // count contacts for this user |
| | | $sql_result = $DB->query(sprintf("SELECT COUNT(contact_id) AS rows |
| | | FROM %s |
| | | WHERE del!='1' |
| | | AND user_id=%d", |
| | | get_table_name('contacts'), |
| | | $_SESSION['user_id'])); |
| | | |
| | | $sql_arr = $DB->fetch_assoc($sql_result); |
| | | $rowcount = $sql_arr['rows']; |
| | | |
| | | if ($rowcount) |
| | | { |
| | | $start_row = ($CONTACTS_LIST['page']-1) * $CONFIG['pagesize']; |
| | | |
| | | // get contacts from DB |
| | | $sql_result = $DB->query(sprintf("SELECT * FROM %s |
| | | WHERE del!='1' |
| | | AND user_id=%d |
| | | ORDER BY name |
| | | LIMIT %d, %d", |
| | | get_table_name('contacts'), |
| | | $_SESSION['user_id'], |
| | | $start_row, |
| | | $CONFIG['pagesize'])); |
| | | } |
| | | else |
| | | $sql_result = NULL; |
| | | |
| | | |
| | | $result = $CONTACTS->list_records(); |
| | | |
| | | // add id to message list table if not specified |
| | | if (!strlen($attrib['id'])) |
| | | $attrib['id'] = 'rcmAddressList'; |
| | | |
| | | // define list of cols to be displayed |
| | | $a_show_cols = array('name', 'email'); |
| | | |
| | | // create XHTML table |
| | | $out = rcube_table_output($attrib, $sql_result, $a_show_cols, 'contact_id'); |
| | | |
| | | // set client env |
| | | $javascript = sprintf("%s.gui_object('contactslist', '%s');\n", $JS_OBJECT_NAME, $attrib['id']); |
| | | $javascript .= sprintf("%s.set_env('current_page', %d);\n", $JS_OBJECT_NAME, $CONTACTS_LIST['page']); |
| | | $javascript .= sprintf("%s.set_env('pagecount', %d);\n", $JS_OBJECT_NAME, ceil($rowcount/$CONFIG['pagesize'])); |
| | | //$javascript .= sprintf("%s.set_env('contacts', %s);", $JS_OBJECT_NAME, array2js($a_js_message_arr)); |
| | | |
| | | $OUTPUT->add_script($javascript); |
| | | // define list of cols to be displayed |
| | | $a_show_cols = array('name'); |
| | | |
| | | // create XHTML table |
| | | $out = rcube_table_output($attrib, $result->records, $a_show_cols, $CONTACTS->primary_key); |
| | | |
| | | // set client env |
| | | $OUTPUT->add_gui_object('contactslist', $attrib['id']); |
| | | $OUTPUT->set_env('current_page', (int)$CONTACTS->list_page); |
| | | $OUTPUT->set_env('pagecount', ceil($result->count/$CONTACTS->page_size)); |
| | | $OUTPUT->include_script('list.js'); |
| | | |
| | | // add some labels to client |
| | | $OUTPUT->add_label('deletecontactconfirm'); |
| | | |
| | | return $out; |
| | | } |
| | | |
| | | |
| | | |
| | | function rcmail_js_contacts_list($sql_result, $obj_name='this') |
| | | function rcmail_js_contacts_list($result, $prefix='') |
| | | { |
| | | global $DB; |
| | | global $OUTPUT; |
| | | |
| | | $commands = ''; |
| | | |
| | | if (!$sql_result) |
| | | return ''; |
| | | if (empty($result) || $result->count == 0) |
| | | return; |
| | | |
| | | // define list of cols to be displayed |
| | | $a_show_cols = array('name', 'email'); |
| | | |
| | | while ($sql_arr = $DB->fetch_assoc($sql_result)) |
| | | $a_show_cols = array('name'); |
| | | |
| | | while ($row = $result->next()) |
| | | { |
| | | $a_row_cols = array(); |
| | | |
| | | |
| | | // format each col |
| | | foreach ($a_show_cols as $col) |
| | | { |
| | | $cont = rep_specialchars_output($sql_arr[$col]); |
| | | $a_row_cols[$col] = $cont; |
| | | } |
| | | |
| | | $commands .= sprintf("%s.add_contact_row(%s, %s);\n", |
| | | $obj_name, |
| | | $sql_arr['contact_id'], |
| | | array2js($a_row_cols)); |
| | | } |
| | | $a_row_cols[$col] = Q($row[$col]); |
| | | |
| | | return $commands; |
| | | $OUTPUT->command($prefix.'add_contact_row', $row['ID'], $a_row_cols); |
| | | } |
| | | } |
| | | |
| | | |
| | | // similar function as /steps/settings/identities.inc::rcmail_identity_frame() |
| | | function rcmail_contact_frame($attrib) |
| | | { |
| | | global $OUTPUT, $JS_OBJECT_NAME; |
| | | global $OUTPUT; |
| | | |
| | | if (!$attrib['id']) |
| | | $attrib['id'] = 'rcmcontactframe'; |
| | | |
| | | $attrib['name'] = $attrib['id']; |
| | | |
| | | $OUTPUT->add_script(sprintf("%s.set_env('contentframe', '%s');", $JS_OBJECT_NAME, $attrib['name'])); |
| | | $OUTPUT->set_env('contentframe', $attrib['name']); |
| | | $OUTPUT->set_env('blankpage', $attrib['src'] ? $OUTPUT->abs_url($attrib['src']) : 'program/blank.gif'); |
| | | |
| | | $attrib_str = create_attrib_string($attrib, array('name', 'id', 'class', 'style', 'src', 'width', 'height', 'frameborder')); |
| | | $out = '<iframe'. $attrib_str . '></iframe>'; |
| | | |
| | | return $out; |
| | | return html::iframe($attrib); |
| | | } |
| | | |
| | | |
| | | function rcmail_rowcount_display($attrib) |
| | | { |
| | | global $OUTPUT, $JS_OBJECT_NAME; |
| | | global $OUTPUT; |
| | | |
| | | if (!$attrib['id']) |
| | | $attrib['id'] = 'rcmcountdisplay'; |
| | | |
| | | $OUTPUT->add_script(sprintf("%s.gui_object('countdisplay', '%s');", $JS_OBJECT_NAME, $attrib['id'])); |
| | | $OUTPUT->add_gui_object('countdisplay', $attrib['id']); |
| | | |
| | | // allow the following attributes to be added to the <span> tag |
| | | $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id')); |
| | | |
| | | |
| | | $out = '<span' . $attrib_str . '>'; |
| | | $out .= rcmail_get_rowcount_text(); |
| | | $out .= '</span>'; |
| | | return $out; |
| | | return html::span($attrib, rcmail_get_rowcount_text()); |
| | | } |
| | | |
| | | |
| | | |
| | | function rcmail_get_rowcount_text($max=NULL) |
| | | function rcmail_get_rowcount_text() |
| | | { |
| | | global $CONTACTS_LIST, $CONFIG, $DB; |
| | | global $CONTACTS; |
| | | |
| | | $start_row = ($CONTACTS_LIST['page']-1) * $CONFIG['pagesize'] + 1; |
| | | |
| | | // get nr of contacts |
| | | if ($max===NULL) |
| | | { |
| | | $sql_result = $DB->query(sprintf("SELECT 1 FROM %s |
| | | WHERE del!='1' |
| | | AND user_id=%d", |
| | | get_table_name('contacts'), |
| | | $_SESSION['user_id'])); |
| | | |
| | | $max = $DB->num_rows($sql_result); |
| | | } |
| | | |
| | | if ($max==0) |
| | | // read nr of contacts |
| | | $result = $CONTACTS->get_result(); |
| | | if (!$result) |
| | | $result = $CONTACTS->count(); |
| | | |
| | | if ($result->count == 0) |
| | | $out = rcube_label('nocontactsfound'); |
| | | else |
| | | $out = rcube_label(array('name' => 'contactsfromto', |
| | | 'vars' => array('from' => $start_row, |
| | | 'to' => min($max, $start_row + $CONFIG['pagesize'] - 1), |
| | | 'count' => $max))); |
| | | $out = rcube_label(array( |
| | | 'name' => 'contactsfromto', |
| | | 'vars' => array( |
| | | 'from' => $result->first + 1, |
| | | 'to' => min($result->count, $result->first + $CONTACTS->page_size), |
| | | 'count' => $result->count) |
| | | )); |
| | | |
| | | return $out; |
| | | } |
| | | |
| | | ?> |
| | | |
| | | $OUTPUT->set_pagetitle(rcube_label('addressbook')); |
| | | |
| | | // register UI objects |
| | | $OUTPUT->add_handlers(array( |
| | | 'directorylist' => 'rcmail_directory_list', |
| | | 'addresslist' => 'rcmail_contacts_list', |
| | | 'addressframe' => 'rcmail_contact_frame', |
| | | 'recordscountdisplay' => 'rcmail_rowcount_display', |
| | | 'searchform' => array($OUTPUT, 'search_form') |
| | | )); |
| | | |
| | | ?> |