Code

Added netatalk share management
[gosa.git] / include / functions.inc
index 2de43011a4a95a2f881559cf41b41c26c0c5449e..d93aa89095ea95dc1562d330af0273c7ea62fecb 100644 (file)
@@ -23,6 +23,12 @@ define ("CONFIG_DIR", "/etc/gosa");
 define ("CONFIG_TEMPLATE_DIR", "../contrib/");
 define ("HELP_BASEDIR", "/var/www/doc/");
 
+/* Define get_list flags */
+define("GL_NONE",      0);
+define("GL_SUBSEARCH", 1);
+define("GL_SIZELIMIT", 2);
+define("GL_CONVERT"  , 4);
+
 /* Define globals for revision comparing */
 $svn_path = '$HeadURL$';
 $svn_revision = '$Revision$';
@@ -484,57 +490,14 @@ function get_lock ($object)
 }
 
 
-function get_list2($subtreeACL, $filter, $subsearch= TRUE, $base="", $attrs= array(), $flag= FALSE)
+function get_list($filter, $subtreeACL, $base= "", $attributes= array(), $flags= GL_SUBSEARCH)
 {
   global $config;
 
-  /* Base the search on default base if not set */
-  $ldap= $config->get_ldap_link($flag);
-  if ($base == ""){
-    $ldap->cd ($config->current['BASE']);
-  } else {
-    $ldap->cd ($base);
-  }
-
-  /* Perform ONE or SUB scope searches? */
-  $ldap->ls ($filter);
-
-  /* Check for size limit exceeded messages for GUI feedback */
-  if (preg_match("/size limit/i", $ldap->error)){
-    $_SESSION['limit_exceeded']= TRUE;
-  } else {
-    $_SESSION['limit_exceeded']= FALSE;
-  }
-  $result= array();
-
+  /* Get LDAP link */
+  $ldap= $config->get_ldap_link($flags & GL_SIZELIMIT);
 
-  /* Crawl through reslut entries and perform the migration to the
-     result array */
-  while($attrs = $ldap->fetch()) {
-    $dn= $ldap->getDN();
-    foreach ($subtreeACL as $key => $value){
-      if (preg_match("/$key/", $dn)){
-        $dnAlias = preg_replace("/^ou=/","",$dn);
-        $dnAlias = preg_replace("/,o.*$/","",$dnAlias);
-        $dnAlias = preg_replace('/###GOSAREPLACED###/', ',', $dnAlias);
-        $attrs["dn"]=$dnAlias; 
-        $result[]= $attrs;
-        break;
-      }
-    }
-  }
-
-
-  return ($result);
-
-}
-
-function get_list($subtreeACL, $filter, $subsearch= TRUE, $base="", $attrs= array(), $flag= FALSE)
-{
-  global $config;
-
-  /* Base the search on default base if not set */
-  $ldap= $config->get_ldap_link($flag);
+  /* Set search base to configured base if $base is empty */
   if ($base == ""){
     $ldap->cd ($config->current['BASE']);
   } else {
@@ -542,10 +505,10 @@ function get_list($subtreeACL, $filter, $subsearch= TRUE, $base="", $attrs= arra
   }
 
   /* Perform ONE or SUB scope searches? */
-  if ($subsearch) {
-    $ldap->search ($filter, $attrs);
+  if ($flags & GL_SUBSEARCH) {
+    $ldap->search ($filter, $attributes);
   } else {
-    $ldap->ls ($filter);
+    $ldap->ls ($filter,$base,$attributes);
   }
 
   /* Check for size limit exceeded messages for GUI feedback */
@@ -560,9 +523,17 @@ function get_list($subtreeACL, $filter, $subsearch= TRUE, $base="", $attrs= arra
   $result= array();
   while($attrs = $ldap->fetch()) {
     $dn= $ldap->getDN();
+
     foreach ($subtreeACL as $key => $value){
       if (preg_match("/$key/", $dn)){
-        $attrs["dn"]= $dn;
+
+        if ($flags & GL_CONVERT){
+          $attrs["dn"]= convert_department_dn($dn);
+        } else {
+          $attrs["dn"]= $dn;
+        }
+
+        /* We found what we were looking for, break speeds things up */
         $result[]= $attrs;
         break;
       }
@@ -771,61 +742,29 @@ function convert_department_dn($dn)
 
   /* Build a sub-directory style list of the tree level
      specified in $dn */
-  foreach (split (',', $dn) as $val){
+  foreach (split(',', $dn) as $rdn){
 
     /* We're only interested in organizational units... */
-    if (preg_match ("/ou=/", $val)){
-      $dep= substr($val,3)."/$dep";
+    if (substr($rdn,0,3) == 'ou='){
+      $dep= substr($rdn,3)."/$dep";
     }
 
     /* ... and location objects */
-    if (preg_match ("/l=/", $val)){
-      $dep= substr($val,2)."/$dep";
+    if (substr($rdn,0,2) == 'l='){
+      $dep= substr($rdn,2)."/$dep";
     }
   }
 
-  /* Fix name, if it contains a replace tag */
-  $dep= preg_replace('/###GOSAREPLACED###/', ',', $dep);
-
   /* Return and remove accidently trailing slashes */
   return rtrim($dep, "/");
 }
 
-function convert_department_dn2($dn)
-{
-
-/*
-  
-  I think this no longer used  ...
-  Check this, and remove this function 
-
-  
-*/
-
-  $dep= "";
-  /* Build a sub-directory style list of the tree level
-     specified in $dn */
-  $deps = array_flip($_SESSION['config']->idepartments);
-
-  if(isset($deps[$dn])){
-    $dn= $deps[$dn];
-    $dep = preg_replace("/^.*=/","",$dn);
-  }else{  
-    global $config;
-    $base = "ou=";
-    if(isset($config->current['BASE'])){
-      $base =  $config->current['BASE'];  
-    }
-    if(preg_match("%".$base."%",$dn)){
-      $dep= preg_replace("%^.*\/([^\/]+)$%", "\\1", $dn);
-    }else{
-      $dep = $dn;
-    }
-  }
 
-  /* Return and remove accidently trailing slashes */
-  $tmp = rtrim($dep, "/");
-  return $tmp;
+/* Strip off the last sub department part of a '/level1/level2/.../'
+ * style value. It removes the trailing '/', too. */
+function get_sub_department($value)
+{
+  return (@LDAP::fix(preg_replace("%^.*/([^/]+)/?$%", "\\1", $value)));
 }
 
 
@@ -836,9 +775,9 @@ function get_ou($name)
   $ou= $config->current[$name];
   if ($ou != ""){
     if (!preg_match('/^[^=]+=[^=]+/', $ou)){
-      return "ou=$ou,";
+      return @LDAP::convert("ou=$ou,");
     } else {
-      return "$ou,";
+      return @LDAP::convert("$ou,");
     }
   } else {
     return "";
@@ -897,7 +836,11 @@ function get_departments($ignore_dn= "")
     if ($dn == $ignore_dn){
       continue;
     }
-    $result[convert_department_dn($dn)]= $dn;
+
+    /* Only assign non-root departments */
+    if ($dn != $result['/']){
+      $result[convert_department_dn($dn)]= $dn;
+    }
   }
 
   return ($result);
@@ -922,7 +865,7 @@ function is_phone_nr($nr)
     return (TRUE);
   }
 
-  return preg_match ("/^[0-9 ()+*-]+$/", $nr);
+  return preg_match ("/^[\/0-9 ()+*-]+$/", $nr);
 }
 
 
@@ -1967,5 +1910,60 @@ function array_differs($src, $dst)
 }
 
 
+function saveFilter($a_filter, $values)
+{
+  if (isset($_POST['regexit'])){
+    $a_filter["regex"]= $_POST['regexit'];
+
+    foreach($values as $type){
+      if (isset($_POST[$type])) {
+        $a_filter[$type]= "checked";
+      } else {
+        $a_filter[$type]= "";
+      }
+    }
+  }
+
+  /* React on alphabet links if needed */
+  if (isset($_GET['search'])){
+    $s= mb_substr(validate($_GET['search']), 0, 1, "UTF8")."*";
+    if ($s == "**"){
+      $s= "*";
+    }
+    $a_filter['regex']= $s;
+  }
+
+  return ($a_filter);
+}
+
+
+/* Escape all preg_* relevant characters */
+function normalizePreg($input)
+{
+  return (addcslashes($input, '[]()|/.*+-'));
+}
+
+
+/* Escape all LDAP filter relevant characters */
+function normalizeLdap($input)
+{
+  return (addcslashes($input, '()|'));
+}
+
+
+/* Resturns the difference between to microtime() results in float  */
+function get_MicroTimeDiff($start , $stop)
+{
+  $a = split("\ ",$start);
+  $b = split("\ ",$stop);
+
+  $secs = $b[1] - $a[1];
+  $msecs= $b[0] - $a[0]; 
+
+  $ret = (float) ($secs+ $msecs);
+  return($ret);
+}
+
+
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>