]> git.mxchange.org Git - friendica.git/blobdiff - include/api.php
Merge pull request #2016 from fabrixxm/template_vars_hook
[friendica.git] / include / api.php
index 06dbca7f143ad9911702c02292ad1fbb5d03b346..2fd7d6d45a0999a32b7aa8130a152c61653f4247 100644 (file)
@@ -9,6 +9,14 @@
        require_once("include/html2plain.php");
        require_once("mod/share.php");
        require_once("include/Photo.php");
+       require_once("mod/item.php");
+       require_once('include/security.php');
+       require_once('include/contact_selectors.php');
+       require_once('include/html2bbcode.php');
+       require_once('mod/wall_upload.php');
+       require_once("mod/proxy.php");
+       require_once("include/message.php");
+
 
        /*
         * Twitter-Like API
                        die('This api requires login');
                }
 
-               require_once('include/security.php');
                authenticate_success($record); $_SESSION["allow_api"] = true;
 
                call_hooks('logged_in', $a->user);
                                if (strpos($a->query_string, ".atom")>0) $type="atom";
                                if (strpos($a->query_string, ".as")>0) $type="as";
 
+                               $stamp =  microtime(true);
                                $r = call_user_func($info['func'], $a, $type);
+                               $duration = (float)(microtime(true)-$stamp);
+                               logger("API call duration: ".round($duration, 2)."\t".$a->query_string, LOGGER_DEBUG);
+
                                if ($r===false) return;
 
                                switch($type){
                                        'screen_name' => (($r[0]['nick']) ? $r[0]['nick'] : $r[0]['name']),
                                        'location' => NULL,
                                        'description' => NULL,
-                                       'profile_image_url' => $r[0]["avatar"],
-                                       'profile_image_url_https' => $r[0]["avatar"],
                                        'url' => $r[0]["url"],
                                        'protected' => false,
                                        'followers_count' => 0,
                                        'friends_count' => 0,
+                                       'listed_count' => 0,
                                        'created_at' => api_date(0),
                                        'favourites_count' => 0,
                                        'utc_offset' => 0,
                                        'time_zone' => 'UTC',
+                                       'geo_enabled' => false,
+                                       'verified' => false,
                                        'statuses_count' => 0,
+                                       'lang' => '',
+                                       'contributors_enabled' => false,
+                                       'is_translator' => false,
+                                       'is_translation_enabled' => false,
+                                       'profile_image_url' => $r[0]["avatar"],
+                                       'profile_image_url_https' => $r[0]["avatar"],
                                        'following' => false,
-                                       'verified' => false,
+                                       'follow_request_sent' => false,
+                                       'notifications' => false,
                                        'statusnet_blocking' => false,
                                        'notifications' => false,
                                        'statusnet_profile_url' => $r[0]["url"],
                        $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url'])));
                }
 
-               require_once('include/contact_selectors.php');
-               $network_name = network_to_name($uinfo[0]['network']);
+               $network_name = network_to_name($uinfo[0]['network'], $uinfo[0]['url']);
 
                $ret = Array(
                        'id' => intval($r[0]['id']),
                $txt = requestdata('status');
                //$txt = urldecode(requestdata('status'));
 
-               require_once('library/HTMLPurifier.auto.php');
-               require_once('include/html2bbcode.php');
-
                if((strpos($txt,'<') !== false) || (strpos($txt,'>') !== false)) {
+
+                       require_once('library/HTMLPurifier.auto.php');
+
                        $txt = html2bb_video($txt);
                        $config = HTMLPurifier_Config::createDefault();
                        $config->set('Cache.DefinitionImpl', null);
                $a->argv[1]=$user_info['screen_name']; //should be set to username?
 
                $_REQUEST['hush']='yeah'; //tell wall_upload function to return img info instead of echo
-               require_once('mod/wall_upload.php');
                $bebop = wall_upload_post($a);
 
                //now that we have the img url in bbcode we can add it to the status and insert the wall item.
                $_REQUEST['body']=$txt."\n\n".$bebop;
-               require_once('mod/item.php');
                item_post($a);
 
                // this should output the last post (the one we just posted).
                // logger('api_post: ' . print_r($_POST,true));
 
                if(requestdata('htmlstatus')) {
-                       require_once('library/HTMLPurifier.auto.php');
-                       require_once('include/html2bbcode.php');
-
                        $txt = requestdata('htmlstatus');
                        if((strpos($txt,'<') !== false) || (strpos($txt,'>') !== false)) {
 
+                               require_once('library/HTMLPurifier.auto.php');
+
                                $txt = html2bb_video($txt);
 
                                $config = HTMLPurifier_Config::createDefault();
                                $config->set('Cache.DefinitionImpl', null);
 
-
                                $purifier = new HTMLPurifier($config);
                                $txt = $purifier->purify($txt);
 
                $_REQUEST['title'] = requestdata('title');
 
                $parent = requestdata('in_reply_to_status_id');
+
+               // Twidere sends "-1" if it is no reply ...
+               if ($parent == -1)
+                       $parent = "";
+
                if(ctype_digit($parent))
                        $_REQUEST['parent'] = $parent;
                else
                if(x($_FILES,'media')) {
                        // upload the image if we have one
                        $_REQUEST['hush']='yeah'; //tell wall_upload function to return img info instead of echo
-                       require_once('mod/wall_upload.php');
                        $media = wall_upload_post($a);
                        if(strlen($media)>0)
                                $_REQUEST['body'] .= "\n\n".$media;
 
                // call out normal post function
 
-               require_once('mod/item.php');
                item_post($a);
 
                // this should output the last post (the one we just posted).
                        return false;
                }
 
-               require_once('mod/wall_upload.php');
                $media = wall_upload_post($a, false);
                if(!$media) {
                        // Output error
                        $converted = api_convert_item($item);
 
                        $status_info = array(
+                               'created_at' => api_date($lastwall['created']),
+                               'id' => intval($lastwall['id']),
+                               'id_str' => (string) $lastwall['id'],
                                'text' => $converted["text"],
+                               'source' => (($lastwall['app']) ? $lastwall['app'] : 'web'),
                                'truncated' => false,
-                               'created_at' => api_date($lastwall['created']),
                                'in_reply_to_status_id' => $in_reply_to_status_id,
                                'in_reply_to_status_id_str' => $in_reply_to_status_id_str,
-                               'source' => (($lastwall['app']) ? $lastwall['app'] : 'web'),
-                               'id' => intval($lastwall['id']),
-                               'id_str' => (string) $lastwall['id'],
                                'in_reply_to_user_id' => $in_reply_to_user_id,
                                'in_reply_to_user_id_str' => $in_reply_to_user_id_str,
                                'in_reply_to_screen_name' => $in_reply_to_screen_name,
+                               'user' => $user_info,
                                'geo' => NULL,
+                               'coordinates' => "",
+                               'place' => "",
+                               'contributors' => "",
+                               'is_quote_status' => false,
+                               'retweet_count' => 0,
+                               'favorite_count' => 0,
                                'favorited' => $lastwall['starred'] ? true : false,
-                               'user' => $user_info,
+                               'retweeted' => false,
+                               'possibly_sensitive' => false,
+                               'lang' => "",
                                'statusnet_html'                => $converted["html"],
                                'statusnet_conversation_id'     => $lastwall['parent'],
                        );
                                $status_info["entities"] = $converted["entities"];
 
                        if (($lastwall['item_network'] != "") AND ($status["source"] == 'web'))
-                               $status_info["source"] = network_to_name($lastwall['item_network']);
-                       elseif (($lastwall['item_network'] != "") AND (network_to_name($lastwall['item_network']) != $status_info["source"]))
-                               $status_info["source"] = trim($status_info["source"].' ('.network_to_name($lastwall['item_network']).')');
+                               $status_info["source"] = network_to_name($lastwall['item_network'], $user_info['url']);
+                       elseif (($lastwall['item_network'] != "") AND (network_to_name($lastwall['item_network'], $user_info['url']) != $status_info["source"]))
+                               $status_info["source"] = trim($status_info["source"].' ('.network_to_name($lastwall['item_network'], $user_info['url']).')');
 
                        // "uid" and "self" are only needed for some internal stuff, so remove it from here
                        unset($status_info["user"]["uid"]);
                                $user_info["status"]["entities"] = $converted["entities"];
 
                        if (($lastwall['item_network'] != "") AND ($user_info["status"]["source"] == 'web'))
-                               $user_info["status"]["source"] = network_to_name($lastwall['item_network']);
-                       if (($lastwall['item_network'] != "") AND (network_to_name($lastwall['item_network']) != $user_info["status"]["source"]))
-                               $user_info["status"]["source"] = trim($user_info["status"]["source"].' ('.network_to_name($lastwall['item_network']).')');
+                               $user_info["status"]["source"] = network_to_name($lastwall['item_network'], $user_info['url']);
+                       if (($lastwall['item_network'] != "") AND (network_to_name($lastwall['item_network'], $user_info['url']) != $user_info["status"]["source"]))
+                               $user_info["status"]["source"] = trim($user_info["status"]["source"].' ('.network_to_name($lastwall['item_network'], $user_info['url']).')');
 
                }
 
                if ($conversation_id > 0)
                        $sql_extra .= ' AND `item`.`parent` = '.intval($conversation_id);
 
-               $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`,
+               $r = q("SELECT STRAIGHT_JOIN `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`,
                        `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
                        `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
                        `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
                        if (!x($_REQUEST, "source"))
                                $_REQUEST["source"] = api_source();
 
-                       require_once('mod/item.php');
                        item_post($a);
                }
 
 
                $ret = api_statuses_show($a, $type);
 
-               require_once('include/items.php');
                drop_item($id, false);
 
                return($ret);
                $include_entities = strtolower(x($_REQUEST,'include_entities')?$_REQUEST['include_entities']:"false");
 
                if ($include_entities != "true") {
-                       require_once("mod/proxy.php");
 
                        preg_match_all("/\[img](.*?)\[\/img\]/ism", $bbcode, $images);
 
                                        // If image cache is activated, then use the following sizes:
                                        // thumb  (150), small (340), medium (600) and large (1024)
                                        if (!get_config("system", "proxy_disabled")) {
-                                               require_once("mod/proxy.php");
                                                $media_url = proxy_url($url);
 
                                                $sizes = array();
                                $status["entities"] = $converted["entities"];
 
                        if (($item['item_network'] != "") AND ($status["source"] == 'web'))
-                               $status["source"] = network_to_name($item['item_network']);
-                       else if (($item['item_network'] != "") AND (network_to_name($item['item_network']) != $status["source"]))
-                               $status["source"] = trim($status["source"].' ('.network_to_name($item['item_network']).')');
+                               $status["source"] = network_to_name($item['item_network'], $user_info['url']);
+                       else if (($item['item_network'] != "") AND (network_to_name($item['item_network'], $user_info['url']) != $status["source"]))
+                               $status["source"] = trim($status["source"].' ('.network_to_name($item['item_network'], $user_info['url']).')');
 
 
                        // Retweets are only valid for top postings
                        unset($status["user"]["uid"]);
                        unset($status["user"]["self"]);
 
-                       // 'geo' => array('type' => 'Point',
-                       //                   'coordinates' => array((float) $notice->lat,
-                       //                                          (float) $notice->lon));
+                       if ($item["coord"] != "") {
+                               $coords = explode(' ',$item["coord"]);
+                               if (count($coords) == 2) {
+                                       $status["geo"] = array('type' => 'Point',
+                                                       'coordinates' => array((float) $coords[0],
+                                                                               (float) $coords[1]));
+                               }
+                       }
 
                        $ret[] = $status;
                };
 
                $sender = api_get_user($a);
 
-               require_once("include/message.php");
-
                if ($_POST['screen_name']) {
                        $r = q("SELECT `id`, `nurl`, `network` FROM `contact` WHERE `uid`=%d AND `nick`='%s'",
                                        intval(api_user()),
@@ -2957,6 +2981,19 @@ function api_best_nickname(&$contacts) {
 
 
 /*
+To.Do:
+    [pagename] => api/1.1/statuses/lookup.json
+    [id] => 605138389168451584
+    [include_cards] => true
+    [cards_platform] => Android-12
+    [include_entities] => true
+    [include_my_retweet] => 1
+    [include_rts] => 1
+    [include_reply_count] => true
+    [include_descendent_reply_count] => true
+
+
+
 Not implemented by now:
 statuses/retweets_of_me
 friendships/create