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 -13 3.0.2.9 → 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,17 +97,8 @@
66 97 }
67 98 }
68 99
69 100 if ($raw === '') {
70 - $checkoutToken = isset($_GET['yatra_remaining_checkout']) ? (string) wp_unslash($_GET['yatra_remaining_checkout']) : '';
71 - $checkoutToken = preg_replace('/[^a-zA-Z0-9_-]/', '', $checkoutToken) ?? '';
72 - if ($checkoutToken !== '') {
73 - return [
74 - 'type' => 'checkout',
75 - 'token' => $checkoutToken,
76 - ];
77 - }
78 -
79 101 return null;
80 102 }
81 103
82 104 $page = self::sanitizeBaseSegment($raw);
@@ -144,14 +166,14 @@
144 166 $slug = '';
145 167 if ($baseKey !== '') {
146 168 $fromBase = $_GET[$baseKey] ?? null;
147 169 if (is_string($fromBase)) {
148 - $slug = sanitize_title(wp_unslash($fromBase));
170 + $slug = \Yatra\Helpers\SlugHelper::generate(wp_unslash($fromBase));
149 171 }
150 172 }
151 173 if ($slug === '') {
152 174 $legacy = $_GET[$legacySlugKey] ?? '';
153 - $slug = is_string($legacy) ? sanitize_title(wp_unslash($legacy)) : '';
175 + $slug = is_string($legacy) ? \Yatra\Helpers\SlugHelper::generate(wp_unslash($legacy)) : '';
154 176 }
155 177 if ($slug !== '') {
156 178 return [
157 179 'type' => 'taxonomy',
@@ -209,9 +231,9 @@
209 231 if (!isset($_GET[$b])) {
210 232 continue;
211 233 }
212 234 $raw = $_GET[$b];
213 - $slug = is_string($raw) ? sanitize_title(wp_unslash($raw)) : '';
235 + $slug = is_string($raw) ? \Yatra\Helpers\SlugHelper::generate(wp_unslash($raw)) : '';
214 236 if ($slug === '') {
215 237 continue;
216 238 }
217 239
@@ -240,9 +262,9 @@
240 262 private static function getTripSlugFromRequest(): string
241 263 {
242 264 $key = self::tripSlugQueryKey();
243 265 $slug = $_GET[$key] ?? $_GET['yatra_trip'] ?? $_GET['yatra_trip_slug'] ?? '';
244 - $slug = is_string($slug) ? sanitize_title(wp_unslash($slug)) : '';
266 + $slug = is_string($slug) ? \Yatra\Helpers\SlugHelper::generate(wp_unslash($slug)) : '';
245 267
246 268 return $slug;
247 269 }
248 270