PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.16
Yatra – Travel Booking & Tour Operator Software v3.0.16
3.0.16 3.0.15 3.0.14 3.0.14.1 3.0.14.2 3.0.12 3.0.13 3.0.11 3.0.10 3.0.9 3.0.8 3.0.7 3.0.6 3.0.5 3.0.5.1 3.0.4 3.0.3 3.0.2.9 3.0.2.7 3.0.2.8 3.0.2.6 trunk 1.0.0 2.0.0 2.0.1 All 84 releases
← All changes | app/Core/Routing/PlainPageMatcher.php +35 -21 3.0.2.7 → 3.0.16 View file →
@@ -23,8 +23,17 @@
23 23 * @return array<string, mixed>|null Route data compatible with {@see Router::handleRouteData()}
24 24 */
25 25 public static function match(): ?array
26 26 {
27 + /**
28 + * Override plain / query-arg routing entirely (runs before core matching).
29 + * Return a handler route array compatible with {@see Router::handleRouteData()}.
30 + */
31 + $plain_override = apply_filters('yatra_plain_route_match', null);
32 + if (is_array($plain_override) && isset($plain_override['type']) && is_string($plain_override['type']) && $plain_override['type'] !== '') {
33 + return $plain_override;
34 + }
35 +
27 36 // Plain-style query routing (?yatra_page=activity&paged=2) must run even when the site uses
28 37 // pretty permalinks — pagination links use home_url('/') + query args. Without this, the router
29 38 // never sees those URLs and WordPress may 404 on paged front-page requests.
30 39
@@ -36,8 +45,30 @@
36 45
37 46 $raw = $_GET['yatra_page'] ?? '';
38 47 $raw = is_string($raw) ? trim(wp_unslash($raw)) : '';
39 48
49 + // Plain email verification / remaining checkout: must run before trip/taxonomy heuristics
50 + // so ?yatra_verify_email=… and ?yatra_remaining_checkout=… always win (same as pretty paths).
51 + if ($raw === '') {
52 + $checkoutToken = isset($_GET['yatra_remaining_checkout']) ? (string) wp_unslash($_GET['yatra_remaining_checkout']) : '';
53 + $checkoutToken = preg_replace('/[^a-zA-Z0-9_-]/', '', $checkoutToken) ?? '';
54 + if ($checkoutToken !== '') {
55 + return [
56 + 'type' => 'checkout',
57 + 'token' => $checkoutToken,
58 + ];
59 + }
60 +
61 + $verifyToken = isset($_GET['yatra_verify_email']) ? (string) wp_unslash($_GET['yatra_verify_email']) : '';
62 + $verifyToken = preg_replace('/[^a-zA-Z0-9_-]/', '', $verifyToken) ?? '';
63 + if ($verifyToken !== '') {
64 + return [
65 + 'type' => 'email_verification',
66 + 'token' => $verifyToken,
67 + ];
68 + }
69 + }
70 +
40 71 // Plain single trip: ?{trip_base}=slug (legacy ?yatra_trip= / ?yatra_trip_slug=)
41 72 $trip_slug_only = self::getTripSlugFromRequest();
42 73 if ($trip_slug_only !== '' && $raw === '') {
43 74 return [
@@ -66,25 +97,8 @@
66 97 }
67 98 }
68 99
69 100 if ($raw === '') {
70 - if (!empty($_GET['yatra_login_page'])) {
71 - return [
72 - 'type' => 'login',
73 - 'page' => 'main',
74 - 'base' => 'login',
75 - ];
76 - }
77 -
78 - $checkoutToken = isset($_GET['yatra_remaining_checkout']) ? (string) wp_unslash($_GET['yatra_remaining_checkout']) : '';
79 - $checkoutToken = preg_replace('/[^a-zA-Z0-9_-]/', '', $checkoutToken) ?? '';
80 - if ($checkoutToken !== '') {
81 - return [
82 - 'type' => 'checkout',
83 - 'token' => $checkoutToken,
84 - ];
85 - }
86 -
87 101 return null;
88 102 }
89 103
90 104 $page = self::sanitizeBaseSegment($raw);
@@ -152,14 +166,14 @@
152 166 $slug = '';
153 167 if ($baseKey !== '') {
154 168 $fromBase = $_GET[$baseKey] ?? null;
155 169 if (is_string($fromBase)) {
156 - $slug = sanitize_title(wp_unslash($fromBase));
170 + $slug = \Yatra\Helpers\SlugHelper::generate(wp_unslash($fromBase));
157 171 }
158 172 }
159 173 if ($slug === '') {
160 174 $legacy = $_GET[$legacySlugKey] ?? '';
161 - $slug = is_string($legacy) ? sanitize_title(wp_unslash($legacy)) : '';
175 + $slug = is_string($legacy) ? \Yatra\Helpers\SlugHelper::generate(wp_unslash($legacy)) : '';
162 176 }
163 177 if ($slug !== '') {
164 178 return [
165 179 'type' => 'taxonomy',
@@ -217,9 +231,9 @@
217 231 if (!isset($_GET[$b])) {
218 232 continue;
219 233 }
220 234 $raw = $_GET[$b];
221 - $slug = is_string($raw) ? sanitize_title(wp_unslash($raw)) : '';
235 + $slug = is_string($raw) ? \Yatra\Helpers\SlugHelper::generate(wp_unslash($raw)) : '';
222 236 if ($slug === '') {
223 237 continue;
224 238 }
225 239
@@ -248,9 +262,9 @@
248 262 private static function getTripSlugFromRequest(): string
249 263 {
250 264 $key = self::tripSlugQueryKey();
251 265 $slug = $_GET[$key] ?? $_GET['yatra_trip'] ?? $_GET['yatra_trip_slug'] ?? '';
252 - $slug = is_string($slug) ? sanitize_title(wp_unslash($slug)) : '';
266 + $slug = is_string($slug) ? \Yatra\Helpers\SlugHelper::generate(wp_unslash($slug)) : '';
253 267
254 268 return $slug;
255 269 }
256 270