* @package be.bastelstu.chat * @subpackage data.user */ class UserAction extends \wcf\data\AbstractDatabaseObjectAction { /** * @see \wcf\data\AbstractDatabaseObjectAction::$className */ protected $className = 'wcf\data\user\UserEditor'; /** * Validates updating of chat user options */ public function validateUpdateOption() { $this->readString('optionName'); $this->readBoolean('optionValue'); if (!preg_match('~^chat[A-Z]~', $this->parameters['optionName'])) throw new \wcf\system\exception\UserInputException('optionName'); $this->optionID = \wcf\data\user\User::getUserOptionID($this->parameters['optionName']); if (!$this->optionID) throw new \wcf\system\exception\UserInputException('optionName'); } /** * Updates chat user options */ public function updateOption() { $userAction = new \wcf\data\user\UserAction(array(WCF::getUser()), 'update', array( 'options' => array( $this->optionID => $this->parameters['optionValue'] ? 1 : 0 ) )); $userAction->executeAction(); } /** * Validates invite preparation. */ public function validatePrepareInvite() { WCF::getSession()->checkPermissions(array('user.chat.canInvite')); if (!WCF::getUser()->chatRoomID) throw new \wcf\system\exception\PermissionDeniedException(); $room = \chat\data\room\RoomCache::getInstance()->getRoom(WCF::getUser()->chatRoomID); if ($room === null) throw new \wcf\system\exception\IllegalLinkException(); if (!$room->canEnter()) throw new \wcf\system\exception\PermissionDeniedException(); } /** * Prepares invites. */ public function prepareInvite() { $followingList = new \wcf\data\user\follow\UserFollowingList(); $followingList->getConditionBuilder()->add('user_follow.userID = ?', array(WCF::getUser()->userID)); $followingList->readObjects(); $users = $followingList->getObjects(); $json = array(); foreach ($users as $user) { $json[] = array( 'userID' => $user->userID, 'username' => $user->username ); } return array( 'users' => $json ); } /** * Validates invites. */ public function validateInvite() { WCF::getSession()->checkPermissions(array('user.chat.canInvite')); if (!WCF::getUser()->chatRoomID) throw new \wcf\system\exception\PermissionDeniedException(); $this->room = \chat\data\room\RoomCache::getInstance()->getRoom(WCF::getUser()->chatRoomID); if ($this->room === null) throw new \wcf\system\exception\IllegalLinkException(); 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), $this->parameters['recipients'], array('userID' => WCF::getUser()->userID)); } }