"Eins ist toll", "zwei" => "Zwei ist noch besser");
/* Helpers */
var $department= "";
var $objects= array();
var $object= "";
var $current_acl= "";
var $selfflag= FALSE;
var $gosaSubtreeACL;
/* attribute list for save action */
var $attributes= array("gosaSubtreeACL");
var $objectclasses= array("gosaObject");
function acl ($config, $dn= NULL)
{
plugin::plugin($config, $dn);
/* WorkAround */
include "acl_definition.inc";
$this->objects= $ACLD;
$tmp= array_keys($this->objects);
$this->object= reset($tmp);
$this->selfflag= FALSE;
if (isset($this->attrs['gosaSubtreeACL'][0])){
$this->current_acl= preg_replace("/^[^:]*:/", "", $this->attrs['gosaSubtreeACL'][0]);
if (preg_match("/^!:/", $this->attrs['gosaSubtreeACL'][0])){
$this->selfflag= TRUE;
}
}
/* This is allways true */
$this->is_account= TRUE;
}
function execute()
{
/* Call parent execute */
plugin::execute();
/* Do we represent a valid group? */
if (!$this->is_account && $this->parent == NULL){
$display= " ".
_("This 'dn' is no acl container.")."";
return ($display);
}
/* Show main page */
$smarty= get_smarty();
if ($_SESSION['js']==FALSE){
$smarty->assign("javascript", "false");
} else {
$smarty->assign("javascript", "true");
}
$smarty->assign("object", $this->object);
$obj= array();
foreach($this->objects as $key => $value){
$obj[$key]= $key;
}
if ($this->selfflag){
$smarty->assign("selfflag", "checked");
} else {
$smarty->assign("selfflag", "");
}
$smarty->assign("objects", $obj);
$display= $smarty->fetch (get_template_path('acl.tpl', TRUE));
/* Show acl stuff */
$this->acl= get_module_permission (array($this->current_acl), $this->object, "");
$display.= $this->print_attributes ($this->objects[$this->object]);
return ($display);
}
function remove_from_parent()
{
plugin::remove_from_parent();
$this->attrs['gosaSubtreeACL']= array();
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->dn);
$this->cleanup();
$ldap->modify ($this->attrs);
show_ldap_error($ldap->get_error(), sprintf(_("Removing of groups/acl with dn '%s' failed."),$this->dn));
}
/* Save data to object */
function save_object()
{
plugin::save_object();
if (!isset($_POST['object'])){
return;
}
/* Strip of old information */
if ($this->object == "all"){
$this->current_acl= preg_replace ( "/[,]?all[,]?/", "", $this->current_acl);
}
$this->current_acl= preg_replace ( "/(^|[^a-z0-9A-Z])$this->object#[^,]*[,]?/", "", $this->current_acl);
/* assemble new attributes */
$attrs= "";
if (isset($_POST['all'])){
$attrs.= "#all";
}
if ($this->object != "all" && !isset($_POST['all']) && $this->object != ""){
foreach ($this->objects[$this->object] as $key => $val){
if (is_integer($key)){
$aname= $val;
} else {
$aname= $key;
}
if (isset($_POST[$aname])){
$attrs.= "#$aname";
}
}
}
/* append information */
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";
}
if (preg_match("/^all,/", $this->current_acl)){
$this->current_acl= "all";
}
/* Save current object selection */
if (isset($_POST['object'])){
$this->object= $_POST['object'];
}
if (isset($_POST['selfflag'])){
$this->selfflag= TRUE;
} else {
$this->selfflag= FALSE;
}
}
/* Save to LDAP */
function save()
{
/* Write back to LDAP */
$ldap= $this->config->get_ldap_link();
/* Read stuff and only modify subtreeACL entries */
plugin::save();
if ($this->current_acl != ""){
if ($this->selfflag){
$this->attrs['gosaSubtreeACL']= "!:".$this->current_acl;
} else {
$this->attrs['gosaSubtreeACL']= ":".$this->current_acl;
}
} else {
$objectclasses= array();
foreach ($this->attrs['objectClass'] as $oc){
if (!preg_match('/gosaObject/i', $oc)){
$objectclasses[]= $oc;
}
}
$this->attrs['objectClass']= $objectclasses;
$this->attrs['gosaSubtreeACL']= array();
}
/* Modify class */
$ldap->cd($this->dn);
$this->cleanup();
$ldap->modify ($this->attrs);
show_ldap_error($ldap->get_error(), sprintf(_("Saving of groups/acl with dn '%s' failed."),$this->dn));
}
function print_attributes ($name)
{
$display= "acl, "all") == ""){
$display.= " checked";
}
$display.= ">"._("All fields are writeable")."
";
# Put strings in right order
asort ($name);
# Generate checklist
$display.= "
acl, "$val") == ""){ $display.= "checked"; } $display.= ">$val | "; } else { $display.= "acl, "$key") == ""){ $display.= "checked"; } $display.= ">"._($val)." | "; } if ($switch++ == 1){ $display.= ""; } $display.= " |