array('6V.wisA/TP1', '6V.wisC/TP1'), '5H.kualg/TP1' => array('5H.kumu/TP1', '5H.kubv/TP1')) ); //array('5H.schk/TP1', '6V.wisD/TP1'), */ $db = mdb2_open($dsn); $buiten_beschouwing = array( // '5H.netl/TP2 ST lit', // '6V.netl/TP2 ST literatuur', ); $samenvoegen = array( // '5V.wisAC/TP2 ST1' => array('5V.wisA/TP2 ST1', '5V.wisC/TP2 ST1'), // '6V.wisAC/TP2 ST3' => array('6V.wisA/TP2 ST3', '6V.wisC/TP2 ST3'), ); $herinfo = get_herinfo($db); if (isset($_GET['period_id'])) $period_id = $_GET['period_id']; else $period_id = $herinfo['period_id']; $toetsen = get_toetsen_from_db($db, $period_id, $buiten_beschouwing, $samenvoegen); $moments = mdb2_all_assoc_rekey($db, << count($colors)) error_system('te weinig kleuren'); $moment_to_color = array(); $color_to_moment = array(); foreach ($moments as $id => $moment) { $moment_to_color[$id] = count($color_to_moment); $color_to_moment[] = $id; } $max_colors = count($color_to_moment); foreach ($toetsen as $toets => $info) { $pta_id = mdb2_single_val($db, << $aantal) { if ($toetsen[$naam]['graph'] === NULL) { $collections[$id]['list'][] = $naam; set_graph_id($toetsen[$naam], $id); } } } $graph_id = 0; $collections = array(); foreach ($toetsen as $naam => &$value) { if ($value['graph'] !== NULL) continue; $collections[$graph_id] = array('list' => array($naam)); set_graph_id($value, $graph_id++); } unset($value); function set_colors_from_rooster() { global $toetsen, $moment_to_color, $color_to_moment, $rooster; foreach ($toetsen as $id => $info) { if (isset($rooster[$info['pta_id']])) { $toetsen[$id]['color'] = $moment_to_color[$rooster[$info['pta_id']]]; } else $toetsen[$id]['color'] = NULL; } } function check_consistent() { global $toetsen, $collections, $max_colors; set_colors_from_rooster(); foreach ($toetsen as $toets) { if ($toets['color'] === NULL) continue; foreach ($toets['neighbors'] as $neighbor => $tmp) { if ($toetsen[$neighbor]['color'] === $toets['color']) return false; } } return true; } function probeer_kleur($toets, $color, $max_colors) { global $toetsen; $toetsen[$toets]['color'] = $color; //echo("start: $toets\n"); foreach ($toetsen[$toets]['neighbors'] as $neighbor => $tmp) { if ($toetsen[$neighbor]['color'] !== NULL) continue; $colors = array(); $colorless = array(); for ($i = 0; $i < $max_colors; $i++) $colors[$i] = 0; //echo("buren: $neighbor\n"); foreach ($toetsen[$neighbor]['neighbors'] as $second_neighbor => $tmp) { if ($toetsen[$second_neighbor]['color'] !== NULL) $colors[$toetsen[$second_neighbor]['color']]++; } $possible = 0; foreach ($colors as $color => $count) { if ($count > 0) continue; //echo("probeer $neighbor $color\n"); if (probeer_kleur($neighbor, $color, $max_colors)) { $possible++; break; } } if (!$possible) { $toetsen[$toets]['color'] = NULL; return false; } } return true; } header('Content-type: text/plain; charset=UTF-8'); //header('Content-type: application/json; charset=UTF-8'); if (!check_consistent()) { echo("{ 'consistent': 'false' }"); exit; } $gevonden = NULL; foreach ($toetsen as $id => $toets) { if ($toets['pta_id'] == $_GET['pta_id']) { $gevonden = $id; break; } } if (!$gevonden) { echo('{}'); exit; } $result = array('ok' => array(0), 'nak' => array()); for ($i = 0; $i < $max_colors; $i++) { $false = 0; foreach ($toetsen[$gevonden]['neighbors'] as $neighbor => $tmp) { if ($toetsen[$neighbor]['color'] === $i) { $false = 1; break; } } if (!$false && probeer_kleur($gevonden, $i, $max_colors)) { $result['ok'][] = $color_to_moment[$i]; } else { $result['nak'][] = $color_to_moment[$i]; } } echo(json_encode($result)); ?>