From 9f52240a5c7387c50473f215c3361066b27eb30d Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Tue, 17 Jul 2018 10:19:45 +0200 Subject: [PATCH] Can get and return the number of likes of a group. --- RestControllers/GroupsController.php | 7 +++++++ classes/components/GroupsComponent.php | 11 +++++++++-- classes/components/likes.php | 4 +++- classes/models/AdvancedGroupInfo.php | 24 ++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/RestControllers/GroupsController.php b/RestControllers/GroupsController.php index 144f360..1fcbc6d 100644 --- a/RestControllers/GroupsController.php +++ b/RestControllers/GroupsController.php @@ -116,6 +116,11 @@ class GroupsController { if(!$group->isValid()) Rest_fatal_error(404, "The requested group was not found !"); + //If the user is signed in, check whether he is liking or not the group + if(userID > 0) + $group->setLiking(components()->likes->is_liking( + userID, $group->get_id(), Likes::LIKE_GROUP)); + //Parse and return information about the group return self::AdvancedGroupInfoToAPI($group); } @@ -649,6 +654,8 @@ class GroupsController { $data["time_create"] = $info->get_time_create(); $data["description"] = $info->get_description(); $data["url"] = $info->get_url(); + $data["number_likes"] = $info->get_number_likes(); + $data["is_liking"] = $info->isLiking(); return $data; } diff --git a/classes/components/GroupsComponent.php b/classes/components/GroupsComponent.php index a01dd5f..1effec0 100644 --- a/classes/components/GroupsComponent.php +++ b/classes/components/GroupsComponent.php @@ -169,7 +169,7 @@ class GroupsComponent { return new AdvancedGroupInfo(); //Return invalid object //Create and fill GroupInfo object with database entry - return $this->dbToAdvancedGroupInfo($info[0]); + return $this->dbToAdvancedGroupInfo($info[0], null, TRUE); } /** @@ -643,9 +643,11 @@ class GroupsComponent { * @param array $data Database entry * @param AdvancedGroupInfo $info Optionnal, fill an existing object * instead of creating a new one + * @param bool $load_likes Specified whether the likes of the group should + * be loaded or not (default: FALSE) * @return AdvancedGroupInfo Advanced information about the group */ - private function dbToAdvancedGroupInfo(array $data, AdvancedGroupInfo $info = null) : AdvancedGroupInfo { + private function dbToAdvancedGroupInfo(array $data, AdvancedGroupInfo $info = null, bool $load_likes = FALSE) : AdvancedGroupInfo { if($info == null) $info = new AdvancedGroupInfo(); @@ -659,6 +661,11 @@ class GroupsComponent { $info->set_description($data["description"]); if($data["url"] != null && $data["url"] != "" && $data["url"] != "null") $info->set_url($data["url"]); + + //Load likes information, if required + if($load_likes){ + $info->set_number_likes(components()->likes->count($info->get_id(), Likes::LIKE_GROUP)); + } return $info; diff --git a/classes/components/likes.php b/classes/components/likes.php index f753b9f..523fa5e 100644 --- a/classes/components/likes.php +++ b/classes/components/likes.php @@ -18,6 +18,7 @@ class Likes { const LIKE_USER = "user"; const LIKE_POST = "post"; const LIKE_COMMENT = "comment"; + const LIKE_GROUP = "group"; /** * Translation of the kinds of like for the database @@ -25,7 +26,8 @@ class Likes { const KINDS_DB = array( Likes::LIKE_USER => "page", Likes::LIKE_POST => "texte", - Likes::LIKE_COMMENT => "commentaire" + Likes::LIKE_COMMENT => "commentaire", + Likes::LIKE_GROUP => "group" ); /** diff --git a/classes/models/AdvancedGroupInfo.php b/classes/models/AdvancedGroupInfo.php index 4a96a4a..21ccda1 100644 --- a/classes/models/AdvancedGroupInfo.php +++ b/classes/models/AdvancedGroupInfo.php @@ -14,6 +14,8 @@ class AdvancedGroupInfo extends GroupInfo { private $time_create = -1; private $url; private $description; + private $number_likes = -1; + private $is_liking = false; //Get and set the creation time of the group public function set_time_create(int $time_create){ @@ -53,4 +55,26 @@ class AdvancedGroupInfo extends GroupInfo { public function get_description() : string { return $this->description != null ? $this->description : "null"; } + + //Set and get the number of likes over the group + public function set_number_likes(int $number_likes){ + $this->number_likes = $number_likes; + } + + public function has_number_likes() : bool { + return $this->number_likes > -1; + } + + public function get_number_likes() : int { + return $this->number_likes; + } + + //Set and get wheter the user is liking the group or not + public function setLiking(bool $liking){ + $this->is_liking = $liking; + } + + public function isLiking() : bool { + return $this->is_liking; + } } \ No newline at end of file