PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.2.6
Yatra – Travel Booking & Tour Operator Software v3.0.2.6
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.6, at app/Controllers/SampleDataController.php

310 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 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 error_log('Yatra Sample Data Import Error: ' . $e->getMessage());
198 return [
199 'success' => false,
200 'message' => __('An error occurred during import. Please check the error logs.', 'yatra')
201 ];
202 }
203 }
204
205 /**
206 * Perform cleanup of sample data
207 */
208 private function perform_cleanup()
209 {
210 $service = new SampleDataService();
211
212 try {
213 $result = $service->cleanup_sample_data();
214
215 if ($result['success']) {
216 // Clear import status
217 delete_option('yatra_sample_data_imported');
218 delete_option('yatra_sample_data_import_date');
219 delete_option('yatra_sample_data_types');
220
221 return [
222 'success' => true,
223 'message' => __('Sample data cleaned up successfully!', 'yatra')
224 ];
225 } else {
226 return [
227 'success' => false,
228 'message' => $result['message'] ?? __('Cleanup failed.', 'yatra')
229 ];
230 }
231 } catch (\Exception $e) {
232 error_log('Yatra Sample Data Cleanup Error: ' . $e->getMessage());
233 return [
234 'success' => false,
235 'message' => __('An error occurred during cleanup. Please check the error logs.', 'yatra')
236 ];
237 }
238 }
239
240 /**
241 * Show admin notices
242 */
243 public function show_admin_notices()
244 {
245 if (isset($_GET['yatra_notice'])) {
246 $notice = sanitize_key($_GET['yatra_notice']);
247 $message = '';
248
249 switch ($notice) {
250 case 'import_success':
251 $message = __('Sample data imported successfully!', 'yatra');
252 $class = 'notice-success';
253 break;
254
255 case 'import_error':
256 $message = isset($_GET['message']) ?
257 urldecode(sanitize_text_field($_GET['message'])) :
258 __('Import failed. Please try again.', 'yatra');
259 $class = 'notice-error';
260 break;
261
262 case 'cleanup_success':
263 $message = __('Sample data cleaned up successfully!', 'yatra');
264 $class = 'notice-success';
265 break;
266
267 case 'cleanup_error':
268 $message = isset($_GET['message']) ?
269 urldecode(sanitize_text_field($_GET['message'])) :
270 __('Cleanup failed. Please try again.', 'yatra');
271 $class = 'notice-error';
272 break;
273
274 default:
275 return;
276 }
277
278 printf(
279 '<div class="notice %s is-dismissible"><p>%s</p></div>',
280 esc_attr($class),
281 esc_html($message)
282 );
283 }
284 }
285
286 /**
287 * Check if sample data is imported
288 */
289 public static function is_sample_data_imported()
290 {
291 return get_option('yatra_sample_data_imported', false);
292 }
293
294 /**
295 * Get imported data types
296 */
297 public static function get_imported_data_types()
298 {
299 return get_option('yatra_sample_data_types', []);
300 }
301
302 /**
303 * Get import date
304 */
305 public static function get_import_date()
306 {
307 return get_option('yatra_sample_data_import_date', '');
308 }
309 }
310