From 3a996bd5a5558e31776818c5671a1892beb73abe Mon Sep 17 00:00:00 2001 From: L_DA Date: Sun, 5 Jul 2020 20:23:58 +0000 Subject: [PATCH] timetable in slider (rd) --- block_timetable.php | 55 ++++++++++++++--- classes/timetable.php | 138 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 179 insertions(+), 14 deletions(-) diff --git a/block_timetable.php b/block_timetable.php index a1511d4..0183501 100755 --- a/block_timetable.php +++ b/block_timetable.php @@ -33,7 +33,7 @@ class block_timetable extends block_base { } function get_content() { - global $CFG, $OUTPUT, $USER; + global $CFG, $OUTPUT, $USER, $PAGE; if ($this->content !== null) { return $this->content; @@ -47,7 +47,7 @@ class block_timetable extends block_base { $this->content = new stdClass(); $this->content->items = array(); $this->content->icons = array(); - $this->content->footer = 'Fächer
Lehrer
Räume'; + $this->content->footer = '
Fächer - Lehrer - Räume
'; $this->content->text = ""; /* @@ -67,7 +67,8 @@ class block_timetable extends block_base { } */ // echo var_dump($USER); - $view = 'subject'; + $view1 = 'subject'; + $view2 = 'teacher'; if ($this->page->course->idnumber && $this->page->course->shortname) { $class = $this->page->course->shortname; $this->content->text .= "Stundenplan der Klasse $class
"; @@ -78,7 +79,9 @@ class block_timetable extends block_base { $teacher = str_replace("-fvs", "", $teacher); $this->content->text .= "Stundenplan von ".(substr($USER->firstname,0,1)).". {$USER->lastname}
"; $ttable = new timetable('teacher',$teacher); - $view = 'class'; + $view1 = 'class'; + $view2 = 'subject'; + $this->content->footer = '
Klassen - Fächer - Räume
'; } elseif ($USER->department) { $class = $USER->department; $class = str_replace("_", "/", $class); @@ -91,7 +94,7 @@ class block_timetable extends block_base { //$context_id = get_context_instance_by_id($course->id); //echo "Contextid = $contextid->contextlevel\n"; - + /* $numdayweek = 5 + get_config('timetable', 'saturday'); $date = new DateTime(); @@ -113,10 +116,48 @@ class block_timetable extends block_base { $this->content->text .= $monday->format('d.m') . " - " . $lastday->format('d.m'); //$ttable = new timetable('class',$class); $ttable->read_db($week); + */ + //$this->content->text .= $ttable->monday->format('d.m') . " - " . $ttable->lastday->format('d.m'); + + $jsmodule = array( + 'name' => 'block_timetable', + 'fullpath' => '/blocks/timetable/module.js', + 'requires' => array() + ); + $opts =Array(); + $opts['someinstancesetting'] = 1; + $PAGE->requires->js_init_call('M.block_timetable.helper.init', array($opts),false,$jsmodule); + $this->content->text .= html_writer::start_tag('div', ['data-region' => 'calendar', 'class' => 'maincalendar']); - $this->content->text .= $ttable->print_table($view); + $this->content->text .= html_writer::start_tag('div', ['class' =>'slider']); + $this->content->text .= html_writer::start_tag('div', ['class' =>'slides']); + for ($i=0; $i<3; $i++) { + $ttable->read_db($i); +// $this->content->text .= $ttable->print_navigation($i); + //$this->content->text .= html_writer::start_tag('div', ['class' =>'slide', 'id'=>"slide-$i", 'data-region' => 'calendar']); + $this->content->text .= html_writer::start_tag('div', ['class' => 'slide', 'id'=>"slide-$i"]); + //$this->content->text .= $ttable->print_table($view1); + $this->content->text .= $ttable->print_table($view1,$i); + $this->content->text .= $ttable->print_table($view2,$i); + $this->content->text .= $ttable->print_table('room',$i); + $this->content->text .= html_writer::end_tag('div'); + } $this->content->text .= html_writer::end_tag('div'); - + $this->content->text .= html_writer::end_tag('div'); + $this->content->text .= html_writer::end_tag('div'); + + /* + $this->content->text .= html_writer::start_tag('div', ['data-region' => 'calendar', 'style' => 'display: none;']); + $this->content->text .= $ttable->print_table($view1); + $this->content->text .= html_writer::end_tag('div'); + $this->content->text .= html_writer::start_tag('div', ['data-region' => 'calendar', 'style' => 'display: none;']); + $this->content->text .= $ttable->print_table($view2); + $this->content->text .= html_writer::end_tag('div'); + $this->content->text .= html_writer::start_tag('div', ['data-region' => 'calendar', 'style' => 'displaay: none;']); + $this->content->text .= $ttable->print_table('room'); + $this->content->text .= html_writer::end_tag('div'); + $this->content->text .= html_writer::end_tag('div'); + */ return $this->content; } diff --git a/classes/timetable.php b/classes/timetable.php index e040de9..0ad2958 100755 --- a/classes/timetable.php +++ b/classes/timetable.php @@ -34,6 +34,13 @@ class timetable { $this->type = $type; $this->name = $name; $this->periodmax=0; + $this->clear_data(); +// $this->data = array(); +// for ($i=1; $i<=6; $i++) $this->data[$i] = array(); + + } + + public function clear_data() { $this->data = array(); for ($i=1; $i<=6; $i++) $this->data[$i] = array(); } @@ -45,15 +52,61 @@ class timetable { public function read_db($week) { global $USER, $DB, $CFG; - $this->week = $week; + $this->clear_data(); + $this->numdayweek = 5 + get_config('timetable', 'saturday'); + + $this->monday = new \DateTime(); + if ($week>0) { + $this->monday->add(new \DateInterval("P".($week)."W")); + } elseif ($week<0) { + $this->monday->sub(new \DateInterval("P".(-$week)."W")); + } + + $dayofweek = $this->monday->format('w'); + if ($dayofweek > $this->numdayweek) { + $this->monday->add(new \DateInterval("P".(8-$dayofweek)."D")); + } elseif ($dayofweek < 1) { + $this->monday->add(new \DateInterval("P1D")); + } else { + $this->monday->sub(new \DateInterval("P".($dayofweek-1)."D")); + } + + $this->week = $this->monday->format("W"); + $this->lastday = new \DateTime($this->monday->format('Y-m-d\TH:i:sP')); + $this->lastday->add(new \DateInterval("P".($this->numdayweek-1)."D")); + + //$this->content->text .= $monday->format('d.m') . " - " . $lastday->format('d.m'); + $sql = "$this->type = '$this->name' and not (mid(week, $this->week, 1) = '0')"; //$sql = "$this->type = '$this->name' and (mid(week, $this->week, 1) = '1')"; if ($result = $DB->get_records_select('timetable_lesson',$sql)) { foreach ($result as $lesson) { - $this->data[$lesson->day][$lesson->period][] = $lesson; + //if (!exists($this->data[$lesson->day][$lesson->period])) $this->data[$lesson->day][$lesson->period] = array(); + $this->data[$lesson->day][$lesson->period]['lesson'][] = $lesson; if ($this->periodmax < $lesson->period) $this->periodmax = $lesson->period; } } + $day = new \DateTime($this->monday->format('Y-m-d\TH:i:sP')); + // TODO CHANGE DATABASE: table substitution: classesa -> classa, classesb -> classb !!! + for ($i=0; $i<$this->numdayweek; $i++) { + if ($this->type == 'class') { + $sql = "date = '".$day->format('Ymd')."' AND ({$this->type}esa LIKE '%{$this->name}%' OR {$this->type}esb LIKE '%{$this->name}%')"; + } else { + $sql = "date = '".$day->format('Ymd')."' AND ({$this->type}a LIKE '%{$this->name}%' OR {$this->type}b LIKE '%{$this->name}%')"; + + } + + if ($result = $DB->get_records_select('timetable_substitution',$sql)) { + foreach ($result as $substitution) { + $this->data[$i+1][$substitution->period]['substitution'][] = $substitution; + if ($this->periodmax < $lesson->period) $this->periodmax = $lesson->period; + } + } + $day->add(new \DateInterval("P1D")); + + } + + } /** @@ -61,14 +114,68 @@ class timetable { * * @return int */ - public function print_table($view) { + public function print_navigation($week) { + /** + * Count the number of online users + * + * @return int + */ + $table = new \html_table(); + $table->attributes['class'] = 'minicalendar calendartable calendar-controls'; + //$table->head = array('','Mo','Di', 'Mi' , 'Do', 'Fr'); + $tablerow = new \html_table_row(); + if ($week>0) { + $tablerow->cells[] = new \html_table_cell(''); + } else { + $tablerow->cells[] = new \html_table_cell(''); + } + $tablerow->cells[] = new \html_table_cell(''.$this->monday->format('d.m') . " - " . $this->lastday->format('d.m').''); + if ($week<2) { + $tablerow->cells[] = new \html_table_cell(''); + } else { + $tablerow->cells[] = new \html_table_cell(''); + } + + + $table->data[] = $tablerow; + return \html_writer::table($table); + + } + + public function get_caption($week) { + $result = ""; + if ($week>0) { + $result .= ''; + } else { + $result .= ''; + //$result .= ''; + } + $result .= ' | '; + $result .= ''; + $result .= ''.$this->monday->format('d.m') . " - " . $this->lastday->format('d.m').''; + $result .= ""; + $result .= ' | '; + if ($week<2) { + $result .= ''; + } else { + $result .= ''; + } + return $result; + + } + + + public function print_table($view,$week) { global $DB; //var_dump($this->data[1]); $numperiod = get_config('timetable', 'numperiod'); $numdayweek = 5 + get_config('timetable', 'saturday'); if ($this->periodmax>$numperiod) $numperiod = $this->periodmax; $table = new \html_table(); - $table->attributes['class'] = 'minicalendar calendartable generaltable'; + //$table->attributes['class'] = "minicalendar calendartable generaltable timetable_view_$view"; + $table->attributes['class'] = "minicalendar calendartable generaltable timetable_view_$view"; + $table->caption = "
".$this->get_caption($week)."
"; + //$table->style = 'display: none;'; $table->head = array('','Mo','Di', 'Mi' , 'Do', 'Fr'); if ($numdayweek == 6) $table->head[] = 'Sa'; for ($i = 1; $i<=$numperiod; $i++) { @@ -79,13 +186,19 @@ class timetable { $tablerow->cells[] = $cell; for ($k = 1; $k <= $numdayweek; $k++) { $flag = 0; - if (array_key_exists($i,$this->data[$k])) { + if (array_key_exists($i,$this->data[$k]) && array_key_exists('lesson',$this->data[$k][$i])) { $content = ""; - foreach ($this->data[$k][$i] as $lesson) { + foreach ($this->data[$k][$i]['lesson'] as $lesson) { if ($content) $content .= "
"; if ($lesson->flag) $content .= ""; //if (substr($lesson->week,$this->week,1) == '1') $content .= $lesson->{$view}; - if ($lesson->week[$this->week-1] == '1') $content .= $lesson->{$view}; + if ($lesson->week[$this->week-1] == '1') { + if ($lesson->{$view}) { + $content .= $lesson->{$view}; + } else { + $content .= "+++"; + } + } if ($lesson->week[$this->week-1] == 'x') $content .= "---"; if ($lesson->flag) $content .= ""; $flag += $lesson->flag; @@ -93,8 +206,19 @@ class timetable { } else { $content = "-"; } + $subtxt = ""; + if (array_key_exists($i,$this->data[$k]) && array_key_exists('substitution', $this->data[$k][$i])) { + foreach ($this->data[$k][$i]['substitution'] as $substitution) { + $subtxt .= $substitution->text; + } + if ($subtxt) { + $content = "$content"; + //$content .= "$subtxt"; + } + } $cell = new \html_table_cell($content); // if ($flag) $cell->style = 'color: red;'; + //if (array_key_exists($i, $this->data[$k] ) && array_key_exists('substitution', $this->data[$k][$i])) $cell->attributes['class'] = 'tooltip'; $tablerow->cells[] = $cell; } $table->data[] = $tablerow;