341 lines
11 KiB
PHP
341 lines
11 KiB
PHP
![]() |
<?php
|
||
|
|
||
|
namespace mod_timetable;
|
||
|
|
||
|
/**
|
||
|
* An example of a scheduled task.
|
||
|
*/
|
||
|
class import_data {
|
||
|
|
||
|
public function __construct() {
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 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 update_lesson($content) {
|
||
|
global $DB,$CFG;
|
||
|
$filehash = get_config('timetable', 'filehash_lesson');
|
||
|
$hash = md5($content);
|
||
|
if ($hash == $filehash) return('Data not changed');
|
||
|
$result ="";
|
||
|
try {
|
||
|
$transaction = $DB->start_delegated_transaction();
|
||
|
$result .= "before delete\n";
|
||
|
$DB->delete_records_select("timetable_lesson", "id>0");
|
||
|
$result .= "after delete\n";
|
||
|
foreach (preg_split('/$\R?^/m',$content) as $buffer) {
|
||
|
//echo $buffer;
|
||
|
$result .= "+";
|
||
|
$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();
|
||
|
set_config('filehash_lesson', $hash, 'timetable');
|
||
|
} catch(Exception $e) {
|
||
|
$transaction->rollback($e);
|
||
|
}
|
||
|
return ($result);
|
||
|
}
|
||
|
|
||
|
|
||
|
private function update_substitution($content) {
|
||
|
global $DB,$CFG;
|
||
|
$filehash = get_config('timetable', 'filehash_substitution');
|
||
|
$hash = md5($content);
|
||
|
if ($hash == $filehash) return('Data not changed');
|
||
|
$result ="";
|
||
|
try {
|
||
|
$transaction = $DB->start_delegated_transaction();
|
||
|
$result .= "before delete\n";
|
||
|
$DB->delete_records_select("timetable_substitution", "id>0");
|
||
|
$result .= "after delete\n";
|
||
|
foreach (preg_split('/$\R?^/m',$content) as $buffer) {
|
||
|
$data = str_getcsv($buffer, ',');
|
||
|
$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});
|
||
|
}
|
||
|
$DB->insert_record_raw("timetable_substitution", $dataobject,false, false, true);
|
||
|
}
|
||
|
$transaction->allow_commit();
|
||
|
set_config('filehash_substitution', $hash, 'timetable');
|
||
|
} catch(Exception $e) {
|
||
|
$transaction->rollback($e);
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
private function update_teacher($content) {
|
||
|
global $DB,$CFG;
|
||
|
$filehash = get_config('timetable', 'filehash_teacher');
|
||
|
$hash = md5($content);
|
||
|
if ($hash == $filehash) return('Data not changed');
|
||
|
$result = "";
|
||
|
try {
|
||
|
$transaction = $DB->start_delegated_transaction();
|
||
|
$result .= "before delete\n";
|
||
|
$DB->delete_records_select("timetable_teacher", "id>0");
|
||
|
$result .= "after delete\n";
|
||
|
foreach (preg_split('/$\R?^/m',$content) as $buffer) {
|
||
|
$buffer = utf8_encode(rtrim($buffer));
|
||
|
$data = explode("\t", $buffer);
|
||
|
if (!(array_key_exists(3,$data))) {
|
||
|
$data[3] = '';
|
||
|
} else {
|
||
|
$result .= "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();
|
||
|
set_config('filehash_teacher', $hash, 'timetable');
|
||
|
} catch(Exception $e) {
|
||
|
$transaction->rollback($e);
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
private function update_room($content) {
|
||
|
global $DB,$CFG;
|
||
|
$filehash = get_config('timetable', 'filehash_room');
|
||
|
$hash = md5($content);
|
||
|
if ($hash == $filehash) return('Data not changed');
|
||
|
$result = "";
|
||
|
try {
|
||
|
$transaction = $DB->start_delegated_transaction();
|
||
|
$result .= "before delete\n";
|
||
|
$DB->delete_records_select("timetable_room", "id>0");
|
||
|
$result .= "after delete\n";
|
||
|
foreach (preg_split('/$\R?^/m',$content) as $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();
|
||
|
set_config('filehash_room', $hash, 'timetable');
|
||
|
} catch(Exception $e) {
|
||
|
$transaction->rollback($e);
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
private function update_class($content) {
|
||
|
global $DB,$CFG;
|
||
|
$filehash = get_config('timetable', 'filehash_class');
|
||
|
$hash = md5($content);
|
||
|
if ($hash == $filehash) return('Data not changed');
|
||
|
$result = "";
|
||
|
try {
|
||
|
$transaction = $DB->start_delegated_transaction();
|
||
|
$result .= "before delete\n";
|
||
|
$DB->delete_records_select("timetable_class", "id>0");
|
||
|
$result .= "after delete\n";
|
||
|
foreach (preg_split('/$\R?^/m',$content) as $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();
|
||
|
set_config('filehash_class', $hash, 'timetable');
|
||
|
} catch(Exception $e) {
|
||
|
$transaction->rollback($e);
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
private function update_absence($content) {
|
||
|
global $DB,$CFG;
|
||
|
$filehash = get_config('timetable', 'filehash_abs');
|
||
|
$hash = md5($content);
|
||
|
if ($hash == $filehash) return('Data not changed');
|
||
|
$result = "";
|
||
|
try {
|
||
|
$transaction = $DB->start_delegated_transaction();
|
||
|
$result .= "before delete\n";
|
||
|
$DB->delete_records_select("timetable_absence", "id>0");
|
||
|
$result .= "after delete\n";
|
||
|
foreach (preg_split('/$\R?^/m',$content) as $buffer) {
|
||
|
$data = str_getcsv($buffer, ',');
|
||
|
$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]));
|
||
|
foreach (get_object_vars($dataobject) as $key => $value) {
|
||
|
if ($value=='') unset($dataobject->{$key});
|
||
|
}
|
||
|
$DB->insert_record("timetable_absence", $dataobject);
|
||
|
}
|
||
|
$transaction->allow_commit();
|
||
|
set_config('filehash_abs', $hash, 'timetable');
|
||
|
} catch(Exception $e) {
|
||
|
$transaction->rollback($e);
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
private function update_absence_reason($content) {
|
||
|
global $DB,$CFG;
|
||
|
$filehash = get_config('timetable', 'filehash_absreas');
|
||
|
$hash = md5($content);
|
||
|
if ($hash == $filehash) return('Data not changed');
|
||
|
$result = "";
|
||
|
try {
|
||
|
$transaction = $DB->start_delegated_transaction();
|
||
|
$result .= "before delete\n";
|
||
|
$DB->delete_records_select("timetable_absence_reason", "id>0");
|
||
|
$result .= "after delete\n";
|
||
|
foreach (preg_split('/$\R?^/m',$content) as $buffer) {
|
||
|
$data = str_getcsv($buffer, ',');
|
||
|
$dataobject = (object)array('reason' => utf8_encode($data[0]),
|
||
|
'description' => utf8_encode($data[1]),
|
||
|
'flag' => $data[2],
|
||
|
'statistic' => $data[3]);
|
||
|
foreach (get_object_vars($dataobject) as $key => $value) {
|
||
|
if ($value=='') unset($dataobject->{$key});
|
||
|
}
|
||
|
$DB->insert_record("timetable_absence_reason", $dataobject);
|
||
|
}
|
||
|
$transaction->allow_commit();
|
||
|
set_config('filehash_absreas', $hash, 'timetable');
|
||
|
} catch(Exception $e) {
|
||
|
$transaction->rollback($e);
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
private function update_time($content) {
|
||
|
global $DB,$CFG;
|
||
|
$filehash = get_config('timetable', 'filehash_times');
|
||
|
$hash = md5($content);
|
||
|
if ($hash == $filehash) return('Data not changed');
|
||
|
$result = "";
|
||
|
try {
|
||
|
$transaction = $DB->start_delegated_transaction();
|
||
|
$result .= "before delete\n";
|
||
|
$DB->delete_records_select("timetable_time", "id>0");
|
||
|
$result .= "after delete\n";
|
||
|
foreach (preg_split('/$\R?^/m',$content) as $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();
|
||
|
set_config('filehash_times', $hash, 'timetable');
|
||
|
} catch(Exception $e) {
|
||
|
$transaction->rollback($e);
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Execute the task.
|
||
|
*/
|
||
|
public function update($files) {
|
||
|
global $DB,$CFG;
|
||
|
$results = array();
|
||
|
foreach ($files as $file) {
|
||
|
$content = base64_decode($file['content']);
|
||
|
$result = array();
|
||
|
$result['name'] = $file['name'];
|
||
|
switch ($file['name']) {
|
||
|
case 'lesson':
|
||
|
$result['result'] = $this->update_lesson($content);
|
||
|
break;
|
||
|
case 'substitution':
|
||
|
$result['result'] = $this->update_substitution($content);
|
||
|
break;
|
||
|
case 'teacher':
|
||
|
$result['result'] = $this->update_teacher($content);
|
||
|
break;
|
||
|
case 'class':
|
||
|
$result['result'] = $this->update_class($content);
|
||
|
break;
|
||
|
case 'room':
|
||
|
$result['result'] = $this->update_room($content);
|
||
|
break;
|
||
|
case 'time':
|
||
|
$result['result'] = $this->update_time($content);
|
||
|
break;
|
||
|
case 'absence':
|
||
|
$result['result'] = $this->update_absence($content);
|
||
|
break;
|
||
|
case 'absence_reason':
|
||
|
$result['result'] = $this->update_absence_reason($content);
|
||
|
break;
|
||
|
default:
|
||
|
$result['result'] = "no handler";
|
||
|
}
|
||
|
$results[] = $result;
|
||
|
}
|
||
|
return $results;
|
||
|
}
|
||
|
|
||
|
}
|