PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.0-beta1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.0-beta1
4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 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 2 years ago BlockPatternsService.php 2 years ago BlockService.php 2 years ago BlockServiceProvider.php 2 years ago BlockStylesService.php 2 years ago BlockValidationService.php 2 years ago CartMenuIconMigrationService.php 2 years ago CartMigrationService.php 2 years ago FormModeSwitcherService.php 2 years ago ProductCollectionBadgesMigrationService.php 2 years ago ProductListMigrationService.php 2 years ago ProductListService.php 2 years ago ProductPriceChoicesMigrationService.php 2 years ago ProductSelectedPriceMigrationService.php 2 years ago ProductVariantsMigrationService.php 2 years ago URLParamService.php 2 years ago
URLParamService.php
248 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 /**
94 * Get the filter arguments.
95 *
96 * @param string $name Name.
97 * @param string $instance_id Unique instance ID.
98 *
99 * @return array
100 */
101 public function getArg( $name, $instance_id = '' ) {
102 $instance_id = $instance_id ? $instance_id : $this->instance_id;
103 $key = $this->getKey( $name, $instance_id );
104 return $_GET[ $key ] ?? null;
105 }
106
107 /**
108 * Get the current page.
109 *
110 * @param string $instance_id Unique instance ID.
111 *
112 * @return int
113 */
114 public function getCurrentPage( $instance_id = '' ) {
115 $instance_id = $instance_id ? $instance_id : $this->instance_id;
116 $key = $this->getKey( $this->pagination_key, $instance_id );
117 return max( 1, absint( $_GET[ $key ] ?? 1 ) );
118 }
119
120 /**
121 * Add a generic argument to the URL.
122 *
123 * @param string $key Key.
124 * @param string|array $value Value.
125 * @return string
126 */
127 public function addArg( $key, $value, $instance_id = '' ) {
128 // get the instance ID.
129 $instance_id = $instance_id ? $instance_id : $this->instance_id;
130 // get the key for this filter argument.
131 $key = $this->getKey( $key, $instance_id );
132 // make sure the value is always lowercase.
133 $value = is_array( $value ) ? array_map( 'strtolower', $value ) : strtolower( $value );
134 // return the new URL without pagination for filtering.
135 $this->url = add_query_arg( strtolower( $key ), $value, $this->url );
136 // return this.
137 return $this;
138 }
139
140 /**
141 * Get the URL.
142 *
143 * @return string
144 */
145 public function url() {
146 return $this->url;
147 }
148
149 /**
150 * Add a pagination argument to the URL.
151 *
152 * @param int $page Page.
153 * @param string $instance_id Unique instance ID.
154 *
155 * @return string
156 */
157 public function addPageArg( $page, $instance_id = '' ) {
158 return $this->addArg( $this->pagination_key, $page, $instance_id );
159 }
160
161 /**
162 * Add a filter argument to the URL.
163 *
164 * @param string $key Key.
165 * @param string $value Value.
166 * @param string $instance_id Unique instance ID.
167 *
168 * @return string
169 */
170 public function addFilterArg( $key, $value, $instance_id = '' ) {
171 // get the instance ID.
172 $instance_id = $instance_id ? $instance_id : $this->instance_id;
173
174 // get the key for this filter argument.
175 $key = $this->getKey( $key, $instance_id );
176
177 // get the existing filters.
178 $existing_filters = $_GET[ $key ] ?? [];
179
180 // add the new filter.
181 $filters = array_unique( array_merge( $existing_filters, [ $value ] ) );
182
183 // return the new URL without pagination for filtering.
184 return remove_query_arg(
185 [
186 $this->getKey( $this->pagination_key, $instance_id ),
187 $this->getKey( $this->search_key, $instance_id ),
188 ],
189 add_query_arg( $key, $filters, $this->url )
190 );
191 }
192
193 /**
194 * Check if a filter argument exists in the URL.
195 *
196 * @param string $key Key.
197 * @param string $value Value.
198 * @param string $instance_id Unique instance ID.
199 *
200 * @return bool
201 */
202 public function hasFilterArg( $key, $value, $instance_id = '' ) {
203 // get the instance ID.
204 $instance_id = $instance_id ? $instance_id : $this->instance_id;
205
206 // get the key for this filter argument.
207 $key = $this->getKey( $key, $instance_id );
208
209 // get the existing filters.
210 $existing_filters = $_GET[ $key ] ?? [];
211
212 // check if the value exists in the existing filters.
213 return in_array( strval( $value ), $existing_filters, false );
214 }
215
216 /**
217 * Remove a filter argument from the URL.
218 *
219 * @param string $key Key.
220 * @param string $value Value.
221 * @param string $instance_id Unique instance ID.
222 *
223 * @return string
224 */
225 public function removeFilterArg( $key, $value, $instance_id = '' ) {
226 // get the instance ID.
227 $instance_id = $instance_id ? $instance_id : $this->instance_id;
228
229 // get the key for this filter argument.
230 $key = $this->getKey( $key, $instance_id );
231
232 // get the existing filters.
233 $existing_filters = $_GET[ $key ] ?? [];
234
235 // remove the new filter.
236 $filters = array_diff( $existing_filters, [ $value ] );
237
238 // return the new URL without pagination for filtering.
239 return remove_query_arg(
240 [
241 $this->getKey( $this->pagination_key, $instance_id ),
242 $this->getKey( $this->search_key, $instance_id ),
243 ],
244 add_query_arg( $key, $filters, $this->url )
245 );
246 }
247 }
248