API: fix friends profile, statuses etc
This commit is contained in:
		
					parent
					
						
							
								1861dc1fae
							
						
					
				
			
			
				commit
				
					
						fcf45db075
					
				
			
		
					 1 changed files with 75 additions and 40 deletions
				
			
		
							
								
								
									
										115
									
								
								include/api.php
									
										
									
									
									
								
							
							
						
						
									
										115
									
								
								include/api.php
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
<?php
 | 
			
		||||
	require_once("bbcode.php");
 | 
			
		||||
	require_once("datetime.php");
 | 
			
		||||
	require_once("conversation.php");
 | 
			
		||||
	
 | 
			
		||||
	/* 
 | 
			
		||||
	 * Twitter-Like API
 | 
			
		||||
| 
						 | 
				
			
			@ -8,7 +9,7 @@
 | 
			
		|||
	 */
 | 
			
		||||
 | 
			
		||||
	$API = Array();
 | 
			
		||||
	 
 | 
			
		||||
	$called_api = Null; 
 | 
			
		||||
 | 
			
		||||
	function api_date($str){
 | 
			
		||||
		//Wed May 23 06:01:13 +0000 2007
 | 
			
		||||
| 
						 | 
				
			
			@ -103,9 +104,10 @@
 | 
			
		|||
	 *  MAIN API ENTRY POINT  *
 | 
			
		||||
	 **************************/
 | 
			
		||||
	function api_call(&$a){
 | 
			
		||||
		GLOBAL $API;
 | 
			
		||||
		GLOBAL $API, $called_api;
 | 
			
		||||
		foreach ($API as $p=>$info){
 | 
			
		||||
			if (strpos($a->query_string, $p)===0){
 | 
			
		||||
				$called_api= explode("/",$p);
 | 
			
		||||
				#unset($_SERVER['PHP_AUTH_USER']);
 | 
			
		||||
				if ($info['auth']===true && local_user()===false) {
 | 
			
		||||
						api_login($a);
 | 
			
		||||
| 
						 | 
				
			
			@ -131,7 +133,7 @@
 | 
			
		|||
						return '<?xml version="1.0" encoding="UTF-8"?>'."\n".$r;
 | 
			
		||||
						break;
 | 
			
		||||
					case "json": 
 | 
			
		||||
						header ("Content-Type: application/json");  
 | 
			
		||||
						//header ("Content-Type: application/json");  
 | 
			
		||||
						foreach($r as $rr)
 | 
			
		||||
						    return json_encode($rr);
 | 
			
		||||
						break;
 | 
			
		||||
| 
						 | 
				
			
			@ -193,6 +195,7 @@
 | 
			
		|||
	 * Returns user info array.
 | 
			
		||||
	 */
 | 
			
		||||
	function api_get_user(&$a, $contact_id = Null){
 | 
			
		||||
		global $called_api;
 | 
			
		||||
		$user = null;
 | 
			
		||||
		$extra_query = "";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -209,16 +212,20 @@
 | 
			
		|||
		if(is_null($user) && x($_GET, 'screen_name')) {
 | 
			
		||||
			$user = dbesc($_GET['screen_name']);	
 | 
			
		||||
			$extra_query = "AND `contact`.`nick` = '%s' ";
 | 
			
		||||
			if (local_user()!==false)  $extra_query .= "AND `contact`.`uid`=".intval(local_user());
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if (is_null($user) && $a->argc > 3){
 | 
			
		||||
			list($user, $null) = explode(".",$a->argv[3]);
 | 
			
		||||
		if (is_null($user) && $a->argc > (count($called_api)-1)){
 | 
			
		||||
			$argid = count($called_api);
 | 
			
		||||
			list($user, $null) = explode(".",$a->argv[$argid]);
 | 
			
		||||
			if(is_numeric($user)){
 | 
			
		||||
				$user = intval($user);
 | 
			
		||||
				$extra_query = "AND `contact`.`id` = %d ";
 | 
			
		||||
			} else {
 | 
			
		||||
				$user = dbesc($user);
 | 
			
		||||
				$extra_query = "AND `contact`.`nick` = '%s' ";
 | 
			
		||||
				if (local_user()!==false)  $extra_query .= "AND `contact`.`uid`=".intval(local_user());
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			@ -301,6 +308,7 @@
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		$ret = Array(
 | 
			
		||||
			'self' => intval($uinfo[0]['self']),
 | 
			
		||||
			'uid' => intval($uinfo[0]['uid']),
 | 
			
		||||
			'id' => intval($uinfo[0]['cid']),
 | 
			
		||||
			'name' => $uinfo[0]['name'],
 | 
			
		||||
| 
						 | 
				
			
			@ -321,7 +329,7 @@
 | 
			
		|||
			'followers_count' => intval($countfollowers),
 | 
			
		||||
			'favourites_count' => intval($starred),
 | 
			
		||||
			'contributors_enabled' => false,
 | 
			
		||||
			'follow_request_sent' => false,
 | 
			
		||||
			'follow_request_sent' => true,
 | 
			
		||||
			'profile_background_color' => 'cfe8f6',
 | 
			
		||||
			'profile_text_color' => '000000',
 | 
			
		||||
			'profile_link_color' => 'FF8500',
 | 
			
		||||
| 
						 | 
				
			
			@ -616,6 +624,7 @@
 | 
			
		|||
		$user_info = api_get_user($a);
 | 
			
		||||
		// get last newtork messages
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		// params
 | 
			
		||||
		$count = (x($_REQUEST,'count')?$_REQUEST['count']:20);
 | 
			
		||||
		$page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
 | 
			
		||||
| 
						 | 
				
			
			@ -664,6 +673,12 @@
 | 
			
		|||
		$user_info = api_get_user($a);
 | 
			
		||||
		// get last newtork messages
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		logger("api_statuses_user_timeline: local_user: ". local_user() .
 | 
			
		||||
			   "\nuser_info: ".print_r($user_info, true) .
 | 
			
		||||
			   "\n_REQUEST:  ".print_r($_REQUEST, true),
 | 
			
		||||
			   LOGGER_DEBUG);
 | 
			
		||||
 | 
			
		||||
		// params
 | 
			
		||||
		$count = (x($_REQUEST,'count')?$_REQUEST['count']:20);
 | 
			
		||||
		$page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
 | 
			
		||||
| 
						 | 
				
			
			@ -672,6 +687,7 @@
 | 
			
		|||
		
 | 
			
		||||
		$start = $page*$count;
 | 
			
		||||
 | 
			
		||||
		if ($user_info['self']==1) $sql_extra = "AND `item`.`wall` = 1 ";
 | 
			
		||||
 | 
			
		||||
		$r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
 | 
			
		||||
			`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
 | 
			
		||||
| 
						 | 
				
			
			@ -679,14 +695,15 @@
 | 
			
		|||
			`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
 | 
			
		||||
			FROM `item`, `contact`
 | 
			
		||||
			WHERE `item`.`uid` = %d
 | 
			
		||||
			AND `item`.`contact-id` = %d
 | 
			
		||||
			AND `item`.`visible` = 1 AND `item`.`deleted` = 0
 | 
			
		||||
			AND `item`.`wall` = 1
 | 
			
		||||
			AND `contact`.`id` = `item`.`contact-id`
 | 
			
		||||
			AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
 | 
			
		||||
			$sql_extra
 | 
			
		||||
			AND `item`.`id`>%d
 | 
			
		||||
			ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
 | 
			
		||||
			intval($user_info['uid']),
 | 
			
		||||
			intval(local_user()),
 | 
			
		||||
			intval($user_info['id']),
 | 
			
		||||
			intval($since_id),
 | 
			
		||||
			intval($start),	intval($count)
 | 
			
		||||
		);
 | 
			
		||||
| 
						 | 
				
			
			@ -711,33 +728,41 @@
 | 
			
		|||
		if (local_user()===false) return false;
 | 
			
		||||
		
 | 
			
		||||
		$user_info = api_get_user($a);
 | 
			
		||||
		// get last newtork messages
 | 
			
		||||
		// in friendika starred item are private
 | 
			
		||||
		// return favorites only for self
 | 
			
		||||
		logger('api_favorites: self:' . $user_info['self']);
 | 
			
		||||
		
 | 
			
		||||
		// params
 | 
			
		||||
		$count = (x($_GET,'count')?$_GET['count']:20);
 | 
			
		||||
		$page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
 | 
			
		||||
		if ($page<0) $page=0;
 | 
			
		||||
		if ($user_info['self']==0) {
 | 
			
		||||
			$ret = array();
 | 
			
		||||
		} else {
 | 
			
		||||
			
 | 
			
		||||
			
 | 
			
		||||
			// params
 | 
			
		||||
			$count = (x($_GET,'count')?$_GET['count']:20);
 | 
			
		||||
			$page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
 | 
			
		||||
			if ($page<0) $page=0;
 | 
			
		||||
			
 | 
			
		||||
			$start = $page*$count;
 | 
			
		||||
 | 
			
		||||
			$r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
 | 
			
		||||
				`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`
 | 
			
		||||
				WHERE `item`.`uid` = %d
 | 
			
		||||
				AND `item`.`visible` = 1 AND `item`.`deleted` = 0
 | 
			
		||||
				AND `item`.`starred` = 1
 | 
			
		||||
				AND `contact`.`id` = `item`.`contact-id`
 | 
			
		||||
				AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
 | 
			
		||||
				$sql_extra
 | 
			
		||||
				ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
 | 
			
		||||
				intval($user_info['uid']),
 | 
			
		||||
				intval($start),	intval($count)
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
			$ret = api_format_items($r,$user_info);
 | 
			
		||||
		
 | 
			
		||||
		$start = $page*$count;
 | 
			
		||||
 | 
			
		||||
		$r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
 | 
			
		||||
			`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`
 | 
			
		||||
			WHERE `item`.`uid` = %d
 | 
			
		||||
			AND `item`.`visible` = 1 AND `item`.`deleted` = 0
 | 
			
		||||
			AND `item`.`starred` = 1
 | 
			
		||||
			AND `contact`.`id` = `item`.`contact-id`
 | 
			
		||||
			AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
 | 
			
		||||
			$sql_extra
 | 
			
		||||
			ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
 | 
			
		||||
			intval($user_info['uid']),
 | 
			
		||||
			intval($start),	intval($count)
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		$ret = api_format_items($r,$user_info);
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		$data = array('$statuses' => $ret);
 | 
			
		||||
		switch($type){
 | 
			
		||||
| 
						 | 
				
			
			@ -762,6 +787,7 @@
 | 
			
		|||
		$ret = Array();
 | 
			
		||||
 | 
			
		||||
		foreach($r as $item) {
 | 
			
		||||
			localize_item($item);
 | 
			
		||||
			$status_user = (($item['cid']==$user_info['id'])?$user_info: api_item_get_user($a,$item));
 | 
			
		||||
			$status = array(
 | 
			
		||||
				'created_at'=> api_date($item['created']),
 | 
			
		||||
| 
						 | 
				
			
			@ -819,15 +845,21 @@
 | 
			
		|||
		if (local_user()===false) return false;
 | 
			
		||||
		$user_info = api_get_user($a);
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		// friends and followers only for self
 | 
			
		||||
		if ($user_info['self']==0){
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if (x($_GET,'cursor') && $_GET['cursor']=='undefined'){
 | 
			
		||||
			/* this is to stop Hotot to load friends multiple times
 | 
			
		||||
			*  I'm not sure if I'm missing return something or
 | 
			
		||||
			*  is a bug in hotot. Workaround, meantime
 | 
			
		||||
			*/
 | 
			
		||||
			
 | 
			
		||||
			$ret=Array();
 | 
			
		||||
			$data = array('$users' => $ret);
 | 
			
		||||
			return  api_apply_template("friends", $type, $data);
 | 
			
		||||
			/*$ret=Array();
 | 
			
		||||
			return array('$users' => $ret);*/
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if($qtype == 'friends')
 | 
			
		||||
| 
						 | 
				
			
			@ -845,15 +877,18 @@
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
		$data = array('$users' => $ret);
 | 
			
		||||
		return  api_apply_template("friends", $type, $data);
 | 
			
		||||
		return array('$users' => $ret);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	function api_statuses_friends(&$a, $type){
 | 
			
		||||
		return api_statuses_f($a,$type,"friends");
 | 
			
		||||
		$data =  api_statuses_f($a,$type,"friends");
 | 
			
		||||
		if ($data===false) return false;
 | 
			
		||||
		return  api_apply_template("friends", $type, $data);
 | 
			
		||||
	}
 | 
			
		||||
	function api_statuses_followers(&$a, $type){
 | 
			
		||||
		return api_statuses_f($a,$type,"followers");
 | 
			
		||||
		$data = api_statuses_f($a,$type,"followers");
 | 
			
		||||
		if ($data===false) return false;
 | 
			
		||||
		return  api_apply_template("friends", $type, $data);
 | 
			
		||||
	}
 | 
			
		||||
	api_register_func('api/statuses/friends','api_statuses_friends',true);
 | 
			
		||||
	api_register_func('api/statuses/followers','api_statuses_followers',true);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue