PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.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 / Routing / PermalinkService.php
surecart / app / src / Routing Last commit date
AdminRouteService.php 4 months ago AdminRouteServiceProvider.php 3 years ago AdminURLService.php 2 months ago PermalinkService.php 1 year ago PermalinkServiceProvider.php 1 year ago PermalinkSettingService.php 1 year ago PermalinksSettingsService.php 1 year ago RouteConditionsServiceProvider.php 3 years ago
PermalinkService.php
194 lines
1 <?php
2
3 namespace SureCart\Routing;
4
5 /**
6 * A service for registering custom routes.
7 */
8 class PermalinkService {
9 /**
10 * The regex url.
11 *
12 * @var string
13 */
14 protected $url = '';
15
16 /**
17 * The regex url.
18 *
19 * @var string
20 */
21 protected $query = '';
22
23 /**
24 * Holds the params we care about for this route.
25 *
26 * @var array
27 */
28 protected $params = [];
29
30 /**
31 * Query vars.
32 *
33 * @var array
34 */
35 protected $query_vars = [];
36
37 /**
38 * The priority of the new rule.
39 *
40 * @var string
41 */
42 protected $priority = 'top';
43
44 /**
45 * Additional rewrite rules to add.
46 *
47 * @var array
48 */
49 protected $additional_rules = [];
50
51 /**
52 * Rules to remove based on pattern matching.
53 *
54 * @var array
55 */
56 protected $remove_rules_patterns = [];
57
58 /**
59 * Set the url.
60 *
61 * @param string $url The url.
62 *
63 * @return $this
64 */
65 public function url( $url ) {
66 $this->url = $url;
67 return $this;
68 }
69
70 /**
71 * Set query.
72 *
73 * @param string $query The query.
74 *
75 * @return $this
76 */
77 public function query( $query ) {
78 $this->query = $query;
79 return $this;
80 }
81
82 /**
83 * Add any params we will use.
84 *
85 * @param array $params Array of params.
86 *
87 * @return $this
88 */
89 public function params( $params = [] ) {
90 $this->params = $params;
91 return $this;
92 }
93
94 /**
95 * Set the priority of the rule.
96 *
97 * @param "top"|"bottom" $priority The priority.
98 *
99 * @return $this
100 */
101 public function priority( $priority ) {
102 $this->priority = $priority;
103 return $this;
104 }
105
106 /**
107 * Add an additional rewrite rule.
108 *
109 * @param string $regex The regex for the rule.
110 * @param string $query The query for the rule.
111 * @param string $priority The priority for the rule.
112 *
113 * @return $this
114 */
115 public function addRule( $regex, $query, $priority = 'top' ) {
116 $this->additional_rules[] = [
117 'regex' => $regex,
118 'query' => $query,
119 'priority' => $priority,
120 ];
121 return $this;
122 }
123
124 /**
125 * Remove rules that match specific patterns.
126 *
127 * @param string $rule_pattern Pattern to match against the rule.
128 * @param string $query_pattern Pattern to match against the query.
129 *
130 * @return $this
131 */
132 public function removeRules( $rule_pattern, $query_pattern ) {
133 $this->remove_rules_patterns[] = [
134 'rule' => $rule_pattern,
135 'query' => $query_pattern,
136 ];
137 return $this;
138 }
139
140 /**
141 * Add the rewrite rule.
142 *
143 * @return void
144 */
145 public function addRewriteRule() {
146 $rules = get_option( 'rewrite_rules' );
147
148 // Remove any rules based on patterns.
149 foreach ( $this->remove_rules_patterns as $patterns ) {
150 foreach ( $rules as $rule => $rewrite ) {
151 if ( preg_match( $patterns['rule'], $rule ) && preg_match( $patterns['query'], $rewrite ) ) {
152 unset( $rules[ $rule ] );
153 }
154 }
155 }
156
157 // Add any additional rules.
158 foreach ( $this->additional_rules as $rule ) {
159 add_rewrite_rule( $rule['regex'], $rule['query'], $rule['priority'] );
160 }
161
162 // Add the main rewrite rule.
163 add_rewrite_rule( $this->url, $this->query, $this->priority );
164
165 if ( ! isset( $rules[ $this->url ] ) ) {
166 flush_rewrite_rules();
167 }
168 }
169
170 /**
171 * Add query vars.
172 *
173 * @param array $query_vars The query vars.
174 *
175 * @return array
176 */
177 public function addQueryVars( $query_vars ) {
178 return array_merge( $query_vars, $this->params );
179 }
180
181 /**
182 * Create the permalink.
183 * This handles adding the rewrite rule and query vars.
184 *
185 * @return mixed
186 */
187 public function create() {
188 // add the query vars.
189 add_filter( 'query_vars', [ $this, 'addQueryVars' ] );
190 // add the rewrite rule.
191 add_action( 'init', [ $this, 'addRewriteRule' ] );
192 }
193 }
194