From cf4b75c61ac23364dbeef80e7a148a141a6fcf13 Mon Sep 17 00:00:00 2001 From: Pierre Date: Sat, 21 Apr 2018 15:31:40 +0200 Subject: [PATCH] Implement Comment object for the get_single method --- RestControllers/commentsController.php | 32 +++++++++++++-- classes/components/comments.php | 56 ++++++++++++++++++++------ classes/models/BaseUniqueObject.php | 2 +- classes/models/Comment.php | 22 +++++++++- 4 files changed, 94 insertions(+), 18 deletions(-) diff --git a/RestControllers/commentsController.php b/RestControllers/commentsController.php index 0b724cc..ca28cb8 100644 --- a/RestControllers/commentsController.php +++ b/RestControllers/commentsController.php @@ -76,14 +76,14 @@ class commentsController { $commentID = getPostCommentIDWithAccess("commentID"); //Get informations about the comment - $infos = components()->comments->get_single($commentID, TRUE); + $comment = components()->comments->get_single($commentID, TRUE); //Check for errors - if(count($infos) == 0) + if(!$comment->isValid()) Rest_fatal_error(500, "Couldn't fetch informations about the comment !"); //Return informations about the comment - return $infos; + return $this->commentToAPI($comment); } /** @@ -174,4 +174,30 @@ class commentsController { //Return comment conent return $comment_content; } + + /** + * Turn a comment object into a readable object + * + * @param Comment $comment The comment to convert + * @return array Informations about the comment + */ + private function commentToAPI(Comment $comment) : array { + $data = array(); + + $data["ID"] = $comment->get_id(); + $data["userID"] = $comment->get_userID(); + $data["postID"] = $comment->get_postID(); + $data["time_sent"] = $comment->get_time_sent(); + $data["content"] = $comment->get_content(); + + $data["img_path"] = $comment->has_img_path() ? $comment->get_img_path() : null; + $data["img_url"] = $comment->has_img_url() ? $comment->get_img_url() : null; + + if($comment->has_likes()){ + $data["likes"] = $comment->get_likes(); + $data["userlike"] = $comment->get_userlike(); + } + + return $data; + } } \ No newline at end of file diff --git a/classes/components/comments.php b/classes/components/comments.php index ceecf44..b9456ed 100644 --- a/classes/components/comments.php +++ b/classes/components/comments.php @@ -73,9 +73,9 @@ class Comments { * * @param int $commentID The ID of the comment to get * @param bool $include_likes Specify if likes has to be loaded - * @return array Information about the comment + * @return Comment Information about the comment (invalid comment in case of failure) */ - public function get_single(int $commentID, bool $include_likes = false) : array { + public function get_single(int $commentID, bool $include_likes = false) : Comment { //Perform a request on the database $conditions = "WHERE ID = ?"; @@ -86,10 +86,10 @@ class Comments { //Check for results if(count($result) == 0) - return array(); + return new Comment(); //Return result - return $this->parse_comment($result[0], $include_likes); + return $this->dbToComment($result[0], $include_likes); } /** @@ -127,7 +127,7 @@ class Comments { $commentInfos = $this->get_single($commentID, false); //Check for errors - if(count($commentInfos) == 0) + if(!$commentInfos->isValid()) return false; //Process deletion @@ -137,18 +137,18 @@ class Comments { /** * Process comment deletion * - * @param array $commentInfos Informations about the comment to delete + * @param Comment $commentInfos Informations about the comment to delete * @return bool TRUE for a success / FALSE else */ - private function process_delete(array $commentInfos) : bool { + private function process_delete(Comment $commentInfos) : bool { //Get comment ID - $commentID = $commentInfos["ID"]; + $commentID = $commentInfos->get_id(); //Check if an image is associated to the comment - if(strlen($commentInfos['img_path']) > 2){ + if($commentInfos->has_img_path()){ - $image_path = path_user_data($commentInfos['img_path'], true); + $image_path = path_user_data($commentInfos->get_img_path(), true); //Delete the image if it exists if(file_exists($image_path)) @@ -213,10 +213,10 @@ class Comments { public function getAssociatedPost(int $commentID) : int { //Get a single comment informations - $commentInfos = $this->get_single($commentID); + $comment = $this->get_single($commentID); //Check if we have got the required information and return it - return isset($commentInfos["postID"]) ? $commentInfos["postID"] : 0; + return $comment->has_postID() ? $comment->get_postID() : 0; } /** @@ -270,6 +270,38 @@ class Comments { } + /** + * Turn a comment database entry into a Comment object + * + * @param array $data Database entry + * @param bool $load_likes Specify if the likes have to be loaded or not + * @return Comment Generated comment object + */ + private function dbToComment(array $data, bool $load_likes = true) : Comment { + + $comment = new Comment(); + + $comment->set_id($data["ID"]); + $comment->set_userID($data["ID_personne"]); + $comment->set_postID($data["ID_texte"]); + $comment->set_time_sent(strtotime($data["date_envoi"])); + $comment->set_content($data["commentaire"]); + + //Check for image + if($data["image_commentaire"] != ""){ + $comment->set_img_path(str_replace("file:", "", $data["image_commentaire"])); + $info->set_img_url(path_user_data($info->get_img_path(), false)); + } + + if($load_likes){ + //Get informations about likes + $comment->set_likes(CS::get()->components->likes->count($comment->get_id(), Likes::LIKE_COMMENT)); + $comment->set_userLike(user_signed_in() ? CS::get()->components->likes->is_liking(userID, $comment->get_id(), Likes::LIKE_COMMENT) : false); + } + + return $comment; + + } } //Register class diff --git a/classes/models/BaseUniqueObject.php b/classes/models/BaseUniqueObject.php index d9d6f0b..97d9771 100644 --- a/classes/models/BaseUniqueObject.php +++ b/classes/models/BaseUniqueObject.php @@ -5,7 +5,7 @@ * @author Pierre HUBERT */ -abstract class BaseUniqueObject { +class BaseUniqueObject { //Private fields private $id = 0; diff --git a/classes/models/Comment.php b/classes/models/Comment.php index 2b4896d..ede6abd 100644 --- a/classes/models/Comment.php +++ b/classes/models/Comment.php @@ -12,11 +12,21 @@ class Comment extends BaseUniqueObject { private $postID; private $time_sent; private $content; - private $image_path; - private $image_url; + private $img_path; + private $img_url; private $likes; private $userLike; + /** + * Public constructor + */ + public function __construct(){ + //Initialize some values + $this->postID = 0; + $this->userID = 0; + $this->likes = -1; + } + //Set and get user ID public function set_userID(int $userID){ $this->userID = $userID; @@ -31,6 +41,10 @@ class Comment extends BaseUniqueObject { $this->postID = $postID; } + public function has_postID() : bool { + return $this->postID > 0; + } + public function get_postID() : int { return $this->postID; } @@ -88,6 +102,10 @@ class Comment extends BaseUniqueObject { $this->likes = $likes; } + public function has_likes() : bool { + return $this->likes > -1; + } + public function get_likes() : int { return $this->likes; }