PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.10.0
GiveWP – Donation Plugin and Fundraising Platform v3.10.0
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 / Form / LoadTemplate.php
give / src / Form Last commit date
LegacyConsumer 2 years ago Template 3 years ago LoadTemplate.php 4 years ago Template.php 4 years ago Templates.php 3 years ago
LoadTemplate.php
291 lines
1 <?php
2
3 /**
4 * Handle Template Loading Handler
5 *
6 * @package Give
7 * @since 2.7.0
8 */
9
10 namespace Give\Form;
11
12 use _WP_Dependency;
13 use Give\Form\Template\Hookable;
14 use Give\Form\Template\Scriptable;
15 use Give\Helpers\Form\Template as FormTemplateUtils;
16 use Give\Helpers\Form\Template\Utils\Frontend as FrontendFormTemplateUtils;
17 use Give\Helpers\Form\Utils;
18 use Give\Helpers\Form\Utils as FormUtils;
19 use Give\Session\SessionDonation\DonationAccessor;
20
21 defined('ABSPATH') || exit;
22
23 /**
24 * LoadTemplate class.
25 * This class is responsible to load necessary hooks and run required functions which help to render form template (in different style).
26 *
27 * @since 2.7.0
28 */
29 class LoadTemplate
30 {
31 /**
32 * Default form template ID.
33 *
34 * @var string
35 */
36 private $defaultTemplateID = 'legacy';
37
38 /**
39 * Form template config.
40 *
41 * @var Template
42 */
43 private $template;
44
45 /**
46 * setup form template
47 *
48 * @since 2.7.0
49 *
50 * @param int $formId Form Id. Default value: check explanation in src/Helpers/Form/Utils.php:103
51 */
52 private function setUpTemplate($formId = null)
53 {
54 $formId = (int)($formId ?: FrontendFormTemplateUtils::getFormId());
55
56 $templateID = FormTemplateUtils::getActiveID($formId) ?: $this->defaultTemplateID;
57
58 $this->template = Give()->templates->getTemplate($templateID);
59 }
60
61 /**
62 * Initialize form template
63 */
64 public function init()
65 {
66 $this->setUpTemplate();
67
68 // Exit is template is not valid.
69 if (! ($this->template instanceof Template)) {
70 return;
71 }
72
73 // Load template hooks.
74 if ($this->template instanceof Hookable) {
75 $this->template->loadHooks();
76 }
77
78 // Load template scripts.
79 if ($this->template instanceof Scriptable) {
80 add_action('wp_enqueue_scripts', [$this->template, 'loadScripts']);
81 }
82
83 $this->setUpFrontendHooks();
84 }
85
86 /**
87 * Setup frontend hooks
88 *
89 * @since 2.7.0
90 */
91 private function setUpFrontendHooks()
92 {
93 add_action('give_embed_head', [$this, 'noRobots']);
94 add_action('give_embed_head', 'wp_enqueue_scripts', 1);
95 add_action('give_embed_head', [$this, 'handleEnqueueScripts'], 2);
96 add_action('give_embed_head', 'wp_print_styles', 8);
97 add_action('give_embed_head', 'wp_print_head_scripts', 9);
98 add_action('give_embed_footer', 'wp_print_footer_scripts', 20);
99 add_filter('give_form_wrap_classes', [$this, 'editClassList'], 999);
100 add_action('give_hidden_fields_after', [$this, 'addHiddenField']);
101 add_filter('give_donation_form_submit_button', [$this, 'disableDonationButtonInPreviewMode'], 999, 2);
102
103 // Handle receipt screen template
104 add_action('wp_ajax_get_receipt', [$this, 'handleReceiptAjax'], 9);
105 add_action('wp_ajax_nopriv_get_receipt', [$this, 'handleReceiptAjax'], 9);
106 }
107
108 /**
109 * Display a noindex meta tag.
110 *
111 * Outputs a noindex meta tag that tells web robots not to index and follow content.
112 *
113 * @since 2.7.0
114 */
115 public function noRobots()
116 {
117 echo "<meta name='robots' content='noindex,nofollow'/>\n";
118 }
119
120 /**
121 * Render sequoia receipt by ajax
122 *
123 * @since 2.7.0
124 */
125 public function handleReceiptAjax()
126 {
127 // Let core handle receipt for legacy form.
128 if (FormUtils::isLegacyForm()) {
129 return;
130 }
131
132 // Remove protocol before url comparison.
133 $referer = preg_replace('/^https?:\/\//i', '', untrailingslashit(wp_get_referer()));
134 $successPageUrl = preg_replace('/^https?:\/\//i', '', untrailingslashit(FormUtils::getSuccessPageURL()));
135
136 // Show new receipt view only on donation confirmation page.
137 if (false === strpos($referer, $successPageUrl)) {
138 return;
139 }
140
141 /**
142 * Fixes #5513 by clearing the payment post cache.
143 * @link https://github.com/impress-org/givewp/issues/5513
144 */
145 clean_post_cache(
146 (new DonationAccessor())->getDonationId()
147 );
148
149 ob_start();
150 include_once $this->template->getReceiptView();
151 $data = ob_get_clean();
152 wp_send_json($data);
153 wp_die(); // All ajax handlers die when finished
154 }
155
156 /**
157 * Handle enqueue script
158 *
159 * @since 2.7.0
160 */
161 public function handleEnqueueScripts()
162 {
163 global $wp_scripts, $wp_styles;
164 wp_enqueue_scripts();
165
166 $wp_styles->dequeue($this->getListOfScriptsToDequeue($wp_styles->registered));
167 $wp_scripts->dequeue($this->getListOfScriptsToDequeue($wp_scripts->registered));
168 }
169
170 /**
171 * Edit donation form wrapper class list.
172 *
173 * @since 2.7.0
174 *
175 * @param array $classes
176 *
177 * @return array
178 */
179 public function editClassList($classes)
180 {
181 // Remove display_style related classes because they (except onpage ) creates style conflict with form template.
182 $classes = array_filter(
183 $classes,
184 static function ($class) {
185 return false === strpos($class, 'give-display-');
186 }
187 );
188
189 $classes[] = 'give-embed-form';
190
191 if (FormUtils::inIframe()) {
192 $classes[] = 'give-viewing-form-in-iframe';
193 }
194
195 return $classes;
196 }
197
198 /**
199 * Add hidden field
200 *
201 * @since 2.7.0
202 */
203 public function addHiddenField()
204 {
205 printf(
206 '<input type="hidden" name="%1$s" value="%2$s">',
207 'give_embed_form',
208 '1'
209 );
210 }
211
212 /**
213 * Disable donation submit in donation form preview mode.
214 *
215 * @since 2.7.0
216 *
217 * @param int $formId
218 * @param string $buttonHtml
219 *
220 * @return string
221 */
222 public function disableDonationButtonInPreviewMode($buttonHtml, $formId)
223 {
224 if (Utils::canDisableDonationNowButton()) {
225 $search = 'input type="submit"';
226
227 $buttonHtml = str_replace(
228 $search,
229 "{$search} onclick=\"return false;\"",
230 $buttonHtml
231 );
232 }
233
234 return $buttonHtml;
235 }
236
237 /**
238 * Get filter list to dequeue scripts and style
239 *
240 * @since 2.7.0
241 *
242 * @param array $scripts
243 *
244 * @return array
245 */
246 private function getListOfScriptsToDequeue($scripts)
247 {
248 $list = [];
249 $skip = [];
250 $themeDir = get_template_directory_uri();
251
252 /* @var _WP_Dependency $data */
253 foreach ($scripts as $handle => $data) {
254 // Do not unset dependency.
255 if (in_array($handle, $skip, true)) {
256 continue;
257 }
258
259 // Do not allow styles and scripts from theme.
260 if (false !== strpos((string)$data->src, $themeDir)) {
261 $list[] = $handle;
262 continue;
263 }
264
265 if (
266 0 === strpos($handle, 'give') ||
267 false !== strpos($data->src, '\give')
268 ) {
269 // Store dependencies to skip.
270 $skip = array_merge($skip, $data->deps);
271 continue;
272 }
273
274 $list[] = $handle;
275 }
276
277 return $list;
278 }
279
280 /**
281 * Get template.
282 *
283 * @since 2.7.0
284 * @return Template
285 */
286 public function getTheme()
287 {
288 return $this->template;
289 }
290 }
291