From cd36e99958024cc33431f76f35099a71e26e3bce Mon Sep 17 00:00:00 2001 From: Rasmus Fuhse <fuhse@data-quest.de> Date: Tue, 6 Jun 2023 06:58:46 +0000 Subject: [PATCH] =?UTF-8?q?Resolve=20"OER=20Campus:=20OERSI=20Ergebnisse?= =?UTF-8?q?=20unvollst=C3=A4ndig"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #2521 Merge request studip/studip!1825 --- app/controllers/oer/market.php | 17 ++++++++++++++++- lib/models/OERHost.php | 3 ++- lib/models/OERHostOERSI.php | 27 ++++++++++----------------- lib/models/OERMaterial.php | 8 +++++--- 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/app/controllers/oer/market.php b/app/controllers/oer/market.php index 9e15406bd57..d1138fbd13e 100644 --- a/app/controllers/oer/market.php +++ b/app/controllers/oer/market.php @@ -188,9 +188,24 @@ class Oer_MarketController extends StudipController "oer_tags_material.tag_hash = oer_tags.tag_hash", "LEFT JOIN" ); + $search->join( + "oer_material_users", + "oer_material_users.material_id = oer_material.material_id", + "LEFT JOIN" + ); + $search->join( + "external_users", + "oer_material_users.user_id = external_users.external_contact_id AND oer_material_users.external_contact = '1'", + "LEFT JOIN" + ); + $search->join( + "auth_user_md5", + "oer_material_users.user_id = auth_user_md5.user_id AND oer_material_users.external_contact = '0'", + "LEFT JOIN" + ); $search->where( "textsearch", - "(oer_material.name LIKE :search OR oer_material.description LIKE :search OR oer_material.short_description LIKE :search OR oer_tags.name LIKE :search)", + "(oer_material.name LIKE :search OR oer_material.description LIKE :search OR oer_material.short_description LIKE :search OR oer_tags.name LIKE :search OR external_users.name LIKE :search OR CONCAT(auth_user_md5.Vorname, ' ', auth_user_md5.Nachname) LIKE :search)", ['search' => '%'.Request::get("search").'%'] ); } diff --git a/lib/models/OERHost.php b/lib/models/OERHost.php index 19f2bb23338..6db0747c6ca 100644 --- a/lib/models/OERHost.php +++ b/lib/models/OERHost.php @@ -264,8 +264,9 @@ class OERHost extends OERIdentity { $users = []; foreach ($material->users as $materialdata) { - if ($materialdata['external_contact']) { + if ($materialdata['oeruser']) { $user = $materialdata['oeruser']; + $users[] = [ 'user_id' => $user['foreign_id'], 'name' => $user['name'], diff --git a/lib/models/OERHostOERSI.php b/lib/models/OERHostOERSI.php index 3bb5d9f7029..5e6b9dcf519 100644 --- a/lib/models/OERHostOERSI.php +++ b/lib/models/OERHostOERSI.php @@ -69,13 +69,20 @@ class OERHostOERSI extends OERHost 'front_image_url' => $material_data['_source']['image'], 'download' => $material_data['_source']['encoding'][0]['contentUrl'] ?: '', 'id' => $material_data['_id'], - 'authors' => $material_data['_source']['creator'], 'organization' => $material_data['_source']['sourceOrganization'][0]['name'] ?: $material_data['_source']['publisher'][0]['name'] ]; $material->store(); - //set topics: - //$material->setUsers([]); + //set users: + $userdata = []; + foreach ((array) $material_data['_source']['creator'] as $creator) { + $userdata[] = [ + 'user_id' => md5($creator['name']), + 'name' => $creator['name'], + 'host_url' => $this['url'] + ]; + } + $material->setUsers($userdata); //set topics: $material->setTopics($material_data['_source']['keywords']); @@ -128,7 +135,6 @@ class OERHostOERSI extends OERHost $data['data'] = $material['data']->getArrayCopy(); $data['data']['download'] = $output['encoding'][0]['contentUrl'] ?? ''; $data['data']['front_image_url'] = $output['image'] ?? ''; - $data['data']['authors'] = $output['creator']; $data['data']['organization'] = $output['sourceOrganization'][0]['name'] ?? $output['publisher'][0]['name'] ?? ''; return [ 'data' => $data, @@ -167,19 +173,6 @@ class OERHostOERSI extends OERHost return false; } - public function getAuthorsForMaterial(OERMaterial $material) - { - $users = []; - $data = $material->data->getArrayCopy(); - foreach ((array) $data['authors'] as $author) { - $users[] = [ - 'name' => $author['name'], - 'hostname' => $data['organization'] ?: $this['name'] - ]; - } - return $users; - } - public function getDownloadURLForMaterial(OERMaterial $material) { return $material['uri']; diff --git a/lib/models/OERMaterial.php b/lib/models/OERMaterial.php index 911aaa2de1a..ea36035d78e 100644 --- a/lib/models/OERMaterial.php +++ b/lib/models/OERMaterial.php @@ -166,9 +166,11 @@ class OERMaterial extends SimpleORMap $cache_name = "oer_remote_searched_for_".md5($text)."_".($tag ? 1 : 0); $already_searched = (bool) StudipCacheFactory::getCache()->read($cache_name); if (!$already_searched) { - $host = OERHost::findOneBySQL("index_server = '1' AND allowed_as_index_server = '1' ORDER BY RAND()"); - if ($host && !$host->isMe()) { - $host->fetchRemoteSearch($text, $tag); + $hosts = OERHost::findBySQL("index_server = '1' AND allowed_as_index_server = '1' ORDER BY RAND()"); + foreach ($hosts as $host) { + if (!$host->isMe()) { + $host->fetchRemoteSearch($text, $tag); + } } StudipCacheFactory::getCache()->read($cache_name, "1", 60); } -- GitLab