X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=plugins%2Fadmin%2Facl%2Fclass_divListACL.inc;h=56fe9ae35a6626d23a1953af9f66c9060801248a;hb=b9bbe135001367d336d079eacd57ffd153d2ed91;hp=ed888806bd93a17cb6fc963f98ed4dd45a7f5d1d;hpb=b100eb6a3c936055e10f4959a822c3ca9a991a9f;p=gosa.git
diff --git a/plugins/admin/acl/class_divListACL.inc b/plugins/admin/acl/class_divListACL.inc
index ed888806b..56fe9ae35 100644
--- a/plugins/admin/acl/class_divListACL.inc
+++ b/plugins/admin/acl/class_divListACL.inc
@@ -42,7 +42,7 @@ class divListACL extends MultiSelectWindow
$this->EnableSaveButton (false);
/* Dynamic action col */
- $this->action_col_size = 45;
+ $this->action_col_size = 120;
/* set Page header */
$this->AddHeader(array("string"=>" ", "attach"=>"style='width:20px;'"));
@@ -67,8 +67,12 @@ class divListACL extends MultiSelectWindow
which are shown in the listbox on top of the listbox
*/
$options= "";
+ $Copy_Paste = "";
/* Get all departments within this subtree */
+ $ui= get_userinfo();
+ $first = "";
+ $found = FALSE;
$base = $this->config->current['BASE'];
$deps= get_list("(&(|(ou=*)(description=*))(objectClass=gosaDepartment))", "acl", $base,
array("ou", "description"), GL_SIZELIMIT | GL_SUBSEARCH);
@@ -79,6 +83,14 @@ class divListACL extends MultiSelectWindow
$ids = $this->config->idepartments;
foreach($deps as $dep){
if(isset($ids[$dep['dn']]) && in_array_ics($dep['dn'], $tdeps)){
+
+ /* Keep first base dn in mind, we could need this
+ * info if no valid base was found
+ */
+ if(empty($first)) {
+ $first = $dep['dn'];
+ }
+
$value = $ids[$dep['dn']];
if ($this->selectedBase == $dep['dn']){
$options.= "";
@@ -88,21 +100,40 @@ class divListACL extends MultiSelectWindow
}
}
+ /* The currently used base is not visible with your acl setup.
+ * Set base to first useable base.
+ */
+ if(!$found){
+ $this->selectedBase = $first;
+ }
+
+ /* Allow copy & paste for roles */
+ $acl_all = $ui->has_complete_category_acls($this->selectedBase,"acl");
+ $acl = $ui->get_permissions($this->selectedBase,"acl/acl");
+
+ /* Add default header */
+ $listhead = MultiSelectWindow::get_default_header();
+
/* Get copy & paste icon */
- $acl = $ui->get_permissions($this->selectedBase,"acl/aclManagement");
-
- /* Create header with selected base */
- $listhead = "
".
- "
".
- "
".
- "
".
- "
".
- "
![](images/list_seperator.png)
";
- $listhead .=
+ $Copy_Paste ="";
+ if(preg_match("/(c.*w|w.*c)/",$acl_all) && $this->parent->CopyPasteHandler){
+ $Copy_Paste = $this->parent->CopyPasteHandler->generatePasteIcon();
+ $addsep = true;
+ }
+
+ /* Add snapshot icons */
+ if(preg_match("/(c.*w|w.*c)/",$acl_all)){
+ $listhead .= $this->get_snapshot_header($this->selectedBase);
+ $add_sep = true;
+ }
+
+ if(preg_match("/c/",$ui->get_permissions($this->selectedBase,"acl/acl"))){
+ $add_sep = true;
+ $listhead .= "
";
+ }
+
+ $listhead .= $Copy_Paste.
_("Base")."
".
"
".
@@ -120,29 +151,69 @@ class divListACL extends MultiSelectWindow
function setEntries($list)
{
- $list_left_icon = "
!["._("Acl")."](images/select_acl.png)
";
- $editlink = "
%s";
foreach($list as $key => $acl_entry){
/* Get copy & paste icon */
- $acl = $this->ui->get_permissions($acl_entry['dn'],"acl/aclManagement");
+ $acl = $this->ui->get_permissions($acl_entry['dn'],"acl/acl");
+ $acl_all = $this->ui->has_complete_category_acls($acl_entry['dn'],"acl");
+ $action = "";
- $action = "";
+ if(in_array("gosaRole",$acl_entry['objectClass'])){
- /* Add actions depending on acls */
- if(preg_match("/r/", $acl)){
- $action.= "
";
- }
- if(preg_match("/d/", $acl)){
- $action.= "
";
+ /* Role handling */
+ $editlink = "
%s";
+ $list_left_icon = "
!["._("Role")."](images/select_acl_role.png)
";
+ $cn = htmlentities(utf8_decode($acl_entry['cn'][0])) ;
+
+ if(isset($acl_entry['description'][0])){
+ $cn .= " [".$acl_entry['description'][0]."]";
+ }
+
+ /* Add copy & paste handler */
+ if(($this->parent->CopyPasteHandler) && preg_match("/(c.*w|w.*c)/",$acl_all)){
+ $action.= "
";
+ $action.= "
";
+ }
+
+ /* Add actions depending on acls */
+ if(preg_match("/r/", $acl)){
+ $action.= "
";
+ }
+
+ /* Add snapshot functionality */
+ if(preg_match("/(c.*w|w.*c)/", $acl_all)){
+ $action.= $this->GetSnapShotActions($acl_entry['dn']);
+ }
+
+ if(preg_match("/d/", $acl)){
+ $action.= "
";
+ }
+ }else{
+
+ /* Acl handling */
+ $editlink = "
%s";
+ $list_left_icon = "
!["._("Acl")."](images/select_acl.png)
";
+ $cn = htmlentities(utf8_decode($acl_entry['dn']));
+
+ /* Add actions depending on acls */
+ if(preg_match("/r/", $acl)){
+ $action.= "
";
+ }
+ if(preg_match("/d/", $acl)){
+ $action.= "
";
+ }
}
$field1 = array("string" => $list_left_icon, "attach"=> "style='text-align:center;width:20px;'");
- $field2 = array("string" => sprintf($editlink,$key,htmlentities(utf8_decode($acl_entry['dn'])))." ","attach" => "");
- $field3 = array("string" => preg_replace("/%KEY%/",$key,$action), "attach"=> "style='text-align:center;width:".$this->action_col_size."px;border-right:0px;'");
+ $field2 = array("string" => sprintf($editlink,$key,$cn)." ","attach" => "");
+ $field3 = array("string" => preg_replace("/%KEY%/",$key,$action), "attach"=> "style='text-align:right;width:".$this->action_col_size."px;border-right:0px;'");
$this->AddElement(array($field1,$field2,$field3));
}
}
@@ -170,6 +241,28 @@ class divListACL extends MultiSelectWindow
return(array("gosaAccount","gosaDepartment"));
}
+
+ /* Return plugin informations for acl handling */
+ function plInfo()
+ {
+ return (array(
+ "plShortName" => _("ACL")." & "._("ACL roles"),
+ "plDescription" => _("ACL")." & "._("ACL roles")." - ("._("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"))
+
+ ));
+ }
+
+
+
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>