diff --git a/admin/award_download.php b/admin/award_download.php index e042117..4b64087 100644 --- a/admin/award_download.php +++ b/admin/award_download.php @@ -31,289 +31,208 @@ '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)]); - } - function check_source($source) { + global $config; + $q=mysql_query("SELECT * FROM fairs WHERE id='$source'"); + $fair=mysql_fetch_assoc($q); + if(!($fair['username'] && $fair['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))); + return; + } + echo i18n("Checking %1 for awards...",array($fair['name'])); + echo "
"; + + if($fair['type'] == 'ysf') { + $req=array("awardrequest"=>array( + "username"=>$r->username, + "password"=>$r->password, + "year"=>$config['FAIRYEAR'], + ) + ); + } else { + $req['getawards'] = array('year'=>$config['FAIRYEAR']); + } + + $data = curl_query($fair, $req); + + if($data['error'] != 0) { + echo error("Server said: {$data['message']}
"); + send_footer(); + exit; + } + echo notice(i18n('Server said: Success')); + + + $keys=array_keys($data); + if(!array_key_exists('awards', $data)) { + echo error(i18n("Invalid XML response. Expecting '%1' in '%2'",array("awards",join(',',array_keys($data))))); +// echo "response=".print_r($datastream); + return; + } + + //get a list of all the existing awards for this external source + $aq=mysql_query("SELECT * FROM award_awards WHERE award_source_fairs_id='$source' AND year='{$config['FAIRYEAR']}'"); + $existingawards=array(); + while($ar=mysql_fetch_object($aq)) { + $existingawards[$ar->id] = true; + } + + echo ""; + $ar=$response['awardresponse'][0]; + $awards = $data['awards']; + $postback = $data['postback']; + echo i18n("Postback URL: %1",array($postback))."
"; + + $numawards=is_array($awards) ? count($awards) : 0; + echo i18n("Number of Awards: %1",array($numawards))."
"; + + if($numawards == 0) { + echo i18n('No awards to process').'

