mirror of
				https://github.com/pierre42100/ComunicAPI
				synced 2025-10-31 02:04:53 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			150 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Friends component
 | |
|  *
 | |
|  * @author Pierre HUBERT
 | |
|  */
 | |
| 
 | |
| class friends {
 | |
| 
 | |
| 	/**
 | |
| 	 * @var String $friendsTable The name of the table for friends
 | |
| 	 */
 | |
| 	private $friendsTable = "amis";
 | |
| 
 | |
| 	/**
 | |
| 	 * Public construcor
 | |
| 	 */
 | |
| 	public function __construct(){
 | |
| 		//Nothing now
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get and returns the list of the friends of a user
 | |
| 	 *
 | |
| 	 * @param Integer $userID The ID of the user
 | |
| 	 * @return Array The list of the friends of the user
 | |
| 	 */
 | |
| 	public function getList($userID) : array {
 | |
| 		
 | |
| 		//Prepare the request on the database
 | |
| 		$tableName = $this->friendsTable.", utilisateurs";
 | |
| 		$condition = "WHERE ID_personne = ? AND amis.ID_amis = utilisateurs.ID ORDER BY utilisateurs.last_activity DESC";
 | |
| 		$condValues = array($userID);
 | |
| 
 | |
| 		//Specify which fields to get
 | |
| 		$fieldsList = array(
 | |
| 			"utilisateurs.last_activity",
 | |
| 			$this->friendsTable.".ID_amis",
 | |
| 			$this->friendsTable.".actif",
 | |
| 			$this->friendsTable.".abonnement",
 | |
| 		);
 | |
| 
 | |
| 		//Perform the request on the database
 | |
| 		$results = CS::get()->db->select($tableName, $condition, $condValues, $fieldsList);
 | |
| 
 | |
| 		//Process results
 | |
| 		$friendsList = array();
 | |
| 		foreach($results as $process){
 | |
| 			$friendsList[] = array(
 | |
| 				"ID_friend" => $process["ID_amis"],
 | |
| 				"accepted" => $process["actif"],
 | |
| 				"following" => $process["abonnement"],
 | |
| 				"time_last_activity" => $process["last_activity"]
 | |
| 			);
 | |
| 		}
 | |
| 
 | |
| 		//Return result
 | |
| 		return $friendsList;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Respond to a friendship request
 | |
| 	 *
 | |
| 	 * @param Integer $userID The ID of the user who respond to the request
 | |
| 	 * @param Integer $friendID The ID of the target friend
 | |
| 	 * @param Boolean $accept Defines wether the friend request was accepted or not
 | |
| 	 * @return Boolean True or false depending of the success of the operation
 | |
| 	 */
 | |
| 	 public function respondRequest($userID, $friendID, $accept){
 | |
| 		//If the request is to refuse friendship request, there isn't any security check to perform
 | |
| 		if(!$accept){
 | |
| 			//Perform a request on the database
 | |
| 			$conditions = "ID_personne = ? AND ID_amis = ? AND actif = 0";
 | |
| 			$conditionsValues = array(
 | |
| 				$userID*1,
 | |
| 				$friendID*1
 | |
| 			);
 | |
| 
 | |
| 			//Try to perform request
 | |
| 			if(CS::get()->db->deleteEntry($this->friendsTable, $conditions, $conditionsValues))
 | |
| 				return true; //Operation is a success
 | |
| 			else
 | |
| 				return false; //An error occured
 | |
| 		}
 | |
| 
 | |
| 		//Else it is a little more complicated
 | |
| 		//First, check the request was really performed
 | |
| 		if(!$this->checkFriendShipRequestExistence($friendID, $userID))
 | |
| 			return false; //There isn't any existing request
 | |
| 		
 | |
| 		//Else we can update the database to accept the request
 | |
| 		//Update the table
 | |
| 		$conditions = "ID_personne = ? AND ID_amis = ? AND actif = 0";
 | |
| 		$whereValues = array(
 | |
| 			$userID*1,
 | |
| 			$friendID*1
 | |
| 		);
 | |
| 		$modifs = array(
 | |
| 			"actif" => 1
 | |
| 		);
 | |
| 
 | |
| 		//First update the table
 | |
| 		if(!CS::get()->db->updateDB($this->friendsTable, $conditions, $modifs, $whereValues))
 | |
| 			return false;
 | |
| 
 | |
| 		//Then insert the second friend line
 | |
| 		$insertValues = array(
 | |
| 			"ID_personne" => $friendID,
 | |
| 			"ID_amis" => $userID,
 | |
| 			"actif" => 1
 | |
| 		);
 | |
| 		if(!CS::get()->db->addLine($this->friendsTable, $insertValues))
 | |
| 			return false; //An error occurred
 | |
| 		
 | |
| 		//The operation is a success
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Check if a friendship request was performed by someone to someone
 | |
| 	 *
 | |
| 	 * @param Integer $userID The user who may have performed a request
 | |
| 	 * @param Integer $friendID The destination of the request
 | |
| 	 * @return Boolean True or false depending of the success of the operation
 | |
| 	 */
 | |
| 	 public function checkFriendShipRequestExistence($userID, $friendID){
 | |
| 		//Perform a request on the database
 | |
| 		$conditions = "WHERE ID_personne = ? AND ID_amis = ? AND actif = 0";
 | |
| 		$dataConditions = array(
 | |
| 			$friendID*1,
 | |
| 			$userID*1
 | |
| 		);
 | |
| 		$fieldsList = array("ID");
 | |
| 
 | |
| 		//Try to perform request
 | |
| 		$results = CS::get()->db->select($this->friendsTable, $conditions, $dataConditions, $fieldsList);
 | |
| 
 | |
| 		//Check for errors
 | |
| 		if($results === false)
 | |
| 			return false; //An error occured
 | |
| 		
 | |
| 		//Else we check the results
 | |
| 		else
 | |
| 			return count($results) === 1;
 | |
| 	 }
 | |
| }
 | |
| 
 | |
| //Register component
 | |
| Components::register("friends", new friends()); | 
