mirror of
https://github.com/pierre42100/ComunicAPI
synced 2025-07-15 14:28:08 +00:00
3rdparty
RestControllers
bin
classes
components
AccountComponent.php
AccountImage.php
BackgroundImage.php
CallsComponent.php
Conversations.php
GroupsComponent.php
MailQueue.php
SettingsComponent.php
SurveyComponent.php
UserComponent.php
comments.php
friends.php
likes.php
movies.php
notifications.php
posts.php
search.php
models
.htaccess
APIClients.php
APILimits.php
Components.php
DBLibrary.php
URLanalyzer.php
comunicAPI.php
config.php
config
functions
helpers
tests
.gitignore
.htaccess
LICENSE
README.md
db_struct.sql
index.php
init.php
322 lines
8.4 KiB
PHP
322 lines
8.4 KiB
PHP
<?php
|
|
/**
|
|
* Comments component class
|
|
*
|
|
* @author Pierre HUBERT
|
|
*/
|
|
|
|
class Comments {
|
|
|
|
/**
|
|
* Comments table
|
|
*/
|
|
const COMMENTS_TABLE = "commentaires";
|
|
|
|
/**
|
|
* Create a comment
|
|
*
|
|
* @param Comment $comment Information about the comment to create
|
|
* @return int The ID of the created comment or 0 in case of failure
|
|
*/
|
|
public function create(Comment $comment) : int {
|
|
|
|
//Generate data set
|
|
$data = array(
|
|
"ID_texte" => $comment->get_postID(),
|
|
"ID_personne" => $comment->get_userID(),
|
|
"date_envoi" => mysql_date(),
|
|
"time_insert" => time(),
|
|
"commentaire" => $comment->has_content() ? $comment->get_content() : "",
|
|
"image_commentaire" => $comment->has_img_path() ? "file:".$comment->get_img_path() : ""
|
|
);
|
|
|
|
//Insert it in the database
|
|
if(!CS::get()->db->addLine($this::COMMENTS_TABLE, $data))
|
|
return 0;
|
|
|
|
//Get the ID of the last inserted comment and return it
|
|
return CS::get()->db->getLastInsertedID();
|
|
}
|
|
|
|
/**
|
|
* Fetch the comments of a post
|
|
*
|
|
* @param int $postID The ID of the post
|
|
* @param bool $load_likes Specify whether the likes should be
|
|
* loaded or not (default to true)
|
|
* @return array The list of comments of the post (as Comment objects)
|
|
*/
|
|
public function get(int $postID, bool $load_likes = true) : array {
|
|
|
|
//Perform a request on the database
|
|
$conditions = "WHERE ID_texte = ? ORDER BY ID";
|
|
$condValues = array($postID);
|
|
|
|
//Fetch the messages on the database
|
|
$result = CS::get()->db->select($this::COMMENTS_TABLE, $conditions, $condValues);
|
|
|
|
//Process comments list
|
|
return $this->processMultipleResults($result, $load_likes);
|
|
|
|
}
|
|
|
|
/**
|
|
* Fetch the list of comments of a user
|
|
*
|
|
* @param int $userID The ID of the target user
|
|
* @return array The list of comments of the user, as comment object
|
|
*/
|
|
public function getAllUser(int $userID) : array {
|
|
|
|
//Perform a request over the database
|
|
$conditions = "WHERE ID_personne = ? ORDER BY ID";
|
|
$condValues = array($userID);
|
|
|
|
//Fetch the messages on the database
|
|
$result = CS::get()->db->select($this::COMMENTS_TABLE, $conditions, $condValues);
|
|
|
|
//Process comments list
|
|
return $this->processMultipleResults($result, FALSE);
|
|
}
|
|
|
|
/**
|
|
* Get a single comment informations
|
|
*
|
|
* @param int $commentID The ID of the comment to get
|
|
* @param bool $include_likes Specify if likes has to be loaded
|
|
* @return Comment Information about the comment (invalid comment in case of failure)
|
|
*/
|
|
public function get_single(int $commentID, bool $include_likes = false) : Comment {
|
|
|
|
//Perform a request on the database
|
|
$conditions = "WHERE ID = ?";
|
|
$values = array($commentID);
|
|
|
|
//Fetch the comment on the database
|
|
$result = CS::get()->db->select($this::COMMENTS_TABLE, $conditions, $values);
|
|
|
|
//Check for results
|
|
if(count($result) == 0)
|
|
return new Comment();
|
|
|
|
//Return result
|
|
return $this->dbToComment($result[0], $include_likes);
|
|
}
|
|
|
|
/**
|
|
* Delete all the comments associated to a post
|
|
*
|
|
* @param int $postID The ID of the target post
|
|
* @return bool TRUE in case of success / FALSE else
|
|
*/
|
|
public function delete_all(int $postID) : bool {
|
|
|
|
//Get the list of comments for the post
|
|
$comments = $this->get($postID, FALSE);
|
|
|
|
foreach($comments as $comment){
|
|
|
|
//Delete the comment
|
|
if(!$this->process_delete($comment))
|
|
return false;
|
|
|
|
}
|
|
|
|
//Success
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Delete a single comment
|
|
*
|
|
* @param int $commentID The ID of the comment to delete
|
|
* @return bool TRUE for a success / FALSE else
|
|
*/
|
|
public function delete(int $commentID) : bool {
|
|
|
|
//Get informations about the comment
|
|
$commentInfos = $this->get_single($commentID, false);
|
|
|
|
//Check for errors
|
|
if(!$commentInfos->isValid())
|
|
return false;
|
|
|
|
//Process deletion
|
|
return $this->process_delete($commentInfos);
|
|
}
|
|
|
|
/**
|
|
* Process comment deletion
|
|
*
|
|
* @param Comment $commentInfos Informations about the comment to delete
|
|
* @return bool TRUE for a success / FALSE else
|
|
*/
|
|
private function process_delete(Comment $commentInfos) : bool {
|
|
|
|
//Get comment ID
|
|
$commentID = $commentInfos->get_id();
|
|
|
|
//Check if an image is associated to the comment
|
|
if($commentInfos->has_img_path()){
|
|
|
|
$image_path = path_user_data($commentInfos->get_img_path(), true);
|
|
|
|
//Delete the image if it exists
|
|
if(file_exists($image_path))
|
|
unlink($image_path);
|
|
|
|
}
|
|
|
|
//Delete the likes associated to the comments
|
|
if(!components()->likes->delete_all($commentID, Likes::LIKE_COMMENT))
|
|
return false;
|
|
|
|
//Delete the comment
|
|
if(!CS::get()->db->deleteEntry($this::COMMENTS_TABLE, "ID = ?", array($commentID)))
|
|
return false;
|
|
|
|
//Success
|
|
return true;
|
|
|
|
}
|
|
|
|
/**
|
|
* Check if a comment exists or not
|
|
*
|
|
* @param int $commentID The ID of the comment to check
|
|
* @return bool
|
|
*/
|
|
public function exists(int $commentID) : bool {
|
|
|
|
return CS::get()->db->count($this::COMMENTS_TABLE, "WHERE ID = ?", array($commentID)) > 0;
|
|
|
|
}
|
|
|
|
/**
|
|
* Edit a comment content
|
|
*
|
|
* @param int $commentID The ID of the comment to update
|
|
* @param string $content The new content for the comment
|
|
* @return bool TRUE for a success / FALSE else
|
|
*/
|
|
public function edit(int $commentID, string $content) : bool {
|
|
|
|
//Perform a request on the database
|
|
$newValues = array(
|
|
"commentaire" => $content
|
|
);
|
|
|
|
//Try to perform request
|
|
return CS::get()->db->updateDB(
|
|
$this::COMMENTS_TABLE,
|
|
"ID = ?",
|
|
$newValues,
|
|
array($commentID));
|
|
|
|
}
|
|
|
|
/**
|
|
* Get the ID of the post associated to a comment
|
|
*
|
|
* @param int $commentID The ID of the comment
|
|
* @return int The ID of the associated post / 0 in case of failure
|
|
*/
|
|
public function getAssociatedPost(int $commentID) : int {
|
|
|
|
//Get a single comment informations
|
|
$comment = $this->get_single($commentID);
|
|
|
|
//Check if we have got the required information and return it
|
|
return $comment->has_postID() ? $comment->get_postID() : 0;
|
|
}
|
|
|
|
/**
|
|
* Check if a user is the owner of a comment or not
|
|
*
|
|
* @param int $userID The ID of the user to check
|
|
* @param int $commentID The ID of the comment to check
|
|
* @return bool TRUE if the user is the owner of the post / FALSE else
|
|
*/
|
|
public function is_owner(int $userID, int $commentID) : bool {
|
|
return CS::get()->db->count(
|
|
$this::COMMENTS_TABLE,
|
|
"WHERE ID = ? AND ID_personne = ?",
|
|
array($commentID, $userID)
|
|
) > 0;
|
|
}
|
|
|
|
/**
|
|
* Delete all the comments of a user
|
|
*
|
|
* @param int $userID The ID of the target user
|
|
* @return bool TRUE for a success / FALSE else
|
|
*/
|
|
public function deleteAllUser(int $userID) : bool {
|
|
|
|
//Get all the comments of the user
|
|
$comments = $this->getAllUser($userID);
|
|
|
|
//Process the list of comments
|
|
$success = true;
|
|
foreach($comments as $comment)
|
|
$success = $this->process_delete($comment) ? $success : false;
|
|
|
|
//Return result
|
|
return $success;
|
|
}
|
|
|
|
/**
|
|
* Turn multiple database entries into Comment objects
|
|
*
|
|
* @param array $entries The database entries to process
|
|
* @param bool $load_likes Specify whether likes should be loaded
|
|
* or not
|
|
* @return array The list of generated Comment objects
|
|
*/
|
|
private function processMultipleResults(array $entries, bool $load_likes) : array {
|
|
|
|
$comments = array();
|
|
|
|
foreach($entries as $entry){
|
|
$comments[] = $this->dbToComment($entry, $load_likes);
|
|
}
|
|
|
|
return $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($data["time_insert"] == null ? strtotime($data["date_envoi"]) : $data["time_insert"]);
|
|
$comment->set_content($data["commentaire"]);
|
|
|
|
//Check for image
|
|
if($data["image_commentaire"] != ""){
|
|
$comment->set_img_path(str_replace("file:", "", $data["image_commentaire"]));
|
|
$comment->set_img_url(path_user_data($comment->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
|
|
Components::register("comments", new Comments()); |