mirror of
				https://github.com/pierre42100/ComunicAPI
				synced 2025-10-30 17:54:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			207 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Posts management class
 | |
|  * 
 | |
|  * @author Pierre HUBERT
 | |
|  */
 | |
| 
 | |
| class Posts {
 | |
| 
 | |
| 	/**
 | |
| 	 * Visibility levels
 | |
| 	 */
 | |
| 	//Posts that can be seen by anyone
 | |
| 	const VISIBILITY_PUBLIC = 1;
 | |
| 
 | |
| 	//Posts that can be seen by the friends of the user
 | |
| 	const VISIBILITY_FRIENDS = 2;
 | |
| 
 | |
| 	//Posts that can be seen by the user only
 | |
| 	const VISIBILITY_USER = 3;
 | |
| 
 | |
| 	/**
 | |
| 	 * Table informations
 | |
| 	 */
 | |
| 	//Name of the table
 | |
| 	const TABLE_NAME = "texte";
 | |
| 
 | |
| 	//Translation of posts types between the API language and the database structure
 | |
| 	const POSTS_TYPE = array(
 | |
| 		"texte" => "text",
 | |
| 		"image" => "image",
 | |
| 		"webpage_link" => "weblink",
 | |
| 		"pdf" => "pdf",
 | |
| 		"video" => "movie",
 | |
| 		"count_down" => "countdown",
 | |
| 		"sondage" => "survey",
 | |
| 		"youtube" => "youtube"
 | |
| 	);
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the visibility level of a user other another user
 | |
| 	 * 
 | |
| 	 * @param int $userID The ID of the user to fetch
 | |
| 	 * @param int $targetID The ID of the user target
 | |
| 	 * @return int Visibility level
 | |
| 	 */
 | |
| 	public function getUserVisibility(int $userID, int $targetID) : int {
 | |
| 
 | |
| 		//If the user making the request and the target user are the same
 | |
| 		if($userID == $targetID)
 | |
| 			return $this::VISIBILITY_USER;
 | |
| 		
 | |
| 		//Check user if is signed out
 | |
| 		if($userID == 0)
 | |
| 			return $this::VISIBILITY_PUBLIC;
 | |
| 		
 | |
| 		//Check if the two users are friends or not
 | |
| 		if(CS::get()->components->friends->are_friend($userID, $targetID))
 | |
| 			//Users are friends
 | |
| 			return $this::VISIBILITY_FRIENDS;
 | |
| 
 | |
| 		else
 | |
| 			//Users are not friend
 | |
| 			return $this::VISIBILITY_PUBLIC;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get a list of post of a user
 | |
| 	 * 
 | |
| 	 * @param int $userID The ID of the user making the request
 | |
| 	 * @param int $targetID The ID of the target user
 | |
| 	 * @param int $startPoint The startpoint for the request (0 stands for none)
 | |
| 	 * @param int $limit The maximum number of messages to fetch
 | |
| 	 */
 | |
| 	public function getUserPosts(int $userID, int $targetID, int $startPoint = 0, int $limit = 10) : array {
 | |
| 
 | |
| 		//Check the value of limit (security)
 | |
| 		if($limit < 1){
 | |
| 			throw new Exception("The limit of the query must absolutly be positive !");
 | |
| 		}
 | |
| 
 | |
| 		//Get user visibility level
 | |
| 		$visibilityLevel = $this->getUserVisibility($userID, $targetID);
 | |
| 
 | |
| 		//Prepare the request on the database
 | |
| 		$conditions = "WHERE ID_personne = ? AND (";
 | |
| 		$dataConds = array($targetID);
 | |
| 
 | |
| 		//Add the visibility level conditions
 | |
| 		$conditions .= "(niveau_visibilite <= ?)";
 | |
| 		$dataConds[] = $visibilityLevel;
 | |
| 
 | |
| 		//If user is signed in, include all the posts that he has created
 | |
| 		if($userID > 0){
 | |
| 			$conditions .= " OR (ID_amis = ?) ";
 | |
| 			$dataConds[] = $userID;
 | |
| 		}
 | |
| 
 | |
| 		//Close permissions conditions
 | |
| 		$conditions .= ")";
 | |
| 		
 | |
| 		//Add startpoint condition if required (and get older messages)
 | |
| 		if($startPoint != 0){
 | |
| 			$conditions .= " AND ID <= ? ";
 | |
| 			$dataConds[] = $startPoint;
 | |
| 		}
 | |
| 
 | |
| 		//Specify order and limit
 | |
| 		$conditions.= " ORDER BY ID DESC LIMIT ".$limit;
 | |
| 
 | |
| 		//Perform the request
 | |
| 		$list = CS::get()->db->select(
 | |
| 			$this::TABLE_NAME,
 | |
| 			$conditions,
 | |
| 			$dataConds
 | |
| 		);
 | |
| 
 | |
| 		//Check if the user allow comments on his page or not
 | |
| 		$getComments = CS::get()->components->user->allowComments($targetID);
 | |
| 
 | |
| 		//Parse posts
 | |
| 		$posts = array();
 | |
| 		foreach($list as $post){
 | |
| 			$posts[] = $this->parse_post($post, $getComments);
 | |
| 		}
 | |
| 
 | |
| 		return $posts;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Parse a user post from the database into
 | |
| 	 * the standardized version of post structure
 | |
| 	 * 
 | |
| 	 * @param array $src Informations about the post from the database
 | |
| 	 * @param bool $load_comments Get comments, if required
 | |
| 	 * @return array Parsed informations about the post
 | |
| 	 */
 | |
| 	private function parse_post(array $src, bool $load_comments) : array {
 | |
| 		
 | |
| 		$info = array();
 | |
| 
 | |
| 		//Specify post ID
 | |
| 		$info["ID"] = $src["ID"];
 | |
| 
 | |
| 		//Determine user ID
 | |
| 		$info["userID"] = $src["ID_amis"] == 0 ? $src["ID_personne"] : $src["ID_amis"];
 | |
| 
 | |
| 		//Time when the message was sent
 | |
| 		$info["post_time"] = strtotime($src["date_envoi"]);
 | |
| 
 | |
| 		//Content of the message
 | |
| 		$info["content"] = $src["texte"];
 | |
| 
 | |
| 		//Visibility level
 | |
| 		$info["visibility_level"] = $src["niveau_visibilite"];
 | |
| 
 | |
| 		//Determine the kind of post
 | |
| 		$info["kind"] = $this::POSTS_TYPE[$src["type"]];
 | |
| 
 | |
| 		//Document info
 | |
| 		$info["file_size"] = $src["size"];
 | |
| 		$info["file_type"] = $src["file_type"];
 | |
| 		$info["file_path"] = $src["path"];
 | |
| 		$info["file_path_url"] = $src["path"] == null ? null : path_user_data($src["path"], false);
 | |
| 
 | |
| 		//Video specific
 | |
| 		$info["video_id"] = $src["idvideo"];
 | |
| 
 | |
| 		//Get informations about the video
 | |
| 		if(!is_null($info['video_id'])){
 | |
| 			$info['video_infos'] = CS::get()->components->movies->get_infos($info['video_id']);
 | |
| 		}
 | |
| 		else {
 | |
| 			$info['video_infos'] = null;
 | |
| 		}
 | |
| 
 | |
| 		//Countdown timer specific
 | |
| 		if($src['annee_fin'] != 0)
 | |
| 			$info["time_end"] = strtotime($src["annee_fin"]."/".$src['mois_fin']."/".$src["jour_fin"]);
 | |
| 		else
 | |
| 			$info["time_end"] = null;
 | |
| 		
 | |
| 		//Weblink specific
 | |
| 		$info["link_url"] = $src["url_page"];
 | |
| 		$info["link_title"] = $src["titre_page"];
 | |
| 		$info["link_description"] = $src["description_page"];
 | |
| 		$info["link_image"] = $src["image_page"];
 | |
| 
 | |
| 		//Get informations about likes
 | |
| 		$info["likes"] = CS::get()->components->likes->count($info["ID"], Likes::LIKE_POST);
 | |
| 		$info["userlike"] = user_signed_in() ? CS::get()->components->likes->is_liking(userID, $info["ID"], Likes::LIKE_POST) : false;
 | |
| 
 | |
| 		//Load comments, if required
 | |
| 		if($load_comments)
 | |
| 			$info["comments"] = CS::get()->components->comments->get($info["ID"]);
 | |
| 		else
 | |
| 			$info["comments"] = null;
 | |
| 
 | |
| 		return $info;
 | |
| 
 | |
| 	}
 | |
| }
 | |
| 
 | |
| //Register component
 | |
| Components::register("posts", new Posts()); | 
