diff --git a/plugins/admin/systems/class_terminalStartup.inc b/plugins/admin/systems/class_terminalStartup.inc
index ddf9c48365170d707b3627aef5716d7a449d658c..9185810d38a65fcafb6770e4e95d4660bed26c5e 100644 (file)
var $gotoTerminalPath= "";
var $gotoBootKernels= array();
+ /* Ldap server list */
+ var $gotoLdapServers = array();
+ var $gotoLdapServerList = array();
+ var $gotoLdap_inherit = FALSE;
+
/* Share */
var $gotoShares = array();// Currently Share Option
var $gotoShare = ""; // currently selected Share Option
/* attribute list for save action */
- var $attributes= array("gotoLdapServer", "gotoBootKernel", "gotoKernelParameters");
+ var $attributes= array("gotoLdapServer", "gotoBootKernel", "gotoKernelParameters","gotoModules");
var $objectclasses= array("GOhard");
+ var $view_logged = FALSE;
/* Helper */
var $customParameters= "";
var $orig_dn= "";
var $ignore_account= TRUE;
- function termstartup ($config, $dn= NULL, $parent= NULL)
+ function termstartup (&$config, $dn= NULL, $parent= NULL)
{
plugin::plugin ($config, $dn, $parent);
/* Get arrays */
foreach (array("gotoModules") as $val){
+ $this->$val = array();
if (isset($this->attrs["$val"]["count"])){
for ($i= 0; $i<$this->attrs["count"]; $i++){
if (isset($this->attrs["$val"][$i])){
/* Get list of boot kernels */
if (isset($this->config->data['TABS'])){
- $command= search_config($this->config->data['TABS'], get_class($this), "KERNELS");
+ $command= $this->config->search(get_class($this), "KERNELS",array('tabs'));
if (!check_command($command)){
$message[]= sprintf(_("Command '%s', specified as KERNELS hook for plugin '%s' doesn't seem to exist."), $command,
}
}
- $tmp = $this->config->data['SERVERS']['LDAP'];
- foreach($tmp as $server){
- $visible = $server;
- if($server == "default-inherit"){
- $visible = "["._("inherited")."]";
+
+ foreach($this->config->data['SERVERS']['LDAP'] as $server) {
+ $this->gotoLdapServerList[]= $server;
+ }
+ if(isset($this->attrs['gotoLdapServer'])){
+ unset($this->attrs['gotoLdapServer']['count']);
+ sort($this->attrs['gotoLdapServer']);
+ foreach($this->attrs['gotoLdapServer'] as $value){
+ $this->gotoLdapServers[] = preg_replace("/^[0-9]*:/","",$value);
}
- $this->goLdapServerList[$server] = $visible;
+ }
+ if(!count($this->gotoLdapServers)){
+ $this->gotoLdap_inherit = TRUE;
}
- /* Load hardware list */
+ /* Load hardware list */
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
$ldap->search("(&(objectClass=gotoWorkstationTemplate)(member=".$this->dn."))");
/* Call parent execute */
plugin::execute();
+ if($this->is_account && !$this->view_logged){
+ $this->view_logged = TRUE;
+ new log("view","terminal/".get_class($this),$this->dn);
+ }
+
/* Do we need to flip is_account state? */
if (isset($_POST['modify_state'])){
$this->is_account= !$this->is_account;
}
/* Do we represent a valid terminal? */
- if (!$this->is_account && $this->parent == NULL){
+ if (!$this->is_account && $this->parent === NULL){
$display= "<img alt=\"\" src=\"images/stop.png\" align=middle> <b>".
_("This 'dn' has no terminal features.")."</b>";
return ($display);
$SelectBoxLdapServer = new divSelectBox("LdapServer");
$SelectBoxLdapServer->SetHeight(80);
- /* Set first entry as selected, if $this->gotoLdapServer is empty
- * or given entry is no longer available ...
- */
- $found = false;
- foreach($this->goLdapServerList as $server => $name){
- if($this->gotoLdapServer==$server){
- $found = true;
+ /* Add new ldap server to the list */
+ if(!$this->gotoLdap_inherit && isset($_POST['add_ldap_server']) && isset($_POST['ldap_server_to_add'])){
+ if(isset($this->gotoLdapServerList[$_POST['ldap_server_to_add']])){
+ $to_add = $this->gotoLdapServerList[$_POST['ldap_server_to_add']];
+ if(!in_array($to_add,$this->gotoLdapServers)){
+ $this->gotoLdapServers[] = $to_add;
+ }
}
}
-
- /* Add Entries
+
+ /* Move ldap servers up and down */
+ if(!$this->gotoLdap_inherit){
+ foreach($_POST as $name => $value){
+ if(preg_match("/sort_ldap_up_/",$name)){
+ $id = preg_replace("/^sort_ldap_up_([0-9]*)_(x|y)$/","\\1",$name);
+ $from = $id;
+ $to = $id -1;
+ $tmp = $this->array_switch_item($this->gotoLdapServers,$from,$to);
+ if($tmp){
+ $this->gotoLdapServers = $tmp;
+ }
+ break;
+ }
+ if(preg_match("/sort_ldap_down_/",$name)){
+ $id = preg_replace("/^sort_ldap_down_([0-9]*)_(x|y)$/","\\1",$name);
+ $from = $id;
+ $to = $id +1;
+ $tmp = $this->array_switch_item($this->gotoLdapServers,$from,$to);
+ if($tmp){
+ $this->gotoLdapServers = $tmp;
+ }
+ break;
+ }
+ if(preg_match("/gotoLdapRemove_/",$name)){
+ $id = preg_replace("/^gotoLdapRemove_([0-9]*)_(x|y)$/","\\1",$name);
+ $value = $this->gotoLdapServers[$id];
+ $this->gotoLdapServers = array_remove_entries(array($value),$this->gotoLdapServers);
+ break;
+ }
+ }
+ }
+ /* Add Entries
*/
- foreach($this->goLdapServerList as $server => $visible){
- $use ="";
- if(($this->gotoLdapServer == $server) || ($found == false)) {
- $found = true;
- $use = " checked ";
- };
+ foreach($this->gotoLdapServers as $key => $server){
+ if(!in_array($server,$this->gotoLdapServerList)){
+ $server = $server." <font style='color:red'>(missing)</font>";
+ }
$SelectBoxLdapServer->AddEntry(
- array(
- array("string"=>"<input type='radio' name='gotoLdapServer' value='".$server."' ".$use.">",
- "attach"=>"style='border-left:0px;'"),
- array("string"=>$visible)
- ));
+ array(array("string" => $server),
+ array("string" =>
+ "<input class='center' type='image' src='images/sort_up.png' name='sort_ldap_up_".$key."'> ".
+ "<input class='center' type='image' src='images/sort_down.png' name='sort_ldap_down_".$key."'> ".
+ "<input class='center' type='image' src='images/edittrash.png' name='gotoLdapRemove_".$key."'>",
+ "attach" => "style='text-align:right;width:40px;border-right:0px;'")));
}
- $smarty->assign("SelectBoxLdapServer",$SelectBoxLdapServer->DrawList());
+ if($this->gotoLdap_inherit){
+ $smarty->assign("gotoLdapServerACL_inherit", preg_replace("/w/","",$this->getacl("gotoLdapServer")));;
+ }else{
+ $smarty->assign("gotoLdapServerACL_inherit", $this->getacl("gotoLdapServer"));
+ }
+
+ $list = array();
+ foreach($this->gotoLdapServerList as $key => $entry){
+ if(!in_array($entry,$this->gotoLdapServers)){
+ $list[$key] = $entry;
+ }
+ }
+ $smarty->assign("gotoLdapServers", $SelectBoxLdapServer->DrawList());
+ $smarty->assign("gotoLdapServerList", $list);
+ $smarty->assign("gotoLdap_inherit", $this->gotoLdap_inherit);
+ $smarty->assign("JS", $_SESSION['js']);
foreach (array("gotoModules" ) as $val){
$smarty->assign("$val", $this->$val);
{
if($this->acl_is_removeable()){
$this->handle_post_events("remove");
+ new log("remove","terminal/".get_class($this),$this->dn,array_keys($this->attrs));
}
}
{
plugin::save_object();
- /* Save group radio buttons */
- if ($this->acl_is_writeable("bootmode") && isset($_POST["bootmode"])){
- $this->bootmode= $_POST["bootmode"];
- }
+ if(isset($_POST['TerminalStarttabPosted'])){
+ if(isset($_POST['gotoLdap_inherit'])){
+ $this->gotoLdap_inherit = TRUE;
+ }else{
+ $this->gotoLdap_inherit = FALSE;
+ }
- /* Save kernel parameters */
- if ($this->acl_is_writeable("gotoKernelParameters") && isset($_POST["customParameters"])){
- $this->customParameters= $_POST["customParameters"];
+ /* Save group radio buttons */
+ if ($this->acl_is_writeable("bootmode") && isset($_POST["bootmode"])){
+ $this->bootmode= $_POST["bootmode"];
+ }
+
+ /* Save kernel parameters */
+ if ($this->acl_is_writeable("gotoKernelParameters") && isset($_POST["customParameters"])){
+ $this->customParameters= $_POST["customParameters"];
+ }
}
}
}
}
}
-
+
/* Add semi automatic values */
// FIXME: LDAP Server may not be set here...
$this->gotoKernelParameters= "root=/dev/nfs nfsroot=".
}
}
+ /* Prepare list of ldap servers */
+ $this->attrs['gotoLdapServer'] = array();
+ if(!$this->gotoLdap_inherit){
+ $i = 0;
+ foreach($this->gotoLdapServers as $server){
+ $i ++;
+ $this->attrs['gotoLdapServer'][] = $i.":".$server;
+ }
+ }
+
/* Strip out 'default' values */
- foreach(array("gotoBootKernel","gotoLdapServer") as $value){
+ foreach(array("gotoBootKernel") as $value){
if (!isset($this->attrs[$value]) || $this->attrs[$value] == "default-inherit"){
$this->attrs[$value] = array();
}
/* Write back to ldap */
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->dn);
+
$this->cleanup();
$ldap->modify ($this->attrs);
+ new log("modify","terminal/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
+
show_ldap_error($ldap->get_error(), sprintf(_("Saving of system terminal/startup with dn '%s' failed."),$this->dn));
$this->handle_post_events("modify");
}
return($a_return);
}
+
+ function PrepareForCopyPaste($source)
+ {
+ plugin::PrepareForCopyPaste($source);
+
+ $source_o = new termstartup ($this->config, $source['dn']);
+
+ foreach(array("gotoModules", "gotoKernelParameters","gotoShares","customParameters","bootmode","gotoTerminalPath","gotoShares","goLdapServerList","gotoBootKernel","gotoLdapServer","gotoBootKernels") as $attr){
+ $this->$attr = $source_o->$attr;
+ }
+ }
+
+
+ function array_switch_item($ar,$from,$to)
+ {
+ if(!is_array($ar)){
+ return(false);
+ }
+ if(!isset($ar[$from])){
+ return(false);
+ }
+ if(!isset($ar[$to])){
+ return(false);
+ }
+
+ $tmp = $ar[$from];
+ $ar[$from] = $ar[$to];
+ $ar[$to] = $tmp;
+ return($ar);
+ }
+
+
/* Return plugin informations for acl handling */
function plInfo()
{