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

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