mirror of
				https://github.com/pierre42100/ComunicAPI
				synced 2025-10-31 18:24:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			190 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Notifications REST controller
 | |
|  * 
 | |
|  * @author Pierre HUBERT
 | |
|  */
 | |
| 
 | |
| class notificationsController {
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Count the number of unread notifications of a user
 | |
| 	 * 
 | |
| 	 * @url POST notifications/count_unread
 | |
| 	 */
 | |
| 	public function count_unread(){
 | |
| 
 | |
| 		user_login_required();
 | |
| 
 | |
| 		//Get the number of unread notifications
 | |
| 		$number = components()->notifications->count_unread(userID);
 | |
| 
 | |
| 		//Return it
 | |
| 		return array(
 | |
| 			"number" => $number
 | |
| 		);
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Count all the new kinds of data
 | |
| 	 * 
 | |
| 	 * - notifications
 | |
| 	 * - unread conversations
 | |
| 	 * 
 | |
| 	 * @url POST notifications/count_all_news
 | |
| 	 */
 | |
| 	public function count_all_news(){
 | |
| 
 | |
| 		user_login_required();
 | |
| 
 | |
| 		//Get and return the data
 | |
| 		return array(
 | |
| 			"notifications" => components()->notifications->count_unread(userID),
 | |
| 			"conversations" => components()->conversations->number_user_unread(userID)
 | |
| 		);
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the list of unread notifications of a user
 | |
| 	 * 
 | |
| 	 * @url POST notifications/get_list_unread
 | |
| 	 */
 | |
| 	public function get_list_unread(){
 | |
| 
 | |
| 		user_login_required();
 | |
| 
 | |
| 		//Get the list of unread notifications
 | |
| 		$list = components()->notifications->list_unread(userID);
 | |
| 
 | |
| 		//Process the list of notifications
 | |
| 		foreach($list as $num => $data){
 | |
| 			$list[$num] = $this->notifToArray($data);
 | |
| 		}
 | |
| 
 | |
| 		//Return the list of notifications
 | |
| 		return $list;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Mark a notification as seen
 | |
| 	 * 
 | |
| 	 * @url POST notifications/mark_seen
 | |
| 	 */
 | |
| 	public function mark_seen(){
 | |
| 
 | |
| 		user_login_required();
 | |
| 
 | |
| 		//Get notification ID
 | |
| 		$notifID = $this->getPostNotifID("notifID");
 | |
| 
 | |
| 		//Check the kind of deletion to do
 | |
| 		$delete_similar = false;
 | |
| 		if(isset($_POST['delete_similar']))
 | |
| 			$delete_similar = ($_POST['delete_similar'] === "true");
 | |
| 
 | |
| 		//Get informations about the notification
 | |
| 		$infos_notif = components()->notifications->get_single($notifID);
 | |
| 
 | |
| 		//Check for error
 | |
| 		if(!$infos_notif->has_id())
 | |
| 			Rest_fatal_error(500, "An error occured while trying to process the notification !");
 | |
| 		
 | |
| 		//Perform the required kind of deletion required
 | |
| 		$notification = new Notification();
 | |
| 
 | |
| 		if(!$delete_similar){
 | |
| 			$notification->set_id($notifID);
 | |
| 		}
 | |
| 
 | |
| 		else {
 | |
| 			$notification->set_on_elem_type($infos_notif->get_on_elem_type());
 | |
| 			$notification->set_on_elem_id($infos_notif->get_on_elem_id());
 | |
| 			$notification->set_dest_user_id($infos_notif->get_dest_user_id());
 | |
| 		}
 | |
| 
 | |
| 		//Delete the notification
 | |
| 		if(!components()->notifications->delete($notification))
 | |
| 			Rest_fatal_error(500, "Could not delete the notification !");
 | |
| 		
 | |
| 		//Success
 | |
| 		return array("success" => "The notification was deleted.");
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Delete all the notifications of a user
 | |
| 	 * 
 | |
| 	 * @url POST notifications/delete_all
 | |
| 	 */
 | |
| 	public function delete_all(){
 | |
| 
 | |
| 		user_login_required();
 | |
| 
 | |
| 		//Try to delete the list of notifications of the user
 | |
| 		if(!components()->notifications->delete_all_user(userID))
 | |
| 			Rest_fatal_error(500, "Could not delete user's notifications !");
 | |
| 
 | |
| 		//Success
 | |
| 		return array("success" => "The notifications have been deleted !");
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get a valid notification ID in a POST request
 | |
| 	 * 
 | |
| 	 * @param string $name The name of the post field containing the notification ID
 | |
| 	 * @return int The ID of the notification
 | |
| 	 */
 | |
| 	private function getPostNotifID(string $name) : int {
 | |
| 
 | |
| 		user_login_required();
 | |
| 
 | |
| 		//Check the POST request
 | |
| 		if(!isset($_POST[$name]))
 | |
| 			Rest_fatal_error(400, "Please specify the ID of the notification in '".$name."' !");
 | |
| 		
 | |
| 		$notifID = (int) $_POST[$name];
 | |
| 
 | |
| 		//Check if the notification exists and if the user is allowed to use it
 | |
| 		$notif = new Notification();
 | |
| 		$notif->set_dest_user_id(userID);
 | |
| 		$notif->set_id($notifID);
 | |
| 		if(!components()->notifications->similar_exists($notif))
 | |
| 			Rest_fatal_error(404, "The specified notification was not found !");
 | |
| 
 | |
| 		return $notifID;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Turn a notification entry into a standard API notification array
 | |
| 	 * 
 | |
| 	 * Warning !!! The notification must be fully initialized
 | |
| 	 * 
 | |
| 	 * @param Notification $notif The notification to process
 | |
| 	 * @return array The generated array
 | |
| 	 */
 | |
| 	private function notifToArray(Notification $notif) : array {
 | |
| 
 | |
| 		$array = array();
 | |
| 
 | |
| 		//Parse the notification
 | |
| 		$array['id'] = $notif->get_id();
 | |
| 		$array['time_create'] = $notif->get_time_create();
 | |
| 		$array['seen'] = $notif->is_seen();
 | |
| 		$array['from_user_id'] = $notif->get_from_user_id();
 | |
| 		$array['dest_user_id'] = $notif->get_dest_user_id();
 | |
| 		$array['on_elem_id'] = $notif->get_on_elem_id();
 | |
| 		$array['on_elem_type'] = $notif->get_on_elem_type();
 | |
| 		$array['type'] = $notif->get_type();
 | |
| 		$array['event_visibility'] = $notif->get_event_visibility();
 | |
| 		$array['from_container_id'] = $notif->get_from_container_id();
 | |
| 		$array['from_container_type'] = $notif->get_from_container_type();
 | |
| 		
 | |
| 
 | |
| 		return $array;
 | |
| 	}
 | |
| } | 
