/**
  * @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();
     }
 }
Ejemplo n.º 3
0
 /**
  * @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);
 }
Ejemplo n.º 4
0
 /**
  * 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);
     }
 }