diff options
author | thomascube <thomas@roundcube.net> | 2007-04-28 18:07:12 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2007-04-28 18:07:12 +0000 |
commit | f1154163b0a9efb21d722bc658352739040ffd61 (patch) | |
tree | 28ccaa50bc27fa2c3d10eb8650a9862710668494 /program/steps/addressbook/ldapsearchform.inc | |
parent | 9e5d051e97441794d765b094ed46d8cc732c3944 (diff) |
Merged branch devel-addressbook from r443 back to trunk
Diffstat (limited to 'program/steps/addressbook/ldapsearchform.inc')
-rw-r--r-- | program/steps/addressbook/ldapsearchform.inc | 277 |
1 files changed, 0 insertions, 277 deletions
diff --git a/program/steps/addressbook/ldapsearchform.inc b/program/steps/addressbook/ldapsearchform.inc deleted file mode 100644 index a4e08dcdc..000000000 --- a/program/steps/addressbook/ldapsearchform.inc +++ /dev/null @@ -1,277 +0,0 @@ -<?php - -/* - +-----------------------------------------------------------------------+ - | program/steps/addressbook/ldapsearch.inc | - | | - | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005, RoundCube Dev. - Switzerland | - | Licensed under the GNU GPL | - | | - | PURPOSE: | - | Show an ldap search form in the addressbook | - | | - +-----------------------------------------------------------------------+ - | Author: Justin Randell <justin.randell@gmail.com> | - +-----------------------------------------------------------------------+ - - $Id$ - -*/ -require_once 'include/rcube_ldap.inc'; - -/** - * draw the ldap public search form - */ -function rcmail_ldap_public_search_form($attrib) - { - global $CONFIG, $JS_OBJECT_NAME, $OUTPUT; - if (!isset($CONFIG['ldap_public'])) - { - // no ldap servers to search - show_message('noldapserver', 'warning'); - rcmail_overwrite_action('add'); - return false; - } - else - { - // store some information in the session - $_SESSION['ldap_public']['server_count'] = $server_count = count($CONFIG['ldap_public']); - $_SESSION['ldap_public']['server_names'] = $server_names = array_keys($CONFIG['ldap_public']); - } - - list($form_start, $form_end) = get_form_tags($attrib); - $out = "$form_start<table id=\"ldap_public_search_table\">\n\n"; - - // search name field - $search_name = new textfield(array('name' => '_ldap_public_search_name', - 'id' => 'rcmfd_ldap_public_search_name')); - $out .= "<tr><td class=\"title\"><label for=\"rcmfd_ldap_public_search_name\">" . - rep_specialchars_output(rcube_label('ldappublicsearchname')) . - "</label></td><td>" . $search_name->show() . "</td></tr>\n"; - - - // there's more than one server to search for, show a dropdown menu - if ($server_count > 1) - { - $select_server = new select(array('name' => '_ldap_public_servers', - 'id' => 'rcfmd_ldap_public_servers')); - - $select_server->add($server_names, $server_names); - - $out .= '<tr><td class="title"><label for="rcfmd_ldap_public_servers">' . - rep_specialchars_output(rcube_label('ldappublicserverselect')) . - "</label></td><td>" . $select_server->show() . "</td></tr>\n"; - } - - // foreach configured ldap server, set up the search fields - for ($i = 0; $i < $server_count; $i++) - { - $server = $CONFIG['ldap_public'][$server_names[$i]]; - - // only display one search fields select - js takes care of the rest - if (!$i) - { - $field_name = '_ldap_public_search_field'; - $field_id = 'rcfmd_ldap_public_search_field'; - - $search_fields = new select(array('name' => $field_name, - 'id' => $field_id)); - - $search_fields->add(array_keys($server['search_fields']), array_values($server['search_fields'])); - $out .= '<tr><td class="title"><label for="' . $field_id . '">' . - rep_specialchars_output(rcube_label('ldappublicsearchfield')) . - "</label></td><td>" . $search_fields->show() . "</td></tr>\n"; - - $attributes = array('name' => '_ldap_public_search_type', - 'id' => 'rcmfd_ldap_public_search_type'); - - // if there's only one server, and it doesn't accept fuzzy searches, - // then check and disable the check box - thanks pieter - if ($server_count == 1 && !$server['fuzzy_search']) - { - $attributes['CHECKED'] = 'CHECKED'; - $attributes['disabled'] = 'disabled'; - } - - $search_type = new checkbox($attributes); - - $out .= '<tr id="ldap_fuzzy_search"><td class="title"><label for="rcmfd_ldap_public_search_type">' . - rep_specialchars_output(rcube_label('ldappublicsearchtype')) . - "</label></td><td>" . $search_type->show() . "</td></tr>\n"; - } - - if ($server_count > 1) - { - // store the search fields in a js array for each server - $js = ''; - foreach ($server['search_fields'] as $search_name => $search_value) - $js .= "['$search_name', '$search_value'], "; - - // store whether this server accepts fuzzy search as last item in array - $js .= $server['fuzzy_search'] ? "'fuzzy'" : "'exact'"; - $OUTPUT->add_script("rcmail.set_env('{$server_names[$i]}_search_fields', new Array($js));"); - } - } - - // add contact button label text - $OUTPUT->add_script("rcmail.set_env('addcontact', '" . rcube_label('addcontact') . "');"); - - $out .= "\n</table>$form_end"; - return $out; - } - -/** - * get search values and return ldap contacts - */ -function rcmail_ldap_public_list() - { - // just return if we are not being called from a search form - if (!isset($_POST['_action'])) - return null; - - global $CONFIG, $OUTPUT, $JS_OBJECT_NAME; - - // show no search name warning and exit - if (empty($_POST['_ldap_public_search_name']) || trim($_POST['_ldap_public_search_name']) == '') - { - show_message('nosearchname', 'warning'); - return false; - } - - // set up ldap server(s) array or bail - if ($_SESSION['ldap_public']['server_count'] > 1) - // show no ldap server warning and exit - if (empty($_POST['_ldap_public_servers'])) - { - show_message('noldappublicserver', 'warning'); - return false; - } - else - $server_name = $_POST['_ldap_public_servers']; - else if ($_SESSION['ldap_public']['server_count'] == 1) - $server_name = $_SESSION['ldap_public']['server_names'][0]; - else - return false; - - // get search parameters - $search_value = $_POST['_ldap_public_search_name']; - $search_field = $_POST['_ldap_public_search_field']; - - // only use the post var for search type if the ldap server allows 'like' - $exact = true; - if ($CONFIG['ldap_public'][$server_name]['fuzzy_search']) - $exact = isset($_POST['_ldap_public_search_type']) ? true : false; - - // perform an ldap search - $contacts = rcmail_ldap_contact_search($search_value, - $search_field, - $CONFIG['ldap_public'][$server_name], - $exact); - - // if no results, show a warning and return - if (!$contacts) - { - show_message('nocontactsreturned', 'warning'); - return false; - } - - // add id to message list table if not specified - if (!strlen($attrib['id'])) - $attrib['id'] = 'ldapAddressList'; - - // define table class - $attrib['class'] = 'records-table'; - $attrib['cellspacing'] = 0; - - // define list of cols to be displayed - $a_show_cols = array('name', 'email'); - - // create XHTML table - $out = rcube_table_output($attrib, $contacts, $a_show_cols, 'row_id'); - - // set client env - $javascript = "$JS_OBJECT_NAME.gui_object('ldapcontactslist', '{$attrib['id']}');\n"; - $OUTPUT->add_script($javascript); - - return $out; - } - -/** - * perform search for contacts from given public ldap server - */ -function rcmail_ldap_contact_search($search_value, $search_field, $server, $exact=true) - { - global $CONFIG; - - $attributes = array($server['name_field'], $server['mail_field']); - - $LDAP = new rcube_ldap(); - if ($LDAP->connect($server['hosts'], $server['port'], $server['protocol'])) - { - $filter = "$search_field=" . ($exact ? $search_value : "*$search_value*"); - $result = $LDAP->search($server['base_dn'], - $filter, - $attributes, - $server['scope'], - $sort=null); - - // add any results to contact array - if ($result['count']) - { - for ($n = 0; $n < $result['count']; $n++) - { - $contacts[$n]['name'] = $result[$n][$server['name_field']][0]; - $contacts[$n]['email'] = $result[$n][$server['mail_field']][0]; - $contacts[$n]['row_id'] = $n + 1; - } - } - } - else - return false; - - // cleanup - $LDAP->close(); - - if (!$result['count']) - return false; - - // weed out duplicate emails - for ($n = 0; $n < $result['count']; $n++) - for ($i = 0; $i < $result['count']; $i++) - if ($contacts[$i]['email'] == $contacts[$n]['email'] && $i != $n) - unset($contacts[$n]); - - return $contacts; - } - -function get_form_tags($attrib) - { - global $OUTPUT, $JS_OBJECT_NAME, $EDIT_FORM, $SESS_HIDDEN_FIELD; - - $form_start = ''; - if (!strlen($EDIT_FORM)) - { - $hiddenfields = new hiddenfield(array('name' => '_task', 'value' => $GLOBALS['_task'])); - $hiddenfields->add(array('name' => '_action', 'value' => 'ldappublicsearch')); - - if ($_framed) - $hiddenfields->add(array('name' => '_framed', 'value' => 1)); - - $form_start .= !strlen($attrib['form']) ? '<form name="form" action="./" method="post">' : ''; - $form_start .= "\n$SESS_HIDDEN_FIELD\n"; - $form_start .= $hiddenfields->show(); - } - - $form_end = (strlen($EDIT_FORM) && !strlen($attrib['form'])) ? '</form>' : ''; - $form_name = strlen($attrib['form']) ? $attrib['form'] : 'form'; - - $OUTPUT->add_script("$JS_OBJECT_NAME.gui_object('ldappublicsearchform', '$form_name');"); - - $EDIT_FORM = $form_name; - - return array($form_start, $form_end); - } - -parse_template('ldappublicsearch'); -?> |