From 76ee04b0c0c96b657edaf953e4adacc3ceebb457 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Wed, 9 Jun 2021 12:30:34 +0200 Subject: [PATCH] Prevent errors due to subsequent price changes for active subscriptions --- .../files/acp/templates/paidSubscriptionAdd.tpl | 12 ++++++------ .../acp/form/PaidSubscriptionAddForm.class.php | 1 + .../acp/form/PaidSubscriptionEditForm.class.php | 17 +++++++++++++++++ .../subscription/PaidSubscription.class.php | 11 +++++++++++ 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/wcfsetup/install/files/acp/templates/paidSubscriptionAdd.tpl b/wcfsetup/install/files/acp/templates/paidSubscriptionAdd.tpl index 50940b9cdc..4b94085762 100644 --- a/wcfsetup/install/files/acp/templates/paidSubscriptionAdd.tpl +++ b/wcfsetup/install/files/acp/templates/paidSubscriptionAdd.tpl @@ -110,8 +110,8 @@
- - + {if $errorField == 'cost'} @@ -129,15 +129,15 @@
- +
- - + {lang}wcf.acp.paidSubscription.isRecurring{/lang} + {lang}wcf.acp.paidSubscription.isRecurring.description{/lang}
diff --git a/wcfsetup/install/files/lib/acp/form/PaidSubscriptionAddForm.class.php b/wcfsetup/install/files/lib/acp/form/PaidSubscriptionAddForm.class.php index 4795bd6535..33f159e007 100644 --- a/wcfsetup/install/files/lib/acp/form/PaidSubscriptionAddForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/PaidSubscriptionAddForm.class.php @@ -383,6 +383,7 @@ class PaidSubscriptionAddForm extends AbstractForm 'availableCurrencies' => $this->availableCurrencies, 'availableUserGroups' => $this->availableUserGroups, 'availableSubscriptions' => $this->availableSubscriptions, + 'canChangePaymentOptions' => true, ]); } } diff --git a/wcfsetup/install/files/lib/acp/form/PaidSubscriptionEditForm.class.php b/wcfsetup/install/files/lib/acp/form/PaidSubscriptionEditForm.class.php index 3b7e050ec5..8edc2f9a3b 100644 --- a/wcfsetup/install/files/lib/acp/form/PaidSubscriptionEditForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/PaidSubscriptionEditForm.class.php @@ -53,6 +53,22 @@ class PaidSubscriptionEditForm extends PaidSubscriptionAddForm parent::readParameters(); } + /** + * @inheritDoc + */ + public function readFormParameters() + { + parent::readFormParameters(); + + if ($this->subscription->hasActiveSubscriptions()) { + $this->cost = $this->subscription->cost; + $this->currency = $this->subscription->currency; + $this->subscriptionLength = $this->subscription->subscriptionLength; + $this->subscriptionLengthUnit = $this->subscription->subscriptionLengthUnit; + $this->isRecurring = $this->subscription->isRecurring; + } + } + protected function getAvailableSubscriptions() { $subscriptionList = new PaidSubscriptionList(); @@ -157,6 +173,7 @@ class PaidSubscriptionEditForm extends PaidSubscriptionAddForm 'action' => 'edit', 'subscriptionID' => $this->subscriptionID, 'subscription' => $this->subscription, + 'canChangePaymentOptions' => !$this->subscription->hasActiveSubscriptions(), ]); } } diff --git a/wcfsetup/install/files/lib/data/paid/subscription/PaidSubscription.class.php b/wcfsetup/install/files/lib/data/paid/subscription/PaidSubscription.class.php index 4112daddbb..27e8bcfb22 100644 --- a/wcfsetup/install/files/lib/data/paid/subscription/PaidSubscription.class.php +++ b/wcfsetup/install/files/lib/data/paid/subscription/PaidSubscription.class.php @@ -5,6 +5,7 @@ namespace wcf\data\paid\subscription; use wcf\data\DatabaseObject; use wcf\data\ITitledObject; use wcf\data\object\type\ObjectTypeCache; +use wcf\data\paid\subscription\user\PaidSubscriptionUserList; use wcf\system\html\output\HtmlOutputProcessor; use wcf\system\payment\method\PaymentMethodHandler; use wcf\system\request\LinkHandler; @@ -122,4 +123,14 @@ class PaidSubscription extends DatabaseObject implements ITitledObject { return WCF::getLanguage()->get($this->title); } + + /** + * @since 5.4 + */ + public function hasActiveSubscriptions(): bool + { + $list = new PaidSubscriptionUserList(); + $list->getConditionBuilder()->add('subscriptionID = ?', [$this->subscriptionID]); + return $list->countObjects() ? true : false; + } } -- 2.20.1