mirror of
https://github.com/friendica/friendica
synced 2024-11-18 01:43:41 +00:00
Move bb_translate_video
- To new Class BBCode\Video - Adding tests - Make BaseObject::getClass() public
This commit is contained in:
parent
7f49c73730
commit
2870f42ca2
5 changed files with 80 additions and 20 deletions
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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.');
|
||||||
|
|
32
src/Content/Text/BBCode/Video.php
Normal file
32
src/Content/Text/BBCode/Video.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
43
tests/src/Content/Text/BBCode/VideoTest.php
Normal file
43
tests/src/Content/Text/BBCode/VideoTest.php
Normal 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));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue