/** * 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); $this->EventArguments['MessageID'] = $NewMessageID; $this->fireEvent('AfterMessageSave'); // 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(); }