roosters.basis_id OR ( more.basis_id = roosters.basis_id AND more.wijz_id > roosters.wijz_id ) ) RIGHT JOIN $roosterdb.weken ON weken.week_id = roosters.week_id WHERE more.week_id IS NULL ORDER BY year, week EOQ ); $time = $_SERVER['REQUEST_TIME']; $year_iso8601 = date("o", $time); $week_iso8601 = date("W", $time); $day_iso8601 = date("N", $time); $hour = date("G"); $minute = date("i"); $lescounter = -1; function getthisdeadline($week) { global $deadline_day, $deadline_hour, $deadline_minute; $day_in_week = strtotime(sprintf("{$week['year']}-01-04 + %d weeks", $week['week'] - 1)); $monday_in_week = $day_in_week - ((date('w', $day_in_week) + 6)%7)*24*60*60; return $monday_in_week + ($deadline_day - 1)*24*60*60 + $deadline_hour*60*60 + $deadline_minute*60; } // intialize $_GET['week_id'] if it is not set to silence warnings // 0 means: take default week if (!isset($_GET['week_id']) || !($_GET['week_id'] > 0)) $_GET['week_id'] = 0; $min_week_id = mdb2_single_val($db, "SELECT config_value FROM config WHERE config_key = 'MIN_WEEK_ID'"); $max_week_id = mdb2_single_val($db, "SELECT config_value FROM config WHERE config_key = 'MAX_WEEK_ID'"); if (isset($weken[$max_week_id + 1])) { $default_week_id = $max_week_id + 1; } else { $default_week_id = $min_week_id; } if ($_GET['week_id'] == 0) { $selected_week_id = $default_week_id; } else { $selected_week_id = $_GET['week_id']; } if ($_GET['week_id'] == $default_week_id) $_GET['week_id'] = ''; // omdat de deadline vrijdagmiddag van de vorige lesweek is, is de eerste lesweek automatisch 'op slot' $requested_week_id = 0; $last_week_id = 0; $last_file_id_basis = 0; $next_deadline = 0; $next_locked = 1; $week_options = ''; $min_week_options = ''; $max_week_options = ''; foreach ($weken as $week_id => $week) { $weken[$week_id]['monday'] = getthismonday($week); $weken[$week_id]['deadline'] = $next_deadline; $next_deadline = $weken[$week_id]['next_deadline'] = getthisdeadline($week); if ($week['rooster_id']) { $last_file_id_basis = $weken[$week_id]['file_id_basis'] = mdb2_single_val($db, "SELECT file_id FROM $roosterdb.roosters WHERE basis_id = %i AND wijz_id = 0", $week['basis_id']); $weken[$week_id]['file_id_wijz'] = mdb2_single_val($db, "SELECT file_id FROM $roosterdb.roosters WHERE basis_id = %i AND wijz_id = %i", $week['basis_id'], $week['wijz_id']); if ($weken[$week_id]['file_id_basis'] == $weken[$week_id]['file_id_wijz']) $weken[$week_id]['file_id_wijz'] = 0; } else { $weken[$week_id]['file_id_basis'] = $last_file_id_basis; $weken[$week_id]['file_id_wijz'] = 0; } $weken[$week_id]['locked'] = $next_locked; if ($weken[$week_id]['next_deadline'] <= $time) $next_locked = 1; else $next_locked = 0; if ($week_id == $_GET['week_id']) $requested_week_id = $week_id; $selected = ''; if ($selected_week_id == $week_id) { $selected = 'selected '; } $date = date("(j M)", $weken[$week_id]['monday']); if ($weken[$week_id]['locked'] == 0 && $default_week_id == 0) { $default_week_id = $week_id; $week_options .= ''."\n"; } else { $week_options .= ''."\n"; } $selected_min = $selected_max = ''; if ($week_id == $min_week_id) $selected_min = 'selected '; if ($week_id == $max_week_id) $selected_max = 'selected '; $min_week_options .= ''."\n"; $max_week_options .= ''."\n"; $last_week_id = $week_id; } if ($requested_week_id) { //echo('current=req'); $current_week_id = $requested_week_id; } else if ($default_week_id) { //echo('current=default'); $current_week_id = $default_week_id; } else { //echo('current=max'); $current_week_id = $max_week_id; } function find_entity_id($name) { global $db, $roosterdb; return mdb2_single_val($db, "SELECT entity_id FROM $roosterdb.entities WHERE entity_name = '%q'", $name); } $afkorting = mdb2_single_val($db, "SELECT ppl_login FROM $kldv.ppl WHERE ppl_id = %i", $_SESSION['ppl_id']); $computerlokalen = array(); foreach ($computerlokalen_names as $name) { $computerlokalen[$name] = array(); $computerlokalen[$name]['lokaal_id'] = find_entity_id($name); } //echo("current_week_id=$current_week_id\n"); $week = $weken[$current_week_id]; $dag_case = "CASE WHEN dag = 1 THEN 'ma' WHEN dag = 2 THEN 'di' WHEN dag = 3 THEN 'wo' WHEN dag = 4 THEN 'do' WHEN dag = 5 THEN 'vr' END"; $uur_concat = "CONCAT($dag_case, uur)"; $uurq = $uur_concat.' uur'; $docq = "ppl_login doc"; $ord = 'ORDER BY ppl_login, dag, uur'; $startq = "$docq, $uurq"; if (isset($_GET['ord'])) { if ($_GET['ord'] == 'uurdoc') { $ord = 'ORDER BY dag, uur, ppl_login'; $startq = "$uurq, $docq"; } } $dagen = 'TRUE'; if (isset($_GET['dag']) && ( $_GET['dag'] == 1 || $_GET['dag'] == 2 || $_GET['dag'] == 3 || $_GET['dag'] == 4 || $_GET['dag'] == 5)) { $dagen = 'dag = '.$_GET['dag']; } $lokalen = 'TRUE'; $lokalen_blok = 'TRUE'; if (isset($_GET['lokaal'])) { foreach ($computerlokalen as $lokaal_naam => $info) { $lokaal_id = $info['lokaal_id']; if ($lokaal_id == $_GET['lokaal']) { $lokalen = "new.entity_id = $lokaal_id"; $lokalen_blok = "entity_id = $lokaal_id"; } } } $list_of_deadlines = array( 'vr' => $week['monday'] + (4*24 + 10)*60*60, 'do' => $week['monday'] + (3*24 + 10)*60*60, 'wo' => $week['monday'] + (2*24 + 10)*60*60, 'di' => $week['monday'] + (24 + 10)*60*60, 'ma' => $week['monday'] + 10*60*60, 'vorige' => $week['deadline'] ); $deadline_rooster = $_SERVER['REQUEST_TIME']; $deadline_blok = $_SERVER['REQUEST_TIME']; $op = $_SERVER['REQUEST_TIME']; if (isset($_GET['op'], $list_of_deadlines[$_GET['op']])) { $proposed_op = $list_of_deadlines[$_GET['op']]; if ($proposed_op < $op) $op = $proposed_op; } $tov = 0; if (isset($_GET['tov'], $list_of_deadlines[$_GET['tov']])) { $proposed_tov = $list_of_deadlines[$_GET['tov']]; if ($proposed_tov < $op) $tov = $proposed_tov; } $roosterids= mdb2_single_assoc($db, << roosters.basis_id OR ( more.basis_id = roosters.basis_id AND more.wijz_id > roosters.wijz_id ) ) AND more.timestamp < $deadline_rooster WHERE more.week_id IS NULL AND roosters.timestamp < $deadline_rooster AND roosters.week_id = {$current_week_id} EOQ ); if (!is_array($roosterids)) { $max_week_id = mdb2_single_val($db, "SELECT MAX(week_id) FROM $roosterdb.roosters WHERE week_id < {$current_week_id}"); // echo("max_week_id=$max_week_id\n"); $roosterids= mdb2_single_assoc($db, << roosters.basis_id OR ( more.basis_id = roosters.basis_id AND more.wijz_id > roosters.wijz_id ) ) AND more.timestamp < $deadline_rooster WHERE more.week_id IS NULL AND roosters.timestamp < $deadline_rooster AND roosters.week_id = {$max_week_id} EOQ ); $roosterids['wijz_id'] = 0; //echo('help'); } $file_id_wijz = 0; $file_id_basis = mdb2_single_val($db, "SELECT file_id FROM $roosterdb.roosters WHERE basis_id = %i AND wijz_id = 0", $roosterids['basis_id']); //if (!$file_id_basis) { // $file_id_basis = mdb2_single_val($db, "SELECT file_id FROM $roosterdb.roosters WHERE week_id < {$current_week_id} AND wijz_id = 0 ORDER BY week_id DESC, rooster_id DESC LIMIT 1"); //} $file_id_wijz = mdb2_single_val($db, "SELECT file_id FROM $roosterdb.roosters WHERE basis_id = %i AND wijz_id = %i", $roosterids['basis_id'], $roosterids['wijz_id']); if ($file_id_wijz == $file_id_basis) $file_id_wijz = 0; if (isset($notitiegerechtigd[$_SESSION['orig_username']])) { // prepare db for ajax requests for ($i = 1; $i <= 5; $i++) { mdb2_exec($db, "INSERT IGNORE INTO notities ( week_id, dag, auteur ) VALUES ( %i, %i, '%q' )", $current_week_id, $i, $_SESSION['orig_username']); } $notities = mdb2_all_assoc_rekey($db, "SELECT dag, $dag_case short, text FROM notities WHERE auteur = '%q' AND week_id = %i AND $dagen", $_SESSION['orig_username'], $current_week_id); } $subquery1 = rquery(NULL, NULL, $file_id_basis, $file_id_wijz, 'LEFT '); $rooster_query1 = <<', ''), IFNULL(old.entity_name, 'LOK?'), ' -> ', new.entity_name, IF(timestamp_delete < FROM_UNIXTIME($op), '', '') ) wijziging, text_reservant text, IFNULL(CONCAT('blok: ', text_blok), '-') status, IF(rooster_les.zermelo_id IS NULL, 'uitval', IF(lessen.uur != new_uur OR lessen.dag != new_dag, 'verplaatst', IF(entity_id_new IN (group_entities), 'in rooster', 'niet in rooster'))) rooster, zermelo_id_orig id, IF(timestamp_delete > FROM_UNIXTIME($op) OR timestamp_delete IS NULL, CONCAT('verwijder en mail'), 'is al verwijderd') `verwijder en mail` FROM entwijz JOIN $roosterdb.lessen USING (les_id) JOIN $roosterdb.zermelo_ids USING (zermelo_id) LEFT JOIN $roosterdb.entities AS old ON old.entity_id = entity_id_old JOIN $roosterdb.entities AS new ON new.entity_id = entity_id_new JOIN $kldv.ppl2altlogin ON ppl2altlogin.altlogin = entwijz.reservant JOIN $kldv.ppl USING (ppl_id) LEFT JOIN ( SELECT week_id, dag, uur, entity_id AS entity_id_new, GROUP_CONCAT(text_roostermaker) text_blok FROM blokgroups JOIN entblok USING (blokgroup_id) JOIN uurblok USING (blokgroup_id) WHERE timestamp_create < FROM_UNIXTIME(%i) AND ( timestamp_delete IS NULL OR timestamp_delete >= FROM_UNIXTIME(%i)) GROUP BY week_id, dag, uur, entity_id ) AS bloks USING (week_id, dag, uur, entity_id_new) LEFT JOIN ( $rooster_query1 ) AS rooster_les USING (zermelo_id) WHERE week_id = {$current_week_id} AND ( ( timestamp_create >= FROM_UNIXTIME($tov) AND timestamp_create < FROM_UNIXTIME($op) AND ( timestamp_delete > FROM_UNIXTIME($op) OR timestamp_delete IS NULL ) ) OR ( timestamp_create < FROM_UNIXTIME($tov) AND timestamp_delete < FROM_UNIXTIME($op) AND timestamp_delete > FROM_UNIXTIME($tov) ) ) AND $dagen AND $lokalen $ord EOQ , $deadline_blok, $deadline_blok); $blokkades = mdb2_query($db, <<= FROM_UNIXTIME($deadline_blok) ) EOQ ); html_start(<< select').change(function () { $('#minmax').submit(); }); $('#weekselect > select').change(function () { $('#weekselect').submit(); }); $('input[name="ord"]').click(function () { $('#weekselect').submit(); }); $('input[name="dag"]').click(function () { $('#weekselect').submit(); }); $('input[name="lokaal"]').click(function () { $('#weekselect').submit(); }); $('#su').focus(); }); EOS , "Overzicht voor roostermakers"); ?>

Reserveringen

toon reserveringen in week op ten opzichte van .
gesorteerd op checked value="docuur">docent/uur checked value="uurdoc">uur/docent
dagen: checked value="0">alle checked value="1">ma checked value="2">di checked value="3">wo checked value="4">do checked value="5">vr
lokalen: checked value="0">alle $info) { $lokaal_id = $info['lokaal_id']; ?> checked value="">

Reserveringen weergegeven in rood zijn strijdig met het rooster. Deze reserveringen blijven namelijk op het gereserveerde uur het gereserveerde lokaal blokkeren voor het geval dat het rooster weer terugverandert. Om ervoor te zorgen dat anderen een reservering kunnen plaatsen in het bestreffende lokaal op het betreffende uur, 'moet' de reservering eruit.
export voor synchronisatie in lesdomein (handleiding voor synchroniseren)
$array) { ?>