start_delegated_transaction(); echo "before delete\n"; $DB->delete_records_select("timetable_lesson", "id>0"); echo "after delete\n"; $handle = @fopen($filenamel, "r"); echo "after handle\n"; while (($buffer = fgets($handle, 4096)) !== false) { // echo $buffer; $buffer = utf8_encode(rtrim($buffer)); $data = explode("\t", $buffer); if (count($data) != 10) throw new Exception('Wrong size of elements'); $dataobject = (object)array('teacher' => $data[0], 'day' => $data[1], 'period' => $data[2], 'subject' => $data[3], 'room' => $data[4], 'lessonid'=> $data[5], 'flag' => $data[6], 'class' => $data[7], 'week' => $data[8], 'unknown' => $data[9]); $DB->insert_record("timetable_lesson", $dataobject); } $transaction->allow_commit(); fclose($handle); $lastmtime = $mtime; set_config('lastmtime', $lastmtime, 'timetable'); } catch(Exception $e) { $transaction->rollback($e); } } } private function read_substitution() { global $DB,$CFG; $filehash = get_config('timetable', 'filehash_substitution'); $filename = get_config('timetable', 'fname_substitution'); if (!$filename || !file_exists($filename)) return; if (($handle = fopen($filename, 'r')) == FALSE) return; $hash = hash_file('md5', $filename); if ($hash == $filehash) return; $max_id = 0; $max_changetime = 0; if ($result = $DB->get_record_sql("select max(id), max(changetime) from {$CFG->prefix}timetable_substitution")) { $max_id = $result->{'max(id)'}; $max_changetime = $result->{'max(changetime)'}; } echo "Max id = $max_id\n"; echo "Max changetime = $max_changetime\n"; try { $transaction = $DB->start_delegated_transaction(); while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) { $dataobject = (object)array('id' => $data[0], 'date' => $data[1], 'period' => $data[2], 'absence' => $data[3], 'lesson' => $data[4], 'teachera' => $data[5], 'teacherb' => $data[6], 'subjecta' => utf8_encode($data[7]), 'statistica' => $data[8], 'subjectb' => utf8_encode($data[9]), 'statisticb' => $data[10], 'rooma' => $data[11], 'roomb' => $data[12], 'statisticflag' => $data[13], 'classa' => utf8_encode($data[14]), 'reason' => utf8_encode($data[15]), 'text' => utf8_encode($data[16]), 'type' => $data[17], 'classb' => utf8_encode($data[18]), 'substitutiontype' => $data[19], 'changetime' => $data[20], 'unknown' => $data[21]); //echo var_dump($dataobject); foreach (get_object_vars($dataobject) as $key => $value) { if ($value=='') unset($dataobject->{$key}); } if ($dataobject->id > $max_id) { $DB->insert_record_raw("timetable_substitution", $dataobject,false, false, true); echo "Object (id={$data[0]}) inserted\n"; } elseif ($dataobject->changetime >= $max_changetime) { $DB->update_record("timetable_substitution", $dataobject); echo "Object (id={$data[0]}) updated\n"; } } $transaction->allow_commit(); fclose($handle); set_config('filehash_substitution', $hash, 'timetable'); } catch(Exception $e) { $transaction->rollback($e); } } private function read_teacher() { global $DB,$CFG; $filehash = get_config('timetable', 'filehash_teacher'); $filename = get_config('timetable', 'fname_teacher'); echo "Filename: $filename\n"; if (!$filename || !file_exists($filename)) return; if (($handle = fopen($filename, 'r')) == FALSE) return; $hash = hash_file('md5', $filename); if ($hash == $filehash) return; try { $transaction = $DB->start_delegated_transaction(); echo "before delete\n"; $DB->delete_records_select("timetable_teacher", "id>0"); echo "after delete\n"; $handle = @fopen($filename, "r"); echo "after handle\n"; while (($buffer = fgets($handle, 4096)) !== false) { echo $buffer; $buffer = utf8_encode(rtrim($buffer)); $data = explode("\t", $buffer); if (!(array_key_exists(3,$data))) { $data[3] = ''; } else { echo "firstname exists: $data[3]\n"; } //if (count($data) < 3) throw new Exception('Wrong size of elements'); $dataobject = (object)array('teacher' => $data[0], 'surname' => $data[1], 'firstname' => $data[3]); $DB->insert_record("timetable_teacher", $dataobject); } $transaction->allow_commit(); fclose($handle); set_config('filehash_teacher', $hash, 'timetable'); } catch(Exception $e) { $transaction->rollback($e); } } private function read_room() { global $DB,$CFG; $filehash = get_config('timetable', 'filehash_room'); $filename = get_config('timetable', 'fname_room'); if (!$filename || !file_exists($filename)) return; if (($handle = fopen($filename, 'r')) == FALSE) return; $hash = hash_file('md5', $filename); if ($hash == $filehash) return; try { $transaction = $DB->start_delegated_transaction(); echo "before delete\n"; $DB->delete_records_select("timetable_room", "id>0"); echo "after delete\n"; $handle = @fopen($filename, "r"); echo "after handle\n"; while (($buffer = fgets($handle, 4096)) !== false) { // echo $buffer; $buffer = utf8_encode(rtrim($buffer)); $data = explode("\t", $buffer); if (count($data) < 2) throw new Exception('Wrong size of elements'); $dataobject = (object)array('room' => $data[0], 'description' => $data[1]); $DB->insert_record("timetable_room", $dataobject); } $transaction->allow_commit(); fclose($handle); set_config('filehash_room', $hash, 'timetable'); } catch(Exception $e) { $transaction->rollback($e); } } private function read_class() { global $DB,$CFG; $filehash = get_config('timetable', 'filehash_class'); $filename = get_config('timetable', 'fname_class'); if (!$filename || !file_exists($filename)) return; if (($handle = fopen($filename, 'r')) == FALSE) return; $hash = hash_file('md5', $filename); if ($hash == $filehash) return; try { $transaction = $DB->start_delegated_transaction(); echo "before delete\n"; $DB->delete_records_select("timetable_class", "id>0"); echo "after delete\n"; $handle = @fopen($filename, "r"); echo "after handle\n"; while (($buffer = fgets($handle, 4096)) !== false) { // echo $buffer; $buffer = utf8_encode(rtrim($buffer)); $data = explode("\t", $buffer); if (!(array_key_exists(1,$data))) $data[1] = $data[0]; if (count($data) < 2) throw new Exception('Wrong size of elements'); $dataobject = (object)array('class' => $data[0], 'description' => $data[1]); $DB->insert_record("timetable_class", $dataobject); } $transaction->allow_commit(); fclose($handle); set_config('filehash_class', $hash, 'timetable'); } catch(Exception $e) { $transaction->rollback($e); } } /** * Execute the task. */ public function execute() { global $DB,$CFG; $this->read_lesson(); $this->read_substitution(); $this->read_teacher(); $this->read_room(); $this->read_class(); } }