]> git.mxchange.org Git - friendica-addons.git/blobdiff - statusnet/statusnet.php
appnet, fbsync, pumpio, statusnet, twitter: Setting the object-type according to...
[friendica-addons.git] / statusnet / statusnet.php
index fc147840e6b73b00cd51e53e4db765682996aa21..0cabbca8de2895c78d2b68693a01435b9c82db97 100644 (file)
@@ -118,6 +118,7 @@ function statusnet_install() {
        register_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local');
        register_hook('jot_networks',    'addon/statusnet/statusnet.php', 'statusnet_jot_nets');
        register_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron');
+       register_hook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body');
        logger("installed statusnet");
 }
 
@@ -129,6 +130,7 @@ function statusnet_uninstall() {
        unregister_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local');
        unregister_hook('jot_networks',    'addon/statusnet/statusnet.php', 'statusnet_jot_nets');
        unregister_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron');
+       unregister_hook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body');
 
        // old setting - remove only
        unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook');
@@ -548,10 +550,12 @@ function statusnet_post_hook(&$a,&$b) {
                $dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret);
                $max_char = $dent->get_maxlength(); // max. length for a dent
 
+               set_pconfig($b['uid'], 'statusnet', 'max_char', $max_char);
+
                $tempfile = "";
                require_once("include/plaintext.php");
                require_once("include/network.php");
-               $msgarr = plaintext($a, $b, $max_char, true);
+               $msgarr = plaintext($a, $b, $max_char, true, 7);
                $msg = $msgarr["text"];
 
                if (($msg == "") AND isset($msgarr["title"]))
@@ -565,7 +569,7 @@ function statusnet_post_hook(&$a,&$b) {
                                $msg .= " \n".short_link($msgarr["url"]);
                        else
                                $msg .= " \n".$msgarr["url"];
-               } elseif (isset($msgarr["image"]))
+               } elseif (isset($msgarr["image"]) AND ($msgarr["type"] != "video"))
                        $image = $msgarr["image"];
 
                if ($image != "") {
@@ -675,6 +679,49 @@ function statusnet_plugin_admin(&$a, &$o){
        ));
 }
 
+function statusnet_prepare_body(&$a,&$b) {
+        if ($b["item"]["network"] != NETWORK_STATUSNET)
+                return;
+
+        if ($b["preview"]) {
+               $max_char = get_pconfig(local_user(),'statusnet','max_char');
+               if (intval($max_char) == 0)
+                       $max_char = 140;
+
+                require_once("include/plaintext.php");
+                $item = $b["item"];
+                $item["plink"] = $a->get_baseurl()."/display/".$a->user["nickname"]."/".$item["parent"];
+
+               $r = q("SELECT `item`.`author-link`, `item`.`uri`, `contact`.`nick` AS contact_nick
+                        FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
+                        WHERE `item`.`uri` = '%s' AND `item`.`uid` = %d LIMIT 1",
+                        dbesc($item["thr-parent"]),
+                        intval(local_user()));
+
+                if(count($r)) {
+                        $orig_post = $r[0];
+
+                       $nickname = "@[url=".$orig_post["author-link"]."]".$orig_post["contact_nick"]."[/url]";
+                       $nicknameplain = "@".$orig_post["contact_nick"];
+
+                       if ((strpos($item["body"], $nickname) === false) AND (strpos($item["body"], $nicknameplain) === false))
+                               $item["body"] = $nickname." ".$item["body"];
+                }
+
+
+                $msgarr = plaintext($a, $item, $max_char, true, 7);
+                $msg = $msgarr["text"];
+
+                if (isset($msgarr["url"]))
+                        $msg .= " ".$msgarr["url"];
+
+                if (isset($msgarr["image"]))
+                        $msg .= " ".$msgarr["image"];
+
+                $b['html'] = nl2br(htmlspecialchars($msg));
+        }
+}
+
 function statusnet_cron($a,$b) {
        $last = get_config('statusnet','last_poll');
 
@@ -998,6 +1045,8 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
 
        require_once("include/html2bbcode.php");
 
+       logger("statusnet_createpost: start", LOGGER_DEBUG);
+
        $api = get_pconfig($uid, 'statusnet', 'baseapi');
        $hostname = preg_replace("=https?://([\w\.]*)/.*=ism", "$1", $api);
 
@@ -1029,6 +1078,7 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
                if (count($r)) {
                        $postarray['thr-parent'] = $r[0]["uri"];
                        $postarray['parent-uri'] = $r[0]["parent-uri"];
+                       $postarray['object-type'] = ACTIVITY_OBJ_COMMENT;
                } else {
                        $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
                                        dbesc($parent),
@@ -1037,9 +1087,11 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
                        if (count($r)) {
                                $postarray['thr-parent'] = $r[0]['uri'];
                                $postarray['parent-uri'] = $r[0]['parent-uri'];
+                               $postarray['object-type'] = ACTIVITY_OBJ_COMMENT;
                        } else {
                                $postarray['thr-parent'] = $postarray['uri'];
                                $postarray['parent-uri'] = $postarray['uri'];
+                               $postarray['object-type'] = ACTIVITY_OBJ_NOTE;
                        }
                }
 
@@ -1059,8 +1111,12 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
                        } else
                                return(array());
                }
