]> 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 1957cc96178b1d8286247fd8ff6b3128849d8ee7..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');
@@ -171,8 +173,8 @@ function statusnet_settings_post ($a,$post) {
                del_pconfig(local_user(), 'statusnet', 'lastid');
                del_pconfig(local_user(), 'statusnet', 'mirror_posts');
                del_pconfig(local_user(), 'statusnet', 'import');
-               del_pconfig(local_user(), 'statusnet', 'create_user');
-               del_pconfig(local_user(), 'statusnet', 'own_id');
+               del_pconfig(local_user(), 'statusnet', 'create_user');
+               del_pconfig(local_user(), 'statusnet', 'own_id');
        } else {
        if (isset($_POST['statusnet-preconf-apiurl'])) {
                /***
@@ -250,6 +252,10 @@ function statusnet_settings_post ($a,$post) {
                set_pconfig(local_user(), 'statusnet', 'mirror_posts', intval($_POST['statusnet-mirror']));
                set_pconfig(local_user(), 'statusnet', 'import', intval($_POST['statusnet-import']));
                set_pconfig(local_user(), 'statusnet', 'create_user', intval($_POST['statusnet-create_user']));
+
+               if (!intval($_POST['statusnet-mirror']))
+                       del_pconfig(local_user(),'statusnet','lastid');
+
                info( t('StatusNet settings updated.') . EOL);
        }}}}
 }
@@ -275,9 +281,9 @@ function statusnet_settings(&$a,&$s) {
        $mirrorenabled = get_pconfig(local_user(),'statusnet','mirror_posts');
        $mirrorchecked = (($mirrorenabled) ? ' checked="checked" ' : '');
        $importenabled = get_pconfig(local_user(),'statusnet','import');
-        $importchecked = (($importenabled) ? ' checked="checked" ' : '');
-        $create_userenabled = get_pconfig(local_user(),'statusnet','create_user');
-        $create_userchecked = (($create_userenabled) ? ' checked="checked" ' : '');
+       $importchecked = (($importenabled) ? ' checked="checked" ' : '');
+       $create_userenabled = get_pconfig(local_user(),'statusnet','create_user');
+       $create_userchecked = (($create_userenabled) ? ' checked="checked" ' : '');
 
        $css = (($enabled) ? '' : '-disabled');
 
@@ -302,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 />';
@@ -386,12 +392,12 @@ function statusnet_settings(&$a,&$s) {
                        $s .= '</div>';
 
                        $s .= '<label id="statusnet-import-label" for="statusnet-import">'.t('Import the remote timeline').'</label>';
-                        $s .= '<input id="statusnet-import" type="checkbox" name="statusnet-import" value="1" '. $importchecked . '/>';
-                        $s .= '<div class="clear"></div>';
+                       $s .= '<input id="statusnet-import" type="checkbox" name="statusnet-import" value="1" '. $importchecked . '/>';
+                       $s .= '<div class="clear"></div>';
 /*
-                        $s .= '<label id="statusnet-create_user-label" for="statusnet-create_user">'.t('Automatically create contacts').'</label>';
-                        $s .= '<input id="statusnet-create_user" type="checkbox" name="statusnet-create_user" value="1" '. $create_userchecked . '/>';
-                        $s .= '<div class="clear"></div>';
+                       $s .= '<label id="statusnet-create_user-label" for="statusnet-create_user">'.t('Automatically create contacts').'</label>';
+                       $s .= '<input id="statusnet-create_user" type="checkbox" name="statusnet-create_user" value="1" '. $create_userchecked . '/>';
+                       $s .= '<div class="clear"></div>';
 */
                        $s .= '<div id="statusnet-disconnect-wrapper">';
                        $s .= '<label id="statusnet-disconnect-label" for="statusnet-disconnect">'. t('Clear OAuth configuration') .'</label>';
@@ -435,20 +441,20 @@ function statusnet_action($a, $uid, $pid, $action) {
 
        $connection = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret);
 
-        logger("statusnet_action '".$action."' ID: ".$pid, LOGGER_DATA);
-
-        switch ($action) {
-                case "delete":
-                        $result = $connection->post("statuses/destroy/".$pid);
-                        break;
-                case "like":
-                        $result = $connection->post("favorites/create/".$pid);
-                        break;
-                case "unlike":
-                        $result = $connection->post("favorites/destroy/".$pid);
-                        break;
-        }
-        logger("statusnet_action '".$action."' send, result: " . print_r($result, true), LOGGER_DEBUG);
+       logger("statusnet_action '".$action."' ID: ".$pid, LOGGER_DATA);
+
+       switch ($action) {
+               case "delete":
+                       $result = $connection->post("statuses/destroy/".$pid);
+                       break;
+               case "like":
+                       $result = $connection->post("favorites/create/".$pid);
+                       break;
+               case "unlike":
+                       $result = $connection->post("favorites/destroy/".$pid);
+                       break;
+       }
+       logger("statusnet_action '".$action."' send, result: " . print_r($result, true), LOGGER_DEBUG);
 }
 
 function statusnet_post_hook(&$a,&$b) {
@@ -506,19 +512,19 @@ function statusnet_post_hook(&$a,&$b) {
        }
 
        if (($b['verb'] == ACTIVITY_POST) AND $b['deleted'])
-                statusnet_action($a, $b["uid"], substr($orig_post["uri"], $hostlength), "delete");
-
-        if($b['verb'] == ACTIVITY_LIKE) {
-                logger("statusnet_post_hook: parameter 2 ".substr($b["thr-parent"], $hostlength), LOGGER_DEBUG);
-                if ($b['deleted'])
-                        statusnet_action($a, $b["uid"], substr($b["thr-parent"], $hostlength), "unlike");
-                else
-                        statusnet_action($a, $b["uid"], substr($b["thr-parent"], $hostlength), "like");
-                return;
+               statusnet_action($a, $b["uid"], substr($orig_post["uri"], $hostlength), "delete");
+
+       if($b['verb'] == ACTIVITY_LIKE) {
+               logger("statusnet_post_hook: parameter 2 ".substr($b["thr-parent"], $hostlength), LOGGER_DEBUG);
+               if ($b['deleted'])
+                       statusnet_action($a, $b["uid"], substr($b["thr-parent"], $hostlength), "unlike");
+               else
+                       statusnet_action($a, $b["uid"], substr($b["thr-parent"], $hostlength), "like");
+               return;
        }
 
-        if($b['deleted'] || ($b['created'] !== $b['edited']))
-                return;
+       if($b['deleted'] || ($b['created'] !== $b['edited']))
+               return;
 
        // if posts comes from statusnet don't send it back
        if($b['app'] == "StatusNet")
@@ -544,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"]))
@@ -561,12 +569,12 @@ 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 != "") {
                        $img_str = fetch_url($image);
-                       $tempfile = tempnam(get_config("system","temppath"), "cache");
+                       $tempfile = tempnam(get_temppath(), "cache");
                        file_put_contents($tempfile, $img_str);
                        $postdata = array("status" => $msg, "media[]" => $tempfile);
                } else
@@ -671,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');
 
@@ -696,12 +747,12 @@ function statusnet_cron($a,$b) {
        }
 
        $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'statusnet' AND `k` = 'import' AND `v` = '1' ORDER BY RAND()");
-        if(count($r)) {
-                foreach($r as $rr) {
-                        logger('statusnet: importing timeline from user '.$rr['uid']);
-                        statusnet_fetchhometimeline($a, $rr["uid"]);
-                }
-        }
+       if(count($r)) {
+               foreach($r as $rr) {
+                       logger('statusnet: importing timeline from user '.$rr['uid']);
+                       statusnet_fetchhometimeline($a, $rr["uid"]);
+               }
+       }
 
        logger('statusnet: cron_end');
 
@@ -994,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);
 
@@ -1025,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),
@@ -1033,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;
                        }
                }
 
@@ -1055,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);
@@ -1072,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'];
@@ -1122,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);
 }
 
@@ -1175,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'],
@@ -1356,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'],
@@ -1388,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;
@@ -1410,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);
 
@@ -1422,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);
-print_r($oembed_data);
+
+                       logger("statusnet_convertmsg: fetching data: done", LOGGER_DEBUG);
+
                        if ($type == "")
                                $type = $oembed_data->type;
                        if ($oembed_data->type == "video") {
@@ -1442,7 +1514,7 @@ print_r($oembed_data);
                        else {
                                $img_str = fetch_url($expanded_url, true, $redirects, 4);
 
-                               $tempfile = tempnam(get_config("system","temppath"), "cache");
+                               $tempfile = tempnam(get_temppath(), "cache");
                                file_put_contents($tempfile, $img_str);
                                $mime = image_type_to_mime_type(exif_imagetype($tempfile));
                                unlink($tempfile);