X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Faddons%2Fgotomasses%2Fclass_gotomasses.inc;h=1dc2d9fc08ce739ee5e329f988d54173bed3d388;hb=86125112db2dcd406bad955e500a8afd8c8fe55c;hp=216e9966531a9612f7fb37643c8959b116ec2bf3;hpb=113f42db57322dd9d1a5caaaf4b9fd46fb522db4;p=gosa.git diff --git a/plugins/addons/gotomasses/class_gotomasses.inc b/plugins/addons/gotomasses/class_gotomasses.inc index 216e99665..1dc2d9fc0 100644 --- a/plugins/addons/gotomasses/class_gotomasses.inc +++ b/plugins/addons/gotomasses/class_gotomasses.inc @@ -3,42 +3,49 @@ class gotomasses extends plugin { /* Definitions */ - var $plHeadline = "System mass deployment"; + var $plHeadline = "System deployment"; var $plDescription = "This does something"; /* attribute list for save action */ var $attributes= array(); var $objectclasses= array(); - /* Source file that contains the csv data */ - var $file_to_read = "Undefined"; #Set in constructor + /* Source file that contains the gotomasses data */ + var $data_file = "Undefined"; #Set in constructor /* Queue tasks */ var $tasks = array(); var $current =false; - var $dialog = NULL; + var $dialog = FALSE; + var $ids_to_remove = array(); + var $divlist = NULL; - function gotomasses($config, $dn= NULL) + function gotomasses(&$config, $dn= NULL) { - /* Define source file */ - $this->file_to_read = CONFIG_DIR."/gotomasses_machines"; - /* Include config object */ - $this->config= $config; + $this->config= &$config; - $this->load_csv_data(); + /* Define source file */ + $this->data_file = CONFIG_DIR."/gotomasses_machines"; + $file = $this->config->search("gotomasses", "STORAGE_FILE",array('menu')); + if(!empty($file)){ + $this->data_file = $file; + } + $this->divlist = new divListMasses($this->config,$this); + $this->load_gotomasses_data(); } - function execute() { + $smarty = get_smarty(); /************ * Handle posts ************/ $s_entry = $s_action = ""; - $arr = array("/^edit_/"=>"edit","/^remove_/"=>"remove"); + $arr = array( "/^edit_task_/"=>"edit","/^remove_task_/"=>"remove", + "/^new_task_/"=>"new_task","/^remove_multiple_task_/" => "remove_multiple"); foreach($arr as $regex => $action){ foreach($_POST as $name => $value){ if(preg_match($regex,$name)){ @@ -49,13 +56,72 @@ class gotomasses extends plugin } } + /* Edit posted from list link */ + if(isset($_GET['act']) && $_GET['act'] == "edit" && isset($_GET['id']) && isset($this->tasks[$_GET['id']])){ + $s_action = "edit"; + $s_entry = $_GET['id']; + } + /************ * List posts ************/ + /* Remove multiple */ + if($s_action == "remove_multiple"){ + if(!$this->acl_is_removeable()){ + print_red(_("You are not allowed to remove a task.")); + }else{ + $this->ids_to_remove = $this->list_get_selected_items(); + $tmp = ""; + foreach($this->ids_to_remove as $key => $id){ + if(isset($this->tasks[$id])){ + $task = $this->tasks[$id]; + $tmp.= "\n".$this->target_to_string($task); + }else{ + unset($this->ids_to_remove[$key]); + } + } + $smarty->assign("multiple", TRUE); + $smarty->assign("info",sprintf(_("Your are about to delete the following tasks: %s"),"
".$tmp."
")); + $this->current = $s_entry; + return($smarty->fetch(get_template_path('remove.tpl', TRUE))); + } + } + + /* Remove specified tasks */ + if(count($this->ids_to_remove) && isset($_POST['delete_multiple_confirm'])){ + foreach($this->ids_to_remove as $id){ + if(isset($this->tasks[$id])){ + unset($this->tasks[$id]); + } + } + $this->save(); + } + /* Remove entry from list */ if($s_action == "remove" && isset($this->tasks[$s_entry])){ - unset($this->tasks[$s_entry]); + if(!$this->acl_is_removeable()){ + print_red(_("You are not allowed to remove a task.")); + }else{ + $entry = $this->tasks[$s_entry]; + $this->current = $s_entry; + $smarty->assign("info",sprintf(_("Your are about to delete the following tasks: %s"), + "
".$this->target_to_string($entry)."
")); + $smarty->assign("multiple", FALSE); + return($smarty->fetch(get_template_path('remove.tpl', TRUE))); + } + } + + /* Remove entry, remove is confirmed */ + if($this->current != -1 && isset($_POST['delete_confirm'])){ + unset($this->tasks[$this->current]); + $this->current = -1; + $this->save(); + } + + /* Remove aborted */ + if(isset($_POST['delete_cancel'])){ + $this->ids_to_remove = array();; } /* Edit selected entry */ @@ -64,14 +130,21 @@ class gotomasses extends plugin $this->dialog = new goto_task($this->config,$this,$entry); $this->current = $s_entry; } + + /* New entry */ + if($s_action== "new_task" && $this->acl_is_createable()){ + $this->dialog = new goto_task($this->config,$this); + $this->current = -1; + } /* Close dialog */ if(isset($_POST['close_goto_task'])){ - $this->dialog = NULL; + $this->dialog = FALSE; + $this->current = -1; } /* Close dialog */ - if(isset($_POST['save_goto_task'])){ + if((isset($_POST['save_goto_task']) || isset($_POST['apply_goto_task'])) && is_object($this->dialog) ){ $this->dialog->save_object(); $msgs = $this->dialog->check(); if(count($msgs)){ @@ -79,11 +152,19 @@ class gotomasses extends plugin print_red($msg); } }else{ - $this->tasks[$this->current] = $this->dialog->save(); - $this->dialog = NULL; + if(isset($this->tasks[$this->current]) && $this->current != -1){ + $this->tasks[$this->current] = $this->dialog->save(); + }else{ + $this->tasks[] = $this->dialog->save(); + } + if(!isset($_POST['apply_goto_task'])){ + $this->dialog = FALSE; + $this->current = -1; + } + $this->save(); } } - + /* Display dialogs if currently opened */ if(is_object($this->dialog)){ $this->dialog->save_object(); @@ -95,45 +176,24 @@ class gotomasses extends plugin * Handle Divlist ************/ - $smarty = get_smarty(); - $plug = $_GET['plug']; - $divlist = new divlist("gotomasses"); - $divlist->SetWidth("100%"); - $divlist->SetHeader(array( array("string"=>""._("Target").""), - array("string"=>""._("Schedule")."", - "attach"=>"style='width:150px;'"), - array("string"=>""._("Type")."", - "attach"=>"style='width:50px;'"), - array("string"=>_("Action"), - "attach"=>"style='border-right:0px;width:50px;'"))); - - - foreach($this->tasks as $key => $task){ - - $action = ""; - $action.= ""; - - $field1 = array("string" => $this->target_to_string($task)); - $field2 = array("string" => $this->time_to_string($task)); - $field3 = array("string" => $this->action_to_string($task)); - $field4 = array("string" => $action,"attach" => "style='border-right:0px;'"); - - - $divlist->AddEntry(array($field1,$field2,$field3,$field4)); - } - - $smarty->assign("divlist" , $divlist->DrawList()); - $smarty->assign("contents_modified" , TRUE ); - return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + $this->divlist->execute(); + $this->divlist->SetEntries($this->tasks); + return($this->divlist->Draw()); } function target_to_string($data) { $ret = ""; - foreach($data['Target'] as $target){ - $ret .= preg_replace("/^[^:]+:/i","",$target).", "; - } + if($data['Action'] == "initial_install"){ + foreach($data['Initial_Target'] as $target){ + $ret .= $target['MAC'].", "; + } + }else{ + foreach($data['Target'] as $target){ + $ret .= $target.", "; + } + } return(preg_replace("/, $/","",$ret)); } @@ -146,30 +206,29 @@ class gotomasses extends plugin function action_to_string($data) { - switch($data['Action']){ - - case 'reinstall' : return("Reinstall");break; - case 'install' : return("Install");break; - case 'reboot' : return("Restart");break; - case 'update' : return("Update");break; - default : return("Unknown"); + $tmp = $this->get_actions(); + if(isset($tmp[$data['Action']])){ + return($tmp[$data['Action']]); + }else{ + return(_("Unknown")); } } - function load_csv_data() + function load_gotomasses_data() { $ui = get_userinfo(); - - if(!file_exists($this->file_to_read) || !is_readable($this->file_to_read)){ - print_red(sprintf(_("Can't locate or read csv storage file '%s'."),$this->file_to_read)); + /* Check file existence */ + if(!file_exists($this->data_file) || !is_readable($this->data_file)){ + print_red(sprintf(_("Can't locate or read gotomasses storage file '%s'."),$this->data_file)); return(FALSE); } - $fp = @fopen($this->file_to_read,"r"); + /* check if file is readable */ + $fp = @fopen($this->data_file,"r"); if(!$fp){ - print_red(sprintf(_("Can't read csv storage file '%s'."),$this->file_to_read)); + print_red(sprintf(_("Can't read gotomasses storage file '%s'."),$this->data_file)); return(FALSE); } @@ -204,7 +263,7 @@ class gotomasses extends plugin $row = preg_replace('/ */umi'," ",$row); $parts = split(" ",$row); - if(count($parts) != 8){ + if(count($parts) != 10){ print_red(_("Entry broken, skipped.")); }else{ @@ -216,7 +275,22 @@ class gotomasses extends plugin $entry['Weekday'] = $parts[4]; $entry['Action'] = $parts[5]; $entry['OGroup'] = $parts[6]; - $entry['Target'] = split(",",$parts[7]); + $entry['Zone'] = $parts[7]; + $entry['Section'] = $parts[8]; + if($entry['Action'] == "initial_install"){ + $tmp2 = split(";",$parts[9]); + foreach($tmp2 as $target){ + $tmp = split(",",$target); + $entry['Initial_Target'][] = array( + "MAC" => $tmp[0], + "IP" => $tmp[1], + "NAME" => $tmp[2]); + } + $entry['Target'] = array(); + }else{ + $entry['Initial_Target'] = array(); + $entry['Target'] = split(";",$parts[7]); + } $entry['Comment'] = $comment; $this->tasks [] = $entry; } @@ -224,15 +298,61 @@ class gotomasses extends plugin } - function save_csv_data() + function save_gotomasses_data() { + $str = "#GOsa generated file, please just modify if you really know what you do."; + foreach($this->tasks as $task){ + $str .= "\n#".trim($task['Comment']); + $str .= "\n"; + if($task['Action'] == "initial_install"){ + $str .= "* * * * * "; + }else{ + $str .= str_pad($task['Minute'] ,5," ")." "; + $str .= str_pad($task['Hour'] ,5," ")." "; + $str .= str_pad($task['Day'] ,5," ")." "; + $str .= str_pad($task['Month'] ,5," ")." "; + $str .= str_pad($task['Weekday'],5," ")." "; + } + $str .= str_pad($task['Action'] ,5," ")." "; + $str .= str_pad($task['OGroup'] ,5," ")." "; + $str .= str_pad($task['Zone'] ,5," ")." "; + $str .= str_pad($task['Section'],5," ")." "; + if($task['Action'] == "initial_install"){ + foreach($task['Initial_Target'] as $target){ + $str .= trim($target['MAC']).",".trim($target['IP']).",".trim($target['NAME']).";"; + } + }else{ + foreach($task['Target'] as $target){ + $str .= $target.";"; + } + } + $str = preg_replace("/;$/","",$str); + } + + /* check file existence*/ + $ui = get_userinfo(); + if(!file_exists($this->data_file) || !is_writeable($this->data_file)){ + print_red(sprintf(_("Can't locate or write gotomasses storage file '%s'."),$this->data_file)); + return(FALSE); + } + + /* check permissions */ + $fp = @fopen($this->data_file,"w"); + if(!$fp){ + print_red(sprintf(_("Can't read gotomasses storage file '%s'."),$this->data_file)); + return(FALSE); + } + + /* Write contents */ + $str .= "\n"; + fwrite($fp,$str); + fclose($fp); } function save_object() { - if(isset($_POST['gotomasses'])){ - } + $this->divlist->save_object(); } @@ -249,16 +369,37 @@ class gotomasses extends plugin return($ret); } + + function save() + { + $this->save_gotomasses_data(); + } + + + function list_get_selected_items() + { + $ids = array(); + foreach($_POST as $name => $value){ + if(preg_match("/^item_selected_[0-9]*$/",$name)){ + $id = preg_replace("/^item_selected_/","",$name); + $ids[$id] = $id; + } + } + return($ids); + } + function get_actions() { /* Prepare list of available actions */ - $actions = array( "reboot" => _("Reboot"), + $actions = array( "reboot" => _("Reboot"), "localboot" => _("Localboot"), "halt" => _("Halt system"), + "initial_install" => _("Initial installation"), "update" => _("Update"), "reinstall" => _("(Re)Install"), "rescan" => _("Rescan"), + "wake" => _("Wake"), "memcheck" => _("Memory check")); return($actions); }