Manually edit parameters.
[gnucomo.git] / src / web / parameter.php
index 110a5fb..393457b 100644 (file)
@@ -9,9 +9,10 @@
 ***********************
 **      FILE NAME      : parameter.php
 **      SYSTEM NAME    : Gnucomo - Gnu Computer Monitoring
-**      VERSION NUMBER : $Revision: 1.7 $
+**      VERSION NUMBER : $Revision: 1.8 $
 **
-**  DESCRIPTION      : 
+**  DESCRIPTION      : Parameter administration for a specific object.
+**                     Input - GET[oid]    : Object id
 **
 **  EXPORTED OBJECTS : 
 **  LOCAL    OBJECTS : 
 
 /*****************************
    $Log: parameter.php,v $
-   Revision 1.7  2003-12-03 08:03:28  arjen
+   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.
 
@@ -48,7 +53,7 @@
 
 ******************************/
 
-// RCSID = "$Id: parameter.php,v 1.7 2003-12-03 08:03:28 arjen Exp $";
+// RCSID = "$Id: parameter.php,v 1.8 2007-01-11 13:44:29 arjen Exp $";
 
 
 ini_set('include_path', '.:./classes:../phpclasses');
@@ -87,19 +92,96 @@ class param_page extends page
 
    if (!empty($_GET['oid']))
    {
-      $res = pg_exec($this->database, "SELECT objectname FROM object WHERE objectid=CAST('" . $_GET['oid']."' AS BIGINT)");
+      $ObjId = $_GET['oid'];
+
+      $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>";
 
-      $res = pg_exec($this->database, "SELECT paramid, class, name, description FROM parameter "
-                     ."WHERE objectid= CAST('" . $_GET['oid'] . "' AS BIGINT) order by class, name");
+      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'];
+
+         echo "<h2>Creating parameter $name of class $class.</h2>";
+
+         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>";
+
+         $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>";
+      }
+
+      if (isset($_POST['action']) && $_POST['action'] == 'Save New Parameter')
+      {
+         $name = $_POST['paramname'];
+         $class = $_POST['paramclass'];
+         $description = $_POST['paramdescr'];
+
+         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>";
+      }
+
       
      ?>
      <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 name='compare_to'>
-         <?php object_selection($this->database, $_GET['oid']); ?>
+         <?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
@@ -110,6 +192,8 @@ class param_page extends page
       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);
@@ -123,7 +207,7 @@ class param_page extends page
             <tr><td align='center'>
                <?php echo $par->class?>
             </td><td>
-               <?php echo $par->name?>
+               <?php echo "<a href=parameter.php?paramid=" . $par->paramid . ">" . $par->name . "</a>"?>
             </td><td>
                <?php echo $par->description?>
             </td><td>
@@ -146,6 +230,94 @@ class param_page extends page
 
       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>";
    }
    }
 }