X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_systemManagement.inc;h=ac36a2034057729f02f3d917f9962884c62053dd;hb=9695395f399e680d3fbb0c6b7a2df7d8b37d17c8;hp=d66d04314d19bd46d6f429bb51e316fccfb5c89e;hpb=e299f0ca47a924516f2afbe4e922f2418b75315c;p=gosa.git diff --git a/plugins/admin/systems/class_systemManagement.inc b/plugins/admin/systems/class_systemManagement.inc index d66d04314..ac36a2034 100644 --- a/plugins/admin/systems/class_systemManagement.inc +++ b/plugins/admin/systems/class_systemManagement.inc @@ -29,14 +29,15 @@ require "tabs_winstation.inc"; class systems extends plugin { /* Definitions */ - var $plHeadline= "Systems"; - var $plDescription= "This does something"; + var $plHeadline = "Systems"; + var $plDescription = "This does something"; + var $departments = array(); /* Dialog attributes */ - var $systab= NULL; + var $systab = NULL; var $terminals= array(); - var $ui= NULL; - var $acl= ""; + var $ui = NULL; + var $DivListSystem; function systems ($config, $ui) { @@ -44,61 +45,71 @@ class systems extends plugin $this->config= $config; $this->ui= $ui; - /* Get global filter config */ - if (!is_global("terminalfilter")){ - $ui= get_userinfo(); - $base= get_base_from_people($ui->dn); - $terminalfilter= array("workstations" => "checked", - "thins" => "checked", - "winstations" => "checked", - "servers" => "checked", - "printers" => "checked", - "phones" => "checked", - "netdev" => "checked", - "user" => "*", - "depselect" => $base, - "regex" => "*"); - register_global("terminalfilter", $terminalfilter); - } + /* Creat dialog object */ + $this->DivListSystem = new divListSystem($this->config,$this); } function execute() { - /* Save data */ - $terminalfilter= get_global("terminalfilter"); - foreach( array("depselect", "user", "regex") as $type){ - if (isset($_POST[$type])){ - $terminalfilter[$type]= $_POST[$type]; + /* Call parent execute */ + plugin::execute(); + + $_SESSION['LOCK_VARS_TO_USE'] = array("/^system_edit_/i","/^system_del_/","/^act/","/^id/"); + + /******************** + Check for functional posts, edit|delete|add|... system devices + ********************/ + $s_action = ""; // Contains the action to proceed + $s_entry = ""; // The value for s_action + $base_back = ""; // The Link for Backbutton + $smarty = get_smarty(); + + /* Test Posts */ + foreach($_POST as $key => $val){ + // Post for delete + if(preg_match("/system_del.*/",$key)){ + $s_action = "del"; + $s_entry = preg_replace("/system_del_/i","",$key); + // Post for edit + }elseif(preg_match("/system_edit_.*/",$key)){ + $s_action="edit"; + $s_entry = preg_replace("/system_edit_/i","",$key); + // Post for new + }elseif(preg_match("/system_new.*/",$key)){ + $s_action="new"; + }elseif(preg_match("/system_tplnew.*/i",$key)){ + $s_action="new_tpl"; + }elseif(preg_match("/system_setpwd_.*/i",$key)){ + $s_action="change_pw"; + $s_entry = preg_replace("/system_setpwd_/i","",$key); + }elseif(preg_match("/gen_cd_.*/i",$key)){ + $s_action="gen_cd"; + $s_entry = preg_replace("/gen_cd_/i","",$key); + }elseif(preg_match("/newsystem_.*/i",$key)){ + $s_action="newsystem"; + $s_entry = preg_replace("/newsystem_/i","",$key); } } - if (isset($_POST['depselect'])){ - foreach( array("workstations", "thins", "winstations", "printers", "phones", "servers", "netdev") as $type){ - if (isset($_POST[$type])) { - $terminalfilter[$type]= "checked"; - } else { - $terminalfilter[$type]= ""; - } - } + /* Incoming handling + * If someone made a systemtype and ogroup selection + * Display the new requested entry type ... servtab in case of server and so on. + */ + if(isset($_POST['SystemTypeChoosen'])){ + $s_action = "SelectedSystemType"; + $s_entry = $_POST['SystemType']; + $_SESSION['SelectedSystemType']['ogroup'] = $_POST['ObjectGroup']; + $this->systab = NULL; } - if (isset($_GET['search'])){ - $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; - if ($s == "**"){ - $s= "*"; - } - $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(); + /* remove image tags from posted entry (posts looks like this 'name_x')*/ + $s_entry = preg_replace("/_.$/","",$s_entry); + + /* Edit was requested by pressing the name(link) of an item */ + if((isset($_GET['act']))&&($_GET['act']=="edit_entry")){ + $s_action ="edit"; + $s_entry = $_GET['id']; } - $smarty= get_smarty(); /* Check for exeeded sizelimit */ if (($message= check_sizelimit()) != ""){ @@ -106,64 +117,156 @@ 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'])) { - $this->dn= "new"; - $this->acl= array(":all"); - switch ($_POST['system']){ - 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"; - break; + /******************** + Create FAI CD ... + ********************/ + if ($s_action=="gen_cd"){ + $this->dn= $this->terminals[$s_entry]['dn']; + $_SESSION['objectinfo']= $this->dn; + return ($smarty->fetch(get_template_path('gencd.tpl', TRUE))); + } - case 'workstation': - $this->systab= new worktabs($this->config, - $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"; - break; - case 'server': - $this->systab= new servtabs($this->config, - $this->config->data['TABS']['SERVTABS'], $this->dn); - $this->systab->set_acl ($this->acl); - break; + /* Start CD-Creation */ + if ((isset($_POST["cd_create"])) && !empty($this->dn)){ + $smarty->assign("src", "?plug=".$_GET['plug']."&PerformIsoCreation"); + return ($smarty->fetch(get_template_path('gencd_frame.tpl', TRUE))); + } - case 'printer': - $this->systab= new printtabs($this->config, - $this->config->data['TABS']['PRINTTABS'], $this->dn); - $this->systab->set_acl ($this->acl); - break; - case 'phone': - $this->systab= new phonetabs($this->config, - $this->config->data['TABS']['PHONETABS'], $this->dn); - $this->systab->set_acl ($this->acl); - break; + if ($this->dn != "" && isset($_GET['PerformIsoCreation'])){ + + $return_button = "
"; + + $dsc = array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "w")); + + /* Get and check command */ + $command= search_config($this->config->data['TABS'], "workgeneric", "ISOCMD"); + if (check_command($command)){ + @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Execute"); + + /* Print out html introduction */ + echo ' + + +'; + + /* Open process handle and check if it is a valid process */ + $process= proc_open($command." '".$this->dn."'", $dsc, $pipes); + if (is_resource($process)) { + fclose($pipes[0]); + + /* Print out returned lines && write JS to scroll down each line */ + while (!feof($pipes[1])){ + $cur_dat = fgets($pipes[1], 1024); + echo $cur_dat; + echo '' ; + flush(); + } + } - case 'component': - $this->systab= new componenttabs($this->config, - $this->config->data['TABS']['COMPONENTTABS'], $this->dn); - $this->systab->set_acl ($this->acl); - break; + /* Get error string && close streams */ + $buffer= stream_get_contents($pipes[2]); + + fclose($pipes[1]); + fclose($pipes[2]); + echo ""; + + /* Check return code */ + $ret= proc_close($process); + if ($ret != 0){ + echo "
$buffer"; + } + + + + echo $return_button."
\n"; - $display.= "\n"; + $display.= "\n"; $display.= " \n"; - $display.= "\n"; + if ($this->dn != "new"){ + $display.= "\n"; + $display.= " \n"; + } + $display.= "\n"; $display.= "
"; } return ($display); } - /* Show main page */ - $smarty->assign("terminals", $this->convert_list($this->terminals)); - $smarty->assign("search_image", get_template_path('images/search.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')); - foreach( array("depselect", "user", "regex", "workstations", "thins", "servers", - "winstations", "printers", "phones", "netdev") as $type){ - - $smarty->assign("$type", $terminalfilter[$type]); + /* Check if there is a snapshot dialog open */ + $base = $this->DivListSystem->selectedBase; + if($str = $this->showSnapshotDialog($base,$this->get_used_snapshot_bases())){ + return($str); } - $smarty->assign("deplist", $this->config->idepartments); - /* Extend if we are not using javascript */ - $smarty->assign("apply", apply_filter()); - $smarty->assign("alphabet", generate_alphabet()); - $smarty->assign("hint", print_sizelimit_warning()); + /* Display dialog with system list */ + $this->DivListSystem->parent = $this; + $this->DivListSystem->execute(); - return($smarty->fetch(get_template_path('headpage.tpl', TRUE))); + /* Add departments if subsearch is disabled */ + if(!$this->DivListSystem->SubSearch){ + $this->DivListSystem->AddDepartments($this->DivListSystem->selectedBase); + } + $this->reload(); + $this->DivListSystem->setEntries($this->terminals); + return($this->DivListSystem->Draw()); } - function convert_list($input) + /* Return departments, that will be included within snapshot detection */ + function get_used_snapshot_bases() { - $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"; + $tmp = array(); + + /* Check acls, if we are not allowed to create and write each plugin tab, skip this object */ + + $tabs = array( + "terminal" => "ou=terminals,ou=systems,", + "workstation" => "ou=workstations,ou=systems,", + "server" => "ou=servers,ou=systems,", + "printer" => "ou=printers,ou=systems,", + "phone" => "ou=phones,ou=systems,", + "winworkstation" => get_winstations_ou(), + "component" => "ou=netdevices,ou=systems," + ); + + foreach($tabs as $acl_cat => $dn){ + + $acl_all = $this->ui->has_complete_category_acls($dn.$this->DivListSystem->selectedBase,$acl_cat); + if(preg_match("/(c.*w|w.*c)/",$acl_all)){ + $tmp[] = $dn.$this->DivListSystem->selectedBase; } } - - return ($temp); + return($tmp); } + function remove_from_parent() { /* Optionally execute a command after we're done */ @@ -507,6 +715,7 @@ class systems extends plugin /* Save data to object */ function save_object() { + $this->DivListSystem->save_object(); } @@ -529,188 +738,221 @@ class systems extends plugin { } - function show_header($button_text, $text, $disabled= FALSE) - { - } - function reload() { - /* Load terminal shortcuts */ - $responsible= array(); - foreach ($this->config->departments as $key => $value){ - if (get_module_permission(get_permissions ($value, $this->ui->subtreeACL), - "terminal", $value) == "#all#"){ - $responsible[$key]= $value; - } - } - - /* Get config */ - $terminalfilter= get_global('terminalfilter'); - $filter= ""; + /* some var init */ + $ui = get_userinfo(); + $res = array(); + $this->terminals = array(); + $userregex = ""; /* Set base for all searches */ - $base= $terminalfilter['depselect']; - - /* Regex filter? */ - if ($terminalfilter['regex'] != ""){ - $regex= $terminalfilter['regex']; - } else { - $regex= "*"; - } + $base= $this->DivListSystem->selectedBase; - /* Get list of terminals to be shown */ - if ($terminalfilter['thins'] == "checked"){ - $termfilter= "(&(objectClass=gotoTerminal)(cn=$regex))"; - } else { - $termfilter= ""; - } - if ($terminalfilter['workstations'] == "checked"){ - $workfilter= "(&(objectClass=gotoWorkstation)(cn=$regex))"; - } else { - $workfilter= ""; - } - if ($terminalfilter['winstations'] == "checked"){ + /* Prepare samba class name */ + $samba =""; + if ($this->DivListSystem->ShowWinWorkstations){ if ($this->config->current['SAMBAVERSION'] == "3"){ $samba= "sambaSamAccount"; } else { $samba= "sambaAccount"; } - $winfilter= "(&(objectClass=$samba)(cn=$regex\$))"; - } else { - $winfilter= ""; - } - if ($terminalfilter['printers'] == "checked"){ - $printfilter= "(&(objectClass=gotoPrinter)(cn=$regex))"; - } else { - $printfilter= ""; - } - if ($terminalfilter['phones'] == "checked"){ - $phonefilter= "(&(objectClass=goFonHardware)(cn=$regex))"; - } else { - $phonefilter= ""; } - if ($terminalfilter['netdev'] == "checked"){ - $netfilter= "(&(objectClass=ieee802Device)(cn=$regex))"; - } else { - $netfilter= ""; - } - if ($terminalfilter['servers'] == "checked"){ - $serverfilter= "(&(objectClass=goServer)(cn=$regex))"; - } else { - $serverfilter= ""; + + /* This array represents the combination between checkboxes and search filters */ + $objs = array( "ShowServers" => array("CLASS" => "goServer" ,"TREE" => "ou=servers,ou=systems," ), + "ShowTerminals" => array("CLASS" => "gotoTerminal" ,"TREE" => "ou=terminals,ou=systems,"), + "ShowPrinters" => array("CLASS" => "gotoPrinter" ,"TREE" => "ou=printers,ou=systems," ), + "ShowDevices" => array("CLASS" => "ieee802Device" ,"TREE" => "ou=netdevices,ou=systems," ), + "ShowPhones" => array("CLASS" => "goFonHardware" ,"TREE" => "ou=phones,ou=systems," ), + "ShowWorkstations" => array("CLASS" => "gotoWorkstation" ,"TREE" => "ou=workstations,ou=systems," ), + "ShowWinWorkstations"=> array("CLASS" => $samba ,"TREE" => get_winstations_ou() )); + + /* Include the 'Display Systems of user' attribute */ + if ((!empty($this->DivListSystem->UserRegex)) && ($this->DivListSystem->UserRegex!= "*")){ + $userregex = "(gotoLastUser=".$this->DivListSystem->UserRegex.")"; } - /* User filter? */ - if ($terminalfilter['user'] != "" && $terminalfilter['user'] != "*"){ - $filter.= "(gotoLastUser=".$terminalfilter['user'].")"; + /* Attributes to fetch */ + $sys_attrs = array("cn", "description", "macAddress", "objectClass", "sambaDomainName"); + $sys_categories = array("terminal", "workstation", "server", "phone" ,"printer"); + + /* Add FAIstate to attributes if FAI is activated */ + $tmp = search_config($this->config->data,"faiManagement","CLASS"); + if(!empty($tmp)){ + $sys_attrs[] = "FAIstate"; + } + + /* Walk through all possible search combinations, and search for some objects if the checkbox is enabled */ + foreach($objs as $checkBox => $oc){ + if($this->DivListSystem->$checkBox){ + if($this->DivListSystem->SubSearch){ + if($oc['CLASS'] != ""){ + $filter = "(|(&".$userregex."(objectClass=".$oc['CLASS'].")(cn=".$this->DivListSystem->Regex.")))"; + $new_res = get_list($filter, $sys_categories , $base,$sys_attrs, GL_NONE | GL_SUBSEARCH | GL_SIZELIMIT); + + /* Remove all objects that are not in the expected sub department */ + foreach($new_res as $key => $obj){ + if(preg_match("/^[^,]+,".normalizePreg($oc['TREE'])."/",$obj['dn'])){ + $res[$obj['dn']] = $obj; + } + } + } + }else{ + /* User filter? */ + if($oc['CLASS'] != ""){ + $filter = "(|(&".$userregex."(objectClass=".$oc['CLASS'].")(cn=".$this->DivListSystem->Regex.")))"; + $res = array_merge($res,get_list($filter,$sys_categories,$oc['TREE'].$base, $sys_attrs, GL_NONE | GL_SIZELIMIT)); + } + } + } } - /* Get all gotoTerminal's */ - $this->terminals= array(); + /* Search for incoming objects */ + $filter = "(|(&".$userregex."(objectClass=goHard)(cn=".$this->DivListSystem->Regex.")))"; + $res = array_merge($res,get_list($filter,$sys_categories,"ou=incoming,".$base,$sys_attrs, GL_NONE | GL_SIZELIMIT)); - $res= get_list($this->ui->subtreeACL, "(|$termfilter$workfilter$winfilter$printfilter$phonefilter$serverfilter$netfilter)", TRUE, $base, array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), TRUE); + /* Get all gotoTerminal's */ foreach ($res as $value){ - /* Look for new terminals and mark them with '+' */ - $tmp= ""; - if (preg_match('/,ou=terminals,ou=systems,/i', $value["dn"])){ - $tmp= preg_replace("/^[^,]+,[^o]*ou=terminals,ou=systems,/i", "", $value["dn"]); - } - if (preg_match('/,ou=workstations,ou=systems,/i', $value["dn"])){ - $tmp= preg_replace("/^[^,]+,[^o]*ou=workstations,ou=systems,/i", "", $value["dn"]); - } - if (preg_match('/,ou=servers,ou=systems,/i', $value["dn"])){ - $tmp= preg_replace("/^[^,]+,[^o]*ou=servers,ou=systems,/i", "", $value["dn"]); - } - if (preg_match('/,'.get_winstations_ou().'/i', $value["dn"])){ - $tmp= preg_replace("/^[^,]+,[^o]*".get_winstations_ou()."/i", "", $value["dn"]); - } - if (preg_match('/,ou=printers,ou=systems,/i', $value["dn"])){ - $tmp= preg_replace("/^[^,]+,[^o]*ou=printers,ou=systems,/i", "", $value["dn"]); - } - if (preg_match('/,ou=phones,ou=systems,/i', $value["dn"])){ - $tmp= preg_replace("/^[^,]+,[^o]*ou=phones,ou=systems,/i", "", $value["dn"]); - } - if (preg_match('/,ou=netdevices,ou=systems,/i', $value["dn"])){ - $tmp= preg_replace("/^[^,]+,[^o]*ou=netdevices,ou=systems,/i", "", $value["dn"]); + $tmp= $value['dn']; + $add= ""; + + /* Extract base */ + foreach($objs as $obj){ + if(preg_match("/,".$obj['TREE']."/i",$value['dn'])){ + $tmp = trim( preg_replace("/^[^,]+,[^o]*".$obj['TREE']."/i","",$value['dn'])); + } } - if ($tmp == ""){ - $tmp= $value["dn"]; + + /* Create a string containing the last part of the department. */ + $dn_name = preg_replace("#^([^/]+/)*#","",convert_department_dn(@LDAP::fix($tmp))); + if(empty($dn_name)){ + $dn_name = "/"; } + + /* check if current object is a new one */ if (preg_match ("/,ou=incoming,/i", $tmp)){ - if (in_array('gotoTerminal', $value['objectClass'])){ - $add= "+ "._("New terminal"); - } - if (in_array('gotoWorkstation', $value['objectClass'])){ - $add= "+ "._("New workstation"); + if (in_array_ics('gotoTerminal', $value['objectClass'])){ + $add= "- "._("New terminal"); + }elseif (in_array_ics('gotoWorkstation', $value['objectClass'])){ + $add= "- "._("New workstation"); + }elseif (in_array_ics('GOhard', $value['objectClass'])){ + $add= "- "._("New Device"); } - } else { - $add= ""; - } + } - if (in_array ($tmp, $responsible) || $add != ""){ - if (in_array('gotoTerminal', $value["objectClass"])){ - if (isset($value["macAddress"][0]) && - $value["macAddress"][0] != "-"){ + /* Detect type of object and create an entry for $this->terminals */ + $terminal = array(); - $this->terminals[$value["dn"]]= $add." ". - $value["cn"][0]. - " [".$value["macAddress"][0]."]T"; - } else { - $location= array_search($tmp, $this->config->departments); - $this->terminals[$value["dn"]]= _("Thin client template for"). - " $location"."D"; - } - } elseif (in_array('gotoWorkstation', $value["objectClass"])){ - if (isset($value["macAddress"][0]) && - $value["macAddress"][0] != "-"){ + if (in_array_ics('gotoTerminal', $value["objectClass"])){ - $this->terminals[$value["dn"]]= $add." ". - $value["cn"][0]. - " [".$value["macAddress"][0]."]L"; + /* check acl */ + $acl = $ui->get_permissions($value['dn'],"terminal/termgeneric"); + if($add != "" || preg_match("/r/",$acl)) { + 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"]]= _("Workstation template for"). - " $location"."D"; + $terminal = $value; + $terminal['type'] = "D"; + $terminal['message'] = _("Terminal template for")." '".$dn_name."' "; + $terminal['location'] = array_search($tmp, $this->config->departments); } - } elseif (in_array('gotoPrinter', $value["objectClass"])){ - if (isset($value['description'][0])){ - $this->terminals[$value['dn']]= $value['cn'][0]." [".$value['description'][0]."]P"; + } + } elseif (in_array_ics('gotoWorkstation', $value["objectClass"])){ + + $acl = $ui->get_permissions($value['dn'],"workstation/workgeneric"); + if($add != "" || preg_match("/r/",$acl)) { + if (isset($value["macAddress"][0]) && $value["macAddress"][0] != "-"){ + $terminal = $value; + $terminal['type'] = "L"; + $terminal['is_new'] = $add; } else { - $this->terminals[$value['dn']]= $value['cn'][0]."P"; + $terminal = $value; + $terminal['type'] = "D"; + $terminal['location'] = array_search($tmp, $this->config->departments); + $terminal['message'] = _("Workstation template for")." '".$dn_name."' "; } - } 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"; + if (isset($value["FAIstate"][0])){ + $terminal['type']= $this->getState($terminal['type'], $value["FAIstate"][0]); } - } elseif (in_array('goFonHardware', $value["objectClass"])){ + } + } elseif (in_array_ics('gotoPrinter', $value["objectClass"])){ + + + $acl = $ui->get_permissions($value['dn'],"printer/printgeneric"); + if($add != "" || preg_match("/r/",$acl)) { - 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"; - } - } elseif (in_array('ieee802Device', $value["objectClass"])){ + $terminal = $value; + $terminal['type'] = "P"; + } + } elseif (in_array_ics('goServer', $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"; - } - } else{ - $name= preg_replace('/\$$/', '', $value['cn'][0]); - if (isset($value['sambaDomainName'])){ - $domain= " [".$value['sambaDomainName'][0]."]"; - } else { - $domain= ""; + $acl = $ui->get_permissions($value['dn'],"server/servgeneric"); + if($add != "" || preg_match("/r/",$acl)) { + + $terminal = $value; + $terminal['type'] = "S"; + if (isset($value["FAIstate"][0])){ + $terminal['type']= $this->getState($terminal['type'], $value["FAIstate"][0]); } - $this->terminals[$value['dn']]= $name.$domain."W"; } + } elseif (in_array_ics('goFonHardware', $value["objectClass"])){ + + $acl = $ui->get_permissions($value['dn'],"phone/phoneGeneric"); + if($add != "" || preg_match("/r/",$acl)) { + + $terminal = $value; + $terminal['type'] = "F"; + } + }elseif (in_array_ics("GOhard",$value['objectClass'])){ + + $acl = $ui->get_permissions($value['dn'],"server/servgeneric"). + $ui->get_permissions($value['dn'],"terminal/termgeneric"). + $ui->get_permissions($value['dn'],"workstation/workgeneric"); + if($add != "" || preg_match("/r/",$acl)) { + + $terminal = $value; + $terminal['type'] = "Q"; + $terminal['is_new'] = $add; + } + } elseif (in_array_ics('ieee802Device', $value["objectClass"])){ + + $acl = $ui->get_permissions($value['dn'],"component/componentGeneric"); + if($add != "" || preg_match("/r/",$acl)) { + + $terminal = $value; + $terminal['type'] = "C"; + } + } else{ + + $name= preg_replace('/\$$/', '', $value['cn'][0]); + if (isset($value['sambaDomainName'])){ + $domain= " [".$value['sambaDomainName'][0]."]"; + } else { + $domain= ""; + } + $terminal=$value; + $terminal['type'] ="W"; + $terminal['domain'] = $name.$domain; + } + + if(count($terminal)){ + $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); } @@ -725,29 +967,83 @@ class systems extends plugin function get_system_type($classes) { $type= ""; - - if (in_array('ieee802Device', $classes)){ + if (in_array_ics('ieee802Device', $classes)){ $type= "component"; - } - if (in_array('gotoTerminal', $classes)){ + }elseif (in_array_ics('gotoTerminal', $classes)){ $type= "terminal"; - } - if (in_array('gotoWorkstation', $classes)){ + }elseif (in_array_ics('gotoWorkstation', $classes)){ $type= "workstation"; - } - if (in_array('gotoPrinter', $classes)){ + }elseif (in_array_ics('gotoPrinter', $classes)){ $type= "printer"; - } - if (in_array('goFonHardware', $classes)){ + }elseif (in_array_ics('goFonHardware', $classes)){ $type= "phone"; - } - if (in_array('goServer', $classes)){ + }elseif (in_array_ics('goServer', $classes)){ $type= "server"; - } - if (in_array('sambaAccount', $classes) || - in_array('sambaSamAccount', $classes)){ + }elseif (in_array_ics('GOhard', $classes)){ + $type= "NewDevice"; + }elseif (in_array_ics('sambaAccount', $classes) || + in_array_ics('sambaSamAccount', $classes)){ $type= "winstation"; } + return ($type); + } + + + function convert_list($input) + { + $temp= ""; + $conv= array( + "NQ" => array("select_newsystem.png",_("New System from incoming")), + "D" => array("select_default.png",_("Template")), + "T" => array("select_terminal.png",_("Terminal")), + "L" => array("select_workstation.png",_("Workstation")), + "GL" => array("select_workstation_green.png",_("Workstation is installing")), + "YL" => array("select_workstation_yellow.png",_("Workstation is waiting for action")), + "RL" => array("select_workstation_red.png",_("Workstation installation failed")), + "F" => array("select_phone.png",_("Phone")), + "S" => array("select_server.png",_("Server")), + "GS" => array("select_server_green.png",_("Server is installing")), + "YS" => array("select_server_yellow.png",_("Server is waiting for action")), + "RS" => array("select_server_red.png",_("Server installation failed")), + "W" => array("select_winstation.png",_("Winstation")), + "C" => array("select_component.png",_("Network Device")), + "NT"=> array("select_new_terminal.png",_("New Terminal")), + "NL"=> array("select_new_workstation.png",_("New Workstation")), + "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'] =""; + $tmp['class']=$key; + return $tmp; + } + } + } + + + function getState($type, $state) + { + switch (preg_replace('/:.*$/', '', $state)) { + case 'installing': + $type= 'G'.$type; + break; + case 'error': + $type= 'R'.$type; + break; + case 'install': + $type= 'Y'.$type; + break; + case 'sysinfo': + $type= 'Y'.$type; + break; + case 'softupdate': + $type= 'Y'.$type; + break; + } + return ($type); }