X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_acl.inc;h=dec421bec554a299818248ac8a34567b071c4ee5;hb=55b59c255ff60a8fc2723196efe6b412580327cd;hp=637d0ca845565e65041801a856f09fe69013e66d;hpb=a27bc36ea131df3507a802594999b5eec99e8f36;p=gosa.git diff --git a/include/class_acl.inc b/include/class_acl.inc index 637d0ca84..dec421bec 100644 --- a/include/class_acl.inc +++ b/include/class_acl.inc @@ -87,7 +87,7 @@ class acl extends plugin /* Objects */ $tmp= get_global('plist'); $plist= $tmp->info; - if (isset($this->parent)){ + if (isset($this->parent) && $this->parent != NULL){ $oc= array(); foreach ($this->parent->by_object as $key => $obj){ $oc= array_merge($oc, $obj->objectclasses); @@ -125,19 +125,29 @@ class acl extends plugin $this->aclObjects[$idx]= $data['description']; /* Additionally filter the classes we're interested in in "self edit" mode */ - if (in_array_ics($data['objectClass'], $oc)){ - $this->myAclObjects[$class]= $acls['plDescription']; + if (is_array($data['objectClass'])){ + foreach($data['objectClass'] as $objectClass){ + if (in_array_ics($objectClass, $oc)){ + $this->myAclObjects[$idx.'/'.$class]= $acls['plDescription']; + break; + } + } + } else { + if (in_array_ics($data['objectClass'], $oc)){ + $this->myAclObjects[$idx.'/'.$class]= $acls['plDescription']; + } } } } } } + $this->aclObjects['all']= '* '._("All categories"); + $this->ocMapping['all']= array('0' => 'all'); /* Sort categories */ asort($this->aclObjects); - /* Fill acl types */ if ($this->isContainer){ $this->aclTypes= array("reset" => _("Reset ACLs"), @@ -205,7 +215,7 @@ class acl extends plugin if (preg_match('/^cat_del_.*_x/', $name)){ $idx= preg_replace('/^cat_del_([^_]+)_.*$/', '\1', $name); foreach ($this->ocMapping[$idx] as $key){ - unset($this->aclContents[$key]); + unset($this->aclContents["$idx/$key"]); } continue; } @@ -235,6 +245,11 @@ class acl extends plugin $aclDialog= TRUE; list($dummy, $object, $attribute, $value)= split('_', $name); + /* Skip for detection entry */ + if ($object == 'dummy') { + continue; + } + /* Ordinary ACLs */ if (!isset($new_acl[$object])){ $new_acl[$object]= array(); @@ -248,12 +263,17 @@ class acl extends plugin } /* Only be interested in new acl's, if we're in the right _POST place */ - if ($aclDialog && isset($this->ocMapping[$this->aclObject])){ + if ($aclDialog && is_array($this->ocMapping[$this->aclObject])){ + foreach ($this->ocMapping[$this->aclObject] as $oc){ unset($this->aclContents[$oc]); + unset($this->aclContents[$this->aclObject.'/'.$oc]); if (isset($new_acl[$oc])){ $this->aclContents[$oc]= $new_acl[$oc]; } + if (isset($new_acl[$this->aclObject.'/'.$oc])){ + $this->aclContents[$this->aclObject.'/'.$oc]= $new_acl[$this->aclObject.'/'.$oc]; + } } } @@ -350,7 +370,7 @@ class acl extends plugin $action.= ""; $action.= ""; - $field3= array("string" => $action, "attach" => "style='border-right:0px;width:50px';text-align:right"); + $field3= array("string" => $action, "attach" => "style='border-right:0px;width:50px;text-align:right;'"); $aclList->AddEntry(array($field1, $field2, $field3)); } @@ -368,6 +388,13 @@ class acl extends plugin foreach($this->ocMapping[$section] as $oc){ if (isset($this->aclContents[$oc]) && count($this->aclContents[$oc]) && isset($this->aclContents[$oc][0]) && $this->aclContents[$oc][0] != ""){ + + $summary.= "$oc, "; + continue; + } + if (isset($this->aclContents["$section/$oc"]) && count($this->aclContents["$section/$oc"]) && isset($this->aclContents["$section/$oc"][0]) && + $this->aclContents["$section/$oc"][0] != ""){ + $summary.= "$oc, "; continue; } @@ -428,12 +455,14 @@ class acl extends plugin $smarty->assign('headline', sprintf(_("Edit ACL for '%s', scope is '%s'"), $this->aclObjects[$this->aclObject], $this->aclTypes[$this->aclType])); /* Collect objects for selected category */ - $aclObjects= array(); foreach ($this->ocMapping[$this->aclObject] as $idx => $class){ if ($idx == 0){ continue; } - $aclObjects[$class]= $plist[$class]['plDescription']; + $aclObjects[$this->aclObject.'/'.$class]= $plist[$class]['plDescription']; + } + if ($this->aclObject == 'all'){ + $aclObjects['all']= _("All objects in current subtree"); } $smarty->assign('aclSelector', $this->buildAclSelector($aclObjects)); } @@ -444,16 +473,39 @@ class acl extends plugin return ($smarty->fetch (get_template_path('acl.tpl'))); } - + function sort_by_priority($list) + { + $tmp= get_global('plist'); + $plist= $tmp->info; + asort($plist); + + foreach($list as $name => $translation){ + $na = preg_replace("/^.*\//","",$name); + $prio= $plist[$na]['plPriority'] ; + + $newSort[$name] = $prio; + } + + asort($newSort); + + $ret = array(); + foreach($newSort as $name => $prio){ + $ret[$name] = $list[$name]; + } + return($ret); + } + function buildAclSelector($list) { - $display= ""; + $display= ""; $cols= 3; $tmp= get_global('plist'); $plist= $tmp->info; asort($plist); /* Build general objects */ + + $list =$this->sort_by_priority($list); foreach ($list as $key => $name){ /* Create sub acl if it does not exist */ @@ -464,7 +516,33 @@ class acl extends plugin $currentAcl= $this->aclContents[$key]; /* Object header */ - $display.= ""; + if($_SESSION['js']) { + if(isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/gecko/i",$_SERVER['HTTP_USER_AGENT'])) { + $display.= "\n
"._("Object").": $name
". + "\n ". + "\n ". + "\n ". + "\n "; + } else if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/ie/i",$_SERVER['HTTP_USER_AGENT'])) { + $display.= "\n
"._("Object").": $name". + "\n
". + "\n ". + "\n ". + "\n ". + "\n "; + } else { + $display.= "\n
"._("Object").": $name". + "\n
". + "\n ". + "\n ". + "\n "; + } + } else { + $display.= "\n
"._("Object").": $name
". + "\n ". + "\n ". + "\n "; + } /* Generate options */ $spc= "  "; @@ -472,13 +550,13 @@ class acl extends plugin $options= $this->mkchkbx($key."_0_c", _("Create objects"), preg_match('/c/', $currentAcl[0])).$spc; $options.= $this->mkchkbx($key."_0_m", _("Move objects"), preg_match('/m/', $currentAcl[0])).$spc; $options.= $this->mkchkbx($key."_0_d", _("Remove objects"), preg_match('/d/', $currentAcl[0])).$spc; - if ($plist[$key]['plSelfModify']){ + if ($plist[preg_replace('%^.*/%', '', $key)]['plSelfModify']){ $options.= $this->mkchkbx($key."_0_s", _("Modifyable by owner"), preg_match('/s/', $currentAcl[0])).$spc; } } else { $options= $this->mkchkbx($key."_0_m", _("Move object"), preg_match('/m/', $currentAcl[0])).$spc; $options.= $this->mkchkbx($key."_0_d", _("Remove object"), preg_match('/d/', $currentAcl[0])).$spc; - if ($plist[$key]['plSelfModify']){ + if ($plist[preg_replace('%^.*/%', '', $key)]['plSelfModify']){ $options.= $this->mkchkbx($key."_0_s", _("Modifyable by owner"), preg_match('/s/', $currentAcl[0])).$spc; } } @@ -487,12 +565,28 @@ class acl extends plugin $more_options= $this->mkchkbx($key."_0_r", _("read"), preg_match('/r/', $currentAcl[0])).$spc; $more_options.= $this->mkchkbx($key."_0_w", _("write"), preg_match('/w/', $currentAcl[0])); - $display.= ""; + $display.= "\n ". + "\n ". + "\n ". + "\n "; /* Walk through the list of attributes */ $cnt= 1; - $splist= $plist[$key]['plProvidedAcls']; + $splist= $plist[preg_replace('%^.*/%', '', $key)]['plProvidedAcls']; asort($splist); + if($_SESSION['js']) { + if(isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/gecko/i",$_SERVER['HTTP_USER_AGENT'])) { + $display.= "\n ". + "\n ". + "\n "; + } + } + + $display.= "\n
"._("Object").": $name
$options ".("Complete object:")." $more_options
$options ".("Complete object:")." $more_options
". + "\n ". + "\n

\n"; } return ($display); @@ -539,7 +643,8 @@ class acl extends plugin function mkchkbx($name, $text, $state= FALSE) { $state= $state?"checked":""; - return ""; + return "\n ". + "\n "; } @@ -547,8 +652,10 @@ class acl extends plugin { $rstate= preg_match('/r/', $state)?'checked':''; $wstate= preg_match('/w/', $state)?'checked':''; - return ("". - ""); + return ("\n ". + "\n ". + "\n ". + "\n "); } @@ -800,6 +907,11 @@ class acl extends plugin $ldap->modify ($this->attrs); show_ldap_error($ldap->get_error(), sprintf(_("Saving ACLs with dn '%s' failed."),$this->dn)); + + /* Refresh users ACLs */ + $ui= get_userinfo(); + $ui->loadACL(); + $_SESSION['ui']= $ui; }