| @@ -523,7 +523,29 @@ | ||
| 523 | 523 | ? $data['custom_fields'] |
| 524 | 524 | : (array) $data['custom_fields']; |
| 525 | 525 | } |
| 526 | 526 | |
| 527 | + // Hour-based duration only applies to single-day tours. Clamp to a sane | |
| 528 | + // day-length range, and never let a multi-day / flexible trip carry | |
| 529 | + // hours — otherwise the front end would show "8 hours" for a multi-day | |
| 530 | + // trip and the Google Calendar module would build a short timed event | |
| 531 | + // instead of the correct multi-day span. | |
| 532 | + // | |
| 533 | + // `trip_type` settles it when the payload carries it (the trip form | |
| 534 | + // always sends both). A partial update that omits `trip_type` is caught | |
| 535 | + // by the duration_days fallback below, so hours can never be stored | |
| 536 | + // against a multi-day span. | |
| 537 | + if (array_key_exists('duration_hours', $sanitized)) { | |
| 538 | + $sanitized['duration_hours'] = max(0, min(24, (int) $sanitized['duration_hours'])); | |
| 539 | + $isMultiDayType = array_key_exists('trip_type', $sanitized) | |
| 540 | + && $sanitized['trip_type'] !== 'single_day'; | |
| 541 | + $isMultiDaySpan = array_key_exists('duration_days', $sanitized) | |
| 542 | + && (int) $sanitized['duration_days'] > 1; | |
| 543 | + | |
| 544 | + if ($isMultiDayType || $isMultiDaySpan) { | |
| 545 | + $sanitized['duration_hours'] = 0; | |
| 546 | + } | |
| 547 | + } | |
| 548 | + | |
| 527 | 549 | return apply_filters('yatra_trip_sanitize_data', $sanitized, $data); |
| 528 | 550 | } |
| 529 | 551 | } |