HackerOne users: Testing against this community violates our program's Terms of Service and will result in your bounty being denied.

Vanilla 3.2 - how to create link to send group message?

I want to implement button for user to start a private conversation with discussion starter and moderator.

Just to start conversation with user I use: /messages/add/authorname/subject. How I can make it to add one more user to conversation?

Next part would be to display this only if type=discussion or categoryid=2, 3, 4, I mean not to be shown in questions (I put questions in separate categories), and this button should work as something like Help function with group conversation. I edited Reply plugin to show only in discussions, not comments, but i need a little help to finish it.

Comments

  • You would need to create your own plugin for that that mimics the MessagesController->add() method. This is why it doesn't work with pure Vanilla:

       public function add($recipient = '', $subject = '') {
    ...
               // Check if valid user name has been passed.
               if ($recipient != '') {
    
                 if  (!Gdn::userModel()->getByUsername($recipient)) {
    

    As you can see, what is passed as "authorname" is treated as one user name.

    You must create a plugin that fetches the recipient passed to the add function and transforms it to valid recipients. That would be possible with something like that:

       public function messagesController_render_before($sender, $args) {
           if ($sender->RequestMethod !== 'add') {
               return;
           }
    
           $recipientString = $sender->RequestArgs[0] ?? '';
           // explode by "+"
           // loop through array
           //  getByUsername
           //  add unknown usernamens to form errors
           //  add known users to "To"
    
           // Example for add ing to "To"
           $recipient = implode(['Groucho', 'Chico', 'Harpo'], ',');
    
           $sender->Form->setValue('To', $recipient);
       }
    

    But there is one problem: the add() method still receives the wrong user1+user2+user3 which yields an error. Not sure right now how to solve that. I'm sure there is a solution. If you can't figure it out, just drop a note and I see if I can find a way...

  • One could create a plugin with their own form that receives conversation message /subject (and possibly preset recipients) and then send the message internally.

    Just some code snippet:

    $conversationModel = new ConversationModel();
    $conversation = [ 'Format' => 'Text',  
                      'Body' => $formmsg,
                      'Subject' => "some subject ",
                      'InsertUserID' => $User->UserID,
                      'RecipientUserID' => [$recipientID1,$recipientID2] ];
    $conversationID = $conversationModel->save($conversation);
    

    As @R_J noted, to get recipientIDs use Gdn::userModel()->getByUsername() to cycle through user names you get (or prime) on the plugin form.

Sign In or Register to comment.