From b7da5c59a575941700d6b833b2a7888a59adbf61 Mon Sep 17 00:00:00 2001 From: dave Date: Wed, 4 Feb 2009 08:03:37 +0000 Subject: [PATCH] - Convert old timeslots to the new rounds+timeslots format - New timeslot editor (still needs icons) --- admin/judges_timeslots.php | 511 ++++++++++++++++++++++--------------- db/db.code.version.txt | 2 +- db/db.update.122.sql | 10 + 3 files changed, 311 insertions(+), 212 deletions(-) create mode 100644 db/db.update.122.sql diff --git a/admin/judges_timeslots.php b/admin/judges_timeslots.php index ac00113..1e90609 100644 --- a/admin/judges_timeslots.php +++ b/admin/judges_timeslots.php @@ -25,172 +25,313 @@ require("../common.inc.php"); require_once("../user.inc.php"); user_auth_required('committee', 'admin'); - send_header("Judging Timeslots", - array('Committee Main' => 'committee_main.php', - 'Administration' => 'admin/index.php', - 'Judges' => 'admin/judges.php') - ); - echo "
"; - if($_POST['action']=="add" || $_POST['action']=="edit") - { - $err=0; - if($_POST['date_year'] && $_POST['date_month'] && $_POST['date_day']) - { - $date=$_POST['date_year'] ."-". $_POST['date_month'] ."-". $_POST['date_day']; - } - else - { - $err=1; - echo error(i18n("Date is required")); + $round_str = array('timeslot' => 'Judging Timeslot', + 'divisional1' => 'Divisional Round 1', + 'divisional2' => 'Divisional Round 2', + 'grand' => 'Grand Awards', + 'special' => 'Special Awards' ); + + if(array_key_exists('action',$_POST)) $action = $_POST['action']; + else if(array_key_exists('action',$_GET)) $action = $_GET['action']; + else $action = ''; + + if(array_key_exists('round_id',$_POST)) $round_id = intval($_POST['round_id']); + else if(array_key_exists('round_id',$_GET)) $round_id = intval($_GET['round_id']); + else $round_id = 0; + + if(array_key_exists('timeslot_id',$_POST)) $timeslot_id = intval($_POST['timeslot_id']); + else if(array_key_exists('timeslot_id',$_GET)) $timeslot_id = intval($_GET['timeslot_id']); + else $timeslot_id = 0; + + if($action == 'saveround') { + $save = true; + /* Sanity check all the values */ + $y = intval($_POST['date_year']); + $m = intval($_POST['date_month']); + $d = intval($_POST['date_day']); + if($y && $m && $d) $date = "$y-$m-$d"; + else { + $save = false; + message_push(error(i18n("Date is required"))); } - if($_POST['starttime_hour'] && $_POST['starttime_minute']) - { - $starttime=$_POST['starttime_hour'] .":". $_POST['starttime_minute'].":00"; - } - else - { - $err=1; - echo error(i18n("Start Time is required")); + if(array_key_exists('starttime_hour', $_POST) && array_key_exists('starttime_minute', $_POST)) { + $starttime = sprintf("%02d:%02d:00", intval($_POST['starttime_hour']), intval($_POST['starttime_minute'])); + } else { + $save = false; + message_push( error(i18n("Start Time is required"))); } - if($_POST['endtime_hour'] && $_POST['endtime_minute']) - { - $endtime=$_POST['endtime_hour'] .":". $_POST['endtime_minute'].":00"; - } - else - { - $err=1; - echo error(i18n("End Time is required")); + if(array_key_exists('endtime_hour', $_POST) && array_key_exists('endtime_minute', $_POST)) { + $endtime = sprintf("%02d:%02d:00", intval($_POST['endtime_hour']), intval($_POST['endtime_minute'])); + } else { + $save = false; + message_push( error(i18n("End Time is required"))); } - $allowdivisional=$_POST['allowdivisional']; - if(!$allowdivisional) $allowdivisional="no"; + $type = $_POST['type']; + if(!array_key_exists($type, $round_str)) { + $save = false; + message_push(error(i18n('Invalid type specified'))); + } - if(!$err) - { - if($_POST['action']=="add") - { - mysql_query("INSERT INTO judges_timeslots (date,starttime,endtime,year) VALUES ('$date','$starttime','$endtime','".$config['FAIRYEAR']."')"); - echo happy(i18n("New timeslot successfully added")); + $round_name = mysql_escape_string(stripslashes($_POST['round_name'])); + + if($save == true) { + if($round_id == 0) { + /* New entry */ + mysql_query("INSERT INTO judges_timeslots (round_id,year) VALUES('0','{$config['FAIRYEAR']}')"); + $round_id = mysql_insert_id(); } - if($_POST['action']=="edit") - { - mysql_query("UPDATE judges_timeslots SET `date`='$date', starttime='$starttime', endtime='$endtime', allowdivisional='$allowdivisional' WHERE id='".$_POST['edit']."'"); - echo mysql_error(); - echo happy(i18n("Timeslot successfully saved")); + + mysql_query("UPDATE judges_timeslots SET `date`='$date', + starttime='$starttime', endtime='$endtime', + `round_name`='$round_name', + `type`='$type' WHERE id='$round_id'"); + + echo mysql_error(); + message_push(happy(i18n("Round successfully saved"))); + $action = ''; + } + + } + + if($action == 'deleteround') { + mysql_query("DELETE FROM judges_timeslots WHERE id='$round_id'"); + /* Also delete all timeslots */ + mysql_query("DELETE FROM judges_timeslots WHERE round_id='$round_id'"); + message_push(happy(i18n("Round successfully removed"))); + $action = ''; + } + if($action == 'deletetimeslot') { + mysql_query("DELETE FROM judges_timeslots WHERE id='$timeslot_id'"); + message_push(happy(i18n("Timeslot successfully removed"))); + $action = ''; + } + + if($action == 'savetimeslot') { + $save = true; + + $q = mysql_query("SELECT * FROM judges_timeslots WHERE id='$round_id'"); + $round_data = mysql_fetch_assoc($q); + + $date = $round_data['date']; + + if(array_key_exists('starttime_hour', $_POST) && array_key_exists('starttime_minute', $_POST)) { + $starttime = sprintf("%02d:%02d:00", intval($_POST['starttime_hour']), intval($_POST['starttime_minute'])); + } else { + $save = false; + message_push( error(i18n("Start Time is required"))); + } + + if(array_key_exists('endtime_hour', $_POST) && array_key_exists('endtime_minute', $_POST)) { + $endtime = sprintf("%02d:%02d:00", intval($_POST['endtime_hour']), intval($_POST['endtime_minute'])); + } else { + $save = false; + message_push( error(i18n("End Time is required"))); + } + + if($save == true) { + if($timeslot_id == 0) { + /* New entry */ + mysql_query("INSERT INTO judges_timeslots (round_id,date,type,year) VALUES('$round_id', + '$date','timeslot','{$config['FAIRYEAR']}')"); + $timeslot_id = mysql_insert_id(); } + + mysql_query("UPDATE judges_timeslots SET starttime='$starttime', endtime='$endtime' + WHERE id='$timeslot_id'"); + + echo mysql_error(); + message_push(happy(i18n("Timeslot successfully saved"))); + $action = ''; } } - else if($_POST['action']=="addmultiple") - { - if($_POST['addnum'] && $_POST['date_day'] && $_POST['date_month'] && $_POST['date_year'] && $_POST['starttime_hour'] && $_POST['starttime_minute'] && $_POST['duration'] && $_POST['break']) - { - $date=$_POST['date_year']."-".$_POST['date_month']."-".$_POST['date_day']; - $hr=$_POST['starttime_hour']; - $min=$_POST['starttime_minute']; - $dur=$_POST['duration']; - $brk=$_POST['break']; - $tt=$dur+$brk; + + if($action=='savemultiple') { + $save = true; + + $addnum = intval($_POST['addnum']); + $duration = intval($_POST['duration'] ); + $break = intval($_POST['break']); - if($_POST['allowdivisional']=="yes") $ad="yes"; else $ad="no"; + if(array_key_exists('starttime_hour', $_POST) && array_key_exists('starttime_minute',$_POST) && $addnum && $duration) { + + $q = mysql_query("SELECT * FROM judges_timeslots WHERE id='$round_id'"); + $round_data = mysql_fetch_assoc($q); - for($x=0;$x<$_POST['addnum'];$x++) - { - $q=mysql_query("SELECT DATE_ADD('$date $hr:$min:00', INTERVAL $dur MINUTE) AS endtime, - DATE_ADD('$date $hr:$min:00', INTERVAL $tt MINUTE) AS startnext - "); - echo mysql_error(); + $date = $round_data['date']; + + $hr=intval($_POST['starttime_hour']); + $min=intval($_POST['starttime_minute']); + + $tt=$duration+$break; + + for($x=0;$x<$addnum;$x++) { + $q=mysql_query("SELECT DATE_ADD('$date $hr:$min:00', INTERVAL $duration MINUTE) AS endtime, + DATE_ADD('$date $hr:$min:00', INTERVAL $tt MINUTE) AS startnext "); + echo mysql_error(); $r=mysql_fetch_object($q); list($ed,$et)=split(" ",$r->endtime); list($nd,$nt)=split(" ",$r->startnext); - mysql_query("INSERT INTO judges_timeslots (date,starttime,endtime,allowdivisional,year) VALUES ( - '$date', - '$hr:$min:00', - '$et', - '$ad', - '".$config['FAIRYEAR']."')"); - echo mysql_Error(); + $starttime = sprintf("%02d:%02d:00", $hr, $min); + + mysql_query("INSERT INTO judges_timeslots (date,type,round_id,starttime,endtime,year) VALUES ( + '$date','timeslot','{$round_data['id']}', + '$starttime', '$et', + '{$config['FAIRYEAR']}')"); + echo mysql_error(); $date=$nd; list($s_h,$s_m,$s_s)=split(":",$nt); list($e_h,$e_m,$e_s)=split(":",$et); - echo happy(i18n("Adding timeslot: %1",array($date." ".$hr.":".$min." - ".$e_h.":".$e_m))); + message_push(happy(i18n("Adding timeslot: %1",array("$date $hr:$min - $e_h:$e_m")))); $hr=$s_h; $min=$s_m; } + $action = ''; + } else { + message_push(error(i18n("All fields are required to add multiple timeslots"))); } - else - echo error(i18n("All fields are required to add multiple timeslots")); + } + + + + if($action == '') { + send_header("Judging Rounds and Timeslots", + array('Committee Main' => 'committee_main.php', + 'Administration' => 'admin/index.php', + 'Judges' => 'admin/judges.php')); + } else { + send_header("Judging Rounds and Timeslots", + array('Committee Main' => 'committee_main.php', + 'Administration' => 'admin/index.php', + 'Judges' => 'admin/judges.php', + 'Judging Rounds and Timeslots' => 'admin/judges_timeslots.php')); + } + echo "
"; + + + if($action == 'addround' || $action == 'editround') { + echo "
"; + echo "\n"; + echo "\n"; + + if($action == 'addround') { + echo "

