PluginProbe
WP Directory Kit / 1.5.5
WP Directory Kit v1.5.5
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.5.5, at application/controllers/Wdk_frontendajax.php

1,798 lines 84.9 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 $popup_layout = 'result_item_card';
38 if(!empty($_POST['custom_layout_id'])) {
39 $popup_layout = (int) sanitize_text_field($_POST['custom_layout_id']);
40 }
41
42 if(!empty($listing)) {
43 $data['popup_content'] = wdk_listing_card($listing, array('infobox' => true), false, '<div class="infobox map-box">%1$s<div>', $popup_layout);
44 } else {
45 $data['popup_content'] = __( 'Listing is missing', 'wpdirectorykit' );
46 }
47
48 $data['success'] = true;
49
50 $this->output($data);
51 }
52
53 public function map_infowindow_dash() {
54 $this->load->load_helper('listing');
55 $this->load->model('listing_m');
56 $this->load->model('listingfield_m');
57
58 $data = array();
59 $data['message'] = '';
60 $listing_post_id = NULL;
61 if(isset($_POST['listing_post_id']))
62 $listing_post_id = sanitize_text_field($_POST['listing_post_id']);
63
64 $listing = $this->load->listing_m->get($listing_post_id, TRUE);
65
66
67 if(!empty($listing)) {
68 $data['popup_content'] = wdk_listing_card($listing, [], false, '<div class="infobox map-box">%1$s<div>', 'result_item_card_dash_edit');
69 } else {
70 $data['popup_content'] = __( 'Listing is missing', 'wpdirectorykit' );
71 }
72
73 $data['success'] = true;
74
75 $this->output($data);
76 }
77
78 public function treefieldid($output="", $atts=array(), $instance=NULL)
79 {
80
81 check_ajax_referer('wdk_secure_treefieldid', 'wdk_secure');
82
83 $this->load->load_helper('listing');
84 $this->load->model('listing_m');
85 $this->load->model('listingfield_m');
86
87 $data = array();
88 $data['message'] = __('No message returned!', 'wpdirectorykit');
89 $results = array();
90
91 $parameters = array();
92
93 foreach ($_POST as $key => $value) {
94 $parameters[$key] = sanitize_text_field($value);
95 }
96
97 $table_name = $table = $parameters['table'];
98
99 if(empty($parameters['empty_value']))
100 $parameters['empty_value'] = ' - ';
101
102 if(empty($parameters['limit']))
103 $parameters['limit'] = 10;
104
105 if(empty($parameters['attribute_id']))
106 $parameters['attribute_id'] = 'id';
107
108 if(empty($parameters['attribute_value']))
109 $parameters['attribute_value'] = 'address';
110
111 if(empty($parameters['offset']))
112 $parameters['offset'] = 0;
113
114 if(empty($parameters['sql_where']))
115 $parameters['sql_where'] = '';
116
117 if(empty($parameters['hide_fields']))
118 $parameters['hide_fields'] = '';
119
120 $start_id = '';
121 if(isset($parameters['start_id']))
122 $start_id = $parameters['start_id'];
123
124 if($parameters['offset'] == 0) // currently don't have load_more functionality'
125
126 if(!empty($parameters['empty_value']))
127 {
128 $results[0]['key'] = '';
129 $results[0]['value'] = sanitize_text_field($parameters['empty_value']);
130 }
131
132 // it's model
133
134 if($table == 'calendar_listing_m')
135 $table = 'listing_m';
136
137 $post_table = $this->db->prefix.'posts';
138
139 $table_name = substr($table,0, -2);
140
141 $attr_id = preg_replace("/[^0-9a-zA-Z_\-]/", "",sanitize_text_field($parameters['attribute_id']));
142 $attr_val = preg_replace("/[^0-9a-zA-Z_\-]/", "",sanitize_text_field($parameters['attribute_value']));
143
144
145 $attr_search = wdk_esc_sql(sanitize_text_field($parameters['search_term'] ?? ''));
146 $skip_id = intval($parameters['skip_id'] ?? 0);
147 $language_id = intval($parameters['language_id'] ?? 0);
148
149 if(empty($language_id))
150 $language_id = NULL;
151
152 $id_part="";
153 if(is_numeric($attr_search))
154 $id_part = "$attr_id=$attr_search OR ";
155
156 if($table == 'icons_list') {
157 $icons = $this->get_fa_icons();
158
159 $tree_results = array();
160
161 if(empty($attr_search)) {
162 $tree_results = $icons;
163 } else {
164 foreach ($icons as $c){
165 if (stripos($c, $attr_search) !== FALSE){
166 //if $c starts with $input, add to matches list
167 $tree_results[] = $c;
168 } else if (strcmp($attr_search, $c) < 0){
169 //$input comes after $c in alpha order
170 //since $colors is sorted, we know that we won't find any more matches
171 continue;
172 }
173 }
174 }
175 $tree_results = array_slice($tree_results,intval($parameters['offset']), intval($parameters['limit']));
176 // limit
177
178 } else {
179 $this->load->model($table);
180
181 $where = array();
182 if(!empty($attr_search)) {
183 $attr_val_sql = $attr_val;
184 if($attr_val == 'location_title') {
185 $this->load->model($table);
186 $attr_val_sql = $this->$table->_table_name.'.location_title';
187 } elseif($attr_val == 'category_title'){
188 $this->load->model($table);
189 $attr_val_sql = $this->$table->_table_name.'.category_title';
190 }
191
192 /* if category/locations search also in translated field */
193 if($attr_val == 'location_title' || $attr_val == 'category_title') {
194 $where["($id_part $attr_val_sql LIKE '%$attr_search%' OR ".$this->$table->_table_name.".titles_for_search LIKE '%$attr_search%')"] = NULL;
195 } else {
196 $where["($id_part $attr_val_sql LIKE '%$attr_search%')"] = NULL;
197 }
198 }
199
200 if(!empty($parameters['sql_where'] )) {
201 $sql_where = '';
202 if($parameters['sql_where'] == 'only_nochilds') {
203 $sql_where = "((".$this->listing_m->_table_name.".listing_parent_post_id IS NULL OR ".$this->listing_m->_table_name.".listing_parent_post_id = 0) AND (".$this->listing_m->_table_name.".`listing_related_ids` IS NULL OR ".$this->listing_m->_table_name.".`listing_related_ids` = '') )";
204 } else {
205
206 }
207 if(!empty($sql_where))
208 $where[$sql_where] = NULL;
209 }
210
211 if(!empty($parameters['hide_fields'])) {
212 $parameters['hide_fields'] = preg_replace('/[^0-9,]/', '', $parameters['hide_fields']);
213 if($table == 'location_m') {
214 $sql_where = esc_sql($this->$table->_table_name.'.idlocation').' NOT IN ('.esc_sql(sanitize_text_field($parameters['hide_fields'])).')';
215 foreach (explode(',', $parameters['hide_fields']) as $key => $id) {
216 $sql_where .= ' AND CONCAT(",", '.$this->$table->_table_name.'.parent_path, ",") NOT LIKE CONCAT("%,", '.intval($id).', ",%")';
217 }
218
219 $where[$sql_where] = NULL;
220 }
221
222 if($table == 'category_m') {
223 $sql_where = esc_sql($this->$table->_table_name.'.idcategory').' NOT IN ('.esc_sql(sanitize_text_field($parameters['hide_fields'])).')';
224 foreach (explode(',', $parameters['hide_fields']) as $key => $id) {
225 $sql_where .= ' AND CONCAT(",", '.$this->$table->_table_name.'.parent_path, ",") NOT LIKE CONCAT("%,", '.intval($id).', ",%")';
226 }
227 $where[$sql_where] = NULL;
228 }
229 }
230
231 if(isset($parameters['user_check']) && ($parameters['user_check'] == 'true' || $parameters['user_check'] == '1')) {
232 if($table == 'listing_m') {
233 if($parameters['table'] == 'calendar_listing_m') {
234 global $Winter_MVC_wdk_bookings;
235 $Winter_MVC_wdk_bookings->model('calendar_m');
236 $this->db->join($Winter_MVC_wdk_bookings->calendar_m->_table_name.' ON '.$post_table.'.ID = '.$Winter_MVC_wdk_bookings->calendar_m->_table_name.'.post_id');
237 }
238
239 $tree_results = $this->$table->get_pagination(intval($parameters['limit']),intval($parameters['offset']), $where, TRUE, get_current_user_id());
240 } else {
241
242 if(!empty($parameters['filter_ids'])){
243 $this->db->where(array( esc_sql($this->$table->_table_name.'.'.$this->$table->_primary_key).' IN ('.esc_sql(preg_replace('/[^0-9,]/', '', $parameters['filter_ids'])).')' => NULL));
244 }
245
246 $tree_results = $this->$table->get_pagination(intval($parameters['limit']),intval($parameters['offset']), $where );
247 }
248 } else {
249 if($parameters['table'] == 'calendar_listing_m') {
250 global $Winter_MVC_wdk_bookings;
251 $Winter_MVC_wdk_bookings->model('calendar_m');
252 $this->db->join($Winter_MVC_wdk_bookings->calendar_m->_table_name.' ON '.$post_table.'.ID = '.$Winter_MVC_wdk_bookings->calendar_m->_table_name.'.post_id');
253 }
254
255 if(!empty($parameters['filter_ids'])){
256 $this->db->where(array( esc_sql($this->$table->_table_name.'.'.$this->$table->_primary_key).' IN ('.esc_sql(preg_replace('/[^0-9,]/', '', $parameters['filter_ids'])).')' => NULL));
257 }
258
259 if($table == 'user_m') {
260 $like = "(meta_value LIKE '%wdk_%' )";
261 $tree_results = $this->$table->get_pagination(intval($parameters['limit']),intval($parameters['offset']), $where, NULL, $like);
262
263 } else {
264
265 if(method_exists($this->$table, 'get_pagination_simple')) {
266 if($table == 'location_m') {
267 $this->db->select('location_title, idlocation, level');
268 } else if($table == 'category_m') {
269 $this->db->select('category_title, idcategory, level');
270 }
271 $tree_results = $this->$table->get_pagination_simple(intval($parameters['limit']),intval($parameters['offset']), $where);
272 } else {
273 $tree_results = $this->$table->get_pagination(intval($parameters['limit']),intval($parameters['offset']), $where);
274 }
275
276 }
277 }
278
279 }
280
281 $ind_order=1;
282 foreach ($tree_results as $key=>$row)
283 {
284 $level_gen='';
285 if(empty($attr_search) && isset($row->level))
286 $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
287
288 $results[$ind_order]['key'] = wmvc_show_data($attr_id, $row);
289 if($table == 'listing_m') {
290 $results[$ind_order]['value'] = $level_gen
291 .'#'.wmvc_show_data($attr_id, $row).', '.wmvc_show_data($attr_val, $row);
292 } elseif($table == 'user_m') {
293 $results[$ind_order]['value'] = $level_gen
294 .'#'.wmvc_show_data($attr_id, $row).', '.wmvc_show_data('display_name', $row);
295
296 //if(current_user_can('wdk_listings_manage'))
297 // $results[$ind_order]['value'] .= ' ('.wmvc_show_data('user_email', $row).')';
298 } elseif($table == 'icons_list') {
299 $results[$ind_order]['key'] = $row;
300 if(defined('ELEMENTOR_ASSETS_URL')){
301 $results[$ind_order]['value'] = '<i class="'. $row.'"></i>&nbsp;&nbsp;'.$row;
302 } else {
303 $results[$ind_order]['value'] = $row;
304 }
305 } else {
306 $results[$ind_order]['value'] = $level_gen
307 .esc_html__(wmvc_show_data($attr_val, $row), 'wpdirectorykit');
308 }
309 $ind_order++;
310 }
311
312
313 // get current value by ID
314 $row=NULL;
315 if($table == 'icons_list') {
316 if(!empty($parameters['curr_id'])) {
317 $row = '<i class="'. $parameters['curr_id'].'"></i>&nbsp;&nbsp;'.$parameters['curr_id'];
318 }
319 } else {
320 if(!empty($parameters['curr_id']))
321 $row = $this->$table->get(intval($parameters['curr_id']), TRUE);
322 }
323
324 if($table == 'icons_list') {
325 $data['curr_val'] = $row;
326 }elseif(is_object($row))
327 {
328 $level_gen='';
329 if(isset($row->level))
330 $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
331
332 if($table == 'user_m') {
333 $data['curr_val'] = $level_gen
334 .wmvc_show_data('display_name', $row);
335
336 } else {
337 $data['curr_val'] = $level_gen
338 .esc_html__(wmvc_show_data(wmvc_show_data('attribute_value', $parameters), $row), 'wpdirectorykit');
339 }
340
341
342 //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);
343 //elseif(!empty($start_id) && $start_id == $parameters['curr_id']) $this->data['curr_val'] = $parameters['empty_value'];
344 }
345 else
346 {
347 $data['curr_val'] = $parameters['empty_value'];
348 }
349
350 $this->data['success'] = true;
351
352 $data['results'] = $results;
353 $data['sql'] = $this->db->last_query();
354 $this->output($data);
355 }
356
357 public function treefieldid_checkboxes($output="", $atts=array(), $instance=NULL)
358 {
359 check_ajax_referer('wdk_secure_treefieldid_checkboxes', 'wdk_secure');
360
361 $this->load->load_helper('listing');
362 $this->load->model('listing_m');
363 $this->load->model('listingfield_m');
364
365 $data = array();
366 $data['message'] = __('No message returned!', 'wpdirectorykit');
367 $results = array();
368
369 $parameters = array();
370
371 foreach ($_POST as $key => $value) {
372 $parameters[$key] = sanitize_text_field($value);
373 }
374
375 $table_name = $table = $parameters['table'];
376
377 if(empty($parameters['empty_value']))
378 $parameters['empty_value'] = ' - ';
379
380 if(empty($parameters['limit']))
381 $parameters['limit'] = 10;
382
383 if(empty($parameters['attribute_id']))
384 $parameters['attribute_id'] = 'id';
385
386 if(empty($parameters['attribute_value']))
387 $parameters['attribute_value'] = 'address';
388
389 if(empty($parameters['offset']))
390 $parameters['offset'] = 0;
391
392 if(empty($parameters['sql_where']))
393 $parameters['sql_where'] = '';
394
395 if(empty($parameters['hide_fields']))
396 $parameters['hide_fields'] = '';
397
398 $start_id = '';
399 if(isset($parameters['start_id']))
400 $start_id = $parameters['start_id'];
401
402 if($parameters['offset'] == 0) // currently don't have load_more functionality'
403
404 if(!empty($parameters['empty_value']))
405 {
406 $results[0]['key'] = '';
407 $results[0]['value'] = sanitize_text_field($parameters['empty_value']);
408 }
409
410 // it's model
411
412 if($table == 'calendar_listing_m')
413 $table = 'listing_m';
414
415 $table_name = substr($table,0, -2);
416 $attr_id = preg_replace("/[^0-9a-zA-Z_\-]/", "",sanitize_text_field($parameters['attribute_id']));
417 $attr_val = preg_replace("/[^0-9a-zA-Z_\-]/", "",sanitize_text_field($parameters['attribute_value']));
418
419 $attr_search = wdk_esc_sql(sanitize_text_field($parameters['search_term']));
420 $skip_id = intval($parameters['skip_id']);
421 $language_id = intval($parameters['language_id']);
422
423 if(empty($language_id))
424 $language_id = NULL;
425
426 $id_part="";
427 if(is_numeric($attr_search))
428 $id_part = "$attr_id=$attr_search OR ";
429
430 $this->load->model($table);
431
432 $where = array();
433 if(!empty($attr_search))
434 $attr_val_sql = $attr_val;
435 if($attr_val == 'location_title') {
436 $this->load->model($table);
437 $attr_val_sql = $this->$table->_table_name.'.location_title';
438 } elseif($attr_val == 'category_title'){
439 $this->load->model($table);
440 $attr_val_sql = $this->$table->_table_name.'.category_title';
441 }
442
443 /* if category/locations search also in translated field */
444 if($attr_val == 'location_title' || $attr_val == 'category_title') {
445 $where["($id_part $attr_val_sql LIKE '%$attr_search%' OR ".$this->$table->_table_name.".titles_for_search LIKE '%$attr_search%')"] = NULL;
446 } else {
447 $where["($id_part $attr_val_sql LIKE '%$attr_search%')"] = NULL;
448 }
449
450 if(isset($parameters['selected']) && !empty($parameters['selected'])) {
451
452 if(is_string($parameters['selected']) && strpos($parameters['selected'], ',') !== FALSE){
453 $selected = explode(',', $parameters['selected']);
454 } elseif(is_string($parameters['selected'])){
455 $selected = array($parameters['selected']);
456 }
457
458 $ids = array();
459 foreach($selected as $selected_item) {
460 if(!empty($selected_item) && is_intval($selected_item)) {
461 $ids [] = $selected_item;
462 }
463 }
464
465 /* where in */
466 if(!empty($ids)){
467 $this->db->order_by('FIELD('.$this->$table->_table_name.'.'.$this->$table->_primary_key.', '. implode(',', array_reverse($ids)) . ') DESC');
468 if(intval($parameters['limit']) < count($ids)) {
469 $parameters['limit'] = count($ids);
470 }
471 }
472 }
473
474 if(!empty($parameters['filter_ids'])){
475 $this->db->where(array( esc_sql($this->$table->_table_name.'.'.$this->$table->_primary_key).' IN ('.esc_sql(preg_replace('/[^0-9,]/', '', $parameters['filter_ids'])).')' => NULL));
476 }
477
478 if(!empty($parameters['hide_fields'])) {
479 $parameters['hide_fields'] = preg_replace('/[^0-9,]/', '', $parameters['hide_fields']);
480 if($table == 'location_m') {
481 $sql_where = esc_sql($this->$table->_table_name.'.idlocation').' NOT IN ('.esc_sql(sanitize_text_field($parameters['hide_fields'])).')';
482 foreach (explode(',', $parameters['hide_fields']) as $key => $id) {
483 $sql_where .= ' AND CONCAT(",", '.$this->$table->_table_name.'.parent_path, ",") NOT LIKE CONCAT("%,", '.intval($id).', ",%")';
484 }
485
486 $where[$sql_where] = NULL;
487 }
488
489 if($table == 'category_m') {
490 $sql_where = esc_sql($this->$table->_table_name.'.idcategory').' NOT IN ('.esc_sql(sanitize_text_field($parameters['hide_fields'])).')';
491 foreach (explode(',', $parameters['hide_fields']) as $key => $id) {
492 $sql_where .= ' AND CONCAT(",", '.$this->$table->_table_name.'.parent_path, ",") NOT LIKE CONCAT("%,", '.intval($id).', ",%")';
493 }
494 $where[$sql_where] = NULL;
495 }
496 }
497
498 $tree_results = $this->$table->get_pagination(intval($parameters['limit']),intval($parameters['offset']), $where);
499
500 $ind_order=1;
501 foreach ($tree_results as $key=>$row)
502 {
503 $level_gen='';
504 if(empty($attr_search) && isset($row->level))
505 $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
506
507 $results[$ind_order]['key'] = wmvc_show_data($attr_id, $row);
508 $results[$ind_order]['value'] = $level_gen
509 .esc_html__(wmvc_show_data($attr_val, $row), 'wpdirectorykit');
510 $ind_order++;
511 }
512
513 // get current value by ID
514 $row=NULL;
515 if(!empty($parameters['curr_id']))
516 $row = $this->$table->get(intval($parameters['curr_id']), TRUE);
517
518 if(is_object($row))
519 {
520 $level_gen='';
521 if(isset($row->level))
522 $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
523
524 $data['curr_val'] = $level_gen
525 .esc_html__(wmvc_show_data(wmvc_show_data('attribute_value', $parameters), $row), 'wpdirectorykit');
526
527 }
528 else
529 {
530 $data['curr_val'] = $parameters['empty_value'];
531 }
532
533 $this->data['success'] = true;
534
535 $data['results'] = $results;
536 //$data['sql'] = $this->db->last_query();
537 $this->output($data);
538 }
539
540 private function output($data, $print = TRUE) {
541 if($print) {
542 header('Pragma: no-cache');
543 header('Cache-Control: no-store, no-cache');
544 header('Content-Type: application/json; charset=utf8');
545 //header('Content-Length: '.$length); // special characters causing troubles
546 echo (wp_json_encode($data));
547 exit();
548 } else {
549 return $data;
550 }
551 }
552
553
554 public function select_2_ajax($output="", $atts=array(), $instance=NULL)
555 {
556
557 check_ajax_referer('wdk_secure_ajax', 'wdk_secure');
558
559 $this->load->load_helper('listing');
560 $this->load->model('listing_m');
561 $this->load->model('listingfield_m');
562
563 $data = array();
564 $data['message'] = __('No message returned!', 'wpdirectorykit');
565 $results = array();
566 $data['pagination'] = true;
567 $parameters = array();
568
569 foreach ($_POST as $key => $value) {
570 $parameters[$key] = sanitize_text_field($value);
571 }
572
573 if(empty($parameters['table'])) return false;
574
575 $model_name = $parameters['table'];
576
577 // allow only 'listing_m', 'category_m', or 'location_m' for security
578 $allowed_models = array('listing_m', 'category_m', 'location_m');
579 if (!in_array($model_name, $allowed_models)) {
580 return false;
581 }
582
583 $key_column = '';
584 $print_column = '';
585
586 $search_column = '';
587 if(empty($parameters['columns_search'])) {
588 switch ($model_name) {
589 case 'category_m':
590 $this->load->model($model_name);
591 $search_column = $this->$model_name->_table_name.'.idcategory,'.$this->$model_name->_table_name.'.category_title, '.$this->$model_name->_table_name.'.titles_for_search';
592 break;
593 case 'location_m':
594 $this->load->model($model_name);
595 $search_column = $this->$model_name->_table_name.'.idlocation,'.$this->$model_name->_table_name.'.location_title, '.$this->$model_name->_table_name.'.titles_for_search';
596 break;
597
598 default:
599 # code...
600 break;
601 }
602
603 } else {
604 $search_column = esc_sql(preg_replace('/[^a-z0-9_,]/i', '', $parameters['columns_search']));
605 }
606
607 if(empty($parameters['key_column'])) {
608 switch ($model_name) {
609 case 'category_m':
610 $key_column = 'idcategory';
611 break;
612 case 'location_m':
613 $key_column = 'idlocation';
614 break;
615
616 default:
617 # code...
618 break;
619 }
620 } else {
621 $key_column = $parameters['key_column'];
622 }
623
624 if(empty($parameters['print_column'])) {
625 switch ($model_name) {
626 case 'category_m':
627 $print_column = 'category_title';
628 break;
629 case 'location_m':
630 $print_column = 'location_title';
631 break;
632
633 default:
634 # code...
635 break;
636 }
637 } else {
638 $print_column = $parameters['print_column'];
639 }
640
641 $limit = 20;
642 if(!empty($parameters['limit'])) {
643 $limit = intval($parameters['limit']);
644 }
645
646 $offset = NULL;
647 if(!empty($parameters['page_result']) && $parameters['page_result'] > 1) {
648 $offset = (intval($parameters['page_result']) - 1) * $limit;
649 }
650
651 $this->load->model($model_name);
652
653 $where = array();
654 if(!empty($_POST['q']['term']) && !empty($search_column)) {
655 $sql_search = '';
656 foreach (explode(',', $search_column) as $column) {
657 if(empty($column)) continue;
658
659 if(!empty($sql_search))
660 $sql_search .= " OR ";
661
662 $sql_search .= " ".esc_sql($column)." LIKE '%".esc_sql($_POST['q']['term'])."%'";
663 }
664
665 $where ["($sql_search)"] = NULL;
666 }
667
668 $db_results_total = $this->$model_name->total($where);
669 $db_results = $this->$model_name->get_pagination($limit,$offset, $where);
670 $data['output'] = $db_results;
671
672 if (!$db_results) {
673 $data['errors'] = '';
674 } else {
675 foreach($db_results as $row) {
676
677 $level_gen='';
678 if(empty($attr_search) && isset($row->level))
679 $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
680
681 $results[] = [
682 'id'=> wmvc_show_data($key_column, $row),
683 'text'=> $level_gen.esc_html__(trim(wmvc_show_data($print_column, $row)), 'wpdirectorykit'),
684 ];
685 }
686
687 }
688
689 $data['success'] = true;
690
691 $data['results'] = $results;
692
693
694 if($db_results_total >= $limit + $offset) {
695 $data['pagination'] =[
696 "more"=> true
697 ];
698 }
699
700 //$data['sql'] = $this->db->last_query();
701 $this->output($data);
702 }
703
704 public function select_2_ajax_user($output="", $atts=array(), $instance=NULL)
705 {
706 $this->load->load_helper('listing');
707
708 $data = array();
709 $data['message'] = __('No message returned!', 'wpdirectorykit');
710 $results = array();
711 $data['pagination'] = true;
712 $parameters = array();
713
714 foreach ($_POST as $key => $value) {
715 $parameters[$key] = sanitize_text_field($value);
716 }
717
718 $model_name = 'user_m';
719
720 $key_column = '';
721 $print_column = '';
722
723 $limit = 20;
724 if(!empty($parameters['limit'])) {
725 $limit = intval($parameters['limit']);
726 }
727
728 $offset = NULL;
729 if(!empty($parameters['page_result']) && $parameters['page_result'] > 1) {
730 $offset = (intval($parameters['page_result']) - 1) * $limit;
731 }
732
733 $this->load->model($model_name);
734 $search_column = 'display_name,user_email,user_login,ID';
735 $where = array();
736 if(!empty($_POST['q']['term']) && !empty($search_column)) {
737 $sql_search = '';
738 foreach (explode(',', $search_column) as $column) {
739 if(empty($column)) continue;
740
741 if(!empty($sql_search))
742 $sql_search .= " OR ";
743
744 $sql_search .= " ".esc_sql($column)." LIKE '%".esc_sql($_POST['q']['term'])."%'";
745 }
746
747 $where ["($sql_search)"] = NULL;
748 }
749
750 $like = "(meta_value LIKE '%wdk_%' )";
751 $db_results_total = $this->$model_name->total($where, NULL, $like);
752
753 $db_results = $this->$model_name->get_pagination($limit,$offset, $where, NULL, $like);
754 $data['output'] = $db_results;
755
756 if (!$db_results) {
757 $data['errors'] = '';
758 } else {
759 foreach($db_results as $row) {
760
761 $level_gen='';
762 //if(empty($attr_search) && isset($row->level))
763 // $level_gen = str_pad('', $row->level*12, '&nbsp;').'';
764
765 $results[] = [
766 'id'=> wmvc_show_data('ID', $row),
767 'text'=> $level_gen.trim(wmvc_show_data('display_name', $row)),
768 ];
769 }
770
771 }
772
773 $data['success'] = true;
774
775 $data['results'] = $results;
776 if($db_results_total >= $limit + $offset) {
777 $data['pagination'] =[
778 "more"=> true
779 ];
780 }
781
782 //$data['sql'] = $this->db->last_query();
783 $this->output($data);
784 }
785
786 public function wdk_tree_dropdowns($output="", $atts=array(), $instance=NULL)
787 {
788 $this->load->load_helper('listing');
789
790 $data = array();
791 $data['message'] = __('No message returned!', 'wpdirectorykit');
792 $results = array();
793 $parameters = array();
794
795 foreach ($_POST as $key => $value) {
796 $parameters[$key] = sanitize_text_field($value);
797 }
798
799 if(empty($parameters['table'])) return false;
800
801 switch ($parameters['table']) {
802 case 'category_id':
803 case 'search_category':
804 $model_name = 'category_m';
805 break;
806 case 'location_id':
807 case 'search_location':
808 $model_name = 'location_m';
809 break;
810 default:
811 # code...
812 break;
813 }
814
815 $key_column = '';
816 $print_column = '';
817 $current_id = '0';
818
819 if(!empty($parameters['id'])) {
820 $current_id = intval($parameters['id']);
821 }
822
823 if(empty($parameters['key_column'])) {
824 switch ($model_name) {
825 case 'category_m':
826 $key_column = 'idcategory';
827 break;
828 case 'location_m':
829 $key_column = 'idlocation';
830 break;
831
832 default:
833 # code...
834 break;
835 }
836 } else {
837 $key_column = $parameters['key_column'];
838 }
839
840 if(empty($parameters['print_column'])) {
841 switch ($model_name) {
842 case 'category_m':
843 $print_column = 'category_title';
844 break;
845 case 'location_m':
846 $print_column = 'location_title';
847 break;
848
849 default:
850 # code...
851 break;
852 }
853 } else {
854 $print_column = $parameters['print_column'];
855 }
856
857 $this->load->model($model_name);
858
859 $db_results = $this->$model_name->get_by(array('parent_id = '.$current_id => NULL));
860 $level = 5;
861
862 if(isset($db_results[0]->level)) {
863 $level = $db_results[0]->level;
864 }
865
866 $data['output'] = $db_results;
867
868 if (!$db_results) {
869 $data['errors'] = '';
870 } else {
871
872 if($model_name == 'category_m') {
873 $placeholder_texts = [
874 0 => esc_html__('Select Categories','wpdirectorykit'),
875 1 => esc_html__('Select Sub Categories','wpdirectorykit'),
876 2 => esc_html__('Select Sub Categories','wpdirectorykit'),
877 3 => esc_html__('Select Sub Categories','wpdirectorykit'),
878 4 => esc_html__('Select Sub Categories','wpdirectorykit'),
879 5 => esc_html__('Select Sub Categories','wpdirectorykit'),
880 ];
881 } else {
882 $placeholder_texts = [
883 0 => esc_html__('Select Country','wpdirectorykit'),
884 1 => esc_html__('Select City','wpdirectorykit'),
885 2 => esc_html__('Select Neighborhood','wpdirectorykit'),
886 3 => esc_html__('Select Sub Area','wpdirectorykit'),
887 4 => esc_html__('Select Sub Area','wpdirectorykit'),
888 5 => esc_html__('Select Sub Area','wpdirectorykit'),
889 ];
890 }
891
892 if(isset($placeholder_texts[$level])) {
893 $placeholder = $placeholder_texts[$level];
894 } else {
895 $placeholder = esc_html__('Select Sub Categories','wpdirectorykit');
896 }
897
898 $results[] = [
899 'id'=> '',
900 'text'=> $placeholder
901 ];
902
903 foreach($db_results as $row) {
904 $results[] = [
905 'id'=> wmvc_show_data($key_column, $row),
906 'text'=> esc_html__(trim(wmvc_show_data($print_column, $row)),'wpdirectorykit'),
907 ];
908 }
909
910 }
911
912 $data['success'] = true;
913 $data['results'] = $results;
914
915 //$data['sql'] = $this->db->last_query();
916 $this->output($data);
917 }
918
919
920 public function search_suggestion($output="", $atts=array(), $instance=NULL)
921 {
922 $this->load->load_helper('listing');
923 $this->load->model('category_m');
924 $this->load->model('location_m');
925 $this->load->model('listing_m');
926
927 $data = array();
928 $categories_limit = 5;
929 $categories_search_column = array('idcategory','category_title');
930 $locations_limit = 5;
931 $locations_search_column = array('idlocation','location_title');
932
933 $results = array();
934 /*
935 [
936 'field_key' => 'string',
937 'value' => 'string',
938 'print' => [
939 'html' => 'string',
940 'parsed_html' => [
941 'left_column' => 'string',
942 'middle_column' => 'string',
943 'right_column' => 'string',
944 ],
945 'parsed_content' => [
946 'icon_class' => 'string',
947 'title' => 'string',
948 'sub_title' => 'string',
949 'right_text' => 'string',
950 ]
951 ]
952 ]
953
954 */
955
956 $data['message'] = __('No message returned!', 'wpdirectorykit');
957
958 $parameters = array();
959 foreach ($_POST as $key => $value) {
960 $parameters[$key] = sanitize_text_field($value);
961 }
962
963 $search_text = '';
964 if(!empty($parameters['search']))
965 $search_text = trim($parameters['search']);
966
967 /* Categories */
968 $where = array();
969 if($search_text) {
970 $sql_search = '';
971 foreach ($categories_search_column as $column) {
972 if(!empty($sql_search))
973 $sql_search .= " OR ";
974
975 $sql_search .= " ".$this->category_m->_table_name.'.'.esc_sql($column)." LIKE '%".esc_sql($search_text)."%'";
976 }
977 $where ["($sql_search)"] = NULL;
978 $db_results = $this->category_m->get_pagination($categories_limit, NULL, $where);
979 } else {
980 $db_results = $this->category_m->get_pagination($categories_limit, NULL, array('parent_id = 0' => NULL));
981 }
982
983 if($db_results) foreach($db_results as $row) {
984 $results[] = [
985 'field_key' => 'search_category',
986 'value' => $row->category_title,
987 'print' => [
988 'parsed_content' => [
989 'icon_class' => (!empty(wmvc_show_data('font_icon_code', $row, false))) ? wmvc_show_data('font_icon_code', $row) : 'fa fa-tag',
990 'title' => esc_html__($row->category_title, 'wpdirectorykit'),
991 'sub_title' => '',
992 'right_text' => __('Category', 'wpdirectorykit')
993 ]
994 ]
995 ];
996 }
997
998 /* END Categories */
999
1000 /* Locations */
1001 $where = array();
1002 if($search_text) {
1003 $sql_search = '';
1004 foreach ($locations_search_column as $column) {
1005 if(!empty($sql_search))
1006 $sql_search .= " OR ";
1007
1008 $sql_search .= " ".$this->db->prefix."wdk_locations.".esc_sql($column)." LIKE '%".esc_sql($search_text)."%'";
1009 }
1010 $where ["($sql_search)"] = NULL;
1011
1012 $select = $this->db->prefix.'wdk_locations.idlocation, '.$this->db->prefix.'wdk_locations.location_title';
1013 $select .= ',location_1.location_title AS location_title_1';
1014
1015 $this->db->join($this->db->prefix.'wdk_locations AS location_1 ON '.$this->db->prefix.'wdk_locations.parent_id = location_1.idlocation', NULL, 'LEFT');
1016 for($i = 2 ; $i <= 2; $i++) {
1017 $select .= ',location_'.$i.'.location_title AS location_title_'.$i.'';
1018 $this->db->join($this->db->prefix.'wdk_locations AS location_'.$i.' ON location_'.($i-1).'.parent_id = location_'.$i.'.idlocation', NULL, 'LEFT');
1019 }
1020 $this->db->select($select);
1021 $db_results = $this->location_m->get_pagination($locations_limit, NULL, $where);
1022 } else {
1023 $db_results = $this->location_m->get_pagination($locations_limit, NULL, array('parent_id = 0' => NULL));
1024 }
1025
1026 if($db_results) foreach($db_results as $row) {
1027 $subtitle = '';
1028
1029 for($i = 1 ; $i <= 2; $i++) {
1030 if(wmvc_show_data('location_title_'.$i, $row, false)){
1031 $subtitle .= wmvc_show_data('location_title_'.$i, $row, false).', ';
1032 }
1033 }
1034
1035 $subtitle = substr($subtitle,0,-2);
1036
1037 $results[] = [
1038 'field_key' => 'search_location',
1039 'value' => $row->location_title,
1040 'print' => [
1041 'parsed_content' => [
1042 'icon_class' => (!empty(wmvc_show_data('font_icon_code', $row, false))) ? wmvc_show_data('font_icon_code', $row) : 'fa fa-map-marker',
1043 'title' => esc_html__($row->location_title, 'wpdirectorykit'),
1044 'sub_title' => esc_html__($subtitle, 'wpdirectorykit'),
1045 'right_text' => __('Location', 'wpdirectorykit')
1046 ]
1047 ]
1048 ];
1049 }
1050
1051 /* END Locations */
1052
1053 /* address suggestion if empty other */
1054 $limit = apply_filters('wdk/search_suggestion/address_limit', 5);
1055 if(count($results)<10) {
1056 $this->db->select('address');
1057 $db_results = $this->db->where(array("address LIKE '%".esc_sql($search_text)."%'" => NULL));
1058 $this->db->from($this->listing_m->_table_name);
1059 $this->db->group_by('address');
1060 $this->db->limit($limit);
1061
1062 $query = $this->db->get();
1063 if ($this->db->num_rows() > 0) {
1064 $db_results = $this->db->results();
1065 } else {
1066 $db_results = array();
1067 }
1068
1069 if($db_results) foreach($db_results as $row) {
1070 $results[] = [
1071 'field_key' => 'address',
1072 'value' => $row->address,
1073 'print' => [
1074 'parsed_content' => [
1075 'icon_class' => 'fa fa-map-marker',
1076 'title' => $row->address,
1077 'sub_title' => '',
1078 'right_text' => __('Address', 'wpdirectorykit')
1079 ]
1080 ]
1081 ];
1082 }
1083 }
1084
1085 /* listings by title suggestion */
1086 // Example of how to use add_filter for 'wdk/search_suggestion/listings_limit'
1087 // In your theme's functions.php or a custom plugin, you can add:
1088 // add_filter('wdk/search_suggestion/listings_limit', function($limit) { return 10; });
1089
1090 $limit = apply_filters('wdk/search_suggestion/listings_limit', 5);
1091 $this->db->where(array("post_title LIKE '%".esc_sql($search_text)."%'" => NULL));
1092 $db_results = $this->listing_m->get_pagination($limit, NULL, array('is_activated' => 1,'is_approved'=>1));
1093
1094 if($db_results) foreach($db_results as $row) {
1095 $results[] = [
1096 'field_key' => 'link',
1097 'value' => get_permalink($row),
1098 'print' => [
1099 'parsed_content' => [
1100 'icon_class' => 'fa fa-circle',
1101 'title' => $row->post_title,
1102 'sub_title' => '',
1103 'right_text' => __('Listing', 'wpdirectorykit')
1104 ]
1105 ]
1106 ];
1107 }
1108
1109 if(count($results)<10) {
1110
1111 $name_part = str_replace(' ','+',$search_text);
1112
1113 //$url = 'http://photon.komoot.de/api/?q='.$name_part;
1114 $url = 'https://api.teleport.org/api/cities/?limit=1&search='.$name_part;
1115
1116 $request = wp_remote_get( $url );
1117 $response = '';
1118
1119 // request failed
1120 if ( is_wp_error( $request ) ) {
1121 $response = $request;
1122 }
1123 $code = (int) wp_remote_retrieve_response_code( $request );
1124
1125 // make sure the fetch was successful
1126 if (empty($response) && $code == 200 ) {
1127 $response = wp_remote_retrieve_body( $request );
1128
1129 // Decode the json
1130 $resp = json_decode( $response,true );
1131 if(!empty($resp) && isset($resp['_embedded']) && isset($resp["_embedded"]["city:search-results"]) && !empty($resp["_embedded"]["city:search-results"])) {
1132 foreach($resp["_embedded"]["city:search-results"] as $prediction)
1133 {
1134 if(isset($prediction["matching_full_name"])){
1135 $results[] = [
1136 'field_key' => 'search_location',
1137 'value' => $prediction["matching_full_name"],
1138 'print' => [
1139 'parsed_content' => [
1140 'icon_class' => 'fa fa-map-marker',
1141 'title' => $prediction["matching_full_name"],
1142 'sub_title' => '',
1143 'right_text' => ''
1144 ]
1145 ]
1146 ];
1147
1148 }
1149 break;
1150 }
1151 }
1152 }
1153 }
1154
1155 $data['success'] = true;
1156 $data['results'] = $results;
1157
1158 //$data['sql'] = $this->db->last_query();
1159 $this->output($data);
1160 }
1161
1162 public function booking_price_calculate() {
1163 $data = array();
1164 $data['success'] = false;
1165
1166 $this->load->load_helper('listing');
1167 global $Winter_MVC_wdk_bookings;
1168
1169 $Winter_MVC_wdk_bookings->model('reservation_m');
1170 $Winter_MVC_wdk_bookings->model('calendar_m');
1171
1172 $results = array();
1173 $parameters = array();
1174 foreach ($_POST as $key => $value) {
1175 $parameters[sanitize_text_field($key)] = sanitize_text_field($value);
1176 }
1177
1178 $post_id = NULL;
1179 $date_from = NULL;
1180 $date_to = NULL;
1181
1182 if(isset($parameters['post_id'])) {
1183 $post_id = $parameters['post_id'];
1184 }
1185
1186 $calendar = $Winter_MVC_wdk_bookings->calendar_m->get_by(array('post_id'=>$post_id), TRUE);
1187 $time_format = "00:00:00";
1188 if($calendar && $calendar->is_hour_enabled == 1)
1189 $time_format = "H:i:s";
1190
1191
1192 if(isset($parameters['date_from'])) {
1193 $date_from = wdk_normalize_date_db($parameters['date_from'], 'Y-m-d H:i:s', 'Y-m-d '.$time_format);
1194 }
1195
1196 if(isset($parameters['date_to'])) {
1197 $date_to = wdk_normalize_date_db($parameters['date_to'], 'Y-m-d H:i:s', 'Y-m-d '.$time_format);
1198 }
1199
1200
1201 if($post_id && $date_from && $date_to) {
1202 $price = $Winter_MVC_wdk_bookings->reservation_m->calculate_price($post_id, $date_from, $date_to);
1203
1204
1205 $calendar_fees = array();
1206 if($calendar && !empty($calendar->json_data_fees))
1207 $calendar_fees = json_decode($calendar->json_data_fees );
1208
1209 $results['symbol'] = '';
1210 if(function_exists('wdk_booking_currency_symbol'))
1211 $results['symbol'] = wdk_booking_currency_symbol();
1212
1213 if($price) {
1214 $results['price'] = $price['price'];
1215 $results['total'] = $price['price'];
1216 $results['fees_data'] = array();
1217 $results['fees'] = array();
1218 foreach ($calendar_fees as $key => $fee) {
1219 if(!wmvc_show_data('is_activated', $fee, false,TRUE,TRUE)) continue;
1220 if(is_intval(wmvc_show_data('value', $fee,'',TRUE,TRUE))) {
1221 $field = wdk_generate_slug(strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
1222 if(!wmvc_show_data('is_required', $fee, false,TRUE,TRUE) && isset($parameters['fee_'.$field]) && $parameters['fee_'.$field] == 0) {
1223 } else {
1224 $price = 0;
1225 if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_night') {
1226 $nights = (int)abs(strtotime($date_from) - strtotime($date_to))/(60*60*24);
1227 $price += intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * $nights;
1228 } else if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_person') {
1229 $price += intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * intval(wmvc_show_data('guests', $_POST, 0,TRUE,TRUE));
1230 } else {
1231 $price += intval(wmvc_show_data('value', $fee,'',TRUE,TRUE));
1232 }
1233 $results['fees'][wmvc_show_data('title', $fee,'',TRUE,TRUE)] = $price;
1234 $results['total'] += $price;
1235 }
1236 }
1237
1238 $results['fees_data'][$key] = $fee;
1239 $results['fees_data'][$key]->field_id = wdk_generate_slug(strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
1240 $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';
1241 }
1242 $data['success'] = true;
1243 } else {
1244 $data['popup_text_error'] = __('Those dates are not available', 'wpdirectorykit');
1245 }
1246 }
1247
1248 $data['results'] = $results;
1249
1250 //$data['sql'] = $this->db->last_query();
1251 $this->output($data);
1252 }
1253
1254 public function loading_listings() {
1255 $this->load->load_helper('listing');
1256 $this->load->load_helper('get_element_settings');
1257 $this->load->model('listing_m');
1258 $this->load->model('listingfield_m');
1259 $this->load->model('category_m');
1260
1261 $data = array();
1262 $data['message'] = '';
1263 $data['popup_text_success'] = '';
1264 $data['popup_text_error'] = '';
1265 $data['output'] = [
1266 'map_results'=>null,
1267 'listings_result'=>null,
1268 'listings_result_message'=>null,
1269 'pagination_html'=>null,
1270 'listings_count'=>null,
1271 'listings_count_html'=>null,
1272 ];
1273 $data['success'] = false;
1274
1275 $parameters = array();
1276 foreach ($_POST as $key => $value) {
1277 $parameters[$key] = sanitize_text_field($value);
1278 }
1279
1280 $options = [
1281 'offset' => 0,
1282 'limit' => 6,
1283 'current_page' => 1,
1284 'limit_pagination' => 5,
1285 'layout_type' => 'grid',
1286 ];
1287
1288 $custom_parameters = array();
1289 $parameters['url'] = strstr($parameters['url'], "#", true);
1290 $parameters['url'] = strstr($parameters['url'], "?");
1291 if(!empty($parameters['url'])) {
1292 $qr_string = trim($parameters['url'],'?');
1293 $string_par = array();
1294 parse_str($qr_string, $string_par);
1295 $custom_parameters += $string_par;
1296 }
1297
1298 $controller = 'listing';
1299 $columns = array('ID', 'location_id', 'category_id', 'post_title', 'post_date', 'search', 'order_by','is_featured', 'address');
1300 $external_columns = array('location_id', 'category_id', 'post_title');
1301
1302 if(isset($parameters['el_results_id'])) {
1303 wdk_prepare_search_query_GET($columns, $controller.'_m', $external_columns, $custom_parameters);
1304 $data['output']['listings_count'] = $this->listing_m->total(array('is_activated' => 1,'is_approved'=>1));
1305 $data['output']['listings_count_html'] = $data['output']['listings_count'].' '.esc_html__('Listings', 'wpdirectorykit');
1306
1307 if(defined( 'WP_DEBUG' ) && WP_DEBUG)
1308 $data['listings_count_sql'] = $this->db->last_query();
1309
1310 if(isset($custom_parameters['wmvc_paged']))
1311 $options['current_page'] = intval(wmvc_xss_clean($custom_parameters['wmvc_paged']));
1312
1313 $get_settings_el_results = new WdkGetElementSettings($parameters['el_results_page_id'],$parameters['el_results_id'],$parameters['el_results_type']);
1314 $settings_el_results = $get_settings_el_results->get_settings();
1315 $settings_el_results = $settings_el_results['settings'] ?? [];
1316
1317 if(wmvc_show_data('per_page', $settings_el_results, false)) {
1318 $options['limit'] = wmvc_show_data('per_page', $settings_el_results, false);
1319 }
1320
1321 if(wmvc_show_data('layout_type', $settings_el_results, false)) {
1322 $options['layout_type'] = wmvc_show_data('layout_type', $settings_el_results, false);
1323 }
1324
1325 $offset = $options['limit']*( $options['current_page']-1);
1326
1327 global $_GET;
1328 $temp_get = $_GET;
1329 $_GET = $custom_parameters;
1330 do_action('wpdirectorykit/ajax/loading_listings');
1331 $REQUEST_URI = $_SERVER["REQUEST_URI"];
1332
1333 $_SERVER["REQUEST_URI"] = $_SERVER['HTTP_REFERER'];
1334
1335 $data['output']['pagination_html'] = wdk_wp_frontend_paginate($data['output']['listings_count'], $options['limit'], 'wmvc_paged', array(), TRUE,
1336 FALSE, FALSE, $options['limit_pagination']);
1337
1338 $_SERVER["REQUEST_URI"] = $REQUEST_URI;
1339 $_GET = $temp_get;
1340
1341 wdk_prepare_search_query_GET($columns, $controller.'_m', $external_columns, $custom_parameters);
1342 $listings_result = $this->listing_m->get_pagination($options['limit'], $offset, array('is_activated' => 1,'is_approved'=>1));
1343
1344 if(defined( 'WP_DEBUG' ) && WP_DEBUG)
1345 $data['listings_result_sql'] = $this->db->last_query();
1346
1347 if(wmvc_show_data('layout_type', $settings_el_results, false)) {
1348 $settings_el_results['content_button_icon'] = $get_settings_el_results->generate_icon(wmvc_show_data('layout_type', $settings_el_results, false));
1349 } else {
1350 $settings_el_results['content_button_icon'] = '';
1351 }
1352
1353 if($listings_result) {
1354 foreach ($listings_result as $key => $listing) {
1355 $listing->card_view = '';
1356
1357 if (
1358 wdk_get_option('wdk_experimental_features') && wdk_get_option('wdk_experimental_listing_card_elementor_layout') &&
1359 wmvc_show_data('is_custom_layout_enable', $settings_el_results) == 'yes'
1360 ) {
1361 if ($options['layout_type'] == 'list' && wmvc_show_data('custom_layout_id_list', $settings_el_results, false)) {
1362 $content = '';
1363 $post_data = get_post(wmvc_show_data('custom_layout_id_list', $settings_el_results, false));
1364
1365 global $wdk_listing_id;
1366 $wdk_listing_id = wmvc_show_data('post_id', $listing);
1367 if ($post_data) {
1368 if ($post_data->post_type == 'page' || $post_data->post_type == 'elementor_library') {
1369 $elementor_instance = \Elementor\Plugin::instance();
1370 $content = $elementor_instance->frontend->get_builder_content_for_display(wmvc_show_data('custom_layout_id_list', $settings_el_results, false));
1371 if (empty($content))
1372 $content = $post_data->post_content;
1373 } else {
1374 $content = $post_data->post_content;
1375 }
1376 }
1377 $listing->card_view = ($content);
1378 } elseif ($options['layout_type'] == 'grid' && wmvc_show_data('custom_layout_id_grid', $settings_el_results, false)) {
1379 $content = '';
1380 $post_data = get_post( wmvc_show_data('custom_layout_id_grid', $settings_el_results, false));
1381
1382 global $wdk_listing_id;
1383 $wdk_listing_id = wmvc_show_data('post_id', $listing);
1384 if ($post_data) {
1385 if ($post_data->post_type == 'page' || $post_data->post_type == 'elementor_library') {
1386 $elementor_instance = \Elementor\Plugin::instance();
1387 $content = $elementor_instance->frontend->get_builder_content_for_display(wmvc_show_data('custom_layout_id_grid', $settings_el_results, false));
1388 if (empty($content))
1389 $content = $post_data->post_content;
1390 } else {
1391 $content = $post_data->post_content;
1392 }
1393 }
1394 $listing->card_view = ($content);
1395 } else {
1396 $listing->card_view = wdk_listing_card($listing, $settings_el_results);
1397 }
1398 } else {
1399 $listing->card_view = wdk_listing_card($listing, $settings_el_results);
1400 }
1401
1402 $data['output']['listings_result'][] = $listing;
1403 }
1404 } else {
1405 $data['output']['listings_result_message'] = '<p class="wdk_alert wdk_alert-danger">'.esc_html__('Results not found', 'wpdirectorykit').'</p>';
1406 }
1407
1408 }
1409
1410 /* map results */
1411 if(isset($parameters['el_map_id'])) {
1412 wdk_prepare_search_query_GET($columns, $controller.'_m', $external_columns, $custom_parameters);
1413 $map_results = $this->listing_m->get_pagination(NULL, NULL, array('is_activated' => 1,'is_approved'=>1));
1414 if(defined( 'WP_DEBUG' ) && WP_DEBUG)
1415 $data['map_results_sql'] = $this->db->last_query();
1416
1417 $get_settings_el_map = new WdkGetElementSettings($parameters['el_map_page_id'],$parameters['el_map_id'],$parameters['el_map_type']);
1418 $settings_el_map = $get_settings_el_map->get_settings();
1419 $settings_el_map = $settings_el_map['settings'];
1420
1421 foreach ($map_results as $key => $listing) {
1422 $listing->inner_marker = '';
1423
1424 $pin_icon = "";
1425 $font_class = "";
1426 $font_icon = (wmvc_show_data('conf_custom_map_pin_icon', $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>';
1427 $pin_icon = (isset( $settings_el_map['conf_custom_map_pin'])) ? esc_url($settings_el_map['conf_custom_map_pin']['url']) : '';
1428
1429 if(wmvc_show_data('conf_hide_real_location', $category) == 'yes') {
1430 $listing->listing_lat = wdk_move_gps($listing->listing_lat);
1431 $listing->listing_lng = wdk_move_gps($listing->listing_lng);
1432 }
1433
1434 if(!empty(wmvc_show_data('category_id', $listing))){
1435 $category = $this->category_m->get_data(wmvc_show_data('category_id', $listing));
1436 if(wmvc_show_data('marker_image_id', $category, false, TRUE, TRUE)){
1437 $pin_icon = wdk_image_src($category, 'full', NULL,'marker_image_id');
1438 } else if(!empty(wmvc_show_data('font_icon_code', $category))) {
1439 $font_class = wmvc_show_data('font_icon_code', $category);
1440 }
1441 } else {
1442 $font_class = "";
1443 }
1444
1445 if($pin_icon){
1446 $listing->inner_marker = '<div class="wdk_marker-container wdk_marker-container-image"><img src='.$pin_icon.'></img></div>';
1447 }elseif($font_icon && empty($font_class)){
1448 $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>';
1449 }else{
1450 $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>';
1451 }
1452
1453 $data['output']['map_results'][] = $listing;
1454 }
1455 }
1456
1457 $data['success'] = true;
1458 $this->output($data);
1459
1460 }
1461
1462
1463 public function suggestion_locations (&$output=NULL, $atts=array())
1464 {
1465
1466 $this->load->load_helper('listing');
1467 $this->load->model('category_m');
1468 $this->load->model('location_m');
1469 $this->load->model('listing_m');
1470
1471 $data = array();
1472 $data['message'] = __('No message returned!', 'wpdirectorykit');
1473
1474 $data['results'] = array();
1475 $parameters = array();
1476 foreach ($_POST as $key => $value) {
1477 $parameters[$key] = sanitize_text_field($value);
1478 }
1479
1480 $search_text = '';
1481 if(!empty($parameters['search']))
1482 $search_text = trim($parameters['search']);
1483
1484 if(!empty($search_text)) {
1485 $this->db->select("location_title as value");
1486 $this->db->from($this->location_m->_table_name);
1487 $this->db->where(array("location_title LIKE '%".esc_sql($search_text)."%'" => NULL));
1488
1489 $query = $this->db->get();
1490 if($this->db->num_rows() > 0) foreach($this->db->results() as $row) {
1491 $data['results'][] = $row->value;
1492 }
1493 }
1494
1495 $data['success'] = true;
1496 $this->output($data);
1497 }
1498
1499 public function suggestion_categories (&$output=NULL, $atts=array())
1500 {
1501
1502 $this->load->load_helper('listing');
1503 $this->load->model('category_m');
1504
1505 $data = array();
1506 $data['message'] = __('No message returned!', 'wpdirectorykit');
1507
1508 $data['results'] = array();
1509 $parameters = array();
1510 foreach ($_POST as $key => $value) {
1511 $parameters[$key] = sanitize_text_field($value);
1512 }
1513
1514 $search_text = '';
1515 if(!empty($parameters['search']))
1516 $search_text = trim($parameters['search']);
1517
1518 if(!empty($search_text)) {
1519 $this->db->select("category_title as value");
1520 $this->db->from($this->category_m->_table_name);
1521 $this->db->where(array("category_title LIKE '%".esc_sql($search_text)."%'" => NULL));
1522
1523 $query = $this->db->get();
1524 if($this->db->num_rows() > 0) foreach($this->db->results() as $row) {
1525 $data['results'][] = $row->value;
1526 }
1527 }
1528
1529 $data['success'] = true;
1530 $this->output($data);
1531 }
1532
1533 public function suggestion_db_field (&$output=NULL, $atts=array())
1534 {
1535 $this->load->load_helper('listing');
1536 $this->load->model('category_m');
1537 $this->load->model('location_m');
1538 $this->load->model('listing_m');
1539
1540 $data = array();
1541 $data['message'] = __('No message returned!', 'wpdirectorykit');
1542
1543 $data['results'] = array();
1544 $parameters = array();
1545 foreach ($_POST as $key => $value) {
1546 $parameters[$key] = sanitize_text_field($value);
1547 }
1548
1549 $search_text = '';
1550 if(!empty($parameters['search']))
1551 $search_text = trim($parameters['search']);
1552
1553 $search_field_id = '';
1554 if(!empty($parameters['field_id']))
1555 $search_field_id = (int) trim($parameters['field_id']);
1556
1557 if(!empty($search_field_id) && wdk_field_option($search_field_id, 'field_type', false)) {
1558
1559 /* listings by title suggestion */
1560 $this->db->select("DISTINCT field_".$search_field_id."_".wdk_field_option($search_field_id, 'field_type', false)." as value");
1561 $this->db->from($this->db->prefix.'wdk_listings_fields');
1562 $this->db->where(array("field_".$search_field_id."_".wdk_field_option($search_field_id, 'field_type', false)." LIKE '%".esc_sql($search_text)."%'" => NULL));
1563
1564 $query = $this->db->get();
1565 if($this->db->num_rows() > 0) foreach($this->db->results() as $row) {
1566 $data['results'][] = $row->value;
1567 }
1568
1569 $field_values = wdk_field_option($search_field_id, 'values', '');
1570 $field_values = explode(',', $field_values);
1571 if(!empty($field_values)) {
1572 foreach($field_values as $value) {
1573 if(empty($value)) continue;
1574 $data['results'][] = $value;
1575 }
1576 }
1577
1578 }
1579
1580 $data['success'] = true;
1581 $this->output($data);
1582
1583 }
1584
1585 function select_2_ajax_field_db_suggestion($output="", $atts=array(), $instance=NULL)
1586 {
1587 global $Winter_MVC_WDK;
1588 $Winter_MVC_WDK->load_helper('listing');
1589 $Winter_MVC_WDK->model('location_m');
1590
1591 $data = array();
1592 $data['message'] = __('No message returned!', 'wpdirectorykit');
1593 $data['pagination'] = true;
1594 $results = array();
1595
1596 $parameters = array();
1597 foreach ($_POST as $key => $value) {
1598 $parameters[$key] = sanitize_text_field($value);
1599 }
1600
1601 $limit = 10;
1602 if(!empty($parameters['limit'])) {
1603 $limit = intval($parameters['limit']);
1604 }
1605
1606 $offset = 0;
1607 if(!empty($parameters['page_result']) && $parameters['page_result'] > 1) {
1608 $offset = (intval($parameters['page_result']) - 1) * $limit;
1609 }
1610
1611 $search_text = '';
1612 if(!empty($_POST['q']['term']))
1613 $search_text = sanitize_text_field($_POST['q']['term']);
1614
1615 $search_field_id = '';
1616 if(!empty($parameters['field_id']))
1617 $search_field_id = (int) trim($parameters['field_id']);
1618
1619 if(!empty($search_field_id) && wdk_field_option($search_field_id, 'field_type', false)) {
1620
1621 /* listings by title suggestion */
1622 $Winter_MVC_WDK->db->select("DISTINCT field_".$search_field_id."_".wdk_field_option($search_field_id, 'field_type', false)." as value");
1623 $Winter_MVC_WDK->db->from($Winter_MVC_WDK->db->prefix.'wdk_listings_fields');
1624 $Winter_MVC_WDK->db->where(array("field_".$search_field_id."_".wdk_field_option($search_field_id, 'field_type', false)." LIKE '%".esc_sql($search_text)."%'" => NULL));
1625
1626 $query = $Winter_MVC_WDK->db->get();
1627 if($Winter_MVC_WDK->db->num_rows() > 0) foreach($Winter_MVC_WDK->db->results() as $row) {
1628
1629 $results[] = [
1630 'id'=> $row->value,
1631 'text'=> $row->value,
1632 ];
1633 }
1634
1635 $field_values = wdk_field_option($search_field_id, 'values', '');
1636 $field_values = explode(',', $field_values);
1637 if(!empty($field_values)) {
1638 foreach($field_values as $value) {
1639 if(empty($value)) continue;
1640
1641 $results[] = [
1642 'id'=> $value,
1643 'text'=> $value,
1644 ];
1645 }
1646 }
1647
1648 }
1649
1650 $data['success'] = true;
1651
1652 $data['results'] = array_slice($results, $offset, $limit);
1653 if(count($results) >= $limit + $offset) {
1654 $data['pagination'] =[
1655 "more"=> true
1656 ];
1657 }
1658
1659 $data['success'] = true;
1660 $this->output($data);
1661 }
1662
1663 private function get_fa_icons() {
1664
1665 /* icons font Awesome 5 */
1666
1667 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",
1668 "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",
1669 "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",
1670 "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",
1671 "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",
1672 "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",
1673 "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",
1674 "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",
1675 "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",
1676 "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",
1677 "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",
1678 "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",
1679 "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",
1680 "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",
1681 "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",
1682 "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",
1683 "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",
1684 "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",
1685 "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",
1686 "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",
1687 "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",
1688 "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",
1689 "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",
1690 "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",
1691 "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",
1692 "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",
1693 "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",
1694 "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",
1695 "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",
1696 "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",
1697 "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",
1698 "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",
1699 "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",
1700 "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",
1701 "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",
1702 "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",
1703 "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",
1704 "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",
1705 "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",
1706 "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",
1707 "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",
1708 "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",
1709 "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",
1710 "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",
1711 "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",
1712 "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",
1713 "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",
1714 "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",
1715 "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",
1716 "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",
1717 "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",
1718 "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",
1719 "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",
1720 "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",
1721 "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",
1722 "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",
1723 "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",
1724 "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",
1725 "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",
1726 "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",
1727 "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",
1728 "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",
1729 "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",
1730 "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",
1731 "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",
1732 "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",
1733 "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",
1734 "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",
1735 "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",
1736 "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",
1737 "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","fas fa-school");
1738
1739
1740 /* icons font Awesome 4 */
1741 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",
1742 "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",
1743 "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",
1744 "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",
1745 "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",
1746 "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",
1747 "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",
1748 "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",
1749 "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",
1750 "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",
1751 "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",
1752 "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",
1753 "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",
1754 "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",
1755 "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",
1756 "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",
1757 "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",
1758 "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",
1759 "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",
1760 "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",
1761 "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",
1762 "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",
1763 "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",
1764 "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",
1765 "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",
1766 "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",
1767 "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",
1768 "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",
1769 "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",
1770 "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",
1771 "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",
1772 "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",
1773 "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",
1774 "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",
1775 "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",
1776 "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",
1777 "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",
1778 "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",
1779 "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",
1780 "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",
1781 "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",
1782 "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",
1783 "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",
1784 "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",
1785 "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",
1786 "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",
1787 "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",
1788 "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","fab fa-x-twitter","fab fa-x-twitter-square","fa fa-umbrella",
1789 "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",
1790 "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",
1791 "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",
1792 "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",
1793 "fa fa-y-combinator","fa fa-yahoo","fa fa-yelp","fa fa-yoast","fa fa-youtube","fa fa-youtube-play","fa fa-youtube-square","fa-solid fa-school");
1794 }
1795
1796 }
1797
1798