Skip to content
Snippets Groups Projects
Commit 9a4d540b authored by mattwire's avatar mattwire
Browse files

Allow selection of which frequency intervals to enable public recurring start date

parent b16768c4
Branches
Tags
1 merge request!1246.5
......@@ -367,6 +367,8 @@ class CRM_Core_Payment_Stripe extends CRM_Core_Payment {
* @param \CRM_Core_Form $form
*/
public function buildForm(&$form) {
$startDateFrequencyIntervals = \Civi::settings()->get('stripe_enable_public_future_recur_start');
// Don't use \Civi::resources()->addScriptFile etc as they often don't work on AJAX loaded forms (eg. participant backend registration)
$jsVars = [
'id' => $form->_paymentProcessor['id'],
......@@ -379,6 +381,7 @@ class CRM_Core_Payment_Stripe extends CRM_Core_Payment {
'apiVersion' => CRM_Stripe_Check::API_VERSION,
'csrfToken' => class_exists('\Civi\Firewall\Firewall') ? \Civi\Firewall\Firewall::getCSRFToken() : NULL,
'country' => CRM_Core_BAO_Country::defaultContactCountry(),
'startDateFrequencyIntervals' => $startDateFrequencyIntervals,
];
\Civi::resources()->addVars(E::SHORT_NAME, $jsVars);
......@@ -413,10 +416,20 @@ class CRM_Core_Payment_Stripe extends CRM_Core_Payment {
)
]);
// We can choose which frequency_intervals to enable future recurring start date for.
// If none are enabled (or the contribution page does not have any that are enabled in Stripe settings)
// then don't load the futurerecur elements on the form.
$formFrequencyIntervals = explode(CRM_Core_DAO::VALUE_SEPARATOR, $form->_values['recur_frequency_unit']);
$startDateFrequencyIntervals = \Civi::settings()->get('stripe_enable_public_future_recur_start');
$enableFutureRecur = FALSE;
foreach ($formFrequencyIntervals as $interval) {
if (in_array($interval, $startDateFrequencyIntervals)) {
$enableFutureRecur = TRUE;
break;
}
}
// Add form element and js to select future recurring start date
if (!$this->isBackOffice() && !empty(\Civi::settings()->get('stripe_enable_public_future_recur_start'))
&& $this->supportsFutureRecurStartDate()
) {
if (!$this->isBackOffice() && $enableFutureRecur && $this->supportsFutureRecurStartDate()) {
$startDates = CRM_Stripe_Recur::getFutureMonthlyStartDates();
if ($startDates) {
$form->addElement('select', 'receive_date', ts('Date of first contribution'), $startDates);
......
docs/images/settings_futurerecur.png

41.7 KiB | W: | H:

docs/images/settings_futurerecur.png

41.7 KiB | W: | H:

docs/images/settings_futurerecur.png
docs/images/settings_futurerecur.png
docs/images/settings_futurerecur.png
docs/images/settings_futurerecur.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -11,7 +11,7 @@ When you create a recurring contribution in CiviCRM using the Stripe payment pro
## Starting a Recurring contribution in the future
If you would like your users to be able to specify a future recurring start date you can enable
`Enable public selection of future recurring start dates` in *Administer->CiviContribute->Stripe Settings*.
`Enable public selection of future recurring start dates for intervals` in *Administer->CiviContribute->Stripe Settings*.
![future recur settings](images/settings_futurerecur.png)
......
......@@ -7,7 +7,10 @@ CRM.$(function($) {
if ($('.is_recur-section').length) {
$('.is_recur-section #stripe-recurring-start-date').remove();
$('.is_recur-section').append($('#stripe-recurring-start-date'));
cj('input[id="is_recur"]').on('change', function() {
$('input[id="is_recur"]').on('change', function() {
toggleRecur();
});
$('select#frequency_unit').on('change', function() {
toggleRecur();
});
toggleRecur();
......@@ -20,6 +23,13 @@ CRM.$(function($) {
function toggleRecur() {
var isRecur = $('input[id="is_recur"]:checked');
if (isRecur.val() > 0) {
if ($('select#frequency_unit').length > 0) {
var selectedFrequencyUnit = $('select#frequency_unit').val();
if (CRM.$.inArray(selectedFrequencyUnit, CRM.vars.stripe.startDateFrequencyIntervals) < 0) {
hideStartDate();
return;
}
}
if ($('#receive_date option').length === 1) {
// We only have one option. No need to offer selection - just show the date
$('#receive_date').parent('div.content').prev('div.label').hide();
......@@ -31,6 +41,10 @@ CRM.$(function($) {
$('#stripe-recurring-start-date').show().val('');
}
else {
hideStartDate();
}
function hideStartDate() {
$('#stripe-recurring-start-date').hide();
$("#stripe-recurring-start-date option:selected").prop("selected", false);
$("#stripe-recurring-start-date option:first").prop("selected", "selected");
......
......@@ -78,14 +78,22 @@ return [
],
'stripe_enable_public_future_recur_start' => [
'name' => 'stripe_enable_public_future_recur_start',
'type' => 'Boolean',
'html_type' => 'checkbox',
'default' => 0,
'type' => 'Array',
'html_type' => 'select',
'default' => [],
'is_domain' => 1,
'is_contact' => 0,
'title' => E::ts('Enable public selection of future recurring start dates'),
'description' => E::ts('Allow public selection of start date for a recurring contribution'),
'html_attributes' => [],
'title' => E::ts('Enable public selection of future recurring start dates for intervals'),
'description' => E::ts('Allow public selection of start date for a recurring contribution for intervals'),
'html_attributes' => [
'multiple' => TRUE,
'class' => 'crm-select2',
],
'pseudoconstant' => [
'optionGroupName' => 'recur_frequency_units',
'keyColumn' => 'name',
'optionEditPath' => 'civicrm/admin/options/recur_frequency_units',
],
'settings_pages' => [
'stripe' => [
'weight' => 25,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment