From c41b1c2d55c2359d444159bdff903f291cf94ed2 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 3 May 2014 12:04:54 +0200 Subject: [PATCH] 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. --- include/bbcode.php | 6 +- include/html2plain.php | 2 +- include/plaintext.php | 161 +++++++++++++++++++++++++++++++++++++++++ mod/parse_url.php | 4 +- 4 files changed, 170 insertions(+), 3 deletions(-) create mode 100644 include/plaintext.php diff --git a/include/bbcode.php b/include/bbcode.php index d1cb1a9110..2678344037 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -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; } +?> diff --git a/include/html2plain.php b/include/html2plain.php index 54cc44794d..0398ea79b0 100644 --- a/include/html2plain.php +++ b/include/html2plain.php @@ -239,4 +239,4 @@ function html2plain($html, $wraplength = 75, $compact = false) return(trim($message)); } - +?> diff --git a/include/plaintext.php b/include/plaintext.php new file mode 100644 index 0000000000..caba68d8af --- /dev/null +++ b/include/plaintext.php @@ -0,0 +1,161 @@ + 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); +} +?> diff --git a/mod/parse_url.php b/mod/parse_url.php index a0608f6363..135a4ccc6f 100644 --- a/mod/parse_url.php +++ b/mod/parse_url.php @@ -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(); } +?>