X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Facl%2Fclass_divListACL.inc;h=56fe9ae35a6626d23a1953af9f66c9060801248a;hb=b9bbe135001367d336d079eacd57ffd153d2ed91;hp=2e0e3c1c6897e0c50eb02f1433f06af19ebb8d44;hpb=931174208a9a6252e16dd4c4ece40947ee635faa;p=gosa.git
diff --git a/plugins/admin/acl/class_divListACL.inc b/plugins/admin/acl/class_divListACL.inc
index 2e0e3c1c6..56fe9ae35 100644
--- a/plugins/admin/acl/class_divListACL.inc
+++ b/plugins/admin/acl/class_divListACL.inc
@@ -17,10 +17,12 @@ class divListACL extends MultiSelectWindow
var $parent ;
var $ui ;
+ var $action_col_size;
+
function divListACL ($config,$parent)
{
- MultiSelectWindow::MultiSelectWindow($config,"ACLs");
+ MultiSelectWindow::MultiSelectWindow($config, "ACLs", "acl");
$this->parent = $parent;
$this->ui = get_userinfo();
@@ -39,50 +41,99 @@ class divListACL extends MultiSelectWindow
$this->EnableCloseButton(false);
$this->EnableSaveButton (false);
- /* Dynamic action col, depending on snapshot icons */
- $action_col_size = 80;
+ /* Dynamic action col */
+ $this->action_col_size = 120;
/* set Page header */
$this->AddHeader(array("string"=>" ", "attach"=>"style='width:20px;'"));
$this->AddHeader(array("string"=>_("Summary")));
- $this->AddHeader(array("string"=>_("Actions"), "attach" => "style='width:".$action_col_size."px;border-right:0px;text-align:right;'"));
-
+ $this->AddHeader(array("string"=>_("Actions"), "attach" => "style='width:".$this->action_col_size."px;border-right:0px;text-align:right;'"));
+
+ /* Set dynamically filter checkboxes */
+ $this->set_filter_objectclasses();
+
/* Add SubSearch checkbox */
-// $this->AddCheckBox(SEPERATOR);
$this->AddCheckBox("SubSearch", _("Select to search within subtrees"), _("Ignore subtrees"), false);
+
/* Name ,Text ,Default , Connect with alphabet */
- $this->AddRegex ("Regex", _("Display acls matching"),"Not implemented yet" , true);
+ $this->AddRegex ("Regex", _("Display acls matching"),"*" , true);
}
function GenHeader()
{
- /* Prepare departments,
+ /* Prepare departments,
which are shown in the listbox on top of the listbox
*/
$options= "";
- foreach ($this->config->idepartments as $key => $value){
- if ($this->selectedBase == $key){
- $options.= "";
- } else {
- $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);
+
+ /* Load possible departments */
+ $ui = get_userinfo();
+ $tdeps = $ui->get_module_departments("acl");
+ $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.= "";
+ } else {
+ $options.= "";
+ }
}
}
- /* Create header with selected base */
- $listhead = "
".
- "
".
- "
".
- "
".
- "
".
- "
";
- $listhead .= $this->get_snapshot_header($this->selectedBase);
- $listhead .=
+ /* 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 */
+ $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")."
".
"
".
@@ -100,18 +151,69 @@ class divListACL extends MultiSelectWindow
function setEntries($list)
{
- $list_left_icon = "
";
foreach($list as $key => $acl_entry){
- $action = "
";
- $action.= $this->GetSnapShotActions($acl_entry['dn']);
- $action.= "
";
+ /* Get copy & paste icon */
+ $acl = $this->ui->get_permissions($acl_entry['dn'],"acl/acl");
+ $acl_all = $this->ui->has_complete_category_acls($acl_entry['dn'],"acl");
+ $action = "";
+
+ if(in_array("gosaRole",$acl_entry['objectClass'])){
+
+ /* Role handling */
+ $editlink = "
%s";
+ $list_left_icon = "
";
+ $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 = "
";
+ $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" => htmlentities(utf8_decode($acl_entry['dn'])),"attach" => "");
- $field3 = array("string" => preg_replace("/%KEY%/",$key,$action), "attach"=> "style='text-align:center;width:80px;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));
}
}
@@ -126,6 +228,41 @@ class divListACL extends MultiSelectWindow
/* Save automatic created POSTs like regex, checkboxes */
MultiSelectWindow::save_object();
}
+
+
+ /* Add some additional checkboxes to the filter part, this should be generated dynamically. */
+ function set_filter_objectclasses()
+ {
+ }
+
+ /* Return objectClass names used in filter part */
+ function get_filter_objectclasses()
+ {
+ 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:
?>