Take two:
[www-register-wizard.git] / application / controllers / conffile.php
1 <?php
2
3 require_once 'plc_login.php'; // Require login
4 require_once 'plc_session.php'; // Get session and API handles
5 global $plc, $api, $adm;
6
7 // Print header
8 require_once 'plc_drupal.php';
9
10 include 'plc_header.php';
11
12 // Common functions
13 require_once 'plc_functions.php';
14 require_once 'plc_sorts.php';
15 include 'plc_objects.php';
16
17
18 class Conffile extends Controller {
19         
20         function index()
21         {
22                 global $api, $plc;
23                 $all_conf_files= $api->GetConfFiles();
24                 print $api->error();
25                 $data = array();
26                 $data['all_conf_files'] = $all_conf_files;
27                 $data['api'] = $api;
28                 $data['stage'] = 1;
29
30                 $this->load->view('header', $data);
31                 $this->load->view('debug', $data);
32                 $this->load->view('ListConfFile', $data);
33                 $this->load->view('footer', $data);
34
35         }
36         function get_stage_data(&$data)
37         {
38                 global $api, $plc;
39                 $data['nodegroups'] = $api->GetNodeGroups();
40                 $data['nodes'] = $api->GetNodes(NULL, array('hostname', 'node_id'));
41                 return $data;
42         }
43         function convert_checked($val)
44         {
45                 if ( $val == "on" || $val == True )
46                 {
47                         print "CALLED CHECKED '$val' .<BR>";
48                         return True;
49                 } else {
50                         return False;
51                 }
52         }
53         function update($conf_file_id=-1)
54         {
55                 global $api, $plc;
56                 $conf_file_id = intval($conf_file_id);
57
58                 $this->load->helper(array('form', 'url'));
59                 $this->load->library('validation');
60                 $this->validation->set_error_delimiters('<span class="error">', '</span>');
61                 $data = array();
62
63                 $data['submit_caption'] = "Update";
64                 $data['title'] = "Update existing node configuration file";
65                 $data['conf_file_id'] = $conf_file_id;
66
67                 $fields['enabled']  = "Enabled";
68                 $fields['source']               = "Source";
69                 $fields['dest']  = "Destination";
70                 $fields['file_permissions']  = "File Permissions";
71                 $fields['file_owner']  = "File Owner";
72                 $fields['file_group']  = "File Group";
73                 $fields['preinstall_cmd']  = "Preinstall Command";
74                 $fields['postinstall_cmd']  = "Postinstall Command";
75                 $fields['error_cmd']  = "Error Command";
76                 $fields['ignore_cmd_errors']  = "Ignore Command Errors";
77                 $fields['always_update']  = "Always Update";
78                 $fields['scope']  = "ConfFile Scope";
79                 $fields['node_ids']  = "";
80                 $fields['nodegroup_ids']  = "";
81                 $this->validation->set_fields($fields);
82
83                 if( isset($_REQUEST['submitted']) )
84                 {
85                         print "SUBMITTED REQUEST";
86                         $rules['enabled']  = "trim";
87                         $rules['source']                = "trim|required";
88                         $rules['dest']  = "trim|required";
89                         $rules['file_permissions']  = "trim";
90                         $rules['file_owner']  = "trim";
91                         $rules['file_group']  = "trim";
92                         $rules['preinstall_cmd']  = "trim";
93                         $rules['postinstall_cmd']  = "trim";
94                         $rules['error_cmd']  = "trim";
95                         $rules['ignore_cmd_errors']  = "trim";
96                         $rules['always_update']  = "trim";
97                         $rules['scope']  = "trim";
98                         $rules['node_ids']  = "trim";
99                         $rules['nodegroup_ids']  = "trim";
100                         $this->validation->set_rules($rules);
101
102                         $error_occurred= 0;
103                         if ($this->validation->run() == TRUE)
104                         {
105                                 $data['enabled']                        =       $this->validation->enabled;
106                                 $data['source']                         =       $this->validation->source;
107                                 $data['dest']                           =       $this->validation->dest;
108                                 $data['file_permissions']       =       $this->validation->file_permissions;
109                                 $data['file_owner']                     =       $this->validation->file_owner;
110                                 $data['file_group']                     =       $this->validation->file_group;
111                                 $data['preinstall_cmd']         =       $this->validation->preinstall_cmd;
112                                 $data['postinstall_cmd']        =       $this->validation->postinstall_cmd;
113                                 $data['error_cmd']                      =       $this->validation->error_cmd;
114                                 $data['ignore_cmd_errors']      =       $this->validation->ignore_cmd_errors;
115                                 $data['always_update']          =       $this->validation->always_update;
116                                 $data['scope']                          =       $this->validation->scope;
117                                 $data['node_ids']                       =       array($this->validation->node_ids);
118                                 $data['nodegroup_ids']          =       array($this->validation->nodegroup_ids);
119
120                                 print "<br>";
121                                 print "ena: " . $data['enabled'] . "<br>";
122                                 print "ice: " . $data['ignore_cmd_errors'] . "<br>";
123                                 print "alu: " . $data['always_update'] . "<br>";
124                                 $conf_fields = array();
125
126                                 $data['enabled'] = $this->convert_checked($data['enabled']);
127                                 $data['ignore_cmd_errors'] = $this->convert_checked($data['ignore_cmd_errors']);
128                                 $data['always_update'] = $this->convert_checked($data['always_update']);
129
130                                 # TODO: UpdateConfFile does not honor the values of 'node_ids'
131                                 # and 'nodegroup_ids'.  These are read-only values.  Instead
132                                 # there needs to be a check to GetConfFile() followed by:
133                                 #   AddConfFileToNode(or Group) or,
134                                 #   DeleteConfFileFromNode(or Group) as appropriate.
135                                 # This would be easier to update in the API, but it's not
136                                 # clear if there are other semantics that are being honored by
137                                 # doing it the way that it currently is.
138
139                                 $return =       $api->UpdateConfFile($conf_file_id, $data);
140                                 if ($return != 1 ) {
141                                         print $api->error();
142                                 $error_occurred= 1;
143                                 }
144                                 $return =       $api->GetConfFiles(array($conf_file_id));
145                                 print "<pre>";
146                                 print_r($return );
147                                 print "</pre>";
148                                  
149                         } else {
150                                 print "VALIDATION FAILED<br>";
151                                 print $this->validation->error_string ;
152                                 print "VALIDATION FAILED<br>";
153                             $error_occurred= 1;
154                         }
155
156                         if( !$error_occurred )
157                         {
158                             $edit_finalized= 1;
159                             $finalized_message= "Successfully updated.";
160                         } 
161                 } else {
162
163                         $conf_file = $api->GetConfFiles(array(intval($conf_file_id)));
164                         if (empty($conf_file)) {
165                                 print $api->error();
166                         }
167                         $conf_file = $conf_file[0];
168
169                         $data['enabled']                        =       $conf_file['enabled'];
170                         $data['source']                         =       $conf_file['source'];
171                         $data['dest']                           =       $conf_file['dest'];
172                         $data['file_permissions']       =       $conf_file['file_permissions'];
173                         $data['file_owner']                     =       $conf_file['file_owner'];
174                         $data['file_group']                     =       $conf_file['file_group'];
175                         $data['preinstall_cmd']         =       $conf_file['preinstall_cmd'];
176                         $data['postinstall_cmd']        =       $conf_file['postinstall_cmd'];
177                         $data['error_cmd']                      =       $conf_file['error_cmd'];
178                         $data['ignore_cmd_errors']      =       $conf_file['ignore_cmd_errors'];
179                         $data['always_update']          =       $conf_file['always_update'];
180                         $data['node_ids']                       =       $conf_file['node_ids'];
181                         $data['nodegroup_ids']          =       $conf_file['nodegroup_ids'];
182
183                         if( count($data['nodegroup_ids']) == 0 && count($data['node_ids']) == 0 )
184                         {
185                                  $data['scope'] = "global";
186                         } else {                 
187                                 if( count($data['nodegroup_ids']) == 0 && is_numeric($data['node_ids'][0]) )
188                                 {
189                                         $data['scope'] = "node";
190                                 } elseif( count($data['node_ids']) == 0 && is_numeric($data['nodegroup_ids'][0]) )
191                                 {
192                                         $data['scope'] = "group";
193                                 }
194                         }
195                 }
196
197                 $data = $this->get_stage_data($data);
198
199                 $this->load->view('header', $data);
200                 $this->load->view('debug', $data);
201                 $this->load->view('UpdateConfFile', $data);
202                 $this->load->view('footer', $data);
203         }
204
205         function add()
206         {
207                 global $api, $plc;
208                 $this->load->helper(array('form', 'url'));
209                 $this->load->library('validation');
210                 $this->validation->set_error_delimiters('<span class="error">', '</span>');
211                 $data = array();
212
213                 $fields['enabled']  = "Enabled";
214                 $fields['source']               = "Source";
215                 $fields['dest']  = "Destination";
216                 $fields['file_permissions']  = "File Permissions";
217                 $fields['file_owner']  = "File Owner";
218                 $fields['file_group']  = "File Group";
219                 $fields['preinstall_cmd']  = "Preinstall Command";
220                 $fields['postinstall_cmd']  = "Postinstall Command";
221                 $fields['error_cmd']  = "Error Command";
222                 $fields['ignore_cmd_errors']  = "Ignore Command Errors";
223                 $fields['always_update']  = "Always Update";
224                 $fields['scope']  = "ConfFile Scope";
225                 $fields['node_ids']  = "";
226                 $fields['nodegroup_ids']  = "";
227                 $this->validation->set_fields($fields);
228
229                 if ( isset($_REQUEST['submitted']) )
230                 {
231                         $action= $_REQUEST["action"];
232                         $submitted= $_REQUEST["submitted"];
233                 } else {
234                         $action= 'default';
235                         $submitted= False;
236                 }
237
238                 $data['submit_caption']= "Create";
239                 $data['title'] = "Create new node configuration file";
240
241                 if(     $submitted      )
242                 {
243                         $rules['enabled']  = "trim|required|integer|intval";
244                         $rules['source']                = "trim|required";
245                         $rules['dest']  = "trim|required";
246                         $rules['file_permissions']  = "trim";
247                         $rules['file_owner']  = "trim";
248                         $rules['file_group']  = "trim";
249                         $rules['preinstall_cmd']  = "trim";
250                         $rules['postinstall_cmd']  = "trim";
251                         $rules['error_cmd']  = "trim";
252                         $rules['ignore_cmd_errors']  = "trim|integer|intval";
253                         $rules['always_update']  = "trim|integer|intval";
254                         $rules['scope']  = "trim";
255                         $rules['node_ids']  = "trim";
256                         $rules['nodegroup_ids']  = "trim";
257                         $this->validation->set_rules($rules);
258
259                         $data['enabled']                        =       $this->validation->enabled;
260                         $data['source']                         =       $this->validation->source;
261                         $data['dest']                           =       $this->validation->dest;
262                         $data['file_permissions']       =       $this->validation->file_permissions;
263                         $data['file_owner']                     =       $this->validation->file_owner;
264                         $data['file_group']                     =       $this->validation->file_group;
265                         $data['preinstall_cmd']         =       $this->validation->preinstall_cmd;
266                         $data['postinstall_cmd']        =       $this->validation->postinstall_cmd;
267                         $data['error_cmd']                      =       $this->validation->error_cmd;
268                         $data['ignore_cmd_errors']      =       $this->validation->ignore_cmd_errors;
269                         $data['always_update']          =       $this->validation->always_update;
270                         $data['scope']                          =       $this->validation->scope;
271                         $data['node_ids']                       =       array($this->validation->node_ids);
272                         $data['nodegroup_ids']          =       array($this->validation->nodegroup_ids);
273
274                         if ($this->validation->run() == TRUE)
275                         {
276                                 $conf_file_id = $api->AddConfFile($data);
277                                 if ($conf_file_id == -1 ) {
278                                         print $api->error();
279                                 }
280                         }
281
282                         if(     !$error_occurred        )
283                         {
284                                 $edit_finalized=        1;
285                                 $finalized_message=     "Successfully   created.";
286                         }
287                 } else {
288                         //      set     up      default values  for     a       new     one
289                         $data['enabled']                        =       0;
290                         $data['source']                         =       "";
291                         $data['dest']                           =       "";
292                         $data['file_permissions']       =       "644";
293                         $data['file_owner']                     =       "root";
294                         $data['file_group']                     =       "root";
295                         $data['preinstall_cmd']         =       "";
296                         $data['postinstall_cmd']        =       "";
297                         $data['error_cmd']                      =       "";
298                         $data['ignore_cmd_errors']      =       0;
299                         $data['always_update']          =       0;
300                         $data['scope']                          =       "global";
301                 }
302
303                 $data = $this->get_stage_data($data);
304
305                 $this->load->view('header', $data);
306                 $this->load->view('debug', $data);
307                 $this->load->view('AddConfFile', $data);
308                 $this->load->view('footer', $data);
309
310         }
311 }