]> git.mxchange.org Git - friendica-addons.git/blobdiff - statusnet/statusnet.php
Merge pull request #223 from annando/1410-application-name
[friendica-addons.git] / statusnet / statusnet.php
index 2e68ae8963feedb27177865eea975a8c777f5853..7d0f80c3c5e8d98afa2357af7c089c4997c45b76 100644 (file)
@@ -308,7 +308,7 @@ function statusnet_settings(&$a,&$s) {
                 */
                if (! $globalsn == null) {
                        $s .= '<h4>' . t('Globally Available StatusNet OAuthKeys') . '</h4>';
-                       $s .= '<p>'. t("There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance \x28see below\x29.") .'</p>';
+                       $s .= '<p>'. t("There are preconfigured OAuth key pairs for some StatusNet servers available. If you are using one of them, please use these credentials. If not feel free to connect to any other StatusNet instance \x28see below\x29.") .'</p>';
                        $s .= '<div id="statusnet-preconf-wrapper">';
                        foreach ($globalsn as $asn) {
                                $s .= '<input type="radio" name="statusnet-preconf-apiurl" value="'. $asn['apiurl'] .'">'. $asn['sitename'] .'<br />';
@@ -496,8 +496,13 @@ function statusnet_post_hook(&$a,&$b) {
                        $orig_post = $r[0];
                }
 
-               $nickname = "@[url=".$orig_post["author-link"]."]".$orig_post["contact_nick"]."[/url]";
-               $nicknameplain = "@".$orig_post["contact_nick"];
+               //$nickname = "@[url=".$orig_post["author-link"]."]".$orig_post["contact_nick"]."[/url]";
+               //$nicknameplain = "@".$orig_post["contact_nick"];
+
+               $nick = preg_replace("=https?://(.*)/(.*)=ism", "$2", $orig_post["author-link"]);
+
+               $nickname = "@[url=".$orig_post["author-link"]."]".$nick."[/url]";
+               $nicknameplain = "@".$nick;
 
                logger("statusnet_post_hook: comparing ".$nickname." and ".$nicknameplain." with ".$b["body"], LOGGER_DEBUG);
                if ((strpos($b["body"], $nickname) === false) AND (strpos($b["body"], $nicknameplain) === false))
@@ -527,6 +532,9 @@ function statusnet_post_hook(&$a,&$b) {
                return;
 
        // if posts comes from statusnet don't send it back
+       if($b['extid'] == NETWORK_STATUSNET)
+               return;
+
        if($b['app'] == "StatusNet")
                return;
 
@@ -700,9 +708,13 @@ function statusnet_prepare_body(&$a,&$b) {
 
                 if(count($r)) {
                         $orig_post = $r[0];
+                       //$nickname = "@[url=".$orig_post["author-link"]."]".$orig_post["contact_nick"]."[/url]";
+                       //$nicknameplain = "@".$orig_post["contact_nick"];
+
+                       $nick = preg_replace("=https?://(.*)/(.*)=ism", "$2", $orig_post["author-link"]);
 
-                       $nickname = "@[url=".$orig_post["author-link"]."]".$orig_post["contact_nick"]."[/url]";
-                       $nicknameplain = "@".$orig_post["contact_nick"];
+                       $nickname = "@[url=".$orig_post["author-link"]."]".$nick."[/url]";
+                       $nicknameplain = "@".$nick;
 
                        if ((strpos($item["body"], $nickname) === false) AND (strpos($item["body"], $nicknameplain) === false))
                                $item["body"] = $nickname." ".$item["body"];
@@ -820,7 +832,9 @@ function statusnet_fetchtimeline($a, $uid) {
                        $_REQUEST["type"] = "wall";
                        $_REQUEST["api_source"] = true;
                        $_REQUEST["profile_uid"] = $uid;
-                       $_REQUEST["source"] = "StatusNet";
+                       //$_REQUEST["source"] = "StatusNet";
+                       $_REQUEST["source"] = $post->source;
+                       $_REQUEST["extid"] = NETWORK_STATUSNET;
 
                        //$_REQUEST["date"] = $post->created_at;
 
@@ -863,6 +877,9 @@ function statusnet_address($contact) {
 }
 
 function statusnet_fetch_contact($uid, $contact, $create_user) {
+       if ($contact->statusnet_profile_url == "")
+               return(-1);
+
        // Check if the unique contact is existing
        // To-Do: only update once a while
         $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
@@ -941,16 +958,12 @@ function statusnet_fetch_contact($uid, $contact, $create_user) {
                q("UPDATE `contact` SET `photo` = '%s',
                                        `thumb` = '%s',
                                        `micro` = '%s',
-                                       `name-date` = '%s',
-                                       `uri-date` = '%s',
                                        `avatar-date` = '%s'
                                WHERE `id` = %d",
                        dbesc($photos[0]),
                        dbesc($photos[1]),
                        dbesc($photos[2]),
                        dbesc(datetime_convert()),
-                       dbesc(datetime_convert()),
-                       dbesc(datetime_convert()),
                        intval($contact_id)
                );
 
@@ -962,7 +975,7 @@ function statusnet_fetch_contact($uid, $contact, $create_user) {
 
                // check that we have all the photos, this has been known to fail on occasion
 
-               if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro']) || ($update_photo)) {
+               if((!$r[0]['photo']) || (!$r[0]['thumb']) || (!$r[0]['micro']) || ($update_photo)) {
 
                        logger("statusnet_fetch_contact: Updating contact ".$contact->screen_name, LOGGER_DEBUG);
 
@@ -1055,7 +1068,14 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
        $postarray['gravity'] = 0;
        $postarray['uid'] = $uid;
        $postarray['wall'] = 0;
-       $postarray['uri'] = $hostname."::".$post->id;
+
+       if (is_object($post->retweeted_status)) {
+               $content = $post->retweeted_status;
+               statusnet_fetch_contact($uid, $content->user, false);
+       } else
+               $content = $post;
+
+       $postarray['uri'] = $hostname."::".$content->id;
 
        $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
                        dbesc($postarray['uri']),
@@ -1067,9 +1087,9 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
 
        $contactid = 0;
 
-       if ($post->in_reply_to_status_id != "") {
+       if ($content->in_reply_to_status_id != "") {
 
-               $parent = $hostname."::".$post->in_reply_to_status_id;
+               $parent = $hostname."::".$content->in_reply_to_status_id;
 
                $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
                                dbesc($parent),
@@ -1078,6 +1098,8 @@ 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['parent'] = $r[0]["parent"];
+                       $postarray['object-type'] = ACTIVITY_OBJ_COMMENT;
                } else {
                        $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
                                        dbesc($parent),
@@ -1086,16 +1108,19 @@ 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['parent'] = $r[0]['parent'];
+                               $postarray['object-type'] = ACTIVITY_OBJ_COMMENT;
                        } else {
                                $postarray['thr-parent'] = $postarray['uri'];
                                $postarray['parent-uri'] = $postarray['uri'];
+                               $postarray['object-type'] = ACTIVITY_OBJ_NOTE;
                        }
                }
 
                // Is it me?
                $own_url = get_pconfig($uid, 'statusnet', 'own_url');
 
-               if ($post->user->id == $own_url) {
+               if ($content->user->id == $own_url) {
                        $r = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
                                intval($uid));
 
@@ -1110,8 +1135,10 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
                }
                // Don't create accounts of people who just comment something
                $create_user = false;
-       } else
+       } else {
                $postarray['parent-uri'] = $postarray['uri'];
+               $postarray['object-type'] = ACTIVITY_OBJ_NOTE;
+       }
 
        if ($contactid == 0) {
                $contactid = statusnet_fetch_contact($uid, $post->user, $create_user);
@@ -1127,43 +1154,44 @@ 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'];
+
+       $postarray['author-name'] = $content->user->name;
+       $postarray['author-link'] = $content->user->statusnet_profile_url;
+       $postarray['author-avatar'] = $content->user->profile_image_url;
 
        // To-Do: Maybe unreliable? Can the api be entered without trailing "/"?
        $hostname = str_replace("/api/", "/notice/", get_pconfig($uid, 'statusnet', 'baseapi'));
 
-       $postarray['plink'] = $hostname.$post->id;
-       $postarray['app'] = strip_tags($post->source);
+       $postarray['plink'] = $hostname.$content->id;
+       $postarray['app'] = strip_tags($content->source);
 
-       if ($post->user->protected) {
+       if ($content->user->protected) {
                $postarray['private'] = 1;
                $postarray['allow_cid'] = '<' . $self['id'] . '>';
        }
 
-       $postarray['body'] = html2bbcode($post->statusnet_html);
+       $postarray['body'] = html2bbcode($content->statusnet_html);
 
        $converted = statusnet_convertmsg($a, $postarray['body'], false);
        $postarray['body'] = $converted["body"];
        $postarray['tag'] = $converted["tags"];
 
-       $postarray['created'] = datetime_convert('UTC','UTC',$post->created_at);
-       $postarray['edited'] = datetime_convert('UTC','UTC',$post->created_at);
+       $postarray['created'] = datetime_convert('UTC','UTC',$content->created_at);
+       $postarray['edited'] = datetime_convert('UTC','UTC',$content->created_at);
 
-       if (is_string($post->place->name))
-               $postarray["location"] = $post->place->name;
+       if (is_string($content->place->name))
+               $postarray["location"] = $content->place->name;
 
-       if (is_string($post->place->full_name))
-               $postarray["location"] = $post->place->full_name;
+       if (is_string($content->place->full_name))
+               $postarray["location"] = $content->place->full_name;
 
-       if (is_array($post->geo->coordinates))
-               $postarray["coord"] = $post->geo->coordinates[0]." ".$post->geo->coordinates[1];
+       if (is_array($content->geo->coordinates))
+               $postarray["coord"] = $content->geo->coordinates[0]." ".$content->geo->coordinates[1];
 
-       if (is_array($post->coordinates->coordinates))
-               $postarray["coord"] = $post->coordinates->coordinates[1]." ".$post->coordinates->coordinates[0];
+       if (is_array($content->coordinates->coordinates))
+               $postarray["coord"] = $content->coordinates->coordinates[1]." ".$content->coordinates->coordinates[0];
 
-       if (is_object($post->retweeted_status)) {
+       /*if (is_object($post->retweeted_status)) {
                $postarray['body'] = html2bbcode($post->retweeted_status->statusnet_html);
 
                $converted = statusnet_convertmsg($a, $postarray['body'], false);
@@ -1176,13 +1204,15 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
                $postarray['author-name'] = $post->retweeted_status->user->name;
                $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);
 }
 
 function statusnet_checknotification($a, $uid, $own_url, $top_item, $postarray) {
 
+       // This function necer worked and need cleanup
+
        $user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1",
                        intval($uid)
                );
@@ -1231,7 +1261,7 @@ 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/'.urlencode(get_item_guid($top_item)),
                                'source_name'  => $postarray['author-name'],
                                'source_link'  => $postarray['author-link'],
                                'source_photo' => $postarray['author-avatar'],
@@ -1312,7 +1342,16 @@ function statusnet_fetchhometimeline($a, $uid) {
        $items = $connection->get('statuses/home_timeline', $parameters);
 
        if (!is_array($items)) {
-               logger("statusnet_fetchhometimeline: Error fetching home timeline: ".print_r($items, true), LOGGER_DEBUG);
+               if (is_object($items) AND isset($items->error))
+                       $errormsg = $items->error;
+               elseif (is_object($items))
+                       $errormsg = print_r($items, true);
+               elseif (is_string($items) OR is_float($items) OR is_int($items))
+                       $errormsg = $items;
+               else
+                       $errormsg = "Unknown error";
+
+               logger("statusnet_fetchhometimeline: Error fetching home timeline: ".$errormsg, LOGGER_DEBUG);
                return;
        }
 
@@ -1399,8 +1438,10 @@ function statusnet_fetchhometimeline($a, $uid) {
                                dbesc($postarray['uri']),
                                intval($uid)
                        );
-                       if (count($r))
+                       if (count($r)) {
                                $item = $r[0]['id'];
+                               $parent_id = $r[0]['parent'];
+                       }
 
                        if ($item != 0) {
                                require_once('include/enotify.php');
@@ -1412,12 +1453,13 @@ 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/'.urlencode(get_item_guid($item)),
                                        'source_name'  => $postarray['author-name'],
                                        'source_link'  => $postarray['author-link'],
                                        'source_photo' => $postarray['author-avatar'],
                                        'verb'         => ACTIVITY_TAG,
-                                       'otype'        => 'item'
+                                       'otype'        => 'item',
+                                       'parent'       => $parent_id,
                                ));
                        }
                }
@@ -1530,7 +1572,7 @@ function statusnet_convertmsg($a, $body, $no_tags = false) {
                if (($footerlink != "") AND (trim($footer) != "")) {
                        $removedlink = trim(str_replace($footerlink, "", $body));
 
-                       if (strstr($body, $removedlink))
+                       if (($removedlink == "") OR strstr($body, $removedlink))
                                $body = $removedlink;
 
                        $body .= $footer;