PluginProbe
Yatra – Travel Booking & Tour Operator Software / trunk
Yatra – Travel Booking & Tour Operator Software vtrunk
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 2.0.10 2.0.11 All 82 releases
yatra / templates / partials / availability-section.php

availability-section.php in Yatra – Travel Booking & Tour Operator Software trunk, at templates/partials/availability-section.php

180 lines 9.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Availability Section Template
4 *
5 * Displays the trip availability dates with pricing, seats, and booking options.
6 *
7 * @package Yatra
8 * @var object $trip_data Trip data object
9 * @var array $availability_cards Prepared availability cards data
10 * @var array $month_filters Month filter buttons data
11 */
12
13 defined('ABSPATH') || exit;
14
15 // Ensure required variables exist
16 $trip_data = $trip_data ?? (object) [];
17 $availability_cards = $availability_cards ?? [];
18 $month_filters = $month_filters ?? [];
19
20 $sort_key = isset($sort_key) ? (string) $sort_key : 'date-asc';
21
22 $trip_id = !empty($trip_data->id) ? (int) $trip_data->id : 0;
23 $max_travelers = (int) ($trip_data->max_travelers ?? 20);
24 ?>
25 <section class="yatra-trip-section yatra-availability-section" id="availability" data-trip-id="<?php echo esc_attr($trip_id); ?>">
26 <div class="yatra-availability-header">
27 <div class="yatra-availability-header-top">
28 <h2 class="yatra-trip-section-title">
29 <?php echo yatra_svg_icon('calendar', 'yatra-trip-section-title-icon'); ?>
30 <?php esc_html_e('Availability', 'yatra'); ?>
31 </h2>
32 <div class="yatra-availability-sort">
33 <select class="yatra-availability-sort-select" id="availability-sort">
34 <option value="date-asc" <?php selected($sort_key, 'date-asc'); ?>><?php esc_html_e('Sort by: Date (Earliest)', 'yatra'); ?></option>
35 <option value="date-desc" <?php selected($sort_key, 'date-desc'); ?>><?php esc_html_e('Sort by: Date (Latest)', 'yatra'); ?></option>
36 <option value="price-asc" <?php selected($sort_key, 'price-asc'); ?>><?php esc_html_e('Sort by: Price (Low to High)', 'yatra'); ?></option>
37 <option value="price-desc" <?php selected($sort_key, 'price-desc'); ?>><?php esc_html_e('Sort by: Price (High to Low)', 'yatra'); ?></option>
38 <option value="seats-desc" <?php selected($sort_key, 'seats-desc'); ?>><?php esc_html_e('Sort by: Availability (Most)', 'yatra'); ?></option>
39 </select>
40 </div>
41 </div>
42 <p class="yatra-availability-subtitle"><?php esc_html_e('Choose your preferred departure date and book your spot', 'yatra'); ?></p>
43 </div>
44
45 <?php if (!empty($month_filters)):
46 $active_filter = isset($selected_month_filter) && $selected_month_filter !== ''
47 ? $selected_month_filter
48 : 'all';
49 ?>
50 <div class="yatra-availability-filters">
51 <button type="button" class="yatra-availability-filter-btn <?php echo ($active_filter === 'all') ? 'active' : ''; ?>" data-filter="all"><?php esc_html_e('All Dates', 'yatra'); ?></button>
52 <?php foreach ($month_filters as $key => $label): ?>
53 <button type="button" class="yatra-availability-filter-btn <?php echo ($active_filter === $key) ? 'active' : ''; ?>" data-filter="<?php echo esc_attr($key); ?>"><?php echo esc_html($label); ?></button>
54 <?php endforeach; ?>
55 </div>
56 <?php endif; ?>
57
58 <?php if (empty($availability_cards)): ?>
59 <?php
60 $trip_capacity = (int) ($trip_data->max_travelers ?? 20);
61 $trip_capacity_display = $trip_capacity > 50 ? '50+' : (string) $trip_capacity;
62 $filtered_empty = !empty($availability_filtered_no_results);
63 $active_month_key = isset($selected_month_filter) ? (string) $selected_month_filter : 'all';
64 $selected_month_human = ($filtered_empty && $active_month_key !== 'all' && isset($month_filters[$active_month_key]))
65 ? (string) $month_filters[$active_month_key]
66 : '';
67 ?>
68 <?php if ($filtered_empty): ?>
69 <div class="yatra-availability-empty yatra-availability-filter-empty" role="status">
70 <div class="yatra-availability-empty-icon">
71 <?php echo yatra_svg_icon('calendar', 'yatra-icon-xl'); ?>
72 </div>
73 <h3><?php esc_html_e('No departures in this period', 'yatra'); ?></h3>
74 <?php if ($selected_month_human !== ''): ?>
75 <p><?php echo esc_html(sprintf(
76 /* translators: %s: Month and year label, e.g. "Apr 2026" */
77 __('There are no scheduled departures in %s. Try another month or view all available dates.', 'yatra'),
78 $selected_month_human
79 )); ?></p>
80 <?php else: ?>
81 <p><?php esc_html_e('There are no departures for this filter. Try another month or view all available dates.', 'yatra'); ?></p>
82 <?php endif; ?>
83 <div class="yatra-availability-empty-actions">
84 <button type="button" class="yatra-btn yatra-btn-primary yatra-btn-large yatra-availability-show-all-dates">
85 <?php esc_html_e('Show all departure dates', 'yatra'); ?>
86 </button>
87 </div>
88 </div>
89 <?php else: ?>
90 <div class="yatra-availability-empty">
91 <div class="yatra-availability-empty-icon">
92 <?php echo yatra_svg_icon('calendar-check', 'yatra-icon-xl'); ?>
93 </div>
94 <h3><?php esc_html_e('Available on Request', 'yatra'); ?></h3>
95 <p><?php esc_html_e('This trip is available on request. No specific departure dates are set, so you can book this trip for your preferred dates.', 'yatra'); ?></p>
96
97 <div class="yatra-availability-empty-info">
98 <div class="yatra-availability-empty-info-item">
99 <div class="yatra-availability-empty-info-icon">
100 <?php echo yatra_svg_icon('users', 'yatra-icon-md'); ?>
101 </div>
102 <div class="yatra-availability-empty-info-text">
103 <span class="yatra-availability-empty-info-label"><?php esc_html_e('Capacity', 'yatra'); ?></span>
104 <span class="yatra-availability-empty-info-value"><?php echo esc_html($trip_capacity_display); ?> <?php esc_html_e('travelers', 'yatra'); ?></span>
105 </div>
106 </div>
107 <div class="yatra-availability-empty-info-item">
108 <div class="yatra-availability-empty-info-icon">
109 <?php echo yatra_svg_icon('calendar', 'yatra-icon-md'); ?>
110 </div>
111 <div class="yatra-availability-empty-info-text">
112 <span class="yatra-availability-empty-info-label"><?php esc_html_e('Booking', 'yatra'); ?></span>
113 <span class="yatra-availability-empty-info-value"><?php esc_html_e('Flexible dates', 'yatra'); ?></span>
114 </div>
115 </div>
116 </div>
117
118 <div class="yatra-availability-empty-actions">
119 <button type="button" class="yatra-btn yatra-btn-primary yatra-btn-large" onclick="yatraBookNow()">
120 <?php esc_html_e('Book Now', 'yatra'); ?>
121 </button>
122 <button type="button" class="yatra-btn yatra-btn-outline yatra-btn-large" onclick="yatraMakeEnquiry()">
123 <?php esc_html_e('Make Enquiry', 'yatra'); ?>
124 </button>
125 </div>
126 </div>
127 <?php endif; ?>
128 <?php else:
129 $availability_total_matching = isset($availability_total_matching) ? (int) $availability_total_matching : count($availability_cards);
130 $availability_page = isset($availability_page) ? max(1, (int) $availability_page) : 1;
131 $availability_per_page = isset($availability_per_page) ? max(1, (int) $availability_per_page) : 10;
132 $availability_has_more = !empty($availability_has_more);
133 $availability_loaded_count = isset($availability_loaded_count)
134 ? (int) $availability_loaded_count
135 : count($availability_cards);
136 $remaining_after_load = max(0, $availability_total_matching - $availability_loaded_count);
137 ?>
138 <div class="yatra-availability-list"
139 data-total="<?php echo esc_attr($availability_total_matching); ?>"
140 data-displayed="<?php echo esc_attr($availability_loaded_count); ?>"
141 data-page="<?php echo esc_attr($availability_page); ?>"
142 data-per-page="<?php echo esc_attr($availability_per_page); ?>"
143 data-month-filter="<?php echo esc_attr($selected_month_filter ?? 'all'); ?>"
144 data-sort="<?php echo esc_attr($sort_key); ?>">
145 <?php
146 foreach ($availability_cards as $index => $card) {
147 include YATRA_PLUGIN_PATH . 'templates/partials/availability-card.php';
148 }
149 ?>
150 </div>
151
152 <?php if ($availability_has_more): ?>
153 <div class="yatra-availability-load-more"
154 data-per-page="<?php echo esc_attr($availability_per_page); ?>"
155 data-current-page="<?php echo esc_attr($availability_page); ?>"
156 data-total="<?php echo esc_attr($availability_total_matching); ?>"
157 data-loaded="<?php echo esc_attr($availability_loaded_count); ?>"
158 data-month-filter="<?php echo esc_attr($selected_month_filter ?? 'all'); ?>"
159 data-sort="<?php echo esc_attr($sort_key); ?>">
160 <button type="button" class="yatra-availability-load-more-btn">
161 <?php echo yatra_svg_icon('plus', 'yatra-icon-sm'); ?>
162 <?php
163 /* translators: %d: number of additional departures still available to load. */
164 echo esc_html(sprintf(__('Load more departures (%d remaining)', 'yatra'), $remaining_after_load));
165 ?>
166 </button>
167 <span class="yatra-availability-count-info">
168 <?php echo esc_html(sprintf(
169 /* translators: 1: number of departures currently loaded, 2: total number of departures matching the filter. */
170 __('Showing %1$d of %2$d departures', 'yatra'),
171 $availability_loaded_count,
172 $availability_total_matching
173 )); ?>
174 </span>
175 </div>
176 <?php endif; ?>
177 <?php endif; ?>
178 </section>
179
180