PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.2.9
Yatra – Travel Booking & Tour Operator Software v3.0.2.9
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 2.0.10 All 83 releases
yatra / app / Controllers / SampleDataController.php

SampleDataController.php in Yatra – Travel Booking & Tour Operator Software 3.0.2.9, at app/Controllers/SampleDataController.php

308 lines 9.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Yatra\Controllers;
4
5 use Yatra\Services\SampleDataService;
6 use Yatra\WordPress\API;
7
8 /**
9 * Sample Data Controller
10 *
11 * Handles importing sample data for Yatra plugin
12 */
13 class SampleDataController
14 {
15 /**
16 * Constructor
17 */
18 public function __construct()
19 {
20 add_action('admin_init', [$this, 'handle_import_actions']);
21 add_action('admin_notices', [$this, 'show_admin_notices']);
22 }
23
24 /**
25 * Register REST API routes
26 */
27 public function register_routes()
28 {
29 register_rest_route('yatra/v1', '/sample-data/import', [
30 [
31 'methods' => 'POST',
32 'callback' => [$this, 'import_sample_data'],
33 'permission_callback' => [$this, 'check_permissions'],
34 'args' => [
35 'data_types' => [
36 'type' => 'array',
37 'items' => [
38 'type' => 'string',
39 'enum' => ['trips', 'categories', 'destinations', 'bookings', 'pages']
40 ]
41 ],
42 'overwrite' => [
43 'type' => 'boolean',
44 'default' => false
45 ]
46 ]
47 ]
48 ]);
49
50 register_rest_route('yatra/v1', '/sample-data/status', [
51 [
52 'methods' => 'GET',
53 'callback' => [$this, 'get_import_status'],
54 'permission_callback' => [$this, 'check_permissions']
55 ]
56 ]);
57
58 register_rest_route('yatra/v1', '/sample-data/cleanup', [
59 [
60 'methods' => 'DELETE',
61 'callback' => [$this, 'cleanup_sample_data'],
62 'permission_callback' => [$this, 'check_permissions']
63 ]
64 ]);
65 }
66
67 /**
68 * Check user permissions
69 */
70 public function check_permissions()
71 {
72 return current_user_can('manage_options');
73 }
74
75 /**
76 * Handle import actions from admin forms
77 */
78 public function handle_import_actions()
79 {
80 if (isset($_POST['yatra_import_sample_data']) &&
81 isset($_POST['_wpnonce']) &&
82 wp_verify_nonce($_POST['_wpnonce'], 'yatra_import_sample_data')) {
83
84 $data_types = isset($_POST['data_types']) ? (array) $_POST['data_types'] : [];
85 $overwrite = isset($_POST['overwrite']) && $_POST['overwrite'] === '1';
86
87 $result = $this->perform_import($data_types, $overwrite);
88
89 if ($result['success']) {
90 wp_redirect(add_query_arg(['yatra_notice' => 'import_success'], wp_get_referer()));
91 exit;
92 } else {
93 wp_redirect(add_query_arg(['yatra_notice' => 'import_error', 'message' => urlencode($result['message'])], wp_get_referer()));
94 exit;
95 }
96 }
97
98 if (isset($_POST['yatra_cleanup_sample_data']) &&
99 isset($_POST['_wpnonce']) &&
100 wp_verify_nonce($_POST['_wpnonce'], 'yatra_cleanup_sample_data')) {
101
102 $result = $this->perform_cleanup();
103
104 if ($result['success']) {
105 wp_redirect(add_query_arg(['yatra_notice' => 'cleanup_success'], wp_get_referer()));
106 exit;
107 } else {
108 wp_redirect(add_query_arg(['yatra_notice' => 'cleanup_error', 'message' => urlencode($result['message'])], wp_get_referer()));
109 exit;
110 }
111 }
112 }
113
114 /**
115 * Import sample data via REST API
116 */
117 public function import_sample_data($request)
118 {
119 $data_types = $request->get_param('data_types');
120 $overwrite = $request->get_param('overwrite');
121
122 $result = $this->perform_import($data_types, $overwrite);
123
124 if ($result['success']) {
125 return new \WP_REST_Response([
126 'success' => true,
127 'message' => $result['message'],
128 'data' => $result['data']
129 ], 200);
130 } else {
131 return new \WP_REST_Response([
132 'success' => false,
133 'message' => $result['message']
134 ], 400);
135 }
136 }
137
138 /**
139 * Get import status
140 */
141 public function get_import_status()
142 {
143 $service = new SampleDataService();
144 $status = $service->get_import_status();
145
146 return new \WP_REST_Response($status, 200);
147 }
148
149 /**
150 * Cleanup sample data via REST API
151 */
152 public function cleanup_sample_data($request)
153 {
154 $result = $this->perform_cleanup();
155
156 if ($result['success']) {
157 return new \WP_REST_Response([
158 'success' => true,
159 'message' => $result['message']
160 ], 200);
161 } else {
162 return new \WP_REST_Response([
163 'success' => false,
164 'message' => $result['message']
165 ], 400);
166 }
167 }
168
169 /**
170 * Perform the actual import
171 */
172 private function perform_import($data_types = [], $overwrite = false)
173 {
174 $service = new SampleDataService();
175
176 try {
177 // Import all sample data from JSON files
178 $result = $service->import_sample_data();
179
180 if ($result['success']) {
181 // Store import status
182 update_option('yatra_sample_data_imported', true);
183 update_option('yatra_sample_data_import_date', current_time('mysql'));
184
185 return [
186 'success' => true,
187 'message' => $result['message'],
188 'data' => $result['data']
189 ];
190 } else {
191 return [
192 'success' => false,
193 'message' => $result['message'] ?? __('Import failed.', 'yatra')
194 ];
195 }
196 } catch (\Exception $e) {
197 return [
198 'success' => false,
199 'message' => __('An error occurred during import. Please check the error logs.', 'yatra')
200 ];
201 }
202 }
203
204 /**
205 * Perform cleanup of sample data
206 */
207 private function perform_cleanup()
208 {
209 $service = new SampleDataService();
210
211 try {
212 $result = $service->cleanup_sample_data();
213
214 if ($result['success']) {
215 // Clear import status
216 delete_option('yatra_sample_data_imported');
217 delete_option('yatra_sample_data_import_date');
218 delete_option('yatra_sample_data_types');
219
220 return [
221 'success' => true,
222 'message' => __('Sample data cleaned up successfully!', 'yatra')
223 ];
224 } else {
225 return [
226 'success' => false,
227 'message' => $result['message'] ?? __('Cleanup failed.', 'yatra')
228 ];
229 }
230 } catch (\Exception $e) {
231 return [
232 'success' => false,
233 'message' => __('An error occurred during cleanup. Please check the error logs.', 'yatra')
234 ];
235 }
236 }
237
238 /**
239 * Show admin notices
240 */
241 public function show_admin_notices()
242 {
243 if (isset($_GET['yatra_notice'])) {
244 $notice = sanitize_key($_GET['yatra_notice']);
245 $message = '';
246
247 switch ($notice) {
248 case 'import_success':
249 $message = __('Sample data imported successfully!', 'yatra');
250 $class = 'notice-success';
251 break;
252
253 case 'import_error':
254 $message = isset($_GET['message']) ?
255 urldecode(sanitize_text_field($_GET['message'])) :
256 __('Import failed. Please try again.', 'yatra');
257 $class = 'notice-error';
258 break;
259
260 case 'cleanup_success':
261 $message = __('Sample data cleaned up successfully!', 'yatra');
262 $class = 'notice-success';
263 break;
264
265 case 'cleanup_error':
266 $message = isset($_GET['message']) ?
267 urldecode(sanitize_text_field($_GET['message'])) :
268 __('Cleanup failed. Please try again.', 'yatra');
269 $class = 'notice-error';
270 break;
271
272 default:
273 return;
274 }
275
276 printf(
277 '<div class="notice %s is-dismissible"><p>%s</p></div>',
278 esc_attr($class),
279 esc_html($message)
280 );
281 }
282 }
283
284 /**
285 * Check if sample data is imported
286 */
287 public static function is_sample_data_imported()
288 {
289 return get_option('yatra_sample_data_imported', false);
290 }
291
292 /**
293 * Get imported data types
294 */
295 public static function get_imported_data_types()
296 {
297 return get_option('yatra_sample_data_types', []);
298 }
299
300 /**
301 * Get import date
302 */
303 public static function get_import_date()
304 {
305 return get_option('yatra_sample_data_import_date', '');
306 }
307 }
308