X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fapi.php;h=531b66814f16ba81d6a82e48539b84b146920b52;hb=be40fb8186bc18e3562d780a7153f76ee7d5e90f;hp=b5d8f9cf3d8c5d7407a319897bdb488e8061513a;hpb=5a1bb9866dbb09b00861688f4a78baf0391ea58f;p=friendica.git diff --git a/include/api.php b/include/api.php index b5d8f9cf3d..531b66814f 100644 --- a/include/api.php +++ b/include/api.php @@ -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 @@ -151,7 +159,6 @@ die('This api requires login'); } - require_once('include/security.php'); authenticate_success($record); $_SESSION["allow_api"] = true; call_hooks('logged_in', $a->user); @@ -185,7 +192,11 @@ 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){ @@ -274,7 +285,7 @@ * Unique contact to contact url. */ function api_unique_id_to_url($id){ - $r = q("SELECT url FROM unique_contacts WHERE id=%d LIMIT 1", + $r = q("SELECT `url` FROM `unique_contacts` WHERE `id`=%d LIMIT 1", intval($id)); if ($r) return ($r[0]["url"]); @@ -379,9 +390,9 @@ $r = array(); if ($url != "") - $r = q("SELECT * FROM unique_contacts WHERE url='%s' LIMIT 1", $url); + $r = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", $url); elseif ($nick != "") - $r = q("SELECT * FROM unique_contacts WHERE nick='%s' LIMIT 1", $nick); + $r = q("SELECT * FROM `unique_contacts` WHERE `nick`='%s' LIMIT 1", $nick); if ($r) { // If no nick where given, extract it from the address @@ -494,18 +505,17 @@ } // Fetching unique id - $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url']))); + $r = q("SELECT id FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url']))); // If not there, then add it if (count($r) == 0) { - q("INSERT INTO unique_contacts (url, name, nick, avatar) VALUES ('%s', '%s', '%s', '%s')", + q("INSERT INTO `unique_contacts` (`url`, `name`, `nick`, `avatar`) VALUES ('%s', '%s', '%s', '%s')", dbesc(normalise_link($uinfo[0]['url'])), dbesc($uinfo[0]['name']),dbesc($uinfo[0]['nick']), dbesc($uinfo[0]['micro'])); - $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", dbesc(normalise_link($uinfo[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']), @@ -529,7 +539,8 @@ 'verified' => true, 'statusnet_blocking' => false, 'notifications' => false, - 'statusnet_profile_url' => $a->get_baseurl()."/contacts/".$uinfo[0]['cid'], + //'statusnet_profile_url' => $a->get_baseurl()."/contacts/".$uinfo[0]['cid'], + 'statusnet_profile_url' => $uinfo[0]['url'], 'uid' => intval($uinfo[0]['uid']), 'cid' => intval($uinfo[0]['cid']), 'self' => $uinfo[0]['self'], @@ -542,32 +553,44 @@ function api_item_get_user(&$a, $item) { - $author = q("SELECT * FROM unique_contacts WHERE url='%s' LIMIT 1", + $author = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($item['author-link']))); 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"])); + 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"])); - $author = q("SELECT id 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']))); } else if ($item["author-link"].$item["author-name"] != $author[0]["url"].$author[0]["name"]) { - q("UPDATE unique_contacts SET name = '%s', avatar = '%s' WHERE url = '%s'", - dbesc($item["author-name"]), dbesc($item["author-avatar"]), dbesc(normalise_link($item["author-link"]))); + $r = q("SELECT `id` FROM `unique_contacts` WHERE `name` = '%s' AND `avatar` = '%s' AND url = '%s'", + dbesc($item["author-name"]), dbesc($item["author-avatar"]), + dbesc(normalise_link($item["author-link"]))); + + if (!$r) + q("UPDATE `unique_contacts` SET `name` = '%s', `avatar` = '%s' WHERE `url` = '%s'", + dbesc($item["author-name"]), dbesc($item["author-avatar"]), + dbesc(normalise_link($item["author-link"]))); } - $owner = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", + $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"])); + 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", + $owner = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($item['owner-link']))); } else if ($item["owner-link"].$item["owner-name"] != $owner[0]["url"].$owner[0]["name"]) { - q("UPDATE unique_contacts SET name = '%s', avatar = '%s' WHERE url = '%s'", - dbesc($item["owner-name"]), dbesc($item["owner-avatar"]), dbesc(normalise_link($item["owner-link"]))); + $r = q("SELECT `id` FROM `unique_contacts` WHERE `name` = '%s' AND `avatar` = '%s' AND url = '%s'", + dbesc($item["owner-name"]), dbesc($item["owner-avatar"]), + dbesc(normalise_link($item["owner-link"]))); + + if (!$r) + q("UPDATE `unique_contacts` SET `name` = '%s', `avatar` = '%s' WHERE `url` = '%s'", + dbesc($item["owner-name"]), dbesc($item["owner-avatar"]), + dbesc(normalise_link($item["owner-link"]))); } // Comments in threads may appear as wall-to-wall postings. @@ -686,10 +709,10 @@ $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); @@ -701,12 +724,10 @@ $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). @@ -729,18 +750,16 @@ // 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); @@ -753,6 +772,11 @@ $_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 @@ -829,7 +853,6 @@ 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; @@ -856,7 +879,6 @@ // call out normal post function - require_once('mod/item.php'); item_post($a); // this should output the last post (the one we just posted). @@ -879,7 +901,6 @@ return false; } - require_once('mod/wall_upload.php'); $media = wall_upload_post($a, false); if(!$media) { // Output error @@ -906,14 +927,18 @@ logger('api_status_show: user_info: '.print_r($user_info, true), LOGGER_DEBUG); + if ($type == "raw") + $privacy_sql = "AND `item`.`allow_cid`='' AND `item`.`allow_gid`='' AND `item`.`deny_cid`='' AND `item`.`deny_gid`=''"; + else + $privacy_sql = ""; + // get last public wall message $lastwall = q("SELECT `item`.*, `i`.`contact-id` as `reply_uid`, `i`.`author-link` AS `item-author` FROM `item`, `item` as `i` WHERE `item`.`contact-id` = %d AND `item`.`uid` = %d AND ((`item`.`author-link` IN ('%s', '%s')) OR (`item`.`owner-link` IN ('%s', '%s'))) AND `i`.`id` = `item`.`parent` - AND `item`.`type`!='activity' - AND `item`.`allow_cid`='' AND `item`.`allow_gid`='' AND `item`.`deny_cid`='' AND `item`.`deny_gid`='' + AND `item`.`type`!='activity' $privacy_sql ORDER BY `item`.`created` DESC LIMIT 1", intval($user_info['cid']), @@ -936,7 +961,7 @@ $in_reply_to_status_id= intval($lastwall['parent']); $in_reply_to_status_id_str = (string) intval($lastwall['parent']); - $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($lastwall['item-author']))); + $r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($lastwall['item-author']))); if ($r) { if ($r[0]['nick'] == "") $r[0]['nick'] = api_get_nick($r[0]["url"]); @@ -959,7 +984,7 @@ $in_reply_to_screen_name = NULL; } - $converted = api_convert_item($item); + $converted = api_convert_item($lastwall); $status_info = array( 'created_at' => api_date($lastwall['created']), @@ -996,15 +1021,17 @@ $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"]); unset($status_info["user"]["self"]); } + logger('status_info: '.print_r($status_info, true), LOGGER_DEBUG); + if ($type == "raw") return($status_info); @@ -1056,7 +1083,7 @@ $in_reply_to_status_id = intval($lastwall['parent']); $in_reply_to_status_id_str = (string) intval($lastwall['parent']); - $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($reply[0]['item-author']))); + $r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($reply[0]['item-author']))); if ($r) { if ($r[0]['nick'] == "") $r[0]['nick'] = api_get_nick($r[0]["url"]); @@ -1068,7 +1095,7 @@ } } - $converted = api_convert_item($item); + $converted = api_convert_item($lastwall); $user_info['status'] = array( 'text' => $converted["text"], @@ -1095,9 +1122,9 @@ $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']).')'); } @@ -1117,9 +1144,9 @@ $userlist = array(); if (isset($_GET["q"])) { - $r = q("SELECT id FROM unique_contacts WHERE name='%s'", dbesc($_GET["q"])); + $r = q("SELECT id FROM `unique_contacts` WHERE `name`='%s'", dbesc($_GET["q"])); if (!count($r)) - $r = q("SELECT id FROM unique_contacts WHERE nick='%s'", dbesc($_GET["q"])); + $r = q("SELECT `id` FROM `unique_contacts` WHERE `nick`='%s'", dbesc($_GET["q"])); if (count($r)) { foreach ($r AS $user) { @@ -1480,7 +1507,6 @@ if (!x($_REQUEST, "source")) $_REQUEST["source"] = api_source(); - require_once('mod/item.php'); item_post($a); } @@ -1512,7 +1538,6 @@ $ret = api_statuses_show($a, $type); - require_once('include/items.php'); drop_item($id, false); return($ret); @@ -1976,7 +2001,6 @@ $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); @@ -2079,7 +2103,6 @@ // 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(); @@ -2166,7 +2189,7 @@ intval(api_user()), intval($in_reply_to_status_id)); if ($r) { - $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($r[0]['author-link']))); + $r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($r[0]['author-link']))); if ($r) { if ($r[0]['nick'] == "") @@ -2214,9 +2237,9 @@ $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 @@ -2425,7 +2448,7 @@ $stringify_ids = (x($_REQUEST,'stringify_ids')?$_REQUEST['stringify_ids']:false); - $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", + $r = q("SELECT `unique_contact`.`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()) ); @@ -2471,8 +2494,6 @@ $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()), @@ -2829,15 +2850,29 @@ function api_share_as_retweet(&$item) { function api_get_nick($profile) { /* To-Do: - - remove trailing jung from profile url + - remove trailing junk from profile url - pump.io check has to check the website */ $nick = ""; - $friendica = preg_replace("=https?://(.*)/profile/(.*)=ism", "$2", $profile); - if ($friendica != $profile) - $nick = $friendica; + $r = q("SELECT `nick` FROM `gcontact` WHERE `nurl` = '%s'", + dbesc(normalise_link($profile))); + if ($r) + $nick = $r[0]["nick"]; + + if (!$nick == "") { + $r = q("SELECT `nick` FROM `contact` WHERE `uid` = 0 AND `nurl` = '%s'", + dbesc(normalise_link($profile))); + if ($r) + $nick = $r[0]["nick"]; + } + + if (!$nick == "") { + $friendica = preg_replace("=https?://(.*)/profile/(.*)=ism", "$2", $profile); + if ($friendica != $profile) + $nick = $friendica; + } if (!$nick == "") { $diaspora = preg_replace("=https?://(.*)/u/(.*)=ism", "$2", $profile); @@ -2875,8 +2910,8 @@ function api_get_nick($profile) { //} if ($nick != "") { - q("UPDATE unique_contacts SET nick = '%s' WHERE url = '%s'", - dbesc($nick), dbesc(normalise_link($profile))); + q("UPDATE `unique_contacts` SET `nick` = '%s' WHERE `nick` != '%s' AND url = '%s'", + dbesc($nick), dbesc($nick), dbesc(normalise_link($profile))); return($nick); }