diff --git a/gosa-plugins/systems/admin/systems/class_systemManagement.inc b/gosa-plugins/systems/admin/systems/class_systemManagement.inc
index d08dce0ffd8a9affed7ded4da5655e6d32594c57..e6423173c36b632761505afbc960f606f857ac91 100644 (file)
$this->fai_activated = TRUE;
}
- /* Creat dialog object */
- $this->DivListSystem = new divListSystem($this->config,$this);
-
/* Copy & Paste enabled ?*/
- if ($this->config->get_cfg_value("enablecopypaste") == "true"){
+ if ($this->config->get_cfg_value("copyPaste") == "true"){
$this->CopyPasteHandler = new CopyPasteHandler($this->config);
}
if(class_available("opsi")){
$this->opsi = new opsi($this->config);
}
+
+ /* Creat dialog object */
+ $this->DivListSystem = new divListSystem($this->config,$this);
}
********************/
if ($s_action=="gen_cd"){
$this->dn= $this->terminals[$s_entry]['dn'];
- session::set('objectinfo',$this->dn);
+ set_object_info($this->dn);
return ($smarty->fetch(get_template_path('gencd.tpl', TRUE)));
}
$dsc = array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "w"));
/* Get and check command */
- $command= $this->config->search("workgeneric", "ISOCMD",array('tabs'));
+ $command= $this->config->search("workgeneric", "SYSTEMISOHOOK",array('tabs'));
if (check_command($command)){
@DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Execute");
/********************
- New Device hanlding (Ogroup/System select dialog.)
+ New Device handling (Ogroup/System select dialog.)
********************/
+ /* All objects that have to be activated are listed in
+ $this->system_activation_object[] = "dn";
+
+ If there is an object group selected we simply adopt all
+ settings from these group and then directly save the entry again.
+ If no object group was selected, then we keep the "edit" dialog of
+ the target system opened to allow to edit the objects attributes.
+ */
+
if($s_action == "SelectedSystemType"){
/* Possible destination system types
*/
- $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"));
+ $tabs = $this->get_tab_defs();
/* Remember dialog selection.
*/
$class = $tabs[$selected_system]["CLASS"];
$tabname = $tabs[$selected_system]["TABNAME"];
$tabclass = $tabs[$selected_system]["TABCLASS"];
- $acl_cat = $tabs[$selected_system]["ACL"];
+ $acl_cat = $tabs[$selected_system]["ACLC"];
if(!class_available($tabclass)){
msg_dialog::display(_("Error"), msgPool::class_not_found($tabclass), ERROR_DIALOG);
}else{
- /* Go through all objects that should be activated */
+ /* Go through all objects that should be activated
+ Contains alls object dns that have to be activated ("New Devices" not unknown)
+ */
foreach($this->system_activation_object as $key => $dn){
/* Remove entry from list, to avoid page-reload problems */
$this->systab->by_object[$tabname]->base = $this->DivListSystem->selectedBase;
$this->systab->base = $this->DivListSystem->selectedBase;
+ /* This will be used when the object is saved, to set FAIstate to 'install'
+ and to preset maybe other attributes.
+ */
+ $this->systab->was_activated = TRUE;
+
+ /* Assign some default values for opsi hosts
+ */
+ if($this->systab instanceOf opsi_tabs){
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cat($dn);
+ $source_attrs = $ldap->fetch();
+ foreach(array("macAddress" => "mac" ,"cn" => "hostId","description","description") as $src => $attr){
+ if(isset($source_attrs[$src][0])){
+ $this->systab->by_object['opsiGeneric']->$attr = $source_attrs[$src][0];
+ }
+ }
+ }
if($selected_group != "none"){
/*******
- * Set gotoMode to active if we there was an ogroup selected.
+ * Set gotoMode to active if there was an ogroup selected.
*/
$found = false;
foreach(array("workgeneric"=>"active","servgeneric"=>"active","termgeneric"=>"active") as $tab => $value){
*/
if($selected_group != "none"){
$this->systab->save();
+
+ /* Post handling for activated new devices
+ */
+ $this->activate_new_device($this->systab->dn);
$this->systab = NULL;
if(!isset($ldap)){
}
$this->dn= "new";
- $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"));
-
+ $tabs = $this->get_tab_defs();
+
if(isset($tabs[$sw])){
$class = $tabs[$sw]["CLASS"];
$tabname = $tabs[$sw]["TABNAME"];
$tabclass = $tabs[$sw]["TABCLASS"];
- $acl_cat = $tabs[$sw]["ACL"];
+ $acl_cat = $tabs[$sw]["ACLC"];
/* Load permissions for selected 'dn' and check if
we're allowed to remove this 'dn' */
}
}
-
/********************
System activation
********************/
/* Check locking, save current plugin in 'back_plugin', so
the dialog knows where to return. */
if (($user= get_lock($this->dn)) != ""){
- return(gen_locked_message ($user, $this->dn));
+ return(gen_locked_message ($user, $this->dn,TRUE));
}
/* Find out more about the object type */
/* Lock the current entry, so everyone will get the
above dialog */
- $tabs = array(
- "gosa_opsi_client"=> array("CLASS"=>"OPSITABS", "TABCLASS" =>"opsi_tabs", "ACL"=> "opsi"),
- "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"));
+ $tabs = $this->get_tab_defs();
if($type == "ArpNewDevice"){
if(!class_available("ArpNewDeviceTabs")){
msg_dialog::display(_("Error"), msgPool::class_not_found("ArpNewDevice"), ERROR_DIALOG);
}else{
+ add_lock ($this->dn, $this->ui->dn);
$this->systab = new ArpNewDeviceTabs($this->config,$this->config->data['TABS']['ARPNEWDEVICETABS'],$this->dn);
}
}elseif($type == "NewDevice"){
if(!class_available("SelectDeviceType")){
msg_dialog::display(_("Error"), msgPool::class_not_found("SelectDeviceType"), ERROR_DIALOG);
}else{
+ add_lock ($this->dn, $this->ui->dn);
$this->system_activation_object= array($this->dn);
$this->systab = new SelectDeviceType($this->config,$this->dn) ;
+
+ // see condition -$s_action == "SelectedSystemType"- for further handling
}
}elseif(isset($tabs[$type])){
$class = $tabs[$type]["CLASS"];
- $acl_cat = $tabs[$type]["ACL"];
+ $acl_cat = $tabs[$type]["ACLC"];
$tabclass = $tabs[$type]["TABCLASS"];
if(!class_available($tabclass)){
msg_dialog::display(_("Error"), msgPool::class_not_found($tabclass), ERROR_DIALOG);
}else{
+ add_lock ($this->dn, $this->ui->dn);
$this->systab= new $tabclass($this->config, $this->config->data['TABS'][$class], $this->dn,$acl_cat);
$this->systab->set_acl_base($this->dn);
- session::set('objectinfo',$this->dn);
- add_lock ($this->dn, $this->ui->dn);
+ set_object_info($this->dn);
}
}else{
msg_dialog::display(_("Error"), _("Editing this type of object is not supported yet!"), ERROR_DIALOG);
/* Set terminals root password */
if ($s_action=="change_pw"){
- $tabs = array(
- "ArpNewDevice"=> array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "incoming/systems"),
- "NewDevice" => array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "incoming/systems"),
- "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"));
+ $tabs = $this->get_tab_defs();
$dn = $this->terminals[$s_entry]['dn'];
$type = $this->get_system_type($this->terminals[$s_entry]);
$tabacl = $ui->get_permissions($dn,$acl,"userPassword");
if(preg_match("/w/",$tabacl)){
$this->dn= $this->terminals[$s_entry]['dn'];
- session::set('objectinfo',$this->dn);
+ set_object_info($this->dn);
return ($smarty->fetch(get_template_path('password.tpl', TRUE)));
}else{
msg_dialog::display(_("Permission error"), _("You have no permission to change this password!"), ERROR_DIALOG);
$_POST['new_password'] == $_POST['repeated_password']){
/* Check if user is allowed to set password */
- $tabs = array(
- "terminal" => array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "terminal/termgeneric" ,"PLUG"=>"termgeneric"),
- "workstation" => array("CLASS"=>"WORKTABS", "TABCLASS" =>"worktabs", "ACL"=> "workstation/workgeneric" ,"PLUG"=>"workgeneric"),
- "server" => array("CLASS"=>"SERVTABS", "TABCLASS" =>"servtabs", "ACL"=> "server/servgeneric" ,"PLUG"=>"servgeneric"),
- "component" => array("CLASS"=>"COMPONENTTABS","TABCLASS" =>"componenttabs", "ACL"=> "component/componentGeneric","PLUG"=>"componentGeneric"));
+ $tabs = $this->get_tab_defs();
- /* Detect object type */
$type = "";
foreach($this->terminals as $terminal){
if($terminal['dn'] == $this->dn){
if(!empty($type) && in_array($type,$allow_for)){
/* Get infos */
- $plug = $tabs[$type]["PLUG"];
- $class = $tabs[$type]["CLASS"];
+ $plug = $tabs[$type]["TABNAME"];
$acl = $tabs[$type]["ACL"];
$tabclass = $tabs[$type]["TABCLASS"];
-
+
/* Get acls */
$ui = get_userinfo();
$tabacl = $ui->get_permissions($this->dn,$acl,"userPassword");
}
$ldap->modify($attrs);
if (!$ldap->success()){
- msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class()));
+ msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, $type));
}else{
- if(class_available($plug)){
+ if(class_available($plug)){
$p = new $plug($this->config,$this->dn);
$p->handle_post_events("modify");
}
}else{
msg_dialog::display(_("Error"), _("Cannot determine object to change password!"), ERROR_DIALOG);
}
- session::un_set('objectinfo');
+ set_object_info();
}
/* Delete terminal canceled? */
if (isset($_POST['delete_cancel']) || isset($_POST['password_cancel'])){
$this->remove_lock();
- session::un_set('objectinfo');
+ set_object_info();
}
$this->dns = array();
$ids = $this->list_get_selected_items();
+ /* Handle opsi actions */
+ if($s_action == "trigger_event_DaemonEvent_reinstall"){
+ foreach($ids as $key => $id){
+ if($this->terminals[$id]['type'] == "O"){
+ $obj = $this->terminals[$id];
+ $this->opsi->job_opsi_install_client($obj['cn'][0],$obj['macAddress'][0]);
+ unset($ids[$key]);
+ }
+ }
+ }
+
if(count($ids) && class_available("DaemonEvent")){
$mac= array();
+ /* Collect target mac addresses */
$ldap = $this->config->get_ldap_link();
foreach($ids as $id){
- $ldap->cat ($this->terminals[$id]['dn'], array("macAddress"));
- $attrs= $ldap->fetch();
- if (isset($attrs['macAddress'][0])){
- $mac[]= $attrs['macAddress'][0];
+ $type = $this->get_system_type($this->terminals[$id]);
+ if(!in_array($type,array("terminal","server","workstation","opsi_client","winstation "))) continue;
+ if(isset($this->terminals[$id]['macAddress'][0])){
+ $mac[] = $this->terminals[$id]['macAddress'][0];
+ }else{
+ $ldap->cat ($this->terminals[$id]['dn'], array("macAddress"));
+ $attrs= $ldap->fetch();
+ if (isset($attrs['macAddress'][0])){
+ $mac[]= $attrs['macAddress'][0];
+ }
}
}
$events = DaemonEvent::get_event_types(SYSTEM_EVENT);
}
$ui = get_userinfo();
- $tabs = array(
- "ArpNewDevice"=> array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "incoming/systems"),
- "NewDevice" => array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "incoming/systems"),
- "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"));
-
+ $tabs = $this->get_tab_defs();
if(count($ids)){
$dns_names = array();
foreach($this->dns as $dn){
add_lock ($dn, $this->ui->dn);
- $dns_names[] = @LDAP::fix($dn);
+ $dns_names[] = LDAP::fix($dn);
}
/* Lock the current entry, so nobody will edit it during deletion */
if (isset($_POST['delete_multiple_system_confirm'])){
$ui = get_userinfo();
- $tabs = array(
- "ArpNewDevice"=> array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "incoming/systems"),
- "NewDevice" => array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "incoming/systems"),
- "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"));
-
+ $tabs = $this->get_tab_defs();
/* Remove user by user and check acls before removeing them */
foreach($this->dns as $key => $dn){
/* Save, or display error message? */
if (count($message) == 0){
-
-
$this->systab->save();
+ /* Post handling for activated systems
+ target opsi -> Remove source.
+ target gosa -> Activate system.
+ */
+ if($this->systab instanceOf opsi_tabs && $this->systab->was_activated){
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->config->current['BASE']);
+ $ldap->rmdir ($this->systab->dn);
+ @DEBUG(DEBUG_LDAP,__LINE__, __FUNCTION__, __FILE__,"Source removed: ".$this->systab->dn,"Opsi host activated.");
+ }elseif(isset($this->systab->was_activated) && $this->systab->was_activated){
+ $this->activate_new_device($this->systab->dn);
+ }
+
/* Terminal has been saved successfully, remove lock from LDAP. */
if (!isset($_POST['edit_apply'])){
if ($this->dn != "new"){
unset ($this->systab);
$this->systab= NULL;
- session::un_set('objectinfo');
+ set_object_info();
}else{
/* Reinitialize tab */
unset ($this->systab);
}
$this->systab= NULL;
- session::un_set('objectinfo');
+ set_object_info();
}
/********************
/* Show tab dialog if object is present */
if (isset($this->systab->config)){
+
+ if($this->systab instanceOf plugin && !($this->systab instanceOf tabs)){
+ $this->systab->save_object();
+ }
+
$display= $this->systab->execute();
/* Don't show buttons if tab dialog requests this */
$dialog = FALSE;
$hide_apply = $this->dn == "new";
- $hide_apply = ($this->dn == "new") || (preg_match("/".normalizePreg(get_ou("incomingou"))."/",$this->dn));
+ $hide_apply = ($this->dn == "new") || (preg_match("/".preg_quote(get_ou("systemIncomingRDN"), '/')."/",$this->dn));
if(is_object($this->systab) && !isset($this->systab->by_object)){
$dialog = TRUE;
$hide_apply = TRUE;
$dialog = TRUE;
}
- if (!$dialog){
+ if(($this->systab instanceOf tabs || $this->systab instanceOf plugin) && $this->systab->read_only == TRUE){
+ $display.= "<p style=\"text-align:right\">
+ <input type=submit name=\"edit_cancel\" value=\"".msgPool::cancelButton()."\">
+ </p>";
+ }elseif (!$dialog){
$display.= "<p style=\"text-align:right\">\n";
$display.= "<input type=\"submit\" name=\"edit_finish\" style=\"width:80px\" value=\"".msgPool::okButton()."\">\n";
$display.= " \n";
/* Check acls, if we are not allowed to create and write each plugin tab, skip this object */
$tabs = array(
- "terminal" => get_ou('terminalou'),
- "workstation" => get_ou('workstationou'),
- "incoming" => get_ou('incomingou'),
- "server" => get_ou('serverou'),
- "printer" => get_ou('printerou'),
- "phone" => get_ou('phoneou'),
+ "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('componentou')
+ "component" => get_ou('componentRDN')
);
foreach($tabs as $acl_cat => $dn){
$res = array();
$this->terminals = array();
$userregex = "";
+ $opsi_clients = array();
/* Set base for all searches */
$base= $this->DivListSystem->selectedBase;
/* This array represents the combination between checkboxes and search filters */
$objs = array(
- "ShowServers" => array("TAB" => "servtabs", "CLASS" => "goServer" ,"TREE" => get_ou('serverou')),
- "ShowTerminals" => array("TAB" => "termtabs", "CLASS" => "gotoTerminal" ,"TREE" => get_ou('terminalou')),
- "ShowPrinters" => array("TAB" => "printtabs", "CLASS" => "gotoPrinter" ,"TREE" => get_ou('printerou')),
- "ShowDevices" => array("TAB" => "componenttabs", "CLASS" => "ieee802Device" ,"TREE" => get_ou('componentou')),
- "ShowPhones" => array("TAB" => "phonetabs", "CLASS" => "goFonHardware" ,"TREE" => get_ou('phoneou')),
- "ShowWorkstations" => array("TAB" => "worktabs", "CLASS" => "gotoWorkstation" ,"TREE" => get_ou('workstationou')),
+ "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 */
/* Attributes to fetch */
$sys_attrs = array("cn", "description", "macAddress", "objectClass", "sambaDomainName","gotoMode","FAIclass");
- $sys_categories = array("terminal", "workstation", "server", "phone" ,"printer","incoming");
+ $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'));
/* Search for incoming objects */
$filter = "(|(&".$userregex."(objectClass=goHard)(cn=".$this->DivListSystem->Regex.")))";
- $res = array_merge($res,get_list($filter,$sys_categories, get_ou('incomingou').$base,$sys_attrs, GL_SIZELIMIT));
+ $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 != NULL){
- $res = array_merge($res,$this->opsi->get_hosts_for_system_management());
+ 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'];
}
/* Create a string containing the last part of the department. */
- $dn_name = preg_replace("#^([^/]+/)*#","",convert_department_dn(@LDAP::fix($tmp)));
+ $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('incomingou')."/i", $tmp)){
+ 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'])){
/* Detect type of object and create an entry for $this->terminals */
$terminal = array();
- if (in_array_ics('gosa_opsi_client', $value["objectClass"])){
+ if (0 && in_array_ics('gosa_opsi_client', $value["objectClass"])){
/* check acl */
$terminal = $value;
$terminal['type'] = "Q";
$terminal['is_new'] = $add;
}
- } elseif (in_array_ics('ieee802Device', $value["objectClass"])){
-
+ } 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)) {
}
}
+ /* Append collected data to the host list.
+ */
if(count($terminal)){
- $this->terminals[]=$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 ){
{
if (isset($this->systab->dn)){
del_lock ($this->systab->dn);
- }
- if(isset($this->dn) && !empty($this->dn) && $this->dn != "new"){
+ }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)){
}
$ui = get_userinfo();
-
- $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"));
+
+ $tabs = $this->get_tab_defs();
/* Add a single entry to queue */
if($s_action == "cut" || $s_action == "copy"){
$tab_o = $tabs[$type]['CLASS'];
$tab_c = $tabs[$type]['TABCLASS'];
$acl_c = $tabs[$type]['TABNAME'];
- $acl = $tabs[$type]['ACL'];
+ $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);
$tab_o = $tabs[$type]['CLASS'];
$tab_c = $tabs[$type]['TABCLASS'];
$acl_c = $tabs[$type]['TABNAME'];
- $acl = $tabs[$type]['ACL'];
+ $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);
$type= "";
if (in_array_ics('gosa_opsi_client', $classes)){
- $type= "gosa_opsi_client";
+ $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= "ArpNewDevice";
}elseif (in_array_ics('GOhard', $classes)){
$type= "NewDevice";
- }elseif (in_array_ics('sambaAccount', $classes) ||
- in_array_ics('sambaSamAccount', $classes)){
- $type= "winstation";
}
return ($type);
}
"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",_("Win workstation")),
+ "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")),
/* Add opsi client to system types */
if($this->opsi != NULL){
- $conv["O"] = array("plugins/systems/images/select_default.png",_("Opsi client"));
+ $conv["O"] = array("plugins/systems/images/select_winstation.png",_("Opsi client"));
}
/* Use locked icons
if(!preg_match("/".$key[$i]."/",$input['type'])){
$found = FALSE;
}
- }
+ }
if($found){
$tmp['img'] ="<img class='center' src='".$value[0]."' alt='".$key."' title='".$value['1']."'>";
}
+ 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()