X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_systemManagement.inc;h=7f7265767d0893e8d8217843fcebc8057dbb38d7;hb=3644520502707cc1a35a915bfa358105e86c4818;hp=4020c6b1a04479b59e130a69fef1a6be6b3a1ff9;hpb=a0cb6455b7dfb51a937c24d043fabb4f31272629;p=gosa.git diff --git a/plugins/admin/systems/class_systemManagement.inc b/plugins/admin/systems/class_systemManagement.inc index 4020c6b1a..7f7265767 100644 --- a/plugins/admin/systems/class_systemManagement.inc +++ b/plugins/admin/systems/class_systemManagement.inc @@ -31,6 +31,7 @@ class systems extends plugin /* Definitions */ var $plHeadline= "Systems"; var $plDescription= "This does something"; + var $departments=array(); /* Dialog attributes */ var $systab= NULL; @@ -64,6 +65,9 @@ class systems extends plugin function execute() { + /* Call parent execute */ + plugin::execute(); + /* Save data */ $terminalfilter= get_global("terminalfilter"); foreach( array("depselect", "user", "regex") as $type){ @@ -88,17 +92,87 @@ class systems extends plugin } $terminalfilter['regex']= $s; } - register_global("terminalfilter", $terminalfilter); - /* Check sorting variable */ - if (!isset($this->systab) && - !isset($_POST['new_terminal']) && - !isset($_POST['delete_terminal']) && - !isset($_POST['set_password']) && - !isset($_POST['select_terminal'])){ - $this->reload(); + $s_action = ""; // Contains the action to proceed + $s_entry = ""; // The value for s_action + $base_back = ""; // The Link for Backbutton + $smarty = get_smarty(); + + /* Start for New List Managment */ + if(isset($_GET['act'])&&($_GET['act']=="dep_open")){ + $s_action="open"; + $s_entry = base64_decode($_GET['dep_id']); + $terminalfilter['depselect']= "".$this->config->departments[trim($s_entry)]; + $this->reload(); + } + + /* Test Posts */ + foreach($_POST as $key => $val){ + // Post for delete + if(preg_match("/user_del.*/",$key)){ + $s_action = "del"; + $s_entry = preg_replace("/user_".$s_action."_/i","",$key); + // Post for edit + }elseif(preg_match("/user_edit_.*/",$key)){ + $s_action="edit"; + $s_entry = preg_replace("/user_".$s_action."_/i","",$key); + // Post for new + }elseif(preg_match("/dep_back.*/i",$key)){ + $s_action="back"; + }elseif(preg_match("/user_new.*/",$key)){ + $s_action="new"; + }elseif(preg_match("/dep_home.*/i",$key)){ + $s_action="home"; + }elseif(preg_match("/user_tplnew.*/i",$key)){ + $s_action="new_tpl"; + }elseif(preg_match("/user_setpwd_.*/i",$key)){ + $s_action="change_pw"; + $s_entry = preg_replace("/user_setpwd_/i","",$key); + }elseif(preg_match("/dep_root.*/i",$key)){ + $s_action="root"; + }elseif(preg_match("/newsystem_.*/i",$key)){ + $s_action="newsystem"; + $s_entry = preg_replace("/newsystem_/i","",$key); + } + } + + if((isset($_GET['act']))&&($_GET['act']=="edit_entry")){ + $s_action ="edit"; + $s_entry = $_GET['id']; + } + + $s_entry = preg_replace("/_.$/","",$s_entry); + + /* Department changed? */ + if(isset($_POST['depselect']) && $_POST['depselect']){ + $terminalfilter['depselect']= $_POST['depselect']; + } + + /* Homebutton is posted */ + if($s_action=="home"){ + $terminalfilter['depselect']=(preg_replace("/^[^,]+,/","",$this->ui->dn)); + $terminalfilter['depselect']=(preg_replace("/^[^,]+,/","",$terminalfilter['depselect'])); } - $smarty= get_smarty(); + + if($s_action=="root"){ + $terminalfilter['depselect']=($this->config->current['BASE']); + } + + + /* If Backbutton is Posted */ + if($s_action=="back"){ + $base_back = preg_replace("/^[^,]+,/","",$terminalfilter['depselect']); + $base_back = convert_department_dn($base_back); + + if(isset($this->config->departments[trim($base_back)])){ + $terminalfilter['depselect']= $this->config->departments[trim($base_back)]; + }else{ + $terminalfilter['depselect']= $this->config->departments["/"]; + } + } + + register_global("terminalfilter", $terminalfilter); + $this->reload(); /* Check for exeeded sizelimit */ if (($message= check_sizelimit()) != ""){ @@ -106,22 +180,29 @@ class systems extends plugin } /* Try to get informations about what kind of system to create */ - if (isset($_POST['new_terminal'])) { + if ($s_action=="new") { return ($smarty->fetch(get_template_path('chooser.tpl', TRUE))); } /* Create new default terminal */ - if (isset($_POST['create_system'])) { + if (isset($_POST['create_system'])||$s_action=="newsystem") { $this->dn= "new"; $this->acl= array(":all"); - switch ($_POST['system']){ + if(isset($_POST['system'])){ + $sw = $_POST['system']; + }else{ + $sw = $s_entry; + } + + switch ($sw){ case 'terminal': $this->systab= new termtabs($this->config, $this->config->data['TABS']['TERMTABS'], $this->dn); $this->systab->set_acl ($this->acl); $this->systab->by_object['termgeneric']->cn= "default"; $this->systab->by_object['termservice']->cn= "default"; + $this->systab->by_object['termgeneric']->base = $_SESSION['terminalfilter']['depselect']; break; case 'workstation': @@ -129,41 +210,48 @@ class systems extends plugin $this->config->data['TABS']['WORKTABS'], $this->dn); $this->systab->set_acl ($this->acl); $this->systab->by_object['workgeneric']->cn= "wdefault"; - $this->systab->by_object['termservice']->cn= "default"; + $this->systab->by_object['workservice']->cn= "default"; + $this->systab->by_object['workgeneric']->base = $_SESSION['terminalfilter']['depselect']; break; case 'server': $this->systab= new servtabs($this->config, $this->config->data['TABS']['SERVTABS'], $this->dn); $this->systab->set_acl ($this->acl); + $this->systab->by_object['servgeneric']->base = $_SESSION['terminalfilter']['depselect']; break; case 'printer': $this->systab= new printtabs($this->config, $this->config->data['TABS']['PRINTTABS'], $this->dn); $this->systab->set_acl ($this->acl); + $this->systab->by_object['printgeneric']->base = $_SESSION['terminalfilter']['depselect']; break; case 'phone': $this->systab= new phonetabs($this->config, $this->config->data['TABS']['PHONETABS'], $this->dn); $this->systab->set_acl ($this->acl); + $this->systab->by_object['phonegeneric']->base = $_SESSION['terminalfilter']['depselect']; break; case 'component': $this->systab= new componenttabs($this->config, $this->config->data['TABS']['COMPONENTTABS'], $this->dn); $this->systab->set_acl ($this->acl); + $this->systab->by_object['componentgeneric']->base = $_SESSION['terminalfilter']['depselect']; break; } + + $this->systab->base = $_SESSION['terminalfilter']['depselect']; } + /* User wants to edit data? */ - if ((isset($_POST['select_terminal']) || (isset($_POST['edit_helper']) && $_POST['edit_helper'] == "1")) && isset($_POST['termlist']) && - $_POST['termlist'] != ""){ + if ($s_action == "edit"){ /* Get 'dn' from posted 'cn', must be unique */ - $this->dn= trim($_POST['termlist']); + $this->dn= $this->terminals[$s_entry]['dn']; /* Check locking, save current plugin in 'back_plugin', so the dialog knows where to return. */ @@ -250,8 +338,8 @@ class systems extends plugin } /* Set terminals root password */ - if (isset($_POST['set_password']) && isset($_POST['termlist'])){ - $this->dn= trim($_POST['termlist']); + if ($s_action=="change_pw"){ + $this->dn= $this->terminals[$s_entry]['dn']; $_SESSION['objectinfo']= $this->dn; return ($smarty->fetch(get_template_path('password.tpl', TRUE))); } @@ -297,10 +385,10 @@ class systems extends plugin } /* Remove terminal was requested */ - if (isset($_POST['delete_terminal']) && isset($_POST['termlist'])){ + if ($s_action=="del"){ /* Get 'dn' from posted termlinst */ - $this->dn= $_POST['termlist']; + $this->dn= $this->terminals[$s_entry]['dn']; /* Load permissions for selected 'dn' and check if we're allowed to remove this 'dn' */ @@ -347,6 +435,10 @@ class systems extends plugin case "workstation": $tabtype= "worktabs"; break; + + case "phone": + $tabtype= "phonetabs"; + break; case "server": $tabtype= "servtabs"; @@ -361,10 +453,18 @@ class systems extends plugin } /* Delete request is permitted, perform LDAP action */ - $this->systab= new $tabtype($this->config, - $this->config->data['TABS']['TERMTABS'], $this->dn); - $this->systab->set_acl(array($this->acl)); - $this->systab->by_object['termgeneric']->remove_from_parent (); + if($tabtype=="phonetabs"){ + $this->systab= new $tabtype($this->config, + $this->config->data['TABS']['PHONETABS'], $this->dn); + $this->systab->set_acl(array($this->acl)); + $this->systab->by_object['phonegeneric']->remove_from_parent (); + }else{ + $this->systab= new $tabtype($this->config, + $this->config->data['TABS']['TERMTABS'], $this->dn); + $this->systab->set_acl(array($this->acl)); + $this->systab->delete(); + #$this->systab->by_object['termgeneric']->remove_from_parent (); + } unset ($this->systab); gosa_log ("System object'".$this->dn."' has been removed"); $this->systab= NULL; @@ -437,17 +537,149 @@ class systems extends plugin /* Don't show buttons if tab dialog requests this */ if (!$this->systab->by_object[$this->systab->current]->dialog){ $display.= "

\n"; - $display.= "\n"; + $display.= "\n"; $display.= " \n"; - $display.= "\n"; + $display.= "\n"; $display.= "

"; } return ($display); } + + + + + + /* Prepare departments */ + $options= ""; + foreach ($this->config->idepartments as $key => $value){ + if ($terminalfilter['depselect'] == $key){ + $options.= ""; + } else { + $options.= ""; + } + } + + + /* NEW LIST MANAGMENT */ + $listhead = "
". + "  ". + "  ". + "  ". + "  ". + " ". + " ". + " ". + " ". + " ". + " ". + "  ". + _("Current base")." ". + "  ". + "
"; + + $action= ""; + $action.= ""; + + $divlist = new divlist("systemstab"); + $divlist->SetHeader(array( + array("string" => " ", "attach" => "style='text-align:center;width:20px;'"), + array("string" => _("System")." / "._("Department"), "attach" => "style=''"), + array("string" => _("Actions"), "attach" => "style='width:60px;border-right:0px;text-align:right;'" ))); + + $divlist->SetSummary(_("This table displays all systems, in the selected tree.")); + $divlist->SetEntriesPerPage(0); + + // Defining Links + $linkopen = "%s"; + + foreach($this->departments as $key=> $val){ + + if(!isset($this->config->departments[trim($key)])){ + $this->config->departments[trim($key)]=""; + } + + $non_empty=""; + $keys= str_replace("/","\/",$key); + foreach($this->config->departments as $keyd=>$vald ){ + if(preg_match("/".$keys."\/.*/",$keyd)){ + $non_empty="full"; + } + } + + $field1 = array("string" => "department", "attach" => "style='text-align:center;width:20px;'"); + $field2 = array("string" => sprintf($linkopen,base64_encode($key),$val), "attach" => "style=''"); + $field3 = array("string" => " ", "attach" => "style='width:60px;border-right:0px;text-align:right;'"); + $divlist->AddEntry(array($field1,$field2,$field3)); + } + + // Space + $empty =" "; + + // User and Template Images + $editlink = "%s"; + + // Pictures for Extensions + $img1 = "C"; + $img2 = "L"; + $img3 = "L"; + $img4 = "M"; + $img5 = "I"; + $img6 = "F"; + $img7 = "K"; + $img8 = "A"; + $img9 = "F"; + $img10 = "L"; + + // Test Every Entry and generate divlist Array + foreach($this->terminals as $key => $val){ + // Specify Pics for Extensions + if(in_array("goCupsServer" ,$val['objectClass'])) $cups = $img1; else $cups =$empty; + if(in_array("goLogDBServer" ,$val['objectClass'])) $logdb = $img2; else $logdb =$empty; + if(in_array("goSyslogServer" ,$val['objectClass'])) $syslog = $img3; else $syslog=$empty; + if(in_array("goImapServer" ,$val['objectClass'])) $imap = $img4; else $imap =$empty; + if(in_array("sambaSamAccount" ,$val['objectClass'])) $samba = $img5; else $samba =$empty; + if(in_array("goShareServer" ,$val['objectClass'])) $nfs = $img6; else $nfs =$empty; + if(in_array("goKrbServer" ,$val['objectClass'])) $krb = $img7; else $krb =$empty; + if(in_array("goFonServer" ,$val['objectClass'])) $fon = $img8; else $fon =$empty; + if(in_array("goFaxServer" ,$val['objectClass'])) $fax = $img9; else $fax =$empty; + if(in_array("goLdapServer" ,$val['objectClass'])) $ldap = $img10; else $ldap =$empty; + + $pics = $cups.$logdb.$syslog.$imap.$samba.$nfs.$krb.$fon.$fax.$ldap; + $pics = ""; + + $val['cn'][0]= preg_replace('/\$$/', '', $val['cn'][0]); + + // Generate Array to Add + if((isset($val['is_new']))&&(!empty($val['is_new']))){ + $display= "".$val["cn"][0]." ".$val['is_new']; + }else{ + $display= "".$val["cn"][0].""; + } + + if((in_array("gotoTerminal",$val['objectClass']))||(in_array("gotoWorkstation",$val['objectClass']))){ + $action2 = ""; + }else{ + $action2 = ""; + } + + if(isset($val['message'])){ + $display.= " (".$val['message']." '".$this->config->idepartments[$terminalfilter['depselect']]."' )"; + } + + $img=$this->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='".$val['dn']."'"); + $field3 = array("string" => preg_replace("/%KEY%/", "$key", $action2.$action), "attach" => "style='width:60px;border-right:0px;text-align:right;'"); + $divlist->AddEntry( array($field1,$field2,$field3)); + } + /* Show main page */ - $smarty->assign("terminals", $this->convert_list($this->terminals)); + $smarty->assign("terminalshead", $listhead); + $smarty->assign("terminals", $divlist->DrawList()); $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("searchu_image", get_template_path('images/search_user.png')); $smarty->assign("tree_image", get_template_path('images/tree.png')); $smarty->assign("infoimage", get_template_path('images/info.png')); $smarty->assign("launchimage", get_template_path('images/launch.png')); @@ -470,33 +702,28 @@ class systems extends plugin function convert_list($input) { $temp= ""; - $conv= array( "D" => "select_default.png", - "T" => "select_terminal.png", - "L" => "select_workstation.png", - "F" => "select_phone.png", - "S" => "select_server.png", - "NT" => "select_new_terminal.png", - "NL" => "select_new_workstation.png", - "W" => "select_winstation.png", - "C" => "select_component.png", - "P" => "select_printer.png"); - - foreach ($input as $key => $value){ - $mode= preg_replace('/^.*(.)$/', '\\1', $value); - if ($mode == "D"){ - $temp= "\n".$temp; - } else { - if (preg_match('/^\+/', $value)){ - $value= preg_replace('/^\+ /', '', $value); - $new= "N"; - } else { - $new= ""; - } - $temp.= "\n"; + $conv= array( + "D" => array("select_default.png",_("Template")), + "T" => array("select_terminal.png",_("Terminal")), + "L" => array("select_workstation.png",_("Workstation")), + "F" => array("select_phone.png",_("Phone")), + "S" => array("select_server.png",_("Server")), + "NT"=> array("select_new_terminal.png",_("New Terminal")), + "NL"=> array("select_new_workstation.png",_("New Workstation")), + "W" => array("select_winstation.png",_("Winstation")), + "C" => array("select_component.png",_("Network Device")), + "P" => array("select_printer.png",_("Printer"))); + + if((isset($input['is_new']))&&(!empty($input['is_new']))){ + $input['type']="N".$input['type']; + } + foreach ($conv as $key => $value){ + if($input['type']==$key){ + $tmp['img'] ="".$key.""; + $tmp['class']=$key; + return $tmp; } } - - return ($temp); } function remove_from_parent() @@ -610,7 +837,75 @@ class systems extends plugin /* Get all gotoTerminal's */ $this->terminals= array(); - $res= get_list($this->ui->subtreeACL, "(|$termfilter$workfilter$winfilter$printfilter$phonefilter$serverfilter$netfilter)", TRUE, $base, array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), TRUE); + $res= get_list($this->ui->subtreeACL, "(|$termfilter)", FALSE, "ou=terminals,ou=systems,".$base, + array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), FALSE); + + $res= array_merge($res,get_list($this->ui->subtreeACL, "(|$termfilter)", FALSE, "ou=incoming,".$base, + array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), FALSE)); + + $res= array_merge($res, + get_list($this->ui->subtreeACL, "(|$serverfilter)", FALSE, "ou=servers,ou=systems,".$base, + array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), FALSE)); + + $res= array_merge($res, + get_list($this->ui->subtreeACL, "(|$phonefilter)", FALSE, "ou=phones,ou=systems,".$base, + array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), FALSE)); + + $res= array_merge($res, + get_list($this->ui->subtreeACL, "(|$netfilter)", FALSE, "ou=netdevices,ou=systems,".$base, + array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), FALSE)); + + $res= array_merge($res, + get_list($this->ui->subtreeACL, "(|$printfilter)", FALSE, "ou=printers,ou=systems,".$base, + array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), FALSE)); + + $res= array_merge($res, + get_list($this->ui->subtreeACL, "(|$workfilter)", FALSE, "ou=workstations,ou=systems,".$base, + array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), FALSE)); + + $res= array_merge($res, + get_list($this->ui->subtreeACL, "(|$workfilter)", FALSE, "ou=incoming,".$base, + array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), FALSE)); + + $res= array_merge($res, + get_list($this->ui->subtreeACL, "(|$winfilter)", FALSE, "ou=winstations,ou=systems,".$base, + array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), FALSE)); + +/* NEW LIST MANAGMENT + * We also need to search for the departments + * So we are able to navigate like in konquerer + */ + + $peopleOU = get_people_ou(); + + if(empty($peopleOU)){ + $base2 = $base; + }else{ + $base2 = preg_replace("/".$peopleOU."/i","",$base); + } + + + $res3 = get_list2($this->ui->subtreeACL, "(&(|(ou=$regex)(description=$regex))(objectClass=gosaDepartment))", + TRUE, $base2, array("ou", "description"), TRUE); + + $this->departments= array(); + $tmp = array(); + foreach ($res3 as $value){ + $tmp[strtolower($value['dn']).$value['dn']]=$value; + } + ksort($tmp); + foreach($tmp as $value){ + if(isset($value["description"][0])){ + $this->departments[$value['dn']]=convert_department_dn2($value['dn'])." - [".$value["description"][0]."]"; + }else{ + $this->departments[$value['dn']]=convert_department_dn2($value['dn']);//$value["description"][0]; + } + } + + /* END NEW LIST MANAGMENT + */ + + foreach ($res as $value){ /* Look for new terminals and mark them with '+' */ @@ -641,66 +936,52 @@ class systems extends plugin } if (preg_match ("/,ou=incoming,/i", $tmp)){ if (in_array('gotoTerminal', $value['objectClass'])){ - $add= "+ "._("New terminal"); + $add= "- "._("New terminal"); } if (in_array('gotoWorkstation', $value['objectClass'])){ - $add= "+ "._("New workstation"); + $add= "- "._("New workstation"); } } else { $add= ""; } + $terminal = array(); + if (in_array ($tmp, $responsible) || $add != ""){ if (in_array('gotoTerminal', $value["objectClass"])){ - if (isset($value["macAddress"][0]) && - $value["macAddress"][0] != "-"){ - - $this->terminals[$value["dn"]]= $add." ". - $value["cn"][0]. - " [".$value["macAddress"][0]."]T"; + if (isset($value["macAddress"][0]) && $value["macAddress"][0] != "-"){ + $terminal = $value; + $terminal['type'] = "T"; + $terminal['is_new'] = $add; } else { - $location= array_search($tmp, $this->config->departments); - $this->terminals[$value["dn"]]= _("Thin client template for"). - " $location"."D"; + $terminal = $value; + $terminal['type'] = "D"; + $terminal['message'] = _("Terminal template for"); + $terminal['location'] = array_search($tmp, $this->config->departments); } } elseif (in_array('gotoWorkstation', $value["objectClass"])){ - if (isset($value["macAddress"][0]) && - $value["macAddress"][0] != "-"){ - - $this->terminals[$value["dn"]]= $add." ". - $value["cn"][0]. - " [".$value["macAddress"][0]."]L"; + if (isset($value["macAddress"][0]) && $value["macAddress"][0] != "-"){ + $terminal = $value; + $terminal['type'] = "L"; + $terminal['is_new'] = $add; } else { - $location= array_search($tmp, $this->config->departments); - $this->terminals[$value["dn"]]= _("Workstation template for"). - " $location"."D"; + $terminal = $value; + $terminal['type'] = "D"; + $terminal['location'] = array_search($tmp, $this->config->departments); + $terminal['message'] = _("Workstation template for"); } } elseif (in_array('gotoPrinter', $value["objectClass"])){ - if (isset($value['description'][0])){ - $this->terminals[$value['dn']]= $value['cn'][0]." [".$value['description'][0]."]P"; - } else { - $this->terminals[$value['dn']]= $value['cn'][0]."P"; - } + $terminal = $value; + $terminal['type'] = "P"; } elseif (in_array('goServer', $value["objectClass"])){ - if (isset($value['description'][0])){ - $this->terminals[$value['dn']]= $value['cn'][0]." [".$value['description'][0]."]S"; - } else { - $this->terminals[$value['dn']]= $value['cn'][0]."S"; - } + $terminal = $value; + $terminal['type'] = "S"; } elseif (in_array('goFonHardware', $value["objectClass"])){ - - if (isset($value['description'][0])){ - $this->terminals[$value['dn']]= $value['cn'][0]." [".$value['description'][0]."]F"; - } else { - $this->terminals[$value['dn']]= $value['cn'][0]."F"; - } + $terminal = $value; + $terminal['type'] = "F"; } elseif (in_array('ieee802Device', $value["objectClass"])){ - - if (isset($value['description'][0])){ - $this->terminals[$value['dn']]= $value['cn'][0]." [".$value['description'][0]."]C"; - } else { - $this->terminals[$value['dn']]= $value['cn'][0]."C"; - } + $terminal = $value; + $terminal['type'] = "C"; } else{ $name= preg_replace('/\$$/', '', $value['cn'][0]); if (isset($value['sambaDomainName'])){ @@ -708,11 +989,23 @@ class systems extends plugin } else { $domain= ""; } - $this->terminals[$value['dn']]= $name.$domain."W"; + $terminal=$value; + $terminal['type'] ="W"; + $terminal['domain'] = $name.$domain; } + $this->terminals[]=$terminal; } } - natcasesort ($this->terminals); + + $tmp=array(); + foreach($this->terminals as $tkey => $val ){ + $tmp[strtolower($val['cn'][0]).$val['dn']]=$val; + } + ksort($tmp); + $this->terminals=array(); + foreach($tmp as $val){ + $this->terminals[]=$val; + } reset ($this->terminals); }