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