]> git.mxchange.org Git - friendica.git/commitdiff
Automatically add a Diaspora mention
authorMichael <heluecht@pirati.ca>
Sun, 1 Jan 2017 23:18:42 +0000 (23:18 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 1 Jan 2017 23:18:42 +0000 (23:18 +0000)
include/bb2diaspora.php
mod/item.php

index 842dbf0b1cf4595212a5c363f790867a0689cd7c..53e9ebfd04451a958bf6b226787e5ce0e7b5d2aa 100644 (file)
@@ -69,6 +69,28 @@ function diaspora2bb($s) {
        return $s;
 }
 
+/**
+ * @brief Callback function to replace a Friendica style mention in a mention for Diaspora
+ *
+ * @param array $match Matching values for the callback
+ * @return text Replaced mention
+ */
+function diaspora_mentions($match) {
+
+       $contact = get_contact_details_by_url($match[3]);
+
+       if (!isset($contact['addr'])) {
+               $contact = Probe::uri($match[3]);
+       }
+
+       if (!isset($contact['addr'])) {
+               return $match[0];
+       }
+
+       $mention = '@{'.$match[2].'; '.$contact['addr'].'}';
+       return $mention;
+}
+
 function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) {
 
        $a = get_app();
@@ -108,8 +130,8 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) {
        } else
                $Text = bbcode($Text, $preserve_nl, false, 4);
 
-    // mask some special HTML chars from conversation to markdown
-    $Text = str_replace(array('&lt;','&gt;','&amp;'),array('&_lt_;','&_gt_;','&_amp_;'),$Text);
+       // mask some special HTML chars from conversation to markdown
+       $Text = str_replace(array('&lt;','&gt;','&amp;'),array('&_lt_;','&_gt_;','&_amp_;'),$Text);
 
        // If a link is followed by a quote then there should be a newline before it
        // Maybe we should make this newline at every time before a quote.
@@ -120,8 +142,8 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) {
        // Now convert HTML to Markdown
        $Text = new HTML_To_Markdown($Text);
 
-    // unmask the special chars back to HTML
-    $Text = str_replace(array('&_lt_;','&_gt_;','&_amp_;'),array('&lt;','&gt;','&amp;'),$Text);
+       // unmask the special chars back to HTML
+       $Text = str_replace(array('&_lt_;','&_gt_;','&_amp_;'),array('&lt;','&gt;','&amp;'),$Text);
 
        $a->save_timestamp($stamp1, "parser");
 
@@ -132,6 +154,11 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) {
        // the Diaspora signature verification and cause the item to disappear
        $Text = trim($Text);
 
+       if ($fordiaspora) {
+               $URLSearchString = "^\[\]";
+               $Text = preg_replace_callback("/([@]\[(.*?)\])\(([$URLSearchString]*)\)/ism", 'diaspora_mentions', $Text);
+       }
+
        call_hooks('bb2diaspora',$Text);
 
        return $Text;
index 0a53c4266ecad1fce39b8b3d5f29d0f00e882bfe..7101440ef88a5da1ecd368e2c47511c8a0af7787 100644 (file)
@@ -95,8 +95,7 @@ function item_post(&$a) {
                        $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1",
                                intval($parent)
                        );
-               }
-               elseif ($parent_uri && local_user()) {
+               } elseif ($parent_uri && local_user()) {
                        // This is coming from an API source, and we are logged in
                        $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
                                dbesc($parent_uri),
@@ -104,6 +103,8 @@ function item_post(&$a) {
                        );
                }
 
+               $thr_parent_item = $r[0];
+
                // if this isn't the real parent of the conversation, find it
                if (dbm::is_result($r)) {
                        $parid = $r[0]['parent'];
@@ -139,18 +140,9 @@ function item_post(&$a) {
 
                        // If the contact id doesn't fit with the contact, then set the contact to null
                        $thrparent = q("SELECT `author-link`, `network` FROM `item` WHERE `uri` = '%s' LIMIT 1", dbesc($thr_parent));
-                       if (count($thrparent) AND ($thrparent[0]["network"] === NETWORK_OSTATUS)
+                       if (count($thrparent) AND in_array($thrparent[0]["network"], array(NETWORK_OSTATUS, NETWORK_DIASPORA))
                                AND (normalise_link($parent_contact["url"]) != normalise_link($thrparent[0]["author-link"]))) {
-                               $parent_contact = null;
-
-                               $r = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
-                                       dbesc(normalise_link($thrparent[0]["author-link"])));
-                               if (dbm::is_result($r)) {
-                                       $parent_contact = $r[0];
-                                       $parent_contact["thumb"] = $parent_contact["photo"];
-                                       $parent_contact["micro"] = $parent_contact["photo"];
-                                       unset($parent_contact["id"]);
-                               }
+                               $parent_contact = get_contact_details_by_url($thrparent[0]["author-link"]);
 
                                if (!isset($parent_contact["nick"])) {
                                        require_once("include/Scrape.php");
@@ -569,11 +561,13 @@ function item_post(&$a) {
         * and we are replying, and there isn't one already
         */
        if ($parent AND (($parent_contact['network'] == NETWORK_OSTATUS) OR
-               (($parent_item['uri'] != $thr_parent) AND ($parent_contact['network'] == NETWORK_DIASPORA)))) {
-               if ($parent_contact['id'] != "")
-                       $contact = '@'.$parent_contact['nick'].'+'.$parent_contact['id'];
-               else
+               (($parent_item['uri'] != $thr_parent) AND ($thr_parent_item['network'] == NETWORK_DIASPORA)))) {
+
+               if ($thr_parent_item['network'] != NETWORK_DIASPORA) {
                        $contact = '@[url='.$parent_contact['url'].']'.$parent_contact['nick'].'[/url]';
+               } else {
+                       $contact = '@[url='.$parent_contact['url'].']'.$parent_contact['name'].'[/url]';
+               }
 
                if (!in_array($contact,$tags)) {
                        $body = $contact.' '.$body;