config= $config; $this->ui= $ui; /* Creat dialog object */ $this->DivListSystem = new divListSystem($this->config,$this); } function execute() { /* 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); } } /* 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; } /* 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']; } /* 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))); } /******************** 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))); } /* 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= 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(); } } /* 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"; if ($this->dn != "new"){ $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())){ return($str); } /* Display dialog with system list */ $this->DivListSystem->parent = $this; $this->DivListSystem->execute(); /* 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()); } /* 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" => "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($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(); } /* Check values */ function check() { } /* Save to LDAP */ function save() { } function adapt_from_template($dn) { } function password_change_needed() { } function reload() { /* some var init */ $ui = get_userinfo(); $res = array(); $this->terminals = array(); $userregex = ""; /* Set base for all searches */ $base= $this->DivListSystem->selectedBase; /* Prepare samba class name */ $samba =""; if ($this->DivListSystem->ShowWinWorkstations){ if ($this->config->current['SAMBAVERSION'] == "3"){ $samba= "sambaSamAccount"; } else { $samba= "sambaAccount"; } } /* 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.")"; } /* 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)); } } } } /* 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)); /* Get all gotoTerminal's */ 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 ("/,ou=incoming,/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'])){ $add= "- "._("New Device"); } } /* Detect type of object and create an entry for $this->terminals */ $terminal = array(); if (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"])){ $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; } } $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); } function remove_lock() { if (isset($this->systab->dn)){ del_lock ($this->systab->dn); } } function get_system_type($classes) { $type= ""; if (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)){ $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); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>