PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.13.0
GiveWP – Donation Plugin and Fundraising Platform v2.13.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 / Route / Form.php
give / src / Route Last commit date
Form.php 5 years ago PayPalWebhooks.php 5 years ago Route.php 5 years ago
Form.php
213 lines
1 <?php
2
3 /**
4 * Handle Embed Donation Form Route
5 *
6 * @since 2.7.0
7 * @package Give
8 */
9
10 namespace Give\Route;
11
12 use Give\Controller\Form as Controller;
13 use WP_Post;
14
15 defined( 'ABSPATH' ) || exit;
16
17 /**
18 * Template class.
19 *
20 * @since 2.7.0
21 */
22 class Form {
23 /**
24 * Option name
25 *
26 * @since 2.7.0
27 * @var string
28 */
29 private $optionName = 'form_page_url_prefix';
30
31 /**
32 * Route base
33 *
34 * @since 2.7.0
35 * @var string
36 */
37 private $defaultBase = 'give';
38
39 /**
40 * Route base
41 *
42 * @since 2.7.0
43 * @var string
44 */
45 private $base;
46
47 /**
48 * @since 2.8.0
49 * @var Controller
50 */
51 private $controller;
52
53 /**
54 * Form constructor.
55 *
56 * @since 2.8.0
57 *
58 * @param Controller $controller
59 */
60 public function __construct( Controller $controller ) {
61 $this->controller = $controller;
62 }
63
64 /**
65 * Form constructor.
66 */
67 public function init() {
68 $this->setBasePrefix();
69 $this->controller->init();
70
71 add_action( 'init', [ $this, 'addRule' ] );
72 add_action( 'query_vars', [ $this, 'addQueryVar' ] );
73 add_action( 'give-settings_save_advanced', [ $this, 'updateRule' ], 11 );
74 }
75
76 /**
77 * Setup base prefix
78 *
79 * @since 2.7.0
80 */
81 public function setBasePrefix() {
82 $this->base = give_get_option( $this->optionName, $this->defaultBase );
83 }
84
85
86 /**
87 * Add rewrite rule
88 *
89 * @since 2.7.0
90 */
91 public function addRule() {
92 add_rewrite_rule(
93 "{$this->base}/(.+?)/?$",
94 sprintf(
95 'index.php?url_prefix=%1$s&give_form_id=$matches[1]',
96 $this->base
97 ),
98 'top'
99 );
100 }
101
102
103 /**
104 * Add query var
105 *
106 * @since 2.7.0
107 *
108 * @param array $queryVars
109 *
110 * @return array
111 */
112 public function addQueryVar( $queryVars ) {
113 $queryVars[] = 'give_form_id';
114 $queryVars[] = 'url_prefix';
115
116 return $queryVars;
117 }
118
119 /**
120 * Get form URL.
121 *
122 * @since 2.7.0
123 * @since 2.8.0 Add support for all permalink settings.
124 * @since 2.8.0 Specify URL scheme to avoid mixed content when loaded in the admin.
125 *
126 * @param int $form_id
127 *
128 * @return string
129 */
130 public function getURL( $form_id ) {
131 $scheme = ( is_ssl() ) ? 'https' : 'http';
132 return get_option( 'permalink_structure' )
133 ? home_url( "/{$this->base}/{$form_id}", $scheme )
134 : add_query_arg(
135 [
136 'give_form_id' => $form_id,
137 'url_prefix' => $this->base,
138 ],
139 home_url( '', $scheme )
140 );
141 }
142
143
144 /**
145 * Get url base.
146 *
147 * @since 2.7.0
148 * @return string
149 */
150 public function getBase() {
151 return $this->base;
152 }
153
154 /**
155 * Get url base.
156 *
157 * @since 2.7.0
158 * @return string
159 */
160 public function getOptionName() {
161 return $this->optionName;
162 }
163
164
165 /**
166 * Update route rule
167 *
168 * @since 2.7.0
169 */
170 public function updateRule() {
171 global $wp_rewrite;
172
173 $updateBase = give_get_option( $this->optionName, $this->defaultBase );
174
175 if ( $updateBase !== $this->base ) {
176 $this->base = $updateBase;
177
178 // Save rewrite rule manually.
179 $this->addRule();
180 flush_rewrite_rules();
181 $wp_rewrite->wp_rewrite_rules();
182 }
183 }
184
185 /**
186 * Get queried form ID.
187 *
188 * @since 2.7.0
189 * @return int
190 */
191 public function getQueriedFormID() {
192 $formId = 0;
193
194 if ( $queryVar = get_query_var( 'give_form_id' ) ) {
195 $form = current(
196 get_posts(
197 [
198 'name' => $queryVar,
199 'numberposts' => 1,
200 'post_type' => 'give_forms',
201 ]
202 )
203 );
204
205 if ( $form instanceof WP_Post ) {
206 $formId = $form->ID;
207 }
208 }
209
210 return $formId;
211 }
212 }
213