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