PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.0.4
GiveWP – Donation Plugin and Fundraising Platform v3.0.4
4.16.3 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 / PayPalCommerce / ScriptLoader.php
give / src / PaymentGateways / PayPalCommerce Last commit date
Banners 2 years ago DataTransferObjects 4 years ago Exceptions 3 years ago Migrations 3 years ago Models 2 years ago PayPalCheckoutSdk 2 years ago Repositories 2 years ago Webhooks 2 years ago AccountAdminNotices.php 4 years ago AdminSettingFields.php 2 years ago AdvancedCardFields.php 4 years ago AjaxRequestHandler.php 2 years ago DonationDetailsPage.php 4 years ago DonationFormPaymentMethod.php 2 years ago PayPalClient.php 2 years ago PayPalCommerce.php 2 years ago RefreshToken.php 3 years ago RefundPaymentHandler.php 4 years ago ScriptLoader.php 2 years ago Utils.php 2 years ago onBoardingRedirectHandler.php 2 years ago
ScriptLoader.php
290 lines
1 <?php
2
3 namespace Give\PaymentGateways\PayPalCommerce;
4
5 use Give\PaymentGateways\Gateways\PayPalCommerce\PayPalCommerceGateway;
6 use Give\PaymentGateways\PayPalCommerce\Models\MerchantDetail;
7 use Give\Helpers\Form\Template\Utils\Frontend as FrontendFormTemplateUtils;
8 use Give_Admin_Settings;
9
10 /**
11 * Class ScriptLoader
12 * @package Give\PaymentGateways\PayPalCommerce
13 *
14 * @since 3.0.0 Implement on-demand PayPal connection. Admin can select Advance or standard card processing.
15 * @since 2.9.0
16 */
17 class ScriptLoader
18 {
19 /**
20 * List of connection account type.
21 *
22 * @since 3.0.0
23 * @var string[]
24 */
25 public static $accountTypes = [
26 'PPCP',
27 'EXPRESS_CHECKOUT'
28 ];
29
30 /**
31 * List of countries that support custom payment accounts
32 *
33 * @since 3.0.0
34 * @var string[]
35 */
36 private $countriesAvailableForAdvanceConnection = [
37 'AU',
38 'AT',
39 'BE',
40 'BG',
41 'CY',
42 'CZ',
43 'DK',
44 'EE',
45 'FI',
46 'FR',
47 'GR',
48 'HU',
49 'IT',
50 'LV',
51 'LI',
52 'LT',
53 'LU',
54 'MT',
55 'NL',
56 'NO',
57 'PL',
58 'PT',
59 'RO',
60 'SK',
61 'SI',
62 'ES',
63 'SE',
64 'GB',
65 'US',
66 ];
67
68 /**
69 * @since 2.9.0
70 *
71 * @var PayPalCommerceGateway
72 */
73 private $payPalCommerceGateway;
74
75 /**
76 * ScriptLoader constructor.
77 *
78 * @since 3.0.0 Remove $merchantRepository parameter and add $payPalCommerceGateway parameter.
79 * @since 2.9.0
80 *
81 * @param PayPalCommerceGateway $payPalCommerceGateway
82 */
83 public function __construct(PayPalCommerceGateway $payPalCommerceGateway)
84 {
85 $this->payPalCommerceGateway = $payPalCommerceGateway;
86 }
87
88 /**
89 * Load admin scripts
90 *
91 * @since 2.9.0
92 */
93 public function loadAdminScripts()
94 {
95 if (!Give_Admin_Settings::is_setting_page('gateway', 'paypal')) {
96 return;
97 }
98
99 wp_enqueue_script(
100 'give-paypal-partner-js',
101 $this->getPartnerJsUrl(),
102 [],
103 null,
104 true
105 );
106
107 wp_enqueue_style(
108 'give-admin-paypal-commerce-css',
109 GIVE_PLUGIN_URL . 'assets/dist/css/admin-paypal-commerce.css',
110 [],
111 GIVE_VERSION
112 );
113
114 wp_localize_script(
115 'give-paypal-partner-js',
116 'givePayPalCommerce',
117 [
118 'countriesAvailableForAdvanceConnection' => $this->countriesAvailableForAdvanceConnection,
119 'accountTypes' => self::$accountTypes,
120 'translations' => [
121 'confirmPaypalAccountDisconnection' => esc_html__('Disconnect PayPal Account', 'give'),
122 'disconnectPayPalAccount' => esc_html__(
123 'Are you sure you want to disconnect your PayPal account?',
124 'give'
125 ),
126 'connectSuccessTitle' => esc_html__('You’re connected to PayPal! Here’s what’s next...', 'give'),
127 'pciWarning' => sprintf(
128 __(
129 'PayPal allows you to accept credit or debit cards directly on your website. Because of
130 this, your site needs to maintain <a href="%1$s" target="_blank">PCI-DDS compliance</a>.
131 GiveWP never stores sensitive information like card details to your server and works
132 seamlessly with SSL certificates. Compliance is comprised of, but not limited to:',
133 'give'
134 ),
135 'https://givewp.com/documentation/resources/pci-compliance/'
136 ),
137 'pciComplianceInstructions' => [
138 esc_html__(
139 'Using a trusted, secure hosting provider – preferably one which claims and actively promotes PCI compliance.',
140 'give'
141 ),
142 esc_html__(
143 'Maintain security best practices when setting passwords and limit access to your server.',
144 'give'
145 ),
146 esc_html__('Implement an SSL certificate to keep your donations secure.', 'give'),
147 esc_html__('Keep plugins up to date to ensure latest security fixes are present.', 'give'),
148 ],
149 ],
150 ]
151 );
152
153 $script = <<<EOT
154 function giveSandboxPayPalOnBoardedCallback(authCode, sharedId){
155 givePayPalOnBoardedCallback('sandbox', authCode, sharedId);
156 }
157
158 function giveLivePayPalOnBoardedCallback(authCode, sharedId){
159 givePayPalOnBoardedCallback('live', authCode, sharedId);
160 }
161
162 function givePayPalOnBoardedCallback(mode, authCode, sharedId) {
163 const query = '&mode=' + mode + '&authCode=' + authCode + '&sharedId=' + sharedId;
164
165 fetch( ajaxurl + '?action=give_paypal_commerce_user_on_boarded' + query )
166 .then(function(res){ return res.json() })
167 .then(function(res) {
168 if ( true !== res.success ) {
169 console.log(res);
170 alert('Something went wrong!');
171 return;
172 }
173
174 // Remove PayPal quick help container.
175 const paypalErrorQuickHelp = document.getElementById('give-paypal-onboarding-trouble-notice');
176 paypalErrorQuickHelp && paypalErrorQuickHelp.remove();
177 });
178 }
179 EOT;
180
181 wp_add_inline_script(
182 'give-paypal-partner-js',
183 $script
184 );
185 }
186
187 /**
188 * Load public assets.
189 *
190 * @since 2.32.0 Handle exception if client token is not generated.
191 * @since 2.9.0
192 */
193 public function loadPublicAssets()
194 {
195 $formId = FrontendFormTemplateUtils::getFormId();
196
197 if (
198 ! $formId
199 || \Give\Helpers\Form\Utils::isV3Form($formId)
200 || !Utils::gatewayIsActive()
201 || !Utils::isAccountReadyToAcceptPayment()
202 ) {
203 return;
204 }
205
206 try {
207 $formSettings = $this->payPalCommerceGateway->formSettings($formId);
208 $paypalSDKOptions = $formSettings['sdkOptions'];
209
210 // Remove v3 donation form related param.
211 unset($paypalSDKOptions['data-namespace']);
212 } catch (\Exception $e) {
213 give_set_error(
214 'give-paypal-commerce-client-token-error',
215 sprintf(
216 esc_html__(
217 'Unable to load PayPal Commerce client token. Please try again later. Error: %1$s',
218 'give'
219 ),
220 $e->getMessage()
221 )
222 );
223 return;
224 }
225
226 /* @var MerchantDetail $merchant */
227 $merchant = give(MerchantDetail::class);
228
229 $scriptId = 'give-paypal-commerce-js';
230
231 wp_enqueue_script(
232 $scriptId,
233 GIVE_PLUGIN_URL . 'assets/dist/js/paypal-commerce.js',
234 [],
235 GIVE_VERSION,
236 true
237 );
238
239 wp_localize_script(
240 $scriptId,
241 'givePayPalCommerce',
242 [
243 'paypalCardInfoErrorPrefixes' => [
244 'expirationDateField' => esc_html__('Card Expiration Date:', 'give'),
245 'cardNumberField' => esc_html__('Card Number:', 'give'),
246 'cardCvcField' => esc_html__('Card CVC:', 'give'),
247 ],
248 'cardFieldPlaceholders' => [
249 'cardNumber' => esc_html__('Card Number', 'give'),
250 'cardCvc' => esc_html__('CVC', 'give'),
251 'expirationDate' => esc_html__('MM/YY', 'give'),
252 ],
253 'threeDsCardAuthenticationFailedNotice' => esc_html__(
254 'There was a problem authenticating your payment method. Please try again. If the problem persists, please try another payment method.',
255 'give'
256 ),
257 'errorCodeLabel' => esc_html__('Error Code', 'give'),
258 'genericDonorErrorMessage' => __(
259 'There was an error processing your donation. Please contact the administrator.',
260 'give'
261 ),
262 // List of style properties support by PayPal for advanced card fields: https://developer.paypal.com/docs/business/checkout/reference/style-guide/#style-the-card-payments-fields
263 'hostedCardFieldStyles' => apply_filters('give_paypal_commerce_hosted_field_style', []),
264 'supportsCustomPayments' => $merchant->supportsCustomPayments ? 1 : '',
265 'separatorLabel' => esc_html__('Or pay with card', 'give'),
266 'payPalSdkQueryParameters' => $paypalSDKOptions,
267 'textForOverlayScreen' => sprintf(
268 '<h3>%1$s</h3><p>%2$s</p><p>%3$s</p>',
269 esc_html__('Donation Processing...', 'give'),
270 esc_html__('Checking donation status with PayPal.', 'give'),
271 esc_html__('This will only take a second!', 'give')
272 )
273 ]
274 );
275 }
276
277 /**
278 * Get PayPal partner js url.
279 *
280 * @since 2.30.0 sandbox PayPal partner js loads slow. So we are using live url for now.
281 * @since 2.9.0
282 *
283 * @return string
284 */
285 private function getPartnerJsUrl()
286 {
287 return 'https://www.paypal.com/webapps/merchantboarding/js/lib/lightbox/partner.js';
288 }
289 }
290