PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.16.6
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.16.6
4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 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.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / BlockLibrary / URLParamService.php
surecart / app / src / BlockLibrary Last commit date
BlockAnchorSupportService.php 1 year ago BlockCurrencyConversionSupportService.php 1 year ago BlockPatternsService.php 1 year ago BlockService.php 9 months ago BlockServiceProvider.php 9 months ago BlockStylesService.php 8 months ago BlockValidationService.php 2 years ago CartMenuIconMigrationService.php 1 year ago CartMigrationService.php 1 year ago FormModeSwitcherService.php 1 year ago ProductCollectionBadgesMigrationService.php 1 year ago ProductListFilterTagsMigrationService.php 1 year ago ProductListMigrationService.php 1 year ago ProductListService.php 1 year ago ProductPageBlocksMigrationService.php 1 year ago ProductPriceChoicesMigrationService.php 1 year ago ProductQuickViewService.php 9 months ago ProductSelectedPriceMigrationService.php 1 year ago ProductVariantsMigrationService.php 1 year ago URLParamService.php 1 year ago
URLParamService.php
343 lines
1 <?php
2
3 namespace SureCart\BlockLibrary;
4
5 /**
6 * Provide URL params related functionality.
7 */
8 class URLParamService {
9 /**
10 * Prefix.
11 *
12 * @var string
13 */
14 protected $prefix = 'query';
15
16 /**
17 * Pagination Key.
18 *
19 * @var string
20 */
21 protected $pagination_key = 'page';
22
23 /**
24 * Search Key.
25 *
26 * @var string
27 */
28 protected $search_key = 'search';
29
30 /**
31 * Unique instance ID.
32 *
33 * @var string
34 */
35 protected $instance_id = '';
36
37 /**
38 * URL.
39 *
40 * @var string|false
41 */
42 protected $url = false;
43
44 /**
45 * Set the prefix.
46 *
47 * @param string $prefix Prefix.
48 */
49 public function __construct( $prefix = 'query' ) {
50 global $sc_query_id;
51 $this->prefix = $prefix;
52 $this->instance_id = $sc_query_id;
53 }
54
55 /**
56 * Set the block ID.
57 *
58 * @param string $prefix Prefix.
59 */
60 public function setPrefix( $prefix ) {
61 $this->prefix = $prefix;
62 return $this;
63 }
64
65 /**
66 * Set the block ID.
67 *
68 * @param string $instance_id Unique instance ID.
69 */
70 public function setInstanceId( $instance_id ) {
71 $this->instance_id = $instance_id;
72 return $this;
73 }
74
75 /**
76 * Get a unique key for a block.
77 *
78 * @param string $name Name.
79 * @param string $instance_id Unique instance ID.
80 *
81 * @return string
82 */
83 public function getKey( $name = '', $instance_id = '' ) {
84 $instance_id = $instance_id ? $instance_id : $this->instance_id;
85 $prefix = ! empty( $this->prefix ) ? ( $this->prefix . '-' ) : '';
86 if ( ! $instance_id ) {
87 return trim( $prefix . strtolower( $name ), '-' );
88 }
89 return trim( $prefix . $instance_id . '-' . strtolower( $name ), '-' );
90 }
91
92 /**
93 * Get the name of a key.
94 *
95 * @param string $key Key.
96 * @param string $instance_id Unique instance ID.
97 *
98 * @return string
99 */
100 public function getName( $key = '', $instance_id = '' ) {
101 $instance_id = $instance_id ? $instance_id : $this->instance_id;
102 $prefix = ! empty( $this->prefix ) ? ( $this->prefix . '-' ) : '';
103
104 // Strip the prefix if it exists.
105 if ( ! empty( $prefix ) && strpos( $key, $prefix ) === 0 ) {
106 $key = substr( $key, strlen( $prefix ) );
107 }
108
109 // Strip the instance ID if it exists.
110 if ( ! empty( $instance_id ) && strpos( $key, $instance_id . '-' ) === 0 ) {
111 $key = substr( $key, strlen( $instance_id . '-' ) );
112 }
113
114 // Return the original name.
115 return $key;
116 }
117
118 /**
119 * Get the filter arguments.
120 *
121 * @param string $name Name.
122 * @param string $instance_id Unique instance ID.
123 *
124 * @return array
125 */
126 public function getArg( $name, $instance_id = '' ) {
127 $instance_id = $instance_id ? $instance_id : $this->instance_id;
128 $key = $this->getKey( $name, $instance_id );
129 return $_GET[ $key ] ?? null;
130 }
131
132 /**
133 * Get the filter arguments.
134 *
135 * @param string $instance_id Unique instance ID.
136 *
137 * @return array
138 */
139 public function getArgs( $instance_id = '' ) {
140 $instance_id = $instance_id ? $instance_id : $this->instance_id;
141 $args = [];
142 foreach ( $_GET as $key => $value ) {
143 if ( strpos( $key, $this->getKey( '', $instance_id ) ) === 0 ) {
144 $args[ $key ] = $value;
145 }
146 }
147 return $args;
148 }
149
150 /**
151 * Get the filter arguments.
152 *
153 * @param string $instance_id Unique instance ID.
154 *
155 * @return array
156 */
157 public function getAllTaxonomyArgs( $instance_id = '' ) {
158 $instance_id = $instance_id ? $instance_id : $this->instance_id;
159 $args = $this->getArgs( $instance_id ); // Use getArgs to get filtered arguments.
160 $taxonomy_args = [];
161
162 foreach ( $args as $key => $value ) {
163 $taxonomy_name = $this->getName( $key, $instance_id );
164 if ( taxonomy_exists( $taxonomy_name ) ) {
165 $taxonomy_args[ $taxonomy_name ] = $value;
166 }
167 }
168
169 return $taxonomy_args;
170 }
171
172 /**
173 * Get the current page.
174 *
175 * @param string $instance_id Unique instance ID.
176 *
177 * @return int
178 */
179 public function getCurrentPage( $instance_id = '' ) {
180 $instance_id = $instance_id ? $instance_id : $this->instance_id;
181 $key = $this->getKey( $this->pagination_key, $instance_id );
182 return max( 1, absint( $_GET[ $key ] ?? 1 ) );
183 }
184
185 /**
186 * Add a generic argument to the URL.
187 *
188 * @param string $key Key.
189 * @param string|array $value Value.
190 * @param string $instance_id Unique instance ID.
191 * @return string
192 */
193 public function addArg( $key, $value, $instance_id = '' ) {
194 // get the instance ID.
195 $instance_id = $instance_id ? $instance_id : $this->instance_id;
196 // get the key for this filter argument.
197 $key = $this->getKey( $key, $instance_id );
198 // make sure the value is always lowercase.
199 $value = is_array( $value ) ? array_map( 'strtolower', $value ) : strtolower( $value );
200 // return the new URL without pagination for filtering.
201 $this->url = add_query_arg( strtolower( $key ), $value, $this->url );
202 // return this.
203 return $this;
204 }
205
206 /**
207 * Get the URL.
208 *
209 * @return string
210 */
211 public function url() {
212 return $this->url;
213 }
214
215 /**
216 * Add a pagination argument to the URL.
217 *
218 * @param int $page Page.
219 * @param string $instance_id Unique instance ID.
220 *
221 * @return string
222 */
223 public function addPageArg( $page, $instance_id = '' ) {
224 return $this->addArg( $this->pagination_key, $page, $instance_id );
225 }
226
227 /**
228 * Add a filter argument to the URL.
229 *
230 * @param string $key Key.
231 * @param string $value Value.
232 * @param string $instance_id Unique instance ID.
233 *
234 * @return string
235 */
236 public function addFilterArg( $key, $value, $instance_id = '' ) {
237 // get the instance ID.
238 $instance_id = $instance_id ? $instance_id : $this->instance_id;
239
240 // get the key for this filter argument.
241 $key = $this->getKey( $key, $instance_id );
242
243 // get the existing filters.
244 $existing_filters = $_GET[ $key ] ?? [];
245
246 // add the new filter.
247 $filters = array_unique( array_merge( $existing_filters, [ $value ] ) );
248
249 // return the new URL without pagination for filtering.
250 return remove_query_arg(
251 [
252 $this->getKey( $this->pagination_key, $instance_id ),
253 $this->getKey( $this->search_key, $instance_id ),
254 ],
255 add_query_arg( $key, $filters, $this->url )
256 );
257 }
258
259 /**
260 * Check if a filter argument exists in the URL.
261 *
262 * @param string $key Key.
263 * @param string $value Value.
264 * @param string $instance_id Unique instance ID.
265 *
266 * @return bool
267 */
268 public function hasFilterArg( $key, $value, $instance_id = '' ) {
269 // get the instance ID.
270 $instance_id = $instance_id ? $instance_id : $this->instance_id;
271
272 // get the key for this filter argument.
273 $key = $this->getKey( $key, $instance_id );
274
275 // get the existing filters.
276 $existing_filters = $_GET[ $key ] ?? [];
277
278 // check if the value exists in the existing filters.
279 return in_array( strval( $value ), $existing_filters, false );
280 }
281
282 /**
283 * Remove all filter arguments from the URL.
284 *
285 * @param string $instance_id Unique instance ID.
286 *
287 * @return string
288 */
289 public function removeAllFilterArgs( $instance_id = '' ) {
290 // get the instance ID.
291 $instance_id = $instance_id ? $instance_id : $this->instance_id;
292
293 // get the existing filters.
294 $existing_filters = $this->getAllTaxonomyArgs( $instance_id );
295
296 // prepare keys to remove.
297 $keys_to_remove = [
298 $this->getKey( $this->pagination_key, $instance_id ),
299 $this->getKey( $this->search_key, $instance_id ),
300 ];
301
302 // gather keys to remove using existing taxonomies keys.
303 foreach ( $existing_filters as $taxonomy_key => $terms ) {
304 $keys_to_remove[] = $this->getKey( $taxonomy_key, $instance_id );
305 }
306
307 // return the new URL without pagination for filtering.
308 return remove_query_arg( $keys_to_remove, $this->url );
309 }
310
311 /**
312 * Remove a filter argument from the URL.
313 *
314 * @param string $key Key.
315 * @param string $value Value.
316 * @param string $instance_id Unique instance ID.
317 *
318 * @return string
319 */
320 public function removeFilterArg( $key, $value, $instance_id = '' ) {
321 // get the instance ID.
322 $instance_id = $instance_id ? $instance_id : $this->instance_id;
323
324 // get the key for this filter argument.
325 $key = $this->getKey( $key, $instance_id );
326
327 // get the existing filters.
328 $existing_filters = $_GET[ $key ] ?? [];
329
330 // remove the new filter.
331 $filters = array_diff( $existing_filters, [ $value ] );
332
333 // return the new URL without pagination for filtering.
334 return remove_query_arg(
335 [
336 $this->getKey( $this->pagination_key, $instance_id ),
337 $this->getKey( $this->search_key, $instance_id ),
338 ],
339 add_query_arg( $key, $filters, $this->url )
340 );
341 }
342 }
343