X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_divListSystem.inc;h=34dfaac5cd5c3a36f6f08feca84bf646618fceb7;hb=ecabf2056dc1350d73115d5fa226676be30017d6;hp=bf73c5504f8c0cf58adf570a0c2678e113f01373;hpb=47f45f247c547999858874eac073796ce4d6e30b;p=gosa.git diff --git a/plugins/admin/systems/class_divListSystem.inc b/plugins/admin/systems/class_divListSystem.inc index bf73c5504..34dfaac5c 100644 --- a/plugins/admin/systems/class_divListSystem.inc +++ b/plugins/admin/systems/class_divListSystem.inc @@ -52,7 +52,7 @@ class divListSystem extends MultiSelectWindow $this->EnableSaveButton (false); /* Dynamic action col, depending on snapshot icons */ - $action_col_size = 50; + $action_col_size = 70; if($this->parent->snapshotEnabled()){ $action_col_size += 38; } @@ -82,17 +82,57 @@ class divListSystem extends MultiSelectWindow 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.= ""; + + /* Get all departments within this subtree */ + $base = $this->config->current['BASE']; + $deps= get_list("(&(|(ou=*)(description=*))(objectClass=gosaDepartment))", $this->module, $base, + array("ou", "description"), GL_SIZELIMIT | GL_SUBSEARCH); + + $tmp =array(); + foreach($deps as $dep){ + $tmp[$dep['dn']] = $dep; + } + $deps = $tmp; + + /* Load possible departments */ + $ui= get_userinfo(); + $department = array(); + foreach($this->module as $module){ + $d = $ui->get_module_departments($module); + foreach($d as $department){ + $departments[$department] = $department; } } + + $ids = $this->config->idepartments; + + foreach($deps as $dep){ + if(isset($ids[$dep['dn']]) && in_array_ics($dep['dn'], $departments)){ + + $value = $ids[$dep['dn']]; + if ($this->selectedBase == $dep['dn']){ + $options.= ""; + } else { + $options.= ""; + } + } + } + + /* If there is at least one c (Create) and one w (Write) acl in this combination + display the snapshot paste icon. BUT check the correct acls in the management plugin */ + $all_module_acls = ""; + foreach($this->module as $module){ + $all_module_acls .= $ui->has_complete_category_acls($this->selectedBase,$module); + } + + /* Must we add an additional seperator */ + $add_sep = false; + + /* Add the basic icons for navigation */ $listhead = "
". "  ". @@ -102,21 +142,57 @@ class divListSystem extends MultiSelectWindow title='"._("Go to users department")."' alt='"._("Home")."' name='dep_home'> ". "  ". "  "; - $listhead .= $this->get_snapshot_header($this->selectedBase); - $listhead .= " ". - " ". - " ". - " ". - " ". - " ". - "  "._("Base")." ". - " ". + + /* Add snapshot icons */ + if(preg_match("/(c.*w|w.*c)/",$all_module_acls)){ + $listhead .= $this->get_snapshot_header($this->selectedBase); + $add_sep = true; + } + + /* Handle create icons */ + if(preg_match("/c/",$ui->get_permissions($this->selectedBase,"terminal/termgeneric"))){ + $add_sep = true; + $listhead .= " "; + } + + if(preg_match("/c/",$ui->get_permissions($this->selectedBase,"workstation/workgeneric"))){ + $add_sep = true; + $listhead .= " "; + } + + if(preg_match("/c/",$ui->get_permissions($this->selectedBase,"server/servgeneric"))){ + $add_sep = true; + $listhead .= " "; + } + + if(preg_match("/c/",$ui->get_permissions($this->selectedBase,"printer/printgeneric"))){ + $add_sep = true; + $listhead .= " "; + } + + if(preg_match("/c/",$ui->get_permissions($this->selectedBase,"phone/phoneGeneric"))){ + $add_sep = true; + $listhead .= " "; + } + + if(preg_match("/c/",$ui->get_permissions($this->selectedBase,"component/componentGeneric"))){ + $add_sep = true; + $listhead .= " "; + } + + /* Should we add a seperator ? */ + if($add_sep){ + $listhead .= " "; + } + + /* Add base selection */ + $listhead .= _("Base")."  ". "  ". "
"; @@ -143,10 +219,10 @@ class divListSystem extends MultiSelectWindow $img9 = "F"; $img10 = "L"; - $empty =" "; + $empty =""; /* Dynamic action col, depending on snapshot icons */ - $action_col_size = 50; + $action_col_size = 70; if($this->parent->snapshotEnabled()){ $action_col_size += 38; } @@ -154,12 +230,50 @@ class divListSystem extends MultiSelectWindow // User and Template Images $editlink = "%s"; + /* ACL mapping */ + $ui = get_userinfo(); + $tabs = array( + "terminal" => array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "terminal/termgeneric"), + "workstation" => array("CLASS"=>"WORKTABS", "TABCLASS" =>"worktabs", "ACL"=> "workstation/workgeneric"), + "server" => array("CLASS"=>"SERVTABS", "TABCLASS" =>"servtabs", "ACL"=> "server/servgeneric"), + "printer" => array("CLASS"=>"PRINTTABS", "TABCLASS" =>"printtabs", "ACL"=> "printer/printgeneric"), + "phone" => array("CLASS"=>"PHONETABS", "TABCLASS" =>"phonetabs", "ACL"=> "phone/phoneGeneric"), + "winstation" => array("CLASS"=>"WINTABS", "TABCLASS" =>"wintabs", "ACL"=> "winworkstation/wingeneric"), + "component" => array("CLASS"=>"COMPONENTTABS","TABCLASS" =>"componenttabs", "ACL"=> "component/componentGeneric")); + + // Test Every Entry and generate divlist Array foreach($terminals as $key => $val){ - $action= ""; - $action.= $this->GetSnapShotActions($val['dn']); - $action.= ""; + /* Get system type, it is used to fetch the acls for the current object. + "winstation" acls are stored as 2winworkstation", so we have to map this here */ + $type = $this->parent->get_system_type($val['objectClass']); + if($type == "winstation") { + $acl_type = "winworkstation"; + }else{ + $acl_type = $type; + } + + /* Get complete category acls */ + $acl_all = $ui->has_complete_category_acls($val['dn'],$acl_type) ; + + /* Get specific generic acls */ + $acl = $ui->get_permissions($val['dn'],$tabs[$type]['ACL']); + + $action= ""; + if(preg_match("/(c.*w|w.*c)/",$acl_all)){ + $action.= $this->GetSnapShotActions($val['dn']); + }else{ + $action.= $empty." ".$empty." "; + } + + if(preg_match("/d/",$acl)){ + $action.= ""; + }else{ + $action.= $empty; + } /* Generate picture list, which is currently disabled */ if(in_array("goCupsServer" ,$val['objectClass'])) $cups = $img1; else $cups =$empty; @@ -189,14 +303,31 @@ class divListSystem extends MultiSelectWindow $display= $val["cn"][0].$dsc; } - if((in_array("gotoTerminal",$val['objectClass']))||(in_array("gotoWorkstation",$val['objectClass']))){ + + /* Check if this is a terminal/workstation && if we are allowed to change the gotoRootPasswd */ + $pwd_acl =""; + if(in_array("gotoWorkstation",$val['objectClass'])){ + $pwd_acl = $ui->get_permissions($val['dn'],"workstation/workgeneric","gotoRootPasswd"); + } + if(in_array("gotoTerminal",$val['objectClass'])){ + $pwd_acl = $ui->get_permissions($val['dn'],"terminal/termgeneric","gotoRootPasswd"); + } + if(preg_match("/w/",$pwd_acl)){ $action2 = ""; }else{ - $action2 = ""; + $action2 = $empty; + } + + + if(in_array("gotoWorkstation",$val['objectClass'])){ + $action2= " ".$action2; + }else{ + $action2= $empty.$action2; } if(isset($val['message'])){ - $display.= " (".$val['message']." '".$this->config->idepartments[$_SESSION['CurrentMainBase']]."' )"; + $display.= " (".$val['message'].")"; } $img = $this->parent->convert_list($val);