Index: trunk/www/db_po/edit_po.php
===================================================================
--- trunk/www/db_po/edit_po.php	(revision 11353)
+++ trunk/www/db_po/edit_po.php	(revision 11353)
@@ -0,0 +1,46 @@
+<?php
+{
+    ini_set("display_errors", "On");
+    ini_set("mysql.trace_mode", "On");
+
+    echo (file_get_contents("index-header.html"));
+
+    include("db.php");
+    $db_id = mysql_pconnect($host, $user, $pw);
+    if ($db_id==FALSE)
+    {
+        printf("mysql_connect returned the following error: %s\n", mysql_error());
+        die("");
+    }
+    mysql_select_db($db);
+    echo "Hi, this is a test interface for the DB <b>" . $db . "</b>.<br><br>";
+
+    $query0="SELECT fProgram from ProgramOption GROUP BY fProgram";
+
+    $result0=mysql_query($query0, $db_id);
+
+    printf("<table border='0'><tbody>\n");
+    printf("<tr>\n<td>Please select a program:</td>\n");
+    printf("<td>\n<select name='prog' size='1' onchange=\"get_keys(this.value)\"class='Width'>\n");
+    printf("<option value='empty'> ---select program--- </option>\n");
+    printf("<option value='all'> all programs </option>\n");
+    while ($row0 = mysql_fetch_row($result0))
+        printf("<option value='%s'>%s </option>\n", $row0[0], $row0[0]);
+    printf("</select>\n</td>\n</tr>\n");
+    mysql_free_result($result0);
+
+    echo "<tr id='keyfield'></tr>";
+    echo "<tr id='valuefield'></tr>";
+    printf("</tbody></table>\n");
+
+    mysql_close($db_id);
+
+
+
+
+    echo (file_get_contents("index-footer.html"));
+
+    ini_set("display_errors", "Off");
+    ini_set("mysql.trace_mode", "Off");
+}
+?>
Index: trunk/www/db_po/get_keys.php
===================================================================
--- trunk/www/db_po/get_keys.php	(revision 11353)
+++ trunk/www/db_po/get_keys.php	(revision 11353)
@@ -0,0 +1,42 @@
+<?php
+{
+    ini_set("display_errors", "On");
+    ini_set("mysql.trace_mode", "On");
+
+    if (empty($_GET["fProgram"]))
+    {
+        echo "Please select a program.<br>";
+        return;
+    }
+
+    include("db.php");
+    $db_id = mysql_pconnect($host, $user, $pw);
+    if ($db_id==FALSE)
+    {
+        printf("mysql_connect returned the following error: %s\n", mysql_error());
+        die("");
+    }
+    mysql_select_db($db);
+
+    $query0="SELECT fKey from ProgramOption ";
+    if ($_GET["fProgram"]!="all")
+        $query0.="WHERE fProgram='".$_GET["fProgram"]."' ";
+    $query0.="GROUP BY fKey";
+
+    $result0=mysql_query($query0, $db_id);
+
+    printf("<td>Please select a key:</td>\n");
+    printf("<td><select name='key' size='1' onchange=\"get_values('%s',this.value)\"class='Width'>\n", $_GET["fProgram"]);
+    printf("<option value='empty'> ---select key--- </option>\n");
+    printf("<option value='newkey'> add new key </option>\n");
+    while ($row0 = mysql_fetch_row($result0))
+        printf("<option value='%s'>%s </option>\n", $row0[0], $row0[0]);
+    printf("</select>\n</td>\n");
+    mysql_free_result($result0);
+
+    mysql_close($db_id);
+
+    ini_set("display_errors", "Off");
+    ini_set("mysql.trace_mode", "Off");
+}
+?>
Index: trunk/www/db_po/get_values.php
===================================================================
--- trunk/www/db_po/get_values.php	(revision 11353)
+++ trunk/www/db_po/get_values.php	(revision 11353)
@@ -0,0 +1,77 @@
+<?php
+{
+    ini_set("display_errors", "On");
+    ini_set("mysql.trace_mode", "On");
+
+    if (empty($_GET["fKey"]))
+    {
+        echo "Please select a key.<br>";
+        return;
+    }
+    if (empty($_GET["fProgram"]))
+    {
+        echo "Please select a program.<br>";
+        return;
+    }
+
+
+    include("db.php");
+    $db_id = mysql_pconnect($host, $user, $pw);
+    if ($db_id==FALSE)
+    {
+        printf("mysql_connect returned the following error: %s\n", mysql_error());
+        die("");
+    }
+    mysql_select_db($db);
+
+    $query1 = "SELECT Max(fCounter) FROM History";
+    $result1=mysql_query($query1, $db_id);
+    $row1 = mysql_fetch_row($result1);
+    $maxcount=$row1[0];
+    //echo $maxcount;
+
+    $query0 ="SELECT fIndex, fProgram, fKey, fValue, fDescription, fCounter FROM ProgramOption ";
+    $query0.="WHERE fKey='".$_GET["fKey"]."'";
+    if ($_GET["fProgram"]!="all")
+        $query0.="AND fProgram='".$_GET["fProgram"]."' ";
+
+    $result0=mysql_query($query0, $db_id);
+
+    printf("<td valign='top'>Please edit:</td>\n");
+    printf("<td>\n");
+    printf("<button onClick='ShowCurrent();' id='showcurrent' style='display:none'>Show Current</button>\n");
+    printf("<button onClick='ShowAll();' id='showall' style='display:inline'>Show All</button>\n");
+    printf("<button onClick='addRow(\"%s\",\"%s\");' id='addrow' style='display:inline'>Add Row</button>\n", $_GET["fProgram"], $_GET["fKey"]);
+    printf("<table border='1' width='100px' height='100px'><tbody id='valtable'>\n");
+    printf("<tr><th>Index / Counter</th><th>Program</th><th>Key</th><th>Value</th><th>Description</th>");
+    printf("<th>Action</th></tr>\n");
+    while ($row0 = mysql_fetch_row($result0))
+    {
+        if ($row0[5]==$maxcount)
+            printf("<tr id='new%s' style='display:'>\n", $row0[0]);
+        else
+            printf("<tr id='old%s' style='display:none'>\n", $row0[0]);
+        printf("<td> %s / %s</td>\n", $row0[0], $row0[5]);
+        printf("<td id='prog%s'>%s</td>\n", $row0[0], $row0[1]);
+        printf("<td id='key%s'>%s</td>\n", $row0[0], $row0[2]);
+        printf("<td align='right' id='val%s'>%s</td>\n", $row0[0], $row0[3]);
+        printf("<td id='descr%s'>%s</td>\n", $row0[0], $row0[4]);
+        if ($row0[5]==$maxcount)
+            printf("<td id='action%s'><input type='button' value='Edit' onclick='EditRow(\"%s\")'></td>\n</tr>\n", $row0[0], $row0[0]);
+        else
+            printf("<td id='action%s'></td>\n</tr>\n", $row0[0]);
+        $maxindex=$row0[0];
+    }
+    printf("<div id='addline'></div>");
+    printf("</tbody></table>\n<br>\n");
+    printf("<div id='maxindex' style='display:none'>%s</div>\n", $maxindex);
+    printf("</td>\n");
+
+    mysql_free_result($result0);
+
+    mysql_close($db_id);
+
+    ini_set("display_errors", "Off");
+    ini_set("mysql.trace_mode", "Off");
+}
+?>
Index: trunk/www/db_po/index-footer.html
===================================================================
--- trunk/www/db_po/index-footer.html	(revision 11353)
+++ trunk/www/db_po/index-footer.html	(revision 11353)
@@ -0,0 +1,2 @@
+</body>
+</html>
Index: trunk/www/db_po/index-header.html
===================================================================
--- trunk/www/db_po/index-header.html	(revision 11353)
+++ trunk/www/db_po/index-header.html	(revision 11353)
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Daniela Dorner">
+   <title>FACT Configuration DB</title>
+   <link rel="stylesheet" type="text/css" href="po.css">
+   <style type="text/css">
+    <!--
+       select.Width
+         { width: 150px; }
+       input.Width 
+         { width: 102px; }
+     -->
+   </style>
+<script type="text/javascript" src="po.js">You need JavaScript switched on for this page to work!</script>
+</head>
+
+<body>
Index: trunk/www/db_po/insert_po.php
===================================================================
--- trunk/www/db_po/insert_po.php	(revision 11353)
+++ trunk/www/db_po/insert_po.php	(revision 11353)
@@ -0,0 +1,130 @@
+<?php
+{
+    ini_set("display_errors", "On");
+    ini_set("mysql.trace_mode", "On");
+
+    if (empty($_GET["fUpdCase"]))
+    {
+        echo "Please specify what kind of change you want to do.<br>";
+        return;
+    }
+    if (empty($_GET["fIndex"]))
+    {
+        echo "Please giv an index.<br>";
+        return;
+    }
+    if (empty($_GET["fProgram"]))
+    {
+        echo "Please select a program.<br>";
+        return;
+    }
+    if (empty($_GET["fKey"]))
+    {
+        echo "Please select a key.<br>";
+        return;
+    }
+    if (empty($_GET["fValue"]))
+    {
+        echo "Please insert a value.<br>";
+        return;
+    }
+    if (empty($_GET["fDescription"]))
+    {
+        echo "Please insert a Description.<br>";
+        return;
+    }
+
+
+
+    include("db.php");
+    $db_id = mysqli_connect($host, $user, $pw, $db);
+    //if ($db_id==FALSE)
+    if (mysqli_connect_errno())
+    {
+        printf("mysql_connect returned the following error: %s\n", mysqli_connect_error());
+        die("");
+    }
+    //mysql_select_db($db);
+
+    //new entry in table ProgramOption
+    $query0="INSERT ProgramOption SET ";
+    $query0.="fProgram='".$_GET["fProgram"]."'";
+    $query0.=", fKey='".$_GET["fKey"]."'";
+    if ($_GET["fUpdCase"]==2 || $_GET["fUpdCase"]==3)
+        $query0.=", fValue='".$_GET["fValue"]."'";
+    if ($_GET["fUpdCase"]==1 || $_GET["fUpdCase"]==4)
+        $query0.=", fValue=NULL";
+    $query0.=", fDescription='".$_GET["fDescription"]."'";
+    $query0.=", fValidFrom=Now() ";
+    if ($_GET["fUpdCase"]==1)
+        $query0.=", fCounter= (Select Max(fCounter) from History) ;";
+    else
+        $query0.=", fCounter= (Select Max(fCounter) from History)+1 ;";
+
+    //update counter for other valid entries in ProgramOption
+    $query0.=" UPDATE ProgramOption SET ";
+    $query0.=" fCounter= (Select Max(fCounter) from History)+1 ";
+    $query0.=" WHERE fCounter= (Select Max(fCounter) from History) ";
+    if ($_GET["fUpdCase"]==3 || $_GET["fUpdCase"]==4)
+        $query0.=" AND NOT fIndex=".$_GET["fIndex"];
+    $query0.=" AND NOT ISNULL(fValue); ";
+
+    //insert new counter to history
+    if ($_GET["fUpdCase"]!=1)
+    {
+        $query0.=" INSERT History SET ";
+        $query0.=" fCounter= (Select Max(fCounter) from ProgramOption) ";
+        $query0.=", fValidFrom=Now() ";
+    }
+
+
+    /*
+    if ($_GET["fUpdCase"]==1 || $_GET["fUpdCase"]==2)
+        $query0 ="INSERT ProgramOption SET ";//insert key or insert value
+    else
+        $query0 ="UPDATE ProgramOption SET ";//update value (includes 'delete')
+
+    if ($_GET["fUpdCase"]==4)//i.e. delete
+        $query0.=" fValue=NULL";
+    else
+    {
+        $query0.="fProgram='".$_GET["fProgram"]."'";
+        $query0.=", fKey='".$_GET["fKey"]."'";
+        $query0.=", fValue='".$_GET["fValue"]."'";
+        $query0.=", fDescription='".$_GET["fDescription"]."'";
+        $query0.=", fValidFrom=Now() ";
+    }
+
+    if ($_GET["fUpdCase"]==1 || $_GET["fUpdCase"]==2) //only in case of insert
+        $query0.=", fValidFrom=Now() ";
+
+    if ($_GET["fUpdCase"]==3 || $_GET["fUpdCase"]==4)// only in case of update
+        $query0.="WHERE fIndex=".$_GET["fIndex"]."; ";
+
+    if ($_GET["fUpdCase"]==2 || $_GET["fUpdCase"]==3)// only when value is changed (includes insert)
+    {
+        $query0.="UPDATE ProgramOption SET fCounter=(Select Max(fCounter) from History)+1 WHERE NOT ISNULL(fValue); ";
+        $query0.="INSERT History SET fCounter=(Select Max(fCounter) from ProgramOption), fValidFrom=Now(); ";
+    }
+    */
+
+    //echo $query0;
+    $result0=mysqli_multi_query($db_id, $query0);
+    if ($result0)
+    {
+        echo "Query \"" . $query0 . "\" was successful.";
+        return 0;
+    }
+    else
+    {
+        echo "Query \"" . $query0 . "\" was not successful.";
+        return 2;
+    }
+
+    mysqli_free_result($result0);
+    mysqli_close($db_id);
+
+    ini_set("display_errors", "Off");
+    ini_set("mysql.trace_mode", "Off");
+}
+?>
Index: trunk/www/db_po/po.css
===================================================================
--- trunk/www/db_po/po.css	(revision 11353)
+++ trunk/www/db_po/po.css	(revision 11353)
@@ -0,0 +1,4 @@
+td 
+{
+white-space:nowrap;
+}
Index: trunk/www/db_po/po.js
===================================================================
--- trunk/www/db_po/po.js	(revision 11353)
+++ trunk/www/db_po/po.js	(revision 11353)
@@ -0,0 +1,227 @@
+
+//function
+function get_keys(prog)
+{
+    //alert(prog);
+
+    var xmlhttp;
+    if (window.XMLHttpRequest)
+    {// code for IE7+, Firefox, Chrome, Opera, Safari
+        xmlhttp=new XMLHttpRequest();
+    }
+    else
+    {// code for IE6, IE5
+        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
+    }
+    xmlhttp.open("GET","get_keys.php?fProgram="+prog,false);
+    xmlhttp.send();
+    if (xmlhttp.readyState==4 && xmlhttp.status==200)
+    {
+        document.getElementById('keyfield').innerHTML = xmlhttp.responseText;
+        document.getElementById('valuefield').innerHTML = "";
+    }
+    else
+        document.getElementById('keyfield').innerHTML = "argh";
+
+}
+
+//function
+function get_values(prog, key)
+{
+    //alert(prog+"---"+key);
+    var xmlhttp;
+    if (window.XMLHttpRequest)
+    {// code for IE7+, Firefox, Chrome, Opera, Safari
+        xmlhttp=new XMLHttpRequest();
+    }
+    else
+    {// code for IE6, IE5
+        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
+    }
+    xmlhttp.open("GET","get_values.php?fKey="+key+"&fProgram="+prog,false);
+    xmlhttp.send();
+    if (xmlhttp.readyState==4 && xmlhttp.status==200)
+    {
+        document.getElementById('valuefield').innerHTML = xmlhttp.responseText;
+        if (key=='newkey')
+            addRow(prog, key);
+    }
+    else
+        document.getElementById('valuefield').innerHTML = "argh";
+}
+
+function addRow(prog, key)
+{
+    tabBody=document.getElementById("valtable");
+    row=document.createElement("TR");
+    row.id='val0';
+    cell0 = document.createElement("TD");
+    cell1 = document.createElement("TD");
+    cell2 = document.createElement("TD");
+    cell3 = document.createElement("TD");
+    cell4 = document.createElement("TD");
+    cell5 = document.createElement("TD");
+    //case add new key (value NULL)
+    if (key=='newkey')
+    {
+        input1 = document.createElement("INPUT");
+        input1.value = prog;
+        input1.id = 'prog0';
+        input2 = document.createElement("INPUT");
+        input2.value = 'newkey';
+        input2.id = 'key0';
+        cell3.id = 'newval0';
+        textnode3=document.createTextNode("NULL");
+        input4 = document.createElement("INPUT");
+        input4.id = 'newdescr0';
+        input5 = document.createElement("input");
+        input5.value = 'Add';
+        input5.type = "button";
+        input5.onclick = function () { UpdateRow(1, 0); onclick() }
+        cell1.appendChild(input1);
+        cell2.appendChild(input2);
+        cell3.appendChild(textnode3);
+        cell4.appendChild(input4);
+        cell5.appendChild(input5);
+        //cell5.appendChild(button5);
+    }
+    //case add new val for same key
+    else
+    {
+        cell1.id = 'prog0';
+        cell2.id = 'key0';
+        textnode1=document.createTextNode(prog);
+        textnode2=document.createTextNode(key);
+        input3 = document.createElement("INPUT");
+        input3.id = 'newval0';
+        input4 = document.createElement("INPUT");
+        input4.id = 'newdescr0';
+        input5 = document.createElement("input");
+        input5.value = 'Add';
+        input5.type = "button";
+        input5.onclick = function () { UpdateRow(2, 0); onclick() }
+        cell1.appendChild(textnode1);
+        cell2.appendChild(textnode2);
+        cell3.appendChild(input3);
+        cell4.appendChild(input4);
+        cell5.appendChild(input5);
+    }
+    row.appendChild(cell0);
+    row.appendChild(cell1);
+    row.appendChild(cell2);
+    row.appendChild(cell3);
+    row.appendChild(cell4);
+    row.appendChild(cell5);
+    tabBody.appendChild(row);
+
+    // to be removed later when solution for adding multiple new rows is found
+    document.getElementById('addrow').style.display = "none";
+}
+
+function EditRow(index)
+{
+    oldval=document.getElementById('val'+index).innerHTML;
+    document.getElementById('val'+index).innerHTML = "<input align='right' id='newval"+index+"' value='"+oldval+"'>";
+    olddescr=document.getElementById('descr'+index).innerHTML;
+    document.getElementById('descr'+index).innerHTML = "<input align='right' id='newdescr"+index+"' value='"+olddescr+"'>";
+    document.getElementById('action'+index).innerHTML =
+        "<input type='button' value='Update' onclick='UpdateRow(3,"+index+")'>"
+        +"<input type='button' value='Delete' onclick='UpdateRow(4,"+index+")'>";
+}
+
+function UpdateRow(updcase,index)
+{
+    // three cases of update
+    // 1: add new key
+    // 2: add new val (for same key)
+    // 3: edit val
+    // 4: delete val (ie set to NULL)
+    if (updcase==1)
+    {
+        prog=document.getElementById('prog'+index).value;
+        key=document.getElementById('key'+index).value;
+    }
+    else
+    {
+        prog=document.getElementById('prog'+index).innerHTML;
+        key=document.getElementById('key'+index).innerHTML;
+    }
+    if (updcase==1)
+        val=document.getElementById('newval'+index).innerHTML;
+    else
+        val=document.getElementById('newval'+index).value;
+    descr=document.getElementById('newdescr'+index).value;
+    if (!descr)
+        alert("Please insert description!");
+    if (!key)
+        alert("Please insert key!");
+    if (!val)
+        alert("Please insert value!");
+    if (!val || !descr || !key)
+        return;
+    if (index==0)
+        index=-1;
+
+    phpcall="insert_po.php?fUpdCase="+updcase+"&fIndex="+index+"&fProgram="+prog+"&fKey="+key+"&fValue="+val+"&fDescription="+descr;
+    //alert("u/i --- "+index+" --- "+prog+" --- "+key+" --- "+val+" --- "+descr);
+    //alert(phpcall);
+
+    var xmlhttp;
+    if (window.XMLHttpRequest)
+    {// code for IE7+, Firefox, Chrome, Opera, Safari
+        xmlhttp=new XMLHttpRequest();
+    }
+    else
+    {// code for IE6, IE5
+        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
+    }
+    xmlhttp.open("GET", phpcall, false);
+    xmlhttp.send();
+    if (xmlhttp.readyState==4 && xmlhttp.status==200)
+        alert(xmlhttp.responseText);
+    else
+        alert("Mist! "+xmlhttp.responseText);
+
+    var xmlhttp2;
+    if (window.XMLHttpRequest)
+    {// code for IE7+, Firefox, Chrome, Opera, Safari
+        xmlhttp2=new XMLHttpRequest();
+    }
+    else
+    {// code for IE6, IE5
+        xmlhttp2=new ActiveXObject("Microsoft.XMLHTTP");
+    }
+    xmlhttp2.open("GET","get_values.php?fKey="+key+"&fProgram="+prog,false);
+    xmlhttp2.send();
+    if (xmlhttp2.readyState==4 && xmlhttp2.status==200)
+    {
+        document.getElementById('valuefield').innerHTML = xmlhttp2.responseText;
+        if (key=='newkey')
+            addRow(prog, key);
+    }
+    else
+        document.getElementById('valuefield').innerHTML = "argh";
+}
+
+
+//    printf("<div id='showcurrent'>\n<button onClick='ShowCurrent();'>Show Current</button>\n</div>\n");
+
+function ShowCurrent()
+{
+    for (var i = 1 ; i <= document.getElementById('maxindex').innerHTML ; i++)
+        if(document.getElementById('old'+i))
+            document.getElementById('old'+i).style.display = "none";
+    document.getElementById('showcurrent').style.display = "none";
+    document.getElementById('showall').style.display = "";
+}
+
+function ShowAll()
+{
+    for (var i = 1 ; i <= document.getElementById('maxindex').innerHTML ; i++)
+        if(document.getElementById('old'+i))
+            document.getElementById('old'+i).style.display = "";
+    document.getElementById('showcurrent').style.display = "";
+    document.getElementById('showall').style.display = "none";
+}
+
+
