config= $config; $this->ui= $ui; /* Add FAIstate to attributes if FAI is activated */ $tmp = $this->config->search("faiManagement", "CLASS",array('menu','tabs')); if(!empty($tmp)){ $this->fai_activated = TRUE; } /* Copy & Paste enabled ?*/ if ($this->config->get_cfg_value("copyPaste") == "true"){ $this->CopyPasteHandler = new CopyPasteHandler($this->config); } /* Check whether the arp handling active or not */ if($this->config->search("ArpNewDevice","CLASS",array('tabs')) != ""){ $this->arp_handling_active = TRUE; } /* Check if we are able to communicate with the GOsa supprot daemon */ if(class_available("gosaSupportDaemon")){ $o = new gosaSupportDaemon(); $this->si_active = $o->connect() && class_available("DaemonEvent"); } /* Check if we are able to communicate with the GOsa supprot daemon */ if(class_available("opsi")){ $this->opsi = new opsi($this->config); } /* Creat dialog object */ $this->DivListSystem = new divListSystem($this->config,$this); } function execute() { /* Call parent execute */ plugin::execute(); session::set('LOCK_VARS_TO_USE',array("/^system_edit_/i","/^system_del_/","/^act/","/^id/","/^item_selected/","/^remove_multiple_systems/","/^menu_action/")); /******************** 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("/^copy_.*/",$key)){ $s_action="copy"; $s_entry = preg_replace("/^copy_/i","",$key); }elseif(preg_match("/^cut_.*/",$key)){ $s_action="cut"; $s_entry = preg_replace("/^cut_/i","",$key); } } /* 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']; } /* Create options */ if(isset($_POST['menu_action']) && preg_match("/^newsystem_/",$_POST['menu_action'])){ $s_action = "newsystem"; $s_entry = preg_replace("/^newsystem_/","",$_POST['menu_action']); } /* handle C&P from layers menu */ if(isset($_POST['menu_action']) && preg_match("/^multiple_copy_systems/",$_POST['menu_action'])){ $s_action = "copy_multiple"; } if(isset($_POST['menu_action']) && preg_match("/^multiple_cut_systems/",$_POST['menu_action'])){ $s_action = "cut_multiple"; } if(isset($_POST['menu_action']) && preg_match("/^editPaste/",$_POST['menu_action'])){ $s_action = "editPaste"; } /* Handle daemon events */ if(isset($_POST['menu_action']) && preg_match("/^trigger_event_/",$_POST['menu_action'])){ $s_action = $_POST['menu_action']; } /* Handle daemon events */ if(isset($_POST['menu_action']) && preg_match("/^schedule_event_/",$_POST['menu_action'])){ $s_action = $_POST['menu_action']; } /* handle remove from layers menu */ if(isset($_POST['menu_action']) && preg_match("/^remove_multiple/",$_POST['menu_action'])){ $s_action = "del_multiple"; } /* Handle instant actions from layers menu */ foreach (array("halt", "reboot", "reinstall", "update", "wake") as $act){ if(isset($_POST['menu_action']) && preg_match("/^${act}_multiple/",$_POST['menu_action'])){ $s_action = "${act}_multiple"; } } /* Activate multiple machines */ if(isset($_POST['menu_action']) && preg_match("/^activate_multiple/",$_POST['menu_action'])){ $s_action = "activate_multiple"; } /* Check for exeeded sizelimit */ if (($message= check_sizelimit()) != ""){ return($message); } /* Try to get informations about what kind of system to create */ if ($s_action=="new") { return ($smarty->fetch(get_template_path('chooser.tpl', TRUE))); } /* 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"; } /******************** Copy & Paste Handling ... ********************/ /* Display the copy & paste dialog, if it is currently open */ $ret = $this->copyPasteHandling_from_queue($s_action,$s_entry); if($ret){ return($ret); } /******************** Create FAI CD ... ********************/ if ($s_action=="gen_cd"){ $this->dn= $this->terminals[$s_entry]['dn']; set_object_info($this->dn); return ($smarty->fetch(get_template_path('gencd.tpl', TRUE))); } /* 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))); } 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= $this->config->search("workgeneric", "SYSTEMISOHOOK",array('tabs')); 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(); } } /* 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."
"; }elseif (!$dialog){ $display.= "
\n"; $display.= "\n"; $display.= " \n"; if (!$hide_apply){ $display.= "\n"; $display.= " \n"; } $display.= "\n"; $display.= "
"; } return ($display); } /* Check if there is a snapshot dialog open */ $base = $this->DivListSystem->selectedBase; if($str = $this->showSnapshotDialog($base,$this->get_used_snapshot_bases(),$this)){ return($str); } /* Display dialog with system list */ $this->DivListSystem->parent = $this; $this->DivListSystem->execute(); /* Add departments if subsearch is disabled */ if(!$this->DivListSystem->SubSearch){ /* Add FAIstate to attributes if FAI is activated */ if($this->fai_activated){ $this->DivListSystem->AddDepartments($this->DivListSystem->selectedBase,4,1); }else{ $this->DivListSystem->AddDepartments($this->DivListSystem->selectedBase,3,1); } } $this->reload(); $this->DivListSystem->setEntries($this->terminals); return($this->DivListSystem->Draw()); } /* Return departments, that will be included within snapshot detection */ function get_used_snapshot_bases() { $tmp = array(); /* Check acls, if we are not allowed to create and write each plugin tab, skip this object */ $tabs = array( "terminal" => get_ou('terminalRDN'), "workstation" => get_ou('workstationRDN'), "incoming" => get_ou('systemIncomingRDN'), "server" => get_ou('serverRDN'), "printer" => get_ou('printerRDN'), "phone" => get_ou('phoneRDN'), "winworkstation" => get_winstations_ou(), "component" => get_ou('componentRDN') ); 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($tmp); } function remove_from_parent() { /* Optionally execute a command after we're done */ $this->postremove(); } /* Save data to object */ function save_object() { $this->DivListSystem->save_object(); if(is_object($this->CopyPasteHandler)){ $this->CopyPasteHandler->save_object(); } } /* Check values */ function check() { } /* Save to LDAP */ function save() { } function adapt_from_template($dn, $skip= array()) { } function password_change_needed() { } function reload() { /* some var init */ $ui = get_userinfo(); $res = array(); $this->terminals = array(); $userregex = ""; $opsi_clients = array(); /* Set base for all searches */ $base= $this->DivListSystem->selectedBase; /* Prepare samba class name */ $samba =""; if ($this->DivListSystem->ShowWinWorkstations){ if ($this->config->get_cfg_value("sambaversion") == "3"){ $samba= "sambaSamAccount"; } else { $samba= "sambaAccount"; } } /* This array represents the combination between checkboxes and search filters */ $objs = array( "ShowServers" => array("TAB" => "servtabs", "CLASS" => "goServer" ,"TREE" => get_ou('serverRDN')), "ShowTerminals" => array("TAB" => "termtabs", "CLASS" => "gotoTerminal" ,"TREE" => get_ou('terminalRDN')), "ShowPrinters" => array("TAB" => "printtabs", "CLASS" => "gotoPrinter" ,"TREE" => get_ou('printerRDN')), "ShowDevices" => array("TAB" => "componenttabs", "CLASS" => "ieee802Device" ,"TREE" => get_ou('componentRDN')), "ShowPhones" => array("TAB" => "phonetabs", "CLASS" => "goFonHardware" ,"TREE" => get_ou('phoneRDN')), "ShowWorkstations" => array("TAB" => "worktabs", "CLASS" => "gotoWorkstation" ,"TREE" => get_ou('workstationRDN')), "ShowWinWorkstations"=> array("TAB" => "wintabs", "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.")"; } /* Attributes to fetch */ $sys_attrs = array("cn", "description", "macAddress", "objectClass", "sambaDomainName","gotoMode","FAIclass"); $sys_categories = array("terminal", "workstation", "server", "phone" ,"printer","incoming","winworkstation","component"); /* Add FAIstate to attributes if FAI is activated */ $tmp = $this->config->search("faiManagement", "CLASS",array('menu','tabs')); 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 && class_available($oc['TAB'])){ if($this->DivListSystem->SubSearch){ if($oc['CLASS'] != ""){ $filter = "(&".$userregex."(objectClass=".$oc['CLASS'].")(cn=".$this->DivListSystem->Regex."))"; $new_res = get_sub_list($filter, $sys_categories ,$oc['TREE'], $base,$sys_attrs, GL_SUBSEARCH | GL_SIZELIMIT); $res = array_merge($res,$new_res); } }else{ /* User filter? */ if($oc['CLASS'] != ""){ $filter = "(&".$userregex."(objectClass=".$oc['CLASS'].")"; /* Decide weither to search in description and CN or only in the CN */ if ($this->DivListSystem->DescSearch) { $filter = $filter . "(|(cn=".$this->DivListSystem->Regex.")(description=".$this->DivListSystem->Regex.")))"; } else { $filter = $filter . "(cn=".$this->DivListSystem->Regex."))"; } $res = array_merge($res,get_list($filter,$sys_categories,$oc['TREE'].$base, $sys_attrs, GL_SIZELIMIT)); } } } } /* Search for incoming objects */ $filter = "(|(&".$userregex."(objectClass=goHard)"; if ($this->DivListSystem->DescSearch) { $filter = $filter . "(|(cn=".$this->DivListSystem->Regex.")(description=".$this->DivListSystem->Regex.")))"; } else { $filter = $filter . "(cn=".$this->DivListSystem->Regex.")))"; } $res = array_merge($res,get_list($filter,$sys_categories, get_ou('systemIncomingRDN').$base,$sys_attrs, GL_SIZELIMIT)); /* Append opsi systems, the opsi extension have to installed. (Only, if we are allowed to view opsi hosts) */ if($this->opsi instanceof opsi && $this->opsi->enabled() && $this->DivListSystem->ShowOpsiHosts){ $o_acl = $this->ui->get_permissions($base,"opsi/opsiGeneric",""); if(preg_match("/r/",$o_acl)){ $opsi_clients = $this->opsi->get_hosts_for_system_management(); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); } } } /* Get all gotoTerminal's */ $t_id = 0; $opsi_map = array(); foreach ($res as $value){ $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'])); } } /* 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 ("/,".get_ou('systemIncomingRDN')."/i", $tmp)){ 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']) && !isset($value['gotoMode'])){ $add= "- "._("Unknown device"); }elseif (in_array_ics('GOhard', $value['objectClass'])){ $add= "- "._("New Device"); } } /* Detect type of object and create an entry for $this->terminals */ $terminal = array(); if (0 && in_array_ics('gosa_opsi_client', $value["objectClass"])){ /* check acl */ $terminal = $value; $terminal['type'] = "O"; } elseif (in_array_ics('gotoTerminal', $value["objectClass"])){ /* 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 { $terminal = $value; $terminal['type'] = "D"; $terminal['message'] = _("Terminal template for")." '".$dn_name."' "; $terminal['location'] = array_search($tmp, $this->config->departments); } } } 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 { $terminal = $value; $terminal['type'] = "D"; $terminal['location'] = array_search($tmp, $this->config->departments); $terminal['message'] = _("Workstation template for")." '".$dn_name."' "; } # if (isset($value["FAIstate"][0])){ # $terminal['type']= $this->getState($terminal['type'], $value["FAIstate"][0]); # } } } elseif (in_array_ics('gotoPrinter', $value["objectClass"])){ $acl = $ui->get_permissions($value['dn'],"printer/printgeneric"); if($add != "" || preg_match("/r/",$acl)) { $terminal = $value; $terminal['type'] = "P"; } } elseif (in_array_ics('goServer', $value["objectClass"])){ $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]); # } } } 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"]) && !( in_array_ics('sambaAccount', $value["objectClass"]) || in_array_ics('sambaSamAccount', $value["objectClass"]))){ $type= "winstation"; $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= ""; } $acl = $ui->get_permissions($value['dn'],"winworkstation/wingeneric"); if($add != "" || preg_match("/r/",$acl)) { $terminal=$value; $terminal['type'] ="W"; $terminal['domain'] = $name.$domain; } } /* Append collected data to the host list. */ if(count($terminal)){ $t_id ++ ; $this->terminals[$t_id]=$terminal; $opsi_map[preg_replace('/\$$/',"",$value['cn'][0])] = $t_id; } } /* Merge real hosts with opsi hosts. If there is a samba host, then merge it with the opsi host, to avoid duplicate entries. */ foreach($opsi_clients as $entry){ if(isset($opsi_map[$entry['cn'][0]])){ continue; } $terminal = $entry; $terminal['type'] = "O"; $this->terminals[] = $terminal; } $tmp =array(); $tmp2 =array(); foreach($this->terminals as $tkey => $val ){ $tmp[strtolower($val['cn'][0]).$val['dn']]=$val; $tmp2[strtolower($val['cn'][0]).$val['dn']] = strtolower($val['cn'][0]).$val['dn']; } natcasesort($tmp2); $this->terminals=array(); foreach($tmp2 as $val){ $this->terminals[]=$tmp[$val]; } reset ($this->terminals); } function remove_lock() { if (isset($this->systab->dn)){ del_lock ($this->systab->dn); }elseif(isset($this->dn) && !empty($this->dn) && $this->dn != "new"){ del_lock($this->dn); } if(isset($this->dns) && is_array($this->dns) && count($this->dns)){ del_lock($this->dns); } } function copyPasteHandling_from_queue($s_action,$s_entry) { /* Check if Copy & Paste is disabled */ if(!is_object($this->CopyPasteHandler)){ return(""); } $ui = get_userinfo(); $tabs = $this->get_tab_defs(); /* Add a single entry to queue */ if($s_action == "cut" || $s_action == "copy"){ /* Cleanup object queue */ $this->CopyPasteHandler->cleanup_queue(); $dn = $this->terminals[$s_entry]['dn']; $oc = $this->terminals[$s_entry]['objectClass']; $type = $this->get_system_type($this->terminals[$s_entry]); $tab_o = $tabs[$type]['CLASS']; $tab_c = $tabs[$type]['TABCLASS']; $acl_c = $tabs[$type]['TABNAME']; $acl = $tabs[$type]['ACLC']; if($s_action == "copy" && $ui->is_copyable($dn,$acl,$acl_c)){ $this->CopyPasteHandler->add_to_queue($dn,$s_action,$tab_c,$tab_o,$acl); } if($s_action == "cut" && $ui->is_cutable($dn,$acl,$acl_c)){ $this->CopyPasteHandler->add_to_queue($dn,$s_action,$tab_c,$tab_o,$acl); } } /* Add entries to queue */ if($s_action == "copy_multiple" || $s_action == "cut_multiple"){ /* Cleanup object queue */ $this->CopyPasteHandler->cleanup_queue(); /* Add new entries to CP queue */ foreach($this->list_get_selected_items() as $id){ $dn = $this->terminals[$id]['dn']; $oc = $this->terminals[$id]['objectClass']; $type = $this->get_system_type($this->terminals[$id]); if(isset($tabs[$type])){ $tab_o = $tabs[$type]['CLASS']; $tab_c = $tabs[$type]['TABCLASS']; $acl_c = $tabs[$type]['TABNAME']; $acl = $tabs[$type]['ACLC']; if($s_action == "copy_multiple" && $ui->is_copyable($dn,$acl,$acl_c)){ $this->CopyPasteHandler->add_to_queue($dn,"copy",$tab_c,$tab_o,$acl); } if($s_action == "cut_multiple" && $ui->is_cutable($dn,$acl,$acl_c)){ $this->CopyPasteHandler->add_to_queue($dn,"cut",$tab_c,$tab_o,$acl); } } } } /* Start pasting entries */ if($s_action == "editPaste"){ $this->start_pasting_copied_objects = TRUE; } /* Return C&P dialog */ if($this->start_pasting_copied_objects && $this->CopyPasteHandler->entries_queued()){ /* Get dialog */ $this->CopyPasteHandler->SetVar("base",$this->DivListSystem->selectedBase); $data = $this->CopyPasteHandler->execute(); /* Return dialog data */ if(!empty($data)){ return($data); } } /* Automatically disable status for pasting */ if(!$this->CopyPasteHandler->entries_queued()){ $this->start_pasting_copied_objects = FALSE; } return(""); } function get_system_type($attrs) { $classes = $attrs['objectClass']; $type= ""; if (in_array_ics('gosa_opsi_client', $classes)){ $type= "opsi_client"; }elseif (in_array_ics('sambaAccount', $classes) || in_array_ics('sambaSamAccount', $classes)){ $type= "winstation"; }elseif (in_array_ics('ieee802Device', $classes)){ $type= "component"; }elseif (in_array_ics('gotoTerminal', $classes)){ $type= "terminal"; }elseif (in_array_ics('gotoWorkstation', $classes)){ $type= "workstation"; }elseif (in_array_ics('gotoPrinter', $classes)){ $type= "printer"; }elseif (in_array_ics('goFonHardware', $classes)){ $type= "phone"; }elseif (in_array_ics('goServer', $classes)){ $type= "server"; }elseif (in_array_ics('GOhard', $classes) && !isset($attrs['gotoMode']) && $this->arp_handling_active){ $type= "ArpNewDevice"; }elseif (in_array_ics('GOhard', $classes)){ $type= "NewDevice"; } return ($type); } function convert_list($input) { $temp= ""; $conv= array( "D" => array("plugins/systems/images/select_default.png",_("Template")), "F" => array("plugins/systems/images/select_phone.png",_("Phone")), "C" => array("plugins/systems/images/select_component.png",_("Network device")), "P" => array("plugins/systems/images/select_printer.png",_("Printer")), "W" => array("plugins/systems/images/select_winstation.png",_("Windows workstation")), "L" => array("plugins/systems/images/select_workstation.png",_("Workstation")), "S" => array("plugins/systems/images/select_server.png",_("Server")), "T" => array("plugins/systems/images/select_terminal.png",_("Terminal")), "LX" => array("plugins/systems/images/workstation_locked.png",_("Locked workstation")), "SX" => array("plugins/systems/images/server_locked.png",_("Locked server")), "TX" => array("plugins/systems/images/terminal_locked.png",_("Locked terminal")), "LE" => array("plugins/systems/images/workstation_error.png",_("Workstation error")), "SE" => array("plugins/systems/images/server_error.png",_("Server error")), "TE" => array("plugins/systems/images/terminal_error.png",_("Terminal error")), "LB" => array("plugins/systems/images/workstation_busy.png",_("Workstation busy")), "SB" => array("plugins/systems/images/server_busy.png",_("Server busy")), "NQ" => array("plugins/systems/images/select_newsystem.png",_("New system from incoming")), "NT" => array("plugins/systems/images/select_new_terminal.png",_("New terminal")), "NL" => array("plugins/systems/images/select_new_workstation.png",_("New workstation"))); /* Add opsi client to system types */ if($this->opsi != NULL){ $conv["O"] = array("plugins/systems/images/select_winstation.png",_("Opsi client")); } /* Use locked icons */ if( in_array($input['type'],array("S","T","L")) && isset($input['gotoMode'][0]) && preg_match("/locked/",$input['gotoMode'][0])){ $input['type'].="X"; } elseif(in_array($input['type'],array("S","L")) && isset($input['FAIstate'][0])){ /* Add FAI state icons */ $type= ""; switch (preg_replace('/:.*$/', '', $input['FAIstate'][0])) { case 'error': $type= 'E'; break; case 'installing': case 'install': case 'sysinfo': case 'softupdate': case 'scheduledupdate': $type= 'B'; break; } $input['type'].= $type; } /* Use new images if object is from incoming */ if((isset($input['is_new']))&&(!empty($input['is_new']))){ $input['type']="N".$input['type']; } /* Check which flags this objects uses */ foreach ($conv as $key => $value){ $found = TRUE; if(strlen($key) != strlen($input['type'])) { $found = FALSE; } for($i = 0 ; $i < strlen($key) ; $i++){ if(!preg_match("/".$key[$i]."/",$input['type'])){ $found = FALSE; } } if($found){ $tmp['img'] =""; $tmp['class']=$key; return $tmp; } } } function list_get_selected_items() { $ids = array(); foreach($_POST as $name => $value){ if(preg_match("/^item_selected_[0-9]*$/",$name)){ $id = preg_replace("/^item_selected_/","",$name); $ids[$id] = $id; } } return($ids); } public function get_tab_defs() { $tabs = array( "incoming" => array( "CLASS" => "", "TABNAME" => "", "TABCLASS" => "", "ACLC" => "incoming", "ACL" => "incoming/systems"), "ArpNewDevice"=> array( "CLASS" => "TERMTABS", "TABNAME" => "termgeneric" , "TABCLASS" => "termtabs", "ACLC" => "incoming", "ACL" => "incoming/systems"), "NewDevice" => array( "CLASS" => "TERMTABS", "TABNAME" => "termgeneric", "TABCLASS" => "termtabs", "ACLC" => "incoming", "ACL" => "incoming/systems"), "terminal" => array( "CLASS" => "TERMTABS", "TABNAME" => "termgeneric", "TABCLASS" => "termtabs", "ACLC" => "terminal", "ACL" => "terminal/termgeneric"), "workstation" => array( "CLASS" => "WORKTABS", "TABNAME" => "workgeneric", "TABCLASS"=> "worktabs", "ACLC" => "workstation", "ACL" => "workstation/workgeneric" ), "server" => array( "CLASS" => "SERVTABS", "TABNAME" => "servgeneric", "TABCLASS"=> "servtabs", "ACLC" => "server", "ACL" => "server/servgeneric"), "printer" => array( "CLASS" => "PRINTTABS", "TABNAME" => "printgeneric", "TABCLASS"=> "printtabs", "ACLC" => "printer", "ACL" => "printer/printgeneric"), "phone" => array( "CLASS" => "PHONETABS", "TABNAME" => "phoneGeneric", "TABCLASS"=> "phonetabs", "ACLC" => "phone", "ACL" => "phone/phoneGeneric"), "winstation" => array( "CLASS" => "WINTABS", "TABNAME" => "wingeneric", "TABCLASS"=> "wintabs", "ACLC" => "winworkstation", "ACL" => "winworkstation/wingeneric"), "component" => array( "CLASS" => "COMPONENTTABS", "TABNAME" => "componentGeneric", "TABCLASS"=> "componenttabs", "ACLC" => "component", "ACL" => "component/componentGeneric")); if($this->opsi != NULL){ $tabs["opsi_client"] = array( "CLASS" => "OPSITABS", "TABNAME" => "opsiGeneric" , "TABCLASS"=> "opsi_tabs", "ACLC" => "opsi" , "ACL" => "opsi/opsiGeneric"); } return($tabs); } /*! \brief Sets FAIstate to "install" for "New Devices". This function is some kind of "Post handler" for activated systems, it is called directly after the object (workstabs,servtabs) gets saved. @param String $dn The dn of the newly activated object. @return Boolean TRUE if activated else FALSE */ function activate_new_device($dn) { $ldap = $this->config->get_ldap_link(); $ldap->cd($this->config->current['BASE']); $ldap->cat($dn); if($ldap->count()){ $attrs = $ldap->fetch(); $type = $this->get_system_type($attrs); if(!in_array($type,array("workstation","server"))) { $ocs = $attrs['objectClass']; unset($ocs['count']); $new_attrs = array(); if(!in_array("FAIobject",$ocs)){ $ocs[] = "FAIobject"; $new_attrs['objectClass'] = $ocs; } $new_attrs['FAIstate'] = "install"; $ldap->cd($dn); $ldap->modify($new_attrs); if (!$ldap->success()){ msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, "activate_new_device($dn)")); }else{ return(TRUE); } } } return(FALSE); } /* !! Incoming dummy acls, required to defined acls for incoming objects */ static function plInfo() { return (array( "plShortName" => _("Incoming objects"), "plDescription" => _("Incoming objects"), "plSelfModify" => FALSE, "plDepends" => array(), "plPriority" => 99, "plSection" => array("administration"), "plCategory" => array("incoming" => array( "description" => _("Incoming"), "objectClass" => "")), "plProvidedAcls"=> array() )); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>