PluginProbe
WP Directory Kit / 1.5.9
WP Directory Kit v1.5.9
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
← All changes | application/controllers/Wdk_listing.php +148 -32 1.2.3 → 1.5.9 View file →
@@ -5,8 +5,87 @@
5 5
6 6 public function __construct(){
7 7 parent::__construct();
8 8 }
9 +
10 + public function copy()
11 + {
12 + $this->load->model('field_m');
13 + $this->load->model('listing_m');
14 + $this->load->model('listingfield_m');
15 + $this->load->model('listingusers_m');
16 + $this->load->model('category_m');
17 + $this->load->model('location_m');
18 + $this->load->model('user_m');
19 + $this->load->model('categorieslistings_m');
20 + $this->load->model('locationslistings_m');
21 +
22 + $from_id = intval($_GET['from_id']);
23 + $to_lang = sanitize_text_field(wp_unslash($_GET['to_lang']));
24 +
25 + // fetch data
26 + $listing_post = get_post( $from_id );
27 +
28 + $listing_db_data = $this->listing_m->get($from_id, TRUE);
29 +
30 + $listingfield_db_data = $this->listingfield_m->get($from_id, TRUE);
31 + $listingusers_db_data = $this->listingusers_m->get($from_id);
32 +
33 + $lang_from_code = pll_get_post_language($from_id);
34 +
35 + $post_data = array(
36 + 'post_title' => wp_strip_all_tags($listing_post->post_title).' '.$to_lang,
37 + 'post_content' => $listing_post->post_content,
38 + 'post_status' => 'publish',
39 + 'post_type' => 'wdk-listing',
40 + 'post_author' => get_current_user_id()
41 + // Other fields as needed
42 + );
43 +
44 + // Insert the custom post into the database
45 + $post_id = wp_insert_post($post_data);
46 +
47 + pll_set_post_language($post_id, $to_lang);
48 +
49 + // Link the translations together
50 + pll_save_post_translations(array(
51 + $lang_from_code => $from_id,
52 + $to_lang => $post_id,
53 + ));
54 +
55 + $listing_data = array('post_id' => $post_id);
56 +
57 +
58 + $listing_data_fields = array('category_id', 'location_id', 'address', 'lat', 'lng', 'listing_images','listing_plans_documents', 'is_featured', 'is_activated','is_approved', 'package_id','rank','subscription_id',
59 + 'user_id_editor', 'listing_parent_post_id','listing_related_ids');
60 + foreach($listing_data_fields as $field_name)
61 + {
62 + if(isset($listing_db_data->$field_name))
63 + $listing_data[$field_name] = $listing_db_data->$field_name;
64 + }
65 +
66 + $listing_data['date_modified'] = gmdate('Y-m-d H:i:s');
67 +
68 + // copy listing data
69 + $this->listing_m->insert($listing_data, NULL);
70 +
71 + if($this->db->last_error() != '')
72 + exit('DB Error: '.esc_html($this->db->last_error()));
73 +
74 + $this->data['listing_fields'] = $this->field_m->get();
75 +
76 + foreach($this->data['listing_fields'] as $field_data)
77 + {
78 + if(isset($listing_db_data->{'field_'.$field_data->idfield.'_'.$field_data->field_type}))
79 + $listing_data['field_'.$field_data->idfield] = $listing_db_data->{'field_'.$field_data->idfield.'_'.$field_data->field_type};
80 + }
81 +
82 + $this->listingfield_m->insert_custom_fields($this->data['listing_fields'], $listing_data, NULL);
83 +
84 + //exit($this->db->last_query());
85 +
86 + wp_redirect(get_admin_url() . "admin.php?page=wdk_listing&id=".$post_id);
87 + }
9 88
10 89 // Edit listing method
11 90 public function index()
12 91 {
@@ -29,8 +108,9 @@
29 108 $this->data['db_data']['listing_agents'] = array();
30 109 $this->data['db_data']['listing_sub_locations'] = array();
31 110 $this->data['db_data']['listing_sub_categories'] = array();
32 111 $this->data['form'] = &$this->form;
112 + $this->data['edit_log'] = NULL;
33 113
34 114 $this->data['categories'] = $this->category_m->get_parents();
35 115 $this->data['locations'] = $this->location_m->get_parents();
36 116
@@ -82,8 +162,11 @@
82 162 .'('.wdk_get_date(wdk_show_data('date_to', $package,'', TRUE, TRUE)).')';
83 163 }
84 164 }
85 165 }
166 +
167 + $this->load->model('editlog_m');
168 + $this->data['edit_log'] = $this->editlog_m->get_pagination_listing($listing_post_id, 10, NULL);
86 169 }
87 170
88 171 if(isset($_POST['listing_agents'])) {
89 172 $this->data['db_data']['listing_agents'] = array();
@@ -108,26 +191,17 @@
108 191 $Winter_MVC_wdk_membership->model('subscription_user_m');
109 192 $Winter_MVC_wdk_membership->model('subscription_m');
110 193
111 194 $this->db->select('*');
112 - $this->db->join($Winter_MVC_wdk_membership->subscription_m->_table_name.' ON '.$Winter_MVC_wdk_membership->subscription_m->_table_name.'.idsubscription = '.$Winter_MVC_wdk_membership->subscription_user_m->_table_name.'.subscription_id');
113 195 $this->db->join($this->db->prefix.'wdk_categories ON '.$this->db->prefix.'wdk_categories.idcategory = '.$Winter_MVC_wdk_membership->subscription_m->_table_name.'.category_id', TRUE, 'LEFT');
114 196 $this->db->join($this->db->prefix.'wdk_locations ON '.$this->db->prefix.'wdk_locations.idlocation = '.$Winter_MVC_wdk_membership->subscription_m->_table_name.'.location_id', TRUE, 'LEFT');
115 - $this->db->where(array(
116 - '(date_expire > \''.current_time( 'mysql' ).'\')'=>NULL,
117 - '(user_id = \''.wmvc_show_data('user_id_editor', $this->data['db_data'], false).'\')'=>NULL,
118 - '(status = \'ACTIVE\')'=>NULL,
119 - )
120 - );
121 -
122 - $subscriptions = $Winter_MVC_wdk_membership->subscription_user_m->get();
197 + $subscriptions = $Winter_MVC_wdk_membership->subscription_m->get();
123 198 if (count($subscriptions) > 0) {
124 199 foreach($subscriptions as $subscription) {
125 - $this->data['subscriptions'][wdk_show_data('subscription_id',$subscription,'', TRUE, TRUE)] = wdk_show_data('subscription_id', $subscription,'', TRUE, TRUE)
200 + $this->data['subscriptions'][wdk_show_data('idsubscription', $subscription,'', TRUE, TRUE)] = wdk_show_data('idsubscription', $subscription,'', TRUE, TRUE)
126 201 .', '.wdk_show_data('subscription_name', $subscription,'', TRUE, TRUE)
127 202 .', '.wdk_show_data('location_title',$subscription, esc_html__('Any', 'wpdirectorykit'), TRUE, TRUE).' '. esc_html__('Location', 'wpdirectorykit')
128 - .', '.wdk_show_data('category_title',$subscription, esc_html__('Any', 'wpdirectorykit'), TRUE, TRUE).' '. esc_html__('Category', 'wpdirectorykit')
129 - .'('.wdk_get_date(wdk_show_data('date_expire', $subscription,'', TRUE, TRUE)).')';
203 + .', '.wdk_show_data('category_title',$subscription, esc_html__('Any', 'wpdirectorykit'), TRUE, TRUE).' '. esc_html__('Category', 'wpdirectorykit');
130 204 }
131 205 }
132 206 }
133 207
@@ -145,9 +219,9 @@
145 219 ),
146 220 array(
147 221 'field' => 'post_content',
148 222 'label' => __('Content', 'wpdirectorykit'),
149 - 'rules' => 'required'
223 + 'rules' => (wdk_get_option('wdk_is_post_content_enable', FALSE)) ? 'required' : ''
150 224 ),
151 225 array(
152 226 'field' => 'category_id',
153 227 'label' => __('Category', 'wpdirectorykit'),
@@ -165,14 +239,14 @@
165 239 ),
166 240 array(
167 241 'field' => 'lat',
168 242 'label' => __('lat', 'wpdirectorykit'),
169 - 'rules' => ''
243 + 'rules' => (wdk_get_option('wdk_is_address_enabled')) ? 'wdk_gps_single':''
170 244 ),
171 245 array(
172 246 'field' => 'lng',
173 247 'label' => __('lng', 'wpdirectorykit'),
174 - 'rules' => ''
248 + 'rules' => (wdk_get_option('wdk_is_address_enabled')) ? 'wdk_gps_single':''
175 249 ),
176 250 array(
177 251 'field' => 'listing_images',
178 252 'label' => __('Listing images', 'wpdirectorykit'),
@@ -232,13 +306,9 @@
232 306 'field' => 'listing_parent_post_id',
233 307 'label' => __('Listing parent id', 'wpdirectorykit'),
234 308 'rules' => ''
235 309 ),
236 - array(
237 - 'field' => 'listing_related_ids',
238 - 'label' => __('Listing childs', 'wpdirectorykit'),
239 - 'rules' => ''
240 - ),
310 +
241 311 );
242 312
243 313 $rules[] = array(
244 314 'field' => 'rank',
@@ -246,8 +316,16 @@
246 316 'rules' => 'numeric'
247 317 );
248 318
249 319
320 + if(wdk_get_option('wdk_sub_listings_enable')) {
321 + $rules[] = array(
322 + 'field' => 'listing_related_ids',
323 + 'label' => __('Listing childs', 'wpdirectorykit'),
324 + 'rules' => 'wdk_related_validation'
325 + );
326 + }
327 +
250 328 foreach($this->data['fields'] as $key => $field)
251 329 {
252 330 if($field->field_type == 'SECTION'){
253 331 $this->data['fields'][$key]->is_required = '';
@@ -307,8 +385,10 @@
307 385 $this->data['db_data']['field_'.$field->idfield] =
308 386 $this->data['db_data']['field_'.$field->idfield.'_'.$field->field_type];
309 387 }
310 388
389 + $this->form->add_error_message('wdk_gps_single', __('Gps field is not valid, should be like xx.xxxxxx (between -180 and 180)', 'wpdirectorykit'));
390 + $this->form->add_error_message('wdk_related_validation', __('Related listings must not contain child listings and cannot be child listings themselves.', 'wpdirectorykit'));
311 391 if($this->form->run($rules))
312 392 {
313 393 // Check _wpnonce
314 394 check_admin_referer( 'wdk-listing-edit_'.$listing_post_id, '_wpnonce' );
@@ -315,8 +395,12 @@
315 395
316 396 $data = $this->listing_m->prepare_data(wdk_get_post(), $rules, FALSE);
317 397 // Save standard wp post
318 398
399 + if(!isset($data['post_content'])) {
400 + $data['post_content'] = '';
401 + }
402 +
319 403 // Create post object
320 404 $listing_post = array(
321 405 'ID' => $listing_post_id,
322 406 'post_type' => 'wdk-listing',
@@ -334,14 +418,20 @@
334 418 $listing_data = array('post_id' => $id);
335 419
336 420 $listing_data_fields = array('category_id', 'location_id', 'address', 'lat', 'lng', 'listing_images','listing_plans_documents', 'is_featured', 'is_activated','is_approved', 'package_id','rank','subscription_id',
337 421 'user_id_editor', 'listing_parent_post_id','listing_related_ids');
422 +
338 423 foreach($listing_data_fields as $field_name)
339 424 {
340 - $listing_data[$field_name] = $data[$field_name];
425 + $listing_data[$field_name] = $data[$field_name] ?? '';
341 426 }
342 427
343 - $image_ids = explode(',', $data['listing_images']);
428 + if(empty($listing_data['user_id_editor']))
429 + $listing_data['user_id_editor'] = $this->data['db_data']['user_id_editor'] = get_current_user_id();
430 +
431 + $image_ids = array();
432 + if(!empty($data['listing_images']))
433 + $image_ids = explode(',', $data['listing_images']);
344 434
345 435 $listing_data['listing_images_path'] = '';
346 436 $listing_data['listing_images_path_medium'] = '';
347 437
@@ -361,9 +451,9 @@
361 451 }
362 452
363 453 $image_url = wp_get_attachment_image_url($image_id, 'large');
364 454 if($image_url) {
365 - $parsed = parse_url($image_url);
455 + $parsed = wp_parse_url($image_url);
366 456 $next_path = substr($parsed['path'], strpos($parsed['path'], 'uploads/')+8);
367 457
368 458 if(!empty($listing_data['listing_images_path_medium']))
369 459 $listing_data['listing_images_path_medium'] .= ',';
@@ -371,11 +461,14 @@
371 461 $listing_data['listing_images_path_medium'] .= $next_path;
372 462 }
373 463 }
374 464 }
465 +
466 + /* add featured images */
467 + set_post_thumbnail($id, reset($image_ids));
375 468 }
376 469
377 - if(wmvc_user_in_role('administrator') && $this->input->post('slug')) {
470 + if((wmvc_user_in_role('administrator') || current_user_can('wdk_listings_manage')) && $this->input->post('slug')) {
378 471 // update the post slug
379 472 wp_update_post( array(
380 473 'ID' => $id,
381 474 'post_name' => sanitize_text_field($this->input->post('slug'))
@@ -390,9 +483,9 @@
390 483 $listing_data['is_approved'] = 0;
391 484 }
392 485 }
393 486
394 - if(!wmvc_user_in_role('administrator')) {
487 + if(!wmvc_user_in_role('administrator') && !current_user_can('wdk_listings_manage')) {
395 488 unset($listing_data['rank']);
396 489 }
397 490
398 491 if(function_exists('run_wdk_payments') && wmvc_show_data('package_id', $listing_data_field, false)) {
@@ -402,9 +495,9 @@
402 495 $package = $Winter_MVC_wdk_payments->package_m->get(wmvc_show_data('package_id', $listing_data_field, false), TRUE);
403 496 if ($packages) {
404 497 if(!isset($listing_data['rank']) || empty($listing_data['rank']))
405 498 $listing_data['rank'] = wdk_show_data('featured_rank',$package, 0, TRUE, TRUE);
406 - $listing_data['date_package_expire'] = date('Y-m-d H:i:s', strtotime('+'.wdk_show_data('days_limit',$package, 0, TRUE, TRUE).'days'));
499 + $listing_data['date_package_expire'] = gmdate('Y-m-d H:i:s', strtotime('+'.wdk_show_data('days_limit',$package, 0, TRUE, TRUE).'days'));
407 500 }
408 501 }
409 502
410 503 /* dates set */
@@ -410,19 +503,24 @@
410 503 /* dates set */
411 504 if(isset($this->data['db_data']['date']))
412 505 $listing_data['date'] = $this->data['db_data']['date'];
413 506
414 - $listing_data['date_modified'] = date('Y-m-d H:i:s');
507 + $listing_data['date_modified'] = gmdate('Y-m-d H:i:s');
415 508
416 509 if(empty($listing_db_data))
417 510 {
418 - $this->listing_m->insert($listing_data, NULL);
511 + $id_ret = $this->listing_m->insert($listing_data, NULL);
419 512 }
420 513 else
421 514 {
422 - $this->listing_m->insert($listing_data, $id);
515 + $id_ret = $this->listing_m->insert($listing_data, $id);
423 516 }
424 517
518 + if($this->db->last_error() != '')
519 + exit('DB Error: '.esc_html($this->db->last_error()));
520 +
521 + //var_dump($id_ret);
522 +
425 523 // insert users/agents
426 524
427 525 if(function_exists('run_wdk_membership')){
428 526 $this->listingusers_m->delete_where(array('post_id' => $id));
@@ -478,8 +576,16 @@
478 576 // Save dynamic fields data
479 577
480 578 $data['post_id'] = $id;
481 579
580 + global $wpdb;
581 + foreach($this->data['fields'] as $key => $field)
582 + {
583 + if($field->field_type == 'TEXTAREA' && !empty($data['field_'.$field->idfield])){
584 + $data[ 'field_'.$field->idfield ] = wp_encode_emoji( $data['field_'.$field->idfield] );
585 + }
586 + }
587 +
482 588 if(empty($listingfield_db_data))
483 589 {
484 590 $this->listingfield_m->insert_custom_fields($this->data['listing_fields'], $data, NULL);
485 591 }
@@ -487,12 +593,22 @@
487 593 {
488 594 $this->listingfield_m->insert_custom_fields($this->data['listing_fields'], $data, $id);
489 595 }
490 596
491 - //exit($this->db->last_query());
597 + if($this->db->last_error() != '')
598 + exit('DB Error: '.esc_html($this->db->last_error()));
492 599
493 - //exit($this->db->last_error());
600 + $this->load->model('editlog_m');
601 + $this->editlog_m->insert(array(
602 + 'user_id' => get_current_user_id(),
603 + 'post_id' => $id,
604 + 'date' => gmdate('Y-m-d H:i:s'),
605 + 'ip' => $_SERVER['REMOTE_ADDR']
606 + ));
494 607
608 +
609 + do_action('wpdirectorykit/listing/saved', $id, $this->data['db_data']);
610 +
495 611 if(wdk_get_option('wdk_sub_listings_enable')) {
496 612 /* generate fast childs ids for parents */
497 613
498 614 if(isset($listing_data['listing_parent_post_id']) && !empty($listing_data['listing_parent_post_id'])) {
@@ -549,9 +665,9 @@
549 665
550 666 /* fix checkbox after submit */
551 667 if(!empty($id))
552 668 {
553 - $is_approved_before_save = $this->data['db_data']['is_approved'];
669 + $is_approved_before_save = (isset($this->data['db_data']['is_approved'])) ? $this->data['db_data']['is_approved'] : 0;
554 670
555 671 $listing_post = get_post( $id );
556 672 $listing_db_data = $this->listing_m->get($id, TRUE);
557 673 $listingfield_db_data = $this->listingfield_m->get($id, TRUE);