Code

Updated class location table.
[gosa.git] / include / class_acl.inc
index 4fbdbe962f21d6e956a880730bf62765e58446a0..9bf8e623825c0b6f49257a732a9d599cff2689ca 100644 (file)
@@ -113,7 +113,7 @@ class acl extends plugin
     $tmp= get_global('plist');
     $plist= $tmp->info;
     $cats = array();
-    if (isset($this->parent) && $this->parent != NULL){
+    if (isset($this->parent) && $this->parent !== NULL){
       $oc= array();
       foreach ($this->parent->by_object as $key => $obj){
         $oc= array_merge($oc, $obj->objectclasses);
@@ -397,7 +397,7 @@ class acl extends plugin
 
     if ($this->dialogState == 'head'){
       /* Draw list */
-      $aclList= new DivSelectBox("aclList");
+      $aclList= new divSelectBox("aclList");
       $aclList->SetHeight(450);
       
       /* Fill in entries */
@@ -418,7 +418,7 @@ class acl extends plugin
 
     if ($this->dialogState == 'create'){
       /* Draw list */
-      $aclList= new DivSelectBox("aclList");
+      $aclList= new divSelectBox("aclList");
       $aclList->SetHeight(150);
 
       /* Add settings for all categories to the (permanent) list */
@@ -554,7 +554,7 @@ class acl extends plugin
 
   function buildRoleSelector($list)
   {
-    $D_List =new DivSelectBox("Acl_Roles");
+    $D_List =new divSelectBox("Acl_Roles");
  
     $selected = $this->aclContents;
     if(!is_string($this->aclContents) || !isset($list[$this->aclContents])){
@@ -1079,6 +1079,87 @@ class acl extends plugin
     $this->handle_post_events("remove",array("uid" => $this->uid));
   }
 
+  
+  /* Return plugin informations for acl handling */
+  function plInfo()
+  {
+    return (array(
+          "plShortName"   => _("ACL"),
+          "plDescription" => _("ACL")._("Access control list").")",
+          "plSelfModify"  => FALSE,
+          "plDepends"     => array(),
+          "plPriority"    => 0,
+          "plSection"     => array("administration"),
+          "plCategory"    => array("acl" => array("description"  => _("ACL")." & "._("ACL roles"),
+                                                          "objectClass"  => array("gosaAcl","gosaRole"))),
+          "plProvidedAcls"=> array(
+            "cn"          => _("Role name"),
+            "description" => _("Role description"))
+
+          ));
+  }
+
+
+  /* Remove acls defined for $src */
+  function remove_acl()
+  {
+    $this->remove_acl_for_dn($this->dn);
+  }
+
+
+  /* Remove acls defined for $src */
+  function remove_acl_for_dn($src = "")
+  {
+    if($src == ""){
+      $src = $this->dn;
+    }
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cd($this->config->current['BASE']);
+    $ldap->search("(&(objectClass=gosaAcl)(gosaAclEntry=*".base64_encode($src)."*))",array("gosaAclEntry","dn"));
+    while($attrs = $ldap->fetch()){
+      $acl = new acl($this->config,$this->parent,$attrs['dn']);
+      foreach($acl->gosaAclEntry as $id => $entry){
+        foreach($entry['members'] as $m_id => $member){
+          if($m_id == "U:".$src){
+            unset($acl->gosaAclEntry[$id]['members'][$m_id]);
+            gosa_log("modify","users/acl",$attrs['dn'],array(),sprintf("Removed acl for user %s on object %s.",$src,$attrs['dn']));
+          }
+          if($m_id == "G:".$src){
+            unset($acl->gosaAclEntry[$id]['members'][$m_id]);
+            gosa_log("modify","groups/acl",$attrs['dn'],array(),sprintf("Removed acl for group %s on object %s.",$src,$attrs['dn']));
+          }
+        }
+      }
+      $acl -> save();
+    }
+  }
+
+  function update_acl_membership($src,$dst)
+  {
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cd($this->config->current['BASE']);
+    $ldap->search("(&(objectClass=gosaAcl)(gosaAclEntry=*".base64_encode($src)."*))",array("gosaAclEntry","dn"));
+    while($attrs = $ldap->fetch()){
+      $acl = new acl($this->config,$this->parent,$attrs['dn']);
+      foreach($acl->gosaAclEntry as $id => $entry){
+        foreach($entry['members'] as $m_id => $member){
+          if($m_id == "U:".$src){
+            unset($acl->gosaAclEntry[$id]['members'][$m_id]);
+            $new = "U:".$dst;
+            $acl->gosaAclEntry[$id]['members'][$new] = $new;
+            gosa_log("modify","users/acl",$attrs['dn'],array(),sprintf("Updated acl for user %s on object %s.",$src,$attrs['dn']));
+          }
+          if($m_id == "G:".$src){
+            unset($acl->gosaAclEntry[$id]['members'][$m_id]);
+            $new = "G:".$dst;
+            $acl->gosaAclEntry[$id]['members'][$new] = $new;
+            gosa_log("modify","groups/acl",$attrs['dn'],array(),sprintf("Updated acl for group %s on object %s.",$src,$attrs['dn']));
+          }
+        }
+      }
+      $acl -> save();
+    }
+  }
 }
 
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: