Manually edit parameters.
[gnucomo.git] / src / web / parameter.php
index f7d4c02..393457b 100644 (file)
@@ -1,27 +1,80 @@
 <?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);
@@ -30,103 +83,247 @@ function object_selection($db, $skip_oid)
       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();
+
+?>