From 3271f73e6ab7ef85519eb88d58ed914b655cd909 Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Tue, 23 Jul 2024 05:38:23 +0000
Subject: [PATCH] Fix PHP 8 Warning Issues

Closes #4395 and #4408

Merge request studip/studip!3215
---
 lib/filesystem/FileManager.php             | 10 +++----
 lib/models/Courseware/BlockTypes/Embed.php | 32 +++++++++++++---------
 2 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/lib/filesystem/FileManager.php b/lib/filesystem/FileManager.php
index 13527a9004b..aafbece0aaa 100644
--- a/lib/filesystem/FileManager.php
+++ b/lib/filesystem/FileManager.php
@@ -1484,7 +1484,7 @@ class FileManager
 
         $url_parts = @parse_url($url);
         // filter out localhost and reserved or private IPs
-        if (mb_stripos($url_parts['host'], 'localhost') !== false
+        if (array_key_exists('host', $url_parts) && (mb_stripos($url_parts['host'], 'localhost') !== false
             || mb_stripos($url_parts['host'], 'loopback') !== false
             || (filter_var($url_parts['host'], FILTER_VALIDATE_IP) !== false
                 && (mb_strpos($url_parts['host'], '127') === 0
@@ -1495,13 +1495,13 @@ class FileManager
                         | FILTER_FLAG_NO_PRIV_RANGE
                         | FILTER_FLAG_NO_RES_RANGE
                     ) === false)
-               )
+            ))
         ) {
             return ['response' => 'HTTP/1.0 400 Bad Request', 'response_code' => 400];
         }
 
         // URL links to an ftp server
-        if ($url_parts['scheme'] === 'ftp') {
+        if (array_key_exists('scheme', $url_parts) && $url_parts['scheme'] === 'ftp') {
             if (preg_match('/[^a-z0-9_.-]/i', $url_parts['host'])) { // exists umlauts ?
                 $IDN = new Algo26\IdnaConvert\ToIdn();
                 $out = $IDN->convert($url_parts['host']); // false by error
@@ -1545,9 +1545,9 @@ class FileManager
         if (!empty($url_parts['query'])) {
             $documentpath .= '?' . $url_parts['query'];
         }
-        $host = $url_parts['host'];
+        $host = $url_parts['host'] ?? null;
         $port = $url_parts['port'] ?? null;
-        $scheme = mb_strtolower($url_parts['scheme']);
+        $scheme = array_key_exists('scheme',$url_parts) ? mb_strtolower($url_parts['scheme']) : null;
         if (!in_array($scheme, ['http', 'https']) || !$host) {
             return ['response' => 'HTTP/1.0 400 Bad Request', 'response_code' => 400];
         }
diff --git a/lib/models/Courseware/BlockTypes/Embed.php b/lib/models/Courseware/BlockTypes/Embed.php
index 1b366241225..69e0fe900ca 100644
--- a/lib/models/Courseware/BlockTypes/Embed.php
+++ b/lib/models/Courseware/BlockTypes/Embed.php
@@ -49,20 +49,26 @@ class Embed extends BlockType
         $payload = $this->decodePayloadString($this->block['payload']);
 
         $oembedRequest = $this->buildOembedRequest($payload['source'], $payload['url']);
-        $payload['oembed_request'] = $oembedRequest;
+
+        $payload['oembed-request'] = $oembedRequest;
         $payload['oembed-unauthorized'] = false;
-        $payload['oembed-not-found'] = false;
-        $payload['oembed'] = '';
-        $payload['request'] = '';
-        $request = \FileManager::fetchURLMetadata($oembedRequest);
-        if ($request['response_code'] === 200) {
-            $payload['request'] = file_get_contents($oembedRequest, false, get_default_http_stream_context($oembedRequest));
-            $payload['oembed'] = json_decode($payload['request']);
-        } elseif ($request['response_code'] === 401) {
-            $payload['oembed_unauthorized'] = true;
-        } else {
-            $payload['oembed_not_found'] = true;
+        $payload['oembed-not-found'] = true;
+        $payload['oembed'] = null;
+        $payload['request'] = null;
+
+        if ($oembedRequest) {
+            $request = \FileManager::fetchURLMetadata($oembedRequest);
+            if ($request['response_code'] === 200) {
+                $payload['request'] = file_get_contents($oembedRequest, false, get_default_http_stream_context($oembedRequest));
+                $payload['oembed'] = json_decode($payload['request']);
+                $payload['oembed-not-found'] = false;
+            }
+            if ($request['response_code'] === 401) {
+                $payload['oembed-unauthorized'] = true;
+                $payload['oembed-not-found'] = false;
+            }
         }
+
         return $payload;
     }
 
@@ -89,7 +95,7 @@ class Embed extends BlockType
             'youtube' => 'https://www.youtube.com/oembed',
         ];
 
-        return $endPoints[$source].'?url='.rawurlencode($url).'&format=json';
+        return  array_key_exists($source, $endPoints) ? $endPoints[$source].'?url='.rawurlencode($url).'&format=json' : null;
     }
 
     public static function getCategories(): array
-- 
GitLab