Code

Fixed permission problem in addressbook plugin.
[gosa.git] / gosa-core / include / class_config.inc
index e800b61a90e1cb219d30e79d66d781566a7b33a5..64039fd3a115e36bd2544cbe461fc360d35180a7 100644 (file)
@@ -400,6 +400,7 @@ class config  {
         
         $this->data['SERVERS']['IMAP'][$imap_server]= 
             array( 
+            "server_dn"   => $attrs['dn'],
             "connect"     => $imap_connect,
             "admin"       => $imap_admin,
             "password"    => $pwd,
@@ -616,11 +617,41 @@ class config  {
     $result['/']= $this->current['BASE'];
     $this->tdepartments= array();
 
+    /* Get all department types from department Management, to be able detect the department type.
+        -It is possible that differnty department types have the same name, 
+         in this case we have to mark the department name to be able to differentiate.
+          (e.g l=Name  or   o=Name)
+     */    
+    $types = departmentManagement::get_support_departments();
+    
+    /* Create a list of attributes to fetch */
+    $ldap_values = array("objectClass","gosaUnitTag");
+    $filter = "";
+    foreach($types as $type){
+      $ldap_values[] = $type['ATTR'];
+      $filter .= "(objectClass=".$type['OC'].")";
+    }
+    $filter = "(&(objectClass=gosaDepartment)(|".$filter."))";
+
     /* Get list of department objects */
     $ldap= $this->get_ldap_link();
     $ldap->cd ($this->current['BASE']);
-    $ldap->search ("(objectClass=gosaDepartment)", array("ou", "objectClass", "gosaUnitTag"));
+    $ldap->search ($filter, $ldap_values);
     while ($attrs= $ldap->fetch()){
+
+      /* Detect department type */
+      $type_data = array();
+      foreach($types as $t => $data){
+        if(in_array($data['OC'],$attrs['objectClass'])){
+          $type_data = $data;
+          break;    
+        }
+      }
+
+      /* Unknown department type -> skip 
+       */
+      if(!count($type_data)) continue;
+
       $dn= $ldap->getDN();
       $this->tdepartments[$dn]= "";
 
@@ -640,9 +671,11 @@ class config  {
         continue;
       }
 
+      $c_dn = convert_department_dn($dn)." (".$type_data['ATTR'].")";
+
       /* Only assign non-root departments */
       if ($dn != $result['/']){
-        $result[convert_department_dn($dn)]= $dn;
+        $result[$c_dn]= $dn;
       }
     }
 
@@ -685,17 +718,25 @@ class config  {
 
         /* Extract department name */          
         $elestr = trim(preg_replace("/^[^=]*+=/","", $ele),",");
+        $nameA  = trim(preg_replace("/=.*$/","", $ele),",");
+        if($nameA != "ou"){
+          $nameA = " (".$nameA.")";
+        }else{
+          $nameA = "";
+        }
+    
 
         /* Add to array */     
         if($key == (count($elements)-1)){
-          $last[$elestr]['ENTRY'] = $val;
+          $last[$elestr.$nameA]['ENTRY'] = $val;
         }
 
         /* Set next array appending position */
-        $last = &$last[$elestr]['SUB'];
+        $last = &$last[$elestr.$nameA]['SUB'];
       }
     }
 
+
     /* Add base entry */
     $ret["/"]["ENTRY"]         = $base;
     $ret["/"]["SUB"]   = $arr;
@@ -786,18 +827,27 @@ class config  {
   {
     global $config;
     $return = array();
+    $ui = get_userinfo();
     $base = $config->current['BASE'];
     $res= get_sub_list("(&(objectClass=goShareServer)(goExportEntry=*))", "server",
-          get_ou("serverou"), $base,array("goExportEntry","cn"),GL_NONE);
+          get_ou("serverou"), $base,array("goExportEntry","cn"),GL_NONE | GL_NO_ACL_CHECK);
 
     foreach($res as $entry){
+        
+        $acl = $ui->get_permissions($entry['dn'],"server/goShareServer","");
         if(isset($entry['goExportEntry']['count'])){
           unset($entry['goExportEntry']['count']);
         }
         foreach($entry['goExportEntry'] as $share){
           $a_share = split("\|",$share);
           $sharename = $a_share[0];
-          $return[$entry['cn'][0]."|".$sharename] = $entry['cn'][0]." [".$sharename."]";
+          $data= array();
+          $data['NAME']   = $sharename;
+          $data['ACL']    = $acl;
+          $data['SERVER'] = $entry['cn']['0'];
+          $data['SHARE']  = $sharename;
+          $data['DISPLAY']= $entry['cn'][0]." [".$sharename."]";
+          $return[$entry['cn'][0]."|".$sharename] = $data;
         }
     }
     return($return);