array( mktime(0, 0, 0, 8, 1, 2008), mktime(0, 0, 0, 8, 1, 2009) ), '0910' => array( mktime(0, 0, 0, 8, 1, 2009), mktime(0, 0, 0, 8, 1, 2010) ), '1011' => array( mktime(0, 0, 0, 8, 1, 2010), mktime(0, 0, 0, 8, 1, 2011) ), '1112' => array( mktime(0, 0, 0, 8, 1, 2011), mktime(0, 0, 0, 8, 1, 2012) ), '1213' => array( mktime(0, 0, 0, 8, 1, 2012), mktime(0, 0, 0, 8, 1, 2013) ), '1314' => array( mktime(0, 0, 0, 8, 1, 2013), mktime(0, 0, 0, 8, 1, 2014) ), '1415' => array( mktime(0, 0, 0, 8, 1, 2014), mktime(0, 0, 0, 8, 1, 2015) ) ); $year_info = $years['1415']; $year_id = 7; // FIXME function read_gpu001($filename, &$gpu) { global $year_id; $fp = fopen_or_fail($filename); while (($line = fgetcsv($fp, 0, ',')) !== false) { if (count($line) != 9) error_system('we verwachten 9 kolommen in GPU001.TXT, we hebben er nu '.count($line)); if ($line[1] == 'b' || $line[3] == 'b' || $line[1] == 'o' || $line[3] == 'o' || $line[1] == '') continue; if ($line[1] == 'RT') continue; if ($line[3] == 'inhalen' || $line[3] == '' || $line[3] == 'stage') continue; // coach is mt if ($line[3] == 'coach') $line[3] = 'mt'; if ($year_id != 7) error_system('year specific stuff'); // we vertalen bha_1 en bte_2 naar bhabte_1 en // bha_2 en bte_1 naar bhabte_2 if ($line[3] == 'bha_1' || $line[3] == 'bte_2') $line[3] = 'bhabte_1'; if ($line[3] == 'bha_2' || $line[3] == 'bte_1') $line[3] = 'bhabte_2'; // we willen alleen klas 3 en 4 if ($line[1][0] != '3' && $line[1][0] != 4) continue; $id = $line[0]; if (isset($gpu[$id])) { if (!in_array($line[1], $gpu[$id]['stamklassen'])) { $gpu[$id]['stamklassen'][] = $line[1]; } if (!in_array($line[2], $gpu[$id]['docenten'])) { $gpu[$id]['docenten'][] = $line[2]; } if (!in_array($line[3], $gpu[$id]['vakken'])) { $gpu[$id]['vakken'][] = $line[3]; } } else { $gpu[$id] = array('stamklassen' => array($line[1]), 'docenten' => array($line[2]), 'vakken' => array($line[3]), 'leerlingen' => array()); } } } function read_gpu015($filename, &$gpu) { global $year_id; $fp = fopen_or_fail($filename) ; while (($line = fgetcsv($fp, 0, ',')) !== false) { if (count($line) != 14) error_system('we verwachten 14 kolommen in GPU001.TXT, we hebben er nu '.count($line)); if ($line[2] == 'inhalen' || $line[2] == 'stage') continue; //soms is er geen vak ingevuld if ($line[2] == '') continue; // coach is mt if ($line[2] == 'coach') $line[2] = 'mt'; if ($year_id != 7) error_system('year specific stuff'); // we vertalen bha_1 en bte_2 naar bhabte_1 en // bha_2 en bte_1 naar bhabte_2 if ($line[2] == 'bha_1' || $line[2] == 'bte_2') $line[2] = 'bhabte_1'; if ($line[2] == 'bha_2' || $line[2] == 'bte_1') $line[2] = 'bhabte_2'; // we willen alleen klas 3 en 4 if ($line[4][0] != '3' && $line[4][0] != 4) continue; if (!isset($gpu[$line[1]])) { echo('niet bestaande id: '.$line[1].' in '.$line[0].' '.$line[2].' '.$line[4]."\n"); continue; } if (!in_array($line[2], $gpu[$line[1]]['vakken'])) error_system('vak is niet genoemd in GPU001 maar wel in GPU015'); $gpu[$line[1]]['leerlingen'][] = $line[0]; } } function read_gpu010($filename, &$stamklassen) { $fp = fopen_or_fail($filename) ; while (($line = fgetcsv($fp, 0, ',')) !== false) { if (count($line) != 15) error_system('we verwachten 15 kolommen in GPU001.TXT, we hebben er nu '.count($line)); if (!isset($stamklassen[$line[9]])) $stamklassen[$line[9]] = array($line[0]); else $stamklassen[$line[9]][] = $line[0]; //echo("leerlingnummer {$line[0]} stamklas {$line[9]}\n"); } } $gpu = array(); $stamklassen = array(); $clusters = array(); // checkt uniciteit van clusternamen $misleidende_clusters = array(); $tochnietklassikaal = array(); $nieuwe_clusters = array(); read_gpu001('GPU001.TXT', $gpu); read_gpu015('GPU015.TXT', $gpu); read_gpu010('GPU010.TXT', $stamklassen); foreach ($gpu as &$row) { if (count($row['vakken']) != 1) { print_r($row['vakken']); error_system('lesgroep met meerdere vakken'); } if (count($row['stamklassen']) == 1) { // mmmm, een les in stamklasverband? // we zulen zien if (count($stamklassen[$row['stamklassen'][0]]) == count($row['leerlingen'])) $row['is_stamklas'] = 1; else $row['is_stamklas'] = 0; //echo($row['is_stamklas'].':'.implode(',', $row['stamklassen']).'/'.implode(',', $row['docenten']).'/'.implode(',', $row['vakken']).':'.count($row['leerlingen'])."\n"); //*/implode(',', $row['leerlingen'])."\n"); } else $row['is_stamklas'] = 0; } $clusterletters = 'abcdefghijklmnopqrstuvwxyz'; foreach ($gpu as $key => &$row) { if ($row['is_stamklas']) continue; //echo($key.':'.implode(',', $row['vakken'])."\n"); $lesjaar = $row['stamklassen'][0][0]; foreach ($row['stamklassen'] as $stamklas) { if ($stamklas[0] != $lesjaar) error_system("gemengd lesjaar"); } if (strpos($row['vakken'][0], '_') !== FALSE) { // dit cluster ziet eruit als een cluster $clusternaam = $lesjaar.$row['vakken'][0]; $row['vakken'][0] = strstr($row['vakken'][0], '_', TRUE); if (isset($clusters[$clusternaam])) { $misleidende_clusters[$clusternaam] = 1; $clusternaam .= $clusterletters[$clusters[$clusternaam]++]; $nieuwe_clusters[] = $key; } else $clusters[$clusternaam] = 1; } else { // dit is een cryptocluster :( $tochnietklassikaal[$row['stamklassen'][0].'/'.$row['vakken'][0]] = 1; $clusternaam = $lesjaar.$row['vakken'][0].'_'; if (isset($clusters[$clusternaam])) { $clusternaam .= $clusterletters[$clusters[$clusternaam]++]; } else {$clusters[$clusternaam] = 1; $clusternaam .= 'a'; } $nieuwe_clusters[] = $key; } $row['clusternaam'] = $clusternaam; } // pas besmette clusters aan foreach ($gpu as $key => &$row) { if ($row['is_stamklas']) continue; if (isset($misleidende_clusters[$row['clusternaam']])) { $row['clusternaam'] .= 'a'; $nieuwe_clusters[] = $key; } } // $tochnietklassikaal // - verwijder uit grp2subj2year (year_id = 7) // - verwijder uit ppl2grp2subj (timestamp dit schooljaar) // // $misleidende_clusters // - verwijder uit grp2subj2year (year_id = 7) // - verwijder uit ppl2grp2subj (timestamp dit schooljaar) // - verwijder leerlingen (timestamp dit schooljaar) // // $nieuwe clusters // - voeg toe en link alles $affected = -1; echo("behandelen: tochnietklassikaal\n"); print_r($tochnietklassikaal); foreach ($tochnietklassikaal as $klasvak => $tmp) { $kv = explode('/', $klasvak); echo("--------\n"); print_r($kv); $grp_id = mdb2_single_val($db, "SELECT grp_id FROM grp WHERE grp_name = '%q'", $kv[0]); if (!$grp_id) error_system("groep {$kv[0]} niet gevonden"); echo("grp_id=$grp_id\n"); $subj_id = mdb2_single_val($db, "SELECT subj_id FROM subj WHERE subj_abbrev = '%q'", $kv[1]); if (!$subj_id) error_system("subj {$kv[1]} niet gevonden"); echo("subj_id=$subj_id\n"); $grp2subj_id = mdb2_single_val($db, "SELECT grp2subj_id FROM grp2subj WHERE grp_id = $grp_id AND subj_id = $subj_id"); if (!$grp2subj_id) { echo("grp2subj niet gevonden voor {$kv[0]} {$kv[1]}\n"); continue; } echo("grp2subj_id=$subj_id\n"); //$affected = mdb2_exec($db, "DELETE FROM year2grp2subj WHERE year_id = $year_id AND grp2subj_id = $grp2subj_id"); echo("deleted year2grp2subj $affected\n"); //$affected = mdb2_exec($db, "DELETE FROM ppl2grp2subj WHERE grp2subj_id = $grp2subj_id AND ppl_enter = {$year_info[0]} AND ppl_exit = {$year_info[1]}"); echo("deleted ppl2grp2subj $affected\n"); } echo("behandelen: misleidende clusters\n"); print_r($misleidende_clusters); foreach ($misleidende_clusters as $grp_name => $tmp) { echo("-------\n"); echo("$grp_name\n"); $grp_id = mdb2_single_val($db, "SELECT grp_id FROM grp WHERE grp_name = '%q'", $grp_name); if (!$grp_id) error_system("groep $grp_name niet gevonden"); $subj_abbrev = strstr(substr($grp_name, 1), '_', TRUE); echo("grp_id=$grp_id\n"); $subj_id = mdb2_single_val($db, "SELECT subj_id FROM subj WHERE subj_abbrev = '%q'", $subj_abbrev); if (!$subj_id) error_system("subj $subj_abbrev niet gevonden"); echo("subj_id=$subj_id\n"); $grp2subj_id = mdb2_single_val($db, "SELECT grp2subj_id FROM grp2subj WHERE grp_id = $grp_id AND subj_id = $subj_id"); if (!$grp2subj_id) { error_system("grp2subj niet gevonden voor $grp_name\n"); } echo("grp2subj_id=$subj_id\n"); //$affected = mdb2_exec($db, "DELETE FROM year2grp2subj WHERE year_id = $year_id AND grp2subj_id = $grp2subj_id"); echo("deleted year2grp2subj $affected\n"); //$affected = mdb2_exec($db, "DELETE FROM ppl2grp2subj WHERE grp2subj_id = $grp2subj_id AND ppl_enter = {$year_info[0]} AND ppl_exit = {$year_info[1]}"); echo("deleted ppl2grp2subj $affected\n"); //$affected = mdb2_exec($db, "DELETE FROM ppl2grp WHERE grp_id = $grp_id AND ppl_enter = {$year_info[0]} AND ppl_exit = {$year_info[1]}"); echo("deleted ppl2grp $affected\n"); } echo("behandelen: nieuwe clusters\n"); print_r($nieuwe_clusters); /* foreach ($nieuwe_clusters as $cluster_id) { echo("--------\n"); $cluster = $gpu[$cluster_id]; $grp_name = $cluster['clusternaam']; $subj_abbrev = $cluster['vakken'][0]; echo("$cluster_id $subj_abbrev $grp_name ".implode(',', $cluster['docenten'])."\n"); $grp_id = mdb2_single_val($db, "SELECT grp_id FROM grp WHERE grp_name = '%q'", $grp_name); if (!$grp_id) { mdb2_exec($db, "INSERT INTO grp ( grp_name, grp_home ) VALUES ( '%q', 0 )", $grp_name); $grp_id = mdb2_single_val($db, $last_insert_id); } else error_system("deze groep kan niet bestaan $grp_name"); $subj_id = mdb2_single_val($db, "SELECT subj_id FROM subj WHERE subj_abbrev = '%q'", $subj_abbrev); if (!$subj_id) error_system("val $subj_abbrev zou al moeten bestaan"); // { // mdb2_exec($db, "INSERT INTO subj ( subj_abbrev ) VALUES ( '%q' )", $subj_abbrev); // $subj_id = mdb2_single_val($db, $last_insert_id); // } $grp2subj_id = mdb2_single_val($db, "SELECT grp2subj_id FROM grp2subj WHERE subj_id = $subj_id AND grp_id = $grp_id"); if (!$grp2subj_id) { mdb2_exec($db, "INSERT INTO grp2subj ( grp_id, subj_id ) VALUES ( $grp_id, $subj_id )"); $grp2subj_id = mdb2_single_val($db, $last_insert_id); } else error_system("deze grp2subj_id kan niet bestaan $grp2subj_id"); $year2grp2subj_id = mdb2_single_val($db, "SELECT year2grp2subj_id FROM year2grp2subj WHERE year_id = $year_id AND grp2subj_id = $grp2subj_id"); if (!$year2grp2subj_id) { mdb2_exec($db, "INSERT INTO year2grp2subj ( year_id, grp2subj_id ) VALUES ( $year_id, $grp2subj_id )"); $year2grp2subj_id = mdb2_single_val($db, $last_insert_id); } else error_system("deze year2grp2subj_id kan niet bestaan $year2grp2subj_id"); foreach ($cluster['docenten'] as $afk) { $ppl_id = mdb2_single_val($db, "SELECT ppl_id FROM ppl WHERE ppl_login = '%q'", $afk); if (!$ppl_id) fatal_error("docent $afk onbekend"); // { // docent nog onbekend // mdb2_exec($db, "INSERT INTO ppl ( ppl_login, ppl_surname, ppl_forename ) VALUES ( '%q', '%q', '%q' )", $afk, ''.$afk.'', 'docent'); // $ppl_id = mdb2_single_val($db, $last_insert_id); // } $ppl2grp2subj_id = mdb2_single_val($db, "SELECT ppl2grp2subj_id FROM ppl2grp2subj WHERE ppl_id = $ppl_id AND grp2subj_id = $grp2subj_id AND ppl_enter = {$year_info[0]} AND ppl_exit = {$year_info[1]}"); if (!$ppl2grp2subj_id) { mdb2_exec($db, "INSERT INTO ppl2grp2subj ( ppl_id, grp2subj_id, ppl_enter, ppl_exit ) VALUES ( $ppl_id, $grp2subj_id, {$year_info[0]}, {$year_info[1]} )"); } else error_systen("docent was al gelinkt?"); } foreach ($cluster['leerlingen'] as $llnr) { $ppl_id = mdb2_single_val($db, "SELECT ppl_id FROM ppl WHERE ppl_login = '%q'", $llnr); if (!$ppl_id) error_system("leerling $llnr niet gevonden"); $ppl2grp_id = mdb2_single_val($db, "SELECT ppl2grp_id FROM ppl2grp WHERE ppl_id = $ppl_id AND grp_id = $grp_id AND ppl_enter = {$year_info[0]} AND ppl_exit = {$year_info[1]}"); if (!$ppl2grp_id) { mdb2_exec($db, "INSERT INTO ppl2grp ( ppl_id, grp_id, ppl_enter, ppl_exit ) VALUES ( $ppl_id, $grp_id, {$year_info[0]}, {$year_info[1]} )"); } else error("leerling was al gelinkt?"); } } */ ?>