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