2008-07-14 17:09:49 +09:00
< ? php
/*
* Laconica - a distributed open - source microblogging tool
* Copyright ( C ) 2008 , Controlez - Vous , Inc .
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*/
if ( ! defined ( 'LACONICA' )) { exit ( 1 ); }
2008-07-15 12:18:12 +09:00
require_once ( INSTALLDIR . '/lib/twitterapi.php' );
2008-07-15 13:31:21 +09:00
class TwitapifriendshipsAction extends TwitterapiAction {
2008-07-14 17:09:49 +09:00
function create ( $args , $apidata ) {
parent :: handle ( $args );
2008-07-18 13:13:23 +09:00
2008-07-18 13:23:52 +09:00
$id = $apidata [ 'api_arg' ];
2008-07-18 13:13:23 +09:00
$other = $this -> get_user ( $id );
if ( ! $other ) {
$this -> client_error ( _ ( 'No such user' ));
2008-07-18 13:34:56 +09:00
exit ();
2008-07-18 13:13:23 +09:00
return ;
}
$user = $apidata [ 'user' ];
if ( $user -> isSubscribed ( $other )) {
$this -> client_error ( _ ( 'Already subscribed.' ));
2008-07-18 13:34:56 +09:00
exit ();
2008-07-18 13:13:23 +09:00
return ;
}
$sub = new Subscription ();
2008-07-18 13:37:35 +09:00
$sub -> query ( 'BEGIN' );
2008-07-18 13:13:23 +09:00
$sub -> subscriber = $user -> id ;
$sub -> subscribed = $other -> id ;
2008-07-18 13:51:50 +09:00
$sub -> created = DB_DataObject_Cast :: dateTime (); # current time
2008-07-18 13:13:23 +09:00
$result = $sub -> insert ();
if ( ! $result ) {
$this -> server_error ( _ ( 'Could not subscribe' ));
2008-07-18 13:34:56 +09:00
exit ();
2008-07-18 13:13:23 +09:00
return ;
}
2008-07-18 13:37:35 +09:00
$sub -> query ( 'COMMIT' );
2008-07-18 13:13:23 +09:00
mail_subscribe_notify ( $other , $user );
2008-07-18 13:34:56 +09:00
$type = $apidata [ 'content-type' ];
$this -> init_document ( $type );
2008-07-18 13:13:23 +09:00
$this -> show_profile ( $other );
2008-07-18 13:34:56 +09:00
$this -> end_document ( $type );
2008-07-14 17:09:49 +09:00
exit ();
}
2008-07-18 13:13:23 +09:00
//destroy
//
//Discontinues friendship with the user specified in the ID parameter as the authenticating user. Returns the un-friended user in the requested format when successful. Returns a string describing the failure condition when unsuccessful.
//
//URL: http://twitter.com/friendships/destroy/id.format
//
//Formats: xml, json
//
//Parameters:
//
//* id. Required. The ID or screen name of the user with whom to discontinue friendship. Ex: http://twitter.com/friendships/destroy/12345.json or http://twitter.com/friendships/destroy/bob.xml
2008-07-14 17:09:49 +09:00
function destroy ( $args , $apidata ) {
parent :: handle ( $args );
2008-07-18 13:23:52 +09:00
$id = $apidata [ 'api_arg' ];
2008-07-18 13:13:23 +09:00
# We can't subscribe to a remote person, but we can unsub
$other = $this -> get_profile ( $id );
$user = $apidata [ 'user' ];
$sub = new Subscription ();
$sub -> subscriber = $user -> id ;
$sub -> subscribed = $other -> id ;
if ( $sub -> fetch ( TRUE )) {
2008-07-18 13:37:35 +09:00
$sub -> query ( 'BEGIN' );
2008-07-18 13:13:23 +09:00
$sub -> delete ();
2008-07-18 13:37:35 +09:00
$sub -> query ( 'COMMIT' );
2008-07-18 13:49:05 +09:00
} else {
$this -> client_error ( _ ( 'Not subscribed' ));
exit ();
2008-07-18 13:13:23 +09:00
}
2008-07-18 13:34:56 +09:00
$type = $apidata [ 'content-type' ];
$this -> init_document ( $type );
2008-07-18 13:13:23 +09:00
$this -> show_profile ( $other );
2008-07-18 13:34:56 +09:00
$this -> end_document ( $type );
2008-07-14 17:09:49 +09:00
exit ();
}
2008-07-18 13:13:23 +09:00
// Tests if a friendship exists between two users.
//
//
// URL: http://twitter.com/friendships/exists.format
//
// Formats: xml, json, none
//
// Parameters:
//
// * user_a. Required. The ID or screen_name of the first user to test friendship for.
// * user_b. Required. The ID or screen_name of the second user to test friendship for.
// * Ex: http://twitter.com/friendships/exists.xml?user_a=alice&user_b=bob
2008-07-14 17:09:49 +09:00
function exists ( $args , $apidata ) {
parent :: handle ( $args );
2008-07-18 13:13:23 +09:00
$user_a_id = $this -> trimmed ( 'user_a' );
$user_b_id = $this -> trimmed ( 'user_b' );
$user_a = $this -> get_profile ( $user_a_id );
$user_b = $this -> get_profile ( $user_b_id );
if ( ! $user_a || ! $user_b ) {
$this -> client_error ( _ ( 'No such user' ));
return ;
}
if ( $user_a -> isSubscribed ( $user_b )) {
$result = 'true' ;
} else {
$result = 'false' ;
}
switch ( $apidata [ 'content-type' ]) {
case 'xml' :
common_start_xml ();
common_element ( 'friends' , NULL , $result );
common_end_xml ();
break ;
case 'json' :
print json_encode ( $result );
print " \n " ;
break ;
default :
print $result ;
break ;
}
}
function get_profile ( $id ) {
if ( is_numeric ( $id )) {
return Profile :: staticGet ( $id );
} else {
$user = User :: staticGet ( 'nickname' , $id );
2008-07-18 13:20:30 +09:00
if ( $user ) {
return $user -> getProfile ();
} else {
return NULL ;
}
2008-07-18 13:13:23 +09:00
}
}
function get_user ( $id ) {
if ( is_numeric ( $id )) {
return User :: staticGet ( $id );
} else {
2008-07-18 13:20:30 +09:00
return User :: staticGet ( 'nickname' , $id );
2008-07-18 13:13:23 +09:00
}
2008-07-14 17:09:49 +09:00
}
}