]> git.sur5r.net Git - contagged/blobdiff - index.php
Merge pull request #15 from cweiske/master
[contagged] / index.php
index 43ae1b0b47963bf2ec62d151d270dbb336eef8d9..5a9ab819da54fab7dd2615819abf63be3d31c1bf 100644 (file)
--- a/index.php
+++ b/index.php
@@ -1,36 +1,33 @@
-<?
-  require_once('init.php');
-  ldap_login();
-
-  //prepare filter
-  $ldapfilter = _makeldapfilter();
+<?php
 
-  //check public addressbook
-  $sr = ldap_list($LDAP_CON,$conf['publicbook'],$ldapfilter);
-  $result1 = ldap_get_binentries($LDAP_CON, $sr);
-  //check users private addressbook
-  if(!empty($_SESSION['ldapab']['binddn'])){
-    $sr = @ldap_list($LDAP_CON,
-                    $conf['privatebook'].','.$_SESSION['ldapab']['binddn'],
-                    $ldapfilter);
-    $result2 = ldap_get_binentries($LDAP_CON, $sr);
-  }else{
-    $result2 = '';
-  }
-
-  $result = array_merge((array)$result1,(array)$result2);
+  require_once('inc/init.php');
+  ldap_login();
 
   // select entry template
   if(!empty($_REQUEST['export']) && $_REQUEST['export'] == 'csv'){
-    $entrytpl = 'export_list_csv_entry.tpl';
+    $entrytpl = 'list_csv_entry.tpl';
+  }elseif(!empty($_REQUEST['export']) && $_REQUEST['export'] == 'map'){
+    $entrytpl = 'list_map_entry.tpl';
   }else{
     $entrytpl = 'list_entry.tpl';
   }
 
+  tpl_std();
+
+  // check which fields are needed
+  $fields = get_fields_from_template($entrytpl);
+
+
+  //prepare filter
+  $ldapfilter = _makeldapfilter();
+
+  // fetch results
+  $result = ldap_queryabooks($ldapfilter,$fields);
+
   $list = '';
   if(count($result)==1 && $_REQUEST['search']){
     //only one result on a search -> display page
-    header("Location: entry.php?dn=".$result[0]['dn']);
+    header("Location: entry.php?dn=".rawurlencode($result[0]['dn']));
     exit;
   }elseif(count($result)){
     $keys = array_keys($result);
   }
 
   //prepare templates
-  tpl_std();
-  tpl_markers(); //FIXME not needed anymore!?
-  tpl_categories();
-  tpl_timezone();
-  tpl_country();
   if (empty($_REQUEST['filter'])) $_REQUEST['filter']='';
   if (empty($_REQUEST['marker'])) $_REQUEST['marker']='';
   if (empty($_REQUEST['search'])) $_REQUEST['search']='';
   $smarty->assign('filter',$_REQUEST['filter']);
   $smarty->assign('marker',$_REQUEST['marker']);
   $smarty->assign('search',$_REQUEST['search']);
+  $smarty->assign('org',$_REQUEST['org']);
   //display templates
-  if(!empty($_REQUEST['export']) && $_REQUEST['export'] == 'csv'){
-    if ($conf['userlogreq'] == 1 && $user == '')
-    {
-      header("HTTP/1.1 401 ACCESS DENIED");
+  if(!empty($_REQUEST['export'])){
+    if ($conf['userlogreq'] && $user == ''){
+      header("HTTP/1.1 401 Access Denied");
+      echo '<h1>Access Denied</h1>';
       exit();
-    } else {
+    }
+
+    if($_REQUEST['export'] == 'csv'){
       header("Content-Type: text/csv");
       header('Content-Disposition: Attachement; filename="contagged_export.csv"');
-      $smarty->display('export_list_csv.tpl');
+      $smarty->display('list_csv.tpl');
+      exit;
+    }elseif($_REQUEST['export'] == 'map'){
+      header('Content-Type: text/html; charset=utf-8');
+      $smarty->display('list_map.tpl');
+      exit;
     }
   }else{
     //save location in session
@@ -95,6 +95,7 @@
    */
   function _makeldapfilter(){
     global $FIELDS;
+    global $conf;
 
     //handle given filter
 
     if (empty($_REQUEST['search'])) { $_REQUEST['search']=''; }
     if (empty($_REQUEST['org'])) { $_REQUEST['org']=''; }
     if (empty($_REQUEST['marker'])) { $_REQUEST['marker']=''; }
+    if(is_numeric($_REQUEST['search'])) $number = $_REQUEST['search'];
     $filter = ldap_filterescape($_REQUEST['filter']);
     $search = ldap_filterescape($_REQUEST['search']);
     $org    = ldap_filterescape($_REQUEST['org']);
 
     if(!empty($marker)){
       // Search by tag
-      $ldapfilter = '(&(objectClass=contactPerson)';
+      $ldapfilter = '(&( |(objectClass=evolutionPerson)(objectClass=contactPerson) )';
       $marker = explode(',',$marker);
       foreach($marker as $m){
         $m = trim($m);
-        $ldapfilter .= '('.$FIELDS['*marker'].'='.$m.')';
+        $ldapfilter .= '('.$FIELDS['_marker'].'='.$m.')';
       }
       $ldapfilter .= ')';
+    }elseif($number){
+      // Search by telephone number
+      $filter = '';
+      // add wildcards between digits to compensate for any formatting
+      $length = strlen($number);
+      for($i=0; $i <$length; $i++){
+        $filter .= '*'.$number{$i};
+      }
+      $filter .= '*';
+      $ldapfilter = '(&'.
+                        '(objectClass=inetOrgPerson)'.
+                        '(|'.
+                            '(|'.
+                                '('.$FIELDS['phone'].'='.$filter.')'.
+                                '('.$FIELDS['homephone'].'='.$filter.')'.
+                            ')'.
+                            '('.$FIELDS['mobile'].'='.$filter.')'.
+                        ')'.
+                    ')';
     }elseif(!empty($search)){
       // Search name and organization
       $search = trim($search);
       $words=preg_split('/\s+/',$search);
       $filter='';
       foreach($words as $word){
-        $filter .= '(|(|('.$FIELDS['name'].'=*'.$word.'*)('.
-                   $FIELDS['givenname'].'=*'.$word.'*))('.
-                   $FIELDS['organization'].'=*'.$word.'*))';
+        $wordfilter='';
+        foreach($conf['searchfields'] as $field) {
+          $wordfilter .= '('.$field.'=*'.$word.'*)';
+        }
+        for($i=0; $i <count($conf['searchfields']); $i++){
+          $wordfilter = '(|'.$wordfilter.')';
+        }
+        $filter .= '(&'.$wordfilter.')';
       }
       $ldapfilter = "(&(objectClass=inetOrgPerson)$filter)";
     }elseif(!empty($org)){
         $other .= '(!('.$FIELDS['name'].'='.chr($i).'*))';
       }
       $ldapfilter = "(&(objectClass=inetOrgPerson)$other)";
-    }elseif($filter=='*'){
+    }elseif($filter=='\2a'){ //escaped asterisk
       // List all
       $ldapfilter = "(objectClass=inetOrgPerson)";
     }else{