diff --git a/classes/lesson.php b/classes/lesson.php index 285a3ee..3f00b8c 100755 --- a/classes/lesson.php +++ b/classes/lesson.php @@ -43,6 +43,16 @@ class lesson { $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->type = 0; } /** @@ -50,39 +60,43 @@ class lesson { * @param object $substitution Substitution */ public function process_substitution($substitution) { - // echo "Entering substitution! $this->teacher, $this->subject, $this->class, $this->room \n\t $substitution->teacherb, $substitution->subjectb, $substitution->classb, $substitution->roomb\n"; if (//$this->lessonid == $substitution->lesson && $this->teacher == $substitution->teacherb && $this->subject == $substitution->subjectb && - $this->class == $substitution->classb && - $this->room == $substitution->roomb) { - //preg_match("(^|~)$this->teacher($|~)", $substitution->teacherb) && - //preg_match("(^|~)$this->subject($|~)", $substitution->subjectb) && - //preg_match("(^|~)$this->class($|~)", $substitution->classb) && - //preg_match("(^|~)$this->room($|~)", $substitution->roomb)) { - + preg_match("/(^|~)".preg_quote($this->class,"/")."($|~)/", $substitution->classb) && + preg_match("/(^|~)".preg_quote($this->room,"/")."($|~)/", $substitution->roomb) ) { + // Append change info -// if (!preg_match("(^|~)$this->teacher($|~)", $substitution->teachera)) $this->teachera = $substitution->teachera; -// if (!preg_match("(^|~)$this->subject($|~)", $substitution->subjecta)) $this->subjecta = $substitution->subjecta; -// if (!preg_match("(^|~)$this->class($|~)" , $substitution->classa )) $this->classa = $substitution->classa; -// if (!preg_match("(^|~)$this->room($|~)" , $substitution->rooma )) $this->rooma = $substitution->rooma; - if ($this->teacher != $substitution->teachera) $this->teachera = $substitution->teachera; - if ($this->subject != $substitution->subjecta) $this->subjecta = $substitution->subjecta; - if ($this->class != $substitution->classa ) $this->classa = $substitution->classa; - if ($this->room != $substitution->rooma ) $this->rooma = $substitution->rooma; + $this->teachera = $substitution->teachera; + $this->subjecta = $substitution->subjecta; + $this->classa = $substitution->classa; + $this->rooma = $substitution->rooma; + $this->teacherchanged = ($this->teacher != $this->teachera) ? true : false; + $this->subjectchanged = ($this->subject != $this->subjecta) ? true : false; + $this->classchanged = (!preg_match("/(^|~)".preg_quote($this->class,"/")."($|~)/" , $this->classa )) ? true : false; + $this->roomchanged = (!preg_match("/(^|~)".preg_quote($this->room,"/")."($|~)/" , $this->rooma )) ? true : false; if ($substitution->text) $this->text .= $substitution->text; -// echo "In substitution! $this->teachera, $this->subjecta, $this->classa, $this->rooma\n"; + $this->type = $substitution->type; $this->substitution = "1"; return 1; } elseif (//$this->lessonid == $substitution->lesson && - $this->teacher == $substitution->teachera && - $this->subject == $substitution->subjecta && - $this->class == $substitution->classa && - $this->room == $substitution->rooma) { + $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; - $this->type .= $substitution->type; -// echo "In substitution! $this->teachera, $this->subjecta, $this->classa, $this->rooma\n"; - #$this->substitution = "1"; + // TODO Entfall, falls teacherb!=teacher bzw. class not in classb bzw. roomb!=room TODO + $this->type = $substitution->type; + $this->substitution = "1"; return 1; } else { return 0; diff --git a/classes/timetable.php b/classes/timetable.php index 0ebfde3..6b18c2f 100755 --- a/classes/timetable.php +++ b/classes/timetable.php @@ -189,17 +189,32 @@ class timetable { $this->times = $DB->get_records_select('timetable_time',$sql); } + public function get_periodmax() { + //$maxperiod = get_config('timetable', 'numperiod'); + $maxperiod = 0; + for ($i=0; $i<$this->numdayweek; $i++) { + foreach($this->lessons[$i+1] as $period => $lessons) + if ($period > $maxperiod && count($lessons)) $maxperiod = $period; + foreach($this->lessons_canceled[$i+1] as $period => $lessons) + if ($period > $maxperiod && count($lessons)) $maxperiod = $period; + foreach($this->lessons_event[$i+1] as $period => $lessons) + if ($period > $maxperiod && count($lessons)) $maxperiod = $period; + } + return $maxperiod; + } + public function prepare_output() { $resultdata = array(); - $numperiod = get_config('timetable', 'numperiod'); - if ($this->periodmax > $numperiod) $numperiod = $this->periodmax; - $numperiod = 13; + $numperiod = max($this->get_periodmax(), get_config('timetable', 'numperiod')); $numdayweek = 5 + get_config('timetable', 'saturday'); if ($numdayweek == 6) $resultdata['saturday'] = 1; else $resultdata['saturday'] = 0; $resultdata['type'] = $this->type; + $resultdata['viewteacher'] = ($this->type == 'teacher') ? "1" : "";; + $resultdata['viewclass'] = ($this->type == 'class') ? "1" : "";; + $resultdata['viewroom'] = ($this->type == 'room') ? "1" : "";; $resultdata['name'] = $this->name; $resultdata['description'] = $this->description; $resultdata['date'] = $this->monday->format('d.m') . " - " . $this->lastday->format('d.m'); @@ -225,12 +240,27 @@ class timetable { $mylesson['teachera'] = $lesson->teachera; $mylesson['rooma'] = $lesson->rooma; $mylesson['subjecta'] = $lesson->subjecta; + $mylesson['classb'] = property_exists($lesson,'classb') ? $lesson->classb : null; + $mylesson['teacherb'] = property_exists($lesson,'teacherb') ? $lesson->teacherb : null; + $mylesson['roomb'] = property_exists($lesson,'roomb') ? $lesson->roomb : null; + $mylesson['subjectb'] = property_exists($lesson,'subjectb') ? $lesson->subjectb : null; + $mylesson['subjectchanged'] = $lesson->subjectchanged; + $mylesson['teacherchanged'] = $lesson->teacherchanged; + $mylesson['classchanged'] = $lesson->classchanged; + $mylesson['roomchanged'] = $lesson->roomchanged; $mylesson['substitution'] = $lesson->substitution; $mylesson['cancel'] = ""; + $mylesson['cancel4me'] = ""; $mylesson['event'] = $lesson->reason ? $lesson->reason : "Event"; $mylesson['status'] = "1"; $mylesson['flag'] = "1"; $mylesson['text'] = $lesson->text; + $mylesson['subtype'] = Array(); + if ($lesson->type) { + for ($i=0; $i<32; $i++) { + if ($lesson->type & (1<<$i)) $mylesson['subtype'][] = $i+1; + } + } $days[$day]['substitutionold'] .= $lesson->text; $days[$day]['lessons'][] = $mylesson; } @@ -244,12 +274,27 @@ class timetable { $mylesson['teachera'] = $lesson->teachera; $mylesson['rooma'] = $lesson->rooma; $mylesson['subjecta'] = $lesson->subjecta; + $mylesson['classb'] = property_exists($lesson,'classb') ? $lesson->classb : null; + $mylesson['teacherb'] = property_exists($lesson,'teacherb') ? $lesson->teacherb : null; + $mylesson['roomb'] = property_exists($lesson,'roomb') ? $lesson->roomb : null; + $mylesson['subjectb'] = property_exists($lesson,'subjectb') ? $lesson->subjectb : null; $mylesson['substitution'] = $lesson->substitution; + $mylesson['subjectchanged'] = $lesson->subjectchanged; + $mylesson['teacherchanged'] = $lesson->teacherchanged; + $mylesson['classchanged'] = $lesson->classchanged; + $mylesson['roomchanged'] = $lesson->roomchanged; $mylesson['cancel'] = ""; + $mylesson['cancel4me'] = ""; $mylesson['event'] = ""; $mylesson['status'] = ""; $mylesson['flag'] = ""; $mylesson['text'] = $lesson->text; + $mylesson['subtype'] = Array(); + if ($lesson->type) { + for ($i=0; $i<32; $i++) { + if ($lesson->type & (1<<$i)) $mylesson['subtype'][] = $i+1; + } + } $days[$day]['substitutionold'] .= $lesson->text; $days[$day]['lessons'][] = $mylesson; } @@ -263,12 +308,33 @@ class timetable { $mylesson['teachera'] = $lesson->teachera; $mylesson['rooma'] = $lesson->rooma; $mylesson['subjecta'] = $lesson->subjecta; + $mylesson['classb'] = property_exists($lesson,'classb') ? $lesson->classb : null; + $mylesson['teacherb'] = property_exists($lesson,'teacherb') ? $lesson->teacherb : null; + $mylesson['roomb'] = property_exists($lesson,'roomb') ? $lesson->roomb : null; + $mylesson['subjectb'] = property_exists($lesson,'subjectb') ? $lesson->subjectb : null; $mylesson['substitution'] = $lesson->substitution; $mylesson['cancel'] = "1"; + $mylesson['cancel4me'] = ""; + if (($lesson->teacherchanged && $this->type == 'teacher') || + ($lesson->classchanged && $this->type == 'class') || + ($lesson->roomchanged && $this->type == 'room')) $mylesson['cancel4me'] = "cancel4me"; + $mylesson['subjectchanged'] = $lesson->subjectchanged; + $mylesson['teacherchanged'] = $lesson->teacherchanged; + $mylesson['classchanged'] = $lesson->classchanged; + $mylesson['roomchanged'] = $lesson->roomchanged; + #if ((property_exists($lesson,'teacherb') && $this->type == 'teacher') || + # (property_exists($lesson,'classb') && $this->type == 'class') || + # (property_exists($lesson,'roomb') && $this->type == 'room')) $mylesson['cancel4me'] = "cancel4me"; $mylesson['event'] = ""; $mylesson['status'] = "1"; $mylesson['flag'] = "1"; // status und flag werden vertauscht (im Template bzw. extern-lib.php $mylesson['text'] = $lesson->text; + $mylesson['subtype'] = Array(); + if ($lesson->type) { + for ($i=0; $i<32; $i++) { + if ($lesson->type & (1<<$i)) $mylesson['subtype'][] = $i+1; + } + } $days[$day]['substitutionold'] .= $lesson->text; $days[$day]['lessons'][] = $mylesson; } diff --git a/externallib.php b/externallib.php index 1465828..25e84b7 100755 --- a/externallib.php +++ b/externallib.php @@ -215,12 +215,23 @@ class mod_timetable_external extends external_api { 'teachera'=> new external_value(PARAM_TEXT, 'name of teacher'), 'rooma' => new external_value(PARAM_TEXT, 'name of room'), 'subjecta' => new external_value(PARAM_TEXT, 'name of subject'), + 'classb' => new external_value(PARAM_TEXT, 'name of class'), + 'teacherb'=> new external_value(PARAM_TEXT, 'name of teacher'), + 'roomb' => new external_value(PARAM_TEXT, 'name of room'), + 'subjectb' => new external_value(PARAM_TEXT, 'name of subject'), + 'classchanged' => new external_value(PARAM_BOOL, 'name of class'), + 'teacherchanged' => new external_value(PARAM_BOOL, 'name of teacher'), + 'roomchanged' => new external_value(PARAM_BOOL, 'name of room'), + 'subjectchanged' => new external_value(PARAM_BOOL, 'name of subject'), 'substitution'=> new external_value(PARAM_TEXT, 'lesson is substitution'), 'cancel' => new external_value(PARAM_TEXT, 'lesson is canceled'), + 'cancel4me' => new external_value(PARAM_TEXT, 'lesson is canceled 4 me'), 'event' => new external_value(PARAM_TEXT, 'lesson is event'), 'status' => new external_value(PARAM_TEXT, 'status of lesson'), 'flag' => new external_value(PARAM_TEXT, 'flag of lesson'), - 'text' => new external_value(PARAM_TEXT, 'description text') + 'text' => new external_value(PARAM_TEXT, 'description text'), + 'subtype' => new external_multiple_structure( new external_value(PARAM_INT, 'bitnumber')) + //'subtype' => new external_multiple_structure( new external_value('number', PARAM_INT, 'bitnumber')) ) ) ) @@ -231,6 +242,9 @@ class mod_timetable_external extends external_api { ) ), 'type' => new external_value(PARAM_TEXT, 'The type of timetable: class, teacher, room'), + 'viewteacher' => new external_value(PARAM_TEXT, '1 if type of timetable teacher'), + 'viewclass' => new external_value(PARAM_TEXT, '1 if type of timetable class'), + 'viewroom' => new external_value(PARAM_TEXT, '1 if type of timetable room'), 'name' => new external_value(PARAM_TEXT, 'value of type'), 'date' => new external_value(PARAM_TEXT, 'date'), 'description' => new external_value(PARAM_TEXT, 'description'), diff --git a/styles.css b/styles.css index 165fdac..a245f4b 100755 --- a/styles.css +++ b/styles.css @@ -67,3 +67,91 @@ div.timetable { text-align: center; width: 1rem; } + +.time { + font-size: 6pt; + display: none; +} + +div.lesson { + margin: 2px; + +} + +.substitution { + //padding: 2px; + background-color: pink; + display: block!important; +} + +.lesson_detail { + font-size: 6pt; + white-space: nowrap; +} + +.changed { + background-color: red; + color: white; + padding: 2px; + //box-sizing: border-box; + font-weight:bold; + //display: block!important; +} + +.lesson_details { + display: none; +} + +.lesson_detail { + display: inline-block; + margin: 1px; +} + +.lesson_txt { + background-color: pink; + color: blue; + padding: 2px; + font-weight:bold; + //display: inline; +} + +.canceled { + background-color: red; + color: white; + padding: 2px; + font-weight:bold; + //display: inline; + //text-decoration: line-through; +} + +.subtype_1 .lesson_main { + text-decoration: line-through; +} + +.subtype_1 .lesson_detail { + text-decoration: line-through; +} + +.cancel4me .lesson_main { + text-decoration: line-through; +} + +.cancel4me .lesson_detail { + text-decoration: line-through; + //display: none; +} + +//.canceled .lesson_detail.cancel_detail { +// text-decoration: line-through; +//} + +.canceled .lesson_detail.changed { + text-decoration: line-through; +} + +.canceled.lesson_main.changed { + text-decoration: line-through; +} +//.canceled.lesson_main.cancel_detail { +// text-decoration: line-through; +//} diff --git a/templates/timetable.mustache b/templates/timetable.mustache index 4eb7673..9065df4 100755 --- a/templates/timetable.mustache +++ b/templates/timetable.mustache @@ -20,44 +20,76 @@ {{#periods}}