diff --git a/app/controllers/oer/market.php b/app/controllers/oer/market.php index 9e15406bd578c33abd8a02b237d3d4bdcffb6fef..d1138fbd13e31605eb6ef5c6ddf9924dd98ec9ba 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 19f2bb23338179b54e45245c00a612bfbf39343c..6db0747c6ca23b19943e27c2f0436c9d15fa18ae 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 3bb5d9f70293a36a41364e9be1c496aa6fc5b799..5e6b9dcf519296f62db9db39290a6b7d83e9eb94 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 911aaa2de1a583d038a6c3d18faab7555ac1b350..ea36035d78ea3a45797814566c3dd0fdae204be1 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); }