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 = '
';
$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 = '';
} 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;