Check whether groups add any members to a conversation in ConversationAdd
authorTim Düsterhus <duesterhus@woltlab.com>
Fri, 3 Jul 2020 13:29:25 +0000 (15:29 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Fri, 3 Jul 2020 13:29:25 +0000 (15:29 +0200)
see #137

files/lib/form/ConversationAddForm.class.php
language/de.xml
language/en.xml

index 9a1787aa48ba071c7ff5fcd60dec0c68b963710d..fc243a15832029fc1f62586c9f624f5bf00877d2 100644 (file)
@@ -179,12 +179,20 @@ class ConversationAddForm extends MessageForm {
                $this->participantIDs = Conversation::validateParticipants($this->participants);
                $this->invisibleParticipantIDs = Conversation::validateParticipants($this->invisibleParticipants, 'invisibleParticipants');
                if (!empty($this->participantsGroupIDs)) {
-                       $this->participantIDs = array_merge($this->participantIDs, Conversation::validateGroupParticipants($this->participantsGroupIDs));
-                       $this->participantIDs = array_unique($this->participantIDs);
+                       $validGroupParticipants = Conversation::validateGroupParticipants($this->participantsGroupIDs);
+                       $validGroupParticipants = array_diff($validGroupParticipants, $this->participantIDs);
+                       if (empty($validGroupParticipants)) {
+                               throw new UserInputException('participants', 'emptyGroup');
+                       }
+                       $this->participantIDs = array_merge($this->participantIDs, $validGroupParticipants);
                }
                if (!empty($this->invisibleParticipantsGroupIDs)) {
-                       $this->invisibleParticipantIDs = array_merge($this->invisibleParticipantIDs, Conversation::validateGroupParticipants($this->invisibleParticipantsGroupIDs, 'invisibleParticipants'));
-                       $this->invisibleParticipantIDs = array_unique($this->invisibleParticipantIDs);
+                       $validGroupParticipants = Conversation::validateGroupParticipants($this->invisibleParticipantsGroupIDs, 'invisibleParticipants');
+                       $validGroupParticipants = array_diff($validGroupParticipants, $this->invisibleParticipantIDs);
+                       if (empty($validGroupParticipants)) {
+                               throw new UserInputException('invisibleParticipants', 'emptyGroup');
+                       }
+                       $this->invisibleParticipantIDs = array_merge($this->invisibleParticipantIDs, $validGroupParticipants);
                }
                
                // remove duplicates
index 882b29fc3d7962ec274b57f20f6301f8c843fa2e..3cf7eb185f8ecc2f41fef695fa9ed9005cfba305 100644 (file)
                <item name="wcf.conversation.participants.error.duplicate"><![CDATA[{$errorData[username]} ist bereits Teilnehmer dieser Konversation.]]></item>
                <item name="wcf.conversation.participants.error.canNotUseConversation"><![CDATA[{$errorData[username]} besitzt nicht die notwendigen Berechtigungen, um an einer Konversation teilnehmen zu dürfen.]]></item>
                <item name="wcf.conversation.participants.error.doesNotAcceptConversation"><![CDATA[{$errorData[username]} möchte nicht an Konversationen teilnehmen.]]></item>
+               <item name="wcf.conversation.participants.error.emptyGroup"><![CDATA[Die Mitglieder aller angegebener Gruppen sind bereits Teilnehmer dieser Konversation.]]></item>
                <item name="wcf.conversation.participants.error.ignoresYou"><![CDATA[{$errorData[username]} hat {if LANGUAGE_USE_INFORMAL_VARIANT}dich{else}Sie{/if} blockiert.]]></item>
                <item name="wcf.conversation.participants.error.tooManyParticipants"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Du hast{else}Sie haben{/if} zu viele Teilnehmer angegeben. Das Maximum liegt bei {#$__wcf->getSession()->getPermission('user.conversation.maxParticipants')} Teilnehmern.]]></item>
                <item name="wcf.conversation.participants.error.invisibleParticipantsNoPermission"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Du hast{else}Sie haben{/if} keine Berechtigung, unsichtbare Teilnehmer hinzuzufügen.]]></item>
index ee2ebb1dda7c3049ceaef296bdbbb7ccdc1b6a05..f36e1c35921a845c97e0884c2b960da1b7801a3e 100644 (file)
                <item name="wcf.conversation.participants.error.duplicate"><![CDATA[{$errorData[username]} is already a participant of this conversation.]]></item>
                <item name="wcf.conversation.participants.error.canNotUseConversation"><![CDATA[{$errorData[username]} is not allowed to participate in a conversation.]]></item>
                <item name="wcf.conversation.participants.error.doesNotAcceptConversation"><![CDATA[{$errorData[username]} does not want to be added in conversations.]]></item>
+               <item name="wcf.conversation.participants.error.emptyGroup"><![CDATA[Every member within the given user groups already participates in this conversation.]]></item>
                <item name="wcf.conversation.participants.error.ignoresYou"><![CDATA[{$errorData[username]} is blocking you.]]></item>
                <item name="wcf.conversation.participants.error.tooManyParticipants"><![CDATA[You have added too many participants, you can add up to {#$__wcf->getSession()->getPermission('user.conversation.maxParticipants')} participants.]]></item>
                <item name="wcf.conversation.participants.error.invisibleParticipantsNoPermission"><![CDATA[You do not have the permission to add invisible participants.]]></item>