/** * @see \wcf\page\IPage::readData() */ public function readData() { $this->userGroups = UserGroup::getGroupsByType(array(), array(UserGroup::EVERYONE, UserGroup::GUESTS, UserGroup::USERS)); foreach ($this->userGroups as $key => $userGroup) { if (!$userGroup->isAccessible()) { unset($this->userGroups[$key]); } } uasort($this->userGroups, function (UserGroup $groupA, UserGroup $groupB) { return strcmp($groupA->getName(), $groupB->getName()); }); $this->conditions = UserGroupAssignmentHandler::getInstance()->getGroupedObjectTypes('com.woltlab.wcf.condition.userGroupAssignment'); parent::readData(); }
/** * @see \wcf\system\cronjob\ICronjob::execute() */ public function execute(Cronjob $cronjob) { parent::execute($cronjob); $assignments = UserGroupAssignmentCacheBuilder::getInstance()->getData(); $usersToGroup = array(); foreach ($assignments as $assignment) { if (!isset($usersToGroup[$assignment->groupID])) { $usersToGroup[$assignment->groupID] = array(); } $usersToGroup[$assignment->groupID] = array_merge($usersToGroup[$assignment->groupID], UserGroupAssignmentHandler::getInstance()->getUsers($assignment)); } foreach ($usersToGroup as $groupID => $users) { $userAction = new UserAction(array_unique($users), 'addToGroups', array('addDefaultGroups' => false, 'deleteOldGroups' => false, 'groups' => array($groupID))); $userAction->executeAction(); } }
/** * @see \wcf\form\IForm::save() */ public function save() { parent::save(); if ($this->avatarType != 'custom') { // delete custom avatar if (WCF::getUser()->avatarID) { $action = new UserAvatarAction(array(WCF::getUser()->avatarID), 'delete'); $action->executeAction(); } } // update user switch ($this->avatarType) { case 'none': $data = array('avatarID' => null, 'enableGravatar' => 0); break; case 'custom': $data = array('enableGravatar' => 0); break; case 'gravatar': $data = array('avatarID' => null, 'enableGravatar' => 1); break; } $this->objectAction = new UserAction(array(WCF::getUser()), 'update', array('data' => array_merge($this->additionalFields, $data))); $this->objectAction->executeAction(); // check if the user will be automatically added to new user groups // because of the changed avatar UserGroupAssignmentHandler::getInstance()->checkUsers(array(WCF::getUser()->userID)); // reset gravatar cache if ($this->avatarType == 'gravatar') { $pattern = WCF_DIR . sprintf(Gravatar::GRAVATAR_CACHE_LOCATION, md5(mb_strtolower(WCF::getUser()->email)), '*', '*'); $files = glob($pattern); if (!empty($files)) { foreach ($files as $file) { @unlink($file); } } } UserProfileHandler::getInstance()->reloadUserProfile(); $this->saved(); WCF::getTPL()->assign('success', true); }
/** * 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')); } }
/** * Bulk import for user activity point events. * * structure of $itemsToUser: * array( * userID => countOfItems * ) * * @param string $objectType * @param array<integer> $itemsToUser * @param boolean $updateUsers */ public function fireEvents($objectType, array $itemsToUser, $updateUsers = true) { $objectTypeObj = $this->getObjectTypeByName($objectType); if ($objectTypeObj === null) { throw new SystemException("Object type '" . $objectType . "' is not valid for object type definition 'com.woltlab.wcf.user.activityPointEvent'"); } if (empty($itemsToUser)) { return; } // update user_activity_point $values = ''; $parameters = $userIDs = array(); foreach ($itemsToUser as $userID => $items) { if (!empty($values)) { $values .= ','; } $values .= '(?, ?, ?, ?)'; $parameters[] = $userID; $parameters[] = $objectTypeObj->objectTypeID; $parameters[] = $items * $objectTypeObj->points; $parameters[] = $items; $userIDs[] = $userID; } $sql = "INSERT INTO\t\twcf" . WCF_N . "_user_activity_point\n\t\t\t\t\t\t(userID, objectTypeID, activityPoints, items)\n\t\t\tVALUES\t\t\t" . $values . "\n\t\t\tON DUPLICATE KEY\n\t\t\tUPDATE\t\t\tactivityPoints = activityPoints + VALUES(activityPoints),\n\t\t\t\t\t\titems = items + VALUES(items)"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($parameters); // update activity points for given user ids if ($updateUsers) { $this->updateUsers($userIDs); // check if one of the user will be automatically added // to new user groups because of the new activity points UserGroupAssignmentHandler::getInstance()->checkUsers($userIDs); } }