forked from science-ation/science-ation
54f6a2e251
Added a form in schoolschedule.php which uses that class to select students on a team
454 lines
14 KiB
PHP
454 lines
14 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>
|
|
|
|
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("schedule.inc.php");
|
|
|
|
if($_SESSION['schoolid'] && $_SESSION['schoolaccesscode']){
|
|
// we're logged in, make sure the school is good
|
|
$q=mysql_query("SELECT * FROM schools WHERE id='".$_SESSION['schoolid']."' AND accesscode='".$_SESSION['schoolaccesscode']."'");
|
|
echo mysql_error();
|
|
$school=mysql_fetch_object($q);
|
|
if($school) {
|
|
|
|
if($_GET['action']=="loadschedule") {
|
|
$date=$_POST['date'];
|
|
|
|
//cant change this
|
|
$q=mysql_query("SELECT MIN(hour) AS minhour, MAX(hour) AS maxhour, CEIL(MAX(hour)+duration/60) AS maxfinish FROM schedule WHERE conferences_id='{$conference['id']}' AND date='{$date}'");
|
|
$parameters=mysql_fetch_object($q);
|
|
|
|
$starthour=$parameters->minhour;
|
|
$endhour=$parameters->maxfinish;
|
|
|
|
//do some sanity checks
|
|
if($starthour<0 || $starthour>24) $starthour=8;
|
|
if($endhour<$starthour)
|
|
$endhour=$starthour+10;
|
|
if($endhour<0 || $endhour>24) $endhour=15;
|
|
|
|
//minute increment
|
|
$increment=15;
|
|
|
|
if(!eregi("[0-9]{4}-[0-9]{2}-[0-9]{2}",$date)) {
|
|
echo "Invalid date";
|
|
exit;
|
|
}
|
|
echo "<h3>".i18n("Schedule for %1",array(format_date($date)))."</h3>";
|
|
$q=mysql_query("SELECT * FROM locations WHERE conferences_id='{$conference['id']}' ORDER BY name");
|
|
while($r=mysql_fetch_object($q)) {
|
|
$locations[$r->id]=$r->name;
|
|
}
|
|
if(!count($locations)) {
|
|
echo error(i18n("There are no locations defined."));
|
|
exit;
|
|
}
|
|
|
|
echo "<table class=\"schedule\" id=\"schedule\">\n";
|
|
echo "<tr>";
|
|
echo "<th style=\"width: 50px;\"> </th>";
|
|
foreach($locations AS $id=>$name) {
|
|
echo " <th>$name</th>\n";
|
|
}
|
|
for($h=$starthour;$h<$endhour;$h++) {
|
|
for($m=0;$m<60;$m+=$increment) {
|
|
echo "<tr>";
|
|
echo " <td class=\"scheduletime\">";
|
|
if($m==0) {
|
|
echo format_time("$h:$m");
|
|
}
|
|
echo "</td>";
|
|
foreach($locations AS $id=>$name) {
|
|
echo "<td id=\"{$h}_{$m}_{$id}\">";
|
|
echo "</td>";
|
|
}
|
|
echo "</tr>";
|
|
}
|
|
}
|
|
echo "</table>\n";
|
|
|
|
$js="var eventdivs=new Array();\n";
|
|
|
|
//now make all our DIV's for the events that are scheduled in the database
|
|
$x=0;
|
|
//they will be moved by javascript after the fact
|
|
$q=mysql_query("SELECT schedule.*, events.name, events.eventtype FROM schedule JOIN events ON schedule.events_id=events.id WHERE schedule.conferences_id='{$conference['id']}' AND date='{$date}'");
|
|
echo mysql_error();
|
|
while($r=mysql_fetch_object($q)) {
|
|
echo "<div class=\"scheduleevent scheduleevent_{$r->eventtype}\" id=\"event_{$r->id}\" onclick=\"viewEvent($r->id)\">";
|
|
echo "<span class=\"scheduleevent_title\">";
|
|
echo $r->title;
|
|
echo "</span>";
|
|
echo "<br />";
|
|
$starttime=strtotime($r->hour.":".$r->minute);
|
|
$endtime=$starttime+$r->duration*60;
|
|
echo format_time($starttime);
|
|
echo " to ";
|
|
echo format_time($endtime);
|
|
|
|
if($r->eventtype=="scienceolympic") {
|
|
echo "<br />";
|
|
echo i18n("Capacity").": ";
|
|
$regteams=getNumRegistrations($r->id);
|
|
$maxteams=$r->somaxteams;
|
|
echo i18n("%1 of %2",array($regteams,$maxteams))."<br />";
|
|
|
|
$regq=mysql_query("SELECT so_teams.name, schedule_registrations.id
|
|
FROM schedule_registrations
|
|
JOIN so_teams ON so_teams_id=so_teams.id
|
|
WHERE schedule_registrations.conferences_id='{$conference['id']}'
|
|
AND so_teams.schools_id={$school->id}
|
|
AND schedule_registrations.schedule_id='$r->id'");
|
|
echo mysql_error();
|
|
while($regr=mysql_fetch_object($regq)) {
|
|
echo "<div style=\"padding: 2px; border: 1px solid black; background-color: yellow;\" onclick=\"handleTeamClick(event, {$regr->id}, {$r->events_id});\">";
|
|
echo $regr->name;
|
|
echo "</div>";
|
|
}
|
|
}
|
|
|
|
echo "</div>";
|
|
$js.="eventdivs[$r->id]={hour:$r->hour,minute:$r->minute,location:$r->locations_id,duration:$r->duration,title:'".rawurlencode($r->title)."',eventtype:'$r->eventtype'};\n";
|
|
$x++;
|
|
}
|
|
echo "<script type=\"text/javascript\">\n";
|
|
echo $js;
|
|
echo "</script>";
|
|
}else if($_GET['action']=="loadevent") {
|
|
|
|
}else if($_GET['action']=="saveevent") {
|
|
|
|
}else if($_GET['action'] == "saveteamlist"){
|
|
// print_r($_POST);
|
|
|
|
// get a list of all students that could be put on this team
|
|
$query = 'SELECT * FROM users_student';
|
|
$query .= ' JOIN users ON users_student.users_id = users.uid';
|
|
$query .= ' JOIN users_conferences_link ucl ON ucl.users_uid = users_student.users_id';
|
|
$query .= ' WHERE schools_id = ' . $_SESSION['schoolid'];
|
|
$query .= ' AND ucl.conferences_id=' . $conference['id'];
|
|
$query .= ' AND users.deleted = "no"';
|
|
$results = mysql_query($query);
|
|
$availList = array();
|
|
while($record = mysql_fetch_array($results)){
|
|
$availList[$record['uid']] = $record['firstname'] . ' ' . $record['lastname'];
|
|
}
|
|
|
|
// let's empty the current list of students for this team
|
|
$query = "DELETE FROM schedule_registrations_users_link";
|
|
$query .= " WHERE users_uid IN (";
|
|
$query .= implode(',', array_keys($availList)) . ')';
|
|
$query .= " AND schedule_registrations_id = " . (int)$_POST['regId'];
|
|
$results = mysql_query($query);
|
|
|
|
// and now we'll insert only those that were selected
|
|
$query = "INSERT INTO schedule_registrations_users_link (schedule_registrations_id, users_uid)";
|
|
$query .= " VALUES ";
|
|
$valueSet = array();
|
|
for($n = 0; $n < $_POST['numSelected']; $n++){
|
|
$valueSet[] = '(' . (int)$_POST['regId'] . ',' . (int)$_POST[$n] .')';
|
|
}
|
|
$query .= implode(',', $valueSet);
|
|
$results = mysql_query($query);
|
|
|
|
}else if($_GET['action'] == "getteamlist"){
|
|
// first we'll get the basic info, and do a quick check that the selected team is in this user's domain
|
|
if(!array_key_exists('regId', $_POST)){
|
|
echo "error code PEBKAC\n";
|
|
return;
|
|
}
|
|
$query = "SELECT sr.* FROM schedule_registrations sr";
|
|
$query .= " JOIN so_teams ON so_teams.id = sr.so_teams_id";
|
|
$query .= " WHERE sr.id=" . $_POST['regId'];
|
|
$query .= " AND so_teams.schools_id = " . $_SESSION['schoolid'];
|
|
|
|
$results = mysql_query($query);
|
|
if(!$results){
|
|
echo 'team not found';
|
|
return;
|
|
}
|
|
$record = mysql_fetch_array($results);
|
|
|
|
// get a list of all students that could be put on this team
|
|
$query = 'SELECT * FROM users_student';
|
|
$query .= ' JOIN users ON users_student.users_id = users.uid';
|
|
$query .= ' JOIN users_conferences_link ucl ON ucl.users_uid = users_student.users_id';
|
|
$query .= ' WHERE schools_id = ' . $_SESSION['schoolid'];
|
|
$query .= ' AND ucl.conferences_id=' . $conference['id'];
|
|
$query .= ' AND users.deleted = "no"';
|
|
$results = mysql_query($query);
|
|
$availList = array();
|
|
while($record = mysql_fetch_array($results)){
|
|
$availList[$record['uid']] = $record['firstname'] . ' ' . $record['lastname'];
|
|
}
|
|
|
|
// now find out which of these students are already selected
|
|
$query = "SELECT * FROM schedule_registrations_users_link srul";
|
|
$query .= " WHERE users_uid IN (";
|
|
$query .= implode(',', array_keys($availList)) . ')';
|
|
$query .= " AND schedule_registrations_id = " . $_POST['regId'];
|
|
$results = mysql_query($query);
|
|
$selectedList = array();
|
|
if($results){
|
|
while($record = mysql_fetch_array($results)){
|
|
$idx = $record['users_uid'];
|
|
$selectedList[$idx] = $availList[$idx];
|
|
unset($availList[$idx]);
|
|
}
|
|
}
|
|
|
|
// get our minimum and maximum number of students for the event
|
|
$query = "SELECT sominteamsize, somaxteamsize FROM schedule JOIN"
|
|
. " schedule_registrations sr ON sr.schedule_id = schedule.id WHERE"
|
|
. " sr.id = " . $_POST['regId'];
|
|
$results = mysql_fetch_array(mysql_query($query));
|
|
$minTeamSize = $results['sominteamsize'];
|
|
$maxTeamSize = $results['somaxteamsize'];
|
|
|
|
|
|
echo '<script type="text/javascript">';
|
|
echo "minTeamSize = $minTeamSize;";
|
|
echo "maxTeamSize = $maxTeamSize;";
|
|
// build our student lists
|
|
echo "available={";
|
|
$n = 0;
|
|
foreach($availList as $id => $name){
|
|
if($n > 0) echo ',';
|
|
echo "$id:\"$name\"";
|
|
$n++;
|
|
}
|
|
echo '};';
|
|
|
|
echo "selected={";
|
|
$n = 0;
|
|
foreach($selectedList as $id => $name){
|
|
if($n > 0) echo ',';
|
|
echo "$id:\"$name\"";
|
|
$n++;
|
|
}
|
|
echo '};';
|
|
|
|
// pass the additional parameters
|
|
/*
|
|
$query = "SELECT default_min_team_size, default_max_team_size FROM events WHERE id=" . $_POST['eventId'];
|
|
$results = mysql_fetch_array(mysql_query($query));
|
|
echo "min_size=" . $results['default_min_team_size'] . ';';
|
|
echo "max_size=" . $results['default_max_team_size'] . ';';
|
|
*/
|
|
echo '</script>';
|
|
}else{
|
|
|
|
send_header("Event Registration",
|
|
array('School Home' => 'schoolaccess.php'),
|
|
"events_scheduling" );
|
|
echo "<br />";
|
|
?>
|
|
<script type="text/javascript" src="js/listSelector.js"></script>
|
|
<script type="text/javascript">
|
|
|
|
$(document).ready(function() {
|
|
$(".date").datepicker({ dateFormat: 'yy-mm-dd' });
|
|
changeDate();
|
|
|
|
/* Setup the editor dialog */
|
|
$("#event_dialog").dialog({
|
|
bgiframe: true, autoOpen: false,
|
|
modal: true, resizable: false,
|
|
draggable: false,
|
|
buttons: {
|
|
"<?=i18n('Close')?>": function() {
|
|
$(this).dialog("close");
|
|
changeDate();
|
|
}
|
|
}
|
|
});
|
|
$(window).resize(function() {
|
|
placeEvents();
|
|
}
|
|
);
|
|
});
|
|
|
|
function handleTeamClick(event, regId, eventId){
|
|
var e = event || window.event;
|
|
e.stopPropagation();
|
|
params={
|
|
'regId' : regId,
|
|
'eventId' : eventId
|
|
};
|
|
|
|
$("#debug").load("schoolschedule.php?action=getteamlist", params, function(response){
|
|
// at this point, the arrays "available" and "selected" should be defined, giving
|
|
// us the corresponding selection elements for this scheduled event
|
|
|
|
// create a list selector that can use these lists
|
|
selector = new listSelector(selected, available, 'selector');
|
|
selector.setStyle({'height' : '70%', 'margin-top' : '10%'});
|
|
selector.leftTitle = '<?=i18n("assigned");?>';
|
|
selector.rightTitle = '<?=i18n("available");?>';
|
|
var n;
|
|
for(n = 0; n < minTeamSize; n++){
|
|
selector.leftColours[n] = '#AFA';
|
|
}
|
|
for(;n < maxTeamSize; n++){
|
|
selector.leftColours[n] = '#FFA';
|
|
}
|
|
|
|
var sdialog = $('<div></div>');
|
|
// sdialog.append('this is a test');
|
|
sdialog.append(selector.draw());
|
|
sdialog.dialog({
|
|
width : 600,
|
|
height : 400,
|
|
resizable: false,
|
|
draggable: false,
|
|
buttons: {
|
|
"<?=i18n("Save")?>": function() {
|
|
saveTeamList($(this), regId, eventId);
|
|
},
|
|
"<?=i18n('Close')?>": function() {
|
|
$(this).dialog("close");
|
|
changeDate();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function saveTeamList(ddiv, regId, eventId){
|
|
selectedList = selector.getLeftList();
|
|
|
|
//params = selector.getLeftList();
|
|
params = {
|
|
'regId' : regId,
|
|
'eventId' : eventId,
|
|
'numSelected' : selectedList.length
|
|
};
|
|
|
|
for(var n in selectedList){
|
|
params[n] = selectedList[n];
|
|
}
|
|
|
|
$("#debug").load("schoolschedule.php?action=saveteamlist", params, function(response){
|
|
ddiv.dialog("close");
|
|
});
|
|
|
|
}
|
|
|
|
function changeDate() {
|
|
$("#schedulediv").load("schoolschedule.php?action=loadschedule",{date:$("#date").val()},function() {
|
|
placeEvents();
|
|
});
|
|
}
|
|
|
|
function placeEvents() {
|
|
$('.scheduleevent').each(function(idx,item) {
|
|
var eventid=item.id.substr(6);
|
|
var eventobj=eventdivs[eventid];
|
|
|
|
var tablecellid=eventobj.hour+'_'+eventobj.minute+'_'+eventobj.location;
|
|
|
|
if($("#"+tablecellid).length) {
|
|
var eheight=((eventobj.duration/15)*<?=$ROWHEIGHT?>)-<? echo $BORDERSIZE*2; ?>;
|
|
var ewidth=$("#"+tablecellid).width()-<? echo $BORDERSIZE; ?>;
|
|
var p=$("#"+tablecellid).offset();
|
|
$("#"+item.id).css(p);
|
|
$("#"+item.id).show();
|
|
$("#"+item.id).height(eheight);
|
|
$("#"+item.id).width(ewidth);
|
|
}
|
|
else {
|
|
$("#"+item.id).hide();
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
var scheduleId;
|
|
function viewEvent(id) {
|
|
scheduleId=id;
|
|
var eventobj=eventdivs[id];
|
|
|
|
if(id) {
|
|
var eventobj=eventdivs[id];
|
|
$("#event_dialog").dialog('option','title',unescape(eventobj.title));
|
|
$("#event_dialog").dialog('option','width',600);
|
|
$("#event_dialog").dialog('option','height',400);
|
|
$("#event_dialog").dialog('open');
|
|
$("#event_tabs").tabs('select',0);
|
|
|
|
if(eventobj.eventtype=='scienceolympic')
|
|
$("#event_tabs").tabs('option','disabled',[]);
|
|
else
|
|
$("#event_tabs").tabs('option','disabled',[1]);
|
|
update_tab_summary();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function saveEvent() {
|
|
var o=$("#edit_event_form").serializeArray();
|
|
//alert(o);
|
|
$("#debug").load("schoolschedule.php?action=saveevent",o,function() {
|
|
changeDate();
|
|
});
|
|
}
|
|
</script>
|
|
|
|
<?
|
|
$q=mysql_query("SELECT DISTINCT(date) AS date FROM schedule WHERE conferences_id='{$conference['id']}' ORDER BY date");
|
|
$dates=array();
|
|
while($r=mysql_fetch_object($q)) {
|
|
$dates[]=$r->date;
|
|
}
|
|
if(count($dates))
|
|
$editdate=$dates[0];
|
|
else
|
|
list($editdate,$bla)=explode(" ",$config['dates']['fairdate']);
|
|
|
|
echo "<form method=\"post\">\n";
|
|
echo i18n("Schedule date").": ";
|
|
echo "<select id=\"date\" name=\"date\" onchange=\"changeDate()\">";
|
|
foreach($dates AS $d) {
|
|
echo "<option value=\"$d\">".format_date($d)."</option>\n";
|
|
}
|
|
echo "</select>";
|
|
echo "</form>\n";
|
|
?>
|
|
<hr />
|
|
<div id="schedulediv">
|
|
</div>
|
|
<div id="event_dialog">
|
|
<? include "schoolschedule_event_dialog.php"; ?>
|
|
</div>
|
|
<div id="selector_dialog"></div>
|
|
<?
|
|
|
|
send_footer();
|
|
|
|
}
|
|
}
|
|
}
|
|
?>
|