/** * @see \wcf\data\DatabaseObjectList::readObjects() */ public function readObjects() { parent::readObjects(); $userIDs = array(); $eventGroups = array(); foreach ($this->objects as &$event) { $userIDs[] = $event->userID; $event = new ViewableUserActivityEvent($event); if (!isset($eventGroups[$event->objectTypeID])) { $objectType = UserActivityEventHandler::getInstance()->getObjectType($event->objectTypeID); $eventGroups[$event->objectTypeID] = array('className' => $objectType->className, 'objects' => array()); } $eventGroups[$event->objectTypeID]['objects'][] = $event; } unset($event); // set user profiles if (!empty($userIDs)) { $userIDs = array_unique($userIDs); $users = UserProfile::getUserProfiles($userIDs); foreach ($this->objects as $event) { $event->setUserProfile($users[$event->userID]); } } // parse events foreach ($eventGroups as $eventData) { $eventClass = call_user_func(array($eventData['className'], 'getInstance')); $eventClass->prepare($eventData['objects']); } }
/** * @see \wcf\data\DatabaseObjectList::readObjects() */ public function readObjects() { parent::readObjects(); // get user ids $userIDs = array(); foreach ($this->objects as &$response) { if (!$this->minResponseTime || $response->time < $this->minResponseTime) { $this->minResponseTime = $response->time; } $userIDs[] = $response->userID; $response = new StructuredCommentResponse($response); $response->setIsDeletable($this->commentManager->canDeleteResponse($response->getDecoratedObject())); $response->setIsEditable($this->commentManager->canEditResponse($response->getDecoratedObject())); } unset($response); // fetch user data and avatars if (!empty($userIDs)) { $userIDs = array_unique($userIDs); $users = UserProfile::getUserProfiles($userIDs); foreach ($this->objects as $response) { if (isset($users[$response->userID])) { $response->setUserProfile($users[$response->userID]); } } } }
/** * Validates the 'unignore' action. */ public function validateUnignore() { $this->readInteger('ignoreUserID', false, 'data'); $userProfile = UserProfile::getUserProfile($this->parameters['data']['ignoreUserID']); if ($userProfile === null) { throw new IllegalLinkException(); } }
/** * @see \wcf\page\IPage::show() */ public function show() { WCF::getSession()->checkPermissions(array('user.profile.canMail')); if (!$this->user->isAccessible('canMail')) { throw new PermissionDeniedException(); } parent::show(); }
/** * @see \wcf\data\IGroupedUserListAction::validateGetGroupedUserList() */ public function validateGetGroupedUserList() { $this->readInteger('pageNo'); $this->readInteger('userID'); $this->userProfile = UserProfile::getUserProfile($this->parameters['userID']); if ($this->userProfile->isProtected()) { throw new PermissionDeniedException(); } }
/** * @see \wcf\page\IPage::assignVariables() */ public function assignVariables() { parent::assignVariables(); $reportUser = UserProfile::getUserProfile($this->queue->userID); if ($reportUser === null) { $reportUser = new UserProfile(new User(null, array())); } WCF::getTPL()->assign(array('reportedContent' => ModerationQueueReportManager::getInstance()->getReportedContent($this->queue), 'queueManager' => ModerationQueueReportManager::getInstance(), 'reportUser' => $reportUser)); }
/** * Returns the user-object which received this statement. * @return wcf\data\user\UserProfile */ public function getUser() { if ($this->user === null) { if ($this->userID) { $this->user = UserProfile::getUserProfile($this->userID); } else { $this->user = new UserProfile(new User(null, array())); } } return $this->user; }
/** * @see \wcf\data\DatabaseObjectList::readObjects() */ public function readObjects() { parent::readObjects(); EventHandler::getInstance()->fireAction($this, 'afterReadObjects'); // cache userids $userIDs = array(); foreach ($this->objects as $object) { $userIDs[] = $object->userID; $userIDs[] = $object->executedUserID; } array_unique($userIDs); UserProfile::getUserProfiles($userIDs); }
/** * Returns a structured response. * * @param integer $responseID * @return \wcf\data\comment\response\StructuredCommentResponse */ public static function getResponse($responseID) { $response = new CommentResponse($responseID); if (!$response->responseID) { return null; } // prepare structured response $response = new StructuredCommentResponse($response); // add user profile $userProfile = UserProfile::getUserProfile($response->userID); $response->setUserProfile($userProfile); return $response; }
/** * @see \cms\system\content\type\IContentType::getOutput() */ public function getOutput(Content $content) { if ($content->userID) { $user = UserProfile::getUserProfile($content->userID); } else { if ($content->name) { $user = UserProfile::getUserProfileByUsername($content->name); } else { throw new SystemException('Neither user id nor username provided'); } } WCF::getTPL()->assign(array('user' => $user)); return parent::getOutput($content); }
/** * Saves changes to user profile. * * @return array */ public function save() { $userTitle = null; if (isset($this->parameters['values']['__userTitle'])) { $userTitle = StringUtil::trim(MessageUtil::stripCrap($this->parameters['values']['__userTitle'])); unset($this->parameters['values']['__userTitle']); } $optionHandler = $this->getOptionHandler($this->userProfile->getDecoratedObject()); $optionHandler->readUserInput($this->parameters); $errors = $optionHandler->validate(); // validate user title if ($userTitle !== null) { try { if (mb_strlen($userTitle) > USER_TITLE_MAX_LENGTH) { throw new UserInputException('__userTitle', 'tooLong'); } if (!StringUtil::executeWordFilter($userTitle, USER_FORBIDDEN_TITLES)) { throw new UserInputException('__userTitle', 'forbidden'); } } catch (UserInputException $e) { $errors[$e->getField()] = $e->getType(); } } // validation was successful if (empty($errors)) { $saveOptions = $optionHandler->save(); $data = array('options' => $saveOptions); // save user title if ($userTitle !== null) { $data['data'] = array('userTitle' => $userTitle); } $userAction = new UserAction(array($this->userProfile->userID), 'update', $data); $userAction->executeAction(); // check if the user will be automatically added to new // user groups because of the changed user options UserGroupAssignmentHandler::getInstance()->checkUsers(array($this->userProfile->userID)); // return parsed template $user = new User($this->userProfile->userID); // reload option handler $optionHandler = $this->getOptionHandler($user, false); $options = $optionHandler->getOptionTree(); WCF::getTPL()->assign(array('options' => $options, 'userID' => $this->userProfile->userID)); return array('success' => true, 'template' => WCF::getTPL()->fetch('userProfileAbout')); } else { // validation failed WCF::getTPL()->assign(array('errorType' => $errors, 'optionTree' => $optionHandler->getOptionTree(), '__userTitle' => $userTitle !== null ? $userTitle : $this->userProfile->userTitle)); return array('success' => false, 'template' => WCF::getTPL()->fetch('userProfileAboutEditable')); } }
/** * @see \wcf\page\IPage::show() */ public function show() { // update profile hits if ($this->user->userID != WCF::getUser()->userID && !WCF::getSession()->spiderID && !$this->user->isProtected()) { $editor = new UserEditor($this->user->getDecoratedObject()); $editor->updateCounters(array('profileHits' => 1)); // save visitor if (PROFILE_ENABLE_VISITORS && WCF::getUser()->userID && !WCF::getUser()->canViewOnlineStatus) { if (($visitor = UserProfileVisitor::getObject($this->user->userID, WCF::getUser()->userID)) !== null) { $editor = new UserProfileVisitorEditor($visitor); $editor->update(array('time' => TIME_NOW)); } else { UserProfileVisitorEditor::create(array('ownerID' => $this->user->userID, 'userID' => WCF::getUser()->userID, 'time' => TIME_NOW)); } } } parent::show(); }
/** * @see \wcf\data\DatabaseObjectList::readObjects() */ public function readObjects() { parent::readObjects(); if (!empty($this->objects)) { $objects = array(); foreach ($this->objects as &$object) { $object = new ViewableModerationQueue($object); if (!isset($objects[$object->objectTypeID])) { $objects[$object->objectTypeID] = array(); } $objects[$object->objectTypeID][] = $object; } unset($object); foreach ($objects as $objectTypeID => $queueItems) { ModerationQueueManager::getInstance()->populate($objectTypeID, $queueItems); } // check for non-existant items $queueIDs = array(); foreach ($this->objects as $index => $object) { if ($object->isOrphaned()) { $queueIDs[] = $object->queueID; unset($this->objects[$index]); } } // remove orphaned queues if (!empty($queueIDs)) { $this->indexToObject = array_keys($this->objects); ModerationQueueManager::getInstance()->removeOrphans($queueIDs); } if ($this->loadUserProfiles) { $userIDs = array(); foreach ($this->objects as $object) { $userIDs[] = $object->getAffectedObject()->getUserID(); } $userProfiles = UserProfile::getUserProfiles($userIDs); foreach ($this->objects as $object) { if (isset($userProfiles[$object->getAffectedObject()->getUserID()])) { $object->setUserProfile($userProfiles[$object->getAffectedObject()->getUserID()]); } } } } }
/** * @see \wcf\data\DatabaseObjectList::readObjects() */ public function readObjects() { parent::readObjects(); $userIDs = array(); $likeGroups = array(); foreach ($this->objects as &$like) { $userIDs[] = $like->userID; $like = new ViewableLike($like); if (!isset($likeGroups[$like->objectTypeID])) { $objectType = ObjectTypeCache::getInstance()->getObjectType($like->objectTypeID); $likeGroups[$like->objectTypeID] = array('provider' => $objectType->getProcessor(), 'objects' => array()); } $likeGroups[$like->objectTypeID]['objects'][] = $like; } unset($like); // set user profiles if (!empty($userIDs)) { $userIDs = array_unique($userIDs); $users = UserProfile::getUserProfiles($userIDs); foreach ($this->objects as $like) { $like->setUserProfile($users[$like->userID]); } } // parse like foreach ($likeGroups as $likeData) { if ($likeData['provider'] instanceof IViewableLikeProvider) { $likeData['provider']->prepare($likeData['objects']); } } // validate permissions foreach ($this->objects as $index => $like) { if (!$like->isAccessible()) { unset($this->objects[$index]); } } $this->indexToObject = array_keys($this->objects); }
/** * Loads user profiles for outstanding user ids. */ public static function loadUsers() { $userIDs = array(); foreach (self::$users as $userID => $user) { if ($user === null) { $userIDs[] = $userID; } } // load user profiles if (!empty($userIDs)) { $userProfiles = UserProfile::getUserProfiles($userIDs); foreach ($userProfiles as $userID => $userProfile) { self::$users[$userID] = $userProfile; } } }
/** * Validates parameters to begin profile inline editing. */ public function validateBeginEdit() { if (!empty($this->objectIDs) && count($this->objectIDs) == 1) { $userID = reset($this->objectIDs); $this->userProfile = UserProfile::getUserProfile($userID); } if ($this->userProfile === null || !$this->userProfile->userID) { throw new UserInputException('objectIDs'); } if ($this->userProfile->userID != WCF::getUser()->userID) { if (!$this->userProfile->canEdit()) { throw new PermissionDeniedException(); } } else { if (!$this->userProfile->canEditOwnProfile()) { throw new PermissionDeniedException(); } } }
/** * @see \wcf\system\like\IViewableLikeProvider::prepare() */ public function prepare(array $likes) { if (!WCF::getSession()->getPermission('user.news.canReadEntry')) { return; } $commentLikeObjectType = ObjectTypeCache::getInstance()->getObjectTypeByName('com.woltlab.wcf.like.likeableObject', 'com.woltlab.wcf.comment'); $commentIDs = $responseIDs = array(); foreach ($likes as $like) { if ($like->objectTypeID == $commentLikeObjectType->objectTypeID) { $commentIDs[] = $like->objectID; } else { $responseIDs[] = $like->objectID; } } // fetch response $userIDs = $responses = array(); if (!empty($responseIDs)) { $responseList = new CommentResponseList(); $responseList->getConditionBuilder()->add("comment_response.responseID IN (?)", array($responseIDs)); $responseList->readObjects(); $responses = $responseList->getObjects(); foreach ($responses as $response) { $commentIDs[] = $response->commentID; if ($response->userID) { $userIDs[] = $response->userID; } } } // fetch comments $commentList = new CommentList(); $commentList->getConditionBuilder()->add("comment.commentID IN (?)", array($commentIDs)); $commentList->readObjects(); $comments = $commentList->getObjects(); // fetch users $users = array(); $entryIDs = array(); foreach ($comments as $comment) { $entryIDs[] = $comment->objectID; if ($comment->userID) { $userIDs[] = $comment->userID; } } if (!empty($userIDs)) { $users = UserProfile::getUserProfiles(array_unique($userIDs)); } $entries = array(); if (!empty($entryIDs)) { $entryList = new EntryList(); $entryList->setObjectIDs($entryIDs); $entryList->readObjects(); $entries = $entryList->getObjects(); } // set message foreach ($likes as $like) { if ($like->objectTypeID == $commentLikeObjectType->objectTypeID) { // comment like if (isset($comments[$like->objectID])) { $comment = $comments[$like->objectID]; if (isset($entries[$comment->objectID]) && $entries[$comment->objectID]->canRead()) { $like->setIsAccessible(); // short output $text = WCF::getLanguage()->getDynamicVariable('wcf.like.title.de.incendium.cms.news.comment', array('commentAuthor' => $comment->userID ? $users[$comment->userID] : null, 'entry' => $entries[$comment->objectID], 'like' => $like)); $like->setTitle($text); // output $like->setDescription($comment->getExcerpt()); } } } else { // response like if (isset($responses[$like->objectID])) { $response = $responses[$like->objectID]; $comment = $comments[$response->commentID]; if (isset($entries[$comment->objectID]) && $entries[$comment->objectID]->canRead()) { $like->setIsAccessible(); // short output $text = WCF::getLanguage()->getDynamicVariable('wcf.like.title.de.incendium.cms.news.comment.response', array('responseAuthor' => $comment->userID ? $users[$response->userID] : null, 'commentAuthor' => $comment->userID ? $users[$comment->userID] : null, 'entry' => $entries[$comment->objectID], 'like' => $like)); $like->setTitle($text); // output $like->setDescription($response->getExcerpt()); } } } } }
/** * init one user by condition * * @param Mixed $var * @param Array $mbqOpt * $mbqOpt['case'] = 'oUserProfile' means init user by oUserProfile.$var is oUserProfile. * $mbqOpt['case'] = 'byUserId' means init user by user id.$var is user id. * $mbqOpt['case'] = 'byLoginName' means init user by login name.$var is login name. * @return Mixed */ public function initOMbqEtUser($var = null, $mbqOpt = array()) { if ($mbqOpt['case'] == 'oUserProfile') { $oMbqEtUser = MbqMain::$oClk->newObj('MbqEtUser'); $oUser = $var->getDecoratedObject(); $oMbqEtUser->userId->setOriValue($oUser->userID); $oMbqEtUser->loginName->setOriValue($oUser->username); $oMbqEtUser->userName->setOriValue($oUser->username); $oMbqEtUser->userEmail->setOriValue($oUser->email); $oMbqEtUser->userGroupIds->setOriValue($oUser->getGroupIDs()); $oMbqEtUser->iconUrl->setOriValue($var->getAvatar()->getURL()); $oMbqEtUser->postCount->setOriValue($oUser->wbbPosts); $oMbqEtUser->canSearch->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.canSearch.range.yes')); $oMbqEtUser->canWhosonline->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.canWhosonline.range.yes')); $oMbqEtUser->regTime->setOriValue($oUser->registrationDate); $oMbqEtUser->lastActivityTime->setOriValue($oUser->lastActivityTime); if ($var->isOnline()) { $oMbqEtUser->isOnline->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.isOnline.range.yes')); } else { $oMbqEtUser->isOnline->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.isOnline.range.no')); } if (MODULE_CONVERSATION && $var->getPermission('user.conversation.canUseConversation')) { $oMbqEtUser->canPm->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.canPm.range.yes')); $oMbqEtUser->acceptPm->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.acceptPm.range.yes')); $oMbqEtUser->canSendPm->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.canSendPm.range.yes')); } $oMbqEtUser->maxAttachment->setOriValue(10); //todo,hard code $oMbqEtUser->maxPngSize->setOriValue(1024 * 1024); //todo,hard code $oMbqEtUser->maxJpgSize->setOriValue(1024 * 1024); //todo,hard code $group = UserGroup::getGroupByID($oUser->groupID); if ($oUser->banned) { $oMbqEtUser->userType->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.userType.range.banned')); } else { if (empty($oUser->groupID) || empty($group)) { if (REGISTER_ACTIVATION_METHOD == 1) { $oMbqEtUser->userType->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.userType.range.inactive')); } else { $oMbqEtUser->userType->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.userType.range.unapproved')); } } else { if ($group->isAdminGroup()) { $oMbqEtUser->userType->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.userType.range.admin')); } else { if (method_exists($group, 'isModGroup') && $group->isModGroup()) { $oMbqEtUser->userType->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.userType.range.mod')); } else { $oMbqEtUser->userType->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.userType.range.normal')); } } } } $oMbqEtUser->mbqBind['oUser'] = $oUser; $oMbqEtUser->mbqBind['oUserProfile'] = $var; return $oMbqEtUser; } elseif ($mbqOpt['case'] == 'byUserId') { $userIds = array($var); $objsMbqEtUser = $this->getObjsMbqEtUser($userIds, array('case' => 'byUserIds')); if (is_array($objsMbqEtUser) && count($objsMbqEtUser) == 1) { return $objsMbqEtUser[0]; } return; } elseif ($mbqOpt['case'] == 'byLoginName') { $oUserProfile = UserProfile::getUserProfileByUsername($var); if ($oUserProfile) { return $this->initOMbqEtUser($oUserProfile, array('case' => 'oUserProfile')); } return; } elseif ($mbqOpt['case'] == 'byEmail') { $userList = new UserProfileList(); $userList->getConditionBuilder()->add("user_table.email IN (?)", array(array($var))); $userList->readObjects(); $oUserProfile = current($userList->objects); if ($oUserProfile) { return $this->initOMbqEtUser($oUserProfile, array('case' => 'oUserProfile')); } return; } MbqError::alert('', __METHOD__ . ',line:' . __LINE__ . '.' . MBQ_ERR_INFO_UNKNOWN_CASE); }
/** * Returns a user profile by id, fetches user profiles on first call. * * @param integer $userID * @return \wcf\data\user\UserProfile */ public function getUser($userID) { if (!empty($this->userIDs)) { UserProfile::getUserProfiles($this->userIDs); $this->userIDs = array(); } return UserProfile::getUserProfile($userID); }
/** * Validates the 'cropAvatar' action. */ public function validateCropAvatar() { $this->avatar = $this->getSingleObject(); // check if user can edit the given avatar if ($this->avatar->userID != WCF::getUser()->userID && !WCF::getSession()->getPermission('admin.user.canEditUser')) { throw new PermissionDeniedException(); } if (!WCF::getSession()->getPermission('user.profile.avatar.canUploadAvatar') || UserProfile::getUserProfile($this->avatar->userID)->disableAvatar) { throw new PermissionDeniedException(); } // check parameters $this->readInteger('cropX', true); $this->readInteger('cropY', true); if ($this->parameters['cropX'] < 0 || $this->parameters['cropX'] > $this->avatar->width - UserAvatar::$maxThumbnailSize) { throw new UserInputException('cropX'); } if ($this->parameters['cropY'] < 0 || $this->parameters['cropY'] > $this->avatar->height - UserAvatar::$maxThumbnailSize) { throw new UserInputException('cropY'); } }
/** * init one user by condition * * @param Mixed $var * @param Array $mbqOpt * $mbqOpt['case'] = 'oUserProfile' means init user by oUserProfile.$var is oUserProfile. * $mbqOpt['case'] = 'byUserId' means init user by user id.$var is user id. * $mbqOpt['case'] = 'byLoginName' means init user by login name.$var is login name. * @return Mixed */ public function initOMbqEtUser($var, $mbqOpt) { if ($mbqOpt['case'] == 'oUserProfile') { $oMbqEtUser = MbqMain::$oClk->newObj('MbqEtUser'); $oUser = $var->getDecoratedObject(); $oMbqEtUser->userId->setOriValue($oUser->userID); $oMbqEtUser->loginName->setOriValue($oUser->username); $oMbqEtUser->userName->setOriValue($oUser->username); $oMbqEtUser->userGroupIds->setOriValue($oUser->getGroupIDs()); $oMbqEtUser->iconUrl->setOriValue($var->getAvatar()->getURL()); $oMbqEtUser->postCount->setOriValue($oUser->wbbPosts); $oMbqEtUser->canSearch->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.canSearch.range.yes')); $oMbqEtUser->canWhosonline->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.canWhosonline.range.yes')); $oMbqEtUser->regTime->setOriValue($oUser->registrationDate); $oMbqEtUser->lastActivityTime->setOriValue($oUser->lastActivityTime); if ($var->isOnline()) { $oMbqEtUser->isOnline->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.isOnline.range.yes')); } else { $oMbqEtUser->isOnline->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.isOnline.range.no')); } if (MODULE_CONVERSATION && $var->getPermission('user.conversation.canUseConversation')) { $oMbqEtUser->canPm->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.canPm.range.yes')); $oMbqEtUser->acceptPm->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.acceptPm.range.yes')); $oMbqEtUser->canSendPm->setOriValue(MbqBaseFdt::getFdt('MbqFdtUser.MbqEtUser.canSendPm.range.yes')); } $oMbqEtUser->maxAttachment->setOriValue(10); //todo,hard code $oMbqEtUser->maxPngSize->setOriValue(1024 * 1024); //todo,hard code $oMbqEtUser->maxJpgSize->setOriValue(1024 * 1024); //todo,hard code $oMbqEtUser->mbqBind['oUserProfile'] = $var; return $oMbqEtUser; } elseif ($mbqOpt['case'] == 'byUserId') { $userIds = array($var); $objsMbqEtUser = $this->getObjsMbqEtUser($userIds, array('case' => 'byUserIds')); if (is_array($objsMbqEtUser) && count($objsMbqEtUser) == 1) { return $objsMbqEtUser[0]; } return false; } elseif ($mbqOpt['case'] == 'byLoginName') { $oUserProfile = UserProfile::getUserProfileByUsername($var); if ($oUserProfile) { return $this->initOMbqEtUser($oUserProfile, array('case' => 'oUserProfile')); } return false; } MbqError::alert('', __METHOD__ . ',line:' . __LINE__ . '.' . MBQ_ERR_INFO_UNKNOWN_CASE); }
/** * @see wcf\form\IForm::readFormParameters() */ public function readFormParameters() { parent::readFormParameters(); if (isset($_POST['sum'])) { $this->sum = (int) $_POST['sum']; } if (isset($_POST['reason'])) { $this->reason = StringUtil::trim($_POST['reason']); } if (isset($_POST['username'])) { $this->usernames = StringUtil::trim($_POST['username']); } if (isset($_POST['isModerativ']) && $_POST['isModerativ'] == 1 && WCF::getSession()->getPermission('mod.jcoins.canModTransfer')) { $this->isModerativ = 1; } if (count(explode(',', $this->usernames)) > 0) { $users = explode(',', $this->usernames); $this->user = UserProfile::getUserProfilesByUsername(ArrayUtil::trim(explode(',', $this->usernames))); } }
/** * @see \wcf\page\IPage::readData() */ public function readData() { MessageForm::readData(); if (empty($_POST)) { $this->text = $this->message->message; if ($this->isFirstMessage) { $this->participantCanInvite = $this->conversation->participantCanInvite; $this->subject = $this->conversation->subject; if ($this->conversation->isDraft && $this->conversation->draftData) { $draftData = @unserialize($this->conversation->draftData); if (!empty($draftData['participants'])) { foreach (UserProfile::getUserProfiles($draftData['participants']) as $user) { if (!empty($this->participants)) { $this->participants .= ', '; } $this->participants .= $user->username; } } if (!empty($draftData['invisibleParticipants'])) { foreach (UserProfile::getUserProfiles($draftData['invisibleParticipants']) as $user) { if (!empty($this->invisibleParticipants)) { $this->invisibleParticipants .= ', '; } $this->invisibleParticipants .= $user->username; } } } } } // add breadcrumbs WCF::getBreadcrumbs()->add(new Breadcrumb(WCF::getLanguage()->get('wcf.conversation.conversations'), LinkHandler::getInstance()->getLink('ConversationList'))); WCF::getBreadcrumbs()->add($this->conversation->getBreadcrumb()); // get message list $this->messageList = new ViewableConversationMessageList(); $this->messageList->setConversation($this->conversation); $this->messageList->sqlLimit = CONVERSATION_REPLY_SHOW_MESSAGES_MAX; $this->messageList->sqlOrderBy = 'conversation_message.time DESC'; $this->messageList->getConditionBuilder()->add('conversation_message.conversationID = ?', array($this->message->conversationID)); $this->messageList->getConditionBuilder()->add("conversation_message.messageID <> ?", array($this->message->messageID)); $this->messageList->readObjects(); }
/** * Returns associated user profile object. * * @return \wcf\data\user\UserProfile */ public function getUserProfile() { if ($this->affectedObject !== null && $this->userProfile === null) { if ($this->affectedObject->getUserID()) { $this->userProfile = UserProfile::getUserProfile($this->affectedObject->getUserID()); } else { $this->userProfile = new UserProfile(new User(null, array())); } } return $this->userProfile; }
/** * @see \wcf\system\moderation\queue\IModerationQueueHandler::isAffectedUser() */ public function isAffectedUser(ModerationQueue $queue, $userID) { $user = new UserProfile(new User($userID)); return $user->getPermission($this->requiredPermission); }
/** * Processes a list of notification objects. * * @param array<\wcf\data\user\notification\UserNotification> $notificationObjects * @return array */ public function processNotifications(array $notificationObjects) { // return an empty set if no notifications exist if (empty($notificationObjects)) { return array('count' => 0, 'notifications' => array()); } $authorIDs = $eventIDs = $notificationIDs = $objectTypes = array(); foreach ($notificationObjects as $notification) { // cache object types if (!isset($objectTypes[$notification->objectType])) { $objectTypes[$notification->objectType] = array('objectType' => $this->availableObjectTypes[$notification->objectType], 'objectIDs' => array(), 'objects' => array()); } $objectTypes[$notification->objectType]['objectIDs'][] = $notification->objectID; $eventIDs[] = $notification->eventID; $notificationIDs[] = $notification->notificationID; } // load authors $conditions = new PreparedStatementConditionBuilder(); $conditions->add("notificationID IN (?)", array($notificationIDs)); $sql = "SELECT\t\tnotificationID, authorID\n\t\t\tFROM\t\twcf" . WCF_N . "_user_notification_author\n\t\t\t" . $conditions . "\n\t\t\tORDER BY\ttime ASC"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditions->getParameters()); $authorIDs = $authorToNotification = array(); while ($row = $statement->fetchArray()) { if ($row['authorID']) { $authorIDs[] = $row['authorID']; } if (!isset($authorToNotification[$row['notificationID']])) { $authorToNotification[$row['notificationID']] = array(); } $authorToNotification[$row['notificationID']][] = $row['authorID']; } // load authors $authors = UserProfile::getUserProfiles($authorIDs); $unknownAuthor = new UserProfile(new User(null, array('userID' => null, 'username' => WCF::getLanguage()->get('wcf.user.guest')))); // load objects associated with each object type foreach ($objectTypes as $objectType => $objectData) { $objectTypes[$objectType]['objects'] = $objectData['objectType']->getObjectsByIDs($objectData['objectIDs']); } // load required events $eventList = new UserNotificationEventList(); $eventList->getConditionBuilder()->add("user_notification_event.eventID IN (?)", array($eventIDs)); $eventList->readObjects(); $eventObjects = $eventList->getObjects(); // build notification data $notifications = array(); $deleteNotifications = array(); foreach ($notificationObjects as $notification) { $object = $objectTypes[$notification->objectType]['objects'][$notification->objectID]; if ($object->__unknownNotificationObject) { $deleteNotifications[] = $notification; continue; } $className = $eventObjects[$notification->eventID]->className; $class = new $className($eventObjects[$notification->eventID]); $class->setObject($notification, $object, isset($authors[$notification->authorID]) ? $authors[$notification->authorID] : $unknownAuthor, $notification->additionalData); if (isset($authorToNotification[$notification->notificationID])) { $eventAuthors = array(); foreach ($authorToNotification[$notification->notificationID] as $userID) { if (!$userID) { $eventAuthors[0] = $unknownAuthor; } else { if (isset($authors[$userID])) { $eventAuthors[$userID] = $authors[$userID]; } } } if (!empty($eventAuthors)) { $class->setAuthors($eventAuthors); } } $data = array('authors' => count($class->getAuthors()), 'event' => $class, 'notificationID' => $notification->notificationID, 'time' => $notification->time); $data['confirmed'] = $notification->confirmTime > 0; $notifications[] = $data; } // check access foreach ($notifications as $index => $notificationData) { if (!$notificationData['event']->checkAccess()) { if ($notificationData['event']->deleteNoAccessNotification()) { $deleteNotifications[] = $notificationData['event']->getNotification(); } unset($notifications[$index]); } } if (!empty($deleteNotifications)) { $notificationAction = new UserNotificationAction($deleteNotifications, 'delete'); $notificationAction->executeAction(); // reset notification counter UserStorageHandler::getInstance()->reset(array(WCF::getUser()->userID), 'userNotificationCount'); } return array('count' => count($notifications), 'notifications' => $notifications); }
/** * @see \wcf\page\IPage::readParameters() */ public function readParameters() { parent::readParameters(); if (!WCF::getUser()->userID) { return; } // check max pc permission if (ConversationHandler::getInstance()->getConversationCount() >= WCF::getSession()->getPermission('user.conversation.maxConversations')) { throw new NamedUserException(WCF::getLanguage()->get('wcf.conversation.error.mailboxIsFull')); } if (isset($_REQUEST['userID'])) { $userID = intval($_REQUEST['userID']); $user = UserProfile::getUserProfile($userID); if ($user === null || $user->userID == WCF::getUser()->userID) { throw new IllegalLinkException(); } // validate user try { Conversation::validateParticipant($user); } catch (UserInputException $e) { throw new NamedUserException(WCF::getLanguage()->getDynamicVariable('wcf.conversation.participants.error.' . $e->getType(), array('errorData' => array('username' => $user->username)))); } $this->participants = $user->username; } // get max text length $this->maxTextLength = WCF::getSession()->getPermission('user.conversation.maxLength'); // quotes MessageQuoteManager::getInstance()->readParameters(); }
/** * get users by user login names except me * * @param Array $loginNames * @return Array */ protected function getUsersByUserLoginNamesExceptMe(array $loginNames) { foreach ($loginNames as $key => $loginName) { $loginNames[$key] = str_replace('\\\\', '\\', $loginNames[$key]); $loginNames[$key] = str_replace("\\'", "'", $loginNames[$key]); } $objsUserProfile = UserProfile::getUserProfilesByUsername($loginNames); $objsUser = array(); foreach ($objsUserProfile as $oUserProfile) { if (empty($oUserProfile)) { continue; } $oUser = $oUserProfile->getDecoratedObject(); if ($oUser->userID && $oUser->userID != $this->oUser->userID) { $objsUser[] = $oUser; } } return $objsUser; }
/** * @see \wcf\system\message\embedded\object\IMessageEmbeddedObjectHandler::loadObjects() */ public function loadObjects(array $objectIDs) { return UserProfile::getUserProfiles($objectIDs); }
/** * @see \wcf\system\cronjob\ICronjob::execute() */ public function execute(Cronjob $cronjob) { parent::execute($cronjob); // get user ids $userIDs = array(); $sql = "SELECT\tDISTINCT userID\n\t\t\tFROM\twcf" . WCF_N . "_user_notification\n\t\t\tWHERE\tmailNotified = ?\n\t\t\t\tAND time < ?\n\t\t\t\tAND confirmTime = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array(0, TIME_NOW - 3600 * 23, 0)); while ($row = $statement->fetchArray()) { $userIDs[] = $row['userID']; } if (empty($userIDs)) { return; } // get users $userList = new UserList(); $userList->setObjectIDs($userIDs); $userList->readObjects(); $users = $userList->getObjects(); // get notifications $conditions = new PreparedStatementConditionBuilder(); $conditions->add("notification.userID IN (?)", array($userIDs)); $conditions->add("notification.mailNotified = ?", array(0)); $conditions->add("notification.confirmTime = ?", array(0)); $sql = "SELECT\t\tnotification.*, notification_event.eventID, object_type.objectType\n\t\t\tFROM\t\twcf" . WCF_N . "_user_notification notification\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_user_notification_event notification_event\n\t\t\tON\t\t(notification_event.eventID = notification.eventID)\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_object_type object_type\n\t\t\tON\t\t(object_type.objectTypeID = notification_event.objectTypeID)\n\t\t\t" . $conditions . "\n\t\t\tORDER BY\tnotification.time"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditions->getParameters()); // mark notifications as done $conditions = new PreparedStatementConditionBuilder(); $conditions->add("userID IN (?)", array($userIDs)); $conditions->add("mailNotified = ?", array(0)); $sql = "UPDATE\twcf" . WCF_N . "_user_notification\n\t\t\tSET\tmailNotified = 1\n\t\t\t" . $conditions; $statement2 = WCF::getDB()->prepareStatement($sql); $statement2->execute($conditions->getParameters()); // collect data $eventsToUser = $objectTypes = $eventIDs = $notificationObjects = array(); $availableObjectTypes = UserNotificationHandler::getInstance()->getAvailableObjectTypes(); while ($row = $statement->fetchArray()) { if (!isset($eventsToUser[$row['userID']])) { $eventsToUser[$row['userID']] = array(); } $eventsToUser[$row['userID']][] = $row['notificationID']; // cache object types if (!isset($objectTypes[$row['objectType']])) { $objectTypes[$row['objectType']] = array('objectType' => $availableObjectTypes[$row['objectType']], 'objectIDs' => array(), 'objects' => array()); } $objectTypes[$row['objectType']]['objectIDs'][] = $row['objectID']; $eventIDs[] = $row['eventID']; $notificationObjects[$row['notificationID']] = new UserNotification(null, $row); } // load authors $conditions = new PreparedStatementConditionBuilder(); $conditions->add("notificationID IN (?)", array(array_keys($notificationObjects))); $sql = "SELECT\t\tnotificationID, authorID\n\t\t\tFROM\t\twcf" . WCF_N . "_user_notification_author\n\t\t\t" . $conditions . "\n\t\t\tORDER BY\ttime ASC"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditions->getParameters()); $authorIDs = $authorToNotification = array(); while ($row = $statement->fetchArray()) { if ($row['authorID']) { $authorIDs[] = $row['authorID']; } if (!isset($authorToNotification[$row['notificationID']])) { $authorToNotification[$row['notificationID']] = array(); } $authorToNotification[$row['notificationID']][] = $row['authorID']; } // load authors $authors = UserProfile::getUserProfiles($authorIDs); $unknownAuthor = new UserProfile(new User(null, array('userID' => null, 'username' => WCF::getLanguage()->get('wcf.user.guest')))); // load objects associated with each object type foreach ($objectTypes as $objectType => $objectData) { $objectTypes[$objectType]['objects'] = $objectData['objectType']->getObjectsByIDs($objectData['objectIDs']); } // load required events $eventList = new UserNotificationEventList(); $eventList->getConditionBuilder()->add("user_notification_event.eventID IN (?)", array($eventIDs)); $eventList->readObjects(); $eventObjects = $eventList->getObjects(); foreach ($eventsToUser as $userID => $events) { if (!isset($users[$userID])) { continue; } $user = $users[$userID]; // no notifications for disabled or banned users if ($user->activationCode) { continue; } if ($user->banned) { continue; } // add mail header $message = $user->getLanguage()->getDynamicVariable('wcf.user.notification.mail.header', array('user' => $user)); foreach ($events as $notificationID) { $notification = $notificationObjects[$notificationID]; $className = $eventObjects[$notification->eventID]->className; $class = new $className($eventObjects[$notification->eventID]); $class->setObject($notification, $objectTypes[$notification->objectType]['objects'][$notification->objectID], isset($authors[$notification->authorID]) ? $authors[$notification->authorID] : $unknownAuthor, $notification->additionalData); $class->setLanguage($user->getLanguage()); if (isset($authorToNotification[$notification->notificationID])) { $eventAuthors = array(); foreach ($authorToNotification[$notification->notificationID] as $userID) { if (!$userID) { $eventAuthors[0] = $unknownAuthor; } else { if (isset($authors[$userID])) { $eventAuthors[$userID] = $authors[$userID]; } } } if (!empty($eventAuthors)) { $class->setAuthors($eventAuthors); } } $message .= "\n\n"; $message .= $class->getEmailMessage('daily'); } // append notification mail footer $token = $user->notificationMailToken; if (!$token) { // generate token if not present $token = mb_substr(StringUtil::getHash(serialize(array($user->userID, StringUtil::getRandomID()))), 0, 20); $editor = new UserEditor($user); $editor->update(array('notificationMailToken' => $token)); } $message .= "\n\n"; $message .= $user->getLanguage()->getDynamicVariable('wcf.user.notification.mail.daily.footer', array('user' => $user, 'token' => $token)); // build mail $mail = new Mail(array($user->username => $user->email), $user->getLanguage()->getDynamicVariable('wcf.user.notification.mail.daily.subject', array('count' => count($events))), $message); $mail->setLanguage($user->getLanguage()); $mail->send(); } }