2017-05-28 12:09:20 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Friends controller
|
|
|
|
*
|
|
|
|
* @author Pierre HUBERT
|
|
|
|
*/
|
|
|
|
|
|
|
|
class friendsController{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get friends list
|
|
|
|
*
|
|
|
|
* @url POST /friends/getList
|
|
|
|
*/
|
|
|
|
public function getFriendsList(){
|
2018-03-05 18:04:21 +00:00
|
|
|
|
2017-05-28 12:09:20 +00:00
|
|
|
user_login_required(); //Login required
|
|
|
|
|
2018-03-05 18:04:21 +00:00
|
|
|
//Check if the user want all the informations about its friends or not
|
|
|
|
$all_infos = false;
|
|
|
|
if(isset($_POST['complete']))
|
|
|
|
$all_infos = $_POST['complete'] === "true";
|
|
|
|
|
2017-05-28 12:09:20 +00:00
|
|
|
//Try to get friends list
|
2017-05-31 14:49:25 +00:00
|
|
|
$friendsList = CS::get()->components->friends->getList(userID);
|
2017-05-28 12:09:20 +00:00
|
|
|
|
|
|
|
//Check for errors
|
|
|
|
if($friendsList === false)
|
|
|
|
Rest_fatal_error(500, "Couldn't get friends list !");
|
|
|
|
|
2018-02-03 14:25:58 +00:00
|
|
|
//Process the list
|
|
|
|
$api_list = array();
|
|
|
|
foreach($friendsList as $friend){
|
|
|
|
|
|
|
|
//Parse friend informations
|
2018-03-05 18:04:21 +00:00
|
|
|
$api_list[] = $this->parseFriendAPI($friend, $all_infos);
|
2018-02-03 14:25:58 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2017-11-19 12:27:00 +00:00
|
|
|
//Update the last activity of the user
|
2019-01-11 11:03:59 +00:00
|
|
|
update_last_user_activity_if_allowed();
|
2018-02-03 14:25:58 +00:00
|
|
|
|
2017-05-28 12:09:20 +00:00
|
|
|
//Return list
|
2018-02-03 14:25:58 +00:00
|
|
|
return $api_list;
|
2017-05-28 12:09:20 +00:00
|
|
|
}
|
|
|
|
|
2018-03-05 18:04:21 +00:00
|
|
|
/**
|
|
|
|
* Get the list of friends of a specific user
|
|
|
|
*
|
|
|
|
* @url POST /friends/get_user_list
|
|
|
|
*/
|
|
|
|
public function get_user_list(){
|
|
|
|
|
2018-03-05 18:24:42 +00:00
|
|
|
//Get the ID of the target user
|
|
|
|
$userID = getPostUserID("userID");
|
|
|
|
|
|
|
|
//Check whether the friends list of the user is public or not
|
|
|
|
if(!components()->user->userAllowed(userID, $userID))
|
|
|
|
Rest_fatal_error(401, "You are not allowed to access these informations !");
|
|
|
|
|
|
|
|
//Check if the friendlist of the user is public or not
|
|
|
|
if(!components()->user->isFriendsListPublic($userID))
|
|
|
|
Rest_fatal_error(401, "The friends list of the user is not public !");
|
|
|
|
|
|
|
|
//Get the list of friend of the user
|
|
|
|
$friends = CS::get()->components->friends->getList($userID);
|
|
|
|
|
|
|
|
//Process and return it
|
|
|
|
$IDs = array();
|
|
|
|
|
|
|
|
foreach($friends as $friend){
|
2018-03-11 08:58:49 +00:00
|
|
|
|
|
|
|
//Return only accepted friendships
|
|
|
|
if($friend->isAccepted())
|
|
|
|
$IDs[] = $friend->getFriendID();
|
|
|
|
|
2018-03-05 18:24:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return $IDs;
|
2018-03-05 18:04:21 +00:00
|
|
|
}
|
|
|
|
|
2018-03-11 09:57:01 +00:00
|
|
|
/**
|
|
|
|
* Get friendship informations about a specific friend
|
|
|
|
*
|
|
|
|
* @url POST /friends/get_single_infos
|
|
|
|
*/
|
|
|
|
public function get_single_infos(){
|
|
|
|
|
|
|
|
user_login_required();
|
|
|
|
|
|
|
|
//Get friendID
|
|
|
|
$friendID = getPostUserID('friendID');
|
|
|
|
|
|
|
|
//Get informations about the friendship
|
|
|
|
$list = components()->friends->getList(userID, $friendID);
|
|
|
|
|
|
|
|
//Check if the friend was found or not
|
|
|
|
if(count($list) == 0)
|
|
|
|
Rest_fatal_error(404, "Specified friend not found !");
|
|
|
|
|
|
|
|
//Return informations about the friend
|
|
|
|
return $this->parseFriendAPI($list[0], true);
|
|
|
|
}
|
|
|
|
|
2017-12-21 18:24:25 +00:00
|
|
|
/**
|
|
|
|
* Send a friendship request
|
|
|
|
*
|
|
|
|
* @url POST /friends/sendRequest
|
|
|
|
*/
|
|
|
|
public function sendRequest(){
|
|
|
|
user_login_required(); //Login required
|
|
|
|
|
2017-12-25 08:17:38 +00:00
|
|
|
//Get target ID
|
|
|
|
$friendID = getPostUserID('friendID');
|
2017-12-24 15:48:08 +00:00
|
|
|
|
2018-08-26 12:58:01 +00:00
|
|
|
//Check if the current user is requesting himself as friend
|
|
|
|
if($friendID == userID)
|
|
|
|
Rest_fatal_error(401, "You can not become a friend to yourself!");
|
|
|
|
|
2017-12-21 18:24:25 +00:00
|
|
|
//Check if the two persons are already friend
|
|
|
|
if(CS::get()->components->friends->are_friend(userID, $friendID))
|
|
|
|
Rest_fatal_error(401, "The two personns are already friend !");
|
|
|
|
|
|
|
|
//Check if there is already a pending request
|
|
|
|
//Check if the current user has sent a request to the other user
|
|
|
|
if(CS::get()->components->friends->sent_request(userID, $friendID))
|
|
|
|
Rest_fatal_error(401, "You have already sent a friendship request to this personn !");
|
|
|
|
|
|
|
|
//Check if the current user has received a friendship request
|
|
|
|
if(CS::get()->components->friends->sent_request($friendID, userID))
|
|
|
|
Rest_fatal_error(401, "You have already received a friendship request from this personn !");
|
|
|
|
|
|
|
|
//We can now create the request
|
|
|
|
if(!CS::get()->components->friends->send_request(userID, $friendID))
|
|
|
|
Rest_fatal_error(500, "Couldn't create friendship request !");
|
|
|
|
|
2018-03-03 13:28:29 +00:00
|
|
|
//Create notification
|
|
|
|
create_friendship_notification(userID, $friendID, Notification::SENT_FRIEND_REQUEST);
|
|
|
|
|
2017-12-21 18:24:25 +00:00
|
|
|
//Success
|
|
|
|
return array("success" => "The friendship request has been created !");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2017-12-23 08:03:00 +00:00
|
|
|
/**
|
2018-03-03 13:28:29 +00:00
|
|
|
* Remove a previously sent frienship request
|
2017-12-23 08:03:00 +00:00
|
|
|
*
|
|
|
|
* @url POST /friends/removeRequest
|
|
|
|
*/
|
|
|
|
public function removeRequest(){
|
|
|
|
user_login_required(); //Login required
|
|
|
|
|
2017-12-25 08:17:38 +00:00
|
|
|
//Get friendID
|
|
|
|
$friendID = getPostUserID('friendID');
|
2017-12-23 08:03:00 +00:00
|
|
|
|
|
|
|
//Check if the current user has sent a request to the other user
|
|
|
|
if(!CS::get()->components->friends->sent_request(userID, $friendID))
|
|
|
|
Rest_fatal_error(401, "You didn't send a friendship request to this user !");
|
|
|
|
|
|
|
|
//Try to remove the friendship request
|
|
|
|
if(!CS::get()->components->friends->remove_request(userID, $friendID))
|
|
|
|
Rest_fatal_error(500, "An error occured while trying to remove the friendship request !");
|
|
|
|
|
2018-03-03 13:28:29 +00:00
|
|
|
//Delete all related notifications
|
|
|
|
delete_notifications_friendship_request(userID, $friendID);
|
|
|
|
|
2017-12-23 08:03:00 +00:00
|
|
|
//This is a success
|
|
|
|
return array("success" => "The friendship request has been removed!");
|
|
|
|
}
|
|
|
|
|
2017-06-04 14:36:12 +00:00
|
|
|
/**
|
|
|
|
* Respond to a friendship request
|
|
|
|
*
|
|
|
|
* @url POST /friends/respondRequest
|
|
|
|
*/
|
|
|
|
public function respondRequest(){
|
|
|
|
user_login_required(); //Login required
|
|
|
|
|
|
|
|
//Check parametres
|
|
|
|
if(!isset($_POST["friendID"]) OR !isset($_POST['accept']))
|
2017-06-19 08:36:39 +00:00
|
|
|
Rest_fatal_error(400, "Please check your parametres !");
|
2017-06-04 14:36:12 +00:00
|
|
|
|
|
|
|
//Extract informations and process request
|
2017-06-18 08:07:52 +00:00
|
|
|
$friendID = toInt($_POST['friendID']);
|
2017-06-04 14:36:12 +00:00
|
|
|
$acceptRequest = $_POST['accept'] == "true";
|
|
|
|
|
|
|
|
//Try to perform request
|
|
|
|
$result = CS::get()->components->friends->respondRequest(userID, $friendID, $acceptRequest);
|
|
|
|
|
|
|
|
//Return result
|
|
|
|
if($result != true)
|
|
|
|
Rest_fatal_error(500, "Couldn't respond to friendship request !");
|
|
|
|
|
2018-03-03 13:28:29 +00:00
|
|
|
//Send notification
|
|
|
|
create_friendship_notification(userID, $friendID,
|
|
|
|
$acceptRequest ? Notification::ACCEPTED_FRIEND_REQUEST : Notification::REJECTED_FRIEND_REQUEST
|
|
|
|
);
|
|
|
|
|
2017-06-04 14:36:12 +00:00
|
|
|
//Else it is a success
|
|
|
|
return array("success" => "A response was given to friendship request !");
|
|
|
|
}
|
|
|
|
|
2017-12-04 19:18:30 +00:00
|
|
|
/**
|
|
|
|
* Delete a friend from the list
|
|
|
|
*
|
|
|
|
* @url POST /friends/remove
|
|
|
|
*/
|
2017-12-20 17:53:00 +00:00
|
|
|
public function delete(){
|
|
|
|
user_login_required(); //Login required
|
2017-12-04 19:18:30 +00:00
|
|
|
|
2017-12-20 17:53:00 +00:00
|
|
|
//Check input parametres
|
|
|
|
if(!isset($_POST['friendID']))
|
|
|
|
Rest_fatal_error(400, "Please specify the ID of the friend to delete !");
|
2017-12-04 19:18:30 +00:00
|
|
|
|
|
|
|
//Delete the friend from the list
|
|
|
|
$friendID = toInt($_POST['friendID']);
|
|
|
|
$result = CS::get()->components->friends->remove(userID, $friendID);
|
|
|
|
|
2018-03-03 13:28:29 +00:00
|
|
|
//Check if the operation is a success
|
2017-12-04 19:18:30 +00:00
|
|
|
if(!$result)
|
|
|
|
Rest_fatal_error(500, "Couldn't remove user from the friendlist for an unexcepted reason !");
|
2018-03-03 13:28:29 +00:00
|
|
|
|
|
|
|
//Delete any related notification
|
|
|
|
delete_notifications_friendship_request(userID, $friendID);
|
|
|
|
|
|
|
|
//Success
|
|
|
|
return array("success" => "The friend was removed from the list !");
|
2017-12-20 17:53:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the status of a friendship
|
|
|
|
*
|
|
|
|
* Check if the users are friends, or this there is a pending request...
|
|
|
|
*
|
|
|
|
* @url POST /friends/getStatus
|
|
|
|
*/
|
|
|
|
public function getStatus(){
|
|
|
|
|
|
|
|
user_login_required(); //Login required
|
|
|
|
|
2017-12-25 08:17:38 +00:00
|
|
|
//Get friendID
|
2017-12-24 16:45:05 +00:00
|
|
|
$friendID = getPostUserID('friendID');
|
2017-12-20 17:53:00 +00:00
|
|
|
|
|
|
|
//Prepare the response
|
|
|
|
$response = array(
|
|
|
|
"are_friend" => false,
|
|
|
|
"sent_request" => false,
|
|
|
|
"received_request" => false,
|
2017-12-21 17:49:50 +00:00
|
|
|
"following" => false,
|
2017-12-20 17:53:00 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
//Check if the two personns are friend
|
|
|
|
$response['are_friend'] =
|
|
|
|
CS::get()->components->friends->are_friend(userID, $friendID);
|
|
|
|
|
|
|
|
//Perform next check only if the personns are not already friend
|
|
|
|
if(!$response['are_friend']){
|
|
|
|
|
|
|
|
//Check if the current user has sent a request to the other user
|
|
|
|
if(CS::get()->components->friends->sent_request(userID, $friendID))
|
|
|
|
$response["sent_request"] = true;
|
|
|
|
|
|
|
|
//Check if the current user has received a friendship request
|
|
|
|
if(CS::get()->components->friends->sent_request($friendID, userID))
|
|
|
|
$response["received_request"] = true;
|
|
|
|
}
|
2017-12-21 17:49:50 +00:00
|
|
|
else {
|
|
|
|
|
|
|
|
//Perform the check specific to the real friend
|
2017-12-21 17:55:20 +00:00
|
|
|
//Check if the user is following his friend or not
|
2017-12-21 17:49:50 +00:00
|
|
|
if(CS::get()->components->friends->is_following(userID, $friendID))
|
|
|
|
$response['following'] = true;
|
|
|
|
|
|
|
|
}
|
2017-12-20 17:53:00 +00:00
|
|
|
|
|
|
|
//Return the response
|
|
|
|
return $response;
|
|
|
|
}
|
2017-12-23 14:25:18 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Update the following status of a friendship
|
|
|
|
*
|
|
|
|
* @url POST /friends/setFollowing
|
|
|
|
*/
|
|
|
|
public function update_following(){
|
|
|
|
user_login_required(); //Login required
|
|
|
|
|
|
|
|
//Check if the a friendID has been specified
|
2017-12-25 08:17:38 +00:00
|
|
|
$friendID = getPostUserID('friendID');
|
2017-12-23 14:25:18 +00:00
|
|
|
|
|
|
|
//Check if a follow status has been specified
|
|
|
|
if(!isset($_POST['follow']))
|
|
|
|
Rest_fatal_error(400, "Please specify a follow status!");
|
|
|
|
|
|
|
|
$following = $_POST['follow'] === "true";
|
|
|
|
|
|
|
|
//Check if the two personns are friend
|
|
|
|
if(!CS::get()->components->friends->are_friend(userID, $friendID))
|
|
|
|
Rest_fatal_error(401, "You are not friend with this personn!");
|
|
|
|
|
|
|
|
//Update following status
|
|
|
|
if(!CS::get()->components->friends->set_following(userID, $friendID, $following))
|
|
|
|
Rest_fatal_error(500, "Couldn't update friendship status!");
|
|
|
|
|
|
|
|
//Success
|
|
|
|
return array("success" => "Friendship status has been updated!");
|
|
|
|
}
|
2018-02-03 14:25:58 +00:00
|
|
|
|
2018-03-11 15:40:41 +00:00
|
|
|
/**
|
|
|
|
* Update the post text authorization status
|
|
|
|
*
|
|
|
|
* @url POST /friends/set_can_post_texts
|
|
|
|
*/
|
|
|
|
public function update_can_post_texts(){
|
|
|
|
|
|
|
|
user_login_required(); //Login required
|
|
|
|
|
|
|
|
//Check if the a friendID has been specified
|
|
|
|
$friendID = getPostUserID('friendID');
|
|
|
|
|
|
|
|
//Check if a follow status has been specified
|
|
|
|
if(!isset($_POST['allow']))
|
|
|
|
Rest_fatal_error(400, "Please specify an authorization status!");
|
|
|
|
|
|
|
|
$can_post_texts = $_POST['allow'] === "true";
|
|
|
|
|
|
|
|
//Check if the two personns are friend
|
|
|
|
if(!CS::get()->components->friends->are_friend(userID, $friendID))
|
|
|
|
Rest_fatal_error(401, "You are not friend with this personn!");
|
|
|
|
|
|
|
|
//Update status
|
|
|
|
if(!components()->friends->set_can_post_texts(userID, $friendID, $can_post_texts))
|
2020-01-01 14:01:44 +00:00
|
|
|
Rest_fatal_error(500, "Could not update friendship status !");
|
2018-03-11 15:40:41 +00:00
|
|
|
|
|
|
|
//Success
|
|
|
|
return array("success" => "Updated authorization status !");
|
|
|
|
}
|
|
|
|
|
2018-02-03 14:25:58 +00:00
|
|
|
/**
|
|
|
|
* Convert a friend object into an object readable by the api
|
|
|
|
*
|
|
|
|
* @param Friend $friend The input friend
|
2018-03-05 18:04:21 +00:00
|
|
|
* @param bool $all_infos Specify if whether all the informations about the
|
|
|
|
* friendship should be returned or not
|
2018-02-03 14:25:58 +00:00
|
|
|
* @return array Informations about the friend readable by the api
|
|
|
|
*/
|
2018-05-13 18:15:11 +00:00
|
|
|
public static function parseFriendAPI(Friend $friend, bool $all_infos = FALSE) : array {
|
2018-02-03 14:25:58 +00:00
|
|
|
|
|
|
|
//Parse informations about the friend
|
|
|
|
$data = array(
|
|
|
|
"ID_friend" => $friend->getFriendID(),
|
|
|
|
"accepted" => $friend->isAccepted() ? 1 : 0,
|
|
|
|
"time_last_activity" => $friend->getLastActivityTime()
|
|
|
|
);
|
|
|
|
|
2018-03-05 18:04:21 +00:00
|
|
|
//Check if all the informations about the friendship should be returned or not
|
|
|
|
if($all_infos){
|
|
|
|
|
|
|
|
//Following status
|
|
|
|
$data["following"] = $friend->isFollowing() ? 1 : 0;
|
|
|
|
|
|
|
|
//Can posts text on page
|
|
|
|
$data["canPostTexts"] = $friend->canPostTexts();
|
|
|
|
}
|
|
|
|
|
2018-02-03 14:25:58 +00:00
|
|
|
return $data;
|
|
|
|
}
|
2017-05-28 12:09:20 +00:00
|
|
|
}
|