- Move the tour manager into a tours subsection of admin

- Add a tour assignment editor, basically a copy of the judge team editor
This commit is contained in:
dave 2007-12-19 07:49:38 +00:00
parent 2af3482ecf
commit dba389618d
4 changed files with 368 additions and 2 deletions

View File

@ -46,7 +46,7 @@ if($config['volunteer_enable'] == 'yes') {
echo "<a href=\"volunteers.php\">".i18n("Volunteer Management")."</a> <br />";
}
if($config['tours_enable'] == 'yes') {
echo "<a href=\"tours_manager.php\">".i18n("Tour Management")."</a> <br />";
echo "<a href=\"tours.php\">".i18n("Tour Management")."</a> <br />";
}
echo "<a href=\"documents.php\">".i18n("Internal Document Management")."</a> <br />";
echo "<hr />";

40
admin/tours.php Normal file
View File

@ -0,0 +1,40 @@
<?
/*
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.
*/
?>
<?
require("../common.inc.php");
require_once("../user.inc.php");
user_auth_required('committee', 'admin');
send_header("Tours",
array('Committee Main' => 'committee_main.php',
'Administration' => 'admin/index.php')
);
echo "<a href=\"tours_manager.php\">".i18n("Manage Tours")."</a> ".i18n("- Add, Delete, Edit, and List tours")."<br />";
echo "<a href=\"tours_assignments.php\">".i18n("Edit Student-Tour Assignments")."</a><br />";
echo "<hr />";
echo "<a href=\"tours_schedulerconfig.php\">".i18n("Automatic Tour Assignments")."</a><br />";
send_footer();
?>

325
admin/tours_assignments.php Normal file
View File

@ -0,0 +1,325 @@
<?
/*
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();
$x = 1;
while($i = mysql_fetch_object($r)) {
$tours[$i->id]['name'] = $i->name;
$tours[$i->id]['num'] = $x;
$x++;
}
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_id,$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_id,$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_id,$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 &gt;&gt;\">";
echo "&nbsp;#{$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 '&nbsp;';
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();
?>

View File

@ -30,7 +30,8 @@
send_header("Tour Management",
array('Committee Main' => 'committee_main.php',
'Administration' => 'admin/index.php')
'Administration' => 'admin/index.php',
'Tours' => 'admin/tours.php')
);
?>
<script language="javascript" type="text/javascript">