]> git.mxchange.org Git - friendica.git/commitdiff
New BBCode element "abstract" for network depending messages.
authorMichael Vogel <icarus@dabo.de>
Mon, 22 Feb 2016 22:20:59 +0000 (23:20 +0100)
committerMichael Vogel <icarus@dabo.de>
Mon, 22 Feb 2016 22:20:59 +0000 (23:20 +0100)
include/bbcode.php
include/dfrn.php
include/plaintext.php

index 6a44e19ec446e87bcef9b83f53cab95d4af85299..eb009477cf40834fc059dca1f1e160d88b5f193e 100644 (file)
@@ -851,6 +851,9 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal
 
        $a = get_app();
 
+       // Remove the abstract element. It is a non visible element.
+       $Text = remove_abstract($Text);
+
        // Hide all [noparse] contained bbtags by spacefying them
        // POSSIBLE BUG --> Will the 'preg' functions crash if there's an embedded image?
 
@@ -1300,4 +1303,43 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal
 
        return trim($Text);
 }
+
+/**
+ * @brief Removes the "abstract" element from the text
+ *
+ * @param string $text The text with BBCode
+ * @return string The same text - but without "abstract" element
+ */
+function remove_abstract($text) {
+       $text = preg_replace("/[\s|\n]*\[abstract\].*?\[\/abstract\][\s|\n]*/ism", '', $text);
+       $text = preg_replace("/[\s|\n]*\[abstract=.*?\].*?\[\/abstract][\s|\n]*/ism", '', $text);
+
+       return $text;
+}
+
+/**
+ * @brief Returns the value of the "abstract" element
+ *
+ * @param string $text The text that maybe contains the element
+ * @param string $addon The addon for which the abstract is meant for
+ * @return string The abstract
+ */
+function fetch_abstract($text, $addon = "") {
+       $abstract = "";
+       $abstracts = array();
+       $addon = strtolower($addon);
+
+       if (preg_match_all("/\[abstract=(.*?)\](.*?)\[\/abstract\]/ism",$text, $results, PREG_SET_ORDER))
+               foreach ($results AS $result)
+                       $abstracts[strtolower($result[1])] = $result[2];
+
+       if (isset($abstracts[$addon]))
+               $abstract = $abstracts[$addon];
+
+       if ($abstract == "")
+               if (preg_match("/\[abstract\](.*?)\[\/abstract\]/ism",$text, $result))
+                       $abstract = $result[1];
+
+       return $abstract;
+}
 ?>
index f7a05bdb63a34ecaeba03f502de0823a2b06e3b7..ad04a91295da29f4932024a9efee0c3f4bf4b549 100644 (file)
@@ -18,6 +18,7 @@ require_once("include/event.php");
 require_once("include/text.php");
 require_once("include/oembed.php");
 require_once("include/html2bbcode.php");
+require_once("include/bbcode.php");
 
 /**
  * @brief This class contain functions to create and send DFRN XML files
@@ -720,6 +721,9 @@ class dfrn {
                else
                        $body = $item['body'];
 
+               // Remove the abstract element. It is only locally important.
+               $body = remove_abstract($body);
+
                if ($type == 'html') {
                        $htmlbody = $body;
 
index 05431bee2d27d2b6ca601d9f0a93d02e873c9590..199abcbb313efb74804921cf546a7548be7a5c62 100644 (file)
@@ -132,7 +132,7 @@ function shortenmsg($msg, $limit, $twitter = false) {
        return($msg);
 }
 
-function plaintext($a, $b, $limit = 0, $includedlinks = false, $htmlmode = 2) {
+function plaintext($a, $b, $limit = 0, $includedlinks = false, $htmlmode = 2, $target_network = "") {
        require_once("include/bbcode.php");
        require_once("include/html2plain.php");
        require_once("include/network.php");
@@ -144,6 +144,9 @@ function plaintext($a, $b, $limit = 0, $includedlinks = false, $htmlmode = 2) {
        // Add an URL element if the text contains a raw link
        $body = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url]$2[/url]', $body);
 
+       // Remove the abstract
+       $body = remove_abstract($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($b["body"]);
@@ -154,6 +157,44 @@ function plaintext($a, $b, $limit = 0, $includedlinks = false, $htmlmode = 2) {
        elseif ($b["title"] != "")
                $post["text"] = trim($b["title"]);
 
+       $abstract = "";
+
+       // Fetch the abstract from the given target network
+       if ($target_network != "") {
+               $default_abstract = fetch_abstract($b["body"]);
+               $abstract = fetch_abstract($b["body"], $target_network);
+
+               // If we post to a network with no limit we only fetch
+               // an abstract exactly for this network
+               if (($limit == 0) AND ($abstract == $default_abstract))
+                       $abstract = "";
+
+       } else // Try to guess the correct target network
+               switch ($htmlmode) {
+                       case 8:
+                               $abstract = fetch_abstract($b["body"], NETWORK_TWITTER);
+                               break;
+                       case 7:
+                               $abstract = fetch_abstract($b["body"], NETWORK_STATUSNET);
+                               break;
+                       case 6:
+                               $abstract = fetch_abstract($b["body"], NETWORK_APPNET);
+                               break;
+                       default: // We don't know the exact target.
+                                // We fetch an abstract since there is a posting limit.
+                               if ($limit > 0)
+                                       $abstract = fetch_abstract($b["body"]);
+               }
+
+       if ($abstract != "") {
+               $post["text"] = $abstract;
+
+               if ($post["type"] == "text") {
+                       $post["type"] = "link";
+                       $post["url"] = $b["plink"];
+               }
+       }
+
        $html = bbcode($post["text"], false, false, $htmlmode);
        $msg = html2plain($html, 0, true);
        $msg = trim(html_entity_decode($msg,ENT_QUOTES,'UTF-8'));