Code

Use get_list instead of ldap->ls.
[gosa.git] / plugins / admin / groups / class_groupAcl.inc
index 46c4a856b9c6c98921a10a83ee3ad5e6517d03a5..363ef2eac585a994ec0ff8b868695c24954393e5 100644 (file)
@@ -20,14 +20,17 @@ class acl extends plugin
   var $current_acl= "";
   var $selfflag= FALSE;
 
+  var $gosaSubtreeACL;
 
   /* attribute list for save action */
-  var $attributes= array();
+  var $attributes= array("gosaSubtreeACL");
   var $objectclasses= array("gosaObject");
 
-  function acl ($config, $dn= NULL)
+  var $CopyPasteVars = array("current_acl");
+
+  function acl ($config, $dn= NULL, $parent= NULL)
   {
-       plugin::plugin($config, $dn);
+       plugin::plugin($config, $dn, $parent);
 
        /* WorkAround */
        include "acl_definition.inc";
@@ -49,6 +52,9 @@ class acl extends plugin
 
   function execute()
   {
+       /* Call parent execute */
+       plugin::execute();
+
        /* Do we represent a valid group? */
        if (!$this->is_account && $this->parent == NULL){
                $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\">&nbsp;<b>".
@@ -91,8 +97,9 @@ class acl extends plugin
 
        $ldap= $this->config->get_ldap_link();
        $ldap->cd($this->dn);
-       $ldap->modify($this->attrs);
-       show_ldap_error($ldap->get_error());
+       $this->cleanup();
+       $ldap->modify ($this->attrs); 
+       show_ldap_error($ldap->get_error(), _("Removing ACL information failed"));
   }
 
 
@@ -109,7 +116,7 @@ class acl extends plugin
        if ($this->object == "all"){
                $this->current_acl= preg_replace ( "/[,]?all[,]?/", "", $this->current_acl);
        }
-       $this->current_acl= preg_replace ( "/[,]?$this->object#[^,]*[,]?/", "", $this->current_acl);
+       $this->current_acl= preg_replace ( "/(^|[^a-z0-9A-Z])$this->object#[^,]*[,]?/", "", $this->current_acl);
 
        /* assemble new attributes */
        $attrs= "";
@@ -130,13 +137,13 @@ class acl extends plugin
        }
 
        /* append information */
-       if ($this->current_acl != "" && $attrs != ""){
-               $this->current_acl.= ",";
-       }
        if ($attrs != ""){
                $tmp= $this->object;
                $attrs= $tmp.$attrs;
        }
+       if ($this->current_acl != "" && $attrs != ""){
+               $this->current_acl.= ",";
+       }
        $this->current_acl.= $attrs;
        if (preg_match("/all#all/", $this->current_acl)){
                $this->current_acl= "all";
@@ -154,7 +161,6 @@ class acl extends plugin
        } else {
                $this->selfflag= FALSE;
        }
-
   }
 
 
@@ -186,8 +192,10 @@ class acl extends plugin
 
        /* Modify class */
        $ldap->cd($this->dn);
-       $ldap->modify($this->attrs);
-       show_ldap_error($ldap->get_error());
+       $this->cleanup();
+       $ldap->modify ($this->attrs); 
+
+       show_ldap_error($ldap->get_error(), _("Saving ACL information failed"));
   }