]> git.mxchange.org Git - friendica.git/commitdiff
Issue 10545: Convert complex zmg BBCode elements
authorMichael <heluecht@pirati.ca>
Tue, 27 Jul 2021 21:44:02 +0000 (21:44 +0000)
committerMichael <heluecht@pirati.ca>
Tue, 27 Jul 2021 21:44:02 +0000 (21:44 +0000)
src/Content/Text/BBCode.php

index cf609832bdfdabf66393cf3782f22fd4af077ff6..200c951de32e841d7dc16495a34e8db30a61e567 100644 (file)
@@ -1067,6 +1067,43 @@ class BBCode
                return $return;
        }
 
+       /**
+        * Convert complex IMG and ZMG elements
+        *
+        * @param [type] $text
+        * @param integer $simplehtml
+        * @param integer $uriid
+        * @return string
+        */
+       private static function convertImages(string $text, int $simplehtml, int $uriid = 0):string
+       {
+               DI::profiler()->startRecording('rendering');
+               $return = preg_replace_callback(
+                       "/\[[zi]mg(.*?)\]([^\[\]]*)\[\/[zi]mg\]/ism",
+                       function ($match) use ($simplehtml, $uriid) {
+                               $attribute_string = $match[1];
+                               $attributes = [];
+                               foreach (['alt', 'width', 'height'] as $field) {
+                                       preg_match("/$field=(['\"])(.+?)\\1/ism", $attribute_string, $matches);
+                                       $attributes[$field] = html_entity_decode($matches[2] ?? '', ENT_QUOTES, 'UTF-8');
+                               }
+
+                               $img_str = '<img src="' . 
+                               self::proxyUrl($match[2], $simplehtml, $uriid) . '"';
+                               foreach ($attributes as $key => $value) {
+                                       if (!empty($value)) {
+                                               $img_str .= ' ' . $key . '="' . htmlspecialchars($value, ENT_COMPAT) . '"';
+                                       }
+                               }
+                               return $img_str . '>';
+                       },
+                       $text
+               );
+
+               DI::profiler()->stopRecording();
+               return $return;
+       }
+
        /**
         * Default [share] tag conversion callback
         *
@@ -1729,6 +1766,8 @@ class BBCode
 
                                $text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '<img src="$1" alt="' . DI::l10n()->t('Image/photo') . '" />', $text);
                                $text = preg_replace("/\[zmg\](.*?)\[\/zmg\]/ism", '<img src="$1" alt="' . DI::l10n()->t('Image/photo') . '" />', $text);
+       
+                               $text = self::convertImages($text, $simple_html, $uriid);
 
                                $text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism", '<br><img src="' .DI::baseUrl() . '/images/lock_icon.gif" alt="' . DI::l10n()->t('Encrypted content') . '" title="' . DI::l10n()->t('Encrypted content') . '" /><br>', $text);
                                $text = preg_replace("/\[crypt(.*?)\](.*?)\[\/crypt\]/ism", '<br><img src="' .DI::baseUrl() . '/images/lock_icon.gif" alt="' . DI::l10n()->t('Encrypted content') . '" title="' . '$1' . ' ' . DI::l10n()->t('Encrypted content') . '" /><br>', $text);