| 1 |
<?php |
| 2 |
/** |
| 3 |
* Give Recurring Helper Functions |
| 4 |
* |
| 5 |
* @package Give |
| 6 |
* @copyright Copyright (c) 2016, GiveWP |
| 7 |
* @license https://opensource.org/licenses/gpl-license GNU Public License |
| 8 |
* @since 1.0 |
| 9 |
*/ |
| 10 |
|
| 11 |
/** |
| 12 |
* Is the donation recurring. |
| 13 |
* |
| 14 |
* Determines if a donation is a recurring donation; should be used only at time of making the donation. |
| 15 |
* Use Give_Recurring_Subscriber->has_subscription() to determine after subscription is made if it is in fact |
| 16 |
* recurring. |
| 17 |
* |
| 18 |
* @param array $payment_meta |
| 19 |
* |
| 20 |
* @return bool |
| 21 |
* @since 2.19.0 - this is copied over from give_recurring()->is_donation_recurring |
| 22 |
* @access public |
| 23 |
* |
| 24 |
*/ |
| 25 |
function give_recurring_is_donation_recurring($payment_meta) |
| 26 |
{ |
| 27 |
// Ensure we have proper vars set |
| 28 |
if (isset($payment_meta['post_data'])) { |
| 29 |
$form_id = isset($payment_meta['post_data']['give-form-id']) ? $payment_meta['post_data']['give-form-id'] : 0; |
| 30 |
$price_id = isset($payment_meta['post_data']['give-price-id']) ? $payment_meta['post_data']['give-price-id'] : 0; |
| 31 |
} else { |
| 32 |
// fallback |
| 33 |
$form_id = isset($payment_meta['form_id']) ? $payment_meta['form_id'] : 0; |
| 34 |
$price_id = isset($payment_meta['price_id']) ? $payment_meta['price_id'] : 0; |
| 35 |
} |
| 36 |
|
| 37 |
// Check for donor's choice option |
| 38 |
$user_choice = isset($payment_meta['post_data']['give-recurring-period']) ? $payment_meta['post_data']['give-recurring-period'] : ''; |
| 39 |
$user_custom_amount = isset($payment_meta['post_data']['give-price-id']) ? $payment_meta['post_data']['give-price-id'] : ''; |
| 40 |
$recurring_enabled = give_get_meta($form_id, '_give_recurring', true); |
| 41 |
$custom_amount = give_get_meta($form_id, '_give_custom_amount', true); |
| 42 |
$custom_amount_recurring = give_get_meta($form_id, '_give_recurring_custom_amount_period', true, 'month'); |
| 43 |
|
| 44 |
// If not empty this is a recurring donation (checkbox is checked) |
| 45 |
if (!empty($user_choice)) { |
| 46 |
return true; |
| 47 |
} |
| 48 |
|
| 49 |
if ((empty($user_choice) && 'yes_donor' === $recurring_enabled) || |
| 50 |
( |
| 51 |
empty($user_choice) && |
| 52 |
'yes_admin' === $recurring_enabled && |
| 53 |
'once' === $custom_amount_recurring && |
| 54 |
'custom' === $user_custom_amount |
| 55 |
)) { |
| 56 |
// User only wants to give once |
| 57 |
return false; |
| 58 |
} |
| 59 |
|
| 60 |
// Admin choice: check fields |
| 61 |
if (give_has_variable_prices($form_id) || ('yes_admin' === $recurring_enabled && give_is_setting_enabled( |
| 62 |
$custom_amount |
| 63 |
))) { |
| 64 |
// get default selected price ID |
| 65 |
return give_recurring_is_recurring($form_id, $price_id); |
| 66 |
} |
| 67 |
|
| 68 |
// Set level |
| 69 |
return give_recurring_is_recurring($form_id); |
| 70 |
} |
| 71 |
|
| 72 |
/** |
| 73 |
* Is Donation Form Recurring? |
| 74 |
* |
| 75 |
* Check if a donation form is recurring. |
| 76 |
* |
| 77 |
* @param int $form_id The donation form ID. |
| 78 |
* @param int $level_id The multi-level ID. |
| 79 |
* |
| 80 |
* @return bool |
| 81 |
* @since 2.19.0 - this is copied over from give_recurring()->is_recurring |
| 82 |
* @since 1.0 |
| 83 |
* @access public |
| 84 |
* @static |
| 85 |
* |
| 86 |
*/ |
| 87 |
function give_recurring_is_recurring($form_id, $level_id = 0) |
| 88 |
{ |
| 89 |
$is_recurring = false; |
| 90 |
$levels = maybe_unserialize(give_get_meta($form_id, '_give_donation_levels', true)); |
| 91 |
$recurring_option = give_get_meta($form_id, '_give_recurring', true); |
| 92 |
$period = give_recurring_get_period($form_id, $level_id); |
| 93 |
|
| 94 |
// If it's multi level with admin choice with admin does not choice recurring for that level. |
| 95 |
if (empty($period)) { |
| 96 |
return false; |
| 97 |
} |
| 98 |
|
| 99 |
/** |
| 100 |
* Check multi-level forms whether any level is recurring |
| 101 |
* |
| 102 |
* Conditions: |
| 103 |
* a. Form has variable price |
| 104 |
* b. The form has a recurring option enabled. |
| 105 |
*/ |
| 106 |
if ( |
| 107 |
give_has_variable_prices($form_id) |
| 108 |
&& (empty($recurring_option) || 'no' !== $recurring_option) |
| 109 |
) { |
| 110 |
switch ($recurring_option) { |
| 111 |
// Is this a multi-level donor's choice? |
| 112 |
case 'yes_donor': |
| 113 |
return true; |
| 114 |
break; |
| 115 |
|
| 116 |
case 'yes_admin': |
| 117 |
if ('custom' === $level_id) { |
| 118 |
return true; |
| 119 |
} else { |
| 120 |
// Loop through levels and see if a level is recurring. |
| 121 |
foreach ($levels as $level) { |
| 122 |
// Is price recurring? |
| 123 |
$level_recurring = (isset($level['_give_recurring']) && $level['_give_recurring'] == 'yes'); |
| 124 |
|
| 125 |
// check that this price is indeed recurring: |
| 126 |
if ($level_id == $level['_give_id']['level_id'] && $level_recurring && false !== $period) { |
| 127 |
$is_recurring = true; |
| 128 |
} elseif (empty($level_id) && $level_recurring) { |
| 129 |
// Checking for ANY recurring level - empty $level_id param. |
| 130 |
$is_recurring = true; |
| 131 |
} |
| 132 |
} |
| 133 |
} |
| 134 |
break; |
| 135 |
} |
| 136 |
} elseif (!empty($recurring_option) && 'no' !== $recurring_option) { |
| 137 |
// Single level donation form. |
| 138 |
$is_recurring = true; |
| 139 |
} |
| 140 |
|
| 141 |
return $is_recurring; |
| 142 |
} |
| 143 |
|
| 144 |
/** |
| 145 |
* Get Period. |
| 146 |
* |
| 147 |
* Get the time period for a variable priced donation. |
| 148 |
* |
| 149 |
* @param $form_id |
| 150 |
* @param $price_id |
| 151 |
* |
| 152 |
* @return bool|string |
| 153 |
* @since 2.19.0 - this is copied over from give_recurring()->get_period |
| 154 |
* @access public |
| 155 |
* @static |
| 156 |
* |
| 157 |
*/ |
| 158 |
function give_recurring_get_period($form_id, $price_id = 0) |
| 159 |
{ |
| 160 |
$recurring_option = give_get_meta($form_id, '_give_recurring', true); |
| 161 |
|
| 162 |
// Is this a variable price form & admins choice? |
| 163 |
if (give_has_variable_prices($form_id) && 'yes_admin' === $recurring_option) { |
| 164 |
if ('custom' === $price_id) { |
| 165 |
return give_get_meta($form_id, '_give_recurring_custom_amount_period', true, 'month'); |
| 166 |
} else { |
| 167 |
$levels = give_get_meta($form_id, '_give_donation_levels', true); |
| 168 |
|
| 169 |
foreach ($levels as $price) { |
| 170 |
// Check that this indeed the recurring price. |
| 171 |
if ($price_id == $price['_give_id']['level_id'] |
| 172 |
&& isset($price['_give_recurring']) |
| 173 |
&& 'yes' === $price['_give_recurring'] |
| 174 |
&& isset($price['_give_period']) |
| 175 |
) { |
| 176 |
return isset($price['_give_period']) ? $price['_give_period'] : 'month'; |
| 177 |
} |
| 178 |
} |
| 179 |
} |
| 180 |
} else { |
| 181 |
$recurring_period = give_get_meta($form_id, '_give_period_functionality', true, 'admin_choice'); |
| 182 |
|
| 183 |
// This is either a Donor's Choice multi-level or set donation form. |
| 184 |
$period = give_get_meta($form_id, '_give_period', true); |
| 185 |
|
| 186 |
if ('donors_choice' === $recurring_period) { |
| 187 |
$period = give_get_meta($form_id, '_give_period_default_donor_choice', true, 'month'); |
| 188 |
} |
| 189 |
|
| 190 |
if ($period) { |
| 191 |
return $period; |
| 192 |
} |
| 193 |
} |
| 194 |
|
| 195 |
return false; |
| 196 |
} |
| 197 |
|