Add New Judging Round

"; + $r = array(); + $r['date'] = $config['dates']['fairdate']; + } else { + echo "

Edit Judging Round

"; + $q=mysql_query("SELECT * FROM judges_timeslots WHERE id='$round_id'"); + if(mysql_num_rows($q) != 1) { + echo "UNKNOWN ROUND $round_id"; + exit; + } + $r = mysql_fetch_assoc($q); + } + + echo ""; + echo ""; + + echo ""; + echo ""; + echo ""; + echo "
".i18n('Round Type').":"; + echo ""; + + echo "
".i18n("Name").":"; + echo "
".i18n("Date").":"; + emit_date_selector("date",$r['date']); + + echo "
".i18n("Start Time").":"; + emit_time_selector("starttime",$r['starttime']); + + echo "
".i18n("End Time").":"; + emit_time_selector("endtime",$r['endtime']); + + echo "
"; + + echo ""; + echo "
"; } - //FIXME: only delete if the timeslot is not in use!!! - if($_GET['action']=="delete" && $_GET['delete']) - { - mysql_query("DELETE FROM judges_timeslots WHERE id='".$_GET['delete']."'"); - echo happy(i18n("Timeslot successfully removed")); + if($action == 'addtimeslot' || $action == 'edittimeslot') { + echo "
"; + echo "\n"; + echo "\n"; + echo "\n"; + $q = mysql_query("SELECT * FROM judges_timeslots WHERE id='$round_id'"); + $round_data = mysql_fetch_assoc($q); + if($action == 'addtimeslot') { + echo "

