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 CAST(id AS UNSIGNED), id'; $ord = 'ORDER BY id'; $startq = "$docq, $uurq"; $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; $subquery1 = rquery(NULL, NULL, $file_id_basis, $file_id_wijz, 'LEFT '); $rooster_query1 = <<= FROM_UNIXTIME($op) ) EOQ; $timespec_sinds = <<= FROM_UNIXTIME($op) AND timestamp_delete IS NULL) OR (timestamp_create < FROM_UNIXTIME($op) AND timestamp_delete > FROM_UNIXTIME($op)) EOQ; $timespec = $timespec_tot; $tail = collectargs($_GET, array ('week_id', 'tov', 'op', 'ord', 'dag', 'lokaal')); $reserveringen = mdb2_all_assoc_rekey($db, <<= 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); $filename = "sync-"; $filename .= mdb2_single_val($db, "SELECT CONCAT(year, week) FROM $roosterdb.weken WHERE week_id=%i", $current_week_id); $filename .= '-op-'.date("mdHis", $op); if ($tov) $filename .= '-tov-'.date("mdHis", $tov); if (isset($_GET['dag']) && $_GET['dag'] != 0) switch ($_GET['dag']) { case 1: $filename .= '-ma'; break; case 2: $filename .= '-di'; break; case 3: $filename .= '-wo'; break; case 4: $filename .= '-do'; break; case 5: $filename .= '-vr'; break; } if (isset($_GET['lokaal'])) foreach ($computerlokalen as $lokaal_naam => $info) { if ($_GET['lokaal'] == $info['lokaal_id']) $filename .= '-'.$lokaal_naam; } $filename .= '.txt'; header("Content-type: text/csv"); /* some red tape to avoid bugs and weird errormessages in IE */ header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header('Content-Disposition: attachment; filename='.$filename.';'); $legenda = array ('Object', 'Lok', '#WijzigComment'); echo(implode("\t", $legenda)); echo("\n"); foreach ($reserveringen as $entwijz_id => $reservering) { if (stripos(',', $reservering['lok'])) // les met meerdere lokalen, werkt nog niet continue; if ($reservering['rooster'] == 'uitval') continue; //uitgevallen les moet niet worden aangepast if ($reservering['rooster'] == 'verplaatst') continue; // les is verplaatst en moet niet in het rooster echo($reservering['id']); echo("\t"); if ($reservering['reverse']) { echo($reservering['entity_name_old']); echo("\t"); } else { echo($reservering['entity_name_new']); echo("\t"); echo(htmldec($reservering['text'].'$entwijz_id='.$entwijz_id)); } echo("\n"); //if ($reserveringk } //print_r($reserveringen);