Move bb_translate_video

- To new Class BBCode\Video
- Adding tests
- Make BaseObject::getClass() public
This commit is contained in:
Philipp Holzer 2019-10-23 00:14:47 +02:00
parent 7f49c73730
commit 2870f42ca2
No known key found for this signature in database
GPG key ID: D8365C3D36B77D90
5 changed files with 80 additions and 20 deletions

View file

@ -223,22 +223,6 @@ function return_bytes($size_str) {
} }
} }
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 /// @TODO Rewrite this
function is_a_date_arg($s) { function is_a_date_arg($s) {
$i = intval($s); $i = intval($s);

View file

@ -24,8 +24,8 @@ use Friendica\Core\Hook;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\System;
use Friendica\Core\Session; use Friendica\Core\Session;
use Friendica\Core\System;
use Friendica\Core\Worker; use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\Model\Attach; use Friendica\Model\Attach;
@ -499,8 +499,9 @@ function item_post(App $a) {
$objecttype = ACTIVITY_OBJ_BOOKMARK; $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 // Fold multi-line [code] sequences
$body = preg_replace('/\[\/code\]\s*\[code\]/ism', "\n", $body); $body = preg_replace('/\[\/code\]\s*\[code\]/ism', "\n", $body);

View file

@ -54,7 +54,7 @@ class BaseObject
* *
* @throws InternalServerErrorException * @throws InternalServerErrorException
*/ */
protected static function getClass(string $name) public static function getClass(string $name)
{ {
if (empty(self::$dice)) { if (empty(self::$dice)) {
throw new InternalServerErrorException('DICE isn\'t initialized.'); throw new InternalServerErrorException('DICE isn\'t initialized.');

View file

@ -0,0 +1,32 @@
<?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;
}
}

View file

@ -0,0 +1,43 @@
<?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));
}
}