Add New Judging Timeslot

"; + $r = array(); + $r['date'] = $round_data['date']; + } else { + echo "

Edit Judging Timeslot

"; + $q=mysql_query("SELECT * FROM judges_timeslots WHERE id='$timeslot_id'"); + if(mysql_num_rows($q) != 1) { + echo "UNKNOWN ROUND $round_id"; + exit; + } + $r = mysql_fetch_assoc($q); + } + + echo ""; + echo ""; + echo ""; + + echo ""; + echo ""; + echo "
".i18n('Round Type').":{$round_str[$round_data['type']]}
".i18n("Name").":{$round_data['round_name']}
".i18n("Start Time").":"; + emit_time_selector("starttime",$r['starttime']); + + echo "
".i18n("End Time").":"; + emit_time_selector("endtime",$r['endtime']); + + echo "
"; + + echo ""; + echo "
"; } - if($_GET['action']=="addmultiple") - { + if($action == 'addmultiple') { echo "

Add Multiple New Judging Timeslots

"; - echo "<< ".i18n("Back to Judging Timeslots")."\n"; - $q=mysql_query("SELECT * FROM judges_timeslots WHERE year='".$config['FAIRYEAR']."' ORDER BY date DESC LIMIT 1"); - if(mysql_num_rows($q)) - { - $r=mysql_fetch_object($q); - $date=$r->date; - } - else - { - $date=$config['dates']['fairdate']; - } - echo "
"; - echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + $q = mysql_query("SELECT * FROM judges_timeslots WHERE id='$round_id'"); + $round_data = mysql_fetch_assoc($q); + echo ""; - echo ""; + echo ""; + echo ""; - echo ""; - echo ""; - echo ""; - echo ""; + echo ""; - - echo ""; - - + echo i18n("minutes").""; echo "
"; - echo i18n("Add"); - echo ""; + echo "
".i18n('Round Type').":{$round_str[$round_data['type']]}
".i18n("Name").":{$round_data['round_name']}
".i18n("Add").""; echo " "; echo i18n("new timeslots"); echo "
"; - echo i18n("On date"); - echo ""; - emit_date_selector("date",$date); - echo "
"; - echo i18n("Starting timeslots at"); - echo ""; + echo "
".i18n("Starting timeslots at").""; emit_time_selector("starttime"); echo "
"; - echo i18n("With a duration of"); - echo ""; + echo "
".i18n("With a duration of").""; echo " "; - echo i18n("minutes"); - echo "
"; - echo i18n("And a break of"); - echo ""; + echo i18n("minutes")."
".i18n("And a break of").""; echo " "; - echo i18n("minutes"); - echo "
"; - if($allowdivisional=="yes") $ch="checked=\"checked\""; else $ch=""; - echo ""; - echo ""; - echo i18n("Allow this timeslot to be used by the automatic judges scheduler for divisional awards"); - echo "
"; echo ""; @@ -198,113 +339,61 @@ echo "
"; echo "
"; - $showlist=false; - } - else if($_GET['action']=="add" || $_GET['action']=="edit") - { - echo "
"; - echo "\n"; - - if($_GET['action']=="add") - { - echo "

