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 user allow posts on his page if(!$this->allowPosts($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 posts on his page or not * * @return bool TRUE if the psots are allowed / FALSE else */ private function allowPosts(int $userID) : bool { //Fetch the information in the database $conditions = "WHERE ID = ?"; $condValues = array($userID); $fields = array("autoriser_post_amis"); //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]["autoriser_post_amis"] == 1; } /** * 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->getURL($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());