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 +144 -29 1.2.5 → 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'),
@@ -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 = '';
@@ -308,8 +386,9 @@
308 386 $this->data['db_data']['field_'.$field->idfield.'_'.$field->field_type];
309 387 }
310 388
311 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'));
312 391 if($this->form->run($rules))
313 392 {
314 393 // Check _wpnonce
315 394 check_admin_referer( 'wdk-listing-edit_'.$listing_post_id, '_wpnonce' );
@@ -316,8 +395,12 @@
316 395
317 396 $data = $this->listing_m->prepare_data(wdk_get_post(), $rules, FALSE);
318 397 // Save standard wp post
319 398
399 + if(!isset($data['post_content'])) {
400 + $data['post_content'] = '';
401 + }
402 +
320 403 // Create post object
321 404 $listing_post = array(
322 405 'ID' => $listing_post_id,
323 406 'post_type' => 'wdk-listing',
@@ -335,14 +418,20 @@
335 418 $listing_data = array('post_id' => $id);
336 419
337 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',
338 421 'user_id_editor', 'listing_parent_post_id','listing_related_ids');
422 +
339 423 foreach($listing_data_fields as $field_name)
340 424 {
341 - $listing_data[$field_name] = $data[$field_name];
425 + $listing_data[$field_name] = $data[$field_name] ?? '';
342 426 }
343 427
344 - $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']);
345 434
346 435 $listing_data['listing_images_path'] = '';
347 436 $listing_data['listing_images_path_medium'] = '';
348 437
@@ -362,9 +451,9 @@
362 451 }
363 452
364 453 $image_url = wp_get_attachment_image_url($image_id, 'large');
365 454 if($image_url) {
366 - $parsed = parse_url($image_url);
455 + $parsed = wp_parse_url($image_url);
367 456 $next_path = substr($parsed['path'], strpos($parsed['path'], 'uploads/')+8);
368 457
369 458 if(!empty($listing_data['listing_images_path_medium']))
370 459 $listing_data['listing_images_path_medium'] .= ',';
@@ -372,11 +461,14 @@
372 461 $listing_data['listing_images_path_medium'] .= $next_path;
373 462 }
374 463 }
375 464 }
465 +
466 + /* add featured images */
467 + set_post_thumbnail($id, reset($image_ids));
376 468 }
377 469
378 - 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')) {
379 471 // update the post slug
380 472 wp_update_post( array(
381 473 'ID' => $id,
382 474 'post_name' => sanitize_text_field($this->input->post('slug'))
@@ -391,9 +483,9 @@
391 483 $listing_data['is_approved'] = 0;
392 484 }
393 485 }
394 486
395 - if(!wmvc_user_in_role('administrator')) {
487 + if(!wmvc_user_in_role('administrator') && !current_user_can('wdk_listings_manage')) {
396 488 unset($listing_data['rank']);
397 489 }
398 490
399 491 if(function_exists('run_wdk_payments') && wmvc_show_data('package_id', $listing_data_field, false)) {
@@ -403,9 +495,9 @@
403 495 $package = $Winter_MVC_wdk_payments->package_m->get(wmvc_show_data('package_id', $listing_data_field, false), TRUE);
404 496 if ($packages) {
405 497 if(!isset($listing_data['rank']) || empty($listing_data['rank']))
406 498 $listing_data['rank'] = wdk_show_data('featured_rank',$package, 0, TRUE, TRUE);
407 - $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'));
408 500 }
409 501 }
410 502
411 503 /* dates set */
@@ -411,19 +503,24 @@
411 503 /* dates set */
412 504 if(isset($this->data['db_data']['date']))
413 505 $listing_data['date'] = $this->data['db_data']['date'];
414 506
415 - $listing_data['date_modified'] = date('Y-m-d H:i:s');
507 + $listing_data['date_modified'] = gmdate('Y-m-d H:i:s');
416 508
417 509 if(empty($listing_db_data))
418 510 {
419 - $this->listing_m->insert($listing_data, NULL);
511 + $id_ret = $this->listing_m->insert($listing_data, NULL);
420 512 }
421 513 else
422 514 {
423 - $this->listing_m->insert($listing_data, $id);
515 + $id_ret = $this->listing_m->insert($listing_data, $id);
424 516 }
425 517
518 + if($this->db->last_error() != '')
519 + exit('DB Error: '.esc_html($this->db->last_error()));
520 +
521 + //var_dump($id_ret);
522 +
426 523 // insert users/agents
427 524
428 525 if(function_exists('run_wdk_membership')){
429 526 $this->listingusers_m->delete_where(array('post_id' => $id));
@@ -479,8 +576,16 @@
479 576 // Save dynamic fields data
480 577
481 578 $data['post_id'] = $id;
482 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 +
483 588 if(empty($listingfield_db_data))
484 589 {
485 590 $this->listingfield_m->insert_custom_fields($this->data['listing_fields'], $data, NULL);
486 591 }
@@ -488,11 +593,21 @@
488 593 {
489 594 $this->listingfield_m->insert_custom_fields($this->data['listing_fields'], $data, $id);
490 595 }
491 596
492 - //exit($this->db->last_query());
597 + if($this->db->last_error() != '')
598 + exit('DB Error: '.esc_html($this->db->last_error()));
493 599
494 - //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 + ));
607 +
608 +
609 + do_action('wpdirectorykit/listing/saved', $id, $this->data['db_data']);
495 610
496 611 if(wdk_get_option('wdk_sub_listings_enable')) {
497 612 /* generate fast childs ids for parents */
498 613