/** * Add a message to a conversation. * * @since 2.0.0 * @access public * * @param int $ConversationID Unique ID of the conversation. */ public function AddMessage($ConversationID = '') { $this->Form->SetModel($this->ConversationMessageModel); if (is_numeric($ConversationID) && $ConversationID > 0) { $this->Form->AddHidden('ConversationID', $ConversationID); } if ($this->Form->AuthenticatedPostBack()) { $ConversationID = $this->Form->GetFormValue('ConversationID', ''); // Make sure the user posting to the conversation is actually // a member of it, or is allowed, like an admin. if (!CheckPermission('Garden.Moderation.Manage')) { $UserID = Gdn::Session()->UserID; $ValidConversationMember = $this->ConversationModel->ValidConversationMember($ConversationID, $UserID); if (!$ValidConversationMember) { throw PermissionException(); } } $Conversation = $this->ConversationModel->GetID($ConversationID, Gdn::Session()->UserID); $this->EventArguments['Conversation'] = $Conversation; $this->EventArguments['ConversationID'] = $ConversationID; $this->FireEvent('BeforeAddMessage'); $NewMessageID = $this->Form->Save(); if ($NewMessageID) { if ($this->DeliveryType() == DELIVERY_TYPE_ALL) { Redirect('messages/' . $ConversationID . '/#' . $NewMessageID, 302); } $this->SetJson('MessageID', $NewMessageID); // If this was not a full-page delivery type, return the partial response // Load all new messages that the user hasn't seen yet (including theirs) $LastMessageID = $this->Form->GetFormValue('LastMessageID'); if (!is_numeric($LastMessageID)) { $LastMessageID = $NewMessageID - 1; } $Session = Gdn::Session(); $MessageData = $this->ConversationMessageModel->GetNew($ConversationID, $LastMessageID); $this->Conversation = $Conversation; $this->MessageData = $MessageData; $this->SetData('Messages', $MessageData); $this->View = 'messages'; } else { // Handle ajax based errors... if ($this->DeliveryType() != DELIVERY_TYPE_ALL) { $this->ErrorMessage($this->Form->Errors()); } } } $this->Render(); }