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 / DonationForms / Blocks / DonationFormBlock / Controllers / BlockRenderController.php
give / src / DonationForms / Blocks / DonationFormBlock / Controllers Last commit date
BlockRenderController.php 1 year 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 * @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 $formViewUrl = $this->getFormViewUrl($donationForm);
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-form-view-url='$formViewUrl' 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 $this->getFormViewUrl($donationForm);
88 }
89
90 /**
91 * @since 3.4.0
92 */
93 private function getFormViewUrl(DonationForm $donationForm): string
94 {
95 return (new GenerateDonationFormViewRouteUrl())($donationForm->id);
96 }
97
98 /**
99 *
100 * Load embed givewp script to resize iframe
101 * @see https://github.com/davidjbradshaw/iframe-resizer
102 *
103 * @since 3.0.0
104 */
105 protected function loadEmbedScript()
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