forked from science-ation/science-ation
039a3aa1d5
which config lines go with which options.
200 lines
6.2 KiB
PHP
200 lines
6.2 KiB
PHP
<?
|
|
/*
|
|
This file is part of the 'Science Fair In A Box' project
|
|
SFIAB Website: http://www.sfiab.ca
|
|
|
|
Copyright (C) 2005 Sci-Tech Ontario Inc <info@scitechontario.org>
|
|
Copyright (C) 2005 James Grant <james@lightbox.org>
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public
|
|
License as published by the Free Software Foundation, version 2.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; see the file COPYING. If not, write to
|
|
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA.
|
|
*/
|
|
?>
|
|
<?
|
|
|
|
function config_editor_load($category, $year)
|
|
{
|
|
$query = "SELECT * FROM config WHERE year='$year' AND category='$category' ORDER BY ord";
|
|
$q = mysql_query($query);
|
|
print(mysql_error());
|
|
|
|
$var = array();
|
|
while($r=mysql_fetch_object($q)) {
|
|
$var[$r->var]['val'] = $r->val;
|
|
$var[$r->var]['desc'] = $r->description;
|
|
$var[$r->var]['category'] = $r->category;
|
|
$var[$r->var]['ord'] = $r->ord;
|
|
$var[$r->var]['type'] = $r->type;
|
|
$var[$r->var]['type_values'] = $r->type_values;
|
|
}
|
|
return $var;
|
|
}
|
|
|
|
function config_editor_parse_from_http_headers($array_name)
|
|
{
|
|
$ans = array();
|
|
if(!is_array($_POST[$array_name])) return $ans;
|
|
|
|
$keys = array_keys($_POST[$array_name]);
|
|
foreach($keys as $id) {
|
|
$ans[$id] = stripslashes($_POST[$array_name][$id]);
|
|
}
|
|
return $ans;
|
|
}
|
|
|
|
function config_editor_require_vars($category, $year, $varlist)
|
|
{
|
|
global $config;
|
|
foreach($varlist as $v) {
|
|
if(isset($config[$v])) continue;
|
|
|
|
/* FInd var with year = -1 */
|
|
$q = mysql_query("SELECT * FROM config WHERE ".
|
|
"var='$v' AND year='-1'");
|
|
if(mysql_num_rows($q) != 1) {
|
|
/* Insert a dummy */
|
|
mysql_query("INSERT INTO `config` (`var`, `val`,
|
|
`description`, `category`, `type`, `type_values`,
|
|
`year`, `ord`) VALUES ('$v', '', '',
|
|
'$category', 'text', '', $year, 99999)");
|
|
} else {
|
|
$r = mysql_fetch_object($q);
|
|
mysql_query("INSERT INTO `config` (`var`, `val`,
|
|
`description`, `category`, `type`, `type_values`,
|
|
`year`, `ord`) VALUES ('$v', '{$r->val}',
|
|
'{$r->description}', '{$r->category}', '{$r->type}',
|
|
'{$r->type_values}', '$year', {$r->ord})");
|
|
}
|
|
}
|
|
}
|
|
/* A complete question editor. Just call it with the
|
|
* section you want to edit, a year, the array_name to use for
|
|
* POSTing and GETting the questions (so you can put more than one
|
|
* edtior on a single page), and give it $_SERVER['PHP_SELF'], because
|
|
* php_self inside this function is this file.
|
|
* FUTURE WORK: it would be nice to hide the order, and just implement
|
|
* a bunch of up/down arrows, and dynamically compute the order for
|
|
* all elements */
|
|
function config_editor($category, $year, $array_name, $self)
|
|
{
|
|
global $config;
|
|
|
|
if($_POST['action']=="update") {
|
|
|
|
$var = config_editor_parse_from_http_headers($array_name);
|
|
$varkeys = array_keys($var);
|
|
foreach($varkeys as $k) {
|
|
$val = mysql_escape_string(stripslashes($var[$k]));
|
|
$v = mysql_escape_string(stripslashes($k));
|
|
mysql_query("UPDATE config SET val=\"$val\" WHERE var=\"$v\" AND `year`='$year'");
|
|
print mysql_error();
|
|
// echo "Saving {$v} = $val<br>";
|
|
}
|
|
echo happy(i18n("Configuration Updated"));
|
|
}
|
|
|
|
/* Load questions, then handle up and down, because with up and down we
|
|
* have to modify 2 questions to maintain the order */
|
|
$var = config_editor_load($category, $year);
|
|
|
|
echo "<form method=\"post\" action=\"$self\">";
|
|
|
|
echo "<table cellpadding=\"3\">";
|
|
|
|
$varkeys = array_keys($var);
|
|
//compute the optimal input size to use
|
|
$biggest=0;
|
|
foreach($varkeys as $k) {
|
|
if(strlen($var[$k]['val'])>$biggest)
|
|
$biggest=strlen($var[$k]['val']);
|
|
}
|
|
if($biggest>30) $size=30;
|
|
else $size=$biggest+1;
|
|
|
|
|
|
$line = 1;
|
|
foreach($varkeys as $k) {
|
|
$trclass = ($line % 2 == 0) ? "even" : "odd";
|
|
$line++;
|
|
|
|
print("<tr class=\"$trclass\">");
|
|
print("<td>{$var[$k]['desc']}</td>");
|
|
print("<td>");
|
|
|
|
$val = htmlspecialchars($var[$k]['val']);
|
|
$name = "${array_name}[$k]";
|
|
|
|
switch($var[$k]['type']) {
|
|
case "yesno":
|
|
print("<select name=\"$name\">");
|
|
$sel = ($val == 'yes') ? 'selected=selected' : '';
|
|
print("<option $sel value=\"yes\">Yes</option>");
|
|
$sel = ($val == 'no') ? 'selected=selected' : '';
|
|
print("<option $sel value=\"no\">No</option>");
|
|
print("</select>");
|
|
break;
|
|
case "enum":
|
|
$values = $var[$k]['type_values'];
|
|
/* Split values */
|
|
/* The PERL regex here matches any string of the form
|
|
* key=val| , where the = and 'val' and '|' are
|
|
* optional. val is allowed to contain spaces. Using
|
|
* preg_match_all runs this regex multiple times, and
|
|
* creates arrays for each subpattern that matches.
|
|
* For example, "aa=Aye|bb=Bee Bee|cc|dd=Dee"
|
|
* Would construct the following Array of Arrays:
|
|
* Array ( [0] => Array ( [0] => "aa=Aye|",
|
|
[1] => "bb=Bee Bee|",
|
|
[2] => "cc|",
|
|
[3] => "dd=Dee" ),
|
|
[1] => Array ( [0] => "aa",
|
|
[1] => "bb",
|
|
[2] => "cc",
|
|
[3] => "dd" ),
|
|
[2] => Array ( [0] => "Aye",
|
|
[1] => "Bee Bee",
|
|
[2] => "",
|
|
[3] => "Dee" ) )
|
|
* neat eh? :) We use [1] and [2] to form the keys and
|
|
* values that we show the user */
|
|
|
|
preg_match_all("/([^\|=]+)(?:=([^\|]+))?\|?/", $values, $regs);
|
|
// print_r($regs);
|
|
print("<select name=\"$name\">");
|
|
for($x=0; $x<count($regs[1]); $x++) {
|
|
$e_key = trim($regs[1][$x]);
|
|
$e_val = trim($regs[2][$x]);
|
|
if($e_val == "") $e_val = $e_key;
|
|
|
|
$sel = ($val == $e_key) ? 'selected=selected' : '';
|
|
print("<option $sel value=\"$e_key\">$e_val</option>");
|
|
}
|
|
print("</select>");
|
|
break;
|
|
default:
|
|
print("<input size=\"$size\" type=\"text\" name=\"$name\" value=\"$val\">\n");
|
|
break;
|
|
}
|
|
echo "</td></tr>";
|
|
}
|
|
print("</table>");
|
|
print("<input type=\"hidden\" name=\"category\" value=\"$category\" >\n");
|
|
print("<input type=\"hidden\" name=\"action\" value=\"update\" >\n");
|
|
print("<input type=\"submit\" value=\"".i18n("Save Configuration")."\" />\n");
|
|
|
|
echo "</form>";
|
|
}
|
|
|
|
?>
|