From 14c594b082cfb7934d76e4dd7393f65d82af86a6 Mon Sep 17 00:00:00 2001 From: Maximilian Mader Date: Sat, 21 Mar 2015 00:54:03 +0100 Subject: [PATCH] Prevent inviting users who have blocked the sender --- file/js/be.bastelstu.Chat.litcoffee | 12 ++++++++++-- file/lib/data/user/UserAction.class.php | 25 ++++++++++++++++++++++++- language/de.xml | 1 + language/en.xml | 1 + 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/file/js/be.bastelstu.Chat.litcoffee b/file/js/be.bastelstu.Chat.litcoffee index a5468c7..60b9645 100644 --- a/file/js/be.bastelstu.Chat.litcoffee +++ b/file/js/be.bastelstu.Chat.litcoffee @@ -192,7 +192,7 @@ Open the smiley wcfDialog Handle private channel menu $('#timsChatMessageTabMenu > .tabMenu').on 'click', '.timsChatMessageTabMenuAnchor', -> - openPrivateChannel $(@).data 'userID' + openPrivateChannel $(@).data 'userID' Handle submitting the form. The message will be validated by some basic checks, passed to the `submit` eventlisteners and afterwards sent to the server by an AJAX request. @@ -410,11 +410,19 @@ Show invite dialog. success: (data) -> do new WCF.System.Notification(WCF.Language.get 'wcf.global.success').show + failure: (data) -> + return true unless (data?.returnValues?.errorType?) or (data?.message?) + + $("""
#{(data?.returnValues?.errorType) ? data.message}
""").wcfDialog title: WCF.Language.get 'wcf.global.error.title' + + return false + $('#timsChatInviteDialog').wcfDialog 'close' timsChatInviteDialog.wcfDialog title: WCF.Language.get 'chat.global.invite' - + onShow: -> do $('#userInviteDialogUsernameInput').focus + Hide topic container. diff --git a/file/lib/data/user/UserAction.class.php b/file/lib/data/user/UserAction.class.php index 91cc035..a53b66b 100644 --- a/file/lib/data/user/UserAction.class.php +++ b/file/lib/data/user/UserAction.class.php @@ -67,12 +67,35 @@ public function validateInvite() { if (!$this->room->canEnter()) throw new \wcf\system\exception\PermissionDeniedException(); if (!isset($this->parameters['recipients'])) throw new \wcf\system\exception\UserInputException("recipients"); + + $this->parameters['recipients'] = \wcf\util\ArrayUtil::toIntegerArray($this->parameters['recipients']); + + $ignoredByList = new \wcf\data\user\ignore\UserIgnoreList(); + $ignoredByList->getConditionBuilder()->add('user_ignore.ignoreUserID = ?', array(WCF::getUser()->userID)); + $ignoredByList->getConditionBuilder()->add('user_ignore.userID IN (?)', array($this->parameters['recipients'])); + + if (!empty($ignoredByList->sqlSelects)) $ignoredByList->sqlSelects .= ','; + $ignoredByList->sqlSelects .= "user_ignore.ignoreID"; + $ignoredByList->sqlSelects .= ", user_table.username"; + $ignoredByList->sqlJoins .= " LEFT JOIN wcf".WCF_N."_user user_table ON (user_table.userID = user_ignore.userID)"; + + $ignoredByList->readObjects(); + $ignoredByUsers = $ignoredByList->getObjects(); + + if (!empty($ignoredByUsers)) { + $usernames = array(); + foreach ($ignoredByUsers as $user) { + $usernames[] = $user->username; + } + + throw new \wcf\system\exception\UserInputException("recipients", WCF::getLanguage()->getDynamicVariable('chat.error.invite.ignored', array('users' => $ignoredByUsers, 'usernames' => $usernames))); + } } /** * Invites users. */ public function invite() { - \wcf\system\user\notification\UserNotificationHandler::getInstance()->fireEvent('invited', 'be.bastelstu.chat.room', new \chat\system\user\notification\object\RoomUserNotificationObject($this->room), \wcf\util\ArrayUtil::toIntegerArray($this->parameters['recipients']), array('userID' => WCF::getUser()->userID)); + \wcf\system\user\notification\UserNotificationHandler::getInstance()->fireEvent('invited', 'be.bastelstu.chat.room', new \chat\system\user\notification\object\RoomUserNotificationObject($this->room), $this->parameters['recipients'], array('userID' => WCF::getUser()->userID)); } } diff --git a/language/de.xml b/language/de.xml index 27dd04c..bc58b85 100644 --- a/language/de.xml +++ b/language/de.xml @@ -149,6 +149,7 @@ Probieren Sie, den Chat neu zu laden