PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.0.3
GiveWP – Donation Plugin and Fundraising Platform v3.0.3
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 / DonationForms / Blocks / DonationFormBlock / Controllers / BlockRenderController.php
give / src / DonationForms / Blocks / DonationFormBlock / Controllers Last commit date
BlockRenderController.php 2 years ago
BlockRenderController.php
121 lines
1 <?php
2
3 namespace Give\DonationForms\Blocks\DonationFormBlock\Controllers;
4
5 use Give\DonationForms\Actions\GenerateDonationConfirmationReceiptViewRouteUrl;
6 use Give\DonationForms\Actions\GenerateDonationFormViewRouteUrl;
7 use Give\DonationForms\Blocks\DonationFormBlock\DataTransferObjects\BlockAttributes;
8 use Give\DonationForms\DataTransferObjects\DonationConfirmationReceiptViewRouteData;
9 use Give\DonationForms\Models\DonationForm;
10 use Give\Framework\EnqueueScript;
11 use Give\Framework\Routes\RouteListener;
12
13 class BlockRenderController
14 {
15 /**
16 * @since 3.0.0
17 *
18 * @return string|null
19 */
20 public function render(array $attributes)
21 {
22 // return early if we're still inside the editor to avoid server side effects
23 if (!empty($_REQUEST['post']) || !empty($_REQUEST['action']) || !empty($_REQUEST['_locale'])) {
24 return null;
25 }
26
27 $blockAttributes = BlockAttributes::fromArray($attributes);
28
29 if ( ! $blockAttributes->formId) {
30 return null;
31 }
32
33 $this->loadEmbedScript();
34
35 /** @var DonationForm $donationForm */
36 $donationForm = DonationForm::find($blockAttributes->formId);
37
38 $embedId = $blockAttributes->blockId ?? '';
39
40 $viewUrl = $this->getViewUrl($donationForm, $embedId);
41
42 /**
43 * Note: iframe-resizer uses querySelectorAll so using a data attribute makes the most sense to target.
44 * It will also generate a dynamic ID - so when we have multiple embeds on a page there will be no conflict.
45 */
46 return "<div class='root-data-givewp-embed' data-src='$viewUrl' data-givewp-embed-id='$embedId' data-form-format='$blockAttributes->formFormat' data-open-form-button='$blockAttributes->openFormButton'></div>";
47 }
48
49 /**
50 * If the page loads with our receipt route listener args then we need to render the receipt.
51 *
52 * @since 3.0.0
53 */
54 protected function shouldDisplayDonationConfirmationReceipt(string $embedId): bool
55 {
56 $routeListener = new RouteListener(
57 'donation-completed',
58 'show-donation-confirmation-receipt'
59 );
60
61 return $routeListener->isValid($_GET, function ($request) use ($embedId) {
62 $isset = isset($request['givewp-embed-id'], $request['givewp-receipt-id']);
63
64 return $isset && $request['givewp-embed-id'] === $embedId && DonationConfirmationReceiptViewRouteData::isReceiptIdValid(
65 $request['givewp-receipt-id']
66 );
67 });
68 }
69
70 /**
71 * Get the iframe URL.
72 * This could either be the donation form view or the donation confirmation receipt view.
73 *
74 * @since 3.0.0
75 */
76 private function getViewUrl(DonationForm $donationForm, string $embedId): string
77 {
78 if ($this->shouldDisplayDonationConfirmationReceipt($embedId)) {
79 $receiptId = give_clean($_GET['givewp-receipt-id']);
80
81 return (new GenerateDonationConfirmationReceiptViewRouteUrl())($receiptId);
82 }
83
84 return (new GenerateDonationFormViewRouteUrl())($donationForm->id);
85 }
86
87 /**
88 *
89 * Load embed givewp script to resize iframe
90 * @see https://github.com/davidjbradshaw/iframe-resizer
91 *
92 * @since 3.0.0
93 */
94 protected function loadEmbedScript()
95 {
96 (new EnqueueScript(
97 'givewp-donation-form-embed',
98 'build/donationFormEmbed.js',
99 GIVE_PLUGIN_DIR,
100 GIVE_PLUGIN_URL,
101 'give'
102 ))->loadInFooter()->enqueue();
103
104 (new EnqueueScript(
105 'givewp-donation-form-embed-app',
106 'build/donationFormBlockApp.js',
107 GIVE_PLUGIN_DIR,
108 GIVE_PLUGIN_URL,
109 'give'
110 ))
111 ->dependencies(['jquery'])
112 ->loadInFooter()
113 ->enqueue();
114
115 wp_enqueue_style(
116 'givewp-donation-form-embed-app',
117 GIVE_PLUGIN_URL . 'build/donationFormBlockApp.css'
118 );
119 }
120 }
121