aboutsummaryrefslogtreecommitdiff
path: root/lib/modules/GradebookModule.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/modules/GradebookModule.php')
-rw-r--r--lib/modules/GradebookModule.php81
1 files changed, 49 insertions, 32 deletions
diff --git a/lib/modules/GradebookModule.php b/lib/modules/GradebookModule.php
index 2a3be5c..34bf835 100644
--- a/lib/modules/GradebookModule.php
+++ b/lib/modules/GradebookModule.php
@@ -14,8 +14,10 @@ use Grading\Instance;
* @author <mlunzena@uos.de>
* @license http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
*/
-class GradebookModule extends CorePlugin implements SystemPlugin, StudipModule
+class GradebookModule extends CorePlugin implements SystemPlugin, StudipModuleExtended
{
+ use IconNavigationTrait;
+
public function __construct()
{
parent::__construct();
@@ -38,41 +40,56 @@ class GradebookModule extends CorePlugin implements SystemPlugin, StudipModule
return null;
}
- /**
- * {@inheritdoc}
- *
- * @SuppressWarnings(PHPMD.Superglobals)
- */
- public function getIconNavigation($courseId, $lastVisit, $userId)
+ public function getManyIconNavigation(array $course_ids, ?string $user_id = null): array
{
- if ($userId === 'nobody') {
- return null;
+ if ($user_id === 'nobody') {
+ return [];
}
+ // split courses in student-perms and tutor-perms
+ $tutor_c_ids = [];
+ foreach ($course_ids as $course_id) {
+ if ($GLOBALS['perm']->have_studip_perm('tutor', $course_id, $user_id)) {
+ $tutor_c_ids[$course_id] = $course_id;
+ }
+ }
+ $results = DBManager::get()->fetchGrouped(
+ "SELECT gd.course_id, gi.user_id
+ FROM grading_instances gi
+ JOIN grading_definitions gd ON(gd.id = definition_id)
+ LEFT JOIN object_user_visits AS ouv
+ ON ouv.object_id = gd.course_id
+ AND ouv.user_id = :user_id
+ AND ouv.plugin_id = :plugin_id
+ WHERE gd.course_id IN (:course_ids) AND gi.chdate > IFNULL(ouv.visitdate, :threshold)",
+ [
+ ':user_id' => $user_id,
+ ':plugin_id' => 0, // module doesnt write directly into ouv
+ ':course_ids' => $course_ids,
+ ':threshold' => object_get_visit_threshold(),
+ ]
+ );
$title = _('Gradebook');
- if ($GLOBALS['perm']->have_studip_perm('tutor', $courseId, $userId)) {
- $changed = Instance::countBySQL(
- 'INNER JOIN grading_definitions gd ON(gd.id = definition_id) '.
- 'WHERE gd.course_id = ? AND grading_instances.chdate > ?',
- [$courseId, $lastVisit]
- );
- } else {
- $changed = Instance::countBySQL(
- 'INNER JOIN grading_definitions gd ON(gd.id = definition_id) '.
- 'WHERE gd.course_id = ? AND grading_instances.chdate > ? AND user_id = ?',
- [$courseId, $lastVisit, $userId]
- );
+ $navs = [];
+ foreach ($course_ids as $course_id) {
+ if (empty($results[$course_id])) {
+ $changed = false;
+ } elseif (isset($tutor_c_ids[$course_id])) {
+ $changed = count($results[$course_id]);
+ } else {
+ $filtered_results = array_filter($results[$course_id], fn ($fetched_user_id) => $fetched_user_id === $user_id);
+ $changed = !empty($filtered_results) ? count($filtered_results) : 0;
+ }
+ $icon = $changed
+ ? Icon::create('assessment', Icon::ROLE_ATTENTION)
+ : Icon::create('assessment');
+ $navigation = new Navigation($title, 'dispatch.php/course/gradebook/overview');
+ $navigation->setImage($icon);
+ $navigation->setLinkAttributes(['title' => $title]);
+ $navs[$course_id] = $navigation;
}
- $icon = $changed
- ? Icon::create('gradebook', Icon::ROLE_NEW)
- : Icon::create('gradebook');
-
- $navigation = new Navigation($title, 'dispatch.php/course/gradebook/overview');
- $navigation->setImage($icon);
- $navigation->setLinkAttributes(['title' => $title]);
-
- return $navigation;
+ return $navs;
}
/**
@@ -157,8 +174,8 @@ class GradebookModule extends CorePlugin implements SystemPlugin, StudipModule
'description' => _('Dieses Modul ermöglicht die manuelle und automatische Erfassung von Noten und Leistungen.'),
'category' => _('Lehr- und Lernorganisation'),
'keywords' => _('automatische und manuelle Erfassung von gewichteten Leistungen;Export von Leistungen;persönliche Fortschrittskontrolle'),
- 'icon' => Icon::create('gradebook', Icon::ROLE_INFO),
- 'icon_clickable' => Icon::create('gradebook'),
+ 'icon' => Icon::create('assessment', Icon::ROLE_INFO),
+ 'icon_clickable' => Icon::create('assessment'),
'screenshots' => [
'path' => 'assets/images/plus/screenshots/Gradebook',
'pictures' => [