forked from science-ation/science-ation
533 lines
16 KiB
PHP
533 lines
16 KiB
PHP
<?
|
|
/*
|
|
This file is part of the 'Science Fair In A Box' project
|
|
SFIAB Website: http://www.sfiab.ca
|
|
|
|
Copyright (C) 2005-2006 Sci-Tech Ontario Inc <info@scitechontario.org>
|
|
Copyright (C) 2005-2006 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
|
|
// Flagging has been added to monitor projects with concern.
|
|
|
|
?>
|
|
<?
|
|
require_once('../common.inc.php');
|
|
require_once('../user.inc.php');
|
|
|
|
$auth_type = user_auth_required(array('fair','committee'), 'admin');
|
|
|
|
//require_once('../register_participants.inc.php');
|
|
|
|
if($_GET['year']) $year=$_GET['year'];
|
|
else $year=$config['FAIRYEAR'];
|
|
|
|
$q = $pdo->prepare("SELECT * FROM projectcategories WHERE year='$year' ORDER BY id");
|
|
$q->execute();
|
|
|
|
while($r=$q->fetch(PDO::FETCH_OBJ))
|
|
$cats[$r->id]=$r->category;
|
|
|
|
$q = $pdo->prepare("SELECT * FROM projectdivisions WHERE year='$year' ORDER BY id");
|
|
$q->execute();
|
|
|
|
while($q->fetch(PDO::FETCH_OBJ))
|
|
$divs[$r->id]=$r->division;
|
|
|
|
$action=$_GET['action'];
|
|
switch($action) {
|
|
case 'load_row':
|
|
$id = intval($_GET['id']);
|
|
$q = list_query($year, '', $id);
|
|
$r = $q->fetch(PDO::FETCH_OBJ);
|
|
print_row($r);
|
|
exit;
|
|
|
|
case 'delete':
|
|
$regid = intval($_GET['id']);
|
|
$q = $pdo->prepare("SELECT * FROM projects WHERE registrations_id='$regid'");
|
|
$q->execute();
|
|
if($q->rowCount()) {
|
|
$p = $q->fetch(PDO::FETCH_ASSOC);
|
|
$stmt = $pdo->prepare("DELETE FROM winners WHERE projects_id='{$p['id']}'");
|
|
$stmt->execute();
|
|
}
|
|
|
|
$stmt = $pdo->prepare("DELETE FROM registrations WHERE id='$regid' AND year='".$config['FAIRYEAR']."'");
|
|
$stmt->execute();
|
|
|
|
$stmt = $pdo->prepare("DELETE FROM students WHERE registrations_id='$regid' AND year='".$config['FAIRYEAR']."'");
|
|
$stmt->execute();
|
|
|
|
$stmt = $pdo->prepare("DELETE FROM projects WHERE registrations_id='$regid' AND year='".$config['FAIRYEAR']."'");
|
|
$stmt->execute();
|
|
|
|
$stmt = $pdo->prepare("DELETE FROM safety WHERE registrations_id='$regid' AND year='".$config['FAIRYEAR']."'");
|
|
$stmt->execute();
|
|
|
|
$stmt = $pdo->prepare("DELETE FROM questions_answers WHERE registrations_id='$regid' AND year='".$config['FAIRYEAR']."'");
|
|
$stmt->execute();
|
|
|
|
$stmt = $pdo->prepare("DELETE FROM mentors WHERE registrations_id='$regid' AND year='".$config['FAIRYEAR']."'");
|
|
$stmt->execute();
|
|
|
|
$stmt = $pdo->prepare("DELETE FROM emergencycontact WHERE registrations_id='$regid' AND year='".$config['FAIRYEAR']."'");
|
|
$stmt->execute();
|
|
happy_("Registration and all related data successfully deleted");
|
|
exit;
|
|
}
|
|
|
|
if($auth_type == 'committee') {
|
|
send_header("Registration Management",
|
|
array('Committee Main' => 'committee_main.php',
|
|
'Administration' => 'admin/index.php',
|
|
'Participant Registration' => 'admin/registration.php')
|
|
);
|
|
} else {
|
|
send_header("Student/Project Management",
|
|
array('Fair Main' => 'fair_main.php') );
|
|
}
|
|
|
|
?>
|
|
|
|
<div id="student_editor" title="Student/Project Editor" style="display: none">
|
|
<div id="editor_tabs" >
|
|
<ul>
|
|
<li><a href="#editor_tab_reg"><span><?=i18n('Registration')?></span></a></li>
|
|
<li><a href="#editor_tab_students"><span><?=i18n('Students')?></span></a></li>
|
|
<li><a href="#editor_tab_project"><span><?=i18n('Project')?></span></a></li>
|
|
</ul>
|
|
<div id="editor_tab_reg">Loading...</div>
|
|
<div id="editor_tab_students">Loading...</div>
|
|
<div id="editor_tab_project">Loading...</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<script language="javascript" type="text/javascript">
|
|
|
|
var registrations_id = 0;
|
|
var registrations_new = 0;
|
|
|
|
function popup_editor(id, open_tab)
|
|
{
|
|
var w = (document.documentElement.clientWidth * 0.9);
|
|
var h = (document.documentElement.clientHeight * 0.9);
|
|
|
|
registrations_id = id;
|
|
registrations_new = 0;
|
|
|
|
if(id == -1) {
|
|
open_tab = 'reg';
|
|
registrations_new = 1;
|
|
}
|
|
|
|
/* Force no tabs to be selected, need to set collapsible
|
|
* to true first */
|
|
$('#editor_tabs').tabs('option', 'collapsible', true);
|
|
$('#editor_tabs').tabs('option', 'selected', -1);
|
|
|
|
/* Then we'll select a tab to force a reload */
|
|
switch(open_tab) {
|
|
case 'reg':
|
|
/* If we open on the reg tab, disable the others until a save */
|
|
$('#editor_tabs').tabs('option', 'disabled', [1,2]);
|
|
$('#editor_tabs').tabs('select', 0);
|
|
break;
|
|
|
|
case 'project':
|
|
$('#editor_tabs').tabs('option', 'disabled', []);
|
|
$('#editor_tabs').tabs('select', 2);
|
|
break;
|
|
default:
|
|
$('#editor_tabs').tabs('option', 'disabled', []);
|
|
$('#editor_tabs').tabs('select', 1);
|
|
break;
|
|
}
|
|
/* Don't let anything collapse */
|
|
$('#editor_tabs').tabs('option', 'collapsible', false);
|
|
|
|
/* Show the dialog */
|
|
$('#student_editor').dialog('option', 'width', w);
|
|
$('#student_editor').dialog('option', 'height', h);
|
|
$("#student_editor").dialog('open');
|
|
|
|
return true;
|
|
}
|
|
|
|
function update_students(numstudents)
|
|
{
|
|
var id = registrations_id;
|
|
|
|
var req = "action=students_load&id="+id;
|
|
if(numstudents != 0 && numstudents != undefined) req = req+"&numstudents="+numstudents;
|
|
|
|
$("#editor_tab_students").load("student_editor.php?"+req, '',
|
|
function(responseText, textStatus, XMLHttpRequest) {
|
|
/* Attach to events we care about */
|
|
$("#students_num").change(function() {
|
|
var num = $("#students_num").val();
|
|
update_students(num);
|
|
});
|
|
|
|
$("#students_save").click(function() {
|
|
var id = registrations_id;
|
|
$("#debug").load("student_editor.php?action=students_save&id="+id, $("#students_form").serializeArray());
|
|
});
|
|
|
|
$(".students_remove_button").click(function() {
|
|
var id = registrations_id;
|
|
var sid = $("#"+this.id +"_students_id").val();
|
|
var conf = confirmClick('<?=i18n("Are you sure you want to remove this student from the project?")?>');
|
|
|
|
if(conf == false) return false;
|
|
|
|
$("#debug").load("student_editor.php?action=student_remove&id="+id+"&students_id="+sid, '',
|
|
function(responseText, textStatus, XMLHttpRequest) {
|
|
update_students();
|
|
});
|
|
|
|
return false;
|
|
});
|
|
}
|
|
);
|
|
return false;
|
|
}
|
|
|
|
function update_project()
|
|
{
|
|
var id = registrations_id;
|
|
$("#editor_tab_project").load("project_editor.php?action=project_load&id="+id, '',
|
|
function(responseText, textStatus, XMLHttpRequest) {
|
|
/* Attach to regenerate button */
|
|
$("#project_regenerate_number").click(function() {
|
|
var id = registrations_id;
|
|
/* Call for regen, and when that's done reload the project screen (and rebind everything),
|
|
* pass all the form data in, because regen does a save first */
|
|
$("#debug").load("project_editor.php?action=project_regenerate_number&id="+id,$("#project_form").serializeArray(),
|
|
function(responseText, textStatus, XMLHttpRequest) {
|
|
update_project();
|
|
});
|
|
});
|
|
|
|
/* Attach to save button */
|
|
$("#project_save").click(function() {
|
|
var id = registrations_id;
|
|
$("#debug").load("project_editor.php?action=project_save&id="+id, $("#project_form").serializeArray());
|
|
});
|
|
|
|
}
|
|
);
|
|
return false;
|
|
}
|
|
|
|
function delete_registration(id)
|
|
{
|
|
registrations_id=id;
|
|
var conf = confirmClick('<?=i18n("Are you sure you want to completely delete this registration?")?>');
|
|
if(conf == false) return false;
|
|
|
|
$("#debug").load("<?=$_SERVER['PHP_SELF']?>?action=delete&id="+id,{},
|
|
function(responseText, textStatus, XMLHttpRequest) {
|
|
var id = registrations_id;
|
|
$("#row_"+id).remove();
|
|
});
|
|
|
|
}
|
|
|
|
function update_reg()
|
|
{
|
|
var id = registrations_id;
|
|
$("#editor_tab_reg").load("student_editor.php?action=registration_load&id="+id, '',
|
|
function(responseText, textStatus, XMLHttpRequest) {
|
|
/* Attach to save button */
|
|
$("#registration_save").click(function() {
|
|
var id = registrations_id;
|
|
$('#debug').load("student_editor.php?action=registration_save&id="+id, $("#registration_form").serializeArray());
|
|
/* Enable the other tabs now after a save, FIXME: should be
|
|
* after a successful save, but we should use on-the-fly form
|
|
* validation to disable the save button, so the extra callback/error
|
|
* check isn't needed */
|
|
$('#editor_tabs').tabs('option', 'disabled', []);
|
|
|
|
return false;
|
|
});
|
|
|
|
}
|
|
);
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
$(document).ready(function() {
|
|
|
|
$("#student_editor").dialog({
|
|
bgiframe: true, autoOpen: false,
|
|
modal: true, resizable: false,
|
|
draggable: false,
|
|
buttons: {
|
|
/* "<?=i18n('Cancel')?>": function() {
|
|
$(this).dialog("close");
|
|
},
|
|
"<?=i18n('Save')?>": function() {
|
|
save_report();
|
|
$(this).dialog("close"); */
|
|
"<?=i18n('Close')?>": function() {
|
|
// save_report();
|
|
$(this).dialog("close");
|
|
}
|
|
},
|
|
close: function() {
|
|
/* Reload the row after the dialog close in case the info has changed */
|
|
var id = registrations_id;
|
|
if(registrations_new == true) {
|
|
/* Create a row before loading it */
|
|
$("#registration_list").append("<tr id=\"row_"+id+"\"></tr>");
|
|
}
|
|
$("#row_"+id).load("<?$_SERVER['PHP_SELF']?>?action=load_row&id="+id);
|
|
$("#row_"+id).effect('highlight',{},500);
|
|
}
|
|
});
|
|
|
|
|
|
$("#editor_tabs").tabs({
|
|
show: function(event, ui) {
|
|
switch(ui.panel.id) {
|
|
case 'editor_tab_students':
|
|
update_students();
|
|
break;
|
|
case 'editor_tab_project':
|
|
update_project();
|
|
break;
|
|
case 'editor_tab_reg':
|
|
update_reg();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
},
|
|
selected: -1
|
|
});
|
|
|
|
$("#newproject").click(function() {
|
|
popup_editor(-1);
|
|
}
|
|
);
|
|
});
|
|
</script>
|
|
|
|
|
|
<br />
|
|
<table width="100%">
|
|
<tr><td>
|
|
<?=i18n("Choose Status")?>:
|
|
<form name="statuschangerform" method="get" action="registration_list.php">
|
|
<select name="showstatus" onchange="document.forms.statuschangerform.submit()">
|
|
|
|
<?
|
|
//if there is no reg fee, then we dont need to show this status, because nobody will ever be in this status
|
|
$status_str = array('' => 'Any Status', 'complete' => 'Complete',
|
|
'paymentpending' => ($config['regfee']>0) ? 'Payment Pending' : '',
|
|
'completeorpaymentpending' => ($config['regfee']>0) ? 'Complete or Payment Pending' : '',
|
|
'open' => 'Open', 'new' => 'New');
|
|
|
|
$showstatus = $_GET['showstatus'];
|
|
|
|
foreach($status_str as $s=>$str) {
|
|
if($str == '') continue;
|
|
$sel = ($showstatus == $s) ? "selected=\"selected\"" : '';
|
|
echo "<option $sel value=\"$s\">".i18n($str)."</option>\n";
|
|
}
|
|
?>
|
|
</select></form></td>
|
|
<td align="right"><button id="newproject"><?=i18n("Create New Project")?></button></td>
|
|
</tr></table>
|
|
<?
|
|
|
|
if($showstatus) {
|
|
switch($showstatus) {
|
|
case "complete": $wherestatus="AND status='complete' "; break;
|
|
case "paymentpending": $wherestatus="AND status='paymentpending' "; break;
|
|
case "completeorpaymentpending": $wherestatus="AND (status='complete' OR status='paymentpending') "; break;
|
|
case "open": $wherestatus="AND status='open' "; break;
|
|
case "new": $wherestatus="AND status='new' "; break;
|
|
default: $wherestatus="";
|
|
}
|
|
}
|
|
else $wherestatus="";
|
|
|
|
$q = list_query($year, $wherestatus, false);
|
|
|
|
echo "<table id=\"registration_list\" class=\"tableview\">";
|
|
echo "<thead><tr>";
|
|
if($showstatus) $stat="&showstatus=".$showstatus;
|
|
echo "<th>".i18n("Status")."</th>";
|
|
echo "<th>".i18n("Email Address")."</th>";
|
|
echo "<th>".i18n("Reg Num")."</th>";
|
|
echo "<th>".i18n("Proj Num")."</th>";
|
|
echo "<th>".i18n("Project Title")."</th>";
|
|
echo "<th>".i18n("Age Category")."</th>";
|
|
echo "<th>".i18n("Division")."</th>";
|
|
echo "<th>".i18n("School(s)")."</th>";
|
|
echo "<th>".i18n("Student(s)")."</th>";
|
|
echo "<th>".i18n("Flagged")."</th>";
|
|
echo "<th>".i18n("Action")."</th>";
|
|
echo "</tr></thead>";
|
|
|
|
while($r=$q->fetch(PDO::FETCH_OBJ)) {
|
|
echo "<tr id=\"row_{$r->reg_id}\">";
|
|
print_row($r);
|
|
echo "</tr>";
|
|
}
|
|
echo "</table>";
|
|
|
|
|
|
echo "<br/><br/>The statistics have moved here: <a href=\"registration_stats.php\">Registration Statistics</a><br/><br/>";
|
|
|
|
send_footer();
|
|
|
|
/* Now some helper functions we call more than once */
|
|
function list_query($year, $wherestatus, $reg_id)
|
|
{
|
|
global $auth_type, $pdo;
|
|
|
|
$reg = '';
|
|
if($reg_id != false)
|
|
$reg = "AND registrations.id='$reg_id'";
|
|
|
|
$fair = '';
|
|
if($auth_type == 'fair') {
|
|
$fair = "AND projects.fairs_id='{$_SESSION['fairs_id']}'";
|
|
}
|
|
|
|
$q = $pdo->prepare("SELECT registrations.id AS reg_id,
|
|
registrations.num AS reg_num,
|
|
registrations.status,
|
|
registrations.email,
|
|
projects.title,
|
|
projects.projectnumber,
|
|
projects.projectcategories_id,
|
|
projects.projectdivisions_id,
|
|
projects.feedback,
|
|
projects.flagged
|
|
FROM
|
|
registrations
|
|
left outer join projects on projects.registrations_id=registrations.id
|
|
WHERE
|
|
1
|
|
AND registrations.year='$year'
|
|
$wherestatus
|
|
$reg $fair
|
|
ORDER BY
|
|
registrations.status DESC, projects.title
|
|
");
|
|
|
|
|
|
|
|
// FIXME
|
|
//echo $pdo->errorInfo();
|
|
return $q;
|
|
}
|
|
|
|
|
|
|
|
function print_row($r)
|
|
{
|
|
global $cats, $divs, $config, $year;
|
|
switch($r->status) {
|
|
case "new": $status_text="New"; break;
|
|
case "open": $status_text="Open"; break;
|
|
case "paymentpending": $status_text="Payment Pending"; break;
|
|
case "complete": $status_text="Complete"; break;
|
|
}
|
|
|
|
$status_text=i18n($status_text);
|
|
|
|
$scl = "style=\"cursor:pointer;\" onclick=\"popup_editor('{$r->reg_id}','');\"";
|
|
$pcl = "style=\"cursor:pointer;\" onclick=\"popup_editor('{$r->reg_id}','project');\"";
|
|
|
|
echo "<td $scl>{$status_text}</td>";
|
|
echo "<td $scl>{$r->email}</td>";
|
|
echo "<td $scl>{$r->reg_num}</td>";
|
|
$pn = str_replace(' ', ' ', $r->projectnumber);
|
|
echo "<td $scl>$pn</td>";
|
|
echo "<td $pcl>{$r->title}</td>";
|
|
|
|
echo "<td $scl>".i18n($cats[$r->projectcategories_id])."</td>";
|
|
echo "<td $scl>".i18n($divs[$r->projectdivisions_id])."</td>";
|
|
|
|
$sq=$pdo->prepare("SELECT students.firstname,
|
|
students.lastname,
|
|
students.id,
|
|
schools.school,
|
|
schools.board,
|
|
schools.id AS schools_id
|
|
FROM
|
|
students,schools
|
|
WHERE
|
|
students.registrations_id='$r->reg_id'
|
|
AND
|
|
students.schools_id=schools.id
|
|
");
|
|
$sq->execute();
|
|
echo $pdo->errorInfo();
|
|
|
|
$studnum=1;
|
|
$schools="";
|
|
$students="";
|
|
while($studentinfo=$sq->fetch(PDO::FETCH_OBJ))
|
|
{
|
|
$students.="$studentinfo->firstname $studentinfo->lastname<br />";
|
|
$schools.="$studentinfo->school <br />";
|
|
}
|
|
|
|
echo "<td $scl>$schools</td>";
|
|
echo "<td $scl>$students</td>";
|
|
|
|
echo "<td align=\"center\" >";
|
|
if($r->flagged == false) {
|
|
echo "<a title=\"".i18n("Not flagged")."\" href=\"#\" onClick=\"popup_editor('{$r->reg_id}','project');\" >";
|
|
echo "<img src=\"".$config['SFIABDIRECTORY']."/images/16/ok.".$config['icon_extension']."\" border=0>";
|
|
echo "</a>";
|
|
}
|
|
else {
|
|
echo "<a title=\"".i18n("Flagged")."\" href=\"#\" onClick=\"popup_editor('{$r->reg_id}','project');\" >";
|
|
echo "<img src=\"".$config['SFIABDIRECTORY']."/images/16/flagged.".$config['icon_extension']."\" border=0>";
|
|
echo "</a>";
|
|
}
|
|
|
|
echo "<td align=\"center\" >";
|
|
if($year==$config['FAIRYEAR']) {
|
|
echo "<a title=\"".i18n("Delete this registration")."\" href=\"#\" onClick=\"delete_registration({$r->reg_id});return false\" >";
|
|
echo "<img src=\"".$config['SFIABDIRECTORY']."/images/16/button_cancel.".$config['icon_extension']."\" border=0>";
|
|
echo "</a>";
|
|
|
|
echo "<form target=\"_blank\" method=\"post\" action=\"../register_participants.php\">";
|
|
echo "<input type=\"hidden\" name=\"action\" value=\"continue\">";
|
|
echo "<input type=\"hidden\" name=\"email\" value=\"$r->email\">";
|
|
echo "<input type=\"hidden\" name=\"regnum\" value=\"$r->reg_num\">";
|
|
echo "<input type=\"submit\" value=\"".i18n("Login")."\">";
|
|
echo "</form>";
|
|
|
|
|
|
}
|
|
echo "</td>";
|
|
|
|
}
|
|
?>
|