Merge pull request #12893 from annando/remove-media
Improved handling of images with links
This commit is contained in:
commit
92c56f9cd0
1 changed files with 35 additions and 9 deletions
|
@ -461,19 +461,33 @@ class Media
|
||||||
* @param string $preview Preview picture
|
* @param string $preview Preview picture
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
private static function isPictureLink(string $page, string $preview): bool
|
private static function isLinkToPhoto(string $page, string $preview): bool
|
||||||
{
|
{
|
||||||
return (preg_match('#/photo/.*-0\.#ism', $page) || preg_match('#/photos/.*/image/#ism', $page)) && preg_match('#/photo/.*-[01]\.#ism', $preview);
|
return preg_match('#/photo/.*-0\.#ism', $page) && preg_match('#/photo/.*-[01]\.#ism', $preview);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for path patterns that are usef for picture links in Friendica
|
||||||
|
*
|
||||||
|
* @param string $page Link to the image page
|
||||||
|
* @param string $preview Preview picture
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
private static function isLinkToImagePage(string $page, string $preview): bool
|
||||||
|
{
|
||||||
|
return preg_match('#/photos/.*/image/#ism', $page) && preg_match('#/photo/.*-[01]\.#ism', $preview);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add media links and remove them from the body
|
* Add media links and remove them from the body
|
||||||
*
|
*
|
||||||
* @param integer $uriid
|
* @param integer $uriid
|
||||||
* @param string $body
|
* @param string $body
|
||||||
|
* @param bool $endmatch
|
||||||
|
* @param bool $removepicturelinks
|
||||||
* @return string Body without media links
|
* @return string Body without media links
|
||||||
*/
|
*/
|
||||||
public static function insertFromBody(int $uriid, string $body, bool $endmatch = false): string
|
public static function insertFromBody(int $uriid, string $body, bool $endmatch = false, bool $removepicturelinks = false): string
|
||||||
{
|
{
|
||||||
$endmatchpattern = $endmatch ? '\z' : '';
|
$endmatchpattern = $endmatch ? '\z' : '';
|
||||||
// Simplify image codes
|
// Simplify image codes
|
||||||
|
@ -482,14 +496,20 @@ class Media
|
||||||
$attachments = [];
|
$attachments = [];
|
||||||
if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img=([^\[\]]*)\]([^\[\]]*)\[\/img\]\s*\[/url\]$endmatchpattern#ism", $body, $pictures, PREG_SET_ORDER)) {
|
if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img=([^\[\]]*)\]([^\[\]]*)\[\/img\]\s*\[/url\]$endmatchpattern#ism", $body, $pictures, PREG_SET_ORDER)) {
|
||||||
foreach ($pictures as $picture) {
|
foreach ($pictures as $picture) {
|
||||||
if (self::isPictureLink($picture[1], $picture[2])) {
|
if (self::isLinkToImagePage($picture[1], $picture[2])) {
|
||||||
$body = str_replace($picture[0], '', $body);
|
$body = str_replace($picture[0], '', $body);
|
||||||
$image = str_replace('-1.', '-0.', $picture[2]);
|
$image = str_replace('-1.', '-0.', $picture[2]);
|
||||||
$attachments[$image] = [
|
$attachments[$image] = [
|
||||||
'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $image,
|
'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $image,
|
||||||
'preview' => $picture[2], 'description' => $picture[3]
|
'preview' => $picture[2], 'description' => $picture[3]
|
||||||
];
|
];
|
||||||
} else {
|
} elseif (self::isLinkToPhoto($picture[1], $picture[2])) {
|
||||||
|
$body = str_replace($picture[0], '', $body);
|
||||||
|
$attachments[$picture[1]] = [
|
||||||
|
'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $picture[1],
|
||||||
|
'preview' => $picture[2], 'description' => $picture[3]
|
||||||
|
];
|
||||||
|
} elseif ($removepicturelinks) {
|
||||||
$body = str_replace($picture[0], '', $body);
|
$body = str_replace($picture[0], '', $body);
|
||||||
$attachments[$picture[1]] = [
|
$attachments[$picture[1]] = [
|
||||||
'uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $picture[1],
|
'uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $picture[1],
|
||||||
|
@ -508,14 +528,20 @@ class Media
|
||||||
|
|
||||||
if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img\]([^\[]+?)\[/img\]\s*\[/url\]$endmatchpattern#ism", $body, $pictures, PREG_SET_ORDER)) {
|
if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img\]([^\[]+?)\[/img\]\s*\[/url\]$endmatchpattern#ism", $body, $pictures, PREG_SET_ORDER)) {
|
||||||
foreach ($pictures as $picture) {
|
foreach ($pictures as $picture) {
|
||||||
if (self::isPictureLink($picture[1], $picture[2])) {
|
if (self::isLinkToImagePage($picture[1], $picture[2])) {
|
||||||
$body = str_replace($picture[0], '', $body);
|
$body = str_replace($picture[0], '', $body);
|
||||||
$image = str_replace('-1.', '-0.', $picture[2]);
|
$image = str_replace('-1.', '-0.', $picture[2]);
|
||||||
$attachments[$image] = [
|
$attachments[$image] = [
|
||||||
'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $image,
|
'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $image,
|
||||||
'preview' => $picture[2], 'description' => null
|
'preview' => $picture[2], 'description' => null
|
||||||
];
|
];
|
||||||
} else {
|
} elseif (self::isLinkToPhoto($picture[1], $picture[2])) {
|
||||||
|
$body = str_replace($picture[0], '', $body);
|
||||||
|
$attachments[$picture[1]] = [
|
||||||
|
'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $picture[1],
|
||||||
|
'preview' => $picture[2], 'description' => null
|
||||||
|
];
|
||||||
|
} elseif ($removepicturelinks) {
|
||||||
$body = str_replace($picture[0], '', $body);
|
$body = str_replace($picture[0], '', $body);
|
||||||
$attachments[$picture[1]] = [
|
$attachments[$picture[1]] = [
|
||||||
'uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $picture[1],
|
'uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $picture[1],
|
||||||
|
@ -587,7 +613,7 @@ class Media
|
||||||
{
|
{
|
||||||
do {
|
do {
|
||||||
$prebody = $body;
|
$prebody = $body;
|
||||||
$body = self::insertFromBody(0, $body);
|
$body = self::insertFromBody(0, $body, false, true);
|
||||||
} while ($prebody != $body);
|
} while ($prebody != $body);
|
||||||
return $body;
|
return $body;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue