forked from science-ation/science-ation
998fe35d67
number, and an option to create numbers automatically - Completely remove all references (hopefully) to the Tour ID - Add a Tour type report - Rework the student report query so it actually makes sense. It really should be a whole bunch of left joins based on the students. Using comma (cross) joins creates situations where if the right side of the join doesn't have information, it wipes out the left side. (Happened before with emergency contact info). - Remove the (two) old custom tour reports - Add 4 new tour reports to the database: - ALL tours for the committee, tour list for students, student emergency contact info for tour coordinators, and a list of tour assignments for students
324 lines
9.6 KiB
PHP
324 lines
9.6 KiB
PHP
<?
|
|
/*
|
|
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>
|
|
Copyright (C) 2008 David Grant <dave@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.
|
|
*/
|
|
?>
|
|
<?
|
|
require("../common.inc.php");
|
|
require_once("../user.inc.php");
|
|
user_auth_required('committee', 'admin');
|
|
|
|
/* Load Tours */
|
|
$query = "SELECT * FROM tours WHERE
|
|
year='{$config['FAIRYEAR']}'";
|
|
$r = mysql_query($query);
|
|
$tours = array();
|
|
while($i = mysql_fetch_object($r)) {
|
|
$tours[$i->id]['name'] = $i->name;
|
|
$tours[$i->id]['num'] = $i->num;
|
|
}
|
|
|
|
if($_GET['action']=='info') {
|
|
$sid = intval($_GET['id']);
|
|
|
|
$query="SELECT * FROM students WHERE id='$sid'
|
|
AND year='{$config['FAIRYEAR']}'";
|
|
$r = mysql_query($query);
|
|
$i = mysql_fetch_object($r);
|
|
|
|
send_popup_header(i18n('Student Tour Rank Information - %1 %2',
|
|
array($i->firstname, $i->lastname)));
|
|
$query="SELECT * FROM tours_choice
|
|
WHERE students_id='$sid'
|
|
AND year='{$config['FAIRYEAR']}'
|
|
ORDER BY rank";
|
|
$r = mysql_query($query);
|
|
echo '<table>';
|
|
$count = mysql_num_rows($r);
|
|
while($i = mysql_fetch_object($r)) {
|
|
echo '<tr><td align="right">';
|
|
if($i->rank == 0) {
|
|
echo '<b><nobr>'.i18n('Current Assigned Tour').':</nobr></b>';
|
|
echo '</td><td colspan=\"2\">';
|
|
echo "#{$tours[$i->tour_id]['num']}: {$tours[$i->tour_id]['name']}";
|
|
echo '<br /><br />';
|
|
$count--;
|
|
} else {
|
|
echo '<b>'.i18n('Tour Preference %1',
|
|
array($i->rank)).':</b>';
|
|
echo '</td><td>';
|
|
echo "#{$tours[$i->tour_id]['num']}: {$tours[$i->tour_id]['name']}";
|
|
echo '</td><td>';
|
|
if($i->rank == 1)
|
|
echo i18n('(Most Preferred)');
|
|
if($i->rank == $count)
|
|
echo i18n('(Least Preferred)');
|
|
}
|
|
echo '</td></tr>';
|
|
}
|
|
echo '</table>';
|
|
|
|
send_popup_footer();
|
|
exit;
|
|
}
|
|
|
|
send_header("Tour Assignments",
|
|
array('Committee Main' => 'committee_main.php',
|
|
'Administration' => 'admin/index.php',
|
|
'Tours' => 'admin/tours.php')
|
|
);
|
|
?>
|
|
<script language="javascript" type="text/javascript">
|
|
function addbuttonclicked(id)
|
|
{
|
|
document.forms.tours.action.value="add";
|
|
document.forms.tours.tours_id.value=id;
|
|
document.forms.tours.submit();
|
|
}
|
|
|
|
function openinfo(id)
|
|
{
|
|
if(id)
|
|
currentid=id;
|
|
else
|
|
currentid=document.forms.tours["studentlist[]"].options[document.forms.tours["studentlist[]"].selectedIndex].value;
|
|
|
|
window.open("tours_assignments.php?action=info&id="+currentid,"Student Tour Rank Information","location=no,menubar=no,directories=no,toolbar=no,width=770,height=300,scrollbars=yes");
|
|
return false;
|
|
|
|
}
|
|
function switchinfo()
|
|
{
|
|
if(document.forms.tours["studentlist[]"].selectedIndex != -1)
|
|
{
|
|
currentname=document.forms.tours["studentlist[]"].options[document.forms.tours["studentlist[]"].selectedIndex].text;
|
|
currentid=document.forms.tours["studentlist[]"].options[document.forms.tours["studentlist[]"].selectedIndex].value;
|
|
|
|
document.forms.tours.studentinfobutton.disabled=false;
|
|
document.forms.tours.studentinfobutton.value=currentname;
|
|
openinfo();
|
|
}
|
|
else
|
|
{
|
|
document.forms.tours.studentinfobutton.disabled=true;
|
|
document.forms.tours.studentinfobutton.value="<? echo i18n("Student Tour Rank Info")?>";
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<?
|
|
|
|
|
|
|
|
$tours_id = intval($_POST['tours_id']);
|
|
$student_list = is_array($_POST['studentlist']) ? $_POST['studentlist'] : array();
|
|
|
|
if($_POST['action']=='add' && $tours_id != 0 && count($student_list)>0) {
|
|
// make sure the tour is valid
|
|
if(!array_key_exists($tours_id, $tours)) {
|
|
/* Someone is hacking the POST */
|
|
echo "HALT: Tour list changed between the form and the POST.";
|
|
exit;
|
|
}
|
|
|
|
$added=0;
|
|
foreach($student_list AS $sid) {
|
|
/* Make sure the student exists */
|
|
$sid = intval($sid);
|
|
|
|
$q = mysql_query("SELECT registrations_id FROM students
|
|
WHERE id='$sid'");
|
|
$i = mysql_fetch_object($q);
|
|
$rid = $i->registrations_id;
|
|
|
|
/* Delete any old linking */
|
|
mysql_query("DELETE FROM tours_choice WHERE
|
|
students_id='$sid' AND
|
|
year='{$config['FAIRYEAR']}' AND
|
|
rank='0'");
|
|
/* Connect this student to this tour */
|
|
mysql_query("INSERT INTO tours_choice
|
|
(`students_id`,`registrations_id`,
|
|
`tour_id`,`year`,`rank`)
|
|
VALUES (
|
|
'$sid', '$rid', '$tours_id',
|
|
'{$config['FAIRYEAR']}','0')");
|
|
$added++;
|
|
}
|
|
if($added==1) $j=i18n("student");
|
|
else $j=i18n("students");
|
|
|
|
echo happy(i18n("%1 %2 added to tour #%3 (%4)",array(
|
|
$added,$j,$tours[$tours_id]['num'],$tours[$tours_id]['name'])));
|
|
}
|
|
|
|
$tours_id = intval($_GET['tours_id']);
|
|
$students_id = intval($_GET['students_id']);
|
|
|
|
if($_GET['action']=='del' && $tours_id>0 && $students_id>0) {
|
|
mysql_query("DELETE FROM tours_choice
|
|
WHERE students_id='$students_id'
|
|
AND year='{$config['FAIRYEAR']}'
|
|
AND rank='0'");
|
|
|
|
echo happy(i18n("Removed student from tour #%1 (%2)",array($tours[$tours_id]['num'],$tours[$tours_id]['name'])));
|
|
|
|
}
|
|
|
|
if($_GET['action']=="empty" && $tours_id>0)
|
|
{
|
|
mysql_query("DELETE FROM tours_choice WHERE
|
|
tour_id='$tours_id'
|
|
AND year='{$config['FAIRYEAR']}'
|
|
AND rank='0'");
|
|
echo happy(i18n("Emptied all students from tour #%1 (%2)",array($tours[$tours_id]['num'],$tours[$tours_id]['name'])));
|
|
}
|
|
|
|
|
|
if(!$_SESSION['viewstate']['students_teams_list_show'])
|
|
$_SESSION['viewstate']['students_teams_list_show']='unassigned';
|
|
//now update the students_teams_list_show viewstate
|
|
if($_GET['students_teams_list_show'])
|
|
$_SESSION['viewstate']['students_teams_list_show']=$_GET['students_teams_list_show'];
|
|
|
|
echo "<form name=\"tours\" method=\"post\" action=\"tours_assignments.php\">";
|
|
echo "<input type=\"hidden\" name=\"action\">";
|
|
echo "<input type=\"hidden\" name=\"tours_id\">";
|
|
echo "<input type=\"hidden\" name=\"students_id\">";
|
|
echo "<table>";
|
|
echo "<tr>";
|
|
echo "<th>".i18n("Student List");
|
|
echo "<br />";
|
|
echo "<input disabled=\"true\" name=\"studentinfobutton\" id=\"studentinfobutton\" onclick=\"openinfo()\" type=\"button\" value=\"".i18n("Student Rank Info")."\">";
|
|
echo "</th>";
|
|
echo "<th>".i18n("Tours")."</th>";
|
|
echo "</tr>";
|
|
echo "<tr><td valign=\"top\">";
|
|
|
|
/* Load students with the current tour selections
|
|
* (rank=0), or if there is no selection, make
|
|
* rank NULL, and tours_id NULL */
|
|
$querystr="SELECT students.firstname, students.lastname,
|
|
students.id,
|
|
tours_choice.tour_id, tours_choice.rank
|
|
FROM
|
|
students
|
|
LEFT JOIN tours_choice ON (tours_choice.students_id=students.id AND tours_choice.rank=0)
|
|
LEFT JOIN registrations ON registrations.id=students.registrations_id
|
|
WHERE
|
|
students.year='{$config['FAIRYEAR']}' AND
|
|
(tours_choice.year='{$config['FAIRYEAR']}' OR
|
|
tours_choice.year IS NULL) AND
|
|
registrations.status='complete'
|
|
ORDER BY
|
|
students.lastname,
|
|
students.firstname,
|
|
tours_choice.rank";
|
|
|
|
$q=mysql_query($querystr);
|
|
|
|
echo mysql_error();
|
|
|
|
$student = array();
|
|
$last_student_id = -1;
|
|
while($r=mysql_fetch_object($q))
|
|
{
|
|
$id = $r->id;
|
|
$tours_id = $r->tour_id;
|
|
$rank = $r->rank;
|
|
|
|
if($id != $last_student_id) {
|
|
$last_student_id = $id;
|
|
|
|
$student[$id]['name'] = $r->firstname.' '.$r->lastname;
|
|
}
|
|
if($tours_id != NULL) {
|
|
$tours[$tours_id]['students'][] = $id;
|
|
$student[$id]['tours_id'] = $tours_id;
|
|
}
|
|
}
|
|
|
|
//rint_r($student);
|
|
echo "<select name=\"studentlist[]\" onchange=\"switchinfo()\" multiple=\"multiple\" style=\"width: 250px; height: 600px;\">";
|
|
foreach($student as $id=>$s) {
|
|
if($s['tours_id'] != 0) continue;
|
|
echo "<option value=\"$id\">{$s['name']}</option>\n";
|
|
}
|
|
echo "</select>";
|
|
echo "</td>";
|
|
echo "<td valign=\"top\">";
|
|
|
|
echo "<table width=\"100%\">";
|
|
foreach($tours as $tid=>$t) {
|
|
echo '<tr><td colspan=\"3\"><hr />';
|
|
|
|
echo "<input onclick=\"addbuttonclicked('$tid')\" type=\"button\" value=\"Add >>\">";
|
|
echo " #{$t['num']}: {$t['name']} ";
|
|
echo '</td></tr>';
|
|
$x = 0;
|
|
if(is_array($t['students']) ) {
|
|
foreach($t['students'] AS $sid) {
|
|
$s = $student[$sid];
|
|
if($x == 0) echo '<tr>';
|
|
echo '<td>';
|
|
echo "<a href=\"tours_assignments.php?action=del&tours_id=$tid&students_id=$sid\"><img border=0 src=\"".$config['SFIABDIRECTORY']."/images/16/button_cancel.".$config['icon_extension']."\"></a>";
|
|
echo ' ';
|
|
echo "<a href=\"\" onclick=\"return openinfo($sid);\">";
|
|
echo "{$s['name']}</a>";
|
|
echo "</td>";
|
|
if($x==2) {
|
|
echo '</tr>';
|
|
$x = 0;
|
|
} else
|
|
$x++;
|
|
}
|
|
if($x != 0) echo '</tr>';
|
|
echo "<tr><td colspan=\"3\">";
|
|
echo "<a onclick=\"return confirmClick('Are you sure you want to empty all students from this tour?')\" href=\"tours_assignments.php?action=empty&tours_id=$tid\">";
|
|
echo " ".i18n("Empty All Members")." ";
|
|
echo "<img border=0 src=\"".$config['SFIABDIRECTORY']."/images/16/button_cancel.".$config['icon_extension']."\">";
|
|
echo "</a>";
|
|
echo "</td></tr>";
|
|
}
|
|
else
|
|
{
|
|
echo "<tr><td colspan=\"2\">";
|
|
echo error(i18n("Tour has no members"),"inline");
|
|
echo "</td></tr>";
|
|
}
|
|
|
|
}
|
|
|
|
echo "</table>";
|
|
|
|
echo "<br />";
|
|
|
|
echo "</td></tr>";
|
|
echo "</table>";
|
|
echo "</form>";
|
|
|
|
send_footer();
|
|
|
|
?>
|