X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fapi.php;h=4e5ea43bdb567d8e09569997a2d7ac3114ded469;hb=e7834e60f872f91954266a7bcc2b5adda3df8d00;hp=43a77bcc7a7ecfeb321846e55289f53ae934da9e;hpb=b86ae9de7f8982f22c6ab086bda8fa82977d3ae7;p=friendica.git diff --git a/include/api.php b/include/api.php index 43a77bcc7a..4e5ea43bdb 100644 --- a/include/api.php +++ b/include/api.php @@ -129,14 +129,15 @@ break; case "json": header ("Content-Type: application/json"); - return json_encode($r); + foreach($r as $rr) + return json_encode($rr); break; case "rss": header ("Content-Type: application/rss+xml"); return ''."\n".$r; break; case "atom": - #header ("Content-Type: application/atom+xml"); + header ("Content-Type: application/atom+xml"); return ''."\n".$r; break; @@ -152,6 +153,7 @@ */ function api_rss_extra(&$a, $arr, $user_info){ if (is_null($user_info)) $user_info = api_get_user($a); + $arr['$user'] = $user_info; $arr['$rss'] = array( 'alternate' => $user_info['url'], 'self' => $a->get_baseurl(). "/". $a->query_string, @@ -166,19 +168,24 @@ /** * Returns user info array. */ - function api_get_user(&$a){ + function api_get_user(&$a, $contact_id=Null){ $user = null; $extra_query = ""; - if(x($_GET, 'user_id')) { + if(!is_null($contact_id)){ + $user=$contact_id; + $extra_query = "AND `contact`.`id` = %d "; + } + + if(is_null($user) && x($_GET, 'user_id')) { $user = intval($_GET['user_id']); $extra_query = "AND `contact`.`id` = %d "; } - if(x($_GET, 'screen_name')) { + if(is_null($user) && x($_GET, 'screen_name')) { $user = dbesc($_GET['screen_name']); $extra_query = "AND `contact`.`nick` = '%s' "; } - if ($user===null){ + if (is_null($user)){ list($user, $null) = explode(".",$a->argv[3]); if(is_numeric($user)){ $user = intval($user); @@ -194,15 +201,15 @@ api_login($a); return False; } else { $user = $_SESSION['uid']; - $extra_query = "AND `user`.`uid` = %d "; + $extra_query = "AND `contact`.`uid` = %d "; } } // user info - $uinfo = q("SELECT *, `contact`.`id` as `cid` FROM `user`, `contact` - WHERE `user`.`uid`=`contact`.`uid` AND `contact`.`self`=1 + $uinfo = q("SELECT *, `contact`.`id` as `cid` FROM `contact` + WHERE 1 $extra_query", $user ); @@ -229,17 +236,19 @@ $ret = Array( + 'uid' => $uinfo[0]['uid'], 'id' => $uinfo[0]['cid'], - 'name' => $uinfo[0]['username'], - 'screen_name' => $uinfo[0]['nickname'], - 'location' => $uinfo[0]['default-location'], + 'name' => $uinfo[0]['name'], + 'screen_name' => $uinfo[0]['nick'], + 'location' => '', //$uinfo[0]['default-location'], 'profile_image_url' => $uinfo[0]['micro'], 'url' => $uinfo[0]['url'], + 'contact_url' => $a->get_baseurl()."/contacts/".$uinfo[0]['cid'], 'protected' => false, # 'friends_count' => $countfriends, - 'created_at' => api_date($uinfo[0]['created']), + 'created_at' => api_date($uinfo[0]['name-date']), 'utc_offset' => 0, #XXX: fix me - 'time_zone' => $uinfo[0]['timezone'], + 'time_zone' => '', //$uinfo[0]['timezone'], 'geo_enabled' => false, 'statuses_count' => $countitms, #XXX: fix me 'lang' => 'en', #XXX: fix me @@ -279,6 +288,7 @@ * load api $templatename for $type and replace $data array */ function api_apply_template($templatename, $type, $data){ + switch($type){ case "rss": case "atom": @@ -313,7 +323,7 @@ api_register_func('api/account/verify_credentials','api_account_verify_credentials', true); - // TODO - media uploads and alternate 'source' + // TODO - media uploads function api_statuses_update(&$a, $type) { if (local_user()===false) return false; @@ -377,7 +387,7 @@ 'created_at' => api_date($lastwall['created']), 'id' => $lastwall['contact-id'], 'text' => strip_tags(bbcode($lastwall['body'])), - 'source' => 'web', + 'source' => (($lastwall['app']) ? $lastwall['app'] : 'web'), 'truncated' => false, 'in_reply_to_status_id' => $in_reply_to_status_id, 'in_reply_to_user_id' => $in_reply_to_user_id, @@ -434,7 +444,7 @@ 'created_at' => api_date($lastwall['created']), 'id' => $lastwall['contact-id'], 'text' => strip_tags(bbcode($lastwall['body'])), - 'source' => 'web', + 'source' => (($lastwall['app']) ? $lastwall['app'] : 'web'), 'truncated' => false, 'in_reply_to_status_id' => $in_reply_to_status_id, 'in_reply_to_user_id' => $in_reply_to_user_id, @@ -462,7 +472,6 @@ if (local_user()===false) return false; $user_info = api_get_user($a); - // get last newtork messages $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) "; @@ -470,19 +479,20 @@ `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` - FROM `item`, `contact`, `user` - WHERE `item`.`contact-id` = %d AND `user`.`uid` = `item`.`uid` + FROM `item`, `contact` + WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $sql_extra ORDER BY `item`.`created` DESC LIMIT %d ,%d ", - intval($user_info['id']), + intval($user_info['uid']), 0,20 ); $ret = Array(); foreach($r as $item) { + $status_user = (($item['cid']==$user_info['id'])?$user_info: api_get_user($a,$item['cid'])); $status = array( 'created_at'=> api_date($item['created']), 'published' => datetime_convert('UTC','UTC',$item['created'],ATOM_TIME), @@ -490,7 +500,7 @@ 'id' => $item['id'], 'text' => strip_tags(bbcode($item['body'])), 'html' => bbcode($item['body']), - 'source' => 'web', + 'source' => (($item['app']) ? $item['app'] : 'web'), 'url' => ($item['plink']!=''?$item['plink']:$item['author-link']), 'truncated' => False, 'in_reply_to_status_id' => ($item['parent']!=$item['id']?$item['parent']:''), @@ -503,7 +513,7 @@ 'contributors' => '', 'annotations' => '', 'entities' => '', - 'user' => $user_info, + 'user' => $status_user , 'objecttype' => $item['object-type'], 'verb' => $item['verb'], 'self' => $a->get_baseurl()."/api/statuses/show/".$ite['id'].".".$type, @@ -526,3 +536,17 @@ api_register_func('api/statuses/user_timeline','api_statuses_home_timeline', true); # TODO: user_timeline should be profile view + + function api_account_rate_limit_status(&$a,$type) { + + $hash = array( + 'remaining_hits' => (string) 150, + 'hourly_limit' => (string) 150, + 'reset_time' => datetime_convert('UTC','UTC','now + 1 hour',ATOM_TIME), + 'reset_time_in_seconds' => strtotime('now + 1 hour') + ); + + return api_apply_template('ratelimit', $type, array('$hash' => $hash)); + + } + api_register_func('api/account/rate_limit_status','api_account_rate_limit_status',true);