diff options
| author | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2025-08-07 10:13:09 +0200 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2025-08-07 10:13:09 +0200 |
| commit | b1bc66f361a4dda92aba22fdd42843f619797a6c (patch) | |
| tree | ecf6a08bddd1230edf7b49fc756073b4071ba169 /lib/modules/CoreStudygroupParticipants.php | |
| parent | ca3ade956dd9c9041c07cef048136fa91f5faca2 (diff) | |
implement performance optimizations for my courses, fixes #4693
Closes #4693
Merge request studip/studip!3724
Diffstat (limited to 'lib/modules/CoreStudygroupParticipants.php')
| -rw-r--r-- | lib/modules/CoreStudygroupParticipants.php | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/lib/modules/CoreStudygroupParticipants.php b/lib/modules/CoreStudygroupParticipants.php index 5f8ac87..e77721f 100644 --- a/lib/modules/CoreStudygroupParticipants.php +++ b/lib/modules/CoreStudygroupParticipants.php @@ -9,19 +9,39 @@ * the License, or (at your option) any later version. */ -class CoreStudygroupParticipants extends CorePlugin implements StudipModule +class CoreStudygroupParticipants extends CorePlugin implements StudipModuleExtended { - /** - * {@inheritdoc} - */ - public function getIconNavigation($course_id, $last_visit, $user_id) + use IconNavigationTrait; + + public function getManyIconNavigation(array $course_ids, ?string $user_id = null): array { - $navigation = new Navigation(_('Teilnehmende'), "dispatch.php/course/studygroup/members/{$course_id}"); - $navigation->setImage(Icon::create('persons')); - if ($last_visit && CourseMember::countBySQL("seminar_id = :course_id AND mkdate >= :last_visit", ['last_visit' => $last_visit, 'course_id' => $course_id]) > 0) { - $navigation->setImage(Icon::create('persons', Icon::ROLE_ATTENTION)); + $results = DBManager::get()->fetchAll( + "SELECT seminar_user.Seminar_id, COUNT(seminar_user.user_id) as neue + FROM seminar_user + LEFT JOIN object_user_visits AS ouv + ON ouv.object_id = seminar_user.Seminar_id + AND ouv.user_id = :user_id + AND ouv.plugin_id = :plugin_id + WHERE seminar_user.Seminar_id IN (:course_ids) + AND seminar_user.mkdate > IFNULL(ouv.visitdate, :threshold) + GROUP BY seminar_user.Seminar_id", + [ + ':course_ids' => $course_ids, + ':user_id' => $user_id, + ':plugin_id' => $this->getPluginId(), + 'threshold' => object_get_visit_threshold() + ], + ); + $navs = []; + foreach ($course_ids as $course_id) { + $navigation = new Navigation(_('Teilnehmende'), "dispatch.php/course/studygroup/members/{$course_id}"); + $navigation->setImage(Icon::create('persons')); + if (isset($results[$course_id]) && !empty($results[$course_id]['neue'])) { + $navigation->setImage(Icon::create('persons', Icon::ROLE_ATTENTION)); + } + $navs[$course_id] = $navigation; } - return $navigation; + return $navs; } /** |
