]> git.mxchange.org Git - friendica.git/commitdiff
API: reply-to-Values should be all correct now. "since_id" now works with mails.
authorMichael Vogel <icarus@dabo.de>
Thu, 19 Dec 2013 05:58:11 +0000 (06:58 +0100)
committerMichael Vogel <icarus@dabo.de>
Thu, 19 Dec 2013 05:58:11 +0000 (06:58 +0100)
include/api.php

index a9215d0d93fd8571f72566a4c01b9e8b1c9a8c96..60257193e4fe79817682cafc351eedf914dfb287 100644 (file)
                                $ret = array(
                                        'id' => $r[0]["id"],
                                        'name' => $r[0]["name"],
-                                       'screen_name' => $r[0]["name"],
+                                       'screen_name' => (($r[0]['nick']) ? $r[0]['nick'] : $r[0]['name']),
                                        'location' => NULL,
                                        'description' => NULL,
                                        'profile_image_url' => $r[0]["avatar"],
-                                       'url' => NULL,
+                                       'url' => $r[0]["url"],
                                        'protected' => false,
                                        'followers_count' => 0,
                                        'friends_count' => 0,
                                        'favourites_count' => 0,
                                        'utc_offset' => 0,
                                        'time_zone' => 'UTC',
-                                       'statuses_count' => 1,
+                                       'statuses_count' => 0,
                                        'following' => 1,
                                        'statusnet_blocking' => false,
                                        'notifications' => false,
        }
 
        function api_item_get_user(&$a, $item) {
-               global $usercache;
 
-               $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
-                       dbesc(normalise_link($item['owner-link'])));
-
-               if (count($r) == 0)
-                       q("INSERT INTO unique_contacts (url, name, avatar) VALUES ('%s', '%s', '%s')",
-                       dbesc(normalise_link($item["owner-link"])), dbesc($item["owner-name"]), dbesc($item["owner-avatar"]));
-
-               $r = q("SELECT * FROM unique_contacts WHERE url='%s' LIMIT 1",
+               $author = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
                        dbesc(normalise_link($item['author-link'])));
 
