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 / ViewModels / DonationConfirmationReceiptViewModel.php
give / src / DonationForms / ViewModels Last commit date
DonationConfirmationReceiptViewModel.php 2 years ago DonationFormViewModel.php 2 years ago
DonationConfirmationReceiptViewModel.php
244 lines
1 <?php
2
3 namespace Give\DonationForms\ViewModels;
4
5 use Give\DonationForms\FormDesigns\ClassicFormDesign\ClassicFormDesign;
6 use Give\DonationForms\Models\DonationForm;
7 use Give\DonationForms\Repositories\DonationFormRepository;
8 use Give\Donations\Models\Donation;
9 use Give\Framework\DesignSystem\Actions\RegisterDesignSystemStyles;
10 use Give\Framework\FormDesigns\Registrars\FormDesignRegistrar;
11 use Give\Framework\Receipts\DonationReceipt;
12 use Give\Framework\Receipts\DonationReceiptBuilder;
13 use Give\Framework\Support\Scripts\Concerns\HasScriptAssetFile;
14 use Give\Helpers\Language;
15
16 /**
17 * @since 3.0.0
18 */
19 class DonationConfirmationReceiptViewModel
20 {
21 use HasScriptAssetFile;
22
23 /**
24 * @var Donation
25 */
26 public $donation;
27
28 /**
29 * @since 3.0.0
30 */
31 public function __construct(Donation $donation)
32 {
33 $this->donation = $donation;
34 }
35
36 /**
37 * @since 3.0.0
38 */
39 public function getDonationForm(): DonationForm
40 {
41 return DonationForm::find($this->donation->formId);
42 }
43
44 /**
45 * @since 3.0.0
46 */
47 public function getReceipt(): DonationReceipt
48 {
49 $receipt = new DonationReceipt($this->donation);
50
51 return (new DonationReceiptBuilder($receipt))->toConfirmationPage();
52 }
53
54 /**
55 * @since 3.0.0
56 */
57 public function exports(): array
58 {
59 return [
60 'receipt' => $this->getReceipt()->toArray()
61 ];
62 }
63
64 /**
65 * @since 3.0.0
66 */
67 public function formExports(): array
68 {
69 /** @var DonationFormRepository $donationFormRepository */
70 $donationFormRepository = give(DonationFormRepository::class);
71
72 $formDataGateways = $donationFormRepository->getFormDataGateways($this->donation->formId);
73 $formApi = !$donationFormRepository->isLegacyForm(
74 $this->donation->formId
75 ) ? $donationFormRepository->getFormSchemaFromBlocks(
76 $this->donation->formId,
77 $this->getDonationForm()->blocks
78 )->jsonSerialize() : null;
79
80 return [
81 'registeredGateways' => $formDataGateways,
82 'form' => $formApi,
83 ];
84 }
85
86 /**
87 * @since 3.11.0 Sanitize customCSS property
88 * @since 3.0.0
89 */
90 public function render(): string
91 {
92 /** @var DonationFormRepository $donationFormRepository */
93 $donationFormRepository = give(DonationFormRepository::class);
94
95 $donationForm = !$donationFormRepository->isLegacyForm(
96 $this->donation->formId
97 ) ? $this->getDonationForm() : null;
98
99 $formDesignId = $donationForm ? $donationForm->settings->designId : ClassicFormDesign::id();
100 $customCss = $donationForm && $donationForm->settings->customCss ? $donationForm->settings->customCss : null;
101 $primaryColor = $donationForm ? $donationForm->settings->primaryColor : '#69B868';
102 $secondaryColor = $donationForm ? $donationForm->settings->secondaryColor : '#000000';
103
104 $this->enqueueGlobalStyles($primaryColor, $secondaryColor);
105
106 $this->enqueueFormScripts($formDesignId);
107
108 ob_start();
109 wp_print_styles();
110 wp_print_head_scripts();
111 ?>
112
113 <?php
114 if ($customCss): ?>
115 <style><?php echo wp_strip_all_tags($customCss); ?></style>
116 <?php
117 endif; ?>
118
119 <div data-theme="light" id="root-givewp-donation-confirmation-receipt"
120 data-iframe-height
121 class="givewp-donation-confirmation-receipt"
122 style="
123 --givewp-primary-color:<?= $primaryColor ?>;
124 --givewp-secondary-color:<?= $secondaryColor ?>;
125 "
126 ></div>
127
128 <?php
129 wp_print_footer_scripts();
130
131 echo ob_get_clean();
132
133 exit();
134 }
135
136 /**
137 * @since 3.0.0
138 */
139 public function enqueueGlobalStyles(string $primaryColor, string $secondaryColor)
140 {
141 (new RegisterDesignSystemStyles())();
142 wp_enqueue_style('givewp-design-system-foundation');
143
144 wp_register_style(
145 'givewp-base-form-styles',
146 GIVE_PLUGIN_URL . 'build/baseFormDesignCss.css'
147 );
148
149 wp_add_inline_style(
150 'givewp-base-form-styles',
151 ":root {
152 --givewp-primary-color:{$primaryColor};
153 --givewp-secondary-color:{$secondaryColor};
154 }"
155 );
156
157 wp_enqueue_style('givewp-base-form-styles');
158 }
159
160 /**
161 * Loads scripts in order: [Registrars, Designs, App]
162 *
163 * @since 3.0.0
164 *
165 * @return void
166 */
167 private function enqueueFormScripts(?string $formDesignId)
168 {
169 $handle = 'givewp-donation-form-registrars';
170 wp_enqueue_script(
171 $handle,
172 GIVE_PLUGIN_URL . 'build/donationFormRegistrars.js',
173 $this->getScriptAssetDependencies(GIVE_PLUGIN_DIR . 'build/donationFormRegistrars.asset.php'),
174 GIVE_VERSION,
175 true
176 );
177
178 Language::setScriptTranslations($handle);
179
180 wp_add_inline_script(
181 'givewp-donation-form-registrars',
182 'window.givewpDonationFormExports = ' . wp_json_encode($this->formExports()) . ';',
183 'before'
184 );
185
186 wp_add_inline_script(
187 'givewp-donation-form-registrars',
188 'window.givewpDonationConfirmationReceiptExports = ' . wp_json_encode($this->exports()) . ';',
189 'before'
190 );
191
192 // load template
193 /** @var FormDesignRegistrar $formDesignRegistrar */
194 $formDesignRegistrar = give(FormDesignRegistrar::class);
195
196 // silently fail if design is missing for some reason
197 if (!empty($formDesignId) && $formDesignRegistrar->hasDesign($formDesignId)) {
198 $design = $formDesignRegistrar->getDesign($formDesignId);
199
200 if ($design->css()) {
201 wp_enqueue_style('givewp-form-design-' . $design::id(), $design->css());
202 }
203
204 if ($design->js()) {
205 wp_enqueue_script(
206 'givewp-form-design-' . $design::id(),
207 $design->js(),
208 array_merge(
209 ['givewp-donation-form-registrars'],
210 $design->dependencies()
211 ),
212 false,
213 true
214 );
215 }
216 }
217
218 // load receipt app
219 wp_enqueue_script(
220 'givewp-donation-confirmation-receipt',
221 GIVE_PLUGIN_URL . 'build/donationConfirmationReceiptApp.js',
222 array_merge(
223 $this->getScriptAssetDependencies(GIVE_PLUGIN_DIR . 'build/donationConfirmationReceiptApp.asset.php'),
224 ['givewp-donation-form-registrars']
225 ),
226 GIVE_VERSION,
227 true
228 );
229
230 /**
231 * Load iframeResizer.contentWindow.min.js inside iframe
232 *
233 * @see https://github.com/davidjbradshaw/iframe-resizer
234 */
235 wp_enqueue_script(
236 'givewp-donation-form-embed-inside',
237 GIVE_PLUGIN_URL . 'build/donationFormEmbedInside.js',
238 [],
239 GIVE_VERSION,
240 true
241 );
242 }
243 }
244