* @copyright Deakin University 2007,2008 * @package queXS * @subpackage admin * @link http://www.deakin.edu.au/dcarf/ queXS was writen for DCARF - Deakin Computer Assisted Research Facility * @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2 * */ /** * Configuration file */ include ("../config.inc.php"); /** * Database file */ include ("../db.inc.php"); /** * Authentication */ include ("auth-admin.php"); /** * XHTML functions */ include ("../functions/functions.xhtml.php"); /** * Operator functions */ include ("../functions/functions.operator.php"); /** * Display functions */ include ("../functions/functions.display.php"); /** * Input functions */ include("../functions/functions.input.php"); global $db; /** * Add shifts to the DB based on the shift_template table */ if (isset($_POST['year'])) $year = bigintval($_POST['year']); else $year = "YEAR(NOW())"; if (isset($_POST['woy'])) $woy = bigintval($_POST['woy']); else $woy = "WEEK(NOW(), 3)"; if (isset($_POST['qid'])) $questionnaire_id = bigintval($_POST['qid']); else $questionnaire_id = false; if (isset($_GET['year'])) $year = bigintval($_GET['year']); if (isset($_GET['woy'])) $woy = bigintval($_GET['woy']); if (isset($_GET['questionnaire_id'])) $questionnaire_id = bigintval($_GET['questionnaire_id']); $y = $db->GetRow("SELECT $year as y"); $year = $y['y']; $y = $db->GetRow("SELECT $woy as y"); $woy = $y['y']; $operator_id = get_operator_id(); if (!$operator_id) { xhtml_head(T_("Add shifts")); print "

" . T_("You must be an operator (as well as have administrator access) to add/edit shifts") . "

"; xhtml_foot(); exit(); } if (isset($_POST['submit'])) { //process //update or delete existing shifts foreach($_POST as $key => $val) { if (substr($key,0,5) == "start") { $num = bigintval(substr($key,6)); if (isset($_POST["use_$num"])) { $sql = "UPDATE shift as s, operator as o SET s.start = CONVERT_TZ(CONCAT(STR_TO_DATE(CONCAT($year, ' ',$woy,' ', {$_POST["dow_$num"]}),'%x %v %w'),' ','" . $_POST["start_$num"] . "'), o.Time_zone_name, 'UTC'), s.end = CONVERT_TZ(CONCAT(STR_TO_DATE(CONCAT($year, ' ',$woy,' ', {$_POST["dow_$num"]}),'%x %v %w'),' ','" . $_POST["end_$num"] . "'), o.Time_zone_name, 'UTC') WHERE o.operator_id = '$operator_id' AND shift_id = '$num'"; $db->Execute($sql); } else { $sql = "DELETE FROM shift WHERE shift_id = '$num'"; $db->Execute($sql); } } } //insert new shifts foreach($_POST as $key => $val) { if (substr($key,0,7) == "NEW_use") { if ($val == "on") { $num = bigintval(substr($key,8)); $sql = "INSERT INTO shift (shift_id,questionnaire_id,start,end) SELECT NULL,'$questionnaire_id', CONVERT_TZ(CONCAT(STR_TO_DATE(CONCAT($year, ' ',$woy,' ', {$_POST["NEW_dow_$num"]}),'%x %v %w'),' ','" . $_POST["NEW_start_$num"] . "'), Time_zone_name, 'UTC') , CONVERT_TZ(CONCAT(STR_TO_DATE(CONCAT($year, ' ',$woy,' ', {$_POST["NEW_dow_$num"]}),'%x %v %w'),' ','" . $_POST["NEW_end_$num"] . "'), Time_zone_name, 'UTC') FROM operator WHERE operator_id = '$operator_id'"; $db->Execute($sql); } } } } xhtml_head(T_("Shift management"),true,array("../include/bootstrap/css/bootstrap.min.css","../include/clockpicker/dist/bootstrap-clockpicker.min.css","../include/bootstrap-toggle/css/bootstrap-toggle.min.css","../css/custom.css"),array("../include/jquery/jquery.min.js","../include/bootstrap/js/bootstrap.min.js","../include/clockpicker/dist/bootstrap-clockpicker.js","../include/bootstrap-toggle/js/bootstrap-toggle.min.js","../js/window.js")); //"../css/shifts.css", /** * Display warning if timezone data not installed * */ $sql = "SELECT CONVERT_TZ(NOW(),'SYSTEM','UTC') as t"; $rs = $db->GetRow($sql); if (empty($rs) || !$rs || empty($rs['t'])) print "
" . T_("Your database does not have timezones installed, please see here for details") . "
"; /** * display years including current selected year * display weeks of year including current selected week of year * find if there are already shifts defined for this week of year / year and display them as selected, else show from template * when submitted, add checked shifts, and delete unchecked shifts if they exist * * @todo Use javascript to add shifts if necessarry outside the template */ print "