Add New Judging Timeslot

"; - $buttontext=i18n("Add Timeslot"); - //get a default date, either the date from a different timeslot, or the date of the fair, whichever. - $q=mysql_query("SELECT * FROM judges_timeslots WHERE year='".$config['FAIRYEAR']."' ORDER BY date DESC LIMIT 1"); - if(mysql_num_rows($q)) - { - $r=mysql_fetch_object($q); - $date=$r->date; - } - else - { - $date=$config['dates']['fairdate']; - } - $starttime=""; - $endtime=""; - $allowdivisional="yes"; - - } - else if($_GET['action']=="edit") - { - echo "\n"; - echo "

Edit Judging Timeslot

"; - $buttontext=i18n("Save Timeslot"); - $q=mysql_query("SELECT * FROM judges_timeslots WHERE year='".$config['FAIRYEAR']."' AND id='".$_GET['edit']."'"); - $r=mysql_fetch_object($q); - - $date=$r->date; - $starttime=$r->starttime; - $endtime=$r->endtime; - $allowdivisional=$r->allowdivisional; - } - - - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - - echo "
".i18n("Date").":"; - emit_date_selector("date",$date); - - echo "
".i18n("Start Time").":"; - emit_time_selector("starttime",$starttime); - - echo "
".i18n("End Time").":"; - emit_time_selector("endtime",$endtime); - - echo "
"; - if($allowdivisional=="yes") $ch="checked=\"checked\""; else $ch=""; - echo ""; - echo ""; - echo i18n("Allow this timeslot to be used by the automatic judges scheduler for divisional awards"); - echo "
"; - - echo ""; - echo "
"; - - - } - else - { - - echo "".i18n("Add new judging timeslot")."
"; - echo "".i18n("Add multiple new judging timeslots")."
"; + if($action == '') { + echo "".i18n("Add new round")."
"; + echo "
"; echo ""; echo ""; echo ""; echo ""; echo ""; - echo ""; + echo ""; echo ""; echo ""; - $q=mysql_query("SELECT * FROM judges_timeslots WHERE year='".$config['FAIRYEAR']."' ORDER BY date,starttime"); - while($r=mysql_fetch_object($q)) - { + $q=mysql_query("SELECT * FROM judges_timeslots WHERE year='{$config['FAIRYEAR']}' AND `type`!='timeslot' ORDER BY date,starttime"); + while($r=mysql_fetch_object($q)) { echo ""; -// echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - + $qq = mysql_query("SELECT * FROM judges_timeslots WHERE round_id='{$r->id}' ORDER BY `date`,`starttime`"); + $c = mysql_num_rows($qq) +1; + echo ""; + echo ""; + echo ""; + echo ""; echo " \n"; - echo ""; + + while($rr = mysql_fetch_object($qq)) { + echo ""; +// echo ""; + echo ""; + echo ""; + echo ""; + + + echo " \n"; + echo ""; + } } - echo "
".i18n("Date")."".i18n("Start Time")."".i18n("End Time")."".i18n("Div OK?")."".i18n("Judging Round")."".i18n("Actions")."
$r->id$r->date".substr($r->starttime,0,-3)."".substr($r->endtime,0,-3)."$r->allowdivisional$r->date".substr($r->starttime,0,-3)."
"; + + echo "
".substr($r->endtime,0,-3)."{$r->round_name} (".i18n($round_str[$r->type]).")"; - echo "id\">"; + echo "id}\">"; echo " "; - echo "id\">"; + echo "id}\">"; + echo "id}\">(new) "; + echo "id}\">(multiple)
"; echo "
".substr($rr->starttime,0,-3)."".substr($rr->endtime,0,-3)."".i18n($round_str[$rr->type]).""; + echo "id}×lot_id={$rr->id}\">"; + echo " "; + echo "id}\">"; + + echo "
"; + echo ""; } send_footer(); diff --git a/db/db.code.version.txt b/db/db.code.version.txt index 9289ddc..9f54fe3 100644 --- a/db/db.code.version.txt +++ b/db/db.code.version.txt @@ -1 +1 @@ -121 +122 diff --git a/db/db.update.122.sql b/db/db.update.122.sql new file mode 100644 index 0000000..647ebee --- /dev/null +++ b/db/db.update.122.sql @@ -0,0 +1,10 @@ +ALTER TABLE `judges_timeslots` ADD `round_id` INT NOT NULL AFTER `id` ; +ALTER TABLE `judges_timeslots` ADD `round_name` TINYTEXT NOT NULL AFTER `endtime` ; +ALTER TABLE `judges_timeslots` ADD `type` ENUM( 'timeslot','divisional1', 'divisional2', 'grand', 'specialawards' ) NOT NULL AFTER `round_id` ; + +UPDATE `judges_timeslots` SET `type`='divisional1' WHERE allowdivisional='yes'; +UPDATE `judges_timeslots` SET `type`='specialawards' WHERE allowdivisional='no'; + +ALTER TABLE `judges_timeslots` DROP `allowdivisional` ; + +