forked from science-ation/science-ation
354 lines
12 KiB
PHP
354 lines
12 KiB
PHP
<?
|
|
/*
|
|
This file is part of the 'Science Fair In A Box' project
|
|
SFIAB Website: http://www.sfiab.ca
|
|
|
|
Copyright (C) 2007 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.
|
|
*/
|
|
?>
|
|
<?
|
|
require("../common.inc.php");
|
|
require_once("../user.inc.php");
|
|
user_auth_required('committee', 'admin');
|
|
|
|
send_header("Download Awards",
|
|
array('Committee Main' => 'committee_main.php',
|
|
'Administration' => 'admin/index.php',
|
|
'Awards Main' => 'admin/awards.php' ));
|
|
|
|
function array_remove($needle,&$haystack) {
|
|
if(in_array($needle,$haystack))
|
|
unset($haystack[array_search($needle,$haystack)]);
|
|
}
|
|
|
|
|
|
if($_GET['action']=="check")
|
|
{
|
|
if(count($_GET['check'])) {
|
|
require_once("xml.inc.php");
|
|
foreach($_GET['check'] AS $checksource) {
|
|
$checksource=intval($checksource);
|
|
$q=mysql_query("SELECT * FROM award_sources WHERE id='$checksource' AND enabled='yes'");
|
|
$r=mysql_fetch_object($q);
|
|
if(!($r->username && $r->password)) {
|
|
echo error(i18n("Username and Password are not set for source '%1'. Please set them in the SFIAB Configuration/External Award Sources editor first",array($r->name)));
|
|
continue;
|
|
|
|
}
|
|
echo i18n("Checking %1 for awards...",array($r->name));
|
|
echo "<br />";
|
|
|
|
$req=array("awardrequest"=>array(
|
|
"username"=>$r->username,
|
|
"password"=>$r->password,
|
|
"year"=>$config['FAIRYEAR'],
|
|
)
|
|
);
|
|
|
|
$output="";
|
|
xmlCreateRecurse($req);
|
|
$xmldata=$output;
|
|
|
|
$ch = curl_init(); /// initialize a cURL session
|
|
curl_setopt ($ch, CURLOPT_URL,"$r->url");
|
|
curl_setopt ($ch, CURLOPT_HEADER, 0); /// Header control
|
|
curl_setopt ($ch, CURLOPT_POST, 1); /// tell it to make a POST, not a GET
|
|
curl_setopt ($ch, CURLOPT_POSTFIELDS, "xml=".$xmldata); /// put the query string here starting with "?"
|
|
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); /// This allows the output to be set into a variable $datastream
|
|
curl_setopt ($ch, CURLOPT_POSTFIELDSIZE, 0);
|
|
curl_setopt ($ch, CURLOPT_TIMEOUT, 360);
|
|
curl_setopt ($ch, CURLOPT_SSLVERSION, 3);
|
|
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
$datastream = curl_exec ($ch); /// execute the curl session and return the output to a variable $datastream
|
|
$datastream = str_replace(" standalone=\"yes\"","",$datastream);
|
|
// echo "curl close <br />";
|
|
curl_close ($ch); /// close the curl session
|
|
// echo "sending [".nl2br(htmlspecialchars($xmldata))."]";
|
|
|
|
echo i18n("The Remote Server said:")."<br />";
|
|
$response=xml_parsexml($datastream);
|
|
if(is_array($response)) {
|
|
$keys=array_keys($response);
|
|
if($keys[0]=="awardresponse") {
|
|
|
|
//get a list of all the existing awards for this external source
|
|
$aq=mysql_query("SELECT * FROM award_awards WHERE award_sources_id='$checksource' AND year='".$config['FAIRYEAR']."'");
|
|
$existingawards=array();
|
|
while($ar=mysql_fetch_object($aq)) {
|
|
$existingawards[]=$ar->id;
|
|
}
|
|
|
|
echo "<i>";
|
|
$ar=$response['awardresponse'][0];
|
|
$postback=$ar['postback'][0];
|
|
echo i18n("Postback URL: %1",array($postback))." <br />";
|
|
if($ar['awards'][0]['award'])
|
|
$numawards=count($ar['awards'][0]['award']);
|
|
else
|
|
$numawards=0;
|
|
|
|
echo i18n("Number of Awards: %1",array($numawards))." <br />";
|
|
if($numawards>0) {
|
|
|
|
foreach($ar['awards'][0]['award'] AS $award) {
|
|
$identifier=$award['identifier'][0];
|
|
$year=$award['year'][0];
|
|
echo i18n("Award Identifier: %1",array($identifier))." ";
|
|
echo i18n("Award Year: %1",array($year))."<br />";
|
|
echo i18n("Award Name: %1",array($award['name_en'][0]))."<br />";
|
|
|
|
if($year==$config['FAIRYEAR']) {
|
|
$tq=mysql_query("SELECT * FROM award_awards WHERE external_identifier='$identifier' AND award_sources_id='$checksource' AND year='$year'");
|
|
if($awardrecord=mysql_fetch_object($tq)) {
|
|
echo i18n("Award already exists, updating info")."<br />";
|
|
|
|
//remove it from the existingawards list
|
|
array_remove($awardrecord->id,$existingawards);
|
|
|
|
|
|
//check if the sponsor exists, if not, add them
|
|
$sponsorq=mysql_query("SELECT * FROM award_sponsors WHERE organization='".mysql_escape_string($award['sponsor'][0])."'");
|
|
if($sponsorr=mysql_fetch_object($sponsorq)) {
|
|
$sponsor_id=$sponsorr->id;
|
|
}
|
|
else
|
|
{
|
|
mysql_query("INSERT INTO award_sponsors (organization,year,notes,confirmed) VALUES ('".mysql_escape_string($award['sponsor'][0])."','$year','".mysql_escape_string("Imported from external source: $r->name")."','yes')");
|
|
$sponsor_id=mysql_insert_id();
|
|
}
|
|
|
|
mysql_query("UPDATE award_awards SET
|
|
award_sponsors_id='$sponsor_id',
|
|
name='".mysql_escape_string($award['name_en'][0])."',
|
|
criteria='".mysql_escape_string($award['criteria_en'][0])."',
|
|
external_postback='".mysql_escape_string($postback)."'
|
|
WHERE
|
|
id='$awardrecord->id'
|
|
AND external_identifier='".mysql_escape_string($identifier)."'
|
|
AND year='$year'
|
|
");
|
|
|
|
echo mysql_error();
|
|
//update the prizes
|
|
if(is_array($award['prizes'][0]) && count($award['prizes'][0]['prize']>0))
|
|
{
|
|
$prizes=$award['prizes'][0]['prize'];
|
|
$numprizes=count($prizes);
|
|
echo i18n("Number of prizes: %1",array($numprizes))."<br />";
|
|
$pq=mysql_query("SELECT * FROM award_prizes WHERE award_awards_id='$awardrecord->id'");
|
|
//get a list of all the existing prizes
|
|
$existingprizes=array();
|
|
while($pr=mysql_fetch_object($pq)) {
|
|
$existingprizes[$pr->external_identifier]=$pr;
|
|
}
|
|
|
|
foreach($prizes AS $prize) {
|
|
//if it exists -> update it
|
|
if(array_key_exists($prize['identifier'][0],$existingprizes)) {
|
|
$ep=$existingprizes[$prize['identifier'][0]];
|
|
|
|
echo " ".i18n("Updating prize %1",array($ep->external_identifier))."<br />";
|
|
mysql_query("UPDATE award_prizes SET
|
|
cash='".intval($prize['cash'][0])."',
|
|
scholarship='".intval($prize['scholarship'][0])."',
|
|
value='".intval($prize['value'][0])."',
|
|
prize='".mysql_escape_string($prize['prize_en'][0])."',
|
|
number='".intval($prize['number'][0])."',
|
|
`order`='".intval($prize['ord'][0])."'
|
|
WHERE
|
|
id='$ep->id'");
|
|
|
|
//remove it from the list
|
|
unset($existingprizes[$ep->external_identifier]);
|
|
}
|
|
else { //if it doesnt exist -> add it
|
|
echo " ".i18n("Adding prize %1",array($prize['identifier'][0]))."<br />";
|
|
|
|
mysql_query("INSERT INTO award_prizes (
|
|
award_awards_id,
|
|
cash,
|
|
scholarship,
|
|
value,
|
|
prize,
|
|
number,
|
|
`order`,
|
|
`year`,
|
|
external_identifier
|
|
) VALUES (
|
|
'$awardrecord->id',
|
|
'".intval($prize['cash'][0])."',
|
|
'".intval($prize['scholarship'][0])."',
|
|
'".intval($prize['value'][0])."',
|
|
'".mysql_escape_string($prize['prize_en'][0])."',
|
|
'".intval($prize['number'][0])."',
|
|
'".intval($prize['ord'][0])."',
|
|
'$year',
|
|
'".mysql_escape_string($prize['identifier'][0])."'
|
|
)");
|
|
|
|
}
|
|
}
|
|
//if an entry exists thats not in the xml -> delete it
|
|
foreach($existingprizes AS $ep) {
|
|
echo " ".i18n("Removing prize %1",array($ep->external_identifier))."<br />";
|
|
mysql_query("DELETE FROM award_prizes WHERE id='$ep->id'");
|
|
}
|
|
}
|
|
//FIXME: update the translations
|
|
}
|
|
else {
|
|
//check if the sponsor exists, if not, add them
|
|
$sponsorq=mysql_query("SELECT * FROM award_sponsors WHERE organization='".mysql_escape_string($award['sponsor'][0])."'");
|
|
if($sponsorr=mysql_fetch_object($sponsorq)) {
|
|
$sponsor_id=$sponsorr->id;
|
|
}
|
|
else
|
|
{
|
|
mysql_query("INSERT INTO award_sponsors (organization,year,notes,confirmed) VALUES ('".mysql_escape_string($award['sponsor'][0])."','$year','".mysql_escape_string("Imported from external source: $r->name")."','yes')");
|
|
$sponsor_id=mysql_insert_id();
|
|
}
|
|
|
|
echo i18n("Award does not exists, adding...")."<br />";
|
|
mysql_query("INSERT INTO award_awards (
|
|
award_types_id,
|
|
award_sponsors_id,
|
|
name,
|
|
criteria,
|
|
year,
|
|
external_identifier,
|
|
external_postback,
|
|
award_sources_id
|
|
)
|
|
VALUES (
|
|
2,
|
|
$sponsor_id,
|
|
'".mysql_escape_string($award['name_en'][0])."',
|
|
'".mysql_escape_string($award['criteria_en'][0])."',
|
|
'".$year."',
|
|
'".mysql_escape_string($identifier)."',
|
|
'".mysql_escape_string($postback)."',
|
|
'$checksource'
|
|
)");
|
|
$award_id=mysql_insert_id();
|
|
|
|
//import the prizes
|
|
if(is_array($award['prizes'][0]) && count($award['prizes'][0]['prize']>0))
|
|
{
|
|
$prizes=$award['prizes'][0]['prize'];
|
|
$numprizes=count($prizes);
|
|
echo i18n("Number of prizes: %1",array($numprizes))."<br />";
|
|
foreach($prizes AS $prize) {
|
|
mysql_query("INSERT INTO award_prizes (
|
|
award_awards_id,
|
|
cash,
|
|
scholarship,
|
|
value,
|
|
prize,
|
|
number,
|
|
`order`,
|
|
`year`,
|
|
external_identifier
|
|
) VALUES (
|
|
'$award_id',
|
|
'".intval($prize['cash'][0])."',
|
|
'".intval($prize['scholarship'][0])."',
|
|
'".intval($prize['value'][0])."',
|
|
'".mysql_escape_string($prize['prize_en'][0])."',
|
|
'".intval($prize['number'][0])."',
|
|
'".intval($prize['ord'][0])."',
|
|
'$year',
|
|
'".mysql_escape_string($prize['identifier'][0])."'
|
|
)");
|
|
}
|
|
}
|
|
else
|
|
echo error(i18n("No prizes associated with this award"));
|
|
|
|
//FIXME: import the translations & prize translations
|
|
}
|
|
}
|
|
else
|
|
{
|
|
echo error(i18n("Award is not for the current fair year... skipping"));
|
|
}
|
|
echo "<br />";
|
|
|
|
}
|
|
}
|
|
echo "</i>";
|
|
|
|
//remove any awards that are left in the $existingawards array, they must have been removed from the source
|
|
foreach($existingawards AS $aid) {
|
|
echo i18n("Removing award id %1 that was removed from external source",array($aid))."<br />";
|
|
mysql_query("DELETE FROM award_prizes WHERE award_awards_id='$aid'");
|
|
mysql_query("DELETE FROM award_awards WHERE id='$aid'");
|
|
}
|
|
}
|
|
else
|
|
echo error(i18n("Invalid XML response. Expecting '%1', received '%2'",array("awardresponse",$keys[0])));
|
|
}
|
|
else
|
|
echo error(i18n("Invalid response. Could not parse XML into Array: %1",array($response)));
|
|
// echo "response=".print_r($datastream);
|
|
|
|
echo "<br />";
|
|
}
|
|
}
|
|
else
|
|
echo error(i18n("No sources available to check"));
|
|
}
|
|
else
|
|
{
|
|
|
|
if(!function_exists('curl_init'))
|
|
{
|
|
echo error(i18n("CURL Support Missing"));
|
|
echo notice(i18n("Your PHP installation does not support CURL. You will need to have CURL support added by your system administrator before being able to access external award sources"));
|
|
$links=false;
|
|
}
|
|
else
|
|
$links=true;
|
|
|
|
$q=mysql_query("SELECT * FROM award_sources WHERE enabled='yes' ORDER BY name");
|
|
echo "<table class=\"tableview\">";
|
|
echo "<tr><th>".i18n("Source Name")."</th>";
|
|
echo "<th>".i18n("Source Location URL")."</th>";
|
|
echo "<th>".i18n("Check")."</th>";
|
|
echo "</tr>";
|
|
while($r=mysql_fetch_object($q)) {
|
|
echo "<tr>";
|
|
echo "<td>$r->name</td>\n";
|
|
echo "<td>$r->url</td>";
|
|
echo "<td align=\"center\">";
|
|
if($links)
|
|
echo "<a href=\"award_download.php?action=check&check[]=$r->id\">".i18n("check")."</a>";
|
|
else
|
|
echo "n/a";
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
$checkurl.="&check[]=$r->id";
|
|
}
|
|
echo "</table>\n";
|
|
echo "<br />";
|
|
|
|
if($links)
|
|
echo "<a href=\"award_download.php?action=check$checkurl\">".i18n("Check all sources")."</a>";
|
|
|
|
}
|
|
send_footer();
|
|
?>
|