PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.1.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.1.1
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 4 months ago BlockServiceProvider.php 4 months ago BlockStylesService.php 3 months ago BlockValidationService.php 2 years ago CartMenuIconMigrationService.php 1 year ago CartMigrationService.php 1 year ago FormModeSwitcherService.php 5 months 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 ProductReviewFormService.php 4 months ago ProductSelectedPriceMigrationService.php 1 year ago ProductVariantsMigrationService.php 1 year ago URLParamService.php 3 months ago
URLParamService.php
389 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 star rating arguments.
174 *
175 * @param string $instance_id Unique instance ID.
176 *
177 * @return array
178 */
179 public function getAllStarArgs( $instance_id = '' ): array {
180 $instance_id = $instance_id ? $instance_id : $this->instance_id;
181 $args = $this->getArgs( $instance_id ); // Use getArgs to get filtered arguments.
182 $star_args = [];
183
184 foreach ( $args as $key => $value ) {
185 $star_name = $this->getName( $key, $instance_id );
186 if ( 'ratings' === $star_name ) {
187 $star_args[ $star_name ] = $value;
188 }
189 }
190
191 return $star_args;
192 }
193
194 /**
195 * Get the current page.
196 *
197 * @param string $instance_id Unique instance ID.
198 *
199 * @return int
200 */
201 public function getCurrentPage( $instance_id = '' ) {
202 $instance_id = $instance_id ? $instance_id : $this->instance_id;
203 $key = $this->getKey( $this->pagination_key, $instance_id );
204 return max( 1, absint( $_GET[ $key ] ?? 1 ) );
205 }
206
207 /**
208 * Add a generic argument to the URL.
209 *
210 * @param string $key Key.
211 * @param string|array $value Value.
212 * @param string $instance_id Unique instance ID.
213 * @return string
214 */
215 public function addArg( $key, $value, $instance_id = '' ) {
216 // get the instance ID.
217 $instance_id = $instance_id ? $instance_id : $this->instance_id;
218 // get the key for this filter argument.
219 $key = $this->getKey( $key, $instance_id );
220 // make sure the value is always lowercase.
221 $value = is_array( $value ) ? array_map( 'strtolower', $value ) : strtolower( $value );
222 // return the new URL without pagination for filtering.
223 $this->url = add_query_arg( strtolower( $key ), $value, $this->url );
224 // return this.
225 return $this;
226 }
227
228 /**
229 * Get the URL.
230 *
231 * @return string
232 */
233 public function url() {
234 return $this->url;
235 }
236
237 /**
238 * Add a pagination argument to the URL.
239 *
240 * @param int $page Page.
241 * @param string $instance_id Unique instance ID.
242 *
243 * @return string
244 */
245 public function addPageArg( $page, $instance_id = '' ) {
246 return $this->addArg( $this->pagination_key, $page, $instance_id );
247 }
248
249 /**
250 * Add a filter argument to the URL.
251 *
252 * @param string $key Key.
253 * @param string $value Value.
254 * @param string $instance_id Unique instance ID.
255 *
256 * @return string
257 */
258 public function addFilterArg( $key, $value, $instance_id = '' ) {
259 // get the instance ID.
260 $instance_id = $instance_id ? $instance_id : $this->instance_id;
261
262 // get the key for this filter argument.
263 $key = $this->getKey( $key, $instance_id );
264
265 // get the existing filters.
266 $existing_filters = $_GET[ $key ] ?? [];
267 $existing_filters = is_array( $existing_filters ) ? $existing_filters : [];
268
269 // add the new filter.
270 $filters = array_unique( array_merge( $existing_filters, [ $value ] ) );
271
272 // return the new URL without pagination for filtering, preserving search.
273 return remove_query_arg(
274 [
275 $this->getKey( $this->pagination_key, $instance_id ),
276 ],
277 add_query_arg( $key, $filters, $this->url )
278 );
279 }
280
281 /**
282 * Check if a filter argument exists in the URL.
283 *
284 * @param string $key Key.
285 * @param string $value Value.
286 * @param string $instance_id Unique instance ID.
287 *
288 * @return bool
289 */
290 public function hasFilterArg( $key, $value, $instance_id = '' ) {
291 // get the instance ID.
292 $instance_id = $instance_id ? $instance_id : $this->instance_id;
293
294 // get the key for this filter argument.
295 $key = $this->getKey( $key, $instance_id );
296
297 // get the existing filters.
298 $existing_filters = $_GET[ $key ] ?? [];
299
300 // check if the value exists in the existing filters.
301 return in_array( strval( $value ), $existing_filters, false );
302 }
303
304 /**
305 * Remove all specified arguments from the URL.
306 *
307 * @param array $existing_filters Existing filters to remove.
308 * @param string $instance_id Unique instance ID.
309 *
310 * @return string
311 */
312 protected function removeAllArgs( $existing_filters, $instance_id = '' ) {
313 // get the instance ID.
314 $instance_id = $instance_id ? $instance_id : $this->instance_id;
315
316 // prepare keys to remove.
317 $keys_to_remove = [
318 $this->getKey( $this->pagination_key, $instance_id ),
319 $this->getKey( $this->search_key, $instance_id ),
320 ];
321
322 // gather keys to remove using existing filter keys.
323 foreach ( array_keys( $existing_filters ) as $filter_key ) {
324 $keys_to_remove[] = $this->getKey( $filter_key, $instance_id );
325 }
326
327 // return the new URL without pagination for filtering.
328 return remove_query_arg( $keys_to_remove, $this->url );
329 }
330
331 /**
332 * Remove all filter arguments from the URL.
333 *
334 * @param string $instance_id Unique instance ID.
335 *
336 * @return string
337 */
338 public function removeAllFilterArgs( $instance_id = '' ) {
339 $instance_id = $instance_id ? $instance_id : $this->instance_id;
340 $existing_filters = $this->getAllTaxonomyArgs( $instance_id );
341 return $this->removeAllArgs( $existing_filters, $instance_id );
342 }
343
344 /**
345 * Remove all star rating arguments from the URL.
346 *
347 * @param string $instance_id Unique instance ID.
348 *
349 * @return string
350 */
351 public function removeAllStarArgs( $instance_id = '' ) {
352 $instance_id = $instance_id ? $instance_id : $this->instance_id;
353 $existing_filters = $this->getAllStarArgs( $instance_id );
354 return $this->removeAllArgs( $existing_filters, $instance_id );
355 }
356
357 /**
358 * Remove a filter argument from the URL.
359 *
360 * @param string $key Key.
361 * @param string $value Value.
362 * @param string $instance_id Unique instance ID.
363 *
364 * @return string
365 */
366 public function removeFilterArg( $key, $value, $instance_id = '' ) {
367 // get the instance ID.
368 $instance_id = $instance_id ? $instance_id : $this->instance_id;
369
370 // get the key for this filter argument.
371 $key = $this->getKey( $key, $instance_id );
372
373 // get the existing filters.
374 $existing_filters = $_GET[ $key ] ?? [];
375 $existing_filters = is_array( $existing_filters ) ? $existing_filters : [];
376
377 // remove the new filter.
378 $filters = array_diff( $existing_filters, [ $value ] );
379
380 // return the new URL without pagination for filtering, preserving search.
381 return remove_query_arg(
382 [
383 $this->getKey( $this->pagination_key, $instance_id ),
384 ],
385 add_query_arg( $key, $filters, $this->url )
386 );
387 }
388 }
389