aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRasmus Fuhse <fuhse@data-quest.de>2023-04-20 10:31:47 +0000
committerDavid Siegfried <david.siegfried@uni-vechta.de>2023-04-20 10:31:47 +0000
commitd9f6695cd6b12fdc2c2a2748811a414ae09cc57e (patch)
tree78e530d3b31518bd15d159ff74476694177bd46d /lib
parent3e839c5db6bbc1d1d55ac4b8850af56bd977c8a8 (diff)
Resolve "OERSI: Verbindungen werden nicht debugged"
Closes #2513 Merge request studip/studip!1702
Diffstat (limited to 'lib')
-rw-r--r--lib/models/OERHostOERSI.php104
1 files changed, 61 insertions, 43 deletions
diff --git a/lib/models/OERHostOERSI.php b/lib/models/OERHostOERSI.php
index a6b03f6..595c220 100644
--- a/lib/models/OERHostOERSI.php
+++ b/lib/models/OERHostOERSI.php
@@ -17,54 +17,72 @@ class OERHostOERSI extends OERHost
} else {
$endpoint_url .= '?q=' . urlencode($text . $appendix);
}
- $output = @file_get_contents($endpoint_url, false, get_default_http_stream_context($endpoint_url));
+ $cr = curl_init();
+ curl_setopt($cr, CURLOPT_URL, $endpoint_url);
+ curl_setopt($cr, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($cr, CURLOPT_FOLLOWLOCATION, true);
+ curl_setopt($cr, CURLOPT_SSL_VERIFYPEER, false);
+ curl_setopt($cr, CURLOPT_SSL_VERIFYHOST, false);
+ $stream_context_options = stream_context_get_options(get_default_http_stream_context($endpoint_url));
+ curl_setopt($cr, CURLOPT_PROXY, isset($stream_context_options['http']['proxy']) ? Config::get()->HTTP_PROXY : '');
+ $output = curl_exec($cr);
+ $error = curl_error($cr);
+ if ($error) {
+ $error_number = curl_getinfo($cr, CURLINFO_HTTP_CODE);
+ error_log('OERSI search is not working. '.$error_number.': '.$error);
+ }
+ curl_close($cr);
if ($output) {
- $output = json_decode($output, true);
- foreach ((array) $output['hits']['hits'] as $material_data) {
- //check if material already in database from this or another OER Campus host
- if (OERHost::URIExists($material_data['_source']['id'])) {
- continue;
- }
+ $json = json_decode($output, true);
+ if ($json !== null) {
+ foreach ((array)$json['hits']['hits'] as $material_data) {
+ //check if material already in database from this or another OER Campus host
+ if (OERHost::URIExists($material_data['_source']['id'])) {
+ continue;
+ }
- $material = OERMaterial::findOneBySQL('foreign_material_id = ? AND host_id = ?', [
- md5($material_data['_source']['id']),
- $this->getId()
- ]);
- if (!$material) {
- $material = new OERMaterial();
- $material['foreign_material_id'] = md5($material_data['_source']['id']);
- $material['host_id'] = $this->getId();
- }
- $material['name'] = mb_substr($material_data['_source']['name'], 0, 64);
- $material['draft'] = '0';
- $material['filename'] = '';
- $material['short_description'] = '';
- $material['description'] = $material_data['_source']['description'] ?: '';
- $material['difficulty_start'] = 0;
- $material['difficulty_start'] = 12;
- $material['uri'] = $material_data['_source']['id'];
- $material['source_url'] = $material_data['_source']['id'];
- $material['content_type'] = $material_data['_source']['encoding'][0]['encodingFormat'] ?: '';
- $material['license_identifier'] = $this->getLicenseID($material_data['_source']['license']['id']) ?: '';
- if (!$material['category']) {
- $material['category'] = $material->autoDetectCategory();
- }
- $material['front_image_content_type'] = $material_data['_source']['image'] ? 'image/jpg' : null;
- $material['data'] = [
- '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();
+ $material = OERMaterial::findOneBySQL('foreign_material_id = ? AND host_id = ?', [
+ md5($material_data['_source']['id']),
+ $this->getId()
+ ]);
+ if (!$material) {
+ $material = new OERMaterial();
+ $material['foreign_material_id'] = md5($material_data['_source']['id']);
+ $material['host_id'] = $this->getId();
+ }
+ $material['name'] = mb_substr($material_data['_source']['name'], 0, 64);
+ $material['draft'] = '0';
+ $material['filename'] = '';
+ $material['short_description'] = '';
+ $material['description'] = $material_data['_source']['description'] ?: '';
+ $material['difficulty_start'] = 0;
+ $material['difficulty_end'] = 12;
+ $material['uri'] = $material_data['_source']['id'];
+ $material['source_url'] = $material_data['_source']['id'];
+ $material['content_type'] = $material_data['_source']['encoding'][0]['encodingFormat'] ?: '';
+ $material['license_identifier'] = $this->getLicenseID($material_data['_source']['license']['id']) ?: '';
+ if (!$material['category']) {
+ $material['category'] = $material->autoDetectCategory();
+ }
+ $material['front_image_content_type'] = $material_data['_source']['image'] ? 'image/jpg' : null;
+ $material['data'] = [
+ '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 topics:
+ //$material->setUsers([]);
- //set topics:
- $material->setTopics($material_data['_source']['keywords']);
+ //set topics:
+ $material->setTopics($material_data['_source']['keywords']);
+ }
+ } else {
+ error_log('OERSI returns bad JSON data: '.$output);
}
}
}