forked from science-ation/science-ation
653 lines
15 KiB
PHP
653 lines
15 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.
|
|
*/
|
|
?>
|
|
<?
|
|
$sfiabversion=@file("version.txt");
|
|
$config['version']=$sfiabversion[0];
|
|
//first things first - make sure our DB version matches our CODE version
|
|
$dbcodeversion=@file("db/db.code.version.txt");
|
|
$dbdbversion=@file("db/db.db.version.txt");
|
|
if($dbcodeversion[0]!=$dbdbversion[0])
|
|
{
|
|
echo "<html><head><title>SFIAB ERROR</title></head><body>";
|
|
echo "<h1>Science Fair In A Box - ERROR</h1>";
|
|
echo "SFIAB database and code are mismatched";
|
|
echo "<br>";
|
|
echo "Please run the db_update.php script in order to update";
|
|
echo "<br>";
|
|
echo "your database to the same version as the code";
|
|
echo "<br>";
|
|
echo "<br>";
|
|
echo "<br>";
|
|
echo "<h2>Details</h2>";
|
|
echo "Current SFIAB codebase requires DB version: ".$dbcodeversion[0];
|
|
echo "<br>";
|
|
echo "Current SFIAB database is detected as version: ".$dbdbversion[0];
|
|
echo "<br>";
|
|
echo "</body></html>";
|
|
exit;
|
|
}
|
|
|
|
require_once("config.inc.php");
|
|
require_once("committee_auth.php");
|
|
mysql_connect($DBHOST,$DBUSER,$DBPASS);
|
|
mysql_select_db($DBNAME);
|
|
|
|
session_start();
|
|
|
|
//find out the fair year and any other 'year=0' configuration parameters (things that dont change as the years go on)
|
|
$q=mysql_query("SELECT * FROM config WHERE year='0'");
|
|
while($r=mysql_fetch_object($q))
|
|
{
|
|
$config[$r->var]=$r->val;
|
|
}
|
|
|
|
//now pull the rest of the configuration
|
|
$q=mysql_query("SELECT * FROM config WHERE year='".$config['FAIRYEAR']."'");
|
|
while($r=mysql_fetch_object($q))
|
|
{
|
|
$config[$r->var]=$r->val;
|
|
}
|
|
|
|
//now pull the dates
|
|
$q=mysql_query("SELECT * FROM dates WHERE year='".$config['FAIRYEAR']."'");
|
|
while($r=mysql_fetch_object($q))
|
|
{
|
|
$config['dates'][$r->name]=$r->date;
|
|
}
|
|
|
|
//detect the browser first, so we know what icons to use - we store this in the config array as well
|
|
//even though its not configurable by the fair
|
|
if(stristr($_SERVER['HTTP_USER_AGENT'],"MSIE"))
|
|
$config['icon_extension']="gif";
|
|
else
|
|
$config['icon_extension']="png";
|
|
|
|
|
|
|
|
//now get the languages, and make sure we have at least one active language
|
|
$q=mysql_query("SELECT * FROM languages WHERE active='Y' ORDER BY langname");
|
|
if(mysql_num_rows($q)==0)
|
|
{
|
|
echo "No active languages defined, defaulting to English";
|
|
$config['languages']['en']="English";
|
|
}
|
|
else
|
|
{
|
|
while($r=mysql_fetch_object($q))
|
|
{
|
|
$config['languages'][$r->lang]=$r->langname;
|
|
}
|
|
}
|
|
//now if no language has been set yet, lets set it to the default language
|
|
if(!$_SESSION['lang'])
|
|
{
|
|
//first try the default language, if that doesnt work, use "en"
|
|
if($config['default_language'])
|
|
$_SESSION['lang']=$config['default_language'];
|
|
else
|
|
$_SESSION['lang']="en";
|
|
}
|
|
|
|
|
|
//if the user has switched languages, go ahead and switch the session variable
|
|
if($_GET['switchlanguage'])
|
|
{
|
|
//first, make sure its a valid language:
|
|
if($config['languages'][$_GET['switchlanguage']])
|
|
{
|
|
$_SESSION['lang']=$_GET['switchlanguage'];
|
|
|
|
}
|
|
else
|
|
{
|
|
//invalid language, dont do anything
|
|
}
|
|
}
|
|
|
|
|
|
function i18n($str,$args=array())
|
|
{
|
|
if(!$str)
|
|
return "";
|
|
|
|
if($_SESSION['lang'])
|
|
{
|
|
if($_SESSION['lang']=="en")
|
|
{
|
|
for($x=1;$x<=count($args);$x++)
|
|
{
|
|
$str=str_replace("%$x",$args[$x-1],$str);
|
|
}
|
|
return $str;
|
|
}
|
|
else
|
|
{
|
|
$q=mysql_query("SELECT * FROM translations WHERE lang='".$_SESSION['lang']."' AND strmd5='".md5($str)."'");
|
|
if($r=@mysql_fetch_object($q))
|
|
{
|
|
if($r->val)
|
|
{
|
|
$ret=$r->val;
|
|
|
|
for($x=1;$x<=count($args);$x++)
|
|
{
|
|
$ret=str_replace("%$x",$args[$x-1],$ret);
|
|
}
|
|
return $ret;
|
|
}
|
|
else
|
|
{
|
|
for($x=1;$x<=count($args);$x++)
|
|
{
|
|
$str=str_replace("%$x",$args[$x-1],$str);
|
|
}
|
|
return "<font color=red>$str</font>";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
mysql_query("INSERT INTO translations (lang,strmd5,str) VALUES ('".$_SESSION['lang']."','".md5($str)."','".mysql_escape_string($str)."')");
|
|
for($x=1;$x<=count($args);$x++)
|
|
{
|
|
$str=str_replace("%$x",$args[$x-1],$str);
|
|
}
|
|
return "<font color=red>$str</font>";
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//no language set, assume english
|
|
return $str;
|
|
}
|
|
}
|
|
|
|
function error($str,$type="normal")
|
|
{
|
|
if($type=="normal")
|
|
return "<div class=\"error\">$str</div><br />";
|
|
else if($type=="inline")
|
|
return "<span class=\"error\">$str</span><br />";
|
|
|
|
}
|
|
|
|
function notice($str,$type="normal")
|
|
{
|
|
if($type=="normal")
|
|
return "<div class=\"notice\">$str</div><br />";
|
|
else if($type=="inline")
|
|
return "<span class=\"notice\">$str</span><br />";
|
|
}
|
|
|
|
function happy($str,$type="normal")
|
|
{
|
|
if($type=="normal")
|
|
return "<div class=\"happy\">$str</div><br />";
|
|
else if($type=="inline")
|
|
return "<span class=\"happy\">$str</span><br />";
|
|
}
|
|
|
|
$HEADER_SENT=false;
|
|
function send_header($title="")
|
|
{
|
|
global $HEADER_SENT;
|
|
global $config;
|
|
|
|
//do this so we can use send_header() a little more loosly and not worry about it being sent more than once.
|
|
if($HEADER_SENT) return;
|
|
else $HEADER_SENT=true;
|
|
|
|
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
|
|
?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
|
<head><title><?=i18n($title)?></title>
|
|
<link rel="stylesheet" href="<?=$config['SFIABDIRECTORY']?>/sfiab.css" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<script language="javascript" type="text/javascript">
|
|
<!--
|
|
//useful function that we'll be using throughout
|
|
function confirmClick(msg)
|
|
{
|
|
var okay=confirm(msg);
|
|
if(okay)
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
function el(str,domain,name)
|
|
{
|
|
document.write('<a href="ma'+'il'+'to:' + str + '@' + domain + '">' + name + '</a>');
|
|
}
|
|
|
|
function em(str,domain)
|
|
{
|
|
document.write('<a href="ma'+'il'+'to:' + str + '@' + domain + '">' + str + '@' + domain + '</a>');
|
|
}
|
|
|
|
var anyFieldHasBeenChanged=false;
|
|
|
|
function fieldChanged()
|
|
{
|
|
anyFieldHasBeenChanged=true;
|
|
}
|
|
|
|
function confirmChanges()
|
|
{
|
|
if(anyFieldHasBeenChanged)
|
|
{
|
|
var okay=confirm('<?=i18n("You have unsaved changes. Click \"Cancel\" to return so you can save your changes, or press \"OK\" to discard your changes and continue")?>');
|
|
if(okay)
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
else
|
|
return true;
|
|
}
|
|
|
|
-->
|
|
</script>
|
|
|
|
<div id="header">
|
|
<?
|
|
echo "<h1>".i18n($config['fairname'])."</h1>";
|
|
?>
|
|
<hr />
|
|
</div>
|
|
|
|
<div id="left">
|
|
<ul class="mainnav">
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/index.php"><?=i18n("Home Page")?></a></li>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/important_dates.php"><?=i18n("Important Dates")?></a></li>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/register_participants.php"><?=i18n("Participant Registration")?></a></li>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/register_judges.php"><?=i18n("Judges Registration")?></a></li>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/committees.php"><?=i18n("Committee")?></a></li>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/winners.php"><?=i18n("Winners")?></a></li>
|
|
</ul>
|
|
<br />
|
|
<ul class="mainnav">
|
|
<?
|
|
if(auth_has_access("admin") || auth_has_access("config") || auth_has_access("super"))
|
|
{
|
|
if(auth_has_access("admin")){ ?>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/admin/"><?=i18n("Fair Administration")?></a></li>
|
|
<? }
|
|
if(auth_has_access("config")){ ?>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/config/"><?=i18n("SFIAB Configuration")?></a></li>
|
|
<? }
|
|
|
|
?>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/committee_login.php?action=logout"><?=i18n("Committee Logout")?></a></li>
|
|
<?
|
|
|
|
}
|
|
else
|
|
{
|
|
?>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/committee_login.php"><?=i18n("Committee Login")?></a></li>
|
|
<?
|
|
}
|
|
?>
|
|
</ul>
|
|
<br />
|
|
<ul class="mainnav">
|
|
<?
|
|
if($_SESSION['schoolid'] && $_SESSION['schoolaccesscode'])
|
|
{
|
|
?>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/schoolaccess.php?action=logout"><?=i18n("School Logout")?></a></li>
|
|
<?
|
|
}
|
|
else
|
|
{
|
|
?>
|
|
<li><a href="<?=$config['SFIABDIRECTORY']?>/schoolaccess.php"><?=i18n("School Login")?></a></li>
|
|
<?
|
|
}
|
|
?>
|
|
</ul>
|
|
|
|
<div class="aligncenter">
|
|
|
|
<?
|
|
|
|
if(count($config['languages'])>1)
|
|
{
|
|
echo "<br />";
|
|
echo "<form name=\"languageselect\" method=\"get\" action=\"".$_SERVER['PHP_SELF']."\">";
|
|
echo "<select name=\"switchlanguage\" onchange=\"document.forms.languageselect.submit()\">\n";
|
|
foreach($config['languages'] AS $key=>$val)
|
|
{
|
|
if($_SESSION['lang']==$key) $selected="selected=\"selected\""; else $selected="";
|
|
|
|
echo "<option $selected value=\"$key\">$val</option>";
|
|
}
|
|
echo "</select>";
|
|
echo "</form>";
|
|
}
|
|
|
|
|
|
?>
|
|
<a href="http://www.sfiab.ca/"><?=i18n("Return to SFIAB Development Page")?></a>
|
|
<br />
|
|
<br />
|
|
<? include "http://counter.lightbox.org/?user=sfiab&name=testsite&addr=".$_SERVER['REMOTE_ADDR']; ?>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<div id="main">
|
|
<?
|
|
if($title)
|
|
echo "<h2>".i18n($title)."</h2>";
|
|
}
|
|
|
|
function send_footer()
|
|
{
|
|
global $config;
|
|
?>
|
|
</div>
|
|
<div id="footer">
|
|
<? print_r($_SESSION); ?>
|
|
<? echo "SFIAB Version ".$config['version']; ?>
|
|
</div>
|
|
|
|
</body>
|
|
</html>
|
|
|
|
<?
|
|
}
|
|
|
|
function send_popup_header($title="")
|
|
{
|
|
global $HEADER_SENT;
|
|
global $config;
|
|
|
|
//do this so we can use send_header() a little more loosly and not worry about it being sent more than once.
|
|
if($HEADER_SENT) return;
|
|
else $HEADER_SENT=true;
|
|
|
|
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
|
|
?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
|
<head><title><?=i18n($title)?></title>
|
|
<link rel="stylesheet" href="<?=$config['SFIABDIRECTORY']?>/sfiab.css" type="text/css" />
|
|
</head>
|
|
<body onload="window.focus()">
|
|
<?
|
|
if($title)
|
|
echo "<h2>".i18n($title)."</h2>";
|
|
}
|
|
|
|
function send_popup_footer()
|
|
{
|
|
?>
|
|
<br />
|
|
<br />
|
|
<div id="footer">
|
|
<? print_r($_SESSION); ?>
|
|
</div>
|
|
|
|
</body>
|
|
</html>
|
|
<?
|
|
}
|
|
|
|
|
|
function emit_month_selector($name,$selected="")
|
|
{
|
|
echo "<select name=\"$name\">\n";
|
|
$months=array("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
|
|
echo "<option value=\"\">".i18n("Month")."</option>\n";
|
|
for($x=1;$x<=12;$x++)
|
|
{
|
|
if($x==$selected)
|
|
$s="selected=\"selected\"";
|
|
else
|
|
$s="";
|
|
echo "<option $s value=\"$x\">".$months[$x]."</option>\n";
|
|
}
|
|
|
|
echo "</select>\n";
|
|
|
|
}
|
|
|
|
|
|
function emit_day_selector($name,$selected="")
|
|
{
|
|
echo "<select name=\"$name\">\n";
|
|
echo "<option value=\"\">".i18n("Day")."</option>\n";
|
|
|
|
for($x=1;$x<=31;$x++)
|
|
echo "<option value=\"".($x<10?"0":"")."$x\" ".($selected==$x?"selected=\"selected\"":"").">$x</option>\n";
|
|
|
|
echo "</select>\n";
|
|
|
|
}
|
|
|
|
function emit_year_selector($name,$selected="",$min=0,$max=0)
|
|
{
|
|
$curyear=date("Y");
|
|
echo "<select name=\"$name\">\n";
|
|
echo "<option value=\"\">".i18n("Year")."</option>\n";
|
|
|
|
if($min&&$max)
|
|
{
|
|
for($x=$min;$x<=$max;$x++)
|
|
echo "<option value=\"$x\" ".($selected==$x?"selected=\"selected\"":"").">$x</option>\n";
|
|
|
|
}
|
|
else
|
|
{
|
|
//if we arent given a min and max, lets show current year + 5
|
|
for($x=$curyear;$x<$curyear+5;$x++)
|
|
echo "<option value=\"$x\" ".($selected==$x?"selected=\"selected\"":"").">$x</option>\n";
|
|
}
|
|
echo "</select>\n";
|
|
}
|
|
|
|
function emit_date_selector($name,$selected="")
|
|
{
|
|
if($selected)
|
|
{
|
|
list($year,$month,$day)=split("-",$selected);
|
|
}
|
|
echo "<table cellpadding=0>";
|
|
echo "<tr><td>";
|
|
emit_year_selector($name."_year",$year);
|
|
echo "</td><td>";
|
|
emit_month_selector($name."_month",$month);
|
|
echo "</td><td>";
|
|
emit_day_selector($name."_day",$day);
|
|
echo "</td></tr>";
|
|
echo "</table>";
|
|
}
|
|
|
|
function emit_hour_selector($name,$selected="")
|
|
{
|
|
if($selected!="") $selected=(int)$selected;
|
|
echo "<select name=\"$name\">\n";
|
|
echo "<option value=\"\">HH</option>\n";
|
|
|
|
|
|
for($x=0;$x<=23;$x++)
|
|
{
|
|
if($x===$selected)
|
|
$sel="selected";
|
|
else
|
|
$sel="";
|
|
echo "<option value=\"$x\" $sel>".sprintf("%02d",$x)."</option>\n";
|
|
}
|
|
|
|
echo "</select>\n";
|
|
|
|
|
|
}
|
|
function emit_minute_selector($name,$selected="")
|
|
{
|
|
$mins=array("00","05","10","15","20","25","30","35","40","45","50","55");
|
|
echo "<select name=\"$name\">\n";
|
|
echo "<option value=\"\">MM</option>\n";
|
|
|
|
for($x=0;$x<count($mins);$x++)
|
|
echo "<option value=\"".$mins[$x]."\" ".($selected==$mins[$x]?"selected":"").">$mins[$x]</option>\n";
|
|
|
|
echo "</select>\n";
|
|
|
|
|
|
}
|
|
|
|
function emit_time_selector($name,$selected="")
|
|
{
|
|
|
|
if($selected)
|
|
{
|
|
list($hour,$minute,$second)=split(":",$selected);
|
|
}
|
|
echo "<table cellpadding=0>";
|
|
echo "<tr><td>";
|
|
emit_hour_selector($name."_hour",$hour);
|
|
echo "</td><td>";
|
|
emit_minute_selector($name."_minute",$minute);
|
|
echo "</td></tr>";
|
|
echo "</table>";
|
|
|
|
}
|
|
|
|
function emit_province_selector($name,$selected="",$extra="")
|
|
{
|
|
$q=mysql_query("SELECT * FROM provinces ORDER BY province");
|
|
if(mysql_num_rows($q)==1)
|
|
{
|
|
$r=mysql_fetch_object($q);
|
|
echo "<input type=\"hidden\" name=\"$name\" value=\"$r-code\">";
|
|
echo i18n($r->province);
|
|
}
|
|
else
|
|
{
|
|
echo "<select name=\"$name\" $extra>\n";
|
|
echo "<option value=\"\">".i18n("Select a Province")."</option>\n";
|
|
while($r=mysql_fetch_object($q))
|
|
{
|
|
if($r->code == $selected) $sel="selected=\"selected\""; else $sel="";
|
|
|
|
echo "<option $sel value=\"$r->code\">".i18n($r->province);
|
|
echo "</option>\n";
|
|
}
|
|
|
|
echo "</select>\n";
|
|
}
|
|
|
|
}
|
|
|
|
|
|
function outputStatus($status)
|
|
{
|
|
$ret="";
|
|
switch($status)
|
|
{
|
|
case 'incomplete':
|
|
$ret.="<div class=\"incomplete\">";
|
|
$ret.= i18n("Incomplete");
|
|
$ret.= "</div>";
|
|
break;
|
|
case 'complete':
|
|
$ret.= "<div class=\"complete\">";
|
|
$ret.= i18n("Complete");
|
|
$ret.= "</div>";
|
|
break;
|
|
case 'empty':
|
|
$ret.="<div class=\"incomplete\">";
|
|
$ret.= i18n("Empty");
|
|
$ret.= "</div>";
|
|
break;
|
|
|
|
default:
|
|
$ret.=i18n("Unknown");
|
|
break;
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
|
|
function email_send($val,$to,$sub_subject=array(),$sub_body=array())
|
|
{
|
|
$q=mysql_query("SELECT * FROM emails WHERE val='$val'");
|
|
if($r=mysql_fetch_object($q))
|
|
{
|
|
$subject=i18n($r->subject);
|
|
$body=i18n($r->body);
|
|
|
|
if(count($sub_subject))
|
|
{
|
|
foreach($sub_subject AS $sub_k=>$sub_v)
|
|
{
|
|
$subject=ereg_replace("\[$sub_k\]",$sub_v,$subject);
|
|
}
|
|
}
|
|
if(count($sub_body))
|
|
{
|
|
foreach($sub_body AS $sub_k=>$sub_v)
|
|
{
|
|
$body=ereg_replace("\[$sub_k\]",$sub_v,$body);
|
|
}
|
|
}
|
|
|
|
//now word-wrap the body to 79 chars
|
|
//hmm forget the wordwrap for now, its not really needed, but could be done later if need be.
|
|
//i'll leave in the start of the function, but its not nearly complete
|
|
/*
|
|
$MAXCHARS=79;
|
|
$c=0;
|
|
$lastspace=0;
|
|
for($x=0;$x<strlen($body);$x++)
|
|
{
|
|
if($body[$x]==" ")
|
|
$lastspace=$x;
|
|
$c++;
|
|
if($c>$MAXCHARS)
|
|
{
|
|
|
|
}
|
|
}
|
|
*/
|
|
|
|
|
|
mail($to,$subject,$body,"From: $r->from\r\nReply-To: $r->from");
|
|
}
|
|
else
|
|
{
|
|
echo error(i18n("CRITICAL ERROR: email '%1' not found",array($val)));
|
|
}
|
|
}
|
|
|
|
|
|
?>
|