Implement Comment object for the get_single method

This commit is contained in:
Pierre 2018-04-21 15:31:40 +02:00
parent e20403e8ab
commit cf4b75c61a
4 changed files with 94 additions and 18 deletions

View File

@ -76,14 +76,14 @@ class commentsController {
$commentID = getPostCommentIDWithAccess("commentID"); $commentID = getPostCommentIDWithAccess("commentID");
//Get informations about the comment //Get informations about the comment
$infos = components()->comments->get_single($commentID, TRUE); $comment = components()->comments->get_single($commentID, TRUE);
//Check for errors //Check for errors
if(count($infos) == 0) if(!$comment->isValid())
Rest_fatal_error(500, "Couldn't fetch informations about the comment !"); Rest_fatal_error(500, "Couldn't fetch informations about the comment !");
//Return 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 conent
return $comment_content; 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;
}
} }

View File

@ -73,9 +73,9 @@ class Comments {
* *
* @param int $commentID The ID of the comment to get * @param int $commentID The ID of the comment to get
* @param bool $include_likes Specify if likes has to be loaded * @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 //Perform a request on the database
$conditions = "WHERE ID = ?"; $conditions = "WHERE ID = ?";
@ -86,10 +86,10 @@ class Comments {
//Check for results //Check for results
if(count($result) == 0) if(count($result) == 0)
return array(); return new Comment();
//Return result //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); $commentInfos = $this->get_single($commentID, false);
//Check for errors //Check for errors
if(count($commentInfos) == 0) if(!$commentInfos->isValid())
return false; return false;
//Process deletion //Process deletion
@ -137,18 +137,18 @@ class Comments {
/** /**
* Process comment deletion * 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 * @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 //Get comment ID
$commentID = $commentInfos["ID"]; $commentID = $commentInfos->get_id();
//Check if an image is associated to the comment //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 //Delete the image if it exists
if(file_exists($image_path)) if(file_exists($image_path))
@ -213,10 +213,10 @@ class Comments {
public function getAssociatedPost(int $commentID) : int { public function getAssociatedPost(int $commentID) : int {
//Get a single comment informations //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 //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 //Register class

View File

@ -5,7 +5,7 @@
* @author Pierre HUBERT * @author Pierre HUBERT
*/ */
abstract class BaseUniqueObject { class BaseUniqueObject {
//Private fields //Private fields
private $id = 0; private $id = 0;

View File

@ -12,11 +12,21 @@ class Comment extends BaseUniqueObject {
private $postID; private $postID;
private $time_sent; private $time_sent;
private $content; private $content;
private $image_path; private $img_path;
private $image_url; private $img_url;
private $likes; private $likes;
private $userLike; private $userLike;
/**
* Public constructor
*/
public function __construct(){
//Initialize some values
$this->postID = 0;
$this->userID = 0;
$this->likes = -1;
}
//Set and get user ID //Set and get user ID
public function set_userID(int $userID){ public function set_userID(int $userID){
$this->userID = $userID; $this->userID = $userID;
@ -31,6 +41,10 @@ class Comment extends BaseUniqueObject {
$this->postID = $postID; $this->postID = $postID;
} }
public function has_postID() : bool {
return $this->postID > 0;
}
public function get_postID() : int { public function get_postID() : int {
return $this->postID; return $this->postID;
} }
@ -88,6 +102,10 @@ class Comment extends BaseUniqueObject {
$this->likes = $likes; $this->likes = $likes;
} }
public function has_likes() : bool {
return $this->likes > -1;
}
public function get_likes() : int { public function get_likes() : int {
return $this->likes; return $this->likes;
} }