<? /* * 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. */ // This file was modified Jan of 2014 by Richard Sin // Added project type. ?> <? require ('common.inc.php'); include 'register_participants.inc.php'; // authenticate based on email address and registration number from the SESSION if (!$_SESSION['email']) { header('Location: register_participants.php'); exit; } if (!$_SESSION['registration_number']) { header('Location: register_participants.php'); exit; } global $pdo; $q = $pdo->prepare('SELECT registrations.id AS regid, students.id AS studentid, students.firstname FROM registrations,students ' . 'WHERE students.email=?' . 'AND registrations.num=?' . 'AND registrations.id=?' . 'AND students.registrations_id=registrations.id ' . 'AND registrations.year=?' . 'AND students.year=?'); $q->execute([$_SESSION['email'], $_SESSION['registration_number'], $_SESSION['registration_id'], $config['FAIRYEAR'], $config['FAIRYEAR']]); show_pdo_errors_if_any($pdo); if ($q->rowCount() == 0) { header('Location: register_participants.php'); exit; } $authinfo = $q->fetch(PDO::FETCH_OBJ); // send the header send_header('Participant Registration - Project Information'); echo '<a href="register_participants_main.php"><< ' . i18n('Back to Participant Registration Summary') . '</a><br />'; echo '<br />'; $studentstatus = studentStatus(); if ($studentstatus != 'complete') { echo error(i18n('Please complete the <a href="register_participants_students.php">Student Information Page</a> first')); send_footer(); exit; } if (get_value_from_array($_POST, 'action') == 'save') { if (registrationFormsReceived()) { echo error(i18n('Cannot make changes to forms once they have been received by the fair')); } else if (registrationDeadlinePassed()) { echo error(i18n('Cannot make changes to forms after registration deadline')); } else { try { // first, lets make sure this project really does belong to them $q = $pdo->prepare('SELECT * FROM projects WHERE id=? AND registrations_id=? AND year=?'); $q->execute([$_POST['id'], $_SESSION['registration_id'], $config['FAIRYEAR']]); if ($q->rowCount() == 1) { $summarywords = preg_split('/[\s,]+/', $_POST['summary']); $summarywordcount = count($summarywords); if ($summarywordcount > $config['participant_project_summary_wordmax'] || $summarywordcount < $config['participant_project_summary_wordmin']) $summarycountok = 0; else $summarycountok = 1; if ($config['participant_project_title_charmax'] && strlen(stripslashes($_POST['title'])) > $config['participant_project_title_charmax']) // 0 for no limit, eg 255 database field limit { $title = substr(stripslashes($_POST['title']), 0, $config['participant_project_title_charmax']); echo error(i18n('Project title truncated to %1 characters', array($config['participant_project_title_charmax']))); } else $title = stripslashes($_POST['title']); if ($config['participant_short_title_enable'] == 'yes' && $config['participant_short_title_charmax'] && strlen(stripslashes($_POST['shorttitle'])) > $config['participant_short_title_charmax']) // 0 for no limit, eg 255 database field limit { $shorttitle = substr(stripslashes($_POST['shorttitle']), 0, $config['participant_short_title_charmax']); echo error(i18n('Short project title truncated to %1 characters', array($config['participant_short_title_charmax']))); } else $shorttitle = stripslashes($_POST['shorttitle']); $stmt = $pdo->prepare('UPDATE projects SET title=?, shorttitle=?, projectdivisions_id=?, projecttype=?, language=?, req_table=?, req_electricity=?, req_special=?, human_participants=?, animal_participants=?, summary=?, summarycountok=? WHERE id=?'); $stmt->execute([$title, $shorttitle, intval($_POST['projectdivisions_id']), stripslashes($_POST['projecttype']), stripslashes($_POST['language']), stripslashes($_POST['req_table']), stripslashes($_POST['req_electricity']), stripslashes($_POST['req_special']), stripslashes($_POST['human_participants']), stripslashes($_POST['animal_participants']), stripslashes($_POST['summary']), $summarycountok, $_POST['id']]); echo notice(i18n('Project information successfully updated')); } else { echo error(i18n('Invalid project to update')); } } catch (PDOException $exception) { echo error(i18n('Failed to update project information. Please ensure all mandatory fields have values.')); } } } // now lets find out their MAX grade, so we can pre-set the Age Category $q = $pdo->prepare('SELECT MAX(grade) AS maxgrade FROM students WHERE registrations_id=?'); $q->execute([$_SESSION['registration_id']]); $gradeinfo = $q->fetch(PDO::FETCH_OBJ); // now lets grab all the age categories, so we can choose one based on the max grade $q = $pdo->prepare('SELECT * FROM projectcategories WHERE year=? ORDER BY id'); $q->execute([$config['FAIRYEAR']]); while ($r = $q->fetch(PDO::FETCH_OBJ)) { // save these in an array, just incase we need them later (FIXME: remove this array if we dont need it) $agecategories[$r->id]['category'] = $r->category; $agecategories[$r->id]['mingrade'] = $r->mingrade; $agecategories[$r->id]['maxgrade'] = $r->maxgrade; if ($gradeinfo->maxgrade >= $r->mingrade && $gradeinfo->maxgrade <= $r->maxgrade) { $projectcategories_id = $r->id; } } // now select their project info $q = $pdo->prepare('SELECT * FROM projects WHERE registrations_id=? AND year=?'); $q->execute([$_SESSION['registration_id'], $config['FAIRYEAR']]); if ($projectcategories_id == '') { echo error(i18n('No project age categories')); } // check if it exists, if we didnt find any record, lets insert one if ($q->rowCount() == 0) { $stmt = $pdo->prepare('INSERT INTO projects (registrations_id,projectcategories_id,year) VALUES (?,?,?)'); $stmt->execute([$_SESSION['registration_id'], $projectcategories_id, $config['FAIRYEAR']]); // now query the one we just inserted $q = $pdo->prepare('SELECT * FROM projects WHERE registrations_id=? AND year=?'); $q->execute([$_SESSION['registration_id'], $config['FAIRYEAR']]); } $projectinfo = $q->fetch(PDO::FETCH_OBJ); // make sure that if they changed their grade on the student page, we update their projectcategories_id accordingly if ($projectcategories_id && $projectinfo->projectcategories_id != $projectcategories_id) { echo notice(i18n('Age category changed, updating to %1', array($agecategories[$projectcategories_id]['category']))); $stmt = $pdo->prepare('UPDATE projects SET projectcategories_id=? WHERE id=?'); $stmt->execute([$projectcategories_id, $projectinfo->id]); } // output the current status $newstatus = projectStatus(); if ($newstatus != 'complete') { echo error(i18n('Project Information Incomplete')); } else if ($newstatus == 'complete') { echo happy(i18n('Project Information Complete')); } ?> <script language="javascript" type="text/javascript"> function countwords() { var wordmax=<?= $config['participant_project_summary_wordmax']; ?>; var wordmin=<?= $config['participant_project_summary_wordmin']; ?>; var summaryobj=document.getElementById('summary'); var wordcountobj=document.getElementById('wordcount'); var wordcountmessageobj=document.getElementById('wordcountmessage'); var wordarray=summaryobj.value.replace(/\s+/g," ").split(" "); var wordcount=wordarray.length; if(wordcount>wordmax || wordcount<wordmin) wordcountmessageobj.className="incomplete"; else wordcountmessageobj.className="complete"; wordcountobj.innerHTML=wordcount; } </script> <? echo "<form name=\"projectform\" method=\"post\" action=\"register_participants_project.php\">\n"; echo "<input type=\"hidden\" name=\"action\" value=\"save\">\n"; echo "<input type=\"hidden\" name=\"id\" value=\"$projectinfo->id\">\n"; echo "<table>\n"; echo '<tr><td>' . i18n('Project Title') . ': </td><td><input type="text" name="title" size="50" value="' . htmlspecialchars($projectinfo->title) . '" />' . REQUIREDFIELD; if ($config['participant_project_title_charmax']) echo i18n('(Max %1 characters)', array($config['participant_project_title_charmax'])); echo "</td></tr>\n"; if ($config['participant_short_title_enable'] == 'yes') { echo '<tr><td>' . i18n('Short Project Title') . ': </td><td><input type="text" name="shorttitle" size="50" value="' . htmlspecialchars($projectinfo->shorttitle) . '" />' . REQUIREDFIELD; if ($config['participant_short_title_charmax']) echo i18n('(Max %1 characters)', array($config['participant_short_title_charmax'])); echo "</td></tr>\n"; } echo '<tr><td>' . i18n('Age Category') . ': </td><td>'; echo i18n($agecategories[$projectcategories_id]['category']); echo ' (' . i18n('Grades %1-%2', array($agecategories[$projectcategories_id]['mingrade'], $agecategories[$projectcategories_id]['maxgrade'])) . ')'; echo '</td></tr>'; echo '<tr><td>' . i18n('Division') . ': </td><td>'; // ###### Feature Specific - filtering divisions by category if ($config['filterdivisionbycategory'] == 'yes') { $q = $pdo->prepare('SELECT projectdivisions.* FROM projectdivisions,projectcategoriesdivisions_link WHERE projectdivisions.id=projectdivisions_id AND projectcategories_id=' . $projectcategories_id . ' AND projectdivisions.year=? AND projectcategoriesdivisions_link.year=? ORDER BY division'); $q->execute([$config['FAIRYEAR'], $config['FAIRYEAR']]); show_pdo_errors_if_any($pdo); } else $q = $pdo->prepare('SELECT * FROM projectdivisions WHERE year=? ORDER BY division'); $q->execute([$config['FAIRYEAR']]); echo '<select name="projectdivisions_id">'; echo '<option value="">' . i18n('Select a division') . "</option>\n"; while ($r = $q->fetch(PDO::FETCH_OBJ)) { if ($r->id == $projectinfo->projectdivisions_id) $sel = 'selected="selected"'; else $sel = ''; echo "<option $sel value=\"$r->id\">" . htmlspecialchars(i18n($r->division)) . "</option>\n"; } echo '</select>' . REQUIREDFIELD; if ($config['usedivisionselector'] == 'yes') { ?> <script language="javascript" type="text/javascript"> function openDivSelWindow() { divselwin=window.open('register_participants_project_divisionselector.php','divsel','width=500,height=220,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no') if(divselwin.opener==null) divselwin.opener=self; return false; } </script> <? // FIXME: Feature to help a student pick a category //echo ' <a href="#" onClick="openDivSelWindow(); return false;">' . i18n('Division Selector') . '</a>'; } echo '</td></tr>'; if ($config['project_type'] == 'yes') { $q = $pdo->prepare('SELECT * FROM projecttypes ORDER BY type'); $q->execute(); echo '<tr><td>' . i18n('Project Type') . ': </td><td>'; echo "<select name=\"projecttype\">\n"; echo '<option value="">' . i18n('Select a project') . "</option>\n"; while ($r = $q->fetch(PDO::FETCH_OBJ)) { if ($r->type == $projectinfo->projecttype) { $sel = 'selected="selected"'; } else { $sel = ''; } echo "<option $sel value=\"$r->type\">" . htmlspecialchars(i18n($r->type)) . "</option>\n"; } echo '</select>' . REQUIREDFIELD . '</td></tr>'; } echo '<tr><td>' . i18n('Language') . ': </td><td>'; echo "<select name=\"language\">\n"; if ($projectinfo->language) $currentlang = $projectinfo->language; else $currentlang = $_SESSION['lang']; foreach ($config['languages'] AS $key => $val) { if ($currentlang == $key) $selected = 'selected="selected"'; else $selected = ''; echo "<option $selected value=\"$key\">$val</option>"; } echo '</select>' . REQUIREDFIELD; echo ' ' . i18n('This is the language you wish to be judged in!') . '</td></tr>'; echo '<tr><td>' . i18n('Requirements') . ': </td><td>'; echo '<table>'; if ($config['participant_project_table'] == 'no') { // if we arent asking them if they want a table or not, then we set it to 'yes' assuming everyone will get a table echo ' <input type="hidden" name="req_table" value="yes" />'; } else { echo '<tr>'; echo ' <td>' . i18n('Table') . REQUIREDFIELD . '</td>'; if ($projectinfo->req_table == 'yes') $check = 'checked="checked"'; else $check = ''; echo " <td><input $check type=\"radio\" name=\"req_table\" value=\"yes\" />Yes</td>"; echo ' <td width="20"> </td>'; if ($projectinfo->req_table == 'no') $check = 'checked="checked"'; else $check = ''; echo " <td><input $check type=\"radio\" name=\"req_table\" value=\"no\" />No</td>"; echo '</tr>'; } if ($config['participant_project_electricity'] == 'no') { // if we arent asking them if they want electricity or not, then we set it to 'yes' assuming everyone will get electricity echo ' <input type="hidden" name="req_electricity" value="yes" />'; } else { echo '<tr>'; echo ' <td>' . i18n('Electricity') . REQUIREDFIELD . '</td>'; if ($projectinfo->req_electricity == 'yes') $check = 'checked="checked"'; else $check = ''; echo " <td><input $check type=\"radio\" name=\"req_electricity\" value=\"yes\" />Yes</td>"; echo ' <td width="20"> </td>'; if ($projectinfo->req_electricity == 'no') $check = 'checked="checked"'; else $check = ''; echo " <td><input $check type=\"radio\" name=\"req_electricity\" value=\"no\" />No</td>"; echo '</tr>'; } echo '<tr>'; echo ' <td>' . i18n('Special') . '</td>'; echo " <td colspan=\"3\"><input type=\"text\" name=\"req_special\" value=\"$projectinfo->req_special\" /></td>"; echo '</tr>'; echo '</table>'; echo '</td></tr>'; if ($config['ethics_questions'] == 'yes') // If we have set ethics questions to yes then ask the ethics questions! { echo '<tr><td>' . i18n('Ethics Questions') . ':</td><td>'; echo '<table>'; echo '<tr>'; echo ' <td>' . i18n('My project involves human participants') . REQUIREDFIELD . '</td>'; if ($projectinfo->human_participants == 'yes') $check = 'checked="checked"'; else $check = ''; echo " <td><input $check type=\"radio\" name=\"human_participants\" value=\"yes\" />Yes</td>"; echo ' <td width="20"> </td>'; if ($projectinfo->human_participants == 'no') $check = 'checked="checked"'; else $check = ''; echo " <td><input $check type=\"radio\" name=\"human_participants\" value=\"no\" />No</td>"; echo '</tr>'; echo '<tr>'; echo ' <td>' . i18n('My project involves animals') . REQUIREDFIELD . '</td>'; if ($projectinfo->animal_participants == 'yes') $check = 'checked="checked"'; else $check = ''; echo " <td><input $check type=\"radio\" name=\"animal_participants\" value=\"yes\" />Yes</td>"; echo ' <td width="20"> </td>'; if ($projectinfo->animal_participants == 'no') $check = 'checked="checked"'; else $check = ''; echo " <td><input $check type=\"radio\" name=\"animal_participants\" value=\"no\" />No</td>"; echo '</tr>'; echo '</table>'; } echo '<tr><td>' . i18n('Summary') . ': </td><td><textarea onchange=\'countwords()\' onkeypress=\'countwords()\' cols="60" rows="12" id="summary" name="summary">' . htmlspecialchars($projectinfo->summary) . '</textarea>' . REQUIREDFIELD . '<br />'; $summarywords = preg_split('/[\s,]+/', trim($projectinfo->summary)); $summarywordcount = count($summarywords); if ($summarywordcount > $config['participant_project_summary_wordmax']) echo '<div id="wordcountmessage" class="incomplete">'; else echo '<div id="wordcountmessage" class="complete">'; echo "<span id=\"wordcount\">$summarywordcount</span>/"; echo i18n('%1 words maximum', array($config['participant_project_summary_wordmax'])); if ($config['participant_project_summary_wordmin'] > 0) { echo i18n(', %1 words minimum', array($config['participant_project_summary_wordmin'])); } echo '</div>'; echo '</td></tr>'; echo '</table>'; echo '<input type="submit" value="' . i18n('Save Project Information') . "\" />\n"; echo '</form>'; send_footer(); ?>