first version

This commit is contained in:
L_DA 2020-11-17 16:40:21 +00:00
parent 83a8dc5d90
commit 52f3f359af
10 changed files with 633 additions and 344 deletions

View file

@ -243,6 +243,118 @@ class import_data extends \core\task\scheduled_task {
}
}
private function read_absence() {
global $DB,$CFG;
$filehash = get_config('timetable', 'filehash_abs');
$filename = get_config('timetable', 'fname_absence');
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_absence", "id>0");
echo "after delete\n";
$handle = @fopen($filename, "r");
echo "after handle\n";
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
$dataobject = (object)array('id' => $data[0],
'type' => $data[1],
'name' => utf8_encode($data[2]),
'startdate' => $data[3],
'enddate' => $data[4],
'startperiod' => $data[5],
'endperiod' => $data[6],
'reason' => utf8_encode($data[7]),
'text' => utf8_encode($data[8]));
//echo var_dump($dataobject);
foreach (get_object_vars($dataobject) as $key => $value) {
if ($value=='') unset($dataobject->{$key});
}
$DB->insert_record("timetable_absence", $dataobject);
}
$transaction->allow_commit();
fclose($handle);
set_config('filehash_abs', $hash, 'timetable');
} catch(Exception $e) {
$transaction->rollback($e);
}
}
private function read_absence_reason() {
global $DB,$CFG;
$filehash = get_config('timetable', 'filehash_absreas');
$filename = get_config('timetable', 'fname_absence_reason');
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_absence_reason", "id>0");
echo "after delete\n";
$handle = @fopen($filename, "r");
echo "after handle\n";
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
$dataobject = (object)array('reason' => utf8_encode($data[0]),
'description' => utf8_encode($data[1]),
'flag' => $data[2],
'statistic' => $data[3]);
//echo var_dump($dataobject);
foreach (get_object_vars($dataobject) as $key => $value) {
if ($value=='') unset($dataobject->{$key});
}
$DB->insert_record("timetable_absence_reason", $dataobject);
}
$transaction->allow_commit();
fclose($handle);
set_config('filehash_absreas', $hash, 'timetable');
} catch(Exception $e) {
$transaction->rollback($e);
}
}
private function read_times() {
global $DB,$CFG;
$filehash = get_config('timetable', 'filehash_times');
$filename = get_config('timetable', 'fname_times');
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_time", "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);
$dataobject = (object)array('day' => $data[0],
'period' => $data[1],
'maxperiod' => $data[2],
'starttime' => $data[3],
'endtime' => $data[4]);
$DB->insert_record("timetable_time", $dataobject);
}
$transaction->allow_commit();
fclose($handle);
set_config('filehash_times', $hash, 'timetable');
} catch(Exception $e) {
$transaction->rollback($e);
}
}
/**
* Execute the task.
*/
@ -254,6 +366,9 @@ class import_data extends \core\task\scheduled_task {
$this->read_teacher();
$this->read_room();
$this->read_class();
$this->read_absence();
$this->read_absence_reason();
$this->read_times();
}
}