aboutsummaryrefslogtreecommitdiff
path: root/lib/modules/CoreStudygroupParticipants.php
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2025-08-07 10:13:09 +0200
committerJan-Hendrik Willms <tleilax+studip@gmail.com>2025-08-07 10:13:09 +0200
commitb1bc66f361a4dda92aba22fdd42843f619797a6c (patch)
treeecf6a08bddd1230edf7b49fc756073b4071ba169 /lib/modules/CoreStudygroupParticipants.php
parentca3ade956dd9c9041c07cef048136fa91f5faca2 (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.php40
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;
}
/**