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