2007-11-23 22:07:55 +00:00
< ?
/*
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' ));
2007-11-28 18:46:32 +00:00
function array_remove ( $needle , & $haystack ) {
if ( in_array ( $needle , $haystack ))
unset ( $haystack [ array_search ( $needle , $haystack )]);
}
2007-11-23 22:07:55 +00:00
if ( $_GET [ 'action' ] == " check " )
{
if ( count ( $_GET [ 'check' ])) {
2007-11-27 22:47:06 +00:00
require_once ( " xml.inc.php " );
2007-11-28 18:46:32 +00:00
foreach ( $_GET [ 'check' ] AS $checksource ) {
$checksource = intval ( $checksource );
2007-11-29 18:38:06 +00:00
$q = mysql_query ( " SELECT * FROM award_sources WHERE id=' $checksource ' AND enabled='yes' " );
2007-11-23 22:07:55 +00:00
$r = mysql_fetch_object ( $q );
2007-11-29 18:38:06 +00:00
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 ;
}
2007-11-23 22:07:55 +00:00
echo i18n ( " Checking %1 for awards... " , array ( $r -> name ));
echo " <br /> " ;
2007-11-27 22:47:06 +00:00
$req = array ( " awardrequest " => array (
" username " => $r -> username ,
" password " => $r -> password ,
" year " => $config [ 'FAIRYEAR' ],
)
);
$output = " " ;
xmlCreateRecurse ( $req );
$xmldata = $output ;
2007-11-28 18:46:32 +00:00
$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 );
$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
2007-11-27 22:55:45 +00:00
2007-11-28 18:46:32 +00:00
echo i18n ( " The Remote Server said: " ) . " <br /> " ;
//echo notice($datastream);
$response = xml_parsexml ( $datastream );
$keys = array_keys ( $response );
if ( $keys [ 0 ] == " awardresponse " ) {
2007-11-27 22:55:45 +00:00
2007-11-28 18:46:32 +00:00
//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 /> " ;
2007-11-28 21:04:36 +00:00
if ( $ar [ 'awards' ][ 0 ][ 'award' ])
$numawards = count ( $ar [ 'awards' ][ 0 ][ 'award' ]);
else
$numawards = 0 ;
2007-11-28 18:46:32 +00:00
echo i18n ( " Number of Awards: %1 " , array ( $numawards )) . " <br /> " ;
2007-11-28 21:04:36 +00:00
if ( $numawards > 0 ) {
2007-11-28 18:46:32 +00:00
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 /> " ;
2007-11-27 22:47:06 +00:00
2007-11-28 18:46:32 +00:00
if ( $year == $config [ 'FAIRYEAR' ]) {
2007-11-28 21:55:14 +00:00
$tq = mysql_query ( " SELECT * FROM award_awards WHERE external_identifier=' $identifier ' AND award_sources_id=' $checksource ' AND year=' $year ' " );
2007-11-28 18:46:32 +00:00
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 ;
2007-11-27 22:47:06 +00:00
}
2007-11-28 18:46:32 +00:00
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 ;
2007-11-27 22:47:06 +00:00
}
2007-11-28 18:46:32 +00:00
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 /> " ;
2007-11-27 22:47:06 +00:00
mysql_query ( " INSERT INTO award_prizes (
2007-11-28 18:46:32 +00:00
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])."'
) " );
2007-11-27 22:47:06 +00:00
}
}
2007-11-28 18:46:32 +00:00
//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 ' " );
}
2007-11-27 22:47:06 +00:00
}
2007-11-28 18:46:32 +00:00
//FIXME: update the translations
2007-11-27 22:47:06 +00:00
}
2007-11-28 18:46:32 +00:00
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 ();
}
2007-11-27 22:47:06 +00:00
2007-11-28 18:46:32 +00:00
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 " ));
2007-11-27 22:47:06 +00:00
}
2007-11-28 18:46:32 +00:00
echo " <br /> " ;
2007-11-28 21:04:36 +00:00
}
2007-11-28 18:46:32 +00:00
}
echo " </i> " ;
//remove any awards that are left in the $existingawards array, they must have been removed from the source
foreach ( $existingawards AS $aid ) {
2007-11-28 21:55:14 +00:00
echo i18n ( " Removing award id %1 that was removed from external source " , array ( $aid )) . " <br /> " ;
2007-11-28 18:46:32 +00:00
mysql_query ( " DELETE FROM award_prizes WHERE award_awards_id=' $aid ' " );
mysql_query ( " DELETE FROM award_awards WHERE id=' $aid ' " );
2007-11-27 22:47:06 +00:00
}
}
else
2007-11-28 18:46:32 +00:00
echo error ( i18n ( " Invalid XML response. Expecting '%1', received '%2' " , array ( " awardresponse " , $keys [ 0 ])));
2007-11-28 21:04:36 +00:00
// echo "response=".print_r($datastream);
2007-11-28 18:46:32 +00:00
2007-11-27 22:47:06 +00:00
echo " <br /> " ;
2007-11-23 22:07:55 +00:00
}
}
else
echo error ( i18n ( " No sources available to check " ));
}
else
{
2007-11-28 18:46:32 +00:00
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 ;
2007-11-29 18:38:06 +00:00
$q = mysql_query ( " SELECT * FROM award_sources WHERE enabled='yes' ORDER BY name " );
2007-11-23 22:07:55 +00:00
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> " ;
2007-11-28 18:46:32 +00:00
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> " ;
2007-11-23 22:07:55 +00:00
echo " </tr> " ;
$checkurl .= " &check[]= $r->id " ;
}
echo " </table> \n " ;
echo " <br /> " ;
2007-11-28 18:46:32 +00:00
if ( $links )
echo " <a href= \" award_download.php?action=check $checkurl\ " > " .i18n( " Check all sources " ). " </ a > " ;
2007-11-23 22:07:55 +00:00
}
send_footer ();
?>