$start, 'end' => $end, 'time' => $time, 'surv' => $surv ); $start = $survs[$i]['start']; $end = $survs[$i]['end']; $time = $survs[$i]['time']; $surv = $survs[$i]['surv']; } else { // merge $end = $survs[$i]['end']; $time .= ','.$survs[$i]['time']; } } $out[] = array( 'start' => $start, 'end' => $end, 'time' => $time, 'surv' => $surv ); return $out; } function collapse_survs($survs) { if (count($survs) == 0) return ''; else if (count($survs) == 1) return $survs[0]['surv']; $survs = array_filter($survs, function ($elt) { if (!$elt['surv']) return false; else return true; }); return implode(';', array_map(function ($elt) { return $elt['time'].':'.$elt['surv']; }, $survs)); } function insert($db, $rooster_id, $activiteit, $date, $start, $end, $grp_id, $pta_id, $lok, $survs, $surv) { echo("insert: $activiteit $date $start-$end $lok $surv (grp_id=$grp_id,pta_id=$pta_id)\n"); mdb2_exec($db, << $toets) { /* decipher ID to see which toetsen are 'the same' */ if (!preg_match('/^(\d+)(.*)$/', $id, $matches)) { WARNING("id $id is not of the structure NUMBER-SOMETHING_ELSE (123a)"); continue; } $id_number = $matches[1]; $id_letter = $matches[2]; /* decipher TIMESET, complain if something weird happens */ if (!preg_match('/\[(\d{8}):(\d{2}):(\d{2}):(\d{2})-'. '(\d{8}):(\d{2}):(\d{2}):(\d{2})>/', $toets['TIMESET'], $matches)) error_system('ongeldige waarde van TIMESET'); if ($matches[1] != $matches[5]) error_system('datum van begin en eind niet hetzelfde'); $date = $matches[1]; $start = "{$matches[2]}:{$matches[3]}"; $end = "{$matches[6]}:{$matches[7]}"; $surv = $toets['Doc']; $lok = $toets['Lok']; $grp = $toets['Grp']; $formula = $toets['FORMULA']; if ($start == $end) { echo("WARNING: deze toets heeft een duur van 0 minuten"); continue; } if ($current_id_number != $id_number) { write_to_db($db, $rooster_id, $toets_info); $current_id_number = $id_number; $toets_info = array( 'date' => $date, 'formula' => $formula, 'start' => $start, 'end' => $end, 'survs' => array(), 'lok' => $lok, 'grp' => $grp ); echo("found $id_number$id_letter: {$toets_info['formula']} {$toets_info['date']} {$toets_info['start']}-{$toets_info['end']} {$toets_info['lok']} $surv\n"); } else { echo("attempt $id_number$id_letter with $id_number\n"); if ($toets_info['end'] != $start) { error_system('zelfde toets sluit niet aan in tijd..?!?'); } if ($toets_info['formula'] != $formula) { error_system('zelfde toets heeft niet zelfde formula'); } if ($toets_info['date'] != $date) { error_system('zelfde toets heeft niet zelfde datum'); } if ($toets_info['lok'] != $lok) { error_system('zelfde toets heeft niet zelfde lokaal'); } if ($toets_info['grp'] != $grp) { error_system('zelfde toets heeft niet zelfde grp'); } echo("update end from {$toets_info['end']} to $end with $surv\n"); $toets_info['end'] = $end; } $toets_info['survs'][] = array( 'start' => $start, 'end' => $end, 'time' => timespan2lesuur($start.'-'.$end), 'surv' => $surv ); } /* don't forget to write the last one */ write_to_db($db, $rooster_id, $toets_info); return true; } $exists = mdb2_single_val($db, "SELECT COUNT(*) FROM files WHERE file_md5 = '%q'", $md5); if (!$exists) { if (!move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $data.$md5)) { error_system('unable to store uploaded file'); } } mdb2_exec($db, "INSERT INTO files ( file_md5, file_name, file_ok ) VALUES ( '%q', '%q', 0 )", $md5, $filename); $file_id = mdb2_single_val($db, 'SELECT LAST_INSERT_ID()'); echo("file_id=$file_id\n"); mdb2_exec($db, "INSERT INTO rooster_ids ( period_id, rooster_version ) SELECT $period_id, IFNULL(MAX(rooster_version), 0) + 1 FROM rooster_ids WHERE period_id = $period_id"); $rooster_id = mdb2_single_val($db, "SELECT LAST_INSERT_ID()"); $info = mdb2_single_assoc($db, "SELECT * FROM rooster_ids WHERE rooster_id = $rooster_id"); print_r($info); if (parse_udmz($data.$md5, $rooster_id)) { echo("succes\n"); mdb2_exec($db, "UPDATE files SET file_ok = 1 WHERE file_id = $file_id"); mdb2_exec($db, "UPDATE rooster_ids SET rooster_visible = 1 WHERE rooster_id = $rooster_id"); $_SESSION['notice'][] = 'Success'; $_SESSION['notice'][] = "Rooster is gepubliceerd als versie {$info['rooster_version']}, het gepubliceerde rooster is zichtbaar op de envelopfrontjes, op de pagina voor de insgeschreven leerlingen en in het overzicht voor docenten (klik op 'home' en dan op 'herkansingsrooster')"; header("Location: roostervriend.php$tail"); exit; } else { echo("fail!\n"); } ?>