From 9a7b81b33b7ed2a4098fa1b29f96ac05bad4e293 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <jan.hendrik.willms@uni-oldenburg.de>
Date: Sun, 4 Sep 2022 10:16:51 +0200
Subject: [PATCH] Studip 5.1

---
 SysStats.php               |  2 -
 bootstrap.php              |  3 --
 controllers/statistics.php | 86 ++++++++++++++------------------------
 plugin.manifest            |  5 +--
 views/statistics/files.php |  2 +-
 5 files changed, 35 insertions(+), 63 deletions(-)
 delete mode 100644 bootstrap.php

diff --git a/SysStats.php b/SysStats.php
index 177cc8c..0ae634b 100644
--- a/SysStats.php
+++ b/SysStats.php
@@ -1,6 +1,4 @@
 <?php
-require_once __DIR__ . '/bootstrap.php';
-
 /**
  * SysStats.php
  *
diff --git a/bootstrap.php b/bootstrap.php
deleted file mode 100644
index 3f933b9..0000000
--- a/bootstrap.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-    require_once 'vendor/trails/trails.php';
-    require_once 'app/controllers/studip_controller.php';
diff --git a/controllers/statistics.php b/controllers/statistics.php
index 879cb60..5d4dad1 100644
--- a/controllers/statistics.php
+++ b/controllers/statistics.php
@@ -5,7 +5,6 @@ class StatisticsController extends PluginController
     const CACHE_DURATION = 60 * 60;
     const CLASS_IDENTIFIER = '__SERIALIZED_CLASS__';
 
-
     public function before_filter(&$action, &$args)
     {
         parent::before_filter($action, $args);
@@ -35,39 +34,23 @@ class StatisticsController extends PluginController
         );
 
         $this->getCached($this->semester->id, function () {
-            if (StudipVersion::olderThan('4.2')) {
-                $query = "SELECT `plugins`.`pluginid` AS id,
-                                 `plugins`.`pluginname` AS name,
-                                 COUNT(`seminare`.`Seminar_id`) AS quantity
-                          FROM `plugins`
-                          LEFT JOIN `plugins_activated` USING (`pluginid`)
-                          LEFT JOIN `seminare`
-                            ON SUBSTR(`plugins_activated`.`poiid`, 4) = `seminare`.`Seminar_id`
-                          WHERE `seminare`.`start_time` BETWEEN ? AND ?
-                            AND `plugins_activated`.`state` = 'on'
-                            AND FIND_IN_SET('StandardPlugin', `plugintype`)
-                            AND `plugins`.`enabled` = 'yes'
-                          GROUP BY `plugins`.`pluginid`
-                          ORDER BY quantity DESC";
-            } else {
-                $query = "SELECT `plugins`.`pluginid` AS id,
-                                 `plugins`.`pluginname` AS name,
-                                 COUNT(`seminare`.`Seminar_id`) AS quantity
-                          FROM `plugins`
-                          LEFT JOIN `plugins_activated` USING (`pluginid`)
-                          LEFT JOIN `seminare`
-                            ON `plugins_activated`.`range_type` = 'sem'
-                                AND `plugins_activated`.`range_id` = `seminare`.`Seminar_id`
-                          WHERE `seminare`.`start_time` BETWEEN ? AND ?
-                            AND `plugins_activated`.`state` = 1
-                            AND FIND_IN_SET('StandardPlugin', `plugins`.`plugintype`)
-                            AND `plugins`.`enabled` = 'yes'
-                          GROUP BY `plugins`.`pluginid`
-                          ORDER BY quantity DESC";
-            }
+            $query = "SELECT `pluginid` AS id,
+                             `pluginname` AS name,
+                             COUNT(`seminare`.`Seminar_id`) AS quantity
+                      FROM `plugins`
+                      LEFT JOIN `tools_activated`
+                        ON `pluginid` = `plugin_id` AND `range_type` = 'course'
+                      LEFT JOIN `seminare`
+                        ON `range_id` = `Seminar_id`
+                      LEFT JOIN `semester_courses`
+                        ON `Seminar_id` = `course_id`
+                      WHERE `semester_courses`.`semester_id` = ?
+                        AND FIND_IN_SET('StandardPlugin', `plugintype`)
+                        AND `plugins`.`enabled` = 'yes'
+                      GROUP BY `pluginid`
+                      ORDER BY quantity DESC";
             $plugins = DBManager::get()->fetchAll($query, [
-                $this->semester->beginn,
-                $this->semester->ende
+                $this->semester->id,
             ]);
 
             return array_merge(compact('plugins'), [
@@ -87,23 +70,17 @@ class StatisticsController extends PluginController
             $semester->name
         ));
 
-        if (StudipVersion::olderThan('4.2')) {
-            $condition = "JOIN plugins_activated AS pa
-                            ON (SUBSTR(pa.poiid, 4) = Seminar_id AND pa.pluginid = :pluginid)
-                          WHERE start_time BETWEEN :begin AND :end
-                            AND pa.state = 'on'
-                          ORDER BY VeranstaltungsNummer, Name";
-        } else {
-            $condition = "JOIN plugins_activated AS pa
-                            ON (pa.pluginid = :pluginid AND pa.range_type = 'sem' AND pa.range_id = Seminar_id)
-                          WHERE start_time BETWEEN :begin AND :end
-                            AND pa.state = 1
-                          ORDER BY VeranstaltungsNummer, Name";
-        }
+        $condition = "JOIN semester_courses
+                        ON course_id = Seminar_id
+                          AND semester_id = :semester_id
+                      JOIN tools_activated
+                        ON range_id = Seminar_id
+                          AND range_type = 'course'
+                          AND plugin_id = :plugin_id
+                      ORDER BY VeranstaltungsNummer, Name";
         $this->courses = Course::findBySQL($condition, [
-            ':begin'    => $semester->beginn,
-            ':end'      => $semester->ende,
-            ':pluginid' => $plugin_id,
+            ':semester_id' => $semester->id,
+            ':plugin_id'   => $plugin_id,
         ]);
 
         if ($info['class'] === 'TutorienPlugin') {
@@ -128,15 +105,17 @@ class StatisticsController extends PluginController
                              COUNT(DISTINCT `su0`.`user_id`) AS `teacher_count`,
                              COUNT(DISTINCT `su1`.`user_id`) AS `student_count`
                       FROM `semester_data` AS `sd`
+                      JOIN `semester_courses` AS sc
+                        ON sd.`semester_id` = sc.`semester_id`
                       LEFT JOIN `seminare` AS `s`
-                        ON `s`.`start_time` BETWEEN `sd`.`beginn` AND `sd`.`ende`
+                        ON sc.`course_id` = s.`Seminar_id`
                       LEFT JOIN `seminar_user` AS `su0`
                         ON `s`.`seminar_id` = `su0`.`seminar_id` AND `su0`.`status` = 'dozent'
                       LEFT JOIN `seminar_user` AS `su1`
                         ON `s`.`seminar_id` = `su1`.`seminar_id`
                           AND `su1`.`status` IN ('user', 'autor', 'tutor')
                       WHERE `s`.`status` != 99
-                      GROUP BY `sd`.`semester_id`
+                      GROUP BY `sd`.`semester_id`, sd.`beginn`
                       ORDER BY `beginn` DESC";
             $statement = DBManager::get()->query($query);
             $data = $statement->fetchAll(PDO::FETCH_ASSOC);
@@ -586,8 +565,8 @@ class StatisticsController extends PluginController
         foreach ($content as $index => $value) {
             if ($value instanceof SimpleORMap) {
                 $value = $value->toRawArray() + [
-                        self::CLASS_IDENTIFIER => get_class($value),
-                    ];
+                    self::CLASS_IDENTIFIER => get_class($value),
+                ];
             } elseif (is_array($value)) {
                 $value = $this->serializeContent($value);
             } else {
@@ -622,7 +601,6 @@ class StatisticsController extends PluginController
         return $content;
     }
 
-
     private function setTitle($title)
     {
         $args = func_get_args();
diff --git a/plugin.manifest b/plugin.manifest
index 1164392..6609235 100644
--- a/plugin.manifest
+++ b/plugin.manifest
@@ -1,6 +1,5 @@
 pluginname=Systemstatistiken
 pluginclassname=SysStats
 origin=UOL
-version=1.1.1
-studipMinVersion=4.0
-studipMaxVersion=4.5.99
+version=1.2
+studipMinVersion=5.0
diff --git a/views/statistics/files.php b/views/statistics/files.php
index 04bce9b..a0312e7 100644
--- a/views/statistics/files.php
+++ b/views/statistics/files.php
@@ -26,7 +26,7 @@
     </thead>
     <tbody>
     <? foreach ($semesters as $semester): ?>
-        <tr <? if ($semester->getcurrent()) echo 'class="current"'; ?>>
+        <tr <? if ($semester->current) echo 'class="current"'; ?>>
             <td><?= htmlReady($semester->name) ?></td>
             <td><?= number_format($data[$semester->id]['total'], 0, ',', '.') ?></td>
         <? foreach (array_keys($licenses) as $id): ?>
-- 
GitLab