}
}
-function bb_translate_video($s) {
-
- $matches = null;
- $r = preg_match_all("/\[video\](.*?)\[\/video\]/ism",$s,$matches,PREG_SET_ORDER);
- if ($r) {
- foreach ($matches as $mtch) {
- if ((stristr($mtch[1], 'youtube')) || (stristr($mtch[1], 'youtu.be'))) {
- $s = str_replace($mtch[0], '[youtube]' . $mtch[1] . '[/youtube]', $s);
- } elseif (stristr($mtch[1], 'vimeo')) {
- $s = str_replace($mtch[0], '[vimeo]' . $mtch[1] . '[/vimeo]', $s);
- }
- }
- }
- return $s;
-}
-
/// @TODO Rewrite this
function is_a_date_arg($s) {
$i = intval($s);
use Friendica\Core\L10n;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
-use Friendica\Core\System;
use Friendica\Core\Session;
+use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\Model\Attach;
$objecttype = ACTIVITY_OBJ_BOOKMARK;
}
- $body = bb_translate_video($body);
-
+ /** @var BBCode\Video $bbCodeVideo */
+ $bbCodeVideo = \Friendica\BaseObject::getClass(BBCode\Video::class);
+ $body = $bbCodeVideo->transform($body);
// Fold multi-line [code] sequences
$body = preg_replace('/\[\/code\]\s*\[code\]/ism', "\n", $body);
*
* @throws InternalServerErrorException
*/
- protected static function getClass(string $name)
+ public static function getClass(string $name)
{
if (empty(self::$dice)) {
throw new InternalServerErrorException('DICE isn\'t initialized.');
--- /dev/null
+<?php
+
+namespace Friendica\Content\Text\BBCode;
+
+/**
+ * Video specific BBCode util class
+ */
+final class Video
+{
+ /**
+ * Transforms video BBCode tagged links to youtube/vimeo tagged links
+ *
+ * @param string $bbCodeString The input BBCode styled string
+ *
+ * @return string The transformed text
+ */
+ public function transform(string $bbCodeString)
+ {
+ $matches = null;
+ $found = preg_match_all("/\[video\](.*?)\[\/video\]/ism",$bbCodeString,$matches,PREG_SET_ORDER);
+ if ($found) {
+ foreach ($matches as $match) {
+ if ((stristr($match[1], 'youtube')) || (stristr($match[1], 'youtu.be'))) {
+ $bbCodeString = str_replace($match[0], '[youtube]' . $match[1] . '[/youtube]', $bbCodeString);
+ } elseif (stristr($match[1], 'vimeo')) {
+ $bbCodeString = str_replace($match[0], '[vimeo]' . $match[1] . '[/vimeo]', $bbCodeString);
+ }
+ }
+ }
+ return $bbCodeString;
+ }
+}
--- /dev/null
+<?php
+
+namespace src\Content\Text\BBCode;
+
+use Friendica\Content\Text\BBCode\Video;
+use Friendica\Test\MockedTest;
+
+class VideoTest extends MockedTest
+{
+ public function dataVideo()
+ {
+ return [
+ 'youtube' => [
+ 'input' => '[video]https://youtube.link/4523[/video]',
+ 'assert' => '[youtube]https://youtube.link/4523[/youtube]',
+ ],
+ 'youtu.be' => [
+ 'input' => '[video]https://youtu.be.link/4523[/video]',
+ 'assert' => '[youtube]https://youtu.be.link/4523[/youtube]',
+ ],
+ 'vimeo' => [
+ 'input' => '[video]https://vimeo.link/2343[/video]',
+ 'assert' => '[vimeo]https://vimeo.link/2343[/vimeo]',
+ ],
+ 'mixed' => [
+ 'input' => '[video]https://vimeo.link/2343[/video] With other [b]string[/b] [video]https://youtu.be/blaa[/video]',
+ 'assert' => '[vimeo]https://vimeo.link/2343[/vimeo] With other [b]string[/b] [youtube]https://youtu.be/blaa[/youtube]',
+ ]
+ ];
+ }
+
+ /**
+ * Test if the BBCode is successfully transformed for video links
+ *
+ * @dataProvider dataVideo
+ */
+ public function testTransform(string $input, string $assert)
+ {
+ $bbCodeVideo = new Video();
+
+ $this->assertEquals($assert, $bbCodeVideo->transform($input));
+ }
+}