ona  18.1.1
About: OpenNetAdmin provides a database managed inventory of your IP network (with Web and CLI interface).
  Fossies Dox: ona-18.1.1.tar.gz  ("inofficial" and yet experimental doxygen-generated source code documentation)  

display_config_text.inc.php
Go to the documentation of this file.
1 <?php
2 
3 // If we get called directly (via launch_app.php), call work_space, and tell it to call us back.
4 // Yes, it's more of Brandon's black magic ;)
5 $window['js'] = <<<EOL
6  removeElement('{$window_name}');
7  xajax_window_submit('work_space', 'xajax_window_submit(\'{$window_name}\', \'host_id=>{$_REQUEST['host_id']}\', \'display\')');
9 
10 
11 
12 
14 // Function: ws_display_list()
15 //
16 // Description:
17 // Displays a list of config text records in the work_space div.
18 // A host_id and config_type_id must be supplied.
20 function ws_display($window_name, $form='') {
21  global $conf, $self, $onadb, $baseURL;
22  global $images, $color, $style;
23  $html = '';
24  $js = '';
25  $debug_val = 3; // used in the auth() calls to supress logging
26 
27  // Dont display this if they dont have access
28  if (!auth('host_config_admin',$debug_val)) {
29  array_pop($_SESSION['ona']['work_space']['history']);
30  $html .= "<br><center><font color=\"red\"><b>You don't have access to this page</b></font></center>";
31  $response = new xajaxResponse();
32  $response->addAssign("work_space_content", "innerHTML", $html);
33  return($response->getXML());
34  }
35 
36  // If the user supplied an array in a string, build the array and store it in $form
37  $form = parse_options_string($form);
38 
39  if ($form['type_id']) {
40  list($status, $rows, $rec) = ona_get_config_type_record(array('id' => $form['type_id']));
41  $default_type = $rec['name'];
42  }
43 
44  // Load the host record
45  list($status, $rows, $host) = ona_find_host($form['host_id']);
46  if (!$host['id']) {
47  array_pop($_SESSION['ona']['work_space']['history']);
48  $html .= "<br><center><font color=\"red\"><b>Host doesn't exist!</b></font></center>";
49  $response = new xajaxResponse();
50  $response->addAssign("work_space_content", "innerHTML", $html);
51  return($response->getXML());
52  }
53 
54  // Get configurations info
55  list($status, $rows, $configs) = db_get_records($onadb,'configurations',array('host_id' => $host['id']),'ctime DESC');
56 
57 
58  // Update History Title (and tell the browser to re-draw the history div)
59  $history = array_pop($_SESSION['ona']['work_space']['history']);
60  $js .= "xajax_window_submit('work_space', ' ', 'rewrite_history');";
61  if ($history['title'] == $window_name) {
62  $history['title'] = "Configs: {$host['name']}";
63  array_push($_SESSION['ona']['work_space']['history'], $history);
64  }
65 
66  // Create some javascript to refresh the current page
67  $refresh = htmlentities(str_replace(array("'", '"'), array("\\'", '\\"'), $history['url']), ENT_QUOTES, $conf['php_charset']);
68  $refresh = "xajax_window_submit('work_space', '{$refresh}');";
69 
70  $style['content_box'] = <<<EOL
71  margin: 10px 20px;
72  padding: 2px 4px;
73  background-color: #FFFFFF;
74  vertical-align: top;
75 EOL;
76 
77  $style['label_box'] = <<<EOL
78  font-weight: bold;
79  padding: 2px 4px;
80  border: solid 1px {$color['border']};
81  background-color: {$color['window_content_bg']};
82 EOL;
83 
84  // Escape data for display in html
85  foreach(array_keys((array)$record) as $key) { $record[$key] = htmlentities($record[$key], ENT_QUOTES, $conf['php_charset']); }
86 
87  $html .= <<<EOL
88  <!-- FORMATTING TABLE -->
89  <div style="{$style['content_box']}">
90  <table cellspacing="0" border="0" cellpadding="0"><tr>
91 
92  <!-- START OF FIRST COLUMN OF SMALL BOXES -->
93  <td nowrap="true" valign="top" style="padding-right: 15px;">
94 EOL;
95 
96 
97  // Config archive INFORMATION
98  $html .= <<<EOL
99  <table width=100% cellspacing="0" border="0" cellpadding="0" style="margin-bottom: 8px;">
100 
101  <tr><td colspan="99" nowrap="true" style="{$style['label_box']}">
102  <!-- LABEL -->
103 
104  <b>Configuration archives for:</b>
105  <a title="View host. ID: {$host['id']}"
106  class="nav"
107  onClick="xajax_window_submit('work_space', 'xajax_window_submit(\'display_host\', \'host_id=>{$host['id']}\', \'display\')');"
108  >{$host['name']}</a
109  >.<a title="View domain. ID: {$host['domain_id']}"
110  class="domain"
111  onClick="xajax_window_submit('work_space', 'xajax_window_submit(\'display_domain\', \'domain_id=>{$host['domain_id']}\', \'display\')');"
112  >{$host['domain_fqdn']}</a>
113 
114 EOL;
115 
116 // TODO: fix this so it actually looks for a report list item like other reports do
117  $html .= <<<EOL
118  </td></tr>
119 
120  <tr>
121  <td class="padding" align="left">
122  <b>Cisco Config report:</b>&nbsp;
123  <a title="View report"
124  class="act"
125  onClick="xajax_window_submit('work_space', 'xajax_window_submit(\'display_report\', \'report=>cisco_cfg_audit,config=>{$host['fqdn']}\', \'display\')');"
126  >View Report</a></td>
127  </tr>
128 
129  </table>
130 EOL;
131  // END CONFIG INFORMATION
132 
133 
134  $html .= <<<EOL
135  <!-- END OF FIRST COLUMN OF SMALL BOXES -->
136  </td>
137 
138  </tr></table>
139  </div>
140  <!-- END OF TOP SECTION -->
141 EOL;
142 
143 
144 
145 
146 
147 
148 
149 
150 
151 
152 
153  // Config archive LIST
154  $tab = 'configs';
155  $submit_window = "list_{$tab}";
156  $form_id = "{$submit_window}_filter_form";
157  $_SESSION['ona'][$form_id]['tab'] = $tab;
158  $content_id = "{$window_name}_{$submit_window}";
159  $html .= <<<EOL
160  <!-- Archive LIST -->
161  <div style="border: 1px solid {$color['border']}; margin: 10px 20px;">
162 
163  <!-- Tab & Quick Filter -->
164  <table id="{$form_id}_table" cellspacing="0" border="0" cellpadding="0">
165  <tr>
166  <td id="{$form_id}_{$tab}_tab" class="table-tab-active">
167  Associated {$tab} <span id="{$form_id}_{$tab}_count"></span>
168  </td>
169 
170  <td id="{$form_id}_quick_filter" class="padding" align="right" width="100%">
171  <form id="{$form_id}" onSubmit="return false;">
172  <input id="{$form_id}_page" name="page" value="1" type="hidden">
173  <input name="content_id" value="{$content_id}" type="hidden">
174  <input name="form_id" value="{$form_id}" type="hidden">
175  <input name="host_id" value="{$host['id']}" type="hidden">
176  <div id="{$form_id}_filter_overlay"
177  title="Filter"
178  style="position: relative;
179  display: inline;
180  color: #CACACA;
181  cursor: text;"
182  onClick="this.style.display = 'none'; el('{$form_id}_filter').focus();"
183  ></div>
184  <input
185  id="{$form_id}_filter"
186  name="filter"
187  class="filter"
188  type="text"
189  value="{$default_type}"
190  size="15"
191  maxlength="20"
192  alt="Quick Filter"
193  onFocus="el('{$form_id}_filter_overlay').style.display = 'none';"
194  onBlur="if (this.value == '') el('{$form_id}_filter_overlay').style.display = 'inline';"
195  onKeyUp="
196  if (typeof(timer) != 'undefined') clearTimeout(timer);
197  code = 'if ({$form_id}_last_search != el(\'{$form_id}_filter\').value) {' +
198  ' {$form_id}_last_search = el(\'{$form_id}_filter\').value;' +
199  ' document.getElementById(\'{$form_id}_page\').value = 1;' +
200  ' xajax_window_submit(\'{$submit_window}\', xajax.getFormValues(\'{$form_id}\'), \'display_list\');' +
201  '}';
202  timer = setTimeout(code, 700);"
203  >
204  </form>
205  </td>
206 
207  </tr>
208  </table>
209 
210  <div id='{$content_id}'>
211  {$conf['loading_icon']}
212  </div>
213 
214  <!-- Tool LINKS -->
215  <div class="act-box" style="padding: 2px 4px; border-top: 1px solid {$color['border']}">
216 
217  <input type="button"
218  name="compare"
219  value="Compare selected configs"
220  class="button"
221  onClick="
222  var tmp = 1; var OLD = el('old' + tmp);
223  while (OLD) {
224  if (OLD.checked) break;
225  OLD = el('old' + tmp++);
226  }
227  var tmp = 1; var NEW = el('new' + tmp);
228  while (NEW) {
229  if (NEW.checked) break;
230  NEW = el('new' + tmp++);
231  }
232  if ((!OLD) || (!NEW))
233  alert('ERROR => You must select and old and new config to compare them!');
234  else
235  xajax_window_submit('work_space', 'xajax_window_submit(\'{$window_name}\', \'host_id=>{$form['host_id']}, old_id=>' + OLD.value + ',new_id=>' + NEW.value + '\', \'display\')');
236  ">
237  </div>
238 
239  </div>
240 
241 EOL;
242  $js .= <<<EOL
243  /* Setup the quick filter */
244  el('{$form_id}_filter_overlay').style.left = (el('{$form_id}_filter_overlay').offsetWidth + 10) + 'px';
245  {$form_id}_last_search = '';
246 
247  /* Tell the browser to load/display the list */
248  xajax_window_submit('{$submit_window}', xajax.getFormValues('{$form_id}'), 'display_list');
249 EOL;
250 
251  // If they have selected to display the config, show it
252  if ($form['displayconf']) {
253  list($status, $rows, $config) = ona_get_config_record(array('id' => $form['displayconf']));
254 
255  // Remove characters that will not display properly in a browser.. specifically CTRL-C and CTRL-G chars
256  $config['config_body'] = htmlentities(str_replace(array(chr(03),chr(07)),'', $config['config_body']), ENT_QUOTES,$conf['php_charset']);
257 
258  $html .= <<<EOL
259  <div style="margin: 10px 20px; background-color: {$color['bar_bg']}; border: 1px solid; height: 60px;">
260  <table cellspacing="0" border="0" cellpadding="2" align="left" style="font-size:small;">
261  <tr>
262  <td style="font-weight: bold;">Insert date:</td>
263  <td>{$config['ctime']}</td>
264  </tr>
265  <tr>
266  <td style="font-weight: bold;">Config type:</td>
267  <td>{$config['config_type_name']}</td>
268  </tr>
269  <tr>
270  <td style="font-weight: bold;">MD5:</td>
271  <td>{$config['md5_checksum']}</td>
272  </tr>
273  </table>
274  </div>
275  <div style="clear: both;"></div>
276  <div id="confoutputdiv" style="border: 1px solid rgb(26, 26, 26); margin: 10px 20px;padding-left: 8px;overflow-y: auto;">
277  <pre style='font-family: monospace;width: 50px;' id="confoutput">{$config['config_body']}</pre>
278  </div>
279 EOL;
280  }
281 
282 
283 
284 
285 
286 
287 
288  // If they have selected to display the diff mode
289  if ($form['old_id'] && $form['new_id']) {
290  // Load the old config text record
291  list($status, $rows, $old) = ona_get_config_record(array('id' => $form['old_id']));
292  if (!$old['id']) {
293  $html .= "<br><center><font color=\"red\"><b>Configuration text record doesn't exist!</b></font></center>";
294  }
295 
296  // Load the new config text record
297  list($status, $rows, $new) = ona_get_config_record(array('id' => $form['new_id']));
298  if (!$new['id']) {
299  $html .= "<br><center><font color=\"red\"><b>Configuration text record doesn't exist!</b></font></center>";
300  }
301 
302  // Load the asscoiated old host record
303  list($status, $rows, $old_host) = ona_find_host($old['host_id']);
304  if (!$old_host['id']) {
305  $html .= "<br><center><font color=\"red\"><b>Host doesn't exist!</b></font></center>";
306  }
307 
308  // Load the asscoiated new host record
309  list($status, $rows, $new_host) = ona_find_host($new['host_id']);
310  if (!$new_host['id']) {
311  $html .= "<br><center><font color=\"red\"><b>Host doesn't exist!</b></font></center>";
312  }
313 
314  // Update History Title
315  $history = array_pop($_SESSION['ona']['work_space']['history']);
316  $history['title'] = "Config diff ({$form['old_id']} / {$form['new_id']})";
317  array_push($_SESSION['ona']['work_space']['history'], $history);
318 
319  // Remove characters that will not display properly in a browser.. specifically CTRL-C chars
320  $old['config_body'] = htmlentities(str_replace(chr(03), "", $old['config_body']), ENT_QUOTES,$conf['php_charset']);
321  $new['config_body'] = htmlentities(str_replace(chr(03), "", $new['config_body']), ENT_QUOTES,$conf['php_charset']);
322 
323  // Display the config text diff
324  $html .= <<<EOL
325  <div style="margin: 10px 20px;">
326 
327  <!-- Diff Headers -->
328  <table width="100%" cellspacing="0" border="0" cellpadding="2" align="left" style="font-size:small;">
329  <tr>
330  <td align="left" style="background-color: {$color['bar_bg']};">
331  <table cellspacing="0" border="0" cellpadding="2" align="left" style="font-size:small;">
332  <tr>
333  <td style="font-weight: bold;">Host:</td>
334  <td>
335  <a title="View host. ID: {$old_host['id']}"
336  class="nav"
337  onClick="xajax_window_submit('work_space', 'xajax_window_submit(\'display_host\', \'host_id=>{$old_host['id']}\', \'display\')');"
338  >{$old_host['name']}</a
339  >.<a title="View domain. ID: {$old_host['domain_id']}"
340  class="domain"
341  onClick="xajax_window_submit('work_space', 'xajax_window_submit(\'display_domain\', \'domain_id=>{$old_host['domain_id']}\', \'display\')');"
342  >{$old_host['domain_fqdn']}</a>
343  </td>
344  </tr>
345  <tr>
346  <td style="font-weight: bold;">Insert date:</td>
347  <td>{$old['ctime']}</td>
348  </tr>
349  <tr>
350  <td style="font-weight: bold;">Config type:</td>
351  <td>{$old['config_type_name']}</td>
352  </tr>
353  <tr>
354  <td style="font-weight: bold;">MD5:</td>
355  <td>{$old['md5_checksum']}</td>
356  </tr>
357  <tr>
358  <td style="font-weight: bold;">Actions:</td>
359  <td>
360  <a title="View config"
361  class="nav"
362  onClick="xajax_window_submit('work_space', 'xajax_window_submit(\'{$window_name}\', \'host_id=>{$old_host['id']},displayconf=>{$old['id']}\', \'display\')');"
363  ><img src="{$images}/silk/zoom.png" alt="View config" border="0"></a>&nbsp;
364 
365  <a title="Download config" class="act" target="null" href="{$baseURL}/config_dnld.php?config_id={$old['id']}&download=1"
366  ><img src="{$images}/silk/disk.png" alt="Download config" border="0"></a>&nbsp;
367  </td>
368  </tr>
369  </table>
370  </td>
371  <td align="left" style="background-color: {$color['bar_bg']};">
372  <table cellspacing="0" border="0" cellpadding="2" align="left" style="font-size:small;">
373  <tr>
374  <td style="font-weight: bold;">Host:</td>
375  <td>
376  <a title="View host. ID: {$new_host['id']}"
377  class="nav"
378  onClick="xajax_window_submit('work_space', 'xajax_window_submit(\'display_host\', \'host_id=>{$new_host['id']}\', \'display\')');"
379  >{$new_host['name']}</a
380  >.<a title="View domain. ID: {$new_host['domain_id']}"
381  class="domain"
382  onClick="xajax_window_submit('work_space', 'xajax_window_submit(\'display_domain\', \'domain_id=>{$new_host['domain_id']}\', \'display\')');"
383  >{$new_host['domain_fqdn']}</a>
384  </td>
385  </tr>
386  <tr>
387  <td style="font-weight: bold;">Insert date:</td>
388  <td>{$new['ctime']}</td>
389  </tr>
390  <tr>
391  <td style="font-weight: bold;">Config type:</td>
392  <td>{$new['config_type_name']}</td>
393  </tr>
394  <tr>
395  <td style="font-weight: bold;">MD5:</td>
396  <td>{$new['md5_checksum']}</td>
397  </tr>
398  <tr>
399  <td style="font-weight: bold;">Actions:</td>
400  <td>
401  <a title="View config"
402  class="nav"
403  onClick="xajax_window_submit('work_space', 'xajax_window_submit(\'{$window_name}\', \'host_id=>{$new_host['id']},displayconf=>{$new['id']}\', \'display\')');"
404  ><img src="{$images}/silk/zoom.png" alt="View config" border="0"></a>&nbsp;
405 
406  <a title="Download config" class="act" target="null" href="{$baseURL}/config_dnld.php?config_id={$new['id']}&download=1"
407  ><img src="{$images}/silk/disk.png" alt="Download config" border="0"></a>&nbsp;
408  </td>
409  </tr>
410  </table>
411  </td>
412  </tr>
413  <tr>
414  <td colspan="2">
415 EOL;
416 
417  // Display the diff
418  $html .= html_diff(html_entity_decode($old['config_body'],ENT_QUOTES,$conf['php_charset']), html_entity_decode($new['config_body'],ENT_QUOTES,$conf['php_charset']), "Config A", "Config B", 0);
419 
420  $html .= <<<EOL
421  </td>
422  </tr>
423  </table>
424  </div>
425 EOL;
426 
427 }
428 
429 
430 
431  // Insert the new html into the window
432  // Instantiate the xajaxResponse object
433  $response = new xajaxResponse();
434  $response->addAssign("work_space_content", "innerHTML", $html);
435  if ($js) { $response->addScript($js); }
436  return($response->getXML());
437 }
438 
439 
440 
441 
442 //MP: TODO this delete stuff should be in configuration.inc.php module!!!!!!
443 
444 
446 // Function: ws_delete_config()
447 //
448 // Description:
449 // Deletes a single config text record
451 function ws_delete_config($window_name, $form='') {
452  global $conf, $self, $onadb;
453  global $images, $color, $style;
454 
455  // If the user supplied an array in a string, build the array and store it in $form
456  $form = parse_options_string($form);
457 
458  // Load the config text record
459  list($status, $rows, $config) = ona_get_config_record(array('id' => $form['config_id']));
460  if (!$config['id']) {
461  array_pop($_SESSION['ona']['work_space']['history']);
462  $html .= "<br><center><font color=\"red\"><b>Configuration text record doesn't exist!</b></font></center>";
463  $response = new xajaxResponse();
464  $response->addAssign("work_space_content", "innerHTML", $html);
465  return($response->getXML());
466  }
467 
468  // Load the asscoiated host record
469  list($status, $rows, $host) = ona_find_host($config['host_id']);
470  if (!$host['id']) {
471  array_pop($_SESSION['ona']['work_space']['history']);
472  $html .= "<br><center><font color=\"red\"><b>Host doesn't exist!</b></font></center>";
473  $response = new xajaxResponse();
474  $response->addAssign("work_space_content", "innerHTML", $html);
475  return($response->getXML());
476  }
477 
478  // Check permissions
479  if (! (auth('host_config_admin') and authlvl($host['lvl'])) ) {
480  $response = new xajaxResponse();
481  $response->addScript("alert('Permission denied!');");
482  return($response->getXML());
483  }
484 
485  // Delete the config text
486 
487  // FIXME, this should probably use a module, but there isn't one!
488 
489  list($status, $rows) = db_delete_records($onadb, 'configurations', array('id' => $config['id']));
490  if ($status or !$rows) {
491  $response = new xajaxResponse();
492  $response->addScript("alert('Delete failed!');");
493  return($response->getXML());
494  }
495 
496 
497  // Insert the new html into the window
498  // Instantiate the xajaxResponse object
499  $response = new xajaxResponse();
500  if ($form['js']) { $response->addScript($form['js']); }
501  return($response->getXML());
502 }
503 
504 
505 
506 
507 
508 
509 
510 
511 
512 
513 
514 
515 
516 
517 
519 // Function: ws_delete_configs()
520 //
521 // Description:
522 // Deletes all the config records for a particular host and type
524 function ws_delete_configs($window_name, $form='') {
525  global $conf, $self, $onadb;
526  global $images, $color, $style;
527 
528  // If the user supplied an array in a string, build the array and store it in $form
529  $form = parse_options_string($form);
530 
531  // Load the host record
532  list($status, $rows, $host) = ona_find_host($form['host_id']);
533  if (!$host['id']) {
534  array_pop($_SESSION['ona']['work_space']['history']);
535  $html .= "<br><center><font color=\"red\"><b>Host doesn't exist!</b></font></center>";
536  $response = new xajaxResponse();
537  $response->addAssign("work_space_content", "innerHTML", $html);
538  return($response->getXML());
539  }
540 
541  // Check permissions
542  if (! (auth('host_config_admin') and authlvl($host['lvl'])) ) {
543  $response = new xajaxResponse();
544  $response->addScript("alert('Permission denied!');");
545  return($response->getXML());
546  }
547 
548  // Load the config type
549  list($status, $rows, $type) = ona_get_config_type_record(array('id' => $form['type_id']));
550  if ($status or !$rows) {
551  $response = new xajaxResponse();
552  $response->addScript("alert('ERROR => Invalid config type!');");
553  return($response->getXML());
554  }
555 
556 
557  // Delete the config text records that match
558  // FIXME, this should probably use a module, but there isn't one!
559  list($status, $rows) = db_delete_records($onadb, 'configurations', array('host_id' => $host['id'], 'configuration_type_id' => $type['id']));
560  if ($status or !$rows) {
561  $response = new xajaxResponse();
562  $response->addScript("alert('Delete failed!');");
563  return($response->getXML());
564  }
565 
566  // Insert the new html into the window
567  // Instantiate the xajaxResponse object
568  $response = new xajaxResponse();
569  if ($form['js']) { $response->addScript($form['js']); }
570  return($response->getXML());
571 }
572 
573 
574 
575 
576 
577 
578 
579 
580 
581 
582 
583 
584 
585 
586 
587 
588 ?>
ona_find_host
ona_find_host($search="")
Definition: functions_db.inc.php:1490
$record
$record['display_name']
Definition: app_advanced_search.inc.php:12
db_get_records
db_get_records($dbh=0, $table="", $where="", $order="", $rows=-1, $offset=-1)
Definition: functions_db.inc.php:891
$status
$status
Definition: install.php:12
$onadb
global $onadb
Definition: 2-to-3.php:15
xajax
EOL
EOL
Definition: display_config_text.inc.php:8
$tab
$tab
Definition: app_config_type_list.inc.php:29
db_delete_records
db_delete_records($dbh=0, $table="", $where="")
Definition: functions_db.inc.php:582
ws_display
ws_display($window_name, $form='')
Definition: display_config_text.inc.php:20
$baseURL
$baseURL
Definition: config.inc.php:25
$type
$type
Definition: dcm.php:17
authlvl
authlvl($level)
Definition: functions_general.inc.php:1349
$host
$host
Definition: collate-convert.php:19
$form_id
$form_id
Definition: app_config_type_list.inc.php:28
$images
$images
Definition: config.inc.php:26
$window
$window['js']
Definition: display_config_text.inc.php:5
$submit_window
$submit_window
Definition: app_config_type_list.inc.php:30
$_SESSION
$_SESSION['ona']['auth']
Definition: login.php:14
$conf
global $conf
Definition: 2-to-3.php:15
xajaxResponse
Definition: xajaxResponse.inc.php:68
$content_id
$content_id
Definition: app_config_type_list.inc.php:31
$style
$style['font-family']
Definition: config.inc.php:158
ws_delete_configs
ws_delete_configs($window_name, $form='')
Definition: display_config_text.inc.php:524
nbsp
& nbsp
Definition: install.php:36
html_diff
html_diff($old, $new, $oldname='', $newname='', $stdout=1)
Definition: functions_general.inc.php:1667
$self
global $self
Definition: 2-to-3.php:15
ona_get_config_type_record
ona_get_config_type_record($array='', $order='')
Definition: functions_db.inc.php:1171
auth
auth($resource, $msg_level=1)
Definition: functions_general.inc.php:1330
ws_delete_config
ws_delete_config($window_name, $form='')
Definition: display_config_text.inc.php:451
ona_get_config_record
ona_get_config_record($array='', $order='ctime DESC')
Definition: functions_db.inc.php:1160
$color
if($_SERVER['SERVER_PORT']==443) $color['bg']
Definition: config.inc.php:119
parse_options_string
parse_options_string($input)
Definition: xajax_setup.inc.php:88
Diff
Definition: DifferenceEngine.php:492