'; + return; + } + + foreach($awards as $award) { + $identifier=$award['identifier']; + $year=$award['year']; + echo i18n("Award Identifier: %1",array($identifier))."   "; + echo i18n("Award Year: %1",array($year))."
"; + echo i18n("Award Name: %1",array($award['name_en']))."
"; + + if($year != $config['FAIRYEAR']) { + echo error(i18n("Award is not for the current fair year... skipping")); + echo '
'; + continue; + } + + $tq=mysql_query("SELECT * FROM award_awards WHERE + external_identifier='$identifier' AND + award_source_fairs_id='$source' AND + year='$year'"); + if(mysql_num_rows($tq) == 0) { + /* Award doesn't exist, create it, then update it with the common code below */ + mysql_query("INSERT INTO award_awards (award_types_id, + year, external_identifier, + award_source_fairs_id) + VALUES (2,'{$year}', + '".mysql_escape_string($identifier)."', + '$source')"); + $award_id=mysql_insert_id(); + } else { + echo i18n("Award already exists, updating info")."
"; + $awardrecord=mysql_fetch_object($tq); + $award_id = $awardrecord->id; + } + + //remove it from the existingawards list + unset($existingawards[$award_id]); + + //check if the sponsor exists, if not, add them + $sponsor_str = mysql_escape_string($award['sponsor']); + $sponsorq=mysql_query("SELECT * FROM sponsors WHERE organization='$sponsor_str'"); + if($sponsorr=mysql_fetch_object($sponsorq)) { + $sponsor_id=$sponsorr->id; + } else { + mysql_query("INSERT INTO sponsors (organization,year,notes,confirmed) + VALUES ('$sponsor_str','$year','".mysql_escape_string("Imported from external source: $r->name")."','yes')"); + $sponsor_id=mysql_insert_id(); + } + + mysql_query("UPDATE award_awards SET + sponsors_id='$sponsor_id', + name='".mysql_escape_string($award['name_en'])."', + criteria='".mysql_escape_string($award['criteria_en'])."', + external_postback='".mysql_escape_string($postback)."' + WHERE + id='$award_id' + AND external_identifier='".mysql_escape_string($identifier)."' + AND year='$year' + "); + echo mysql_error(); + + //update the prizes + $prizes = $award['prizes']; + if(is_array($prizes) && count($prizes) > 0) { + echo i18n("Number of prizes: %1",array(count($prizes)))."
"; + $pq=mysql_query("SELECT * FROM award_prizes WHERE award_awards_id='$award_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 doesn't exist, add it + if(!array_key_exists($prize['identifier'],$existingprizes)) { + /* Add a base entry, then update it below, yes it's two sql queries, + * but it's much shorter code, and means changing things in only + * one spot */ + echo " ".i18n("Adding prize %1",array($prize['identifier']))."
"; + mysql_query("INSERT INTO award_prizes (award_awards_id,year,externa_identifier) + VALUES ('$award_id','$year',".mysql_escape_string($prize['identifier'])."')"); + } else { + $ep=$existingprizes[$prize['identifier']]; + echo " ".i18n("Updating prize %1",array($ep->external_identifier))."
"; + } + + if(!array_key_exists($prize['identifier'],$existingprizes)) { + $ep=$existingprizes[$prize['identifier']]; + + mysql_query("UPDATE award_prizes SET + cash='".intval($prize['cash'])."', + scholarship='".intval($prize['scholarship'])."', + value='".intval($prize['value'])."', + prize='".mysql_escape_string($prize['prize_en'])."', + number='".intval($prize['number'])."', + `order`='".intval($prize['ord'])."' + WHERE + id='$ep->id'"); + + //remove it from the list + unset($existingprizes[$ep->external_identifier]); + } + + //if an entry exists thats not in the xml -> delete it + foreach($existingprizes AS $ep) { + echo " ".i18n("Removing prize %1",array($ep->external_identifier))."
"; + mysql_query("DELETE FROM award_prizes WHERE id='$ep->id'"); + } + } + //FIXME: update the translations + } + } + echo "
"; + + +//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))."
"; + mysql_query("DELETE FROM award_prizes WHERE award_awards_id='$aid'"); + mysql_query("DELETE FROM award_awards WHERE id='$aid'"); + } + + echo ""; } if($_GET['action']=="check") { if(count($_GET['check'])) { foreach($_GET['check'] AS $checksource) { - - $checksource=intval($checksource); - $q=mysql_query("SELECT * FROM fairs WHERE id='$checksource'"); - $fair=mysql_fetch_assoc($q); - if(!($fair['username'] && $fair['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($fair['name'])); - echo "
"; - - if($fair['type'] == 'ysf') { - $req=array("awardrequest"=>array( - "username"=>$r->username, - "password"=>$r->password, - "year"=>$config['FAIRYEAR'], - ) - ); - } else { - $req['getawards'] = array('year'=>$config['FAIRYEAR']); - } - - $data = curl_query($fair, $req); - - if($data['error'] != 0) { - echo error("Server said: {$data['message']}
"); - send_footer(); - exit; - } - echo notice(i18n('Server said: Success')); - - $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 ""; - $ar=$response['awardresponse'][0]; - $postback=$ar['postback'][0]; - echo i18n("Postback URL: %1",array($postback))."
"; - if($ar['awards'][0]['award']) - $numawards=count($ar['awards'][0]['award']); - else - $numawards=0; - - echo i18n("Number of Awards: %1",array($numawards))."
"; - 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))."
"; - echo i18n("Award Name: %1",array($award['name_en'][0]))."
"; - - 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")."
"; - - //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 sponsors WHERE organization='".mysql_escape_string($award['sponsor'][0])."'"); - if($sponsorr=mysql_fetch_object($sponsorq)) { - $sponsor_id=$sponsorr->id; - } - else - { - mysql_query("INSERT INTO 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 - 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))."
"; - $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))."
"; - 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]))."
"; - - 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))."
"; - 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 sponsors WHERE organization='".mysql_escape_string($award['sponsor'][0])."'"); - if($sponsorr=mysql_fetch_object($sponsorq)) { - $sponsor_id=$sponsorr->id; - } - else - { - mysql_query("INSERT INTO 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...")."
"; - mysql_query("INSERT INTO award_awards ( - award_types_id, - 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))."
"; - 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 "
"; - - } - } - echo "
"; - - //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))."
"; - 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]))); -// echo "response=".print_r($datastream); - - echo "
"; + check_source(intval($checksource)); + echo "
"; } - } - else + } else { echo error(i18n("No sources available to check")); - } - else - { + } + } else { - if(!function_exists('curl_init')) - { + 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 + } else { $links=true; + } $q=mysql_query("SELECT * FROM fairs WHERE enable_awards='yes' ORDER BY name"); echo ""; diff --git a/admin/curl.inc.php b/admin/curl.inc.php index ffebc9f..4ce2662 100644 --- a/admin/curl.inc.php +++ b/admin/curl.inc.php @@ -52,6 +52,8 @@ break; } + echo "
Curl Send: $str
"; + $ch = curl_init(); /// initialize a cURL session curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_HEADER, 0); /// Header control @@ -65,7 +67,7 @@ $datastream = curl_exec ($ch); /// execute the curl session and return the output to a variable $datastream curl_close ($ch); /// close the curl session -// echo "
$datastream
"; +// echo "
Server Returned: ".urldecode($datastream)."
"; switch($fair['type']) { case 'sfiab': @@ -78,7 +80,7 @@ $ret['message'] = $datastream; break; } -// echo "ret: ";print_r($ret);echo "
"; + echo "
Server Returned: ";print_r($ret);echo "

"; return $ret; } ?> diff --git a/db/db.code.version.txt b/db/db.code.version.txt index b0d7324..fd03ab2 100644 --- a/db/db.code.version.txt +++ b/db/db.code.version.txt @@ -1 +1 @@ -129 +130 diff --git a/db/db.update.130.sql b/db/db.update.130.sql new file mode 100644 index 0000000..54617f5 --- /dev/null +++ b/db/db.update.130.sql @@ -0,0 +1,4 @@ +ALTER TABLE `award_awards` CHANGE `award_sources_id` `award_source_fairs_id` INT( 10 ) UNSIGNED NULL DEFAULT NULL; + +ALTER TABLE `fairs` ADD `award_awards_ids` TEXT NOT NULL; +