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_better_herinfo($db, $_GET); $period_id = $herinfo['period_id']; $buiten_beschouwing = get_buiten_beschouwing($db, $period_id); $samenvoegen = get_samenvoegen($db, $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); $toetstranslate = get_toetsnames_index($db, $period_id); 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']]]; $toetsen[$id]['uncolored'] = false; } else { $toetsen[$id]['color'] = NULL; $toetsen[$id]['uncolored'] = true; } } } 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 uncolor() { global $toetsen; foreach ($toetsen as $id => $info) { if ($info['uncolored'] === true) { $toetsen[$id]['color'] = NULL; } } } function probeer_kleur($toets, $color, $max_colors) { global $toetsen; //if ($toetsen[$toets]['uncolored'] && $toetsen[$toets]['color'] !== NULL) die("impossible"); $toetsen[$toets]['color'] = $color; //echo("start: $toets ($color)\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']]++; } //print_r($colors); $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; } function probeer_connected($toets, $color, $max_colors) { global $toetsen; //echo("toets to place $toets with color $color ($max_colors)\n"); if (!probeer_kleur($toets, $color, $max_colors)) { //echo("faal\n"); return false; } //check some stuff //print_r($toetsen[$toets]); $graph_id = $toetsen[$toets]['graph']; //echo("graph_id=$graph_id\n"); // foreach ($toetsen as $name => $info) { // if ($info['graph'] != $graph_id) continue; //echo($name." ".($info['color'] === NULL?'NULL':$info['color'])." ".(($info['uncolored']?'UNCOLORED':'COLORED'))."\n"); // } uncolor(); return true; } header('Content-type: text/plain; charset=UTF-8'); //header('Content-type: application/json; charset=UTF-8'); //echo("color to moment:\n"); //print_r($color_to_moment); if (!check_consistent()) { $result = array( 'consistent' => 'false', 'ok' => array(0), 'nak' => array() ); for ($i = 0; $i < $max_colors; $i++) { $result['nak'][] = $color_to_moment[$i]; } //echo("{ 'consistent': 'false' }"); echo(json_encode($result)); exit; } $gevonden = NULL; foreach ($toetsen as $id => $toets) { if ($toets['pta_id'] == $_GET['pta_id']) { $gevonden = $id; break; } } // een niet gevonden toets, kan niet gevonden zijn omdat // er opeens geen inschrijvingen meer zijn, deze toets // mag teruggeplaatst worden naar het 'te roosteren' vlak if (!$gevonden) { $result = array( 'ok' => array(0), 'nak' => array() ); for ($i = 0; $i < $max_colors; $i++) { $result['nak'][] = $color_to_moment[$i]; } echo(json_encode($result)); exit; } $result = array('ok' => array(0), 'nak' => array()); //echo('{}'); // exit; $faalkleur = array(); for ($i = 0; $i < $max_colors; $i++) { foreach ($toetsen[$gevonden]['neighbors'] as $neighbor => $tmp) { if ($toetsen[$neighbor]['color'] === $i) { $faalkleur[$i] = true; break; } } } for ($i = 0; $i < $max_colors; $i++) { if (!isset($faalkleur[$i]) && probeer_connected($gevonden, $i, $max_colors)) { $result['ok'][] = $color_to_moment[$i]; } else { $result['nak'][] = $color_to_moment[$i]; } } echo(json_encode($result)); ?>