Simplify checking of existing of conditions on revoking trophies
authorjoshuaruesweg <ruesweg@woltlab.com>
Wed, 1 Jul 2020 19:51:20 +0000 (21:51 +0200)
committerjoshuaruesweg <ruesweg@woltlab.com>
Wed, 1 Jul 2020 19:51:29 +0000 (21:51 +0200)
See #3422

wcfsetup/install/files/lib/system/trophy/condition/TrophyConditionHandler.class.php

index c366962c740e8b78d143d26d2328d60a9256c9e8..4c4c33561c1d76d18a1138ff1aa932733c077359 100644 (file)
@@ -149,19 +149,20 @@ class TrophyConditionHandler extends SingletonFactory {
                // extract the condition builder from the object.  
                $pseudoUserList = new UserList();
                
-               // Assign the condition to the pseudo DBOList object 
                $conditions = $trophy->getConditions();
-               foreach ($conditions as $condition) {
-                       $condition->getObjectType()->getProcessor()->addUserCondition($condition, $pseudoUserList);
-               }
                
                // Check if there are conditions for the award of the trophy for the given trophy.
                // If there are no conditions, we simply return an empty list and do not remove any trophy. 
                // A trophy without conditions that is awarded automatically cannot be created by default. 
-               if (empty($pseudoUserList->getConditionBuilder()->__toString())) {
+               if (empty($conditions)) {
                        return [];
                }
                
+               // Assign the condition to the pseudo DBOList object 
+               foreach ($conditions as $condition) {
+                       $condition->getObjectType()->getProcessor()->addUserCondition($condition, $pseudoUserList);
+               }
+               
                // Now we create our own query to find out which users no longer meet the conditions. 
                // For this we use a UserList object again and transfer basic data from the pseudo object. 
                $userList = new UserList();