mirror of
				https://github.com/pierre42100/ComunicAPI
				synced 2025-11-04 04:04:20 +00:00 
			
		
		
		
	Renamed UserComponent
This commit is contained in:
		
							
								
								
									
										408
									
								
								classes/components/UserComponent.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										408
									
								
								classes/components/UserComponent.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,408 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Main user class
 | 
			
		||||
 *
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class UserComponent {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @var String $userTable The name of the user table
 | 
			
		||||
	 */
 | 
			
		||||
	const USER_TABLE = "utilisateurs";
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * User pages visiblity levels
 | 
			
		||||
	 */
 | 
			
		||||
	const USER_PAGE_PRIVATE = 0;
 | 
			
		||||
	const USER_PAGE_PUBLIC = 1;
 | 
			
		||||
	const USER_PAGE_OPEN = 2;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Public constructor
 | 
			
		||||
	 */
 | 
			
		||||
	public function __construct(){
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get advanced information about a user
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param int $userID Target user ID
 | 
			
		||||
	 * @return AdvancedUser Informations about the user (invalid object in case of failure)
 | 
			
		||||
	 */
 | 
			
		||||
	public function getUserAdvancedInfo(int $userID) : AdvancedUser {
 | 
			
		||||
 | 
			
		||||
		//Perform a request over the database
 | 
			
		||||
		$data = $this->getDBUserInfo($userID);
 | 
			
		||||
		
 | 
			
		||||
		if(count($data) == 0)
 | 
			
		||||
			return new AdvancedUser(); //Return invalid object
 | 
			
		||||
		
 | 
			
		||||
		return $this->parseDbToAdvancedUser($data);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get Single User Infos from database and return its information as an array
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param int $userID The user ID
 | 
			
		||||
	 * @return array Information about the user (empty array in case of failure)
 | 
			
		||||
	 */
 | 
			
		||||
	private function getDBUserInfo(int $userID) : array {
 | 
			
		||||
		//Prepare database request
 | 
			
		||||
		$tablesName = self::USER_TABLE;
 | 
			
		||||
		$conditions = "WHERE utilisateurs.ID = ?";
 | 
			
		||||
		$conditionsValues = array(
 | 
			
		||||
			$userID*1,
 | 
			
		||||
		);
 | 
			
		||||
		
 | 
			
		||||
		//Perform request
 | 
			
		||||
		$userInfos = CS::get()->db->select($tablesName, $conditions, $conditionsValues);
 | 
			
		||||
		
 | 
			
		||||
		//Check if result is correct or not
 | 
			
		||||
		if(count($userInfos) == 0)
 | 
			
		||||
			return array(); //No result
 | 
			
		||||
		
 | 
			
		||||
		//Return parsed result
 | 
			
		||||
		return($userInfos[0]);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get Multiple Users Infos
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param array $usersID The users ID
 | 
			
		||||
	 * @return array The result of the function (user informations as User objects) (empty one if it fails)
 | 
			
		||||
	 */
 | 
			
		||||
	public function getMultipleUserInfos(array $usersID) : array {
 | 
			
		||||
		//Prepare database request
 | 
			
		||||
		$tablesName = self::USER_TABLE;
 | 
			
		||||
		$conditions = "WHERE (utilisateurs.ID < 0)";
 | 
			
		||||
		$conditionsValues = array();
 | 
			
		||||
 | 
			
		||||
		//Process users
 | 
			
		||||
		foreach($usersID as $i=>$process){
 | 
			
		||||
			$conditions .= " OR utilisateurs.ID = ?";
 | 
			
		||||
			$conditionsValues[] = $process*1;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		//Perform request
 | 
			
		||||
		$usersInfos = CS::get()->db->select($tablesName, $conditions, $conditionsValues);
 | 
			
		||||
		
 | 
			
		||||
		//Check if result is correct or not
 | 
			
		||||
		if(count($usersInfos) == 0)
 | 
			
		||||
			return array(); //No result
 | 
			
		||||
		
 | 
			
		||||
		//Process result
 | 
			
		||||
		foreach($usersInfos as $processUser){
 | 
			
		||||
			$result[$processUser['ID']] = $this->parseDbToUser($processUser);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//Return result
 | 
			
		||||
		return $result;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Update last user activity time on the network
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param int $userID The ID of the user to update
 | 
			
		||||
	 * @return bool True for a success
 | 
			
		||||
	 */
 | 
			
		||||
	public function updateLastActivity(int $userID) : bool{
 | 
			
		||||
 | 
			
		||||
		//Perform a request on the database
 | 
			
		||||
		$tableName = self::USER_TABLE;
 | 
			
		||||
		$conditions = "ID = ?";
 | 
			
		||||
		$whereValues = array(userID);
 | 
			
		||||
		$modifs = array(
 | 
			
		||||
			"last_activity" => time()
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		if(!CS::get()->db->updateDB($tableName, $conditions, $modifs, $whereValues))
 | 
			
		||||
			return false;
 | 
			
		||||
 | 
			
		||||
		//Success
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Check if a user exists or not
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param int $userID The ID of the user to check
 | 
			
		||||
	 * @return bool Depends of the existence of the user
 | 
			
		||||
	 */
 | 
			
		||||
	public function exists(int $userID) : bool {
 | 
			
		||||
		//Perform a request on the database
 | 
			
		||||
		$tableName = self::USER_TABLE;
 | 
			
		||||
		$condition = "WHERE ID = ?";
 | 
			
		||||
		$condValues = array($userID);
 | 
			
		||||
		$requiredFields = array("ID");
 | 
			
		||||
 | 
			
		||||
		//Try to perform request
 | 
			
		||||
		$result = CS::get()->db->select($tableName, $condition, $condValues, $requiredFields);
 | 
			
		||||
 | 
			
		||||
		//Check for errors
 | 
			
		||||
		if($result === false)
 | 
			
		||||
			return false; //An error occured
 | 
			
		||||
		
 | 
			
		||||
		//Check and return result
 | 
			
		||||
		return count($result) !== 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Find the user specified by a folder name
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string $folder The folder of the research
 | 
			
		||||
	 * @return int 0 if no user was found or the ID of the user in case of success
 | 
			
		||||
	 */
 | 
			
		||||
	public function findByFolder(string $folder) : int {
 | 
			
		||||
 | 
			
		||||
		//Perform a request on the database
 | 
			
		||||
		$tableName = self::USER_TABLE;
 | 
			
		||||
		$condition = "WHERE sous_repertoire = ?";
 | 
			
		||||
		$condValues = array($folder);
 | 
			
		||||
		$requiredFields = array("ID");
 | 
			
		||||
 | 
			
		||||
		//Try to perform the request
 | 
			
		||||
		$result = CS::get()->db->select($tableName, $condition, $condValues, $requiredFields);
 | 
			
		||||
 | 
			
		||||
		//Check for errors
 | 
			
		||||
		if($result === false){
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if(count($result) == 0)
 | 
			
		||||
			return 0; //There is no result
 | 
			
		||||
		
 | 
			
		||||
		//Return result
 | 
			
		||||
		return $result[0]["ID"];
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get a user page visibility level
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param int $id The ID of the user to fetch
 | 
			
		||||
	 * @return int The visibility level of the user page
 | 
			
		||||
	 * - -1 : In case of failure (will make the protection level elevated)
 | 
			
		||||
	 * - 0 : The page is private (for user friends)
 | 
			
		||||
	 * - 1 : The page is public (for signed in users)
 | 
			
		||||
	 * - 2 : The page is open (for everyone)
 | 
			
		||||
	 */
 | 
			
		||||
	public function getVisibility(int $userID) : int {
 | 
			
		||||
 | 
			
		||||
		//Perform a request on the database
 | 
			
		||||
		$tableName = self::USER_TABLE;
 | 
			
		||||
		$condition = "WHERE ID = ?";
 | 
			
		||||
		$condValues = array($userID);
 | 
			
		||||
 | 
			
		||||
		$requiredFields = array(
 | 
			
		||||
			"public",
 | 
			
		||||
			"pageouverte"
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		//Perform the request
 | 
			
		||||
		$result = CS::get()->db->select($tableName, $condition, $condValues, $requiredFields);
 | 
			
		||||
 | 
			
		||||
		if($result === false){
 | 
			
		||||
			return -1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//Check for a result
 | 
			
		||||
		if(count($result) == 0){
 | 
			
		||||
			return -1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//Check if the page is public
 | 
			
		||||
		if($result[0]["public"] == 0)
 | 
			
		||||
			return $this::USER_PAGE_PRIVATE;
 | 
			
		||||
 | 
			
		||||
		//Check if the page is open or not
 | 
			
		||||
		if($result[0]["pageouverte"] == 1)
 | 
			
		||||
			return $this::USER_PAGE_OPEN; //Page open
 | 
			
		||||
		else
 | 
			
		||||
			return $this::USER_PAGE_PUBLIC; //Public page
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Check if a user is allowed to access another user page content
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param int $userID The ID of the user attempting to get user informations (0 = no user)
 | 
			
		||||
	 * @param int $targetUser Target user for the research
 | 
			
		||||
	 * @return bool TRUE if the user is allowed to see the page / FALSE else
 | 
			
		||||
	 */
 | 
			
		||||
	public function userAllowed(int $userID, int $targetUser) : bool {
 | 
			
		||||
		
 | 
			
		||||
		//Check if the requested user is the current user
 | 
			
		||||
		if($userID == $targetUser)
 | 
			
		||||
			return true; //A user can access to its own page !
 | 
			
		||||
 | 
			
		||||
		//Get the visibility level of the page
 | 
			
		||||
		$visibility = $this->getVisibility($targetUser);
 | 
			
		||||
 | 
			
		||||
		//Check for errors
 | 
			
		||||
		if($visibility == -1)
 | 
			
		||||
			return FALSE; //An error occured
 | 
			
		||||
 | 
			
		||||
		//Check if the page is open
 | 
			
		||||
		if($visibility == UserComponent::USER_PAGE_OPEN)
 | 
			
		||||
			return true;
 | 
			
		||||
		
 | 
			
		||||
		if($userID == 0)
 | 
			
		||||
			return false;
 | 
			
		||||
		
 | 
			
		||||
		if($visibility == UserComponent::USER_PAGE_PUBLIC)
 | 
			
		||||
			return true;
 | 
			
		||||
		
 | 
			
		||||
		if(CS::get()->components->friends->are_friend($userID, $targetUser))
 | 
			
		||||
			return true;
 | 
			
		||||
		else
 | 
			
		||||
			return false;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Check if a user can create a post on another user page
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param int $userID The ID of the user who could create post
 | 
			
		||||
	 * @param int $targetID The ID of the user who could receive new posts
 | 
			
		||||
	 * @return bool True if the user is allowed to create post / false else
 | 
			
		||||
	 */
 | 
			
		||||
	public function canCreatePosts(int $userID, int $targetID){
 | 
			
		||||
 | 
			
		||||
		//If the user is signed out, the response is NO by default
 | 
			
		||||
		if($userID == 0)
 | 
			
		||||
			return FALSE;
 | 
			
		||||
 | 
			
		||||
		//If the two user are friends, the response is yes by default
 | 
			
		||||
		if($userID === $targetID)
 | 
			
		||||
			return TRUE;
 | 
			
		||||
		
 | 
			
		||||
		//Check if the user is allowed to access user page
 | 
			
		||||
		if(!$this->userAllowed($userID, $targetID))
 | 
			
		||||
			return FALSE;
 | 
			
		||||
		
 | 
			
		||||
		//Check if the friendship of the users allow them to create posts
 | 
			
		||||
		if(!CS::get()->components->friends->can_post_text($userID, $targetID))
 | 
			
		||||
			return FALSE;
 | 
			
		||||
		
 | 
			
		||||
		//Else the user is allowed
 | 
			
		||||
		return TRUE;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * Check whether a user allow comments on his page or not
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param int $userID The ID of the user
 | 
			
		||||
	 * @return bool True if comments are allowed / False else
 | 
			
		||||
	 */
 | 
			
		||||
	public function allowComments(int $userID) : bool {
 | 
			
		||||
		
 | 
			
		||||
		//Fetch the information in the database
 | 
			
		||||
		$conditions = "WHERE ID = ?";
 | 
			
		||||
		$condValues = array($userID);
 | 
			
		||||
		$fields = array("bloquecommentaire");
 | 
			
		||||
 | 
			
		||||
		//Perform the request
 | 
			
		||||
		$result = CS::get()->db->select(
 | 
			
		||||
			self::USER_TABLE,
 | 
			
		||||
			$conditions,
 | 
			
		||||
			$condValues,
 | 
			
		||||
			$fields
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		//Check for errors
 | 
			
		||||
		if(count($result) == 0)
 | 
			
		||||
			return FAlSE;
 | 
			
		||||
 | 
			
		||||
		//Return result
 | 
			
		||||
		return $result[0]["bloquecommentaire"] == 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Check whether a user allow a public access over its friends list or not
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param int $userID The ID of the user
 | 
			
		||||
	 * @return bool True if the friends list of the user is public / FALSE else
 | 
			
		||||
	 */
 | 
			
		||||
	public function isFriendsListPublic(int $userID) : bool {
 | 
			
		||||
		
 | 
			
		||||
		//Fetch the information in the database
 | 
			
		||||
		$conditions = "WHERE ID = ?";
 | 
			
		||||
		$condValues = array($userID);
 | 
			
		||||
		$fields = array("liste_amis_publique");
 | 
			
		||||
 | 
			
		||||
		//Perform the request
 | 
			
		||||
		$result = CS::get()->db->select(
 | 
			
		||||
			self::USER_TABLE,
 | 
			
		||||
			$conditions,
 | 
			
		||||
			$condValues,
 | 
			
		||||
			$fields
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		//Check for errors
 | 
			
		||||
		if(count($result) == 0)
 | 
			
		||||
			return FAlSE;
 | 
			
		||||
 | 
			
		||||
		//Return result
 | 
			
		||||
		return $result[0]["liste_amis_publique"] == 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Parse user database entry into user object
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param array $entry The database entry, as an array
 | 
			
		||||
	 * @param User $user The user object to populate
 | 
			
		||||
	 * @return User Generated User object
 | 
			
		||||
	 */
 | 
			
		||||
	public function parseDbToUser(array $entry, User $user = null) : User {
 | 
			
		||||
 | 
			
		||||
		//Create user object if required
 | 
			
		||||
		if($user == null)
 | 
			
		||||
			$user = new User;
 | 
			
		||||
 | 
			
		||||
		$user->set_id($entry['ID']);
 | 
			
		||||
		$user->set_firstName($entry['prenom']);
 | 
			
		||||
		$user->set_lastName($entry['nom']);
 | 
			
		||||
		$user->set_publicPage($entry['public'] == 1);
 | 
			
		||||
		$user->set_openPage($entry['pageouverte'] == 1);
 | 
			
		||||
		$user->set_virtualDirectory($entry['sous_repertoire'] == null ? "" : $entry['sous_repertoire']);
 | 
			
		||||
		$user->set_accountImageURL(
 | 
			
		||||
			CS::get()->components->accountImage->getPath($user->get_id()));
 | 
			
		||||
		
 | 
			
		||||
		//Return generated user
 | 
			
		||||
		return $user;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Parse user database entry into advanced user information object
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param array $entry The database entry, as an array
 | 
			
		||||
	 * @return AdvancedUser Advanced information about the user
 | 
			
		||||
	 */
 | 
			
		||||
	private function parseDbToAdvancedUser(array $entry) : AdvancedUser {
 | 
			
		||||
 | 
			
		||||
		//Parse general information about the user
 | 
			
		||||
		$user = $this->parseDbToUser($entry, new Advanceduser());
 | 
			
		||||
 | 
			
		||||
		$user->set_friendListPublic($entry['liste_amis_publique'] == 1);
 | 
			
		||||
		$user->set_personnalWebsite($entry['site_web']);
 | 
			
		||||
		$user->set_disallowComments($entry['bloquecommentaire'] == 1);
 | 
			
		||||
		$user->set_allowPostFromFriends($entry['autoriser_post_amis'] == 1);
 | 
			
		||||
		$user->set_creation_time(strtotime($entry['date_creation']));
 | 
			
		||||
		$user->set_backgroundImage(
 | 
			
		||||
			CS::get()->components->backgroundImage->getPath($user->get_id()));
 | 
			
		||||
		$user->set_pageLikes(
 | 
			
		||||
			CS::get()->components->likes->count($user->get_id(), Likes::LIKE_USER));
 | 
			
		||||
 | 
			
		||||
		//Return result
 | 
			
		||||
		return $user;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Register class
 | 
			
		||||
Components::register("user", new UserComponent());
 | 
			
		||||
		Reference in New Issue
	
	Block a user