<?php
/**************************************************************************
+** (c) Copyright 2003, Andromeda Technology & Automation
** This is free software; you can redistribute it and/or modify it under the
** terms of the GNU General Public License, see the file COPYING.
-***************************************************************************/
+***************************************************************************
+** MODULE INFORMATION *
+***********************
+** FILE NAME : parameter.php
+** SYSTEM NAME : Gnucomo - Gnu Computer Monitoring
+** VERSION NUMBER : $Revision: 1.8 $
+**
+** DESCRIPTION : Parameter administration for a specific object.
+** Input - GET[oid] : Object id
+**
+** EXPORTED OBJECTS :
+** LOCAL OBJECTS :
+** MODULES USED :
+***************************************************************************
+** ADMINISTRATIVE INFORMATION *
+********************************
+** ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
+** CREATION DATE : Dec 04, 2002
+** LAST UPDATE : Aug 04, 2003
+** MODIFICATIONS :
+**************************************************************************/
-/*
- *
- * Objects Administration page.
- * Input parameters: action (POST) : empty, 'Create'
- * objname (POST) : name of the object to create or remove
- */
+/*****************************
+ $Log: parameter.php,v $
+ Revision 1.8 2007-01-11 13:44:29 arjen
+ Manually edit parameters.
+ View logs from abusing IP addresses.
+
+ Revision 1.7 2003/12/03 08:03:28 arjen
+ Optionally show or hide removed parameters from the parameter
+ comparison page.
+
+ Revision 1.6 2003/08/14 10:33:01 arjen
+ Added performance measurement.
+
+ Revision 1.5 2003/07/15 11:06:45 arjen
+ Removed parameters are displayed in a shaded style.
+
+ Revision 1.4 2003/02/21 08:50:12 arjen
+ Database optimizations.
+
+ Revision 1.3 2003/02/13 09:01:29 arjen
+ All web interface pages use the page class.
+
+ Revision 1.2 2003/02/05 09:47:39 arjen
+ Display the difference of all package class parameters for two objects
+
+******************************/
+
+// RCSID = "$Id: parameter.php,v 1.8 2007-01-11 13:44:29 arjen Exp $";
+
+
+ini_set('include_path', '.:./classes:../phpclasses');
+
+require_once('page.class.php');
-session_start();
-require_once('classes/gnucomo_config.php');
/* Local functions */
+function getmicrotime()
+{
+ list ($usec, $sec) = explode(" ", microtime());
+ return (float)$sec + (float)$usec;
+}
+
function object_selection($db, $skip_oid)
{
/* Create and print an HTML option list of objects */
- $res = pg_exec("SELECT objectid, objectname FROM object WHERE objectid != " . $skip_oid);
+ $res = pg_exec("SELECT objectid, objectname FROM object WHERE objectid != "
+ . $skip_oid . "ORDER BY objectname");
for ($row = 0; $row < pg_numrows($res); $row++)
{
$obj = pg_fetch_object($res, $row);
echo "</option>";
}
}
-?>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<link rel='stylesheet' href='gnucomo.css' type='text/css'>
-<title>GNUCoMo login</title>
-<script language='JavaScript'>
-function CheckCreate(f)
+class param_page extends page
{
- if (f.objectname.value == "")
+
+ function Body()
{
- alert("You must supply a name");
- return false;
- }
- return true;
-}
-function CheckRemove(f)
-{
- var message = "Are you sure you want to remove object ";
- message += f.objectname.value;
- message += " ?";
+ if (!empty($_GET['oid']))
+ {
+ $ObjId = $_GET['oid'];
- return confirm(message);
-}
+ $res = pg_exec($this->database, "SELECT objectname FROM object WHERE objectid=CAST('" . $ObjId ."' AS BIGINT)");
+ $obj = pg_fetch_object($res, 0);
+ echo "<h1>Parameters for " . $obj->objectname . "</h1>";
-</script>
+ echo "Action = " . $_POST['action'] . "<br>";
+ // See if we have an update for the database
+ if (isset($_POST['action']) && $_POST['action'] == 'Create Parameter')
+ {
+ $name = $_POST['paramname'];
+ $class = $_POST['paramclass'];
+ $description = $_POST['paramdescr'];
-</head>
-<body>
-<?php
-if (empty($_SESSION['username']))
-{
- echo "Please log in first.";
-}
-else
-{
+ echo "<h2>Creating parameter $name of class $class.</h2>";
- $config = new gnucomo_config;
+ echo "<form action='parameter.php?oid=$ObjId' method='post'>";
+ echo "<input type='hidden' name='paramclass' value='$class'>";
+ echo "<input type='hidden' name='paramname' value='$name'>";
+ echo "Description : <input type='text' name='paramdescr' value='$description'>";
+ echo "<br>";
+ echo "<table>";
+ echo "<tr><th>Property</th><th>Description</th><th>Value</th></tr>";
- $config->read("gnucomo");
+ $class_res = pg_exec($this->database, "SELECT * FROM parameter_class WHERE name='$class'");
+ for ($row = 0; $row < pg_numrows($class_res); $row++)
+ {
+ $prop = pg_fetch_object($class_res, $row);
+ echo "<tr>";
+ echo "<td>", $prop->property_name, "</td><td>", $prop->description, "</td>";
+ echo "<td><input type='text' name='" . $prop->property_name . "'></td>";
+ echo "</tr>";
+ }
+ echo "</table>";
+ echo "<input type='submit' name='action' value='Save New Parameter'>";
+ echo "</form>";
+ }
- // Connect to the database
- $conn = pg_connect($config->Database($_SESSION['username'], $_SESSION['password']));
+ if (isset($_POST['action']) && $_POST['action'] == 'Save New Parameter')
+ {
+ $name = $_POST['paramname'];
+ $class = $_POST['paramclass'];
+ $description = $_POST['paramdescr'];
- if (!empty($_GET['oid']))
- {
- $res = pg_exec($conn, "SELECT objectname FROM object WHERE objectid=" . $_GET['oid']);
- $obj = pg_fetch_object($res, 0);
- echo "<h1>Parameters for " . $obj->objectname . "</h1>";
+ echo "<h2>Saving new parameter $name of class $class.</h2>";
+
+ echo "Description : $description";
+ echo "<br>";
+
+ $insertion = "insert into parameter (objectid, name, class, description) values ";
+ $insertion .= "('$ObjId', '$name', '$class', '$description')";
+ pg_exec($this->database, $insertion);
+ $par = pg_fetch_object(pg_exec($this->database, "select currval('paramid_seq')"), 0);
+
+ echo "<table>";
+ echo "<tr><th>Property</th><th>Description</th><th>Value</th></tr>";
+
+ $class_res = pg_exec($this->database, "SELECT * FROM parameter_class WHERE name='$class'");
+ for ($row = 0; $row < pg_numrows($class_res); $row++)
+ {
+ $prop = pg_fetch_object($class_res, $row);
+ $insertion = "insert into property (paramid, name, value, type, min, max) values ('";
+ $insertion .= $par->currval . "', '" . $prop->property_name . "', '";
+ $insertion .= $_POST[$prop->property_name] . "', '" . $prop->property_type . "', '";
+ $insertion .= $prop->min . "', '" . $prop->max . "')";
+
+ pg_exec($this->database, $insertion);
+
+ $insertion = "insert into history (paramid, modified, change_nature, changed_property, new_value)";
+ $insertion .= " values ('" . $par->currval . "', '";
+ $insertion .= date('Y-m-d H:i:s') . "', 'CREATED', '";
+ $insertion .= $prop->property_name . "', '" . $_POST[$prop->property_name] . "')";
+
+ pg_exec($this->database, $insertion);
+
+ echo "<tr>";
+ echo "<td>", $prop->property_name, "</td><td>", $prop->description, "</td>";
+ echo "<td>" . $_POST[$prop->property_name] . "</td>";
+ echo "</tr>";
+ }
+ echo "</table>";
+ }
- $res = pg_exec("SELECT paramid, class, name, description FROM parameter "
- ."WHERE objectid=" . $_GET['oid']);
?>
<form action='parameter_compare.php' method='post'>
- <input type='hidden' name='oid' value='<?php echo $_GET['oid'] ?>'>
+ <input type='hidden' name='oid' value='<?php echo $ObjId ?>'>
Compare to object:
- <select>
- <?php object_selection($conn, $_GET['oid']); ?>
+ <select name='compare_to'>
+ <?php object_selection($this->database, $ObjId ); ?>
</select>
+ <input type='hidden' name='class' value='package'>
+ <input type='checkbox' name='show_removed' value='on'>Show removed parameters
<input type='submit' value=' Show Difference'>
</form>
<?php
echo "<hr>";
echo "<table>";
$row = 0;
+ $start_time = getmicrotime();
+ $res = pg_exec($this->database, "SELECT paramid, class, name, description FROM parameter "
+ ."WHERE objectid= CAST('" . $ObjId . "' AS BIGINT) order by class, name");
while ($row < pg_numrows($res))
{
$par = pg_fetch_object($res, $row);
- ?>
- <tr><td align='center'>
- <?php echo $par->class?>
- </td><td>
- <?php echo $par->name?>
- </td><td>
- <?php echo $par->description?>
- </td><td>
- <?php
- $r = pg_exec($conn, "SELECT name, value FROM property WHERE paramid='" . $par->paramid . "'");
- for ($p = 0; $p < pg_numrows($r); $p++)
- {
- $prop = pg_fetch_object($r, $p);
- echo $prop->name . "=" . $prop->value . " ";
- }
+ $qry ="select change_nature from history where paramid= CAST('";
+ $qry .= $par->paramid . "' AS BIGINT) order by modified desc";
+ $rhist = pg_exec($this->database, $qry);
+ $hist = pg_fetch_object($rhist, 0);
+ if ($hist->change_nature != "REMOVED")
+ {
?>
- </td></tr>
- <?php
+ <tr><td align='center'>
+ <?php echo $par->class?>
+ </td><td>
+ <?php echo "<a href=parameter.php?paramid=" . $par->paramid . ">" . $par->name . "</a>"?>
+ </td><td>
+ <?php echo $par->description?>
+ </td><td>
+ <?php
+ $r = pg_exec($this->database, "SELECT name, value FROM property
+ WHERE paramid=CAST('" . $par->paramid . "' AS BIGINT)");
+ for ($p = 0; $p < pg_numrows($r); $p++)
+ {
+ $prop = pg_fetch_object($r, $p);
+ echo $prop->name . "=" . $prop->value . " ";
+ }
+ ?>
+ </td></tr>
+ <?php
+ }
$row++;
}
echo "</table>";
+ $duration = getmicrotime() - $start_time;
+
+ echo "$row parameters in " . round($duration, 3) . " seconds (";
+ echo round($duration / $row * 1000, 3) . " milliseconds per parameter).<br>";
+ ?>
+ <h2>Create new parameter:</h2>
+ <p>
+ <form action='parameter.php?oid=<?php echo $ObjId ?>' method='post'>
+ Class : <input type='text' name='paramclass'>
+ Name : <input type='text' name='paramname'>
+ Description : <input type='text' name='paramdescr'>
+ <br>
+ <input type='submit' name='action' value='Create Parameter'>
+ </form>
+ </p>
+ <?php
+ }
+ if (!empty($_GET['paramid']))
+ {
+ // Edit a specific parameter
+
+ $paramid = $_GET['paramid'];
+ $par = pg_fetch_object(pg_exec($this->database, "SELECT * FROM parameter WHERE paramid='$paramid'"), 0);
+
+ if (isset($_POST['action']) && $_POST['action'] == 'Update Parameter')
+ {
+ // Update each property if its value has changed
+
+ $class_res = pg_exec($this->database, "SELECT * FROM parameter_class WHERE name='" . $par->class . "'");
+ for ($row = 0; $row < pg_numrows($class_res); $row++)
+ {
+ $prop = pg_fetch_object($class_res, $row);
+ $pname = $prop->property_name;
+ $property = pg_fetch_object(pg_exec($this->database,
+ "SELECT value FROM property WHERE paramid='$paramid' AND name='$pname'"), 0);
+ $pvalue = $property->value;
+ if ($pvalue != $_POST[$pname])
+ {
+ $pvalue = $_POST[$pname];
+
+ pg_exec($this->database, "UPDATE property SET value='$pvalue' WHERE paramid='$paramid' AND name='$pname'");
+
+ $insertion = "insert into history (paramid, modified, change_nature, changed_property, new_value)";
+ $insertion .= " values ('" . $paramid . "', '";
+ $insertion .= date('Y-m-d H:i:s') . "', 'MODIFIED', '";
+ $insertion .= $pname . "', '" . $pvalue . "')";
+
+ pg_exec($this->database, $insertion);
+ }
+ }
+ }
+
+ echo "<h1>Parameter " . $par->name . " of class " . $par->class . "</h1>\n";
+
+ echo "<form action='parameter.php?paramid=$paramid' method='post'>\n";
+ echo "Description : <input type='text' name='paramdescr' value='" . $par->description . "'>\n";
+ echo "<br>";
+ echo "<table>\n";
+ echo "<tr><th>Property</th><th>Description</th><th>Value</th></tr>\n";
+
+ $class_res = pg_exec($this->database, "SELECT * FROM parameter_class WHERE name='" . $par->class . "'");
+ for ($row = 0; $row < pg_numrows($class_res); $row++)
+ {
+ $prop = pg_fetch_object($class_res, $row);
+ $pname = $prop->property_name;
+ $property = pg_fetch_object(pg_exec($this->database,
+ "SELECT value FROM property WHERE paramid='$paramid' AND name='$pname'"), 0);
+ $pvalue = $property->value;
+ echo "<tr>";
+ echo "<td>", $pname, "</td><td>", $prop->description, "</td>";
+ echo "<td><input type='text' name='$pname' value='$pvalue'></td>";
+ echo "</tr>\n";
+ }
+ echo "</table>\n";
+ echo "<input type='submit' name='action' value='Update Parameter'>\n";
+ echo "</form>\n";
+
+ echo "<h2>Change history for " . $par->class . " parameter " . $par->name . "</h2>";
+
+ $histres = pg_exec($this->database, "SELECT * FROM history WHERE paramid='$paramid' ORDER BY modified");
+ echo "<table>";
+ for ($row = 0; $row < pg_numrows($histres); $row++)
+ {
+ $hist = pg_fetch_object($histres, $row);
+ echo "<tr>";
+ echo "<td>" . $hist->changed_property . "</td>";
+ echo "<td>" . $hist->modified . "</td>";
+ echo "<td>" . $hist->change_nature . "</td>";
+ echo "<td>" . $hist->new_value . "</td>";
+ echo "</tr>\n";
+ }
+ echo "</table>";
+ }
}
}
-?>
-</body>
-</html>
+$page = new param_page("Gnucomo Parameters");
+
+$page->Showpage();
+
+?>