PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.3.1
GiveWP – Donation Plugin and Fundraising Platform v3.3.1
4.16.5.1 4.16.5 4.16.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 / DonationForms / Blocks / DonationFormBlock / Controllers / BlockRenderController.php
give / src / DonationForms / Blocks / DonationFormBlock / Controllers Last commit date
BlockRenderController.php 2 years ago
BlockRenderController.php
123 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.2.0 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 $formUrl = esc_url(add_query_arg(['p' => $blockAttributes->formId], site_url('?post_type=give_forms')));
43
44 /**
45 * Note: iframe-resizer uses querySelectorAll so using a data attribute makes the most sense to target.
46 * It will also generate a dynamic ID - so when we have multiple embeds on a page there will be no conflict.
47 */
48 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>";
49 }
50
51 /**
52 * If the page loads with our receipt route listener args then we need to render the receipt.
53 *
54 * @since 3.0.0
55 */
56 protected function shouldDisplayDonationConfirmationReceipt(string $embedId): bool
57 {
58 $routeListener = new RouteListener(
59 'donation-completed',
60 'show-donation-confirmation-receipt'
61 );
62
63 return $routeListener->isValid($_GET, function ($request) use ($embedId) {
64 $isset = isset($request['givewp-embed-id'], $request['givewp-receipt-id']);
65
66 return $isset && $request['givewp-embed-id'] === $embedId && DonationConfirmationReceiptViewRouteData::isReceiptIdValid(
67 $request['givewp-receipt-id']
68 );
69 });
70 }
71
72 /**
73 * Get the iframe URL.
74 * This could either be the donation form view or the donation confirmation receipt view.
75 *
76 * @since 3.0.0
77 */
78 private function getViewUrl(DonationForm $donationForm, string $embedId): string
79 {
80 if ($this->shouldDisplayDonationConfirmationReceipt($embedId)) {
81 $receiptId = give_clean($_GET['givewp-receipt-id']);
82
83 return (new GenerateDonationConfirmationReceiptViewRouteUrl())($receiptId);
84 }
85
86 return (new GenerateDonationFormViewRouteUrl())($donationForm->id);
87 }
88
89 /**
90 *
91 * Load embed givewp script to resize iframe
92 * @see https://github.com/davidjbradshaw/iframe-resizer
93 *
94 * @since 3.0.0
95 */
96 protected function loadEmbedScript()
97 {
98 (new EnqueueScript(
99 'givewp-donation-form-embed',
100 'build/donationFormEmbed.js',
101 GIVE_PLUGIN_DIR,
102 GIVE_PLUGIN_URL,
103 'give'
104 ))->loadInFooter()->enqueue();
105
106 (new EnqueueScript(
107 'givewp-donation-form-embed-app',
108 'build/donationFormBlockApp.js',
109 GIVE_PLUGIN_DIR,
110 GIVE_PLUGIN_URL,
111 'give'
112 ))
113 ->dependencies(['jquery'])
114 ->loadInFooter()
115 ->enqueue();
116
117 wp_enqueue_style(
118 'givewp-donation-form-embed-app',
119 GIVE_PLUGIN_URL . 'build/donationFormBlockApp.css'
120 );
121 }
122 }
123