-               if (count($r) == 0) {
+               if (count($author) == 0) {
                        q("INSERT INTO unique_contacts (url, name, avatar) VALUES ('%s', '%s', '%s')",
                        dbesc(normalise_link($item["author-link"])), dbesc($item["author-name"]), dbesc($item["author-avatar"]));
 
-                       $r = q("SELECT * FROM unique_contacts WHERE url='%s' LIMIT 1",
+                       $author = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
                                dbesc(normalise_link($item['author-link'])));
                }
 
-               return api_get_user($a,$r[0]["url"]);
+               $owner = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
+                       dbesc(normalise_link($item['owner-link'])));
+
+               if (count($owner) == 0) {
+                       q("INSERT INTO unique_contacts (url, name, avatar) VALUES ('%s', '%s', '%s')",
+                       dbesc(normalise_link($item["owner-link"])), dbesc($item["owner-name"]), dbesc($item["owner-avatar"]));
+
+                       $owner = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
+                               dbesc(normalise_link($item['owner-link'])));
+               }
+
+               // Comments in threads may appear as wall-to-wall postings.
+               // So only take the owner at the top posting.
+               if ($item["id"] == $item["parent"])
+                       return api_get_user($a,$item["owner-link"]);
+               else
+                       return api_get_user($a,$item["author-link"]);
        }
 
 
        function api_status_show(&$a, $type){
                $user_info = api_get_user($a);
                // get last public wall message
-
-               $lastwall = q("SELECT `item`.*, `i`.`contact-id` as `reply_uid`, `c`.`nick` as `reply_author`
+               $lastwall = q("SELECT `item`.*, `i`.`contact-id` as `reply_uid`, `c`.`nick` as `reply_author`, `i`.`author-link` AS `item-author`
                                FROM `item`, `contact`, `item` as `i`, `contact` as `c`
-                               WHERE `item`.`contact-id` = %d
+                               WHERE `item`.`contact-id` = %d AND `item`.`owner-link` = '%s'
                                        AND `i`.`id` = `item`.`parent`
                                        AND `contact`.`id`=`item`.`contact-id` AND `c`.`id`=`i`.`contact-id` AND `contact`.`self`=1
                                        AND `item`.`type`!='activity'
                                        AND `item`.`allow_cid`='' AND `item`.`allow_gid`='' AND `item`.`deny_cid`='' AND `item`.`deny_gid`=''
                                ORDER BY `item`.`created` DESC
                                LIMIT 1",
-                               intval($user_info['cid'])
+                               intval($user_info['cid']),
+                               dbesc($user_info['url'])
                );
 
                if (count($lastwall)>0){
                        $in_reply_to_screen_name = NULL;
                        if ($lastwall['parent']!=$lastwall['id']) {
                                $in_reply_to_status_id=$lastwall['parent'];
-                               $in_reply_to_user_id = $lastwall['reply_uid'];
-                               $in_reply_to_screen_name = $lastwall['reply_author'];
+                               //$in_reply_to_user_id = $lastwall['reply_uid'];
+                               //$in_reply_to_screen_name = $lastwall['reply_author'];
+
+                               $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($lastwall['item-author'])));
+                               if ($r) {
+                                       $in_reply_to_screen_name = $r[0]['name'];
+                                       $in_reply_to_user_id = $r[0]['id'];
+                               }
                        }
                        $status_info = array(
                                'text' => trim(html2plain(bbcode($lastwall['body'], false, false, 2), 0)),
 
                $lastwall = q("SELECT `item`.*
                                FROM `item`, `contact`
-                               WHERE `item`.`contact-id` = %d
+                               WHERE `item`.`contact-id` = %d  AND `item`.`owner-link` = '%s'
                                        AND `contact`.`id`=`item`.`contact-id`
                                        AND `type`!='activity'
                                        AND `item`.`allow_cid`='' AND `item`.`allow_gid`='' AND `item`.`deny_cid`='' AND `item`.`deny_gid`=''
                                ORDER BY `created` DESC
                                LIMIT 1",
-                               intval($user_info['cid'])
+                               intval($user_info['cid']),
+                               dbesc($user_info['url'])
                );
 
                if (count($lastwall)>0){
                        $in_reply_to_user_id = NULL;
                        $in_reply_to_screen_name = NULL;
                        if ($lastwall['parent']!=$lastwall['id']) {
-                               $reply = q("SELECT `item`.`id`, `item`.`contact-id` as `reply_uid`, `contact`.`nick` as `reply_author`
+                               $reply = q("SELECT `item`.`id`, `item`.`contact-id` as `reply_uid`, `contact`.`nick` as `reply_author`, `item`.`author-link` AS `item-author`
                                             FROM `item`,`contact` WHERE `contact`.`id`=`item`.`contact-id` AND `item`.`id` = %d", intval($lastwall['parent']));
                                if (count($reply)>0) {
                                        $in_reply_to_status_id=$lastwall['parent'];
-                                       $in_reply_to_user_id = $reply[0]['reply_uid'];
-                                       $in_reply_to_screen_name = $reply[0]['reply_author'];
+                                       //$in_reply_to_user_id = $reply[0]['reply_uid'];
+                                       //$in_reply_to_screen_name = $reply[0]['reply_author'];
+                                       $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($reply[0]['item-author'])));
+                                       if ($r) {
+                                               $in_reply_to_screen_name = $r[0]['name'];
+                                               $in_reply_to_user_id = $r[0]['id'];
+                                       }
                                }
                        }
                        $user_info['status'] = array(
                                'statusnet_conversation_id'     => $item['parent'],
                        );
 
+                       // Retweets are only valid for top postings
+                       if (($item['owner-link'] != $item['author-link']) AND ($item["id"] == $item["parent"])) {
+                               $retweeted_status = $status;
+                               $retweeted_status["user"] = api_get_user($a,$item["author-link"]);
+
+                               $status["retweeted_status"] = $retweeted_status;
+                       }
+
                        // "cid", "uid" and "self" are only needed for some internal stuff, so remove it from here
                        unset($status["user"]["cid"]);
                        unset($status["user"]["uid"]);
                        $sql_extra = sprintf(" AND ( `rel` = %d OR `rel` = %d ) ", intval(CONTACT_IS_SHARING), intval(CONTACT_IS_FRIEND));
                if($qtype == 'followers')
                        $sql_extra = sprintf(" AND ( `rel` = %d OR `rel` = %d ) ", intval(CONTACT_IS_FOLLOWER), intval(CONTACT_IS_FRIEND));
 
-               $r = q("SELECT id FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra",
+
+               $r = q("SELECT unique_contacts.id FROM contact, unique_contacts WHERE contact.nurl = unique_contacts.url AND `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra",
                        intval(api_user())
                );
 
                if(is_array($r)) {
+
                        if($type === 'xml') {
                                header("Content-type: application/xml");
                                echo '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n" . '<ids>' . "\r\n";
                $page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
                if ($page<0) $page=0;
 
+               $since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
+
                $start = $page*$count;
 
                $profile_url = $a->get_baseurl() . '/profile/' . $a->user['nickname'];
                        $sql_extra = "`from-url`!='".dbesc( $profile_url )."'";
                }
 
-               $r = q("SELECT * FROM `mail` WHERE uid=%d AND $sql_extra ORDER BY created DESC LIMIT %d,%d",
+               $r = q("SELECT * FROM `mail` WHERE uid=%d AND $sql_extra AND id > %d ORDER BY created DESC LIMIT %d,%d",
                                intval(api_user()),
+                               intval($since_id),
                                intval($start), intval($count)
                );