From 0f79e648741dd179ec83c6cadcb0e67209cc9085 Mon Sep 17 00:00:00 2001 From: noackorama <noackorama@gmail.com> Date: Fri, 8 Oct 2021 18:18:44 +0200 Subject: [PATCH] add lost object_set_visit to files and try to mimic old behaviour on my_courses --- app/controllers/course/files.php | 1 + lib/object.inc.php | 83 +++++++++++++++++++++++++++++++- 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/app/controllers/course/files.php b/app/controllers/course/files.php index 25233af9c57..3e6e1356db4 100644 --- a/app/controllers/course/files.php +++ b/app/controllers/course/files.php @@ -26,6 +26,7 @@ class Course_FilesController extends AuthenticatedController throw new CheckObjectException(_('Es wurde keine passende Veranstaltung gefunden.')); } $this->course = Context::get(); + object_set_visit_module($this->studip_module->getPluginId()); $this->last_visitdate = object_get_visit($this->course->id, $this->studip_module->getPluginId()); PageLayout::setHelpKeyword('Basis.Dateien'); diff --git a/lib/object.inc.php b/lib/object.inc.php index dcb310e8ad1..04190ba60cd 100644 --- a/lib/object.inc.php +++ b/lib/object.inc.php @@ -171,7 +171,7 @@ function get_objects_visits(array $object_ids, $plugin_id, $mode = 'last', $user $thresholds = array_combine($plugin_ids, array_fill( 0, count($plugin_ids), - $mode === null ? ['last_visitdate' => $threshold, 'visitdate' => $threshold] : $threshold + $mode === null ? ['last_visitdate' => null, 'visitdate' => null] : null )); $result = array_combine( $object_ids, @@ -206,6 +206,45 @@ function get_objects_visits(array $object_ids, $plugin_id, $mode = 'last', $user $result[$row['object_id']][$row['plugin_id']] = $return; } + foreach ($result as $object_id => $plugins) { + $seminar_data = $plugins[0]; + if ($mode === null && !isset($seminar_data['visitdate'])) { + $seminar_data = ['last_visitdate' => $threshold, 'visitdate' => $threshold]; + $result[$object_id][0] = $seminar_data; + } + if ($mode !== null && !isset($seminar_data)) { + $seminar_data = $threshold; + $result[$object_id][0] = $seminar_data; + } + foreach ($plugins as $plugin_id => $data) { + if ($plugin_id == 0) continue; + if ($mode === null) { + if (isset($data['visitdate']) || object_id_to_type($plugin_id)) { + $result[$object_id][$plugin_id] = [ + 'visitdate' => $data['visitdate'] ?? max($threshold, (int)$data['visitdate']), + 'last_visitdate' => $data['last_visitdate'] ?? max($threshold, (int)$data['last_visitdate']) + ]; + } else { + $result[$object_id][$plugin_id] = [ + 'visitdate' => $data['visitdate'] ?? max($seminar_data['visitdate'], (int)$data['visitdate']), + 'last_visitdate' => $data['last_visitdate'] ?? max($seminar_data['last_visitdate'], (int)$data['last_visitdate']) + ]; + } + } elseif ($mode === 'last') { + if (isset($data) || object_id_to_type($plugin_id)) { + $result[$object_id][$plugin_id] = $data ?? max($threshold, (int)$data); + } else { + $result[$object_id][$plugin_id] = $data ?? max($seminar_data['last_visitdate'], (int)$data); + } + } else { + if (isset($data) || object_id_to_type($plugin_id)) { + $result[$object_id][$plugin_id] = $data ?? max($threshold, (int)$data); + } else { + $result[$object_id][$plugin_id] = $data ?? max($seminar_data['visitdate'], (int)$data); + } + } + } + } // Reduce array if not additional types were passed if (func_num_args() < 5) { // Unfortunately array_column() will dispose the array key @@ -337,3 +376,45 @@ function object_type_to_id($type) } } + +/** + * converts a plugin id to old ouv type + * @param $id int former used type of visited objects or module (i.e. news, documents, wiki) + * @return string + */ +function object_id_to_type($id) +{ + if (!is_numeric($id)) { + return null; + } + $ouv_mapping = [ + 'sem' => 0, + 'inst'=> 0, + 'basicdata' => 0, + 'vote' => -1, + 'eval' => -2, + 'news' => 'CoreOverview', + 'documents' => 'CoreDocuments', + 'schedule' => 'CoreSchedule', + 'scm' => 'CoreScm', + 'wiki' => 'CoreWiki', + 'elearning_interface' => 'CoreElearningInterface', + 'ilias_interface' => 'IliasInterfaceModule', + 'participants' => 'CoreParticipants' + ]; + + if (!in_array($id, [0, -1, -2])) { + $plugin = PluginManager::getInstance()->getPluginById($id); + if ($plugin) { + $search = get_class($plugin); + } + } else { + $search = (int)$id; + } + if (isset($search)) { + return array_search($search, $ouv_mapping, true) ?: null; + } else { + return null; + } + +} -- GitLab