PluginProbe
WP Directory Kit / 1.4.8
WP Directory Kit v1.4.8
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 1.4.0 1.4.1 All 35 releases
wpdirectorykit / application / controllers / Wdk_frontendajax.php

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

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