diff options
| author | Marcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de> | 2024-06-18 13:18:06 +0000 |
|---|---|---|
| committer | Marcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de> | 2024-06-18 13:18:06 +0000 |
| commit | 33fd1358507b4a5abb3dcebe78d407d0567717c1 (patch) | |
| tree | 6bd8f6959da4c3fc1b8907c0bbc28eb9e10d4a5a /lib/modules/CoreSchedule.php | |
| parent | 42d46671c0309bddb71a91bbfdc5f2fa2e44384e (diff) | |
Deprecate `StudipAutoloader` and use composer's `autoload`
Closes #4282
Merge request studip/studip!3099
Diffstat (limited to 'lib/modules/CoreSchedule.php')
| -rw-r--r-- | lib/modules/CoreSchedule.php | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/lib/modules/CoreSchedule.php b/lib/modules/CoreSchedule.php new file mode 100644 index 0000000..601b618 --- /dev/null +++ b/lib/modules/CoreSchedule.php @@ -0,0 +1,130 @@ +<?php + +/* + * Copyright (c) 2012 Rasmus Fuhse <fuhse@data-quest.de> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + */ + +class CoreSchedule extends CorePlugin implements StudipModule +{ + /** + * {@inheritdoc} + */ + public function getIconNavigation($course_id, $last_visit, $user_id) + { + $query = "SELECT COUNT(termin_id) AS count, + COUNT(IF((chdate > IFNULL(ouv.visitdate, :threshold) AND autor_id != :user_id), termin_id, NULL)) AS neue + FROM termine + LEFT JOIN object_user_visits AS ouv + ON ouv.object_id = range_id + AND ouv.user_id = :user_id + AND ouv.plugin_id = :plugin_id + WHERE range_id = :course_id"; + $statement = DBManager::get()->prepare($query); + $statement->bindValue(':user_id', $user_id); + $statement->bindValue(':course_id', $course_id); + $statement->bindValue(':threshold', $last_visit); + $statement->bindValue(':plugin_id', $this->getPluginId()); + $statement->execute(); + $result = $statement->fetch(PDO::FETCH_ASSOC); + + if (!$result || (!$result['neue'] && !$result['count'])) { + return null; + } + + $nav = new Navigation(_('Ablaufplan'), 'dispatch.php/course/dates'); + if ($result['neue']) { + $nav->setImage(Icon::create('schedule', Icon::ROLE_ATTENTION), [ + 'title' => sprintf( + ngettext( + '%1$d Termin, %2$d neuer', + '%1$d Termine, %2$d neue', + $result['count'] + ), + $result['count'], + $result['neue'] + ) + ]); + $nav->setBadgeNumber($result['neue']); + } else { + $nav->setImage(Icon::create('schedule', Icon::ROLE_CLICKABLE), [ + 'title' => sprintf( + ngettext( + '%d Termin', + '%d Termine', + $result['count'] + ), + $result['count'] + ) + ]); + } + return $nav; + } + + /** + * {@inheritdoc} + */ + public function getTabNavigation($course_id) + { + $navigation = new Navigation(_('Ablaufplan')); + $navigation->setImage(Icon::create('schedule', Icon::ROLE_INFO_ALT)); + $navigation->setActiveImage(Icon::create('schedule', Icon::ROLE_INFO)); + + $navigation->addSubNavigation('dates', new Navigation(_('Termine'), 'dispatch.php/course/dates')); + $navigation->addSubNavigation('topics', new Navigation(_('Themen'), 'dispatch.php/course/topics')); + + return ['schedule' => $navigation]; + } + + /** + * {@inheritdoc} + */ + public function getMetadata() + { + return [ + 'summary' => _('Anzeige aller Termine der Veranstaltung'), + 'description' => _('Der Ablaufplan listet alle Präsenz-, '. + 'E-Learning-, Klausur-, Exkursions- und sonstige '. + 'Veranstaltungstermine auf. Zur besseren Orientierung und zur '. + 'inhaltlichen Einstimmung der Studierenden können Lehrende den '. + 'Terminen Themen hinzufügen, die z. B. eine Kurzbeschreibung '. + 'der Inhalte darstellen.'), + 'displayname' => _('Ablaufplan'), + 'category' => _('Lehr- und Lernorganisation'), + 'keywords' => _('Inhaltliche und räumliche Orientierung für Studierende; + Beschreibung der Inhalte einzelner Termine; + Raumangabe; + Themenzuordnung zu Terminen; + Terminzuordnung zu Themen'), + 'descriptionshort' => _('Anzeige aller Termine der Veranstaltung, ggf. mit Themenansicht'), + 'descriptionlong' => _('Der Ablaufplan listet alle Präsenz-, E-Learning-, Klausur-, Exkursions- ' . + 'und sonstige Veranstaltungstermine auf. Zur besseren Orientierung und zur ' . + 'inhaltlichen Einstimmung der Studierenden können Lehrende den Terminen ' . + 'Themen hinzufügen, die z. B. eine Kurzbeschreibung der Inhalte darstellen.'), + 'icon' => Icon::create('schedule', Icon::ROLE_INFO), + 'icon_clickable' => Icon::create('schedule', Icon::ROLE_CLICKABLE), + 'screenshots' => [ + 'path' => 'assets/images/plus/screenshots/Ablaufplan', + 'pictures' => [ + 0 => ['source' => 'Termine_mit_Themen.jpg', 'title' => _('Termine mit Themen')], + 1 => [ 'source' => 'Thema_bearbeiten_und_einem_Termin_zuordnen.jpg', 'title' => _('Thema bearbeiten und einem Termin zuordnen')] + ] + ] + ]; + } + + public function getInfoTemplate($course_id) + { + // TODO: Implement getInfoTemplate() method. + return null; + } + + public function isActivatableForContext(Range $context) + { + return $context->getRangeType() === 'course'; + } +} |
