diff --git a/CRM/Contribute/Form/CancelSubscription.php b/CRM/Contribute/Form/CancelSubscription.php index 4bcf8408412d..c521c4d1c148 100644 --- a/CRM/Contribute/Form/CancelSubscription.php +++ b/CRM/Contribute/Form/CancelSubscription.php @@ -100,6 +100,13 @@ public function preProcess() { $this->setTitle($this->_mid ? ts('Cancel Auto-renewal') : ts('Cancel Recurring Contribution')); $this->assign('mode', $this->_mode); + // If the processor does not support cancelling recur disable option to send cancellation request to the processor. + if (!$this->_paymentProcessorObj->supports('cancelRecurring')) { + unset($this->entityFields['send_cancel_request']); + } + + // If we are self service (contact is cancelling for themselves via a cancel link) don't give the option to notify + // or send cancellation request. They will be set automatically in postProcess if ($this->isSelfService()) { unset($this->entityFields['send_cancel_request'], $this->entityFields['is_notify']); } diff --git a/CRM/Contribute/Page/Tab.php b/CRM/Contribute/Page/Tab.php index 56411d1bc0e0..18672cb0875d 100644 --- a/CRM/Contribute/Page/Tab.php +++ b/CRM/Contribute/Page/Tab.php @@ -82,15 +82,10 @@ public static function recurLinks(int $recurID, $context = 'contribution') { $links[CRM_Core_Action::DISABLE] = [ 'name' => ts('Cancel'), 'title' => ts('Cancel'), - 'ref' => 'crm-enable-disable', + 'url' => 'civicrm/contribute/unsubscribe', + 'qs' => "reset=1&crid=%%crid%%&cid=%%cid%%&context={$context}", ]; - if ($paymentProcessorObj->supports('cancelRecurring')) { - unset($links[CRM_Core_Action::DISABLE]['extra'], $links[CRM_Core_Action::DISABLE]['ref']); - $links[CRM_Core_Action::DISABLE]['url'] = "civicrm/contribute/unsubscribe"; - $links[CRM_Core_Action::DISABLE]['qs'] = "reset=1&crid=%%crid%%&cid=%%cid%%&context={$context}"; - } - if ($paymentProcessorObj->supports('UpdateSubscriptionBillingInfo')) { $links[CRM_Core_Action::RENEW] = [ 'name' => ts('Change Billing Details'), diff --git a/CRM/Financial/BAO/PaymentProcessor.php b/CRM/Financial/BAO/PaymentProcessor.php index 1fbfc1c9d35f..4e3ccbad00a5 100644 --- a/CRM/Financial/BAO/PaymentProcessor.php +++ b/CRM/Financial/BAO/PaymentProcessor.php @@ -304,6 +304,24 @@ public static function getAllPaymentProcessors($mode = 'all', $reset = FALSE, $i } $processors = civicrm_api3('payment_processor', 'get', $retrievalParameters); + // Add the pay-later pseudo-processor. + $processors['values'][0] = [ + 'id' => 0, + 'payment_processor_type_id' => 0, + // This shouldn't be required but there are still some processors hacked into core with nasty 'if's. + 'api.payment_processor_type.getsingle' => ['name' => 'Manual'], + 'class_name' => 'Payment_Manual', + 'name' => 'pay_later', + 'billing_mode' => '', + 'is_default' => 0, + 'payment_instrument_id' => key(CRM_Core_OptionGroup::values('payment_instrument', FALSE, FALSE, FALSE, 'AND is_default = 1')), + // Making this optionally recur would give lots of options -but it should + // be a row in the payment processor table before we do that. + 'is_recur' => FALSE, + 'is_test' => FALSE, + 'domain_id' => CRM_Core_Config::domainID(), + 'is_active' => 1, + ]; foreach ($processors['values'] as $processor) { $fieldsToProvide = [ 'id', @@ -334,24 +352,6 @@ public static function getAllPaymentProcessors($mode = 'all', $reset = FALSE, $i $processors['values'][$processor['id']]['object'] = Civi\Payment\System::singleton()->getByProcessor($processors['values'][$processor['id']]); } - // Add the pay-later pseudo-processor. - $processors['values'][0] = [ - 'object' => new CRM_Core_Payment_Manual(), - 'id' => 0, - 'payment_processor_type_id' => 0, - // This shouldn't be required but there are still some processors hacked into core with nasty 'if's. - 'payment_processor_type' => 'Manual', - 'class_name' => 'Payment_Manual', - 'name' => 'pay_later', - 'billing_mode' => '', - 'is_default' => 0, - 'payment_instrument_id' => key(CRM_Core_OptionGroup::values('payment_instrument', FALSE, FALSE, FALSE, 'AND is_default = 1')), - // Making this optionally recur would give lots of options -but it should - // be a row in the payment processor table before we do that. - 'is_recur' => FALSE, - 'is_test' => FALSE, - ]; - CRM_Utils_Cache::singleton()->set($cacheKey, $processors['values']); return $processors['values'];