* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace mod_timetable; defined('MOODLE_INTERNAL') || die(); /** * Class lesson * * @package mod_timetable * @copyright 2020 Raphael Dannecker * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class lesson { /** @var array the data of lesson */ public $data; /** * Class constructor * * @param object $lesson Lesson */ public function __construct($lesson) { $this->lessonid= $lesson->lessonid; $this->teacher = $lesson->teacher; $this->subject = $lesson->subject; $this->class = $lesson->class; $this->room = $lesson->room; $this->period = $lesson->period; $this->day = $lesson->day; $this->type = $lesson->type; $this->text = ""; $this->substitution = ""; $this->teachera = ""; $this->subjecta = ""; $this->classa = ""; $this->rooma = ""; //$this->teacherb = ""; //$this->subjectb = ""; //$this->classb = ""; //$this->roomb = ""; $this->teacherchanged = false; $this->subjectchanged = false; $this->classchanged = false; $this->roomchanged = false; $this->reason = ""; $this->subtype = 0; } /** * * @param object $substitution Substitution */ public function process_substitution($substitution) { if (//$this->lessonid == $substitution->lesson && $this->teacher == $substitution->teacherb && $this->subject == $substitution->subjectb && preg_match("/(^|~)".preg_quote($this->class,"/")."($|~)/", $substitution->classb) && preg_match("/(^|~)".preg_quote($this->room,"/")."($|~)/", $substitution->roomb) ) { // Append change info $this->teachera = $substitution->teachera; $this->subjecta = $substitution->subjecta; $this->classa = $substitution->classa; $this->rooma = $substitution->rooma; $this->teacherchanged = ($this->teacher != $this->teachera && $this->teachera) ? true : false; $this->subjectchanged = ($this->subject != $this->subjecta && $this->subjecta) ? true : false; $this->classchanged = (!preg_match("/(^|~)".preg_quote($this->class,"/")."($|~)/" , $this->classa ) && $this->classa) ? true : false; $this->roomchanged = (!preg_match("/(^|~)".preg_quote($this->room,"/")."($|~)/" , $this->rooma ) && $this->rooma) ? true : false; if ($substitution->text) $this->text .= $substitution->text; $this->subtype = $substitution->type; $this->substitution = "1"; return 1; } elseif (//$this->lessonid == $substitution->lesson && $this->teacher == $substitution->teachera && $this->subject == $substitution->subjecta && preg_match("/(^|~)".preg_quote($this->class,"/")."($|~)/", $substitution->classa) && preg_match("/(^|~)".preg_quote($this->room,"/")."($|~)/", $substitution->rooma) ) { // Append change info $this->teacherb = $substitution->teacherb; $this->subjectb = $substitution->subjectb; $this->classb = $substitution->classb; $this->roomb = $substitution->roomb; $this->teacherchanged = ($this->teacher != $this->teacherb) ? true : false; $this->subjectchanged = ($this->subject != $this->subjectb) ? true : false; $this->classchanged = (!preg_match("/(^|~)".preg_quote($this->class,"/")."($|~)/" , $this->classb )) ? true : false; $this->roomchanged = (!preg_match("/(^|~)".preg_quote($this->room,"/")."($|~)/" , $this->roomb )) ? true : false; if ($substitution->text) $this->text .= $substitution->text; // TODO Entfall, falls teacherb!=teacher bzw. class not in classb bzw. roomb!=room TODO $this->subtype = $substitution->type; $this->substitution = "1"; return 1; } else { return 0; } } /** * * @param object $absence Absence */ public function process_absence($absence) { // echo "Process_absence: $absence->endperiod"; if ((($absence->type == 'L' && $absence->name == $this->teacher) || ($absence->type == 'K' && $absence->name == $this->class) || ($absence->type == 'R' && $absence->name == $this->room)) && $absence->startperiod <= $this->period && $absence->endperiod >= $this->period) { $this->text .= $absence->text; $this->reason = $absence->reason; $this->startperiod = $absence->startperiod; $this->endperiod = $absence->endperiod; return 1; } else { return 0; } } public function integrate($lesson) { if($this->lessonid == $lesson->lessonid && //$this->teacher == $lesson->teacher && $this->subject == $lesson->subject && $this->room == $lesson->room && $this->type == $lesson->type && $this->subtype == $lesson->subtype && //$this->teacherchanged == $lesson->teacherchanged && $this->text == $lesson->text) { if ($this->class != $lesson->class) { $class1parts = explode("/", $this->class); $class2parts = explode("/", $lesson->class); if (count($class1parts)>1 && count($class2parts)==2) { $this->class .= "/".$class2parts[1]; } else $this->class .= $lesson->class; } if ($this->teacher != $lesson->teacher) { $this->teacher .= "/".$lesson->teacher; } return true; } else return false; } }