PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.19.4
GiveWP – Donation Plugin and Fundraising Platform v3.19.4
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / PaymentGateways / Stripe / Controllers / NewStripeAccountOnBoardingController.php
give / src / PaymentGateways / Stripe / Controllers Last commit date
DisconnectStripeAccountController.php 4 years ago GetStripeAccountDetailsController.php 4 years ago NewStripeAccountOnBoardingController.php 2 years ago SetDefaultStripeAccountController.php 4 years ago
NewStripeAccountOnBoardingController.php
200 lines
1 <?php
2
3 namespace Give\PaymentGateways\Stripe\Controllers;
4
5 use Give\PaymentGateways\Stripe\DataTransferObjects\NewStripeAccountOnBoardingDto;
6 use Give\PaymentGateways\Stripe\Models\AccountDetail as AccountDetailModel;
7 use Give\PaymentGateways\Stripe\Repositories\Settings;
8 use Give_Admin_Settings;
9 use Stripe\Stripe;
10
11 /**
12 * Class NewStripeAccountOnBoardingController
13 * @package Give\PaymentGateways\Stripe\Controllers
14 *
15 * @since 2.13.0
16 */
17 class NewStripeAccountOnBoardingController
18 {
19 /**
20 * @var Settings
21 */
22 private $settings;
23
24 /**
25 * @param Settings $settings
26 */
27 public function __construct(Settings $settings)
28 {
29 $this->settings = $settings;
30 }
31
32 /**
33 * @since 3.4.0 Handle Stripe connect account on-boarding redirect on specific pages.
34 *
35 * @since 2.13.0
36 */
37 public function __invoke()
38 {
39 if (! current_user_can('manage_give_settings')) {
40 return;
41 }
42
43 if (wp_doing_ajax() || ! $this->canProcessRequestOnCurrentPage($_SERVER['REQUEST_URI'])) {
44 return;
45 }
46
47 $requestedData = NewStripeAccountOnBoardingDto::fromArray(give_clean($_GET));
48
49 if (! $requestedData->hasValidateData()) {
50 return;
51 }
52
53 $stripe_accounts = give_stripe_get_all_accounts();
54 $secret_key = ! give_is_test_mode() ? $requestedData->stripeAccessToken : $requestedData->stripeAccessTokenTest;
55
56 Stripe::setApiKey($secret_key);
57
58 // Get Account Details.
59 $account_details = give_stripe_get_account_details($requestedData->stripeUserId);
60
61 // Setup Account Details for Connected Stripe Accounts.
62 if (empty($account_details->id)) {
63 Give_Admin_Settings::add_error(
64 'give-stripe-account-id-fetching-error',
65 sprintf(
66 '<strong>%1$s</strong> %2$s',
67 esc_html__('Stripe Error:', 'give'),
68 esc_html__(
69 'We are unable to connect your Stripe account. Please contact the support team for assistance.',
70 'give'
71 )
72 )
73 );
74
75 return;
76 }
77
78 $account_name = ! empty($account_details->business_profile->name) ?
79 $account_details->business_profile->name :
80 $account_details->settings->dashboard->display_name;
81 $account_slug = $account_details->id;
82 $account_email = $account_details->email;
83 $account_country = $account_details->country;
84
85 // Set first Stripe account as default.
86 if (! $stripe_accounts) {
87 give_update_option('_give_stripe_default_account', $account_slug);
88 }
89
90 try {
91 $accountDetailModel = AccountDetailModel::fromArray(
92 [
93 'type' => 'connect',
94 'account_name' => $account_name,
95 'account_slug' => $account_slug,
96 'account_email' => $account_email,
97 'account_country' => $account_country,
98 'account_id' => $requestedData->stripeUserId,
99 'live_secret_key' => $requestedData->stripeAccessToken,
100 'test_secret_key' => $requestedData->stripeAccessTokenTest,
101 'live_publishable_key' => $requestedData->stripePublishableKey,
102 'test_publishable_key' => $requestedData->stripePublishableKeyTest,
103 'statement_descriptor' => $account_details->settings->payments->statement_descriptor,
104 ]
105 );
106
107 $this->settings->addNewStripeAccount($accountDetailModel);
108
109 if ($requestedData->formId) {
110 if (! Settings::getDefaultStripeAccountSlugForDonationForm($requestedData->formId)) {
111 Settings::setDefaultStripeAccountSlugForDonationForm(
112 $requestedData->formId,
113 $accountDetailModel->accountSlug
114 );
115 }
116
117 give()->form_meta->update_meta(
118 $requestedData->formId,
119 'give_stripe_per_form_accounts',
120 'enabled'
121 );
122 }
123
124 wp_redirect(
125 esc_url_raw(
126 add_query_arg(
127 ['stripe_account' => 'connected'],
128 $requestedData->formId ?
129 admin_url(
130 "post.php?post=$requestedData->formId&action=edit&give_tab=stripe_form_account_options"
131 ) :
132 admin_url(
133 'edit.php?post_type=give_forms&page=give-settings&tab=gateways&section=stripe-settings'
134 )
135 )
136 )
137 );
138 exit();
139 } catch (\Exception $e) {
140 Give_Admin_Settings::add_error(
141 'give-stripe-account-on-boarding-error',
142 sprintf(
143 '<strong>%1$s</strong> %2$s',
144 esc_html__('Stripe Error:', 'give'),
145 esc_html__(
146 'We are unable to connect your Stripe account. Please contact the support team for assistance.',
147 'give'
148 )
149 )
150 );
151
152 return;
153 }
154 }
155
156 /**
157 * Check if the request can be processed on the current page.
158 *
159 * Admin redirect to following page:
160 * 1. GiveWP stripe settings page.
161 * 2. V2 donation form edit form.
162 *
163 * @since 3.4.0
164 */
165 protected function canProcessRequestOnCurrentPage(string $url): bool
166 {
167 // Check if request is from edit.php or post.php page.
168 if (false === strpos($url, 'wp-admin/post.php') && false === strpos($url, 'wp-admin/edit.php')) {
169 return false;
170 }
171
172 $path = wp_parse_url($url);
173
174 // Result should be in array and should have query string.
175 if (! is_array($path) || ! isset($path['query'])) {
176 return false;
177 }
178
179 $queryParams = wp_parse_args($path['query']);
180
181 if (empty($queryParams)) {
182 return false;
183 }
184
185 // Check if request is from V2 donation form edit page.
186 $isDonationFormPage = isset($queryParams['post'], $queryParams['give_tab'])
187 && get_post_type(absint($queryParams['post'])) === 'give_forms'
188 && $queryParams['give_tab'] === 'stripe_form_account_options';
189
190 // Check if request is from GiveWP stripe settings page.
191 $isSettingPage = isset($queryParams['page'], $queryParams['post_type'], $queryParams['tab'], $queryParams['section'])
192 && $queryParams['post_type'] === 'give_forms'
193 && $queryParams['page'] === 'give-settings'
194 && $queryParams['tab'] === 'gateways'
195 && $queryParams['section'] === 'stripe-settings';
196
197 return $isDonationFormPage || $isSettingPage;
198 }
199 }
200