mirror of
https://github.com/friendica/friendica
synced 2024-12-23 04:00:15 +00:00
Building a central functionality to export postings to all networks that only support plaintext postings. In near future this will replace the similar code in the several addons.
This commit is contained in:
parent
2db1029830
commit
c41b1c2d55
4 changed files with 170 additions and 3 deletions
|
@ -31,7 +31,10 @@ function bb_rearrange_link($shared) {
|
|||
return($newshare);
|
||||
}
|
||||
|
||||
function bb_remove_share_information($Text) {
|
||||
function bb_remove_share_information($Text, $plaintext = false) {
|
||||
if ($plaintext)
|
||||
$Text = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism","[bookmark=$1]$1[/bookmark]", $Text);
|
||||
|
||||
$Text = preg_replace_callback("((.*?)\[class=(.*?)\](.*?)\[\/class\])ism","bb_cleanup_share",$Text);
|
||||
return($Text);
|
||||
}
|
||||
|
@ -1070,3 +1073,4 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal
|
|||
|
||||
return $Text;
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -239,4 +239,4 @@ function html2plain($html, $wraplength = 75, $compact = false)
|
|||
|
||||
return(trim($message));
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
161
include/plaintext.php
Normal file
161
include/plaintext.php
Normal file
|
@ -0,0 +1,161 @@
|
|||
<?php
|
||||
function get_attached_data($body) {
|
||||
/*
|
||||
- text:
|
||||
- type: link, video, photo
|
||||
- title:
|
||||
- url:
|
||||
- image:
|
||||
- description:
|
||||
- (thumbnail)
|
||||
*/
|
||||
$post = array();
|
||||
|
||||
if (preg_match_all("(\[class=(.*?)\](.*?)\[\/class\])ism",$body, $attached, PREG_SET_ORDER)) {
|
||||
foreach ($attached AS $data) {
|
||||
if (!in_array($data[1], array("type-link", "type-video", "type-photo")))
|
||||
continue;
|
||||
|
||||
$post["type"] = substr($data[1], 5);
|
||||
|
||||
$post["text"] = trim(str_replace($data[0], "", $body));
|
||||
|
||||
$attacheddata = $data[2];
|
||||
|
||||
if (preg_match("/\[img\](.*?)\[\/img\]/ism", $attacheddata, $matches))
|
||||
$post["image"] = $matches[1];
|
||||
|
||||
if (preg_match("/\[bookmark\=(.*?)\](.*?)\[\/bookmark\]/ism", $attacheddata, $matches)) {
|
||||
$post["url"] = $matches[1];
|
||||
$post["title"] = $matches[2];
|
||||
}
|
||||
|
||||
// Search for description
|
||||
if (preg_match("/\[quote\](.*?)\[\/quote\]/ism", $attacheddata, $matches))
|
||||
$post["description"] = $matches[1];
|
||||
|
||||
}
|
||||
}
|
||||
return($post);
|
||||
}
|
||||
|
||||
function plaintext($a, $b, $limit = 0, $includedlinks = false) {
|
||||
require_once("include/bbcode.php");
|
||||
require_once("include/html2plain.php");
|
||||
require_once("mod/parse_url.php");
|
||||
require_once("include/network.php");
|
||||
|
||||
// Simplify image codes
|
||||
$body = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $b["body"]);
|
||||
|
||||
// At first look at data that is attached via "type-..." stuff
|
||||
// This will hopefully replaced with a dedicated bbcode later
|
||||
$post = get_attached_data($body);
|
||||
|
||||
// if nothing is found, it maybe having an image.
|
||||
if (!isset($post["type"])) {
|
||||
if (preg_match_all("(\[url=(.*?)\]\s*\[img\](.*?)\[\/img\]\s*\[\/url\])ism", $body, $pictures, PREG_SET_ORDER)) {
|
||||
if (count($pictures) == 1) {
|
||||
// Checking, if the link goes to a picture
|
||||
$data = parseurl_getsiteinfo($pictures[0][1], true);
|
||||
if ($data["type"] == "photo") {
|
||||
$post["type"] = "photo";
|
||||
if (isset($data["images"][0]))
|
||||
$post["image"] = $data["images"][0]["src"];
|
||||
else
|
||||
$post["image"] = $data["url"];
|
||||
|
||||
$post["preview"] = $pictures[0][2];
|
||||
$post["text"] = str_replace($pictures[0][0], "", $body);
|
||||
}
|
||||
} elseif (count($pictures) > 1) {
|
||||
$post["type"] = "link";
|
||||
$post["url"] = $b["plink"];
|
||||
$post["image"] = $pictures[0][2];
|
||||
$post["text"] = $body;
|
||||
}
|
||||
} elseif (preg_match_all("(\[img\](.*?)\[\/img\])ism", $body, $pictures, PREG_SET_ORDER)) {
|
||||
if (count($pictures) == 1) {
|
||||
$post["type"] = "photo";
|
||||
$post["image"] = $pictures[0][1];
|
||||
$post["text"] = str_replace($pictures[0][0], "", $body);
|
||||
} elseif (count($pictures) > 1) {
|
||||
$post["type"] = "link";
|
||||
$post["url"] = $b["plink"];
|
||||
$post["image"] = $pictures[0][1];
|
||||
$post["text"] = $body;
|
||||
}
|
||||
} else {
|
||||
$post["type"] = "text";
|
||||
$post["text"] = trim($body);
|
||||
}
|
||||
}
|
||||
|
||||
if (($b["title"] != "") AND ($post["text"] != ""))
|
||||
$post["text"] = trim($b["title"]."\n\n".$post["text"]);
|
||||
elseif ($b["title"] != "")
|
||||
$post["text"] = trim($b["title"]);
|
||||
|
||||
$html = bbcode($post["text"], false, false, 2);
|
||||
$msg = html2plain($html, 0, true);
|
||||
$msg = trim(html_entity_decode($msg,ENT_QUOTES,'UTF-8'));
|
||||
|
||||
$link = "";
|
||||
if ($includedlinks) {
|
||||
if ($post["type"] == "link")
|
||||
$link = $post["url"];
|
||||
elseif ($post["type"] == "video")
|
||||
$link = $post["url"];
|
||||
elseif ($post["type"] == "photo")
|
||||
$link = $post["image"];
|
||||
|
||||
if (($msg == "") AND isset($post["title"]))
|
||||
$msg = trim($post["title"]);
|
||||
|
||||
if (($msg == "") AND isset($post["description"]))
|
||||
$msg = trim($post["description"]);
|
||||
|
||||
// If the link is already contained in the post, then it neeedn't to be added again
|
||||
// But: if the link is beyond the limit, then it has to be added.
|
||||
if (($link != "") AND strstr($msg, $link)) {
|
||||
$pos = strpos($msg, $link);
|
||||
if (($limit == 0) OR ($pos < $limit))
|
||||
$link = "";
|
||||
}
|
||||
}
|
||||
|
||||
if ($limit > 0) {
|
||||
// Reduce multiple spaces
|
||||
// When posted to a network with limited space, we try to gain space where possible
|
||||
while (strpos($msg, " ") !== false)
|
||||
$msg = str_replace(" ", " ", $msg);
|
||||
|
||||
// Twitter is using its own limiter, so we always assume that shortened links will have this length
|
||||
if (strlen($link) > 0)
|
||||
$limit = $limit - 23;
|
||||
|
||||
if (strlen($msg) > $limit) {
|
||||
|
||||
if (!isset($post["url"])) {
|
||||
$limit = $limit - 23;
|
||||
$post["url"] = $b["plink"];
|
||||
}
|
||||
|
||||
$lines = explode("\n", $msg);
|
||||
$msg = "";
|
||||
$recycle = html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8');
|
||||
foreach ($lines AS $row=>$line) {
|
||||
if (strlen(trim($msg."\n".$line)) <= $limit)
|
||||
$msg = trim($msg."\n".$line);
|
||||
// Is the new message empty by now or is it a reshared message?
|
||||
elseif (($msg == "") OR (($row == 1) AND (substr($msg, 0, 4) == $recycle)))
|
||||
$msg = substr(substr(trim($msg."\n".$line), 0, $limit), 0, -3)."...";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$post["text"] = trim($msg);
|
||||
|
||||
return($post);
|
||||
}
|
||||
?>
|
|
@ -51,6 +51,7 @@ function completeurl($url, $scheme) {
|
|||
}
|
||||
|
||||
function parseurl_getsiteinfo($url, $no_guessing = false) {
|
||||
|
||||
$siteinfo = array();
|
||||
|
||||
$url = trim($url, "'");
|
||||
|
@ -172,7 +173,7 @@ function parseurl_getsiteinfo($url, $no_guessing = false) {
|
|||
$siteinfo["image"] = $attr["content"];
|
||||
break;
|
||||
case "twitter:card":
|
||||
if ($siteinfo["type"] == "")
|
||||
if (($siteinfo["type"] == "") OR ($attr["content"] == "photo"))
|
||||
$siteinfo["type"] = $attr["content"];
|
||||
break;
|
||||
case "twitter:description":
|
||||
|
@ -440,3 +441,4 @@ function parse_url_content(&$a) {
|
|||
|
||||
killme();
|
||||
}
|
||||
?>
|
||||
|
|
Loading…
Reference in a new issue