X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_divListSystem.inc;h=488e882f66c4aebc76d4957a47c35573cebcac3c;hb=9695395f399e680d3fbb0c6b7a2df7d8b37d17c8;hp=d92ffacbe4d3c27b934451217b343857428aba23;hpb=86cb8b55f80ea295e154226b20a568170f104ea6;p=gosa.git diff --git a/plugins/admin/systems/class_divListSystem.inc b/plugins/admin/systems/class_divListSystem.inc index d92ffacbe..488e882f6 100644 --- a/plugins/admin/systems/class_divListSystem.inc +++ b/plugins/admin/systems/class_divListSystem.inc @@ -28,7 +28,11 @@ class divListSystem extends MultiSelectWindow function divListSystem ($config,$parent) { - MultiSelectWindow::MultiSelectWindow($config,"System"); + MultiSelectWindow::MultiSelectWindow($config, "System", array("server", + "workstation", + "terminal", + "phone", + "printer")); $this->parent = $parent; $this->ui = get_userinfo(); @@ -47,10 +51,16 @@ class divListSystem extends MultiSelectWindow $this->EnableCloseButton(false); $this->EnableSaveButton (false); + /* Dynamic action col, depending on snapshot icons */ + $action_col_size = 70; + if($this->parent->snapshotEnabled()){ + $action_col_size += 38; + } + /* set Page header */ $this->AddHeader(array("string"=>" ","attach"=>"style='width:20px;'")); $this->AddHeader(array("string"=>_("System / Department"))); - $this->AddHeader(array("string"=>_("Actions"),"attach"=>"style='width:90px;border-right:0px;'")); + $this->AddHeader(array("string"=>_("Actions"),"attach"=>"style='width:".$action_col_size."px;border-right:0px;'")); /* Text ,Value ,Name ,Is selected */ $this->AddCheckBox("ShowServers", _("Select to see servers"), _("Show servers"), true); @@ -72,43 +82,109 @@ 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; } } - $listhead = "
". - "  ". - "  ". - "  ". - "  ". - "  ". - " ". - "  ". - " ". - " ". - " ". - " ". - " ". - " ". - "  "._("Base")." ". - " ". + + $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 default header */ + $listhead = MultiSelectWindow::get_default_header(); + + /* 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")."  ". "  ". "
"; @@ -122,21 +198,6 @@ class divListSystem extends MultiSelectWindow } - function GetSnapShotActions($dn) - { - $str = ""; - $str .=" "; - - if(count($this->parent->Available_SnapsShots($dn))){ - $str .=" "; - }else{ - $str.= " "; - } - return($str); - } - function setEntries($terminals) { $img1 = "C"; @@ -150,17 +211,61 @@ class divListSystem extends MultiSelectWindow $img9 = "F"; $img10 = "L"; - $empty =" "; + $empty =""; + + /* Dynamic action col, depending on snapshot icons */ + $action_col_size = 70; + if($this->parent->snapshotEnabled()){ + $action_col_size += 38; + } // 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 = $this->GetSnapShotActions($val['dn']); - $action.= ""; - $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; @@ -190,20 +295,37 @@ class divListSystem extends MultiSelectWindow $display= $val["cn"][0].$dsc; } - if((in_array("gotoTerminal",$val['objectClass']))||(in_array("gotoWorkstation",$val['objectClass']))){ - $action2 = ""; + + /* 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); $field1 = array("string" => sprintf($img['img'],$val['dn']), "attach" => "style='text-align:center;width:20px;'"); $field2 = array("string" => sprintf($editlink,$key,$display), "attach" => "style='' title='".preg_replace('/ /', ' ', @LDAP::fix($val['dn']))."'"); - $field3 = array("string" => preg_replace("/%KEY%/", "$key", $action2.$action), "attach" => "style='width:90px;border-right:0px;text-align:right;'"); + $field3 = array("string" => preg_replace("/%KEY%/", "$key", $action2.$action), "attach" => "style='width:".$action_col_size."px;border-right:0px;text-align:right;'"); $this->AddElement( array($field1,$field2,$field3)); } @@ -222,59 +344,6 @@ class divListSystem extends MultiSelectWindow MultiSelectWindow :: save_object(); - /* check for posts */ - $once = true; - foreach($_POST as $name => $value){ - - /* Create a new snapshot, display a dialog */ - if(preg_match("/^CreateSnapShot_/",$name) && $once){ - $once = false; - $entry = preg_replace("/^CreateSnapShot_/","",$name); - $entry = base64_decode(preg_replace("/_[xy]$/","",$entry)); - $this->parent->systab = new SnapShotDialog($this->config,$entry,$this->parent); - } - - /* Restore a snapshot, display a dialog with all snapshots of the current object */ - if(preg_match("/^RestoreSnapShot_/",$name) && $once){ - $once = false; - $entry = preg_replace("/^RestoreSnapShot_/","",$name); - $entry = base64_decode(preg_replace("/_[xy]$/","",$entry)); - $this->parent->systab = new SnapShotDialog($this->config,$entry,$this->parent); - $this->parent->systab->Restore = true; - } - - /* Restore one of the already deleted objects */ - if(preg_match("/^RestoreDeletedSnapShot_/",$name) && $once){ - $once = false; - $entry = "ou=systems,".$this->selectedBase; - $this->parent->systab = new SnapShotDialog($this->config,$entry,$this->parent); - $this->parent->systab->Restore = true; - $this->parent->systab->DeletedOnes = true; - } - } - - /* Create a new snapshot requested, check - the given attributes and create the snapshot*/ - if(isset($_POST['CreateSnapshot'])){ - $this->parent->systab->save_object(); - $msgs = $this->parent->systab->check(); - if(count($msgs)){ - foreach($msgs as $msg){ - print_red($msg); - } - }else{ - $this->parent->dn = $this->parent->systab->dn; - $this->parent->create_snapshot("snapshot",$this->parent->systab->CurrentDescription); - $this->parent->systab = NULL; - } - } - - /* Restore is requested, restore the object with the posted dn .*/ - if((isset($_POST['RestoreSnapshot'])) && (isset($_POST['SnapShot']))){ - $entry = base64_decode($_POST['SnapShot']); - $this->parent->restore_snapshot($entry); - $this->parent->systab = NULL; - } } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: