initial commit (da)
This commit is contained in:
commit
634dceef57
26 changed files with 2592 additions and 0 deletions
251
classes/task/import_data.php
Executable file
251
classes/task/import_data.php
Executable file
|
|
@ -0,0 +1,251 @@
|
|||
<?php
|
||||
|
||||
namespace mod_timetable\task;
|
||||
|
||||
/**
|
||||
* An example of a scheduled task.
|
||||
*/
|
||||
class import_data extends \core\task\scheduled_task {
|
||||
|
||||
/**
|
||||
* Return the task's name as shown in admin screens.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function get_name() {
|
||||
return get_string('import_data', 'mod_timetable');
|
||||
}
|
||||
|
||||
private function read_lesson() {
|
||||
global $DB,$CFG;
|
||||
$lastmtime = get_config('timetable', 'lastmtime');
|
||||
$filenamel = get_config('timetable', 'fname_lesson');
|
||||
|
||||
echo "Lastmtime = $lastmtime\n";
|
||||
if ($filenamel && (file_exists ($filenamel))) {
|
||||
$mtime = filemtime ( $filenamel );
|
||||
echo "mtime = $mtime\n";
|
||||
if ($mtime<=$lastmtime) return;
|
||||
echo "after return\n";
|
||||
try {
|
||||
$transaction = $DB->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();
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue