science-ation/admin/cwsfregister.php
2025-02-10 19:54:20 +00:00

327 lines
11 KiB
PHP

<?
/*
* This file is part of the 'Science Fair In A Box' project
* Science-ation Website: https://science-ation.ca/
*
* Copyright (C) 2005 Sci-Tech Ontario Inc <info@scitechontario.org>
* Copyright (C) 2005 James Grant <james@lightbox.org>
* Copyright (C) 2024 AlgoLibre Inc. <science-ation@algolibre.io>
*
* 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.
*/
include 'xml.inc.php';
require_once('../user.inc.php');
function get_cwsf_award_winners()
{
global $config, $pdo;
$winners = array();
$q = $pdo->prepare("SELECT * FROM award_awards WHERE cwsfaward='1' AND year=?");
$q->execute([$config['FAIRYEAR']]);
if ($q->rowCount() == 1) {
$award = $q->fetch(PDO::FETCH_OBJ);
$pq = $pdo->prepare("SELECT * FROM award_prizes WHERE award_awards_id=?");
$pq->execute([$award->id]);
while ($prize = $pq->fetch(PDO::FETCH_OBJ)) {
$wq = $pdo->prepare("SELECT
projects.id,
projects.projectnumber,
projects.title,
projects.summary,
projects.registrations_id,
projects.cwsfdivisionid,
projects.projectdivisions_id
FROM
winners,
projects
WHERE
winners.projects_id=projects.id AND
awards_prizes_id=? AND
winners.year=?");
$wq->execute([$prize->id, $config['FAIRYEAR']]);
show_pdo_errors_if_any($pdo);
while ($project = $wq->fetch(PDO::FETCH_OBJ)) {
$sq = $pdo->prepare("SELECT * FROM students WHERE registrations_id=? AND year=?");
$sq->execute([$project->registrations_id, $config['FAIRYEAR']]);
$students = array();
$cwsf_agecategory = 0;
while ($s = $sq->fetch(PDO::FETCH_OBJ)) {
if ($s->grade >= 7 && $s->grade <= 8) {
if ($cwsf_agecategory < 1)
$cwsf_agecategory = 1;
}
if ($s->grade >= 9 && $s->grade <= 10) {
if ($cwsf_agecategory < 2)
$cwsf_agecategory = 2;
}
if ($s->grade >= 11 && $s->grade <= 13) {
if ($cwsf_agecategory < 3)
$cwsf_agecategory = 3;
}
$students[] = array(
'xml_type' => 'student',
'firstname' => $s->firstname,
'lastname' => $s->lastname,
'email' => $s->email,
'gender' => $s->sex,
'grade' => $s->grade,
'language' => $s->lang,
'birthdate' => $s->dateofbirth,
'address1' => $s->address,
'address2' => '',
'city' => $s->city,
'province' => $s->province,
'postalcode' => $s->postalcode,
'homephone' => $s->phone,
'cellphone' => '',
);
}
$winners[] = array(
'xml_type' => 'project',
'projectid' => $project->id,
'projectnumber' => $project->projectnumber,
'title' => $project->title,
'abstract' => $project->summary,
'category_id' => $cwsf_agecategory,
'division_id' => $project->cwsfdivisionid,
'projectdivisions_id' => $project->projectdivisions_id,
'students' => $students,
);
}
}
// print_r($award);
}
return $winners;
}
?>
<?
require('../common.inc.php');
require('../projects.inc.php');
user_auth_required('committee', 'admin');
send_header(
'One-Click CWSF Registration',
array(
'Committee Main' => 'committee_main.php',
'Administration' => 'admin/index.php'
),
'one-click_cwsf_registration'
);
echo '<br />';
if (count(get_value_from_array($_POST, 'cwsfdivision', []))) {
foreach ($_POST['cwsfdivision'] as $p => $d) {
$q = $pdo->prepare("UPDATE projects SET cwsfdivisionid=? WHERE id=?");
$q->execute([$d, $p]);
}
echo happy(i18n('CWSF Project Divisions saved'));
}
if (get_value_from_array($_POST, 'action') == 'register' && $_POST['xml']) {
if (function_exists('curl_init')) {
$ch = curl_init(); // / initialize a cURL session
curl_setopt($ch, CURLOPT_URL, 'https://secure.ysf-fsj.ca/registration/xmlregister.php');
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=' . $_POST['xml']); // / 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 i18n('The YSC Registration Server said:') . '<br />';
echo notice($datastream);
} else {
echo error('CURL Support Missing');
echo i18n('Your PHP installation does not support CURL. You will need to login to the YSC system as the regional coodinator and upload the XML data manually');
}
send_footer();
exit;
}
/* Load the YSC fair */
$q = $pdo->prepare("SELECT * FROM fairs WHERE abbrv='YSC'");
$q->execute();
if ($q->rowCount() < 1) {
echo error(i18n('You have not defined the YSC upstream fair in the Science Fair Management area.'));
$ok = false;
} else {
$f = $q->fetch(PDO::FETCH_ASSOC);
$ysc_region_id = $f['username'];
$ysc_region_password = $f['password'];
}
$ok = true;
// make sure we have the ysc_region_id and ysc_region_password
if ($ysc_region_id == '') {
echo error(i18n('You have not yet specified a username for YSC (your Region ID). Go to the <a href="sciencefairs.php">Science Fair Management</a> page to set it'));
$ok = false;
}
if ($ysc_region_password == '') {
echo error(i18n('You have not yet specified a password for YSC (your Region Password). Go to the <a href="sciencefairs.php">Science Fair Management</a> page to set it'));
$ok = false;
}
if ($ok) {
$q = $pdo->prepare("SELECT * FROM award_awards WHERE cwsfaward='1' AND year=?");
$q->execute([$config['FAIRYEAR']]);
if (!$q->rowCount()) {
echo error(i18n('Cannot find an award that is specified as the Canada-Wide Science Fair Award'));
echo i18n('Please go to the awards manager and select which award identifies your CWSF students');
} else if ($q->rowCount() > 1) {
echo error(i18n('There is more than one award that is identified as your Canada-Wide Science Fair award.'));
echo i18n('Please go to the awards manager and choose only one award that identifies your CWSF students');
} else {
$award = $q->fetch(PDO::FETCH_OBJ);
echo '<b>' . i18n('CWSF Award') . ':</b> ' . $award->name . '<br />';
echo i18n("Please review the list of winning projects/students below. If it is all correct then you can click the 'Register for CWSF' button at the bottom of the page to send the information to YSC");
echo '<br />';
echo '<br />';
$winners = get_cwsf_award_winners();
echo '<b>' . i18n('Found %1 CWSF prize winners', array(count($winners))) . '</b>';
echo '<br />';
$error = false;
echo '<form method="post" action="cwsfregister.php">';
echo '<table class="tableview"><thead>';
echo '<tr><th>' . i18n('Project Information') . '</th>';
echo '<th>' . i18n('Project Division / CWSF Project Division') . '</th>';
echo '</tr></thead>';
foreach ($winners as $winner) {
echo '<tr><td>';
echo '<b>';
echo $winner['projectnumber'] . ' - ' . $winner['title'];
echo '</b>';
echo '<br />';
foreach ($winner['students'] as $s) {
echo '&nbsp;';
echo '&nbsp;';
echo '&nbsp;';
echo '&nbsp;';
echo i18n('Name') . ': ';
echo $s['firstname'] . ' ' . $s['lastname'];
echo '<br />';
echo '&nbsp;';
echo '&nbsp;';
echo '&nbsp;';
echo '&nbsp;';
echo i18n('Email') . ': ' . $s['email'];
if (!$s['email']) {
echo error(i18n('No Email Address'), 'inline');
$error = true;
}
echo '<br />';
echo '&nbsp;';
echo '&nbsp;';
echo '&nbsp;';
echo '&nbsp;';
echo i18n('Grade') . ': ' . $s['grade'];
if (!$s['grade']) {
echo error(i18n('No Grade'), 'inline');
$error = true;
}
echo '<br />';
}
if (!$winner['division_id']) {
echo '<br />';
echo error(i18n('Choose a CWSF Division'), 'inline');
$error = true;
}
echo '</td><td>';
$t = $pdo->prepare("SELECT * FROM projectdivisions WHERE year=? AND id=?");
$t->execute([$config['FAIRYEAR'], $winner['projectdivisions_id']]);
$tr = $t->fetch(PDO::FETCH_OBJ);
echo $tr->division;
echo '<br />';
echo '<select name="cwsfdivision[' . $winner['projectid'] . ']">';
echo '<option value="">' . i18n('No corresponding CWSF division') . "</option>\n";
foreach ($CWSFDivisions as $k => $v) {
if ($winner['division_id']) {
if ($k == $winner['division_id'])
$sel = 'selected="selected"';
else
$sel = '';
} else {
if ($k == $tr->cwsfdivisionid)
$sel = 'selected="selected"';
else
$sel = '';
}
echo "<option $sel value=\"$k\">" . i18n($v) . "</option>\n";
}
echo "</select>\n";
echo '</td></tr>';
}
echo '<tr><td></td><td>';
echo '<input type="submit" value="Save CWSF Divisions">';
echo '</td></tr>';
echo '</table>';
echo '</form>';
if (!$error) {
$reg = array('registration' => array(
'ysf_region_id' => $ysc_region_id,
'ysf_region_password' => $ysc_region_password,
'projects' => $winners
));
$output = '';
xmlCreateRecurse($reg);
$xmldata = $output;
echo '<h3>' . i18n('The following data will be sent to Youth Science Canada') . '</h3>';
echo '<form method="post" action="cwsfregister.php">';
echo '<input type="hidden" name="action" value="register">';
echo '<textarea rows="15" cols="80" name="xml">';
echo $xmldata;
echo '</textarea>';
echo '<br />';
echo '<br />';
echo i18n('Warning! You can only use this feature once, and it will send whatever data is listed above. If you try to submit this data a second time to YSC it will not work. So please make sure everything is correct before submitting!');
echo '<br />';
echo '<br />';
echo '<input type="submit" value="' . i18n('Register for CWSF') . '">';
echo '</form>';
} else {
echo error(i18n('You must correct the above errors before registration can proceed'));
}
}
}
send_footer();
?>