3 /**************************************************************************
4 ** (c) Copyright 2003, Andromeda Technology & Automation
5 ** This is free software; you can redistribute it and/or modify it under the
6 ** terms of the GNU General Public License, see the file COPYING.
7 ***************************************************************************
8 ** MODULE INFORMATION *
9 ***********************
10 ** FILE NAME : parameter.php
11 ** SYSTEM NAME : Gnucomo - Gnu Computer Monitoring
12 ** VERSION NUMBER : $Revision: 1.9 $
14 ** DESCRIPTION : Parameter administration for a specific object.
15 ** Input - GET[oid] : Object id
20 ***************************************************************************
21 ** ADMINISTRATIVE INFORMATION *
22 ********************************
23 ** ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
24 ** CREATION DATE : Dec 04, 2002
25 ** LAST UPDATE : Aug 04, 2003
27 **************************************************************************/
29 /*****************************
30 $Log: parameter.php,v $
31 Revision 1.9 2007-11-21 14:38:06 arjen
32 The buttonbar at the top of each page is now a fixed 'div' element
33 instead of a framed page.
34 Contributed by Edwin Nadorp.
36 Revision 1.8 2007/01/11 13:44:29 arjen
37 Manually edit parameters.
38 View logs from abusing IP addresses.
40 Revision 1.7 2003/12/03 08:03:28 arjen
41 Optionally show or hide removed parameters from the parameter
44 Revision 1.6 2003/08/14 10:33:01 arjen
45 Added performance measurement.
47 Revision 1.5 2003/07/15 11:06:45 arjen
48 Removed parameters are displayed in a shaded style.
50 Revision 1.4 2003/02/21 08:50:12 arjen
51 Database optimizations.
53 Revision 1.3 2003/02/13 09:01:29 arjen
54 All web interface pages use the page class.
56 Revision 1.2 2003/02/05 09:47:39 arjen
57 Display the difference of all package class parameters for two objects
59 ******************************/
61 // RCSID = "$Id: parameter.php,v 1.9 2007-11-21 14:38:06 arjen Exp $";
64 ini_set('include_path', '.:./classes:../phpclasses');
66 require_once('page.class.php');
71 function getmicrotime()
73 list ($usec, $sec) = explode(" ", microtime());
74 return (float)$sec + (float)$usec;
77 function object_selection($db, $skip_oid)
79 /* Create and print an HTML option list of objects */
81 $res = pg_exec("SELECT objectid, objectname FROM object WHERE objectid != "
82 . $skip_oid . "ORDER BY objectname");
83 for ($row = 0; $row < pg_numrows($res); $row++)
85 $obj = pg_fetch_object($res, $row);
86 echo "<option value='" . $obj->objectid . "'>";
87 echo $obj->objectname;
92 class param_page extends page
98 if (!empty($_GET['oid']))
100 $ObjId = $_GET['oid'];
102 $res = pg_exec($this->database, "SELECT objectname FROM object WHERE objectid=CAST('" . $ObjId ."' AS BIGINT)");
103 $obj = pg_fetch_object($res, 0);
104 echo "<script type='text/ecmascript'>document.getElementById('menu_title').innerHTML = '<h1>Parameters for " . $obj->objectname . "<\/h1>'</script><br>";
106 if( isset($_POST['action']) ) {
107 echo "Action = " . $_POST['action'] . "<br>";
109 // See if we have an update for the database
110 if (isset($_POST['action']) && $_POST['action'] == 'Create Parameter')
112 $name = $_POST['paramname'];
113 $class = $_POST['paramclass'];
114 $description = $_POST['paramdescr'];
116 echo "<h2>Creating parameter $name of class $class.</h2>";
118 echo "<form action='parameter.php?oid=$ObjId' method='post'>";
119 echo "<input type='hidden' name='paramclass' value='$class'>";
120 echo "<input type='hidden' name='paramname' value='$name'>";
121 echo "Description : <input type='text' name='paramdescr' value='$description'>";
124 echo "<tr><th>Property</th><th>Description</th><th>Value</th></tr>";
126 $class_res = pg_exec($this->database, "SELECT * FROM parameter_class WHERE name='$class'");
127 for ($row = 0; $row < pg_numrows($class_res); $row++)
129 $prop = pg_fetch_object($class_res, $row);
131 echo "<td>", $prop->property_name, "</td><td>", $prop->description, "</td>";
132 echo "<td><input type='text' name='" . $prop->property_name . "'></td>";
136 echo "<input type='submit' name='action' value='Save New Parameter'>";
140 if (isset($_POST['action']) && $_POST['action'] == 'Save New Parameter')
142 $name = $_POST['paramname'];
143 $class = $_POST['paramclass'];
144 $description = $_POST['paramdescr'];
146 echo "<h2>Saving new parameter $name of class $class.</h2>";
148 echo "Description : $description";
151 $insertion = "insert into parameter (objectid, name, class, description) values ";
152 $insertion .= "('$ObjId', '$name', '$class', '$description')";
153 pg_exec($this->database, $insertion);
154 $par = pg_fetch_object(pg_exec($this->database, "select currval('paramid_seq')"), 0);
157 echo "<tr><th>Property</th><th>Description</th><th>Value</th></tr>";
159 $class_res = pg_exec($this->database, "SELECT * FROM parameter_class WHERE name='$class'");
160 for ($row = 0; $row < pg_numrows($class_res); $row++)
162 $prop = pg_fetch_object($class_res, $row);
163 $insertion = "insert into property (paramid, name, value, type, min, max) values ('";
164 $insertion .= $par->currval . "', '" . $prop->property_name . "', '";
165 $insertion .= $_POST[$prop->property_name] . "', '" . $prop->property_type . "', '";
166 $insertion .= $prop->min . "', '" . $prop->max . "')";
168 pg_exec($this->database, $insertion);
170 $insertion = "insert into history (paramid, modified, change_nature, changed_property, new_value)";
171 $insertion .= " values ('" . $par->currval . "', '";
172 $insertion .= date('Y-m-d H:i:s') . "', 'CREATED', '";
173 $insertion .= $prop->property_name . "', '" . $_POST[$prop->property_name] . "')";
175 pg_exec($this->database, $insertion);
178 echo "<td>", $prop->property_name, "</td><td>", $prop->description, "</td>";
179 echo "<td>" . $_POST[$prop->property_name] . "</td>";
187 <form action='parameter_compare.php' method='post'>
188 <input type='hidden' name='oid' value='<?php echo $ObjId ?>'>
190 <select name='compare_to'>
191 <?php object_selection($this->database, $ObjId ); ?>
193 <input type='hidden' name='class' value='package'>
194 <input type='checkbox' name='show_removed' value='on'>Show removed parameters
195 <input type='submit' value=' Show Difference'>
201 $start_time = getmicrotime();
202 $res = pg_exec($this->database, "SELECT paramid, class, name, description FROM parameter "
203 ."WHERE objectid= CAST('" . $ObjId . "' AS BIGINT) order by class, name");
204 while ($row < pg_numrows($res))
206 $par = pg_fetch_object($res, $row);
207 $qry ="select change_nature from history where paramid= CAST('";
208 $qry .= $par->paramid . "' AS BIGINT) order by modified desc";
209 $rhist = pg_exec($this->database, $qry);
210 $hist = pg_fetch_object($rhist, 0);
211 if ($hist->change_nature != "REMOVED")
214 <tr><td align='center'>
215 <?php echo $par->class?>
217 <?php echo "<a href=\"parameter.php?paramid=" . $par->paramid . "\">" . $par->name . "</a>"?>
219 <?php echo $par->description?>
222 $r = pg_exec($this->database, "SELECT name, value FROM property
223 WHERE paramid=CAST('" . $par->paramid . "' AS BIGINT)");
224 for ($p = 0; $p < pg_numrows($r); $p++)
226 $prop = pg_fetch_object($r, $p);
227 echo $prop->name . "=" . $prop->value . " ";
236 $duration = getmicrotime() - $start_time;
238 echo "$row parameters in " . round($duration, 3) . " seconds (";
239 echo round($duration / $row * 1000, 3) . " milliseconds per parameter).<br>";
241 <h2>Create new parameter:</h2>
242 <form action='parameter.php?oid=<?php echo $ObjId ?>' method='post'>
243 Class : <input type='text' name='paramclass'>
244 Name : <input type='text' name='paramname'>
245 Description : <input type='text' name='paramdescr'>
247 <input type='submit' name='action' value='Create Parameter'>
251 if (!empty($_GET['paramid']))
253 // Edit a specific parameter
255 $paramid = $_GET['paramid'];
256 $par = pg_fetch_object(pg_exec($this->database, "SELECT * FROM parameter WHERE paramid='$paramid'"), 0);
258 if (isset($_POST['action']) && $_POST['action'] == 'Update Parameter')
260 // Update each property if its value has changed
262 $class_res = pg_exec($this->database, "SELECT * FROM parameter_class WHERE name='" . $par->class . "'");
263 for ($row = 0; $row < pg_numrows($class_res); $row++)
265 $prop = pg_fetch_object($class_res, $row);
266 $pname = $prop->property_name;
267 $property = pg_fetch_object(pg_exec($this->database,
268 "SELECT value FROM property WHERE paramid='$paramid' AND name='$pname'"), 0);
269 $pvalue = $property->value;
270 if ($pvalue != $_POST[$pname])
272 $pvalue = $_POST[$pname];
274 pg_exec($this->database, "UPDATE property SET value='$pvalue' WHERE paramid='$paramid' AND name='$pname'");
276 $insertion = "insert into history (paramid, modified, change_nature, changed_property, new_value)";
277 $insertion .= " values ('" . $paramid . "', '";
278 $insertion .= date('Y-m-d H:i:s') . "', 'MODIFIED', '";
279 $insertion .= $pname . "', '" . $pvalue . "')";
281 pg_exec($this->database, $insertion);
286 echo "<h1>Parameter " . $par->name . " of class " . $par->class . "</h1>\n";
288 echo "<form action='parameter.php?paramid=$paramid' method='post'>\n";
289 echo "Description : <input type='text' name='paramdescr' value='" . $par->description . "'>\n";
292 echo "<tr><th>Property</th><th>Description</th><th>Value</th></tr>\n";
294 $class_res = pg_exec($this->database, "SELECT * FROM parameter_class WHERE name='" . $par->class . "'");
295 for ($row = 0; $row < pg_numrows($class_res); $row++)
297 $prop = pg_fetch_object($class_res, $row);
298 $pname = $prop->property_name;
299 $property = pg_fetch_object(pg_exec($this->database,
300 "SELECT value FROM property WHERE paramid='$paramid' AND name='$pname'"), 0);
301 $pvalue = $property->value;
303 echo "<td>", $pname, "</td><td>", $prop->description, "</td>";
304 echo "<td><input type='text' name='$pname' value='$pvalue'></td>";
308 echo "<input type='submit' name='action' value='Update Parameter'>\n";
311 echo "<h2>Change history for " . $par->class . " parameter " . $par->name . "</h2>";
313 $histres = pg_exec($this->database, "SELECT * FROM history WHERE paramid='$paramid' ORDER BY modified");
315 for ($row = 0; $row < pg_numrows($histres); $row++)
317 $hist = pg_fetch_object($histres, $row);
319 echo "<td>" . $hist->changed_property . "</td>";
320 echo "<td>" . $hist->modified . "</td>";
321 echo "<td>" . $hist->change_nature . "</td>";
322 echo "<td>" . $hist->new_value . "</td>";
330 $page = new param_page("Gnucomo Parameters");