Improved handling of overlapping paid subscriptions
authorMarcel Werk <burntime@woltlab.com>
Sun, 10 Sep 2017 16:12:51 +0000 (18:12 +0200)
committerMarcel Werk <burntime@woltlab.com>
Sun, 10 Sep 2017 16:12:51 +0000 (18:12 +0200)
Closes #2418

wcfsetup/install/files/lib/data/paid/subscription/user/PaidSubscriptionUserAction.class.php

index a9dfe65558c0c00f63db7d83c658c4785269bf06..90cab722ab6f06a57a8642d929a97828300d3b24 100644 (file)
@@ -133,13 +133,29 @@ class PaidSubscriptionUserAction extends AbstractDatabaseObjectAction {
                        $this->readObjects();
                }
                
+               $userIDs = [];
                foreach ($this->getObjects() as $subscriptionUser) {
+                       $userIDs[] = $subscriptionUser->userID;
                        $subscriptionUser->update(['isActive' => 0]);
                        
                        // update group memberships
                        $action = new PaidSubscriptionUserAction([$subscriptionUser], 'removeGroupMemberships');
                        $action->executeAction();
                }
+               
+               if (!empty($userIDs)) {
+                       $userIDs = array_unique($userIDs);
+                       
+                       $subscriptionUserList = new PaidSubscriptionUserList();
+                       $subscriptionUserList->getConditionBuilder()->add('isActive = ?', [1]);
+                       $subscriptionUserList->getConditionBuilder()->add('userID IN (?)', [$userIDs]);
+                       $subscriptionUserList->readObjects();
+                       
+                       if (count($subscriptionUserList->getObjects())) {
+                               $action = new PaidSubscriptionUserAction($subscriptionUserList->getObjects(), 'addGroupMemberships');
+                               $action->executeAction();
+                       }
+               }
        }
        
        /**