<? /* * 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_value_from_array($_GET, 'year')) $year = $_GET['year']; else $year = $config['FAIRYEAR']; $q = $pdo->prepare("SELECT * FROM projectcategories WHERE year=? ORDER BY id"); $q->execute([$year]); while ($r = $q->fetch(PDO::FETCH_OBJ)) $cats[$r->id] = $r->category; $q = $pdo->prepare("SELECT * FROM projectdivisions WHERE year=? ORDER BY id"); $q->execute([$year]); while ($r = $q->fetch(PDO::FETCH_OBJ)) $divs[$r->id] = $r->division; $action = get_value_from_array($_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=?"); $q->execute([$regid]); if ($q->rowCount()) { $p = $q->fetch(PDO::FETCH_ASSOC); $stmt = $pdo->prepare("DELETE FROM winners WHERE projects_id=?"); $stmt->execute([$p['id']]); } $stmt = $pdo->prepare("DELETE FROM registrations WHERE id=? AND year=?"); $stmt->execute([$regid,$config['FAIRYEAR']]); $stmt = $pdo->prepare("DELETE FROM students WHERE registrations_id=? AND year=?"); $stmt->execute([$regid,$config['FAIRYEAR']]); $stmt = $pdo->prepare("DELETE FROM projects WHERE registrations_id=? AND year=?"); $stmt->execute([$regid,$config['FAIRYEAR']]); $stmt = $pdo->prepare("DELETE FROM safety WHERE registrations_id=? AND year=?"); $stmt->execute([$regid,$config['FAIRYEAR']]); $stmt = $pdo->prepare("DELETE FROM questions_answers WHERE registrations_id=? AND year=?"); $stmt->execute([$regid,$config['FAIRYEAR']]); $stmt = $pdo->prepare("DELETE FROM mentors WHERE registrations_id=? AND year=?"); $stmt->execute([$regid,$config['FAIRYEAR']]); $stmt = $pdo->prepare("DELETE FROM emergencycontact WHERE registrations_id=? AND year=?"); $stmt->execute([$regid,$config['FAIRYEAR']]); 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', 'active', -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('option', 'active', 0); break; case 'project': $('#editor_tabs').tabs('option', 'disabled', []); $('#editor_tabs').tabs('option', 'active', 2); break; default: $('#editor_tabs').tabs('option', 'disabled', []); $('#editor_tabs').tabs('option', 'active', 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>"); } $("#" + $.escapeSelector("row_" + id)).load("<? $_SERVER['PHP_SELF'] ?>?action=load_row&id="+id); $("#" + $.escapeSelector("row_" + id)).effect('highlight',{},500); } }); $("#editor_tabs").tabs({ create: function(event, ui) { update_students(); update_project(); update_reg(); }, activate: function( event, ui ) { update_students(); update_project(); update_reg(); }, selected: -1 }); /*$("#editor_tabs").tabs({ show: function(event, ui) { console.log('hi'); 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").on("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 style='background: black';>"; 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=? $wherestatus $reg $fair ORDER BY registrations.status DESC, projects.title "); $q->execute([$year]); show_pdo_errors_if_any($pdo); return $q; } function print_row($r) { global $cats, $divs, $config, $year, $pdo; $status_text = null; switch (get_value_property_or_default($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(\'' . get_value_property_or_default($r, 'reg_id') . "','');\""; $pcl = 'style="cursor:pointer;" onclick="popup_editor(\'' . get_value_property_or_default($r, 'reg_id') . "','project');\""; echo "<td $scl>{$status_text}</td>"; // echo "<td $scl>" . get_value_property_or_default($r, 'email') . '</td>'; // echo "<td $scl>" . get_value_property_or_default($r, 'reg_num') . '</td>'; // $pn = str_replace(' ', ' ', get_value_property_or_default($r, 'projectnumber', '')); // echo "<td $scl>$pn</td>"; // echo "<td $pcl>" . get_value_property_or_default($r, 'title') . '</td>'; // echo "<td $scl>" . i18n(get_value_from_array($cats, get_value_property_or_default($r, 'projectcategories_id'), '')) . '</td>'; // echo "<td $scl>" . i18n(get_value_from_array($divs, get_value_property_or_default($r, 'projectdivisions_id', ''))) . '</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=? AND students.schools_id=schools.id "); $sq->execute([$r->reg_id]); show_pdo_errors_if_any($pdo); $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>'; } ?>