diff --git a/plugins/admin/systems/class_systemManagement.inc b/plugins/admin/systems/class_systemManagement.inc
index 6b59c1d7afd8d434b2f896ea8e5257936ef9df83..ac36a2034057729f02f3d917f9962884c62053dd 100644 (file)
class systems extends plugin
{
/* Definitions */
- var $plHeadline= "Systems";
- var $plDescription= "This does something";
- var $departments=array();
+ 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)
{
$this->config= $config;
$this->ui= $ui;
- /* Get global filter config */
- if (!is_global("terminalfilter")){
- $base = get_base_from_people($ui->dn);
- $terminalfilter= array("workstations" => "checked",
- "thins" => "checked",
- "winstations" => "checked",
- "servers" => "checked",
- "printers" => "checked",
- "phones" => "checked",
- "netdev" => "checked",
- "user" => "*",
- "regex" => "*");
- register_global("terminalfilter", $terminalfilter);
- }
- if(!isset($_SESSION['CurrentMainBase'])){
- $ui = get_userinfo();
- $_SESSION['CurrentMainBase'] = get_base_from_people($ui->dn);
- }
+ /* Creat dialog object */
+ $this->DivListSystem = new divListSystem($this->config,$this);
}
function execute()
/* Call parent execute */
plugin::execute();
- $_SESSION['LOCK_VARS_TO_USE'] = array("/^user_edit_/i","/^user_del_/","/^act/","/^id/");
-
- /********************
- Filter handling, check posted filter options and store them in our Session obejct
- ********************/
-
- /* Save posted filter data */
- $terminalfilter= get_global("terminalfilter");
- if(isset($_POST['SystemHeadpagePosted'])){
- foreach( array("user", "regex") as $type){
- if (isset($_POST[$type])){
- $terminalfilter[$type]= $_POST[$type];
- }
- }
- }
-
- if(isset($_POST['CurrentMainBase'])){
- $_SESSION['CurrentMainBase'] = $_POST['CurrentMainBase'];
- }
-
- /* Check if filter checkboxes are selected */
- if (isset($_POST['SystemHeadpagePosted'])){
- foreach( array("workstations", "thins", "winstations", "printers", "phones", "servers", "netdev") as $type){
- if (isset($_POST[$type])) {
- $terminalfilter[$type]= "checked";
- } else {
- $terminalfilter[$type]= "";
- }
- }
- }
-
- /* Check for search post */
- if (isset($_GET['search'])){
- $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*";
- if ($s == "**"){
- $s= "*";
- }
- $terminalfilter['regex']= $s;
- }
-
+ $_SESSION['LOCK_VARS_TO_USE'] = array("/^system_edit_/i","/^system_del_/","/^act/","/^id/");
/********************
Check for functional posts, edit|delete|add|... system devices
$base_back = ""; // The Link for Backbutton
$smarty = get_smarty();
- /* check if base was changed */
- if(isset($_GET['act'])&&($_GET['act']=="dep_open")){
- $s_action="open";
- $s_entry = base64_decode($_GET['dep_id']);
- $_SESSION['CurrentMainBase']= $this->config->departments[trim($s_entry)];
- $this->reload();
- }
-
/* Test Posts */
foreach($_POST as $key => $val){
// Post for delete
- if(preg_match("/user_del.*/",$key)){
+ if(preg_match("/system_del.*/",$key)){
$s_action = "del";
- $s_entry = preg_replace("/user_".$s_action."_/i","",$key);
+ $s_entry = preg_replace("/system_del_/i","",$key);
// Post for edit
- }elseif(preg_match("/user_edit_.*/",$key)){
+ }elseif(preg_match("/system_edit_.*/",$key)){
$s_action="edit";
- $s_entry = preg_replace("/user_".$s_action."_/i","",$key);
+ $s_entry = preg_replace("/system_edit_/i","",$key);
// Post for new
- }elseif(preg_match("/dep_back.*/i",$key)){
- $s_action="back";
- }elseif(preg_match("/user_new.*/",$key)){
+ }elseif(preg_match("/system_new.*/",$key)){
$s_action="new";
- }elseif(preg_match("/dep_home.*/i",$key)){
- $s_action="home";
- }elseif(preg_match("/user_tplnew.*/i",$key)){
+ }elseif(preg_match("/system_tplnew.*/i",$key)){
$s_action="new_tpl";
- }elseif(preg_match("/user_setpwd_.*/i",$key)){
+ }elseif(preg_match("/system_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";
+ $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);
}
}
- /* 09.02.2006 : New incoming handling ; hickert
+ /* 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;
}
$s_entry = $_GET['id'];
}
- /* Department changed? */
- if(isset($_POST['CurrentMainBase']) && $_POST['CurrentMainBase']){
- $_SESSION['CurrentMainBase']= $_POST['CurrentMainBase'];
+ /* Check for exeeded sizelimit */
+ if (($message= check_sizelimit()) != ""){
+ return($message);
}
- /* Homebutton is posted */
- if($s_action=="home"){
- $_SESSION['CurrentMainBase']=(preg_replace("/^[^,]+,/","",$this->ui->dn));
- $_SESSION['CurrentMainBase']=(preg_replace("/^[^,]+,/","",$_SESSION['CurrentMainBase']));
+ /* Try to get informations about what kind of system to create */
+ if ($s_action=="new") {
+ return ($smarty->fetch(get_template_path('chooser.tpl', TRUE)));
}
- /* back to the roots ^^ */
- if($s_action=="root"){
- $_SESSION['CurrentMainBase']=($this->config->current['BASE']);
+
+ /********************
+ 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)));
}
- /* If Backbutton is Posted */
- if($s_action=="back"){
- $base_back = preg_replace("/^[^,]+,/","", $_SESSION['CurrentMainBase']);
- $base_back = convert_department_dn($base_back);
- if(isset($this->config->departments[trim($base_back)])){
- $_SESSION['CurrentMainBase']= $this->config->departments[trim($base_back)];
- }else{
- $_SESSION['CurrentMainBase']= $this->config->departments["/"];
- }
+ /* 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)));
}
- /* Save Termfilter .... */
- register_global("terminalfilter", $terminalfilter);
- $this->reload();
-
- /* 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)));
+ if ($this->dn != "" && isset($_GET['PerformIsoCreation'])){
+
+ $return_button = "<form method='get' action='main.php' target='_parent'>
+ <input type='submit' value='"._("Back")."'>
+ <input type='hidden' name='plug' value='".$_GET['plug']."'/>
+ </form>";
+
+ $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 ' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+ <html>
+ <head>
+ <title></title>
+ <style type="text/css">@import url("themes/default/style.css");</style>
+ <script language="javascript" src="include/focus.js" type="text/javascript"></script>
+ </head>
+ <body style="background: none; margin:4px;" id="body" >
+ <pre>';
+
+ /* 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 '<script language="javascript" type="text/javascript">scrollDown2();</script>' ;
+ flush();
+ }
+ }
+
+ /* Get error string && close streams */
+ $buffer= stream_get_contents($pipes[2]);
+
+ fclose($pipes[1]);
+ fclose($pipes[2]);
+ echo "</pre>";
+
+ /* Check return code */
+ $ret= proc_close($process);
+ if ($ret != 0){
+ echo "<h1 style='color:red'>"._("Creating the image failed. Please see the report below.")."</h1>";
+ echo "<pre style='color:red'>$buffer</pre>";
+ }
+
+
+
+ echo $return_button."<br>";
+
+ } else {
+ $tmp= "<h1 style='color:red'>".sprintf(_("Command '%s', specified for ISO creation doesn't seem to exist."), $command)."</h1>";
+ echo $tmp;
+ }
+
+ /* Scroll down completly */
+ echo '<script language="javascript" type="text/javascript">scrollDown2();</script>' ;
+ echo '</body></html>';
+ flush();
+ exit;
}
+
/********************
- Create new system ...
+ Create new system ...
********************/
/* Create new default terminal
- *
- * 09.02.2006 ; New incoming handling ; hickert
* Or create specified object of selected system type, from given incoming object
*/
if (isset($_POST['create_system'])||$s_action=="newsystem"||$s_action == "SelectedSystemType") {
*/
if($s_action == "SelectedSystemType") {
$sw = $s_entry;
- $dn_backup = $this->dn;
}else{
if(isset($_POST['system'])){
$sw = $_POST['system'];
}else{
$sw = $s_entry;
}
+ $this->dn= "new";
}
-
- $this->dn= "new";
- $this->acl= array(":all");
-
- 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['CurrentMainBase'];
- break;
-
- 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['workservice']->cn= "default";
- $this->systab->by_object['workgeneric']->base = $_SESSION['CurrentMainBase'];
- 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['CurrentMainBase'];
- 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['CurrentMainBase'];
- 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['CurrentMainBase'];
- 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['CurrentMainBase'];
- break;
- }
-
- /* 09.02.2006 ; New incoming handling ; hickert.
- * We must create a NEW object of given system type (Posted from SelectDeviceType).
- * But we have to use the same attributes as used in incoming object, thats
- * what we do here.
- */
- if($s_action == "SelectedSystemType"){
-
- /* Store some informations, to be able to add this object to
- * To specified objectgroup and delete incoming object
- */
- $_SESSION['SelectedSystemType']['dn'] = $this->dn;
- $_SESSION['SelectedSystemType']['server'] = $s_entry;
- $_SESSION['SelectedSystemType']['ogroup'] = $_POST['ObjectGroup'];
-
- /* restore dn */
- $this->dn = $dn_backup;
-
- /* Get properties from incoming object */
- $ldap = $this->config->get_ldap_link();
- $ldap->cd($this->dn);
- $ldap->cat($this->dn);
- $res = $ldap->fetch();
-
- /* Unset not needed attributes */
- unset($res['dn']);
- unset($res['objectClass']);
-
- /* Walk through all tabs and set attributes if available */
- foreach($this->systab->by_object as $name => $value){
- foreach($this->systab->by_object[$name]->attributes as $atr){
- if((isset($value))&&(isset($res[$atr]))){
- $this->systab->by_object[$name]->$atr = $res[$atr][0];
- }
- }
+ $tabs = array(
+ "terminal" => array("CLASS"=>"TERMTABS", "TABNAME"=>"termgeneric", "TABCLASS" =>"termtabs", "ACL"=> "terminal"),
+ "workstation" => array("CLASS"=>"WORKTABS", "TABNAME"=>"workgeneric", "TABCLASS" =>"worktabs", "ACL"=> "workstation"),
+ "server" => array("CLASS"=>"SERVTABS", "TABNAME"=>"servgeneric", "TABCLASS" =>"servtabs", "ACL"=> "server"),
+ "printer" => array("CLASS"=>"PRINTTABS", "TABNAME"=>"printgeneric", "TABCLASS" =>"printtabs", "ACL"=> "printer"),
+ "phone" => array("CLASS"=>"PHONETABS", "TABNAME"=>"phonegeneric", "TABCLASS" =>"phonetabs", "ACL"=> "phone"),
+ "component" => array("CLASS"=>"COMPONENTTABS","TABNAME"=>"componentgeneric","TABCLASS" =>"componenttabs", "ACL"=> "component"));
+
+ if(isset($tabs[$sw])){
+ $class = $tabs[$sw]["CLASS"];
+ $tabname = $tabs[$sw]["TABNAME"];
+ $tabclass = $tabs[$sw]["TABCLASS"];
+ $acl_cat = $tabs[$sw]["ACL"];
+
+ /* Load permissions for selected 'dn' and check if
+ we're allowed to remove this 'dn' */
+ $ui = get_userinfo();
+ $tabacl = $ui->get_permissions($this->DivListSystem->selectedBase,$acl_cat."/".$tabname);
+ if(preg_match("/c/",$tabacl)){
+ $this->systab= new $tabclass($this->config, $this->config->data['TABS'][$class], $this->dn,$sw);
+ $this->systab->set_acl_base($this->DivListSystem->selectedBase);
+ $this->systab->by_object[$tabname]->base = $this->DivListSystem->selectedBase;
+ $this->systab->base = $this->DivListSystem->selectedBase;
+ }else{
+ print_red(_("You are not allowed to create a new object of this type."));
}
}
-
- /* set base ... of current divlist position */
- $this->systab->base = $_SESSION['CurrentMainBase'];
}
-
/********************
- Edit system ...
+ Edit system ...
********************/
/* User wants to edit data? */
-// if ($s_action == "edit"){
if (($s_action == "edit") && (!isset($this->systab->config))){
$this->dn= $this->terminals[$s_entry]['dn'];
return(gen_locked_message ($user, $this->dn));
}
- /* Set up the users ACL's for this 'dn' */
- $acl= get_permissions ($this->dn, $this->ui->subtreeACL);
-
/* Find out more about the object type */
$ldap= $this->config->get_ldap_link();
- $ldap->cat($this->dn);
+ $ldap->cat($this->dn, array('objectClass'));
$attrs= $ldap->fetch();
$type= $this->get_system_type($attrs['objectClass']);
/* Lock the current entry, so everyone will get the
above dialog */
-
- switch ($type){
- case "NewDevice" :
- $this->systab = new SelectDeviceType($this->config,$this->dn) ;
- break;
- case "terminal":
- /* Register systab to trigger edit dialog */
- $this->systab= new termtabs($this->config,
- $this->config->data['TABS']['TERMTABS'], $this->dn);
- $this->systab->set_acl($acl);
+ $tabs = array(
+ "terminal" => array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "terminal"),
+ "workstation" => array("CLASS"=>"WORKTABS", "TABCLASS" =>"worktabs", "ACL"=> "workstation"),
+ "server" => array("CLASS"=>"SERVTABS", "TABCLASS" =>"servtabs", "ACL"=> "server"),
+ "printer" => array("CLASS"=>"PRINTTABS", "TABCLASS" =>"printtabs", "ACL"=> "printer"),
+ "phone" => array("CLASS"=>"PHONETABS", "TABCLASS" =>"phonetabs", "ACL"=> "phone"),
+ "winstation" => array("CLASS"=>"WINTABS", "TABCLASS" =>"wintabs", "ACL"=> "winworkstation"),
+ "component" => array("CLASS"=>"COMPONENTTABS","TABCLASS" =>"componenttabs", "ACL"=> "component"));
+
+
+ if($type == "NewDevice"){
+ $this->systab = new SelectDeviceType($this->config,$this->dn) ;
+ }elseif(isset($tabs[$type])){
+
+ $class = $tabs[$type]["CLASS"];
+ $acl_cat = $tabs[$type]["ACL"];
+ $tabclass = $tabs[$type]["TABCLASS"];
+
+ $this->systab= new $tabclass($this->config, $this->config->data['TABS'][$class], $this->dn,$acl_cat);
+ $this->systab->set_acl_base($this->dn);
$_SESSION['objectinfo']= $this->dn;
add_lock ($this->dn, $this->ui->dn);
- break;
-
- case "server":
-
- /* Register systab to trigger edit dialog */
- $this->systab= new servtabs($this->config,$this->config->data['TABS']['SERVTABS'], $this->dn);
- $this->systab->set_acl($acl);
- $_SESSION['objectinfo']= $this->dn;
- add_lock ($this->dn, $this->ui->dn);
- break;
-
- case "workstation":
- /* Register systab to trigger edit dialog */
- $this->systab= new worktabs($this->config,
- $this->config->data['TABS']['WORKTABS'], $this->dn);
- $this->systab->set_acl($acl);
- $_SESSION['objectinfo']= $this->dn;
- add_lock ($this->dn, $this->ui->dn);
- break;
-
- case "printer":
- /* Register systab to trigger edit dialog */
- $this->systab= new printtabs($this->config,
- $this->config->data['TABS']['PRINTTABS'], $this->dn);
- $this->systab->set_acl($acl);
- $_SESSION['objectinfo']= $this->dn;
- add_lock ($this->dn, $this->ui->dn);
- break;
-
- case "phone":
- /* Register systab to trigger edit dialog */
- $this->systab= new phonetabs($this->config,
- $this->config->data['TABS']['PHONETABS'], $this->dn);
- $this->systab->set_acl($acl);
- $_SESSION['objectinfo']= $this->dn;
- add_lock ($this->dn, $this->ui->dn);
- break;
-
- case "component":
- /* Register systab to trigger edit dialog */
- $this->systab= new componenttabs($this->config,
- $this->config->data['TABS']['COMPONENTTABS'], $this->dn);
- $this->systab->set_acl($acl);
- $_SESSION['objectinfo']= $this->dn;
- add_lock ($this->dn, $this->ui->dn);
- break;
-
- case "winstation":
- /* Register systab to trigger edit dialog */
- $this->systab= new wintabs($this->config,
- $this->config->data['TABS']['WINTABS'], $this->dn);
- $this->systab->set_acl($acl);
- $_SESSION['objectinfo']= $this->dn;
- add_lock ($this->dn, $this->ui->dn);
- break;
-
-
- default:
+ }else{
print_red (_("You can't edit this object type yet!"));
del_lock($this->dn);
- break;
}
}
-
+
/********************
- Change password ...
+ Change password ...
********************/
/* Set terminals root password */
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)));
+ $tabs = array(
+ "terminal" => array("CLASS"=>"TERMTABS", "TABNAME"=>"termgeneric", "TABCLASS" =>"termtabs", "ACL"=> "terminal"),
+ "workstation" => array("CLASS"=>"WORKTABS", "TABNAME"=>"workgeneric", "TABCLASS" =>"worktabs", "ACL"=> "workstation"));
+
+ $type = $this->get_system_type($this->terminals[$s_entry]['objectClass']);
+ $class = $tabs[$type]["CLASS"];
+ $tabname = $tabs[$type]["TABNAME"];
+ $acl_cat = $tabs[$type]["ACL"];
+ $tabclass = $tabs[$type]["TABCLASS"];
+ $ui = get_userinfo();
+ $tabacl = $ui->get_permissions($this->DivListSystem->selectedBase,$acl_cat."/".$tabname,"gotoRootPasswd");
+ if(preg_match("/w/",$tabacl)){
+ $this->dn= $this->terminals[$s_entry]['dn'];
+ $_SESSION['objectinfo']= $this->dn;
+ return ($smarty->fetch(get_template_path('password.tpl', TRUE)));
+ }else{
+ print_red(_("You are not allowed to change the password for this object."));
+ }
}
/********************
- Password cahnge finish, but check if entered data is ok
+ Password change finish, but check if entered data is ok
********************/
/* Correctly specified? */
$_POST['new_password'] == $_POST['repeated_password']){
/* Check if user is allowed to set password */
- $acl= get_permissions ($this->dn, $this->ui->subtreeACL);
- $acl= get_module_permission($acl, "terminal", $this->dn);
- if (chkacl($acl, "password") != ""){
- print_red (_("You are not allowed to set this systems password!"));
- } else {
- $ldap= $this->config->get_ldap_link();
- $ldap->cd($this->dn);
+ $tabs = array(
+ "terminal" => array("CLASS"=>"TERMTABS", "TABNAME"=>"termgeneric", "TABCLASS" =>"termtabs", "ACL"=> "terminal"),
+ "workstation" => array("CLASS"=>"WORKTABS", "TABNAME"=>"workgeneric", "TABCLASS" =>"worktabs", "ACL"=> "workstation"));
+
+ /* Detect object type */
+ $type = "";
+ foreach($this->terminals as $terminal){
+ if($terminal['dn'] == $this->dn){
+ $type = $this->get_system_type($terminal['objectClass']);
+ break;
+ }
+ }
- $attrs= array();
- if ($_POST['new_password'] == ""){
- $attrs['gotoRootPasswd']= array();
- } else {
- $attrs['gotoRootPasswd']= crypt($_POST['new_password'],
- substr(session_id(),0,2));
+ /* Type detected */
+ if(!empty($type)){
+
+ /* Get infos */
+ $class = $tabs[$type]["CLASS"];
+ $tabname = $tabs[$type]["TABNAME"];
+ $acl_cat = $tabs[$type]["ACL"];
+ $tabclass = $tabs[$type]["TABCLASS"];
+
+ /* Get acls */
+ $ui = get_userinfo();
+ $tabacl = $ui->get_permissions($this->DivListSystem->selectedBase,$acl_cat."/".$tabname,"gotoRootPasswd");
+
+ /* Check acls */
+ if(preg_match("/w/",$tabacl)){
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->dn);
+
+ $attrs= array();
+ if ($_POST['new_password'] == ""){
+ $attrs['gotoRootPasswd']= array();
+ } else {
+ $attrs['gotoRootPasswd']= crypt($_POST['new_password'],substr(session_id(),0,2));
+ }
+ $ldap->modify($attrs);
+ gosa_log ("Password for '".$this->dn."' has been changed");
+ }else{
+ print_red(_("You are not allowed to change the password for this object."));
}
- $ldap->modify($attrs);
- gosa_log ("Password for '".$this->dn."' has been changed");
+ }else{
+ print_red(_("Can't detect object to change password."));
}
unset($_SESSION['objectinfo']);
}
if ($s_action=="del"){
/* Get 'dn' from posted termlinst */
- $this->dn= $this->terminals[$s_entry]['dn'];
+ $this->dn = $this->terminals[$s_entry]['dn'];
+ $attrs = $this->terminals[$s_entry];
+
+ $type= $this->get_system_type($attrs['objectClass']);
+ $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"));
+
+
+ /* get object type */
+ $tabtype = "termtabs";
+ $tabobj = "TERMTABS";
+ $tabacl = "";
+ if(isset($tabs[$type])){
+ $tabtype = $tabs[$type]['TABCLASS'];
+ $tabobj = $tabs[$type]['CLASS'];
+ $tabacl = $ui->get_permissions($this->dn,$tabs[$type]['ACL']);
+ }
/* Load permissions for selected 'dn' and check if
we're allowed to remove this 'dn' */
- $acl= get_permissions ($this->dn, $this->ui->subtreeACL);
- $this->acl= get_module_permission($acl, "terminal", $this->dn);
- if (chkacl($this->acl, "delete") == ""){
+ if(preg_match("/d/",$tabacl)){
/* Check locking, save current plugin in 'back_plugin', so
the dialog knows where to return. */
/* Lock the current entry, so nobody will edit it during deletion */
add_lock ($this->dn, $this->ui->dn);
- $smarty->assign("warning", sprintf(_("You're about to delete all information about the component at '%s'."), LDAP::fix($this->dn)));
+ $smarty->assign("warning", sprintf(_("You're about to delete all information about the component at '%s'."), @LDAP::fix($this->dn)));
return($smarty->fetch(get_template_path('remove.tpl', TRUE)));
} else {
}
}
-
+
/********************
Delete system, confirmed
********************/
/* Confirmation for deletion has been passed. Terminal should be deleted. */
if (isset($_POST['delete_terminal_confirm'])){
- /* Some nice guy may send this as POST, so we've to check
- for the permissions again. */
- if (chkacl($this->acl, "delete") == ""){
-
- /* Find out more about the object type */
- $ldap= $this->config->get_ldap_link();
- $ldap->cat($this->dn);
- $attrs= $ldap->fetch();
- $type= $this->get_system_type($attrs['objectClass']);
-
- switch ($type){
- case "terminal":
- $tabtype = "termtabs";
- $tabobj = "TERMTABS";
- break;
-
- case "workstation":
- $tabtype = "worktabs";
- $tabobj = "WORKTABS";
- break;
-
- case "phone":
- $tabtype = "phonetabs";
- $tabobj = "PHONETABS";
- break;
+ /* Find out more about the object type */
+ $ldap= $this->config->get_ldap_link();
+ $ldap->cat($this->dn, array('objectClass'));
+ $attrs= $ldap->fetch();
+ $type= $this->get_system_type($attrs['objectClass']);
- case "server":
- $tabtype = "servtabs";
- $tabobj = "SERVTABS";
- break;
+ $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"));
+
+ /* get object type */
+ $tabtype = "termtabs";
+ $tabobj = "TERMTABS";
+ $tabacl = "";
+ if(isset($tabs[$type])){
+ $tabtype = $tabs[$type]['TABCLASS'];
+ $tabobj = $tabs[$type]['CLASS'];
+ $tabacl = $ui->get_permissions($this->dn,$tabs[$type]['ACL']);
+ }
- default:
- $tabtype = "termtabs";
- $tabobj = "TERMTABS";
- break;
- }
+ /* Check if we are allowed to remove this object */
+ if(preg_match("/d/",$tabacl)){
/* Delete request is permitted, perform LDAP action */
if($tabtype=="phonetabs"){
- $this->systab= new $tabtype($this->config,
- $this->config->data['TABS'][$tabobj], $this->dn);
- $this->systab->set_acl(array($this->acl));
+ $this->systab= new $tabtype($this->config, $this->config->data['TABS'][$tabobj], $this->dn,$type);
+ $this->systab->set_acl_base($this->dn);
$this->systab->by_object['phonegeneric']->remove_from_parent ();
}else{
- $this->systab= new $tabtype($this->config,
- $this->config->data['TABS'][$tabobj], $this->dn);
- $this->systab->set_acl(array($this->acl));
+ $this->systab= new $tabtype($this->config,$this->config->data['TABS'][$tabobj], $this->dn,$type);
+ $this->systab->set_acl_base($this->dn);
$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;
/* Terminal list has changed, reload it. */
- $this->reload ();
} else {
/* Normally this shouldn't be reached, send some extra
/* Finish user edit is triggered by the tabulator dialog, so
the user wants to save edited data. Check and save at this
point. */
- if ((isset($_POST['edit_finish'])) && (isset($this->systab->config))){
+ if ((isset($_POST['edit_finish']) || isset($_POST['edit_apply'])) && (isset($this->systab->config))){
/* Check tabs, will feed message array */
$message= $this->systab->check();
if (count($message) == 0){
/* Save terminal data to ldap */
- gosa_log ("System object'".$this->dn."' has been saved");
+ if(isset($_SESSION['SelectedSystemType']['ogroup'])){
+ foreach (array("workservice", "termservice") as $cls){
+ if (isset($this->systab->by_object[$cls])){
+ $this->systab->by_object[$cls]->gotoXMouseport= "";
+ $this->systab->by_object[$cls]->gotoXMouseType= "";
+ $this->systab->by_object[$cls]->gotoXResolution= "";
+ $this->systab->by_object[$cls]->gotoXColordepth= "";
+ }
+ }
+ }
$this->systab->save();
+ gosa_log ("System object'".$this->dn."' has been saved");
- /* Terminal has been saved successfully, remove lock from
- LDAP. */
-
- /* 09.02.2006 Hickert
- * New System incoming behavior; you can select a system type and an ogroup membership.
+ /* Incoming behavior; you can select a system type and an ogroup membership.
* If this object is an Incoming object, $_SESSION['SelectedSystemType'] isset.
* Check if we must add the new object to an object group.
- * !! Don't forget to unset the $_SESSION['SelectedSystemType']... else all edited objects
- * !! will be added to the object group.
*
* If this is done, delete the old incoming entry... it is still there, because this is a new
- * entry and not an edited one.
+ * entry and not an edited one, so we will delete it.
*/
+
if(isset($_SESSION['SelectedSystemType'])){
$SelectedSystemType= $_SESSION['SelectedSystemType'];
unset($_SESSION['SelectedSystemType']);
$og = new ogroup($this->config,$SelectedSystemType['ogroup']);
if($og){
$og->AddDelMembership($this->systab->dn);
+ $og->save();
}
- $og->save();
}
if(!isset($ldap)){
$ldap = $this->config->get_ldap_link();
}
$ldap->cd ($this->dn);
- $ldap->cat($this->dn);
+ $ldap->cat($this->dn, array('dn'));
if(count($ldap->fetch())){
$ldap->cd($this->dn);
$ldap->rmDir($this->dn);
$ldap->cd($this->config->current['BASE']);
}
- if ($this->dn != "new"){
- del_lock ($this->dn);
- }
-
- /* There's no page reload so we have to read new terminals at
- this point. */
- $this->reload ();
- unset ($this->systab);
- $this->systab= NULL;
- unset($_SESSION['objectinfo']);
+ if (!isset($_POST['edit_apply'])){
+ /* Terminal has been saved successfully, remove lock from
+ LDAP. */
+ if ($this->dn != "new"){
+ del_lock ($this->dn);
+ }
+ unset ($this->systab);
+ $this->systab= NULL;
+ unset($_SESSION['objectinfo']);
+ }
} else {
/* Ok. There seem to be errors regarding to the tab data,
show message and continue as usual. */
show_errors($message);
}
-
}
-
/********************
Edit system was canceled
********************/
$this->systab= NULL;
unset($_SESSION['objectinfo']);
- /* 09.02.2006 ; New incoming handling ; hickert
- * remove session object which stores our ogroup selection
- * for the new incoming handling
- */
+ /* Remove ogroup selection, which was set while editing a new incoming entry */
if(isset($_SESSION['SelectedSystemType'])){
unset($_SESSION['SelectedSystemType']);
}
}
-
/********************
- Display edit dialog, or some other
+ Display edit dialog, or some other
********************/
/* Show tab dialog if object is present */
if (isset($this->systab->config)){
$display= $this->systab->execute();
-
/* Don't show buttons if tab dialog requests this */
if ((isset($this->systab->by_object))&&(!$this->systab->by_object[$this->systab->current]->dialog)){
$display.= "<p style=\"text-align:right\">\n";
- $display.= "<input type=\"submit\" name=\"edit_finish\" value=\""._("Save")."\">\n";
+ $display.= "<input type=\"submit\" name=\"edit_finish\" style=\"width:80px\" value=\""._("Ok")."\">\n";
$display.= " \n";
+ if ($this->dn != "new"){
+ $display.= "<input type=submit name=\"edit_apply\" value=\""._("Apply")."\">\n";
+ $display.= " \n";
+ }
$display.= "<input type=\"submit\" name=\"edit_cancel\" value=\""._("Cancel")."\">\n";
$display.= "</p>";
}
return ($display);
}
-
- /********************
- Entry handling finished (edit delete ... )
- Now the list generation is the next part of this script.
- ********************/
-
- /* Prepare departments,
- which are shown in the listbox on top of the listbox
- */
- $options= "";
- foreach ($this->config->idepartments as $key => $value){
- if ($_SESSION['CurrentMainBase'] == $key){
- $options.= "<option selected='selected' value='$key'>$value</option>";
- } else {
- $options.= "<option value='$key'>$value</option>";
- }
+ /* 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();
- /* NEW LIST MANAGMENT */
-
- /* Create list header
- */
- $listhead = "<div style='background:#F0F0F9;padding:5px;'>".
- " <input class='center' type='image' src='images/list_root.png' align='middle'
- title='"._("Go to root department")."' name='dep_root' alt='"._("Root")."'> ".
- " <input class='center' type='image' align='middle' src='images/list_back.png'
- title='"._("Go up one department")."' alt='"._("Up")."' name='dep_back'> ".
- " <input class='center' type='image' align='middle' src='images/list_home.png'
- title='"._("Go to users department")."' alt='"._("Home")."' name='dep_home'> ".
- " <input class='center' type='image' src='images/list_reload.png' align='middle' title='"._("Reload list")."' name='submit_department' alt='"._("Submit")."'> ".
- " <img class='center' src='images/list_seperator.png' align='middle' alt='' height='16' width='1'> ".
- " <input class='center' type='image' align='middle' src='images/select_new_terminal.png'
- name='newsystem_terminal' alt='"._("New Terminal template")."' title='"._("New Terminal")."'>".
- " <input class='center' type='image' align='middle' src='images/select_new_workstation.png'
- name='newsystem_workstation' alt='"._("New Workstation template")."' title='"._("New Workstation")."'>".
- " <input class='center' type='image' align='middle' src='images/select_new_server.png' name='newsystem_server' alt='"._("New Server")."'
- title='"._("New Server")."'>".
- " <input class='center' type='image' align='middle' src='images/select_new_printer.png' name='newsystem_printer' alt='"._("New Printer")."'
- title='"._("New Printer")."'>".
- " <input class='center' type='image' align='middle' src='images/select_new_phone.png' name='newsystem_phone' alt='"._("New Phone")."'
- title='"._("New Phone")."'>".
- " <input class='center' type='image' align='middle' src='images/select_new_component.png' name='newsystem_component' alt='"._("New Component")."'
- title='"._("New Component")."'>".
- " <img class='center' src='images/list_seperator.png' align='middle' alt='' height='16' width='1'> "._("Base")." ".
- " <select name='CurrentMainBase' onChange='mainform.submit()' class='center'>$options</select>".
- " <input class='center' type='image' src='images/list_submit.png' align='middle'
- title='"._("Submit department")."' name='submit_department' alt='". _("Submit")."'> ".
- "</div>";
-
-
- /* Edit delete link for system types
- */
- $action= "<input class='center' type='image' src='images/edit.png' alt='"._("edit")."' name='user_edit_%KEY%' title='"._("Edit system")."'>";
- $action.= "<input class='center' type='image' src='images/edittrash.png' alt='"._("delete")."' name='user_del_%KEY%' title='"._("Delete system")."'>";
- $linkopen = "<a href='?plug=".$_GET['plug']."&act=dep_open&dep_id=%s'>%s</a>";
-
- /* Create new divlist, and add the header elements
- */
- $divlist = new divlist("systemstab");
- $divlist->SetSummary(_("This table displays all systems, in the selected tree."));
- $divlist->SetEntriesPerPage(0);
- $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;'" )));
-
-
- /* Add departments, to be able to switch into them
- */
- foreach($this->departments as $key=> $val){
-
- /* Add missing entries ... */
- if(!isset($this->config->departments[trim($key)])){
- $this->config->departments[trim($key)]="";
- }
-
- /* check if this department contains sub-departments
- Display different image in this case
- */
- $non_empty="";
- $keys= str_replace("/","\/",$key);
- foreach($this->config->departments as $keyd=>$vald ){
- if(preg_match("/".$keys."\/.*/",$keyd)){
- $non_empty="full";
- }
- }
-
- /* Add to divlist */
- $field1 = array("string" => "<img src='images/".$non_empty."folder.png' alt='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));
- }
-
- // Iamge spacer
- $empty =" ";
-
- // User and Template Images
- $editlink = "<a href='?plug=".$_GET['plug']."&id=%s&act=edit_entry'>%s</a>";
-
- // Pictures for Extensions
- $img1 = "<img class='center' src='images/printer.png' alt='C' title='"._("Cups Server") ."'>";
- $img2 = "<img class='center' src='images/scanner.png' alt='L' title='"._("Log Db") ."'>";
- $img3 = "<img class='center' src='images/select_terminal.png' alt='L' title='"._("Syslog Server") ."'>";
- $img4 = "<img class='center' src='images/mailto.png' alt='M' title='"._("Mail Server") ."'>";
- $img5 = "<img class='center' src='images/select_phone.png' alt='I' title='"._("Imap Server") ."'>";
- $img6 = "<img class='center' src='images/fax_small.png' alt='F' title='"._("Nfs Server") ."'>";
- $img7 = "<img class='center' src='images/select_winstation.png' alt='K' title='"._("Kerberos Server") ."'>";
- $img8 = "<img class='center' src='images/select_phone.png' alt='A' title='"._("Asterisk Server") ."'>";
- $img9 = "<img class='center' src='images/fax_small.png' alt='F' title='"._("Fax Server") ."'>";
- $img10 = "<img class='center' src='images/save.png' alt='L' title='"._("Ldap Server") ."'>";
-
- // Test Every Entry and generate divlist Array
- foreach($this->terminals as $key => $val){
- // Specify Pics for Extensions
- if(in_array("goLdapServer" ,$val['objectClass'])){
-
- }
-
- /* Generate picture list, which is currently disabled */
- 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 = "<input class='center' type='image' src='images/certs.png' alt='"._("Password")."' name='user_setpwd_%KEY%' title='"._("Set root password")."'>";
- }else{
- $action2 = "";
- }
-
- if(isset($val['message'])){
- $display.= " (".$val['message']." '".$this->config->idepartments[$_SESSION['CurrentMainBase']]."' )";
- }
-
- $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='".@LDAP::fix($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));
+ /* 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());
+ }
- /* Show main page */
- $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'));
- foreach( array( "user", "regex", "workstations", "thins", "servers",
- "winstations", "printers", "phones", "netdev") as $type){
-
- $smarty->assign("$type", $terminalfilter[$type]);
- }
- $smarty->assign("deplist", $this->config->idepartments);
- $smarty->assign("CurrentMainBase", $_SESSION['CurrentMainBase']);
- /* Extend if we are not using javascript */
- $smarty->assign("apply", apply_filter());
- $smarty->assign("alphabet", generate_alphabet());
- $smarty->assign("hint", print_sizelimit_warning());
+ /* Return departments, that will be included within snapshot detection */
+ function get_used_snapshot_bases()
+ {
+ $tmp = array();
- return($smarty->fetch(get_template_path('headpage.tpl', TRUE)));
- }
+ /* 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,"
+ );
- 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")),
- "F" => array("select_phone.png",_("Phone")),
- "S" => array("select_server.png",_("Server")),
- "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")));
+ foreach($tabs as $acl_cat => $dn){
- 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'] ="<img class='center' src='images/".$value[0]."' alt='".$key."' title='".$value['1']."'>";
- $tmp['class']=$key;
- return $tmp;
+ $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 */
/* Save data to object */
function save_object()
{
+ $this->DivListSystem->save_object();
}
{
}
- 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= $_SESSION['CurrentMainBase'];
+ $base= $this->DivListSystem->selectedBase;
- /* Regex filter? */
- if ($terminalfilter['regex'] != ""){
- $regex= $terminalfilter['regex'];
- } else {
- $regex= "*";
- }
-
- /* Get list of terminals to be shown */
- if ($terminalfilter['thins'] == "checked"){
- $termfilter= "(&(objectClass=goHard)(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= "";
}
- /* User filter? */
- if ($terminalfilter['user'] != "" && $terminalfilter['user'] != "*"){
- $filter.= "(gotoLastUser=".$terminalfilter['user'].")";
+ /* 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.")";
}
- /* Get all gotoTerminal's */
- $this->terminals= array();
-
- //FIXME: All get_list calls are called without GL_SIZELIMIT? All contain sambaDomainName???
- $res= get_list("(|$termfilter)", $this->ui->subtreeACL, "ou=terminals,ou=systems,".$base,
- array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE);
-
- $res= array_merge($res,
- get_list("(|$termfilter)", $this->ui->subtreeACL, "ou=incoming,".$base,
- array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE));
-
- $res= array_merge($res,
- get_list("(|$serverfilter)", $this->ui->subtreeACL, "ou=servers,ou=systems,".$base,
- array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE));
-
- $res= array_merge($res,
- get_list("(|$phonefilter)", $this->ui->subtreeACL, "ou=phones,ou=systems,".$base,
- array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE));
-
- $res= array_merge($res,
- get_list("(|$netfilter)", $this->ui->subtreeACL, "ou=netdevices,ou=systems,".$base,
- array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE));
-
- $res= array_merge($res,
- get_list("(|$printfilter)", $this->ui->subtreeACL, "ou=printers,ou=systems,".$base,
- array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE));
-
- $res= array_merge($res,
- get_list("(|$workfilter)", $this->ui->subtreeACL, "ou=workstations,ou=systems,".$base,
- array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE));
-
- $res= array_merge($res,
- get_list("(|$winfilter)", $this->ui->subtreeACL, "ou=winstations,ou=systems,".$base,
- array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE));
-
-/* 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_list("(&(|(ou=$regex)(description=$regex))(objectClass=gosaDepartment))", $this->ui->subtreeACL,
- $base2, array("ou", "description"), GL_SIZELIMIT | GL_CONVERT);
-
- $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']]= get_sub_department($value['dn'])." - [".$value["description"][0]."]";
- }else{
- $this->departments[$value['dn']]= get_sub_department($value['dn']);//$value["description"][0];
- }
+ /* 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));
+ }
+ }
+ }
}
- /* END NEW LIST MANAGMENT
- */
-
+ /* 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){
- /* 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'])){
+ if (in_array_ics('gotoTerminal', $value['objectClass'])){
$add= "- "._("New terminal");
- }elseif (in_array('gotoWorkstation', $value['objectClass'])){
+ }elseif (in_array_ics('gotoWorkstation', $value['objectClass'])){
$add= "- "._("New workstation");
- }elseif (in_array('GOhard', $value['objectClass'])){
+ }elseif (in_array_ics('GOhard', $value['objectClass'])){
$add= "- "._("New Device");
}
- } else {
- $add= "";
- }
+ }
+ /* Detect type of object and create an entry for $this->terminals */
$terminal = array();
-
- if (in_array ($tmp, $responsible) || $add != ""){
- if (in_array('gotoTerminal', $value["objectClass"])){
+
+ 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";
} else {
$terminal = $value;
$terminal['type'] = "D";
- $terminal['message'] = _("Terminal template for");
+ $terminal['message'] = _("Terminal template for")." '".$dn_name."' ";
$terminal['location'] = array_search($tmp, $this->config->departments);
}
- } elseif (in_array('gotoWorkstation', $value["objectClass"])){
+ }
+ } 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 = $value;
$terminal['type'] = "D";
$terminal['location'] = array_search($tmp, $this->config->departments);
- $terminal['message'] = _("Workstation template for");
+ $terminal['message'] = _("Workstation template for")." '".$dn_name."' ";
}
- } elseif (in_array('gotoPrinter', $value["objectClass"])){
- $terminal = $value;
- $terminal['type'] = "P";
- } elseif (in_array('goServer', $value["objectClass"])){
- $terminal = $value;
- $terminal['type'] = "S";
- } elseif (in_array('goFonHardware', $value["objectClass"])){
- $terminal = $value;
- $terminal['type'] = "F";
- }elseif (in_array("GOhard",$value['objectClass'])){
+ 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('ieee802Device', $value["objectClass"])){
- $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;
}
+ } 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;
}
}
function get_system_type($classes)
{
$type= "";
-
- if (in_array('ieee802Device', $classes)){
+ if (in_array_ics('ieee802Device', $classes)){
$type= "component";
- }else
- if (in_array('gotoTerminal', $classes)){
+ }elseif (in_array_ics('gotoTerminal', $classes)){
$type= "terminal";
- }else
- if (in_array('gotoWorkstation', $classes)){
+ }elseif (in_array_ics('gotoWorkstation', $classes)){
$type= "workstation";
- }else
- if (in_array('gotoPrinter', $classes)){
+ }elseif (in_array_ics('gotoPrinter', $classes)){
$type= "printer";
- }else
- if (in_array('goFonHardware', $classes)){
+ }elseif (in_array_ics('goFonHardware', $classes)){
$type= "phone";
- }else
- if (in_array('goServer', $classes)){
+ }elseif (in_array_ics('goServer', $classes)){
$type= "server";
- }else
- if (in_array('GOhard', $classes)){
+ }elseif (in_array_ics('GOhard', $classes)){
$type= "NewDevice";
- }else
- if (in_array('sambaAccount', $classes) ||
- in_array('sambaSamAccount', $classes)){
+ }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'] ="<img class='center' src='images/".$value[0]."' alt='".$key."' title='".$value['1']."'>";
+ $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);
}