-       } else
+               // Don't create accounts of people who just comment something
+               $create_user = false;
+       } else {
                $postarray['parent-uri'] = $postarray['uri'];
+               $postarray['object-type'] = ACTIVITY_OBJ_NOTE;
+       }
 
        if ($contactid == 0) {
                $contactid = statusnet_fetch_contact($uid, $post->user, $create_user);
@@ -1076,6 +1132,7 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
        $postarray['contact-id'] = $contactid;
 
        $postarray['verb'] = ACTIVITY_POST;
+
        $postarray['author-name'] = $postarray['owner-name'];
        $postarray['author-link'] = $postarray['owner-link'];
        $postarray['author-avatar'] = $postarray['owner-avatar'];
@@ -1126,6 +1183,7 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
                $postarray['author-link'] = $post->retweeted_status->user->statusnet_profile_url;
                $postarray['author-avatar'] = $post->retweeted_status->user->profile_image_url;
        }
+       logger("statusnet_createpost: end", LOGGER_DEBUG);
        return($postarray);
 }
 
@@ -1179,7 +1237,8 @@ function statusnet_checknotification($a, $uid, $own_url, $top_item, $postarray)
                                'to_email'     => $user[0]['email'],
                                'uid'          => $user[0]['uid'],
                                'item'         => $postarray,
-                               'link'             => $a->get_baseurl() . '/display/' . $user[0]['nickname'] . '/' . $top_item,
+                               //'link'             => $a->get_baseurl() . '/display/' . $user[0]['nickname'] . '/' . $top_item,
+                               'link'         => $a->get_baseurl().'/display/'.get_item_guid($top_item),
                                'source_name'  => $postarray['author-name'],
                                'source_link'  => $postarray['author-link'],
                                'source_photo' => $postarray['author-avatar'],
@@ -1360,7 +1419,8 @@ function statusnet_fetchhometimeline($a, $uid) {
                                        'to_email'     => $u[0]['email'],
                                        'uid'          => $u[0]['uid'],
                                        'item'         => $postarray,
-                                       'link'         => $a->get_baseurl() . '/display/' . $u[0]['nickname'] . '/' . $item,
+                                       //'link'         => $a->get_baseurl() . '/display/' . $u[0]['nickname'] . '/' . $item,
+                                       'link'         => $a->get_baseurl().'/display/'.get_item_guid($item),
                                        'source_name'  => $postarray['author-name'],
                                        'source_link'  => $postarray['author-link'],
                                        'source_photo' => $postarray['author-avatar'],
@@ -1392,7 +1452,7 @@ function statusnet_complete_conversation($a, $uid, $self, $create_user, $nick, $
                $posts = array_reverse($items);
 
                foreach($posts AS $post) {
-                       $postarray = statusnet_createpost($a, $uid, $post, $self, $create_user, true);
+                       $postarray = statusnet_createpost($a, $uid, $post, $self, false, false);
 
                        if (trim($postarray['body']) == "")
                                continue;
@@ -1414,6 +1474,8 @@ function statusnet_convertmsg($a, $body, $no_tags = false) {
        require_once("include/items.php");
        require_once("include/network.php");
 
+       $body = preg_replace("=\[url\=https?://([0-9]*).([0-9]*).([0-9]*).([0-9]*)/([0-9]*)\](.*?)\[\/url\]=ism","$1.$2.$3.$4/$5",$body);
+
        $URLSearchString = "^\[\]";
        $links = preg_match_all("/[^!#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", $body,$matches,PREG_SET_ORDER);
 
@@ -1426,10 +1488,16 @@ function statusnet_convertmsg($a, $body, $no_tags = false) {
                foreach ($matches AS $match) {
                        $search = "[url=".$match[1]."]".$match[2]."[/url]";
 
+                       logger("statusnet_convertmsg: expanding url ".$match[1], LOGGER_DEBUG);
+
                        $expanded_url = original_url($match[1]);
 
+                       logger("statusnet_convertmsg: fetching data for ".$expanded_url, LOGGER_DEBUG);
+
                        $oembed_data = oembed_fetch_url($expanded_url, true);
 
+                       logger("statusnet_convertmsg: fetching data: done", LOGGER_DEBUG);
+
                        if ($type == "")
                                $type = $oembed_data->type;
                        if ($oembed_data->type == "video") {