From d9eeddb13166e0524ac88f498a6167ca4ca958a0 Mon Sep 17 00:00:00 2001 From: Pierre Date: Sun, 18 Jun 2017 16:18:09 +0200 Subject: [PATCH] Update conversation members operationnal --- RestControllers/conversationsController.php | 11 +++ classes/components/conversations.php | 91 ++++++++++++++++++--- 2 files changed, 92 insertions(+), 10 deletions(-) diff --git a/RestControllers/conversationsController.php b/RestControllers/conversationsController.php index faef9a6..4053a41 100644 --- a/RestControllers/conversationsController.php +++ b/RestControllers/conversationsController.php @@ -138,7 +138,18 @@ class conversationsController{ Rest_fatal_error(500, "Couldn't update conversation name !"); } + //Update conversation users (if required) + if(isset($_POST["members"])){ + //Get user list + $conversationMembers = users_list_to_array($_POST['members']); + //Make sure current user is in the list + $conversationMembers[userID] = userID; + + //Try to update conversation members + if(!CS::get()->components->conversations->updateMembers($conversationID, $conversationMembers)) + Rest_fatal_error(500, "Couldn't update conversation members list !"); + } } diff --git a/classes/components/conversations.php b/classes/components/conversations.php index 5136e26..bd7787a 100644 --- a/classes/components/conversations.php +++ b/classes/components/conversations.php @@ -158,20 +158,13 @@ class conversations { //Insert users registrattions foreach($usersList as $processUser){ - //Prepare informations about the user - $userInformations = array( - "ID_".$this->conversationsListTable => $conversationID, - "time_add" => time(), - "saw_last_message" => 1, - "ID_utilisateurs" => $processUser, - ); - //Make user follow the conversation if required + $processUserFollowing = false; if($userID == $processUser) - $userInformations["following"] = ($follow ? 1 : 0); + $processUserFollowing = $follow; //Try to insert user in conversation - if(!CS::get()->db->addLine($this->conversationsUsersTable, $userInformations)) + if(!$this->addMember($conversationID, $processUser, $processUserFollowing)) return 0; //Error } @@ -264,6 +257,84 @@ class conversations { return true; } + /** + * Update conversation members list + * + * @param Integer $conversationID The ID of the conversation to update + * @param Array $conversationMembers The new list of conversation members + * @return Boolean True for a success + */ + public function updateMembers($conversationID, array $conversationMembers){ + + //Get the current conversation list + $currentMembers = $this->getConversationMembers($conversationID); + + //Determinate entries to add + $toAdd = array_diff($conversationMembers, $currentMembers); + + //Determinate entries to remove + $toRemove = array_diff($currentMembers, $conversationMembers); + + //Add new member + foreach($toAdd as $processInsert){ + if(!$this->addMember($conversationID, $processInsert)) + return false; //An error occured + } + + //Remove old members + foreach($toRemove as $processDelete){ + if(!$this->removeMember($conversationID, $processDelete)) + return false; //An error occured + } + + //Success + return true; + } + + /** + * Add a member to the list + * + * @param Integer $conversationID The ID of the target conversation + * @param Integer $userID The ID of the user to add to the conversation + * @param Boolean $follow Optionnal, specify if the user will follow or not the conversation + * @return Boolean True for a success + */ + private function addMember($conversationID, $userID, $follow = false){ + + //Prepare database request + $tableName = $this->conversationsUsersTable; + $values = array( + "ID_".$this->conversationsListTable => $conversationID, + "ID_utilisateurs" => $userID, + "time_add" => time(), + "following" => $follow ? 1 : 0, + "saw_last_message" => 1 + ); + + //Try to perform request + return CS::get()->db->addLine($tableName, $values); + } + + /** + * Remove a member from the list + * + * @param Integer $conversationID The ID of the target conversation + * @param Integer $userID The ID of the user to remove from the conversation + * @return Boolean True for a success + */ + private function removeMember($conversationID, $userID){ + //Prepare database request + $tableName = $this->conversationsUsersTable; + $conditions = "ID_".$this->conversationsListTable." = ? AND ID_utilisateurs = ?"; + $values = array( + $conversationID, + $userID + ); + + //Try to perform request + return CS::get()->db->deleteEntry($tableName, $conditions, $values); + } + /** * Check if a user is a conversation moderator or not *