PluginProbe
WP Directory Kit / 1.3.0
WP Directory Kit v1.3.0
1.5.9 1.5.7 1.5.6 1.5.5 1.5.4 1.5.3 trunk 1.1.0 1.1.6 1.1.8 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.8 All 37 releases
wpdirectorykit / application / controllers / Wdk_frontendajax.php

Wdk_frontendajax.php in WP Directory Kit 1.3.0, at application/controllers/Wdk_frontendajax.php

1,498 lines 74.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly;
3
4 class Wdk_frontendajax extends Winter_MVC_Controller {
5
6 public function __construct(){
7 if(defined( 'WP_DEBUG' ) && WP_DEBUG) {
8 ini_set('display_errors',1);
9 ini_set('display_startup_errors',1);
10 error_reporting(-1);
11 }
12
13 parent::__construct();
14
15 $this->data['is_ajax'] = true;
16
17 }
18
19 public function index(&$output=NULL, $atts=array())
20 {
21
22 }
23
24 public function map_infowindow() {
25 $this->load->load_helper('listing');
26 $this->load->model('listing_m');
27 $this->load->model('listingfield_m');
28
29 $data = array();
30 $data['message'] = '';
31 $listing_post_id = NULL;
32 if(isset($_POST['listing_post_id']))
33 $listing_post_id = sanitize_text_field($_POST['listing_post_id']);
34
35 $listing = $this->load->listing_m->get($listing_post_id, TRUE);
36
37 if(!empty($listing)) {
38 $data['popup_content'] = wdk_listing_card($listing, array('infobox' => true), false, '<div class="infobox map-box">%1$s<div>');
39 } else {
40 $data['popup_content'] = __( 'Listing is missing', 'wpdirectorykit' );
41 }
42
43 $data['success'] = true;
44
45 $this->output($data);
46 }
47
48 public function map_infowindow_dash() {
49 $this->load->load_helper('listing');
50 $this->load->model('listing_m');
51 $this->load->model('listingfield_m');
52
53 $data = array();
54 $data['message'] = '';
55 $listing_post_id = NULL;
56 if(isset($_POST['listing_post_id']))
57 $listing_post_id = sanitize_text_field($_POST['listing_post_id']);
58
59 $listing = $this->load->listing_m->get($listing_post_id, TRUE);
60
61 if(!empty($listing)) {
62 $data['popup_content'] = wdk_listing_card($listing, [], false, '<div class="infobox map-box">%1$s<div>', 'result_item_card_dash_edit');
63 } else {
64 $data['popup_content'] = __( 'Listing is missing', 'wpdirectorykit' );
65 }
66
67 $data['success'] = true;
68
69 $this->output($data);
70 }
71
72 public function treefieldid($output="", $atts=array(), $instance=NULL)
73 {
74 $this->load->load_helper('listing');
75 $this->load->model('listing_m');
76 $this->load->model('listingfield_m');
77
78 $data = array();
79 $data['message'] = __('No message returned!', 'wpdirectorykit');
80 $results = array();
81
82 $parameters = array();
83
84 foreach ($_POST as $key => $value) {
85 $parameters[$key] = sanitize_text_field($value);
86 }
87
88 $table_name = $table = $parameters['table'];
89
90 if(empty($parameters['empty_value']))
91 $parameters['empty_value'] = ' - ';
92
93 if(empty($parameters['limit']))
94 $parameters['limit'] = 10;
95
96 if(empty($parameters['attribute_id']))
97 $parameters['attribute_id'] = 'id';
98
99 if(empty($parameters['attribute_value']))
100 $parameters['attribute_value'] = 'address';
101
102 if(empty($parameters['offset']))
103 $parameters['offset'] = 0;
104
105 if(empty($parameters['sql_where']))
106 $parameters['sql_where'] = '';
107
108 if(empty($parameters['hide_fields']))
109 $parameters['hide_fields'] = '';
110
111 $start_id = '';
112 if(isset($parameters['start_id']))
113 $start_id = $parameters['start_id'];
114
115 if($parameters['offset'] == 0) // currently don't have load_more functionality'
116
117 if(!empty($parameters['empty_value']))
118 {
119 $results[0]['key'] = '';
120 $results[0]['value'] = sanitize_text_field($parameters['empty_value']);
121 }
122
123 // it's model
124
125 if($table == 'calendar_listing_m')
126 $table = 'listing_m';
127
128 $table_name = substr($table,0, -2);
129 $attr_id = sanitize_text_field($parameters['attribute_id']);
130 $attr_val = sanitize_text_field($parameters['attribute_value']);
131 $attr_search = sanitize_text_field($parameters['search_term']);
132 $skip_id = intval($parameters['skip_id']);
133 $language_id = intval($parameters['language_id']);
134
135 if(empty($language_id))
136 $language_id = NULL;
137
138 $id_part="";
139 if(is_numeric($attr_search))
140 $id_part = "$attr_id=$attr_search OR ";
141
142 if($table == 'icons_list') {
143 $icons = $this->get_fa_icons();
144
145 $tree_results = array();
146
147 if(empty($attr_search)) {
148 $tree_results = $icons;
149 } else {
150 foreach ($icons as $c){
151 if (stripos($c, $attr_search) !== FALSE){
152 //if $c starts with $input, add to matches list
153 $tree_results[] = $c;
154 } else if (strcmp($attr_search, $c) < 0){
155 //$input comes after $c in alpha order
156 //since $colors is sorted, we know that we won't find any more matches
157 continue;
158 }
159 }
160 }
161 $tree_results = array_slice($tree_results,intval($parameters['offset']), intval($parameters['limit']));
162 // limit
163
164 } else {
165 $this->load->model($table);
166
167 $where = array();
168 if(!empty($attr_search)) {
169 $attr_val_sql = $attr_val;
170 if($attr_val == 'location_title') {
171 $this->load->model($table);
172 $attr_val_sql = $this->$table->_table_name.'.location_title';
173 } elseif($attr_val == 'category_title'){
174 $this->load->model($table);
175 $attr_val_sql = $this->$table->_table_name.'.category_title';
176 }
177
178 $where["($id_part $attr_val_sql LIKE '%$attr_search%')"] = NULL;
179
180 }
181
182 if(!empty($parameters['hide_fields'])) {
183 if($table == 'location_m') {
184 $sql_where = esc_sql($this->$table->_table_name.'.idlocation').' NOT IN ('.esc_sql(sanitize_text_field($parameters['hide_fields'])).')';
185 foreach (explode(',', $parameters['hide_fields']) as $key => $id) {
186 $sql_where .= ' AND CONCAT(",", '.$this->$table->_table_name.'.parent_path, ",") NOT LIKE CONCAT("%,", '.intval($id).', ",%")';
187 }
188
189 $where[$sql_where] = NULL;
190 }
191
192 if($table == 'category_m') {
193 $sql_where = esc_sql($this->$table->_table_name.'.idcategory').' NOT IN ('.esc_sql(sanitize_text_field($parameters['hide_fields'])).')';
194 foreach (explode(',', $parameters['hide_fields']) as $key => $id) {
195 $sql_where .= ' AND CONCAT(",", '.$this->$table->_table_name.'.parent_path, ",") NOT LIKE CONCAT("%,", '.intval($id).', ",%")';
196 }
197 $where[$sql_where] = NULL;
198 }
199 }
200
201 if(!empty($parameters['attr_search']))
202 $where[$parameters['attr_search']] = NULL;
203
204 if(isset($parameters['user_check']) && ($parameters['user_check'] == 'true' || $parameters['user_check'] == '1')) {
205 if($table == 'listing_m') {
206 if($parameters['table'] == 'calendar_listing_m') {
207 global $Winter_MVC_wdk_bookings;
208 $Winter_MVC_wdk_bookings->model('calendar_m');
209 $this->db->join($Winter_MVC_wdk_bookings->calendar_m->_table_name.' ON '.$this->$table->_table_name.'.post_id = '.$Winter_MVC_wdk_bookings->calendar_m->_table_name.'.post_id');
210 }
211
212 $tree_results = $this->$table->get_pagination(intval($parameters['limit']),intval($parameters['offset']), $where, TRUE, get_current_user_id());
213 } else {
214
215 if(!empty($parameters['filter_ids'])){
216 $this->db->where(array( esc_sql($this->$table->_table_name.'.'.$this->$table->_primary_key).' IN ('.esc_sql($parameters['filter_ids']).')' => NULL));
217 }
218
219 $tree_results = $this->$table->get_pagination(intval($parameters['limit']),intval($parameters['offset']), $where );
220 }
221 } else {
222 if($parameters['table'] == 'calendar_listing_m') {
223 global $Winter_MVC_wdk_bookings;
224 $Winter_MVC_wdk_bookings->model('calendar_m');
225 $this->db->join($Winter_MVC_wdk_bookings->calendar_m->_table_name.' ON '.$this->$table->_table_name.'.post_id = '.$Winter_MVC_wdk_bookings->calendar_m->_table_name.'.post_id');
226 }
227
228 if(!empty($parameters['filter_ids'])){
229 $this->db->where(array( esc_sql($this->$table->_table_name.'.'.$this->$table->_primary_key).' IN ('.esc_sql($parameters['filter_ids']).')' => NULL));
230 }
231
232 if($table == 'user_m') {
233 $like = "(meta_value LIKE '%wdk_%' )";
234 $tree_results = $this->$table->get_pagination(intval($parameters['limit']),intval($parameters['offset']), $where, NULL, $like);
235
236 } else {
237 $tree_results = $this->$table->get_pagination(intval($parameters['limit']),intval($parameters['offset']), $where);
238 }
239
240 }
241
242 }
243
244 $ind_order=1;
245 foreach ($tree_results as $key=>$row)
246 {
247 $level_gen='';
248 if(empty($attr_search) && isset($row->level))
249 $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
250
251 $results[$ind_order]['key'] = wmvc_show_data($attr_id, $row);
252 if($table == 'listing_m') {
253 $results[$ind_order]['value'] = $level_gen
254 .'#'.wmvc_show_data($attr_id, $row).', '.wmvc_show_data($attr_val, $row);
255 } elseif($table == 'user_m') {
256 $results[$ind_order]['value'] = $level_gen
257 .'#'.wmvc_show_data($attr_id, $row).', '.wmvc_show_data($attr_val, $row).' ('.wmvc_show_data('user_email', $row).')';
258 } elseif($table == 'icons_list') {
259 $results[$ind_order]['key'] = $row;
260 if(defined('ELEMENTOR_ASSETS_URL')){
261 $results[$ind_order]['value'] = '<i class="'. $row.'"></i>&nbsp;&nbsp;'.$row;
262 } else {
263 $results[$ind_order]['value'] = $row;
264 }
265 } else {
266 $results[$ind_order]['value'] = $level_gen
267 .esc_html__(wmvc_show_data($attr_val, $row), 'wpdirectorykit');
268 }
269 $ind_order++;
270 }
271
272
273 // get current value by ID
274 $row=NULL;
275 if($table == 'icons_list') {
276 if(!empty($parameters['curr_id'])) {
277 $row = '<i class="'. $parameters['curr_id'].'"></i>&nbsp;&nbsp;'.$parameters['curr_id'];
278 }
279 } else {
280 if(!empty($parameters['curr_id']))
281 $row = $this->$table->get(intval($parameters['curr_id']), TRUE);
282 }
283
284 if($table == 'icons_list') {
285 $data['curr_val'] = $row;
286 }elseif(is_object($row))
287 {
288 $level_gen='';
289 if(isset($row->level))
290 $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
291
292 if($table == 'user_m') {
293 $data['curr_val'] = $level_gen
294 .wmvc_show_data(wmvc_show_data('attribute_value', $parameters), $row).' ('.wmvc_show_data('user_email', $row).')'.' #'.wmvc_show_data($attr_id, $row);
295 } else {
296 $data['curr_val'] = $level_gen
297 .esc_html__(wmvc_show_data(wmvc_show_data('attribute_value', $parameters), $row), 'wpdirectorykit');
298 }
299
300
301 //if(!empty($start_id) && $start_id == $parameters['curr_id'] && isset($parameters['sub_empty_value']) && !empty($parameters['sub_empty_value'])) $this->data['curr_val'] = wmvc_show_data('sub_empty_value', $parameters);
302 //elseif(!empty($start_id) && $start_id == $parameters['curr_id']) $this->data['curr_val'] = $parameters['empty_value'];
303 }
304 else
305 {
306 $data['curr_val'] = $parameters['empty_value'];
307 }
308
309 $this->data['success'] = true;
310
311 $data['results'] = $results;
312 //$data['sql'] = $this->db->last_query();
313 $this->output($data);
314 }
315
316 public function treefieldid_checkboxes($output="", $atts=array(), $instance=NULL)
317 {
318 $this->load->load_helper('listing');
319 $this->load->model('listing_m');
320 $this->load->model('listingfield_m');
321
322 $data = array();
323 $data['message'] = __('No message returned!', 'wpdirectorykit');
324 $results = array();
325
326 $parameters = array();
327
328 foreach ($_POST as $key => $value) {
329 $parameters[$key] = sanitize_text_field($value);
330 }
331
332 $table_name = $table = $parameters['table'];
333
334 if(empty($parameters['empty_value']))
335 $parameters['empty_value'] = ' - ';
336
337 if(empty($parameters['limit']))
338 $parameters['limit'] = 10;
339
340 if(empty($parameters['attribute_id']))
341 $parameters['attribute_id'] = 'id';
342
343 if(empty($parameters['attribute_value']))
344 $parameters['attribute_value'] = 'address';
345
346 if(empty($parameters['offset']))
347 $parameters['offset'] = 0;
348
349 if(empty($parameters['sql_where']))
350 $parameters['sql_where'] = '';
351
352 if(empty($parameters['hide_fields']))
353 $parameters['hide_fields'] = '';
354
355 $start_id = '';
356 if(isset($parameters['start_id']))
357 $start_id = $parameters['start_id'];
358
359 if($parameters['offset'] == 0) // currently don't have load_more functionality'
360
361 if(!empty($parameters['empty_value']))
362 {
363 $results[0]['key'] = '';
364 $results[0]['value'] = sanitize_text_field($parameters['empty_value']);
365 }
366
367 // it's model
368
369 if($table == 'calendar_listing_m')
370 $table = 'listing_m';
371
372 $table_name = substr($table,0, -2);
373 $attr_id = sanitize_text_field($parameters['attribute_id']);
374 $attr_val = sanitize_text_field($parameters['attribute_value']);
375 $attr_search = sanitize_text_field($parameters['search_term']);
376 $skip_id = intval($parameters['skip_id']);
377 $language_id = intval($parameters['language_id']);
378
379 if(empty($language_id))
380 $language_id = NULL;
381
382 $id_part="";
383 if(is_numeric($attr_search))
384 $id_part = "$attr_id=$attr_search OR ";
385
386 $this->load->model($table);
387
388 $where = array();
389 if(!empty($attr_search))
390 $where["($id_part $attr_val LIKE '%$attr_search%')"] = NULL;
391
392 if(isset($parameters['selected']) && !empty($parameters['selected'])) {
393
394 if(is_string($parameters['selected']) && strpos($parameters['selected'], ',') !== FALSE){
395 $selected = explode(',', $parameters['selected']);
396 } elseif(is_string($parameters['selected'])){
397 $selected = array($parameters['selected']);
398 }
399
400 $ids = array();
401 foreach($selected as $selected_item) {
402 if(!empty($selected_item) && is_intval($selected_item)) {
403 $ids [] = $selected_item;
404 }
405 }
406
407 /* where in */
408 if(!empty($ids)){
409 $this->db->order_by('FIELD('.$this->$table->_table_name.'.'.$this->$table->_primary_key.', '. implode(',', array_reverse($ids)) . ') DESC');
410 if(intval($parameters['limit']) < count($ids)) {
411 $parameters['limit'] = count($ids);
412 }
413 }
414 }
415
416 if(!empty($parameters['filter_ids'])){
417 $this->db->where(array( esc_sql($this->$table->_table_name.'.'.$this->$table->_primary_key).' IN ('.esc_sql($parameters['filter_ids']).')' => NULL));
418 }
419
420 if(!empty($parameters['hide_fields'])) {
421 if($table == 'location_m') {
422 $sql_where = esc_sql($this->$table->_table_name.'.idlocation').' NOT IN ('.esc_sql(sanitize_text_field($parameters['hide_fields'])).')';
423 foreach (explode(',', $parameters['hide_fields']) as $key => $id) {
424 $sql_where .= ' AND CONCAT(",", '.$this->$table->_table_name.'.parent_path, ",") NOT LIKE CONCAT("%,", '.intval($id).', ",%")';
425 }
426
427 $where[$sql_where] = NULL;
428 }
429
430 if($table == 'category_m') {
431 $sql_where = esc_sql($this->$table->_table_name.'.idcategory').' NOT IN ('.esc_sql(sanitize_text_field($parameters['hide_fields'])).')';
432 foreach (explode(',', $parameters['hide_fields']) as $key => $id) {
433 $sql_where .= ' AND CONCAT(",", '.$this->$table->_table_name.'.parent_path, ",") NOT LIKE CONCAT("%,", '.intval($id).', ",%")';
434 }
435 $where[$sql_where] = NULL;
436 }
437 }
438
439 $tree_results = $this->$table->get_pagination(intval($parameters['limit']),intval($parameters['offset']), $where);
440
441 $ind_order=1;
442 foreach ($tree_results as $key=>$row)
443 {
444 $level_gen='';
445 if(empty($attr_search) && isset($row->level))
446 $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
447
448 $results[$ind_order]['key'] = wmvc_show_data($attr_id, $row);
449 $results[$ind_order]['value'] = $level_gen
450 .esc_html__(wmvc_show_data($attr_val, $row), 'wpdirectorykit');
451 $ind_order++;
452 }
453
454 // get current value by ID
455 $row=NULL;
456 if(!empty($parameters['curr_id']))
457 $row = $this->$table->get(intval($parameters['curr_id']), TRUE);
458
459 if(is_object($row))
460 {
461 $level_gen='';
462 if(isset($row->level))
463 $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
464
465 $data['curr_val'] = $level_gen
466 .esc_html__(wmvc_show_data(wmvc_show_data('attribute_value', $parameters), $row), 'wpdirectorykit');
467
468 }
469 else
470 {
471 $data['curr_val'] = $parameters['empty_value'];
472 }
473
474 $this->data['success'] = true;
475
476 $data['results'] = $results;
477 //$data['sql'] = $this->db->last_query();
478 $this->output($data);
479 }
480
481 private function output($data, $print = TRUE) {
482 if($print) {
483 header('Pragma: no-cache');
484 header('Cache-Control: no-store, no-cache');
485 header('Content-Type: application/json; charset=utf8');
486 //header('Content-Length: '.$length); // special characters causing troubles
487 echo (wp_json_encode($data));
488 exit();
489 } else {
490 return $data;
491 }
492 }
493
494
495 public function select_2_ajax($output="", $atts=array(), $instance=NULL)
496 {
497 $this->load->load_helper('listing');
498 $this->load->model('listing_m');
499 $this->load->model('listingfield_m');
500
501 $data = array();
502 $data['message'] = __('No message returned!', 'wpdirectorykit');
503 $results = array();
504 $data['pagination'] = true;
505 $parameters = array();
506
507 foreach ($_POST as $key => $value) {
508 $parameters[$key] = sanitize_text_field($value);
509 }
510
511 if(empty($parameters['table'])) return false;
512
513 $model_name = $parameters['table'];
514
515 $key_column = '';
516 $print_column = '';
517
518 $search_column = '';
519 if(empty($parameters['columns_search'])) {
520 switch ($model_name) {
521 case 'category_m':
522 $this->load->model($model_name);
523 $search_column = $this->$model_name->_table_name.'.idcategory,'.$this->$model_name->_table_name.'.category_title';
524 break;
525 case 'location_m':
526 $this->load->model($model_name);
527 $search_column = $this->$model_name->_table_name.'.idlocation,'.$this->$model_name->_table_name.'.location_title';
528 break;
529
530 default:
531 # code...
532 break;
533 }
534
535 } else {
536 $search_column = $parameters['columns_search'];
537 }
538
539 if(empty($parameters['key_column'])) {
540 switch ($model_name) {
541 case 'category_m':
542 $key_column = 'idcategory';
543 break;
544 case 'location_m':
545 $key_column = 'idlocation';
546 break;
547
548 default:
549 # code...
550 break;
551 }
552 } else {
553 $key_column = $parameters['key_column'];
554 }
555
556 if(empty($parameters['print_column'])) {
557 switch ($model_name) {
558 case 'category_m':
559 $print_column = 'category_title';
560 break;
561 case 'location_m':
562 $print_column = 'location_title';
563 break;
564
565 default:
566 # code...
567 break;
568 }
569 } else {
570 $print_column = $parameters['print_column'];
571 }
572
573 $limit = 20;
574 if(!empty($parameters['limit'])) {
575 $limit = intval($parameters['limit']);
576 }
577
578 $offset = NULL;
579 if(!empty($parameters['page_result']) && $parameters['page_result'] > 1) {
580 $offset = (intval($parameters['page_result']) - 1) * $limit;
581 }
582
583 $this->load->model($model_name);
584
585 $where = array();
586 if(!empty($_POST['q']['term']) && !empty($search_column)) {
587 $sql_search = '';
588 foreach (explode(',', $search_column) as $column) {
589 if(empty($column)) continue;
590
591 if(!empty($sql_search))
592 $sql_search .= " OR ";
593
594 $sql_search .= " ".esc_sql($column)." LIKE '%".esc_sql($_POST['q']['term'])."%'";
595 }
596
597 $where ["($sql_search)"] = NULL;
598 }
599
600 $db_results_total = $this->$model_name->total($where);
601 $db_results = $this->$model_name->get_pagination($limit,$offset, $where);
602 $data['output'] = $db_results;
603
604 if (!$db_results) {
605 $data['errors'] = '';
606 } else {
607 foreach($db_results as $row) {
608
609 $level_gen='';
610 if(empty($attr_search) && isset($row->level))
611 $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
612
613 $results[] = [
614 'id'=> wmvc_show_data($key_column, $row),
615 'text'=> $level_gen.esc_html__(trim(wmvc_show_data($print_column, $row)), 'wpdirectorykit'),
616 ];
617 }
618
619 }
620
621 $data['success'] = true;
622
623 $data['results'] = $results;
624
625
626 if($db_results_total >= $limit + $offset) {
627 $data['pagination'] =[
628 "more"=> true
629 ];
630 }
631
632 //$data['sql'] = $this->db->last_query();
633 $this->output($data);
634 }
635
636 public function select_2_ajax_user($output="", $atts=array(), $instance=NULL)
637 {
638 $this->load->load_helper('listing');
639
640 $data = array();
641 $data['message'] = __('No message returned!', 'wpdirectorykit');
642 $results = array();
643 $data['pagination'] = true;
644 $parameters = array();
645
646 foreach ($_POST as $key => $value) {
647 $parameters[$key] = sanitize_text_field($value);
648 }
649
650 $model_name = 'user_m';
651
652 $key_column = '';
653 $print_column = '';
654
655 $limit = 20;
656 if(!empty($parameters['limit'])) {
657 $limit = intval($parameters['limit']);
658 }
659
660 $offset = NULL;
661 if(!empty($parameters['page_result']) && $parameters['page_result'] > 1) {
662 $offset = (intval($parameters['page_result']) - 1) * $limit;
663 }
664
665 $this->load->model($model_name);
666 $search_column = 'display_name,user_email,user_login,ID';
667 $where = array();
668 if(!empty($_POST['q']['term']) && !empty($search_column)) {
669 $sql_search = '';
670 foreach (explode(',', $search_column) as $column) {
671 if(empty($column)) continue;
672
673 if(!empty($sql_search))
674 $sql_search .= " OR ";
675
676 $sql_search .= " ".esc_sql($column)." LIKE '%".esc_sql($_POST['q']['term'])."%'";
677 }
678
679 $where ["($sql_search)"] = NULL;
680 }
681
682 $like = "(meta_value LIKE '%wdk_%' )";
683 $db_results_total = $this->$model_name->total($where, NULL, $like);
684
685 $db_results = $this->$model_name->get_pagination($limit,$offset, $where, NULL, $like);
686 $data['output'] = $db_results;
687
688 if (!$db_results) {
689 $data['errors'] = '';
690 } else {
691 foreach($db_results as $row) {
692
693 $level_gen='';
694 //if(empty($attr_search) && isset($row->level))
695 // $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
696
697 $results[] = [
698 'id'=> wmvc_show_data('ID', $row),
699 'text'=> $level_gen.trim(wmvc_show_data('display_name', $row)),
700 ];
701 }
702
703 }
704
705 $data['success'] = true;
706
707 $data['results'] = $results;
708 if($db_results_total >= $limit + $offset) {
709 $data['pagination'] =[
710 "more"=> true
711 ];
712 }
713
714 //$data['sql'] = $this->db->last_query();
715 $this->output($data);
716 }
717
718 public function wdk_tree_dropdowns($output="", $atts=array(), $instance=NULL)
719 {
720 $this->load->load_helper('listing');
721
722 $data = array();
723 $data['message'] = __('No message returned!', 'wpdirectorykit');
724 $results = array();
725 $parameters = array();
726
727 foreach ($_POST as $key => $value) {
728 $parameters[$key] = sanitize_text_field($value);
729 }
730
731 if(empty($parameters['table'])) return false;
732
733 switch ($parameters['table']) {
734 case 'category_id':
735 case 'search_category':
736 $model_name = 'category_m';
737 break;
738 case 'location_id':
739 case 'search_location':
740 $model_name = 'location_m';
741 break;
742 default:
743 # code...
744 break;
745 }
746
747 $key_column = '';
748 $print_column = '';
749 $current_id = '0';
750
751 if(!empty($parameters['id'])) {
752 $current_id = intval($parameters['id']);
753 }
754
755 if(empty($parameters['key_column'])) {
756 switch ($model_name) {
757 case 'category_m':
758 $key_column = 'idcategory';
759 break;
760 case 'location_m':
761 $key_column = 'idlocation';
762 break;
763
764 default:
765 # code...
766 break;
767 }
768 } else {
769 $key_column = $parameters['key_column'];
770 }
771
772 if(empty($parameters['print_column'])) {
773 switch ($model_name) {
774 case 'category_m':
775 $print_column = 'category_title';
776 break;
777 case 'location_m':
778 $print_column = 'location_title';
779 break;
780
781 default:
782 # code...
783 break;
784 }
785 } else {
786 $print_column = $parameters['print_column'];
787 }
788
789 $this->load->model($model_name);
790
791 $db_results = $this->$model_name->get_by(array('parent_id = '.$current_id => NULL));
792 $level = 5;
793
794 if(isset($db_results[0]->level)) {
795 $level = $db_results[0]->level;
796 }
797
798 $data['output'] = $db_results;
799
800 if (!$db_results) {
801 $data['errors'] = '';
802 } else {
803
804 if($model_name == 'category_m') {
805 $placeholder_texts = [
806 0 => esc_html__('Select Categories','wpdirectorykit'),
807 1 => esc_html__('Select Sub Categories','wpdirectorykit'),
808 2 => esc_html__('Select Sub Categories','wpdirectorykit'),
809 3 => esc_html__('Select Sub Categories','wpdirectorykit'),
810 4 => esc_html__('Select Sub Categories','wpdirectorykit'),
811 5 => esc_html__('Select Sub Categories','wpdirectorykit'),
812 ];
813 } else {
814 $placeholder_texts = [
815 0 => esc_html__('Select Country','wpdirectorykit'),
816 1 => esc_html__('Select City','wpdirectorykit'),
817 2 => esc_html__('Select Neighborhood','wpdirectorykit'),
818 3 => esc_html__('Select Sub Area','wpdirectorykit'),
819 4 => esc_html__('Select Sub Area','wpdirectorykit'),
820 5 => esc_html__('Select Sub Area','wpdirectorykit'),
821 ];
822 }
823
824 if(isset($placeholder_texts[$level])) {
825 $placeholder = $placeholder_texts[$level];
826 } else {
827 $placeholder = esc_html__('Select Sub Categories','wpdirectorykit');
828 }
829
830 $results[] = [
831 'id'=> '',
832 'text'=> $placeholder
833 ];
834
835 foreach($db_results as $row) {
836 $results[] = [
837 'id'=> wmvc_show_data($key_column, $row),
838 'text'=> esc_html__(trim(wmvc_show_data($print_column, $row)),'wpdirectorykit'),
839 ];
840 }
841
842 }
843
844 $data['success'] = true;
845 $data['results'] = $results;
846
847 //$data['sql'] = $this->db->last_query();
848 $this->output($data);
849 }
850
851
852 public function search_suggestion($output="", $atts=array(), $instance=NULL)
853 {
854 $this->load->load_helper('listing');
855 $this->load->model('category_m');
856 $this->load->model('location_m');
857 $this->load->model('listing_m');
858
859 $data = array();
860 $categories_limit = 5;
861 $categories_search_column = array('idcategory','category_title');
862 $locations_limit = 5;
863 $locations_search_column = array('idlocation','location_title');
864
865 $results = array();
866 /*
867 [
868 'field_key' => 'string',
869 'value' => 'string',
870 'print' => [
871 'html' => 'string',
872 'parsed_html' => [
873 'left_column' => 'string',
874 'middle_column' => 'string',
875 'right_column' => 'string',
876 ],
877 'parsed_content' => [
878 'icon_class' => 'string',
879 'title' => 'string',
880 'sub_title' => 'string',
881 'right_text' => 'string',
882 ]
883 ]
884 ]
885
886 */
887
888 $data['message'] = __('No message returned!', 'wpdirectorykit');
889
890 $parameters = array();
891 foreach ($_POST as $key => $value) {
892 $parameters[$key] = sanitize_text_field($value);
893 }
894
895 $search_text = '';
896 if(!empty($parameters['search']))
897 $search_text = trim($parameters['search']);
898
899 /* Categories */
900 $where = array();
901 if($search_text) {
902 $sql_search = '';
903 foreach ($categories_search_column as $column) {
904 if(!empty($sql_search))
905 $sql_search .= " OR ";
906
907 $sql_search .= " ".esc_sql($column)." LIKE '%".esc_sql($search_text)."%'";
908 }
909 $where ["($sql_search)"] = NULL;
910 $db_results = $this->category_m->get_pagination($categories_limit, NULL, $where);
911 } else {
912 $db_results = $this->category_m->get_pagination($categories_limit, NULL, array('parent_id = 0' => NULL));
913 }
914
915 if($db_results) foreach($db_results as $row) {
916 $results[] = [
917 'field_key' => 'search_category',
918 'value' => $row->category_title,
919 'print' => [
920 'parsed_content' => [
921 'icon_class' => (!empty(wmvc_show_data('font_icon_code', $row, false))) ? wmvc_show_data('font_icon_code', $row) : 'fa fa-tag',
922 'title' => esc_html__($row->category_title, 'wpdirectorykit'),
923 'sub_title' => '',
924 'right_text' => __('Category', 'wpdirectorykit')
925 ]
926 ]
927 ];
928 }
929
930 /* END Categories */
931
932 /* Locations */
933 $where = array();
934 if($search_text) {
935 $sql_search = '';
936 foreach ($locations_search_column as $column) {
937 if(!empty($sql_search))
938 $sql_search .= " OR ";
939
940 $sql_search .= " ".$this->db->prefix."wdk_locations.".esc_sql($column)." LIKE '%".esc_sql($search_text)."%'";
941 }
942 $where ["($sql_search)"] = NULL;
943
944 $select = $this->db->prefix.'wdk_locations.idlocation, '.$this->db->prefix.'wdk_locations.location_title';
945 $select .= ',location_1.location_title AS location_title_1';
946
947 $this->db->join($this->db->prefix.'wdk_locations AS location_1 ON '.$this->db->prefix.'wdk_locations.parent_id = location_1.idlocation', NULL, 'LEFT');
948 for($i = 2 ; $i <= 2; $i++) {
949 $select .= ',location_'.$i.'.location_title AS location_title_'.$i.'';
950 $this->db->join($this->db->prefix.'wdk_locations AS location_'.$i.' ON location_'.($i-1).'.parent_id = location_'.$i.'.idlocation', NULL, 'LEFT');
951 }
952 $this->db->select($select);
953 $db_results = $this->location_m->get_pagination($locations_limit, NULL, $where);
954 } else {
955 $db_results = $this->location_m->get_pagination($locations_limit, NULL, array('parent_id = 0' => NULL));
956 }
957
958 if($db_results) foreach($db_results as $row) {
959 $subtitle = '';
960
961 for($i = 1 ; $i <= 2; $i++) {
962 if(wmvc_show_data('location_title_'.$i, $row, false)){
963 $subtitle .= wmvc_show_data('location_title_'.$i, $row, false).', ';
964 }
965 }
966
967 $subtitle = substr($subtitle,0,-2);
968
969 $results[] = [
970 'field_key' => 'search_location',
971 'value' => $row->location_title,
972 'print' => [
973 'parsed_content' => [
974 'icon_class' => (!empty(wmvc_show_data('font_icon_code', $row, false))) ? wmvc_show_data('font_icon_code', $row) : 'fa fa-map-marker',
975 'title' => esc_html__($row->location_title, 'wpdirectorykit'),
976 'sub_title' => esc_html__($subtitle, 'wpdirectorykit'),
977 'right_text' => __('Location', 'wpdirectorykit')
978 ]
979 ]
980 ];
981 }
982
983 /* END Locations */
984
985 /* address suggestion if empty other */
986 if(empty($results)) {
987 $this->db->select('address');
988 $db_results = $this->db->where(array("address LIKE '%".esc_sql($search_text)."%'" => NULL));
989 $this->db->from($this->listing_m->_table_name);
990 $this->db->group_by('address');
991 $this->db->limit(5);
992
993 $query = $this->db->get();
994 if ($this->db->num_rows() > 0) {
995 $db_results = $this->db->results();
996 } else {
997 $db_results = array();
998 }
999
1000 if($db_results) foreach($db_results as $row) {
1001 $results[] = [
1002 'field_key' => 'address',
1003 'value' => $row->address,
1004 'print' => [
1005 'parsed_content' => [
1006 'icon_class' => 'fa fa-map-marker',
1007 'title' => $row->address,
1008 'sub_title' => '',
1009 'right_text' => __('Address', 'wpdirectorykit')
1010 ]
1011 ]
1012 ];
1013 }
1014 }
1015
1016 /* listings by title suggestion */
1017 $this->db->where(array("post_title LIKE '%".esc_sql($search_text)."%'" => NULL));
1018 $db_results = $this->listing_m->get_pagination(5, NULL, array('is_activated' => 1,'is_approved'=>1));
1019
1020 if($db_results) foreach($db_results as $row) {
1021 $results[] = [
1022 'field_key' => 'link',
1023 'value' => get_permalink($row),
1024 'print' => [
1025 'parsed_content' => [
1026 'icon_class' => 'fa fa-circle',
1027 'title' => $row->post_title,
1028 'sub_title' => '',
1029 'right_text' => __('Listing', 'wpdirectorykit')
1030 ]
1031 ]
1032 ];
1033 }
1034
1035 if(empty($results)) {
1036
1037 $name_part = str_replace(' ','+',$search_text);
1038
1039 //$url = 'http://photon.komoot.de/api/?q='.$name_part;
1040 $url = 'https://api.teleport.org/api/cities/?limit=1&search='.$name_part;
1041
1042 $request = wp_remote_get( $url );
1043 $response = '';
1044
1045 // request failed
1046 if ( is_wp_error( $request ) ) {
1047 $response = $request;
1048 }
1049 $code = (int) wp_remote_retrieve_response_code( $request );
1050
1051 // make sure the fetch was successful
1052 if (empty($response) && $code == 200 ) {
1053 $response = wp_remote_retrieve_body( $request );
1054
1055 // Decode the json
1056 $resp = json_decode( $response,true );
1057 if(!empty($resp) && isset($resp['_embedded']) && isset($resp["_embedded"]["city:search-results"]) && !empty($resp["_embedded"]["city:search-results"])) {
1058 foreach($resp["_embedded"]["city:search-results"] as $prediction)
1059 {
1060 if(isset($prediction["matching_full_name"])){
1061 $results[] = [
1062 'field_key' => 'search_location',
1063 'value' => $prediction["matching_full_name"],
1064 'print' => [
1065 'parsed_content' => [
1066 'icon_class' => 'fa fa-map-marker',
1067 'title' => $prediction["matching_full_name"],
1068 'sub_title' => '',
1069 'right_text' => ''
1070 ]
1071 ]
1072 ];
1073
1074 }
1075 break;
1076 }
1077 }
1078 }
1079 }
1080
1081 $data['success'] = true;
1082 $data['results'] = $results;
1083
1084 //$data['sql'] = $this->db->last_query();
1085 $this->output($data);
1086 }
1087
1088 public function booking_price_calculate() {
1089 $data = array();
1090 $data['success'] = false;
1091
1092 $this->load->load_helper('listing');
1093 global $Winter_MVC_wdk_bookings;
1094
1095 $Winter_MVC_wdk_bookings->model('reservation_m');
1096 $Winter_MVC_wdk_bookings->model('calendar_m');
1097
1098 $results = array();
1099 $parameters = array();
1100 foreach ($_POST as $key => $value) {
1101 $parameters[sanitize_text_field($key)] = sanitize_text_field($value);
1102 }
1103
1104 $post_id = NULL;
1105 $date_from = NULL;
1106 $date_to = NULL;
1107
1108 if(isset($parameters['post_id'])) {
1109 $post_id = $parameters['post_id'];
1110 }
1111
1112 if(isset($parameters['date_from'])) {
1113 $date_from = wdk_normalize_date_db($parameters['date_from']);
1114 }
1115
1116 if(isset($parameters['date_to'])) {
1117 $date_to = wdk_normalize_date_db($parameters['date_to']);
1118 }
1119
1120 if($post_id && $date_from && $date_to) {
1121 $price = $Winter_MVC_wdk_bookings->reservation_m->calculate_price($post_id, $date_from, $date_to);
1122
1123 $calendar = $Winter_MVC_wdk_bookings->calendar_m->get_by(array('post_id'=>$post_id), TRUE); // date_package_expire package_id
1124 $calendar_fees = array();
1125 if($calendar && !empty($calendar->json_data_fees))
1126 $calendar_fees = json_decode($calendar->json_data_fees );
1127
1128 $results['symbol'] = '';
1129 if(function_exists('wdk_booking_currency_symbol'))
1130 $results['symbol'] = wdk_booking_currency_symbol();
1131
1132 if($price) {
1133 $results['price'] = $price['price'];
1134 $results['total'] = $price['price'];
1135 $results['fees_data'] = array();
1136 $results['fees'] = array();
1137 foreach ($calendar_fees as $key => $fee) {
1138 if(!wmvc_show_data('is_activated', $fee, false,TRUE,TRUE)) continue;
1139 if(is_intval(wmvc_show_data('value', $fee,'',TRUE,TRUE))) {
1140 $field = wdk_generate_slug(strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
1141 if(!wmvc_show_data('is_required', $fee, false,TRUE,TRUE) && isset($parameters['fee_'.$field]) && $parameters['fee_'.$field] == 0) {
1142 } else {
1143 $price = 0;
1144 if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_night') {
1145 $nights = (int)abs(strtotime($date_from) - strtotime($date_to))/(60*60*24);
1146 $price += intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * $nights;
1147 } else if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_person') {
1148 $price += intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * intval(wmvc_show_data('guests', $_POST, 0,TRUE,TRUE));
1149 } else {
1150 $price += intval(wmvc_show_data('value', $fee,'',TRUE,TRUE));
1151 }
1152 $results['fees'][wmvc_show_data('title', $fee,'',TRUE,TRUE)] = $price;
1153 $results['total'] += $price;
1154 }
1155 }
1156
1157 $results['fees_data'][$key] = $fee;
1158 $results['fees_data'][$key]->field_id = wdk_generate_slug(strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
1159 $results['fees_data'][$key]->calculation_base_text = (isset($Winter_MVC_wdk_bookings->calendar_m->calculation_base[wmvc_show_data('calculation_base', $fee,'-',TRUE,TRUE)])) ? $Winter_MVC_wdk_bookings->calendar_m->calculation_base[wmvc_show_data('calculation_base', $fee,'-',TRUE,TRUE)] : 'per stay';
1160 }
1161 $data['success'] = true;
1162 } else {
1163 $data['popup_text_error'] = __('Those dates are not available', 'wpdirectorykit');
1164 }
1165 }
1166
1167 $data['results'] = $results;
1168
1169 //$data['sql'] = $this->db->last_query();
1170 $this->output($data);
1171 }
1172
1173 public function loading_listings() {
1174 $this->load->load_helper('listing');
1175 $this->load->load_helper('get_element_settings');
1176 $this->load->model('listing_m');
1177 $this->load->model('listingfield_m');
1178 $this->load->model('category_m');
1179
1180 $data = array();
1181 $data['message'] = '';
1182 $data['popup_text_success'] = '';
1183 $data['popup_text_error'] = '';
1184 $data['output'] = [
1185 'map_results'=>null,
1186 'listings_result'=>null,
1187 'listings_result_message'=>null,
1188 'pagination_html'=>null,
1189 'listings_count'=>null,
1190 'listings_count_html'=>null,
1191 ];
1192 $data['success'] = false;
1193
1194 $parameters = array();
1195 foreach ($_POST as $key => $value) {
1196 $parameters[$key] = sanitize_text_field($value);
1197 }
1198
1199 $options = [
1200 'offset' => 0,
1201 'limit' => 6,
1202 'current_page' => 1,
1203 'limit_pagination' => 5,
1204 ];
1205
1206 $custom_parameters = array();
1207 $parameters['url'] = strstr($parameters['url'], "#", true);
1208 $parameters['url'] = strstr($parameters['url'], "?");
1209 if(!empty($parameters['url'])) {
1210 $qr_string = trim($parameters['url'],'?');
1211 $string_par = array();
1212 parse_str($qr_string, $string_par);
1213 $custom_parameters += $string_par;
1214 }
1215
1216 $controller = 'listing';
1217 $columns = array('ID', 'location_id', 'category_id', 'post_title', 'post_date', 'search', 'order_by','is_featured', 'address');
1218 $external_columns = array('location_id', 'category_id', 'post_title');
1219
1220 if(isset($parameters['el_results_id'])) {
1221 wdk_prepare_search_query_GET($columns, $controller.'_m', $external_columns, $custom_parameters);
1222 $data['output']['listings_count'] = $this->listing_m->total(array('is_activated' => 1,'is_approved'=>1));
1223 $data['output']['listings_count_html'] = $data['output']['listings_count'].' '.esc_html__('Listings', 'wpdirectorykit');
1224
1225 if(defined( 'WP_DEBUG' ) && WP_DEBUG)
1226 $data['listings_count_sql'] = $this->db->last_query();
1227
1228 $offset = $options['limit']*( $options['current_page']-1);
1229
1230 global $_GET;
1231 $temp_get = $_GET;
1232 $_GET = $custom_parameters;
1233 $data['output']['pagination_html'] = wdk_wp_frontend_paginate($data['output']['listings_count'], $options['limit'], 'wmvc_paged', array(), TRUE,
1234 FALSE, FALSE, $options['limit_pagination']);
1235 $_GET = $temp_get;
1236
1237 wdk_prepare_search_query_GET($columns, $controller.'_m', $external_columns, $custom_parameters);
1238 $listings_result = $this->listing_m->get_pagination($options['limit'], $offset, array('is_activated' => 1,'is_approved'=>1));
1239 if(defined( 'WP_DEBUG' ) && WP_DEBUG)
1240 $data['listings_result_sql'] = $this->db->last_query();
1241
1242 $get_settings_el_results = new WdkGetElementSettings($parameters['el_results_page_id'],$parameters['el_results_id'],$parameters['el_results_type']);
1243 $settings_el_results = $get_settings_el_results->get_settings();
1244 $settings_el_results = $settings_el_results['settings'];
1245
1246 if(wmvc_show_data('layout_type', $settings_el_results, false)) {
1247 $settings_el_results['content_button_icon'] = $get_settings_el_results->generate_icon(wmvc_show_data('layout_type', $settings_el_results, false));
1248 } else {
1249 $settings_el_results['content_button_icon'] = '';
1250 }
1251
1252 if($listings_result) {
1253 foreach ($listings_result as $key => $listing) {
1254 $listing->card_view = '';
1255
1256 if (
1257 wdk_get_option('wdk_experimental_features') && wdk_get_option('wdk_experimental_listing_card_elementor_layout') &&
1258 wmvc_show_data('is_custom_layout_enable', $settings_el_results) == 'yes'
1259 ) {
1260 if (wmvc_show_data('layout_type', $settings_el_results) == 'list' && wmvc_show_data('custom_layout_id_list', $settings_el_results, false)) {
1261 $content = '';
1262 $post_data = get_post(wmvc_show_data('custom_layout_id_list', $settings_el_results, false));
1263
1264 global $wdk_listing_id;
1265 $wdk_listing_id = wmvc_show_data('post_id', $listing);
1266 if ($post_data) {
1267 if ($post_data->post_type == 'page' || $post_data->post_type == 'elementor_library') {
1268 $elementor_instance = \Elementor\Plugin::instance();
1269 $content = $elementor_instance->frontend->get_builder_content_for_display(wmvc_show_data('custom_layout_id_list', $settings_el_results, false));
1270 if (empty($content))
1271 $content = $post_data->post_content;
1272 } else {
1273 $content = $post_data->post_content;
1274 }
1275 }
1276 //$listing->card_view = wp_kses_post($content);
1277 } elseif (wmvc_show_data('layout_type', $settings_el_results) == 'grid' && wmvc_show_data('custom_layout_id_grid', $settings_el_results, false)) {
1278 $content = '';
1279 $post_data = get_post( wmvc_show_data('custom_layout_id_grid', $settings_el_results, false));
1280
1281 global $wdk_listing_id;
1282 $wdk_listing_id = wmvc_show_data('post_id', $listing);
1283 if ($post_data) {
1284 if ($post_data->post_type == 'page' || $post_data->post_type == 'elementor_library') {
1285 $elementor_instance = \Elementor\Plugin::instance();
1286 $content = $elementor_instance->frontend->get_builder_content_for_display(wmvc_show_data('custom_layout_id_grid', $settings_el_results, false));
1287 if (empty($content))
1288 $content = $post_data->post_content;
1289 } else {
1290 $content = $post_data->post_content;
1291 }
1292 }
1293 //$listing->card_view = wp_kses_post($content);
1294 } else {
1295 $listing->card_view = wdk_listing_card($listing, $settings_el_results);
1296 }
1297 } else {
1298 $listing->card_view = wdk_listing_card($listing, $settings_el_results);
1299 }
1300
1301 $data['output']['listings_result'][] = $listing;
1302 }
1303 } else {
1304 $data['output']['listings_result_message'] = '<p class="wdk_alert wdk_alert-danger">'.esc_html__('Results not found', 'wpdirectorykit').'</p>';
1305 }
1306
1307
1308 }
1309
1310 /* map results */
1311 if(isset($parameters['el_map_id'])) {
1312 wdk_prepare_search_query_GET($columns, $controller.'_m', $external_columns, $custom_parameters);
1313 $map_results = $this->listing_m->get_pagination(NULL, NULL, array('is_activated' => 1,'is_approved'=>1));
1314
1315 $get_settings_el_map = new WdkGetElementSettings($parameters['el_map_page_id'],$parameters['el_map_id'],$parameters['el_map_type']);
1316 $settings_el_map = $get_settings_el_map->get_settings();
1317 $settings_el_map = $settings_el_map['settings'];
1318
1319 foreach ($map_results as $key => $listing) {
1320 $listing->inner_marker = '';
1321
1322 $pin_icon = "";
1323 $font_class = "";
1324 $font_icon = (wmvc_show_data('conf_custom_map_pin_icon', $get_settings_el_map)) ? esc_url($get_settings_el_map->generate_icon($settings_el_map['conf_custom_map_pin_icon'])) : '<i class="fa fa-home"></i>';
1325 $pin_icon = (wmvc_show_data('conf_custom_map_pin', $get_settings_el_map)) ? esc_url($settings_el_map['conf_custom_map_pin']['url']) : '';
1326
1327 if(wmvc_show_data('conf_hide_real_location', $category) == 'yes') {
1328 $listing->listing_lat = wdk_move_gps($listing->listing_lat);
1329 $listing->listing_lng = wdk_move_gps($listing->listing_lng);
1330 }
1331
1332 if(!empty(wmvc_show_data('category_id', $listing))){
1333 $category = $this->category_m->get_data(wmvc_show_data('category_id', $listing));
1334 if(wmvc_show_data('marker_image_id', $category, false, TRUE, TRUE)){
1335 $pin_icon = wdk_image_src($category, 'full', NULL,'marker_image_id');
1336 } else if(!empty(wmvc_show_data('font_icon_code', $category))) {
1337 $font_class = wmvc_show_data('font_icon_code', $category);
1338 }
1339 } else {
1340 $font_class = "";
1341 }
1342
1343 if($pin_icon){
1344 $listing->inner_marker = '<div class="wdk_marker-container wdk_marker-container-image"><img src='.$pin_icon.'></img></div>';
1345 }elseif($font_icon && empty($font_class)){
1346 $listing->inner_marker = '<div class="wdk_marker-container category_id_'.esc_js(wmvc_show_data('category_id', $listing)).'"><div class="front wdk_face">'.$font_icon.'</div><div class="wdk_marker-card"><div class="wdk_marker-arrow"></div></div></div>';
1347 }else{
1348 $listing->inner_marker = '<div class="wdk_marker-container category_id_'.esc_js(wmvc_show_data('category_id', $listing)).'"><div class="front wdk_face"><i class="'.esc_html($font_class).'"></i></div><div class="wdk_marker-card"><div class="wdk_marker-arrow"></div></div></div>';
1349 }
1350
1351 $data['output']['map_results'][] = $listing;
1352 }
1353
1354 if(defined( 'WP_DEBUG' ) && WP_DEBUG)
1355 $data['map_results_sql'] = $this->db->last_query();
1356 }
1357
1358 $data['success'] = true;
1359 $this->output($data);
1360
1361 }
1362
1363 private function get_fa_icons() {
1364
1365 /* icons font Awesome 5 */
1366
1367 return array("fab fa-500px","fab fa-accessible-icon","fab fa-accusoft","fas fa-address-book","far fa-address-book","fas fa-address-card","far fa-address-card","fas fa-adjust","fab fa-adn","fab fa-adversal","fab fa-affiliatetheme","fab fa-algolia",
1368 "fas fa-align-center","fas fa-align-justify","fas fa-align-left","fas fa-align-right","fab fa-amazon","fas fa-ambulance","fas fa-american-sign-language-interpreting","fab fa-amilia","fas fa-anchor","fab fa-android","fab fa-angellist",
1369 "fas fa-angle-double-down","fas fa-angle-double-left","fas fa-angle-double-right","fas fa-angle-double-up","fas fa-angle-down","fas fa-angle-left","fas fa-angle-right","fas fa-angle-up","fab fa-angrycreative","fab fa-angular","fab fa-app-store",
1370 "fab fa-app-store-ios","fab fa-apper","fab fa-apple","fab fa-apple-pay","fas fa-archive","fas fa-arrow-alt-circle-down","far fa-arrow-alt-circle-down","fas fa-arrow-alt-circle-left","far fa-arrow-alt-circle-left","fas fa-arrow-alt-circle-right",
1371 "far fa-arrow-alt-circle-right","fas fa-arrow-alt-circle-up","far fa-arrow-alt-circle-up","fas fa-arrow-circle-down","fas fa-arrow-circle-left","fas fa-arrow-circle-right","fas fa-arrow-circle-up","fas fa-arrow-down","fas fa-arrow-left",
1372 "fas fa-arrow-right","fas fa-arrow-up","fas fa-arrows-alt","fas fa-arrows-alt-h","fas fa-arrows-alt-v","fas fa-assistive-listening-systems","fas fa-asterisk","fab fa-asymmetrik","fas fa-at","fab fa-audible","fas fa-audio-description",
1373 "fab fa-autoprefixer","fab fa-avianex","fab fa-aviato","fab fa-aws","fas fa-backward","fas fa-balance-scale","fas fa-ban","fab fa-bandcamp","fas fa-barcode","fas fa-bars","fas fa-bath","fas fa-battery-empty","fas fa-battery-full",
1374 "fas fa-battery-half","fas fa-battery-quarter","fas fa-battery-three-quarters","fas fa-bed","fas fa-beer","fab fa-behance","fab fa-behance-square","fas fa-bell","far fa-bell","fas fa-bell-slash","far fa-bell-slash","fas fa-bicycle","fab fa-bimobject",
1375 "fas fa-binoculars","fas fa-birthday-cake","fab fa-bitbucket","fab fa-bitcoin","fab fa-bity","fab fa-black-tie","fab fa-blackberry","fas fa-blind","fab fa-blogger","fab fa-blogger-b","fab fa-bluetooth","fab fa-bluetooth-b","fas fa-bold","fas fa-bolt",
1376 "fas fa-bomb","fas fa-book","fas fa-bookmark","far fa-bookmark","fas fa-braille","fas fa-briefcase","fab fa-btc","fas fa-bug","fas fa-building","far fa-building","fas fa-bullhorn","fas fa-bullseye","fab fa-buromobelexperte","fas fa-bus","fab fa-buysellads",
1377 "fas fa-calculator","fas fa-calendar","far fa-calendar","fas fa-calendar-alt","far fa-calendar-alt","fas fa-calendar-check","far fa-calendar-check","fas fa-calendar-minus","far fa-calendar-minus","fas fa-calendar-plus","far fa-calendar-plus","fas fa-calendar-times",
1378 "far fa-calendar-times","fas fa-camera","fas fa-camera-retro","fas fa-car","fas fa-caret-down","fas fa-caret-left","fas fa-caret-right","fas fa-caret-square-down","far fa-caret-square-down","fas fa-caret-square-left","far fa-caret-square-left","fas fa-caret-square-right",
1379 "far fa-caret-square-right","fas fa-caret-square-up","far fa-caret-square-up","fas fa-caret-up","fas fa-cart-arrow-down","fas fa-cart-plus","fab fa-cc-amex","fab fa-cc-apple-pay","fab fa-cc-diners-club","fab fa-cc-discover","fab fa-cc-jcb","fab fa-cc-mastercard",
1380 "fab fa-cc-paypal","fab fa-cc-stripe","fab fa-cc-visa","fab fa-centercode","fas fa-certificate","fas fa-chart-area","fas fa-chart-bar","far fa-chart-bar","fas fa-chart-line","fas fa-chart-pie","fas fa-check","fas fa-check-circle","far fa-check-circle",
1381 "fas fa-check-square","far fa-check-square","fas fa-chevron-circle-down","fas fa-chevron-circle-left","fas fa-chevron-circle-right","fas fa-chevron-circle-up","fas fa-chevron-down","fas fa-chevron-left","fas fa-chevron-right","fas fa-chevron-up",
1382 "fas fa-child","fab fa-chrome","fas fa-circle","far fa-circle","fas fa-circle-notch","fas fa-clipboard","far fa-clipboard","fas fa-clock","far fa-clock","fas fa-clone","far fa-clone","fas fa-closed-captioning","far fa-closed-captioning",
1383 "fas fa-cloud","fas fa-cloud-download-alt","fas fa-cloud-upload-alt","fab fa-cloudscale","fab fa-cloudsmith","fab fa-cloudversify","fas fa-code","fas fa-code-branch","fab fa-codepen","fab fa-codiepie","fas fa-coffee","fas fa-cog",
1384 "fas fa-cogs","fas fa-columns","fas fa-comment","far fa-comment","fas fa-comment-alt","far fa-comment-alt","fas fa-comments","far fa-comments","fas fa-compass","far fa-compass","fas fa-compress","fab fa-connectdevelop","fab fa-contao",
1385 "fas fa-copy","far fa-copy","fas fa-copyright","far fa-copyright","fab fa-cpanel","fab fa-creative-commons","fas fa-credit-card","far fa-credit-card","fas fa-crop","fas fa-crosshairs","fab fa-css3","fab fa-css3-alt","fas fa-cube","fas fa-cubes",
1386 "fas fa-cut","fab fa-cuttlefish","fab fa-d-and-d","fab fa-dashcube","fas fa-database","fas fa-deaf","fab fa-delicious","fab fa-deploydog","fab fa-deskpro","fas fa-desktop","fab fa-deviantart","fab fa-digg","fab fa-digital-ocean",
1387 "fab fa-discord","fab fa-discourse","fab fa-dochub","fab fa-docker","fas fa-dollar-sign","fas fa-dot-circle","far fa-dot-circle","fas fa-download","fab fa-draft2digital","fab fa-dribbble","fab fa-dribbble-square","fab fa-dropbox","fab fa-drupal",
1388 "fab fa-dyalog","fab fa-earlybirds","fab fa-edge","fas fa-edit","far fa-edit","fas fa-eject","fas fa-ellipsis-h","fas fa-ellipsis-v","fab fa-ember","fab fa-empire","fas fa-envelope","far fa-envelope","fas fa-envelope-open","far fa-envelope-open",
1389 "fas fa-envelope-square","fab fa-envira","fas fa-eraser","fab fa-erlang","fab fa-etsy","fas fa-euro-sign","fas fa-exchange-alt","fas fa-exclamation","fas fa-exclamation-circle","fas fa-exclamation-triangle","fas fa-expand","fas fa-expand-arrows-alt",
1390 "fab fa-expeditedssl","fas fa-external-link-alt","fas fa-external-link-square-alt","fas fa-eye","fas fa-eye-dropper","fas fa-eye-slash","far fa-eye-slash","fab fa-facebook","fab fa-facebook-f","fab fa-facebook-messenger","fab fa-facebook-square",
1391 "fas fa-fast-backward","fas fa-fast-forward","fas fa-fax","fas fa-female","fas fa-fighter-jet","fas fa-file","far fa-file","fas fa-file-alt","far fa-file-alt","fas fa-file-archive","far fa-file-archive","fas fa-file-audio","far fa-file-audio",
1392 "fas fa-file-code","far fa-file-code","fas fa-file-excel","far fa-file-excel","fas fa-file-image","far fa-file-image","fas fa-file-pdf","far fa-file-pdf","fas fa-file-powerpoint","far fa-file-powerpoint","fas fa-file-video","far fa-file-video",
1393 "fas fa-file-word","far fa-file-word","fas fa-film","fas fa-filter","fas fa-fire","fas fa-fire-extinguisher","fab fa-firefox","fab fa-first-order","fab fa-firstdraft","fas fa-flag","far fa-flag","fas fa-flag-checkered","fas fa-flask","fab fa-flickr",
1394 "fab fa-fly","fas fa-folder","far fa-folder","fas fa-folder-open","far fa-folder-open","fas fa-font","fab fa-font-awesome","fab fa-font-awesome-alt","fab fa-font-awesome-flag","fab fa-fonticons","fab fa-fonticons-fi","fab fa-fort-awesome",
1395 "fab fa-fort-awesome-alt","fab fa-forumbee","fas fa-forward","fab fa-foursquare","fab fa-free-code-camp","fab fa-freebsd","fas fa-frown","far fa-frown","fas fa-futbol","far fa-futbol","fas fa-gamepad","fas fa-gavel","fas fa-gem","far fa-gem",
1396 "fas fa-genderless","fab fa-get-pocket","fab fa-gg","fab fa-gg-circle","fas fa-gift","fab fa-git","fab fa-git-square","fab fa-github","fab fa-github-alt","fab fa-github-square","fab fa-gitkraken","fab fa-gitlab","fab fa-gitter",
1397 "fas fa-glass-martini","fab fa-glide","fab fa-glide-g","fas fa-globe","fab fa-gofore","fab fa-goodreads","fab fa-goodreads-g","fab fa-google","fab fa-google-drive","fab fa-google-play","fab fa-google-plus","fab fa-google-plus-g",
1398 "fab fa-google-plus-square","fab fa-google-wallet","fas fa-graduation-cap","fab fa-gratipay","fab fa-grav","fab fa-gripfire","fab fa-grunt","fab fa-gulp","fas fa-h-square","fab fa-hacker-news","fab fa-hacker-news-square","fas fa-hand-lizard",
1399 "far fa-hand-lizard","fas fa-hand-paper","far fa-hand-paper","fas fa-hand-peace","far fa-hand-peace","fas fa-hand-point-down","far fa-hand-point-down","fas fa-hand-point-left","far fa-hand-point-left","fas fa-hand-point-right","far fa-hand-point-right","fas fa-hand-point-up",
1400 "far fa-hand-point-up","fas fa-hand-pointer","far fa-hand-pointer","fas fa-hand-rock","far fa-hand-rock","fas fa-hand-scissors","far fa-hand-scissors","fas fa-hand-spock","far fa-hand-spock","fas fa-handshake","far fa-handshake","fas fa-hashtag","fas fa-hdd",
1401 "far fa-hdd","fas fa-heading","fas fa-headphones","fas fa-heart","far fa-heart","fas fa-heartbeat","fab fa-hire-a-helper","fas fa-history","fas fa-home","fab fa-hooli","fas fa-hospital","far fa-hospital","fab fa-hotjar","fas fa-hourglass","far fa-hourglass",
1402 "fas fa-hourglass-end","fas fa-hourglass-half","fas fa-hourglass-start","fab fa-houzz","fab fa-html5","fab fa-hubspot","fas fa-i-cursor","fas fa-id-badge","far fa-id-badge","fas fa-id-card","far fa-id-card","fas fa-image","far fa-image","fas fa-images",
1403 "far fa-images","fab fa-imdb","fas fa-inbox","fas fa-indent","fas fa-industry","fas fa-info","fas fa-info-circle","fab fa-instagram","fab fa-internet-explorer","fab fa-ioxhost","fas fa-italic","fab fa-itunes","fab fa-itunes-note","fab fa-jenkins",
1404 "fab fa-joget","fab fa-joomla","fab fa-js","fab fa-js-square","fab fa-jsfiddle","fas fa-key","fas fa-keyboard","far fa-keyboard","fab fa-keycdn","fab fa-kickstarter","fab fa-kickstarter-k","fas fa-language","fas fa-laptop","fab fa-laravel",
1405 "fab fa-lastfm","fab fa-lastfm-square","fas fa-leaf","fab fa-leanpub","fas fa-lemon","far fa-lemon","fab fa-less","fas fa-level-down-alt","fas fa-level-up-alt","fas fa-life-ring","far fa-life-ring","fas fa-lightbulb","far fa-lightbulb",
1406 "fab fa-line","fas fa-link","fab fa-linkedin","fab fa-linkedin-in","fab fa-linode","fab fa-linux","fas fa-lira-sign","fas fa-list","fas fa-list-alt","far fa-list-alt","fas fa-list-ol","fas fa-list-ul","fas fa-location-arrow",
1407 "fas fa-lock","fas fa-lock-open","fas fa-long-arrow-alt-down","fas fa-long-arrow-alt-left","fas fa-long-arrow-alt-right","fas fa-long-arrow-alt-up","fas fa-low-vision","fab fa-lyft","fab fa-magento","fas fa-magic","fas fa-magnet",
1408 "fas fa-male","fas fa-map","far fa-map","fas fa-map-marker","fas fa-map-marker-alt","fas fa-map-pin","fas fa-map-signs","fas fa-mars","fas fa-mars-double","fas fa-mars-stroke","fas fa-mars-stroke-h","fas fa-mars-stroke-v","fab fa-maxcdn",
1409 "fab fa-medapps","fab fa-medium","fab fa-medium-m","fas fa-medkit","fab fa-medrt","fab fa-meetup","fas fa-meh","far fa-meh","fas fa-mercury","fas fa-microchip","fas fa-microphone","fas fa-microphone-slash","fab fa-microsoft","fas fa-minus",
1410 "fas fa-minus-circle","fas fa-minus-square","far fa-minus-square","fab fa-mix","fab fa-mixcloud","fab fa-mizuni","fas fa-mobile","fas fa-mobile-alt","fab fa-modx","fab fa-monero","fas fa-money-bill-alt","far fa-money-bill-alt",
1411 "fas fa-moon","far fa-moon","fas fa-motorcycle","fas fa-mouse-pointer","fas fa-music","fab fa-napster","fas fa-neuter","fas fa-newspaper","far fa-newspaper","fab fa-nintendo-switch","fab fa-node","fab fa-node-js","fab fa-npm","fab fa-ns8",
1412 "fab fa-nutritionix","fas fa-object-group","far fa-object-group","fas fa-object-ungroup","far fa-object-ungroup","fab fa-odnoklassniki","fab fa-odnoklassniki-square","fab fa-opencart","fab fa-openid","fab fa-opera","fab fa-optin-monster","fab fa-osi",
1413 "fas fa-outdent","fab fa-page4","fab fa-pagelines","fas fa-paint-brush","fab fa-palfed","fas fa-paper-plane","far fa-paper-plane","fas fa-paperclip","fas fa-paragraph","fas fa-paste","fab fa-patreon","fas fa-pause","fas fa-pause-circle",
1414 "far fa-pause-circle","fas fa-paw","fab fa-paypal","fas fa-pen-square","fas fa-pencil-alt","fas fa-percent","fab fa-periscope","fab fa-phabricator","fab fa-phoenix-framework","fas fa-phone","fas fa-phone-square","fas fa-phone-volume",
1415 "fab fa-pied-piper","fab fa-pied-piper-alt","fab fa-pied-piper-pp","fab fa-pinterest","fab fa-pinterest-p","fab fa-pinterest-square","fas fa-plane","fas fa-play","fas fa-play-circle","far fa-play-circle","fab fa-playstation","fas fa-plug","fas fa-plus",
1416 "fas fa-plus-circle","fas fa-plus-square","far fa-plus-square","fas fa-podcast","fas fa-pound-sign","fas fa-power-off","fas fa-print","fab fa-product-hunt","fab fa-pushed","fas fa-puzzle-piece","fab fa-python","fab fa-qq","fas fa-qrcode","fas fa-question",
1417 "fas fa-question-circle","far fa-question-circle","fab fa-quora","fas fa-quote-left","fas fa-quote-right","fas fa-random","fab fa-ravelry","fab fa-react","fab fa-rebel","fas fa-recycle","fab fa-red-river","fab fa-reddit","fab fa-reddit-alien",
1418 "fab fa-reddit-square","fas fa-redo","fas fa-redo-alt","fas fa-registered","far fa-registered","fab fa-rendact","fab fa-renren","fas fa-reply","fas fa-reply-all","fab fa-replyd","fab fa-resolving","fas fa-retweet","fas fa-road","fas fa-rocket","fab fa-rocketchat",
1419 "fab fa-rockrms","fas fa-rss","fas fa-rss-square","fas fa-ruble-sign","fas fa-rupee-sign","fab fa-safari","fab fa-sass","fas fa-save","far fa-save","fab fa-schlix","fab fa-scribd","fas fa-search","fas fa-search-minus","fas fa-search-plus",
1420 "fab fa-searchengin","fab fa-sellcast","fab fa-sellsy","fas fa-server","fab fa-servicestack","fas fa-share","fas fa-share-alt","fas fa-share-alt-square","fas fa-share-square","far fa-share-square","fas fa-shekel-sign","fas fa-shield-alt",
1421 "fas fa-ship","fab fa-shirtsinbulk","fas fa-shopping-bag","fas fa-shopping-basket","fas fa-shopping-cart","fas fa-shower","fas fa-sign-in-alt","fas fa-sign-language","fas fa-sign-out-alt","fas fa-signal","fab fa-simplybuilt","fab fa-sistrix",
1422 "fas fa-sitemap","fab fa-skyatlas","fab fa-skype","fab fa-slack","fab fa-slack-hash","fas fa-sliders-h","fab fa-slideshare","fas fa-smile","far fa-smile","fab fa-snapchat","fab fa-snapchat-ghost","fab fa-snapchat-square","fas fa-snowflake",
1423 "far fa-snowflake","fas fa-sort","fas fa-sort-alpha-down","fas fa-sort-alpha-up","fas fa-sort-amount-down","fas fa-sort-amount-up","fas fa-sort-down","fas fa-sort-numeric-down","fas fa-sort-numeric-up","fas fa-sort-up","fab fa-soundcloud",
1424 "fas fa-space-shuttle","fab fa-speakap","fas fa-spinner","fab fa-spotify","fas fa-square","far fa-square","fab fa-stack-exchange","fab fa-stack-overflow","fas fa-star","far fa-star","fas fa-star-half","far fa-star-half","fab fa-staylinked",
1425 "fab fa-steam","fab fa-steam-square","fab fa-steam-symbol","fas fa-step-backward","fas fa-step-forward","fas fa-stethoscope","fab fa-sticker-mule","fas fa-sticky-note","far fa-sticky-note","fas fa-stop","fas fa-stop-circle","far fa-stop-circle",
1426 "fab fa-strava","fas fa-street-view","fas fa-strikethrough","fab fa-stripe","fab fa-stripe-s","fab fa-studiovinari","fab fa-stumbleupon","fab fa-stumbleupon-circle","fas fa-subscript","fas fa-subway","fas fa-suitcase","fas fa-sun","far fa-sun",
1427 "fab fa-superpowers","fas fa-superscript","fab fa-supple","fas fa-sync","fas fa-sync-alt","fas fa-table","fas fa-tablet","fas fa-tablet-alt","fas fa-tachometer-alt","fas fa-tag","fas fa-tags","fas fa-tasks","fas fa-taxi","fab fa-telegram",
1428 "fab fa-telegram-plane","fab fa-tencent-weibo","fas fa-terminal","fas fa-text-height","fas fa-text-width","fas fa-th","fas fa-th-large","fas fa-th-list","fab fa-themeisle","fas fa-thermometer-empty","fas fa-thermometer-full","fas fa-thermometer-half",
1429 "fas fa-thermometer-quarter","fas fa-thermometer-three-quarters","fas fa-thumbs-down","far fa-thumbs-down","fas fa-thumbs-up","far fa-thumbs-up","fas fa-thumbtack","fas fa-ticket-alt","fas fa-times","fas fa-times-circle","far fa-times-circle",
1430 "fas fa-tint","fas fa-toggle-off","fas fa-toggle-on","fas fa-trademark","fas fa-train","fas fa-transgender","fas fa-transgender-alt","fas fa-trash","fas fa-trash-alt","far fa-trash-alt","fas fa-tree","fab fa-trello","fab fa-tripadvisor",
1431 "fas fa-trophy","fas fa-truck","fas fa-tty","fab fa-tumblr","fab fa-tumblr-square","fas fa-tv","fab fa-twitch","fab fa-twitter","fab fa-twitter-square","fab fa-typo3","fab fa-uber","fab fa-uikit","fas fa-umbrella","fas fa-underline",
1432 "fas fa-undo","fas fa-undo-alt","fab fa-uniregistry","fas fa-universal-access","fas fa-university","fas fa-unlink","fas fa-unlock","fas fa-unlock-alt","fab fa-untappd","fas fa-upload","fab fa-usb","fas fa-user","far fa-user",
1433 "fas fa-user-circle","far fa-user-circle","fas fa-user-md","fas fa-user-plus","fas fa-user-secret","fas fa-user-times","fas fa-users","fab fa-ussunnah","fas fa-utensil-spoon","fas fa-utensils","fab fa-vaadin","fas fa-venus",
1434 "fas fa-venus-double","fas fa-venus-mars","fab fa-viacoin","fab fa-viadeo","fab fa-viadeo-square","fab fa-viber","fas fa-video","fab fa-vimeo","fab fa-vimeo-square","fab fa-vimeo-v","fab fa-vine","fab fa-vk","fab fa-vnv",
1435 "fas fa-volume-down","fas fa-volume-off","fas fa-volume-up","fab fa-vuejs","fab fa-weibo","fab fa-weixin","fab fa-whatsapp","fab fa-whatsapp-square","fas fa-wheelchair","fab fa-whmcs","fas fa-wifi","fab fa-wikipedia-w","fas fa-window-close",
1436 "far fa-window-close","fas fa-window-maximize","far fa-window-maximize","fas fa-window-minimize","fas fa-window-restore","far fa-window-restore","fab fa-windows","fas fa-won-sign","fab fa-wordpress","fab fa-wordpress-simple",
1437 "fab fa-wpbeginner","fab fa-wpexplorer","fab fa-wpforms","fas fa-wrench","fab fa-xbox","fab fa-xing","fab fa-xing-square","fab fa-y-combinator","fab fa-yahoo","fab fa-yandex","fab fa-yandex-international","fab fa-yelp","fas fa-yen-sign","fab fa-yoast","fab fa-youtube");
1438
1439
1440 /* icons font Awesome 4 */
1441 return array("fa fa-500px","fa fa-address-book","fa fa-address-book-o","fa fa-address-card","fa fa-address-card-o","fa fa-adjust","fa fa-adn","fa fa-align-center","fa fa-align-justify","fa fa-align-left","fa fa-align-right",
1442 "fa fa-amazon","fa fa-ambulance","fa fa-american-sign-language-interpreting","fa fa-anchor","fa fa-android","fa fa-angellist","fa fa-angle-double-down","fa fa-angle-double-left","fa fa-angle-double-right","fa fa-angle-double-up",
1443 "fa fa-angle-down","fa fa-angle-left","fa fa-angle-right","fa fa-angle-up","fa fa-apple","fa fa-archive","fa fa-area-chart","fa fa-arrow-circle-down","fa fa-arrow-circle-left","fa fa-arrow-circle-o-down","fa fa-arrow-circle-o-left",
1444 "fa fa-arrow-circle-o-right","fa fa-arrow-circle-o-up","fa fa-arrow-circle-right","fa fa-arrow-circle-up","fa fa-arrow-down","fa fa-arrow-left","fa fa-arrow-right","fa fa-arrow-up","fa fa-arrows","fa fa-arrows-alt","fa fa-arrows-h",
1445 "fa fa-arrows-v","fa fa-assistive-listening-systems","fa fa-asterisk","fa fa-at","fa fa-audio-description","fa fa-backward","fa fa-balance-scale","fa fa-ban","fa fa-bandcamp","fa fa-bar-chart","fa fa-barcode","fa fa-bars","fa fa-bath",
1446 "fa fa-battery-empty","fa fa-battery-full","fa fa-battery-half","fa fa-battery-quarter","fa fa-battery-three-quarters","fa fa-bed","fa fa-beer","fa fa-behance","fa fa-behance-square","fa fa-bell","fa fa-bell-o","fa fa-bell-slash",
1447 "fa fa-bell-slash-o","fa fa-bicycle","fa fa-binoculars","fa fa-birthday-cake","fa fa-bitbucket","fa fa-bitbucket-square","fa fa-black-tie","fa fa-blind","fa fa-bluetooth","fa fa-bluetooth-b","fa fa-bold","fa fa-bolt","fa fa-bomb","fa fa-book",
1448 "fa fa-bookmark","fa fa-bookmark-o","fa fa-braille","fa fa-briefcase","fa fa-btc","fa fa-bug","fa fa-building","fa fa-building-o","fa fa-bullhorn","fa fa-bullseye","fa fa-bus","fa fa-buysellads","fa fa-calculator","fa fa-calendar",
1449 "fa fa-calendar-check-o","fa fa-calendar-minus-o","fa fa-calendar-o","fa fa-calendar-plus-o","fa fa-calendar-times-o","fa fa-camera","fa fa-camera-retro","fa fa-car","fa fa-caret-down","fa fa-caret-left","fa fa-caret-right",
1450 "fa fa-caret-square-o-down","fa fa-caret-square-o-left","fa fa-caret-square-o-right","fa fa-caret-square-o-up","fa fa-caret-up","fa fa-cart-arrow-down","fa fa-cart-plus","fa fa-cc","fa fa-cc-amex","fa fa-cc-diners-club",
1451 "fa fa-cc-discover","fa fa-cc-jcb","fa fa-cc-mastercard","fa fa-cc-paypal","fa fa-cc-stripe","fa fa-cc-visa","fa fa-certificate","fa fa-chain-broken","fa fa-check","fa fa-check-circle","fa fa-check-circle-o","fa fa-check-square",
1452 "fa fa-check-square-o","fa fa-chevron-circle-down","fa fa-chevron-circle-left","fa fa-chevron-circle-right","fa fa-chevron-circle-up","fa fa-chevron-down","fa fa-chevron-left","fa fa-chevron-right","fa fa-chevron-up","fa fa-child",
1453 "fa fa-chrome","fa fa-circle","fa fa-circle-o","fa fa-circle-o-notch","fa fa-circle-thin","fa fa-clipboard","fa fa-clock-o","fa fa-clone","fa fa-cloud","fa fa-cloud-download","fa fa-cloud-upload","fa fa-code","fa fa-code-fork","fa fa-codepen",
1454 "fa fa-codiepie","fa fa-coffee","fa fa-cog","fa fa-cogs","fa fa-columns","fa fa-comment","fa fa-comment-o","fa fa-commenting","fa fa-commenting-o","fa fa-comments","fa fa-comments-o","fa fa-compass","fa fa-compress","fa fa-connectdevelop",
1455 "fa fa-contao","fa fa-copyright","fa fa-creative-commons","fa fa-credit-card","fa fa-credit-card-alt","fa fa-crop","fa fa-crosshairs","fa fa-css3","fa fa-cube","fa fa-cubes","fa fa-cutlery","fa fa-dashcube","fa fa-database","fa fa-deaf",
1456 "fa fa-delicious","fa fa-desktop","fa fa-deviantart","fa fa-diamond","fa fa-digg","fa fa-dot-circle-o","fa fa-download","fa fa-dribbble","fa fa-dropbox","fa fa-drupal","fa fa-edge","fa fa-eercast","fa fa-eject","fa fa-ellipsis-h","fa fa-ellipsis-v",
1457 "fa fa-empire","fa fa-envelope","fa fa-envelope-o","fa fa-envelope-open","fa fa-envelope-open-o","fa fa-envelope-square","fa fa-envira","fa fa-eraser","fa fa-etsy","fa fa-eur","fa fa-exchange","fa fa-exclamation","fa fa-exclamation-circle",
1458 "fa fa-exclamation-triangle","fa fa-expand","fa fa-expeditedssl","fa fa-external-link","fa fa-external-link-square","fa fa-eye","fa fa-eye-slash","fa fa-eyedropper","fa fa-facebook","fa fa-facebook-official","fa fa-facebook-square",
1459 "fa fa-fast-backward","fa fa-fast-forward","fa fa-fax","fa fa-female","fa fa-fighter-jet","fa fa-file","fa fa-file-archive-o","fa fa-file-audio-o","fa fa-file-code-o","fa fa-file-excel-o","fa fa-file-image-o","fa fa-file-o","fa fa-file-pdf-o",
1460 "fa fa-file-powerpoint-o","fa fa-file-text","fa fa-file-text-o","fa fa-file-video-o","fa fa-file-word-o","fa fa-files-o","fa fa-film","fa fa-filter","fa fa-fire","fa fa-fire-extinguisher","fa fa-firefox","fa fa-first-order","fa fa-flag",
1461 "fa fa-flag-checkered","fa fa-flag-o","fa fa-flask","fa fa-flickr","fa fa-floppy-o","fa fa-folder","fa fa-folder-o","fa fa-folder-open","fa fa-folder-open-o","fa fa-font","fa fa-font-awesome","fa fa-fonticons","fa fa-fort-awesome","fa fa-forumbee",
1462 "fa fa-forward","fa fa-foursquare","fa fa-free-code-camp","fa fa-frown-o","fa fa-futbol-o","fa fa-gamepad","fa fa-gavel","fa fa-gbp","fa fa-genderless","fa fa-get-pocket","fa fa-gg","fa fa-gg-circle","fa fa-gift","fa fa-git","fa fa-git-square",
1463 "fa fa-github","fa fa-github-alt","fa fa-github-square","fa fa-gitlab","fa fa-glass","fa fa-glide","fa fa-glide-g","fa fa-globe","fa fa-google","fa fa-google-plus","fa fa-google-plus-official","fa fa-google-plus-square","fa fa-google-wallet",
1464 "fa fa-graduation-cap","fa fa-gratipay","fa fa-grav","fa fa-h-square","fa fa-hacker-news","fa fa-hand-lizard-o","fa fa-hand-o-down","fa fa-hand-o-left","fa fa-hand-o-right","fa fa-hand-o-up","fa fa-hand-paper-o","fa fa-hand-peace-o",
1465 "fa fa-hand-pointer-o","fa fa-hand-rock-o","fa fa-hand-scissors-o","fa fa-hand-spock-o","fa fa-handshake-o","fa fa-hashtag","fa fa-hdd-o","fa fa-header","fa fa-headphones","fa fa-heart","fa fa-heart-o","fa fa-heartbeat","fa fa-history",
1466 "fa fa-home","fa fa-hospital-o","fa fa-hourglass","fa fa-hourglass-end","fa fa-hourglass-half","fa fa-hourglass-o","fa fa-hourglass-start","fa fa-houzz","fa fa-html5","fa fa-i-cursor","fa fa-id-badge","fa fa-id-card","fa fa-id-card-o",
1467 "fa fa-ils","fa fa-imdb","fa fa-inbox","fa fa-indent","fa fa-industry","fa fa-info","fa fa-info-circle","fa fa-inr","fa fa-instagram","fa fa-internet-explorer","fa fa-ioxhost","fa fa-italic","fa fa-joomla","fa fa-jpy","fa fa-jsfiddle","fa fa-key",
1468 "fa fa-keyboard-o","fa fa-krw","fa fa-language","fa fa-laptop","fa fa-lastfm","fa fa-lastfm-square","fa fa-leaf","fa fa-leanpub","fa fa-lemon-o","fa fa-level-down","fa fa-level-up","fa fa-life-ring","fa fa-lightbulb-o","fa fa-line-chart",
1469 "fa fa-link","fa fa-linkedin","fa fa-linkedin-square","fa fa-linode","fa fa-linux","fa fa-list","fa fa-list-alt","fa fa-list-ol","fa fa-list-ul","fa fa-location-arrow","fa fa-lock","fa fa-long-arrow-down","fa fa-long-arrow-left",
1470 "fa fa-long-arrow-right","fa fa-long-arrow-up","fa fa-low-vision","fa fa-magic","fa fa-magnet","fa fa-male","fa fa-map","fa fa-map-marker","fa fa-map-o","fa fa-map-pin","fa fa-map-signs","fa fa-mars","fa fa-mars-double","fa fa-mars-stroke",
1471 "fa fa-mars-stroke-h","fa fa-mars-stroke-v","fa fa-maxcdn","fa fa-meanpath","fa fa-medium","fa fa-medkit","fa fa-meetup","fa fa-meh-o","fa fa-mercury","fa fa-microchip","fa fa-microphone","fa fa-microphone-slash","fa fa-minus",
1472 "fa fa-minus-circle","fa fa-minus-square","fa fa-minus-square-o","fa fa-mixcloud","fa fa-mobile","fa fa-modx","fa fa-money","fa fa-moon-o","fa fa-motorcycle","fa fa-mouse-pointer","fa fa-music","fa fa-neuter","fa fa-newspaper-o",
1473 "fa fa-object-group","fa fa-object-ungroup","fa fa-odnoklassniki","fa fa-odnoklassniki-square","fa fa-opencart","fa fa-openid","fa fa-opera","fa fa-optin-monster","fa fa-outdent","fa fa-pagelines","fa fa-paint-brush","fa fa-paper-plane",
1474 "fa fa-paper-plane-o","fa fa-paperclip","fa fa-paragraph","fa fa-pause","fa fa-pause-circle","fa fa-pause-circle-o","fa fa-paw","fa fa-paypal","fa fa-pencil","fa fa-pencil-square","fa fa-pencil-square-o","fa fa-percent","fa fa-phone",
1475 "fa fa-phone-square","fa fa-picture-o","fa fa-pie-chart","fa fa-pied-piper","fa fa-pied-piper-alt","fa fa-pied-piper-pp","fa fa-pinterest","fa fa-pinterest-p","fa fa-pinterest-square","fa fa-plane","fa fa-play","fa fa-play-circle",
1476 "fa fa-play-circle-o","fa fa-plug","fa fa-plus","fa fa-plus-circle","fa fa-plus-square","fa fa-plus-square-o","fa fa-podcast","fa fa-power-off","fa fa-print","fa fa-product-hunt","fa fa-puzzle-piece","fa fa-qq","fa fa-qrcode","fa fa-question",
1477 "fa fa-question-circle","fa fa-question-circle-o","fa fa-quora","fa fa-quote-left","fa fa-quote-right","fa fa-random","fa fa-ravelry","fa fa-rebel","fa fa-recycle","fa fa-reddit","fa fa-reddit-alien","fa fa-reddit-square","fa fa-refresh",
1478 "fa fa-registered","fa fa-renren","fa fa-repeat","fa fa-reply","fa fa-reply-all","fa fa-retweet","fa fa-road","fa fa-rocket","fa fa-rss","fa fa-rss-square","fa fa-rub","fa fa-safari","fa fa-scissors","fa fa-scribd","fa fa-search","fa fa-search-minus",
1479 "fa fa-search-plus","fa fa-sellsy","fa fa-server","fa fa-share","fa fa-share-alt","fa fa-share-alt-square","fa fa-share-square","fa fa-share-square-o","fa fa-shield","fa fa-ship","fa fa-shirtsinbulk","fa fa-shopping-bag","fa fa-shopping-basket",
1480 "fa fa-shopping-cart","fa fa-shower","fa fa-sign-in","fa fa-sign-language","fa fa-sign-out","fa fa-signal","fa fa-simplybuilt","fa fa-sitemap","fa fa-skyatlas","fa fa-skype","fa fa-slack","fa fa-sliders","fa fa-slideshare","fa fa-smile-o",
1481 "fa fa-snapchat","fa fa-snapchat-ghost","fa fa-snapchat-square","fa fa-snowflake-o","fa fa-sort","fa fa-sort-alpha-asc","fa fa-sort-alpha-desc","fa fa-sort-amount-asc","fa fa-sort-amount-desc","fa fa-sort-asc","fa fa-sort-desc",
1482 "fa fa-sort-numeric-asc","fa fa-sort-numeric-desc","fa fa-soundcloud","fa fa-space-shuttle","fa fa-spinner","fa fa-spoon","fa fa-spotify","fa fa-square","fa fa-square-o","fa fa-stack-exchange","fa fa-stack-overflow","fa fa-star",
1483 "fa fa-star-half","fa fa-star-half-o","fa fa-star-o","fa fa-steam","fa fa-steam-square","fa fa-step-backward","fa fa-step-forward","fa fa-stethoscope","fa fa-sticky-note","fa fa-sticky-note-o","fa fa-stop","fa fa-stop-circle",
1484 "fa fa-stop-circle-o","fa fa-street-view","fa fa-strikethrough","fa fa-stumbleupon","fa fa-stumbleupon-circle","fa fa-subscript","fa fa-subway","fa fa-suitcase","fa fa-sun-o","fa fa-superpowers","fa fa-superscript","fa fa-table",
1485 "fa fa-tablet","fa fa-tachometer","fa fa-tag","fa fa-tags","fa fa-tasks","fa fa-taxi","fa fa-telegram","fa fa-television","fa fa-tencent-weibo","fa fa-terminal","fa fa-text-height","fa fa-text-width","fa fa-th","fa fa-th-large","fa fa-th-list",
1486 "fa fa-themeisle","fa fa-thermometer-empty","fa fa-thermometer-full","fa fa-thermometer-half","fa fa-thermometer-quarter","fa fa-thermometer-three-quarters","fa fa-thumb-tack","fa fa-thumbs-down","fa fa-thumbs-o-down",
1487 "fa fa-thumbs-o-up","fa fa-thumbs-up","fa fa-ticket","fa fa-times","fa fa-times-circle","fa fa-times-circle-o","fa fa-tint","fa fa-toggle-off","fa fa-toggle-on","fa fa-trademark","fa fa-train","fa fa-transgender","fa fa-transgender-alt",
1488 "fa fa-trash","fa fa-trash-o","fa fa-tree","fa fa-trello","fa fa-tripadvisor","fa fa-trophy","fa fa-truck","fa fa-try","fa fa-tty","fa fa-tumblr","fa fa-tumblr-square","fa fa-twitch","fa fa-twitter","fa fa-twitter-square","fa fa-umbrella",
1489 "fa fa-underline","fa fa-undo","fa fa-universal-access","fa fa-university","fa fa-unlock","fa fa-unlock-alt","fa fa-upload","fa fa-usb","fa fa-usd","fa fa-user","fa fa-user-circle","fa fa-user-circle-o","fa fa-user-md","fa fa-user-o",
1490 "fa fa-user-plus","fa fa-user-secret","fa fa-user-times","fa fa-users","fa fa-venus","fa fa-venus-double","fa fa-venus-mars","fa fa-viacoin","fa fa-viadeo","fa fa-viadeo-square","fa fa-video-camera","fa fa-vimeo","fa fa-vimeo-square","fa fa-vine",
1491 "fa fa-vk","fa fa-volume-control-phone","fa fa-volume-down","fa fa-volume-off","fa fa-volume-up","fa fa-weibo","fa fa-weixin","fa fa-whatsapp","fa fa-wheelchair","fa fa-wheelchair-alt","fa fa-wifi","fa fa-wikipedia-w","fa fa-window-close",
1492 "fa fa-window-close-o","fa fa-window-maximize","fa fa-window-minimize","fa fa-window-restore","fa fa-windows","fa fa-wordpress","fa fa-wpbeginner","fa fa-wpexplorer","fa fa-wpforms","fa fa-wrench","fa fa-xing","fa fa-xing-square",
1493 "fa fa-y-combinator","fa fa-yahoo","fa fa-yelp","fa fa-yoast","fa fa-youtube","fa fa-youtube-play","fa fa-youtube-square");
1494 }
1495
1496 }
1497
1498