Add more places where automatic user group assignment is checked
authorMatthias Schmidt <gravatronics@live.com>
Mon, 25 Feb 2019 17:49:49 +0000 (18:49 +0100)
committerMatthias Schmidt <gravatronics@live.com>
Mon, 25 Feb 2019 17:49:49 +0000 (18:49 +0100)
See #2809

wcfsetup/install/files/lib/data/user/UserAction.class.php
wcfsetup/install/files/lib/form/RegisterForm.class.php
wcfsetup/install/files/lib/system/cronjob/UserGroupAssignmentCronjob.class.php
wcfsetup/install/files/lib/system/user/group/assignment/UserGroupAssignmentHandler.class.php

index a7714806b770b46e8431db86274951a6a264fec0..fe67f7ad93165e9922623923689df464a86df8f0 100644 (file)
@@ -20,6 +20,7 @@ use wcf\system\exception\PermissionDeniedException;
 use wcf\system\exception\UserInputException;
 use wcf\system\language\LanguageFactory;
 use wcf\system\request\RequestHandler;
+use wcf\system\user\group\assignment\UserGroupAssignmentHandler;
 use wcf\system\WCF;
 use wcf\util\UserRegistrationUtil;
 
@@ -454,11 +455,17 @@ class UserAction extends AbstractDatabaseObjectAction implements IClipboardActio
                if (isset($this->parameters['deleteOldGroups'])) $deleteOldGroups = $this->parameters['deleteOldGroups'];
                if (isset($this->parameters['addDefaultGroups'])) $addDefaultGroups = $this->parameters['addDefaultGroups'];
                
+               $userIDs = [];
                foreach ($this->getObjects() as $userEditor) {
+                       $userIDs[] = $userEditor->userID;
                        $userEditor->addToGroups($groupIDs, $deleteOldGroups, $addDefaultGroups);
                }
                
-               //reread objects
+               if (empty($this->parameters['ignoreUserGroupAssignments'])) {
+                       UserGroupAssignmentHandler::getInstance()->checkUsers($userIDs);
+               }
+               
+               // reread objects
                $this->objects = [];
                UserEditor::resetCache();
                $this->readObjects();
@@ -639,6 +646,12 @@ class UserAction extends AbstractDatabaseObjectAction implements IClipboardActio
                        }
                }
                
+               $userIDs = [];
+               foreach ($this->getObjects() as $user) {
+                       $userIDs[] = $user->userID;
+               }
+               UserGroupAssignmentHandler::getInstance()->checkUsers($userIDs);
+               
                $this->unmarkItems();
        }
        
index 645458873a210a85b59232acd7c1dd26397897d2..dc04cf4e1f0b022a04c8953586edb4508e20f3b8 100644 (file)
@@ -23,6 +23,7 @@ use wcf\system\exception\UserInputException;
 use wcf\system\language\LanguageFactory;
 use wcf\system\request\LinkHandler;
 use wcf\system\user\authentication\UserAuthenticationFactory;
+use wcf\system\user\group\assignment\UserGroupAssignmentHandler;
 use wcf\system\user\notification\object\UserRegistrationUserNotificationObject;
 use wcf\system\user\notification\UserNotificationHandler;
 use wcf\system\WCF;
@@ -437,6 +438,7 @@ class RegisterForm extends UserAddForm {
                ];
                $this->objectAction = new UserAction([], 'create', $data);
                $result = $this->objectAction->executeAction();
+               /** @var User $user */
                $user = $result['returnValues'];
                $userEditor = new UserEditor($user);
                
@@ -455,6 +457,8 @@ class RegisterForm extends UserAddForm {
                // activation management
                if (REGISTER_ACTIVATION_METHOD == 0) {
                        $this->message = 'wcf.user.register.success';
+                       
+                       UserGroupAssignmentHandler::getInstance()->checkUsers([$user->userID]);
                }
                else if (REGISTER_ACTIVATION_METHOD == 1) {
                        // registering via 3rdParty leads to instant activation
index b0073b43aeff9fdc83fc4663cfbbb42db1c24714..374d2c12e0b474c30a1cff5dcc8e7c447ef9c1ef 100644 (file)
@@ -35,7 +35,8 @@ class UserGroupAssignmentCronjob extends AbstractCronjob {
                                $userAction = new UserAction(array_unique($users), 'addToGroups', [
                                        'addDefaultGroups' => false,
                                        'deleteOldGroups' => false,
-                                       'groups' => [$groupID]
+                                       'groups' => [$groupID],
+                                       'ignoreUserGroupAssignments' => true
                                ]);
                                $userAction->executeAction();
                        }
index 6d43e55f8d7ec20b920198b682f220af409e01dc..f18e4a97e009b76d1c1713b9254d5e18236a8f2f 100644 (file)
@@ -69,7 +69,8 @@ class UserGroupAssignmentHandler extends SingletonFactory {
                                $userAction = new UserAction([$user], 'addToGroups', [
                                        'addDefaultGroups' => false,
                                        'deleteOldGroups' => false,
-                                       'groups' => $newGroupIDs
+                                       'groups' => $newGroupIDs,
+                                       'ignoreUserGroupAssignments' => true
                                ]);
                                $userAction->executeAction();
                        }