Ejemplo n.º 1
0
 /**
  * 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();
 }