PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.0.4
GiveWP – Donation Plugin and Fundraising Platform v3.0.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 / ViewModels / DonationConfirmationReceiptViewModel.php
give / src / DonationForms / ViewModels Last commit date
DonationConfirmationReceiptViewModel.php 2 years ago DonationFormViewModel.php 2 years ago
DonationConfirmationReceiptViewModel.php
243 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.0.0
88 */
89 public function render(): string
90 {
91 /** @var DonationFormRepository $donationFormRepository */
92 $donationFormRepository = give(DonationFormRepository::class);
93
94 $donationForm = !$donationFormRepository->isLegacyForm(
95 $this->donation->formId
96 ) ? $this->getDonationForm() : null;
97
98 $formDesignId = $donationForm ? $donationForm->settings->designId : ClassicFormDesign::id();
99 $customCss = $donationForm && $donationForm->settings->customCss ? $donationForm->settings->customCss : null;
100 $primaryColor = $donationForm ? $donationForm->settings->primaryColor : '#69B868';
101 $secondaryColor = $donationForm ? $donationForm->settings->secondaryColor : '#000000';
102
103 $this->enqueueGlobalStyles($primaryColor, $secondaryColor);
104
105 $this->enqueueFormScripts($formDesignId);
106
107 ob_start();
108 wp_print_styles();
109 wp_print_head_scripts();
110 ?>
111
112 <?php
113 if ($customCss): ?>
114 <style><?= $customCss ?></style>
115 <?php
116 endif; ?>
117
118 <div data-theme="light" id="root-givewp-donation-confirmation-receipt"
119 data-iframe-height
120 class="givewp-donation-confirmation-receipt"
121 style="
122 --givewp-primary-color:<?= $primaryColor ?>;
123 --givewp-secondary-color:<?= $secondaryColor ?>;
124 "
125 ></div>
126
127 <?php
128 wp_print_footer_scripts();
129
130 echo ob_get_clean();
131
132 exit();
133 }
134
135 /**
136 * @since 3.0.0
137 */
138 public function enqueueGlobalStyles(string $primaryColor, string $secondaryColor)
139 {
140 (new RegisterDesignSystemStyles())();
141 wp_enqueue_style('givewp-design-system-foundation');
142
143 wp_register_style(
144 'givewp-base-form-styles',
145 GIVE_PLUGIN_URL . 'build/baseFormDesignCss.css'
146 );
147
148 wp_add_inline_style(
149 'givewp-base-form-styles',
150 ":root {
151 --givewp-primary-color:{$primaryColor};
152 --givewp-secondary-color:{$secondaryColor};
153 }"
154 );
155
156 wp_enqueue_style('givewp-base-form-styles');
157 }
158
159 /**
160 * Loads scripts in order: [Registrars, Designs, App]
161 *
162 * @since 3.0.0
163 *
164 * @return void
165 */
166 private function enqueueFormScripts(?string $formDesignId)
167 {
168 $handle = 'givewp-donation-form-registrars';
169 wp_enqueue_script(
170 $handle,
171 GIVE_PLUGIN_URL . 'build/donationFormRegistrars.js',
172 $this->getScriptAssetDependencies(GIVE_PLUGIN_DIR . 'build/donationFormRegistrars.asset.php'),
173 GIVE_VERSION,
174 true
175 );
176
177 Language::setScriptTranslations($handle);
178
179 wp_add_inline_script(
180 'givewp-donation-form-registrars',
181 'window.givewpDonationFormExports = ' . wp_json_encode($this->formExports()) . ';',
182 'before'
183 );
184
185 wp_add_inline_script(
186 'givewp-donation-form-registrars',
187 'window.givewpDonationConfirmationReceiptExports = ' . wp_json_encode($this->exports()) . ';',
188 'before'
189 );
190
191 // load template
192 /** @var FormDesignRegistrar $formDesignRegistrar */
193 $formDesignRegistrar = give(FormDesignRegistrar::class);
194
195 // silently fail if design is missing for some reason
196 if (!empty($formDesignId) && $formDesignRegistrar->hasDesign($formDesignId)) {
197 $design = $formDesignRegistrar->getDesign($formDesignId);
198
199 if ($design->css()) {
200 wp_enqueue_style('givewp-form-design-' . $design::id(), $design->css());
201 }
202
203 if ($design->js()) {
204 wp_enqueue_script(
205 'givewp-form-design-' . $design::id(),
206 $design->js(),
207 array_merge(
208 ['givewp-donation-form-registrars'],
209 $design->dependencies()
210 ),
211 false,
212 true
213 );
214 }
215 }
216
217 // load receipt app
218 wp_enqueue_script(
219 'givewp-donation-confirmation-receipt',
220 GIVE_PLUGIN_URL . 'build/donationConfirmationReceiptApp.js',
221 array_merge(
222 $this->getScriptAssetDependencies(GIVE_PLUGIN_DIR . 'build/donationConfirmationReceiptApp.asset.php'),
223 ['givewp-donation-form-registrars']
224 ),
225 GIVE_VERSION,
226 true
227 );
228
229 /**
230 * Load iframeResizer.contentWindow.min.js inside iframe
231 *
232 * @see https://github.com/davidjbradshaw/iframe-resizer
233 */
234 wp_enqueue_script(
235 'givewp-donation-form-embed-inside',
236 GIVE_PLUGIN_URL . 'build/donationFormEmbedInside.js',
237 [],
238 GIVE_VERSION,
239 true
240 );
241 }
242 }
243