" . T_("Add shifts in your Time Zone") . "

"; print "

" . T_("Shifts allow you to restrict appointments being made, and interviewers to working on a particlar project at defined times.") . "

"; print "

" . T_("Select a questionnaire") . ":

"; display_questionnaire_chooser($questionnaire_id,false, "form-inline", "form-control"); print "
"; if ($questionnaire_id != false) { print "

" . T_("Select year") . ":  "; for ($i = $year - 1; $i < $year + 4; $i++) { if ($i == $year) print "$i"; else print " $i "; } print "

"; print "

" . T_("Select week") . ": "; for ($i = 1; $i <= 53; $i++) { if ($i == $woy) print "$i"; else print " $i "; } print "

"; $sql = "SELECT shift_id, dt, dta,start,end FROM ( ( SELECT shift_id, DATE_FORMAT( CONVERT_TZ( s.start, 'UTC', o.Time_zone_name ) , '%W %d %m %Y' ) AS dt, DATE( CONVERT_TZ( s.start, 'UTC', o.Time_zone_name ) ) AS dta, TIME( CONVERT_TZ( s.start, 'UTC', o.Time_zone_name ) ) AS start, TIME( CONVERT_TZ( s.end, 'UTC', o.Time_zone_name ) ) AS end FROM shift AS s, operator AS o WHERE WEEK( CONVERT_TZ( s.start, 'UTC', o.Time_zone_name ) , 3 ) = '$woy' AND YEAR( CONVERT_TZ( s.start, 'UTC', o.Time_zone_name ) ) = '$year' AND o.operator_id = '$operator_id' AND s.questionnaire_id = '$questionnaire_id' ) UNION ( SELECT NULL AS shift_id, DATE_FORMAT( STR_TO_DATE( CONCAT( '$year', ' ', '$woy', ' ', day_of_week -1 ) , '%x %v %w' ) , '%W %d %m %Y' ) AS dt, STR_TO_DATE( CONCAT( '$year', ' ', '$woy', ' ', day_of_week -1 ) , '%x %v %w' ) AS dta, start,end FROM shift_template ) ) AS sb GROUP BY dta,start,end"; $shifts = $db->GetAll($sql); $sql = "SELECT DATE_FORMAT(STR_TO_DATE(CONCAT($year, ' ',$woy,' ',day_of_week - 1),'%x %v %w'), '%W %d %m %Y') as dt, DATE_FORMAT(STR_TO_DATE(CONCAT($year, ' ',$woy,' ',day_of_week - 1),'%x %v %w'), '%W') as dtd, DATE_FORMAT(STR_TO_DATE(CONCAT($year, ' ',$woy,' ',day_of_week - 1),'%x %v %w'), '%d %m %Y') as dto, day_of_week - 1 as value FROM day_of_week GROUP BY value"; $daysofweek = $db->GetAll($sql); translate_array($daysofweek,array("dtd")); foreach($daysofweek as $key => $val) $daysofweek[$key]['description'] = $val['dtd'] . " " . $val['dto']; ?>
 "; $count = 1; foreach($shifts as $shift) { $checked=""; $shift_id=""; $prefix=""; if (!empty($shift['shift_id'])) { $checked="checked=\"checked\""; $shift_id = $shift['shift_id']; } else { $shift_id = $count; $prefix = "NEW_"; } print ""; $count++; } ?>
" . T_("Day") . "" . T_("Start") . "" . T_("End") . "" . T_("Use shift?") . "
"; display_chooser($daysofweek, $prefix . "dow_$shift_id", false, true, false, false, false, array("dt",$shift['dt'])); print "

" class="btn btn-primary"/>
"; xhtml_foot(); ?>