Code

Added edit link to overview list of gotomasses
[gosa.git] / plugins / addons / gotomasses / class_goto_task.inc
1 <?php
3 class goto_task extends plugin
4 {
5   /* Definitions */
6   var $plHeadline     = "System mass deployment";
7   var $plDescription  = "This does something";
8  
9   var $parent   = NULL;
10  
11   var $Minute   = "*";
12   var $Hour     = "*";
13   var $Day      = "*";
14   var $Month    = "*";
15   var $Weekday  = "*";
16   var $Action   = "install";
17   var $Comment  = "";
18   var $OGroup   = "keep_current";
19   var $OGroups  = array();
20   var $Target   = array();
21   var $Initial_Target   = array();
22   var $Actions  = array();
23   var $new      = FALSE;
24   var $attributes     = array("OGroup","Minute","Hour","Day","Month","Weekday","Action","Comment","Target","Initial_Target");
27   function goto_task($config,$parent,$data = array())
28   {
29     /* Set parent object */
30     $this->parent = $parent;
32     /* Intialize plugin */
33     $this->config = $config;
34     if(count($data)){
35     
36       $tmp = $this->get_array_values();
37       foreach($this->attributes as $attr){
38         if(!isset($data[$attr])){
39           trigger_error("Missing parameter: '".$attr."' for goto_task contruction.");
40         }else{
41           $this->$attr = $data[$attr];
42         }
43       }
44     }else{
45       $this->new = TRUE;
46     }
48     /* Create ogroup select list */
49     $this->OGroups = array("\"\""     => "["._("Keep current")."]");
50     $this->OGroups = array_merge($this->OGroups,$this->parent->get_object_groups());
52     /* Prepare list of available actions */
53     $this->Actions = $this->parent->get_actions();
54   }
57   function execute()
58   {
59     /********
60      * Handle Posts  
61      ********/
62   
63     /* Handle Target options */
64     foreach($_POST as $name => $value){
65       if(preg_match("/^remove_/",$name)){
66         $value = preg_replace("/^remove_([0-9]*)_(x|y)$/i","\\1",$name);
67         if(isset($this->Target[$value]) && $this->Action != "initial_install"){
68           unset($this->Target[$value]);
69         }elseif(isset($this->Initial_Target[$value]) && $this->Action == "initial_install"){
70           unset($this->Initial_Target[$value]);
71         }
72       }
73     }
75     if($this->Action != "initial_install"){
76       
77       /* Add target */
78       if(isset($_POST['add_target']) && !empty($_POST['target_text'])){
79         $target = get_post("target_text");
80         if($this->is_valid_target($target) && !in_array($target,$this->Target)){
81           $this->Target[] = $target;
82         }
83       }
84     }else{
86       /* Add target */
87       if(isset($_POST['add_target']) && !empty($_POST['task_MAC'])){
88         $MAC = $_POST['task_MAC'];
89         $NAME= "";
90         $IP  = "";
91         if(isset($_POST['task_Name'])){
92           $NAME = $_POST['task_Name'];
93         }
94         if(isset($_POST['task_IP']) && is_ip($_POST['task_IP'])){
95           $IP = $_POST['task_IP'];
96         }
97         if(is_mac($MAC)){
98           $this->Initial_Target[] = array("MAC"=>$MAC,"IP"=>$IP,"NAME"=>$NAME);
99         }
100       }
101     }
103     /* Add via csv */
104     if(isset($_FILES['import_file'])){
105       $file = $_FILES['import_file']['tmp_name'];
106       if(file_exists($file) && is_readable($file)){
107         $str ="";
108         $fp = fopen($file,"r");
109         while(!feof($fp)){
110           $line = fgets($fp,512);
111           $tmp = preg_split("/(,|;)/",$line);
113           $MAC = $IP = $NAME = "";
114           if(isset($tmp[0])){
115             $MAC = $tmp[0];
116           }
117           if(isset($tmp[1])){
118             $IP = $tmp[1];
119           }
120           if(isset($tmp[2])){
121             $NAME = $tmp[2];
122           }
123           if(is_mac($MAC)){
124             $this->Initial_Target[] = array("MAC"=>$MAC,"IP"=>$IP,"NAME"=>$NAME);
125           }
126         }
127       }
128     }
129   
130     /********
131      * Add target from list 
132      ********/
134     /* If add from list is was requsted, display this list */ 
135     if(isset($_POST['add_from_list'])){
136       $this->dialog = new target_list($this->config,$this->Target);
137     }
139     /* Save selected objects as target */
140     if(isset($_POST['SaveMultiSelectWindow'])){
141       $this->dialog->save_object();
142       $ret = $this->dialog->save();
143       foreach($ret as $entry){
144         $this->Target[] = $entry['cn'][0];
145       }
146       $this->dialog = NULL;
147     }
149     /* Cancel object listing */
150     if(isset($_POST['CloseMultiSelectWindow'])){
151       $this->dialog = NULL;
152     }
154     /* Display object Listing */
155     if($this->dialog){
156       $this->dialog->save_object();
157       return($this->dialog->execute());
158     }
160     /********
161      * Display this plugin  
162      ********/
164     $divlist = new divlist("goto_task");
165     $divlist->SetHeight("160");
166     $divlist->SetEntriesPerPage(0);
168     $acl_target = $this->parent->getacl("Target");
169     if(preg_match("/w/i",$acl_target)){
170       $field_del = array("string" => "<input type='image' src='images/edittrash.png' name='remove_%KEY%'>" , 
171           "attach" => "style='width:44px;border-right:0px;'");
172     }else{
173       $field_del = array("string" => "",
174           "attach" => "style='width:44px;border-right:0px;'");
175     }
177     /* Add entries to divlist */
178     if($this->Action == "initial_install"){
179       $divlist->SetHeader(array(
180                             array("string" => "Target"),
181                             array("string" => "IP"      , "attach" => "style='width:90px;'"),
182                             array("string" => "Name"    , "attach" => "style='width:150px;'"),
183                             array("string" => "Actions" , "attach" => "style='width:44px;border-right:0px;text-align:right;'")));
184       foreach($this->Initial_Target as $key => $target){
185         $field1 = array("string" => $target['MAC']  );
186         $field2 = array("string" => $target['IP']   ,"attach" => "style='width:90px;'");
187         $field3 = array("string" => $target['NAME'] ,"attach" => "style='width:150px;'");
188         $divlist->AddEntry(array($field1,$field2,$field3,preg_replace("/%KEY%/",$key,$field_del)));
189       } 
190     }else{
191       $divlist->SetHeader(array(
192                             array("string" => "Target", "attach" => "style=''"),
193                             array("string" => "Actions" , "attach" => "style='width:44px;border-right:0px;text-align:right;'")));
194       foreach($this->Target as $key => $target){
195         $field1 = array("string" => $target);
196         $divlist->AddEntry(array($field1,preg_replace("/%KEY%/",$key,$field_del)));
197       } 
198     }
200     $smarty = get_smarty();
201     foreach($this->attributes as $attr){
202       $smarty->assign($attr."ACL", $this->parent->getacl($attr));
203       $smarty->assign($attr,$this->$attr);
204     }
206     $tmp = $this->get_array_values();
207     $smarty->assign("JS"      , $_SESSION['js']);
208     $smarty->assign("Minutes" , $tmp['Minute']);
209     $smarty->assign("Hours"   , $tmp['Hour']);
210     $smarty->assign("Days"    , $tmp['Day']);
211     $smarty->assign("Months"  , $tmp['Month']);
212     $smarty->assign("Weekdays", $tmp['Weekday']);
213     $smarty->assign("OGroups" , $this->OGroups);
214     $smarty->assign("Actions"     , $this->Actions);
215     $smarty->assign("Target_list" , $divlist->DrawList());
216     $smarty->assign("new"      , $this->new);
217     return ($smarty->fetch (get_template_path('goto_task.tpl', TRUE)));
218   }
220   
221   /* check given values */
222   function check()
223   {
224     $message = plugin::check();
225     $tmp = array(
226       "OGroup" => _("Object group") ,"Minute" => _("Minute"),
227       "Hour"   => _("Hour")         ,"Day"    => _("Day"),
228       "Month"  => _("Month")        ,"Weekday"=> _("Week day"),
229       "Action" => _("Action")       ,"Comment"=> _("Description"));
230     
231     foreach($tmp as $name => $desc){
232       if(empty($this->$name)){
233         $message[] = sprintf(_("The given value for attribute '%s' is invalid."),$desc);
234       }
235     }
236     if(count($this->Target) == 0 && $this->Action != "initial_install"){
237       $message[] = sprintf(_("You must specify at least one traget"));
238     }
239     if(count($this->Initial_Target) == 0 && $this->Action == "initial_install"){
240       $message[] = sprintf(_("You must specify at least one traget"));
241     }
242     return($message);
243   }
244   
246   /* Map acl function, to be able to use plugin::save_object() */
247   function acl_is_writeable($str)
248   {
249     return($this->parent->acl_is_writeable($str));
250   }
253   function save_object()
254   {
255     if(isset($_POST['goto_task_posted'])){
256       plugin::save_object();
257     }
258   }  
260   
261   /* Check if given target is vald.
262    * It must either be a valid MAC address or an existing object group
263    */
264   function is_valid_target($str)
265   {
266     if(is_mac($str)){
267       return(TRUE);
268     }else{
269       $ldap = $this->config->get_ldap_link();
270       $ldap->cd($this->config->current['BASE']);
271       $ldap->search("(&(objectClassgosaGroupOfNames)(cn=".$str."))",array("cn"));
272       if($ldap->count()){
273         return(TRUE);
274       }
275     }
276   }
278   function save()
279   {
280     $tmp = array();
281     foreach($this->attributes as $attr){
282       $tmp[$attr] = $this->$attr;
283     }
284     return($tmp);
285   }
288   /* Return values for listboxes. 
289    */
290   function get_array_values()
291   {
292     $ret = array();    
294     /* Create minute array */
295     $Minute = array( "*"    => "*",
296                       "*/1"  => "*/1",
297                       "*/3"  => "*/3",
298                       "*/5"  => "*/5",
299                       "*/10" => "*/10",
300                       "*/15" => "*/15",
301                       "*/30" => "*/30",
302                       "*/45" => "*/45",
303                       "*/60" => "*/60"); 
304     for($i = 0; $i < 60 ; $i ++){
305       $Minute[$i] = $i;
306     }
308     /* Create hour array */
309     $Hour = array(   "*" => "*");
310     for($i = 1 ; $i < 24 ; $i ++ ){
311       $Hour["*/".$i] = "*/".$i;
312     } 
313     for($i = 0 ; $i < 24 ; $i ++ ){
314       $Hour[$i] = $i;
315     } 
317     /* Create hour array */
318     $Day = array( "*" => "*");
319     for($i = 1 ; $i < 32 ; $i ++ ){
320       $Day["*/".$i] = "*/".$i;
321     } 
322     for($i = 1 ; $i < 32 ; $i ++ ){
323       $Day[$i] = $i;
324     } 
325    
326     /* Create month array */
327     $Month = array( "*" => "*");
328     for($i = 1 ; $i <= 12 ; $i ++ ){
329       $Month["*/".$i] = "*/".$i;
330     } 
331     for($i = 1 ; $i <= 12 ; $i ++ ){
332       $Month[$i] = $i;
333     } 
334    
335     /* Create week day array */
336     $Weekday = array( "*" => "*");
337     for($i = 1 ; $i <= 7 ; $i ++ ){
338       $Weekday["*/".$i] = "*/".$i;
339     } 
340     for($i = 0 ; $i <= 7 ; $i ++ ){
341       $Weekday[$i] = $i;
342     } 
343    
344     foreach(array("Minute","Weekday","Hour","Day","Month") as $var){
345       $ret[$var] = $$var;
346     }
347     return($ret);
348   }
350 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
351 ?>