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
wpdirectorykit / application / controllers / Wdk_listing.php

Wdk_listing.php in WP Directory Kit 1.5.9, at application/controllers/Wdk_listing.php

728 lines 32.6 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_listing extends Winter_MVC_Controller {
5
6 public function __construct(){
7 parent::__construct();
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 }
88
89 // Edit listing method
90 public function index()
91 {
92 $this->load->model('field_m');
93 $this->load->model('listing_m');
94 $this->load->model('listingfield_m');
95 $this->load->model('listingusers_m');
96 $this->load->model('category_m');
97 $this->load->model('location_m');
98 $this->load->model('user_m');
99 $this->load->model('categorieslistings_m');
100 $this->load->model('locationslistings_m');
101 $this->load->load_helper('listing');
102
103 $listing_post_id = (int) $this->input->post_get('id');
104
105 wdk_access_check('listing_m', $listing_post_id, NULL, 'edit');
106
107 $this->data['db_data'] = NULL;
108 $this->data['db_data']['listing_agents'] = array();
109 $this->data['db_data']['listing_sub_locations'] = array();
110 $this->data['db_data']['listing_sub_categories'] = array();
111 $this->data['form'] = &$this->form;
112 $this->data['edit_log'] = NULL;
113
114 $this->data['categories'] = $this->category_m->get_parents();
115 $this->data['locations'] = $this->location_m->get_parents();
116
117 $or_like = "(meta_value LIKE '%administrator%'
118 OR meta_value LIKE '%wdk_agency%'
119 OR meta_value LIKE '%wdk_agent%'
120 OR meta_value LIKE '%wdk_owner%')";
121
122 $this->data['agents'] = $this->user_m->get_agents_names(array(), $or_like);
123
124 if(!empty($listing_post_id))
125 {
126 $listing_post = get_post( $listing_post_id );
127
128 $listing_db_data = $this->listing_m->get($listing_post_id, TRUE);
129
130 $listingfield_db_data = $this->listingfield_m->get($listing_post_id, TRUE);
131 $listingusers_db_data = $this->listingusers_m->get($listing_post_id);
132
133 $this->data['db_data'] = array_merge((array) $listing_post,
134 (array) $listing_db_data,
135 (array) $listingfield_db_data);
136
137 $this->data['db_data']['listing_agents'] = array();
138 $this->data['db_data']['listing_sub_locations'] = array();
139 $this->data['db_data']['listing_sub_categories'] = array();
140
141 foreach ($listingusers_db_data as $key => $listinguser) {
142 if(isset($this->data['agents'][$listinguser->user_id]))
143 $this->data['db_data']['listing_agents'] [$listinguser->user_id]= $this->data['agents'][$listinguser->user_id];
144 }
145
146 $this->data['db_data']['listing_sub_locations'] = wdk_generate_other_locations_keys($listing_post_id);
147 $this->data['db_data']['listing_sub_categories'] = wdk_generate_other_categories_keys($listing_post_id);
148 if(function_exists('run_wdk_payments')) {
149 $this->data['packages'] = array();
150
151 global $Winter_MVC_wdk_payments;
152 $Winter_MVC_wdk_payments->model('package_m');
153
154 $packages = $Winter_MVC_wdk_payments->package_m->get_by(array('(date_from IS NULL OR date_from < \''.current_time( 'mysql' ).'\')'=>NULL,
155 '(date_to IS NULL OR date_to > \''.current_time( 'mysql' ).'\')'=>NULL,
156 '(location_id IS NULL OR location_id = '.wdk_show_data('location_id', $listing_db_data, '0', TRUE, TRUE).')'=>NULL,
157 '(category_id IS NULL OR category_id = '.wdk_show_data('category_id', $listing_db_data, '0', TRUE, TRUE).')'=>NULL));
158 if (count($packages) > 0) {
159 foreach($packages as $package) {
160 $this->data['packages'][wdk_show_data('idpackage', $package, TRUE, TRUE)] = wdk_show_data('idpackage', $package,'', TRUE, TRUE)
161 .', '.wdk_show_data('package_name', $package,'', TRUE, TRUE)
162 .'('.wdk_get_date(wdk_show_data('date_to', $package,'', TRUE, TRUE)).')';
163 }
164 }
165 }
166
167 $this->load->model('editlog_m');
168 $this->data['edit_log'] = $this->editlog_m->get_pagination_listing($listing_post_id, 10, NULL);
169 }
170
171 if(isset($_POST['listing_agents'])) {
172 $this->data['db_data']['listing_agents'] = array();
173 foreach ($_POST['listing_agents'] as $user_id) {
174 if(isset($this->data['agents'][intval($user_id)]))
175 $this->data['db_data']['listing_agents'] [intval($user_id)]= $this->data['agents'][intval($user_id)];
176 }
177 }
178
179 if(isset($_POST['listing_sub_locations'])) {
180 $this->data['db_data']['listing_sub_locations'] = $_POST['listing_sub_locations'];
181 }
182 if(isset($_POST['listing_sub_categories'])) {
183 $this->data['db_data']['listing_sub_categories'] = $_POST['listing_sub_categories'];
184 }
185
186 $this->data['subscriptions'] = array();
187 $this->data['subscriptions_data'] = array();
188
189 if(wdk_get_option('wdk_membership_is_enable_subscriptions') && function_exists('run_wdk_membership')){
190 global $Winter_MVC_wdk_membership;
191 $Winter_MVC_wdk_membership->model('subscription_user_m');
192 $Winter_MVC_wdk_membership->model('subscription_m');
193
194 $this->db->select('*');
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');
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');
197 $subscriptions = $Winter_MVC_wdk_membership->subscription_m->get();
198 if (count($subscriptions) > 0) {
199 foreach($subscriptions as $subscription) {
200 $this->data['subscriptions'][wdk_show_data('idsubscription', $subscription,'', TRUE, TRUE)] = wdk_show_data('idsubscription', $subscription,'', TRUE, TRUE)
201 .', '.wdk_show_data('subscription_name', $subscription,'', TRUE, TRUE)
202 .', '.wdk_show_data('location_title',$subscription, esc_html__('Any', 'wpdirectorykit'), TRUE, TRUE).' '. esc_html__('Location', 'wpdirectorykit')
203 .', '.wdk_show_data('category_title',$subscription, esc_html__('Any', 'wpdirectorykit'), TRUE, TRUE).' '. esc_html__('Category', 'wpdirectorykit');
204 }
205 }
206 }
207
208
209 $this->db->where(array('field_type !='=> 'SECTION'));
210 $this->data['listing_fields'] = $this->field_m->get();
211
212 $this->data['fields'] = $this->field_m->get();
213
214 $rules = array(
215 array(
216 'field' => 'post_title',
217 'label' => __('Title', 'wpdirectorykit'),
218 'rules' => 'required'
219 ),
220 array(
221 'field' => 'post_content',
222 'label' => __('Content', 'wpdirectorykit'),
223 'rules' => (wdk_get_option('wdk_is_post_content_enable', FALSE)) ? 'required' : ''
224 ),
225 array(
226 'field' => 'category_id',
227 'label' => __('Category', 'wpdirectorykit'),
228 'rules' => (wdk_get_option('wdk_listing_category_required')) ? 'required':''
229 ),
230 array(
231 'field' => 'location_id',
232 'label' => __('Location', 'wpdirectorykit'),
233 'rules' => (wdk_get_option('wdk_listing_location_required')) ? 'required':''
234 ),
235 array(
236 'field' => 'address',
237 'label' => __('Address', 'wpdirectorykit'),
238 'rules' => ''
239 ),
240 array(
241 'field' => 'lat',
242 'label' => __('lat', 'wpdirectorykit'),
243 'rules' => (wdk_get_option('wdk_is_address_enabled')) ? 'wdk_gps_single':''
244 ),
245 array(
246 'field' => 'lng',
247 'label' => __('lng', 'wpdirectorykit'),
248 'rules' => (wdk_get_option('wdk_is_address_enabled')) ? 'wdk_gps_single':''
249 ),
250 array(
251 'field' => 'listing_images',
252 'label' => __('Listing images', 'wpdirectorykit'),
253 'rules' => (wdk_get_option('wdk_listings_images_required_enable')) ? 'required' : ''
254 ),
255 array(
256 'field' => 'listing_plans_documents',
257 'label' => __('Listing plans and documents', 'wpdirectorykit'),
258 'rules' => ''
259 ),
260 array(
261 'field' => 'is_featured',
262 'label' => __('Is Featured', 'wpdirectorykit'),
263 'rules' => ''
264 ),
265 array(
266 'field' => 'is_activated',
267 'label' => __('Is Activated', 'wpdirectorykit'),
268 'rules' => ''
269 ),
270 array(
271 'field' => 'is_approved',
272 'label' => __('Is Approved', 'wpdirectorykit'),
273 'rules' => ''
274 ),
275 array(
276 'field' => 'user_id_editor',
277 'label' => __('Agents', 'wpdirectorykit'),
278 'rules' => ''
279 ),
280 array(
281 'field' => 'listing_agents',
282 'label' => __('Agents', 'wpdirectorykit'),
283 'rules' => ''
284 ),
285 array(
286 'field' => 'listing_sub_locations',
287 'label' => __('Locations', 'wpdirectorykit'),
288 'rules' => ''
289 ),
290 array(
291 'field' => 'listing_sub_categories',
292 'label' => __('Categories', 'wpdirectorykit'),
293 'rules' => ''
294 ),
295 array(
296 'field' => 'package_id',
297 'label' => __('Package', 'wpdirectorykit'),
298 'rules' => ''
299 ),
300 array(
301 'field' => 'subscription_id',
302 'label' => __('Subscription id', 'wpdirectorykit'),
303 'rules' => ''
304 ),
305 array(
306 'field' => 'listing_parent_post_id',
307 'label' => __('Listing parent id', 'wpdirectorykit'),
308 'rules' => ''
309 ),
310
311 );
312
313 $rules[] = array(
314 'field' => 'rank',
315 'label' => __('Rank', 'wpdirectorykit'),
316 'rules' => 'numeric'
317 );
318
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
328 foreach($this->data['fields'] as $key => $field)
329 {
330 if($field->field_type == 'SECTION'){
331 $this->data['fields'][$key]->is_required = '';
332 continue;
333 }
334
335 $rule_required = (wmvc_show_data('is_required', $field) == 1) ? 'required' : '';
336
337 if(wmvc_show_data('validation', $field)) {
338 if(!empty($rule_required)) {
339 $rule_required .= '|';
340 }
341 $rule_required .= wmvc_show_data('validation', $field);
342 }
343
344 if(!empty(wmvc_show_data('min_length', $field))) {
345 if(!empty($rule_required)) {
346 $rule_required .= '|';
347 }
348
349 if(wmvc_show_data('field_type', $field) == "NUMBER") {
350 $rule_required .= "min_number";
351 } else {
352 $rule_required .= "min_length";
353 }
354 $rule_required .= "[".wmvc_show_data('min_length', $field)."]";
355
356 }
357
358 if(!empty(wmvc_show_data('max_length', $field))) {
359 if(!empty($rule_required)) {
360 $rule_required .= '|';
361 }
362 if(wmvc_show_data('field_type', $field) == "NUMBER") {
363 $rule_required .= "max_number";
364 } else {
365 $rule_required .= "max_length";
366 }
367 $rule_required .= "[".wmvc_show_data('max_length', $field)."]";
368 }
369
370 /* clear rules, because hidden field */
371 if(isset($_POST['category_id']) && !empty($_POST['category_id'])) {
372 if(wdk_depend_is_hidden_field($field->idfield, intval($_POST['category_id']))) {
373 $rule_required = '';
374 }
375 }
376
377 $rules[] =
378 array(
379 'field' => 'field_'.$field->idfield,
380 'label' => $field->field_label,
381 'rules' => $rule_required
382 );
383
384 if(isset($this->data['db_data']['field_'.$field->idfield.'_'.$field->field_type]))
385 $this->data['db_data']['field_'.$field->idfield] =
386 $this->data['db_data']['field_'.$field->idfield.'_'.$field->field_type];
387 }
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'));
391 if($this->form->run($rules))
392 {
393 // Check _wpnonce
394 check_admin_referer( 'wdk-listing-edit_'.$listing_post_id, '_wpnonce' );
395
396 $data = $this->listing_m->prepare_data(wdk_get_post(), $rules, FALSE);
397 // Save standard wp post
398
399 if(!isset($data['post_content'])) {
400 $data['post_content'] = '';
401 }
402
403 // Create post object
404 $listing_post = array(
405 'ID' => $listing_post_id,
406 'post_type' => 'wdk-listing',
407 'post_title' => wp_strip_all_tags( $data['post_title'] ),
408 'post_content' => $data['post_content'],
409 'post_status' => 'publish',
410 'post_author' => get_current_user_id()
411 );
412
413 // Insert the post into the database
414 $id = wp_insert_post( $listing_post );
415
416 // Save our main listing data
417
418 $listing_data = array('post_id' => $id);
419
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',
421 'user_id_editor', 'listing_parent_post_id','listing_related_ids');
422
423 foreach($listing_data_fields as $field_name)
424 {
425 $listing_data[$field_name] = $data[$field_name] ?? '';
426 }
427
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']);
434
435 $listing_data['listing_images_path'] = '';
436 $listing_data['listing_images_path_medium'] = '';
437
438 if(is_array($image_ids)) {
439 foreach ($image_ids as $image_id) {
440 if(is_numeric($image_id))
441 {
442 $image_path = wp_get_original_image_path( $image_id);
443 if($image_path) {
444 /* path of image */
445 $next_path = str_replace(WP_CONTENT_DIR . '/uploads/','', $image_path);
446
447 if(!empty($listing_data['listing_images_path']))
448 $listing_data['listing_images_path'] .= ',';
449
450 $listing_data['listing_images_path'] .= $next_path;
451 }
452
453 $image_url = wp_get_attachment_image_url($image_id, 'large');
454 if($image_url) {
455 $parsed = wp_parse_url($image_url);
456 $next_path = substr($parsed['path'], strpos($parsed['path'], 'uploads/')+8);
457
458 if(!empty($listing_data['listing_images_path_medium']))
459 $listing_data['listing_images_path_medium'] .= ',';
460
461 $listing_data['listing_images_path_medium'] .= $next_path;
462 }
463 }
464 }
465
466 /* add featured images */
467 set_post_thumbnail($id, reset($image_ids));
468 }
469
470 if((wmvc_user_in_role('administrator') || current_user_can('wdk_listings_manage')) && $this->input->post('slug')) {
471 // update the post slug
472 wp_update_post( array(
473 'ID' => $id,
474 'post_name' => sanitize_text_field($this->input->post('slug'))
475 ));
476
477 }
478
479 if(!function_exists('run_wdk_membership')) {
480 if($listing_data['is_activated'] == 1) {
481 $listing_data['is_approved'] = 1;
482 } else {
483 $listing_data['is_approved'] = 0;
484 }
485 }
486
487 if(!wmvc_user_in_role('administrator') && !current_user_can('wdk_listings_manage')) {
488 unset($listing_data['rank']);
489 }
490
491 if(function_exists('run_wdk_payments') && wmvc_show_data('package_id', $listing_data_field, false)) {
492
493 global $Winter_MVC_wdk_payments;
494 $Winter_MVC_wdk_payments->model('package_m');
495 $package = $Winter_MVC_wdk_payments->package_m->get(wmvc_show_data('package_id', $listing_data_field, false), TRUE);
496 if ($packages) {
497 if(!isset($listing_data['rank']) || empty($listing_data['rank']))
498 $listing_data['rank'] = wdk_show_data('featured_rank',$package, 0, TRUE, TRUE);
499 $listing_data['date_package_expire'] = gmdate('Y-m-d H:i:s', strtotime('+'.wdk_show_data('days_limit',$package, 0, TRUE, TRUE).'days'));
500 }
501 }
502
503 /* dates set */
504 if(isset($this->data['db_data']['date']))
505 $listing_data['date'] = $this->data['db_data']['date'];
506
507 $listing_data['date_modified'] = gmdate('Y-m-d H:i:s');
508
509 if(empty($listing_db_data))
510 {
511 $id_ret = $this->listing_m->insert($listing_data, NULL);
512 }
513 else
514 {
515 $id_ret = $this->listing_m->insert($listing_data, $id);
516 }
517
518 if($this->db->last_error() != '')
519 exit('DB Error: '.esc_html($this->db->last_error()));
520
521 //var_dump($id_ret);
522
523 // insert users/agents
524
525 if(function_exists('run_wdk_membership')){
526 $this->listingusers_m->delete_where(array('post_id' => $id));
527 if(is_array($data['listing_agents']))
528 foreach($data['listing_agents'] as $val)
529 {
530 $this->listingusers_m->insert(array('post_id' => $id, 'user_id' => $val), NULL);
531 }
532 }
533
534 $data_other_categories = array();
535 if(isset($data['listing_sub_categories']) || is_null($data['listing_sub_categories'])) {
536 $this->categorieslistings_m->delete_where(array('post_id' => $id));
537 if(is_array($data['listing_sub_categories']))
538 foreach($data['listing_sub_categories'] as $val)
539 {
540 $this->categorieslistings_m->insert(array('post_id' => $id, 'category_id' => $val), NULL);
541
542 $data_other_categories []= $val;
543 }
544 }
545
546 $data_other_locations = array();
547 if(isset($data['listing_sub_locations']) || is_null($data['listing_sub_locations'])) {
548 $this->locationslistings_m->delete_where(array('post_id' => $id));
549 if(is_array($data['listing_sub_locations']))
550 foreach($data['listing_sub_locations'] as $val)
551 {
552 $this->locationslistings_m->insert(array('post_id' => $id, 'location_id' => $val), NULL);
553 $data_other_locations []= $val;
554 }
555 }
556
557 $data_update = array(
558 'categories_list'=> '',
559 'locations_list'=>''
560 );
561
562 if(!empty($data_other_categories)) {
563 $data_update['categories_list'] = ','.join(',',$data_other_categories).',';
564 }
565
566 if(!empty($data_other_locations)) {
567 $data_update['locations_list'] = ','.join(',',$data_other_locations).',';
568 }
569
570
571 if(!empty($data_update))
572 $this->listing_m->insert($data_update, $id);
573
574 //exit($this->db->last_query());
575
576 // Save dynamic fields data
577
578 $data['post_id'] = $id;
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
588 if(empty($listingfield_db_data))
589 {
590 $this->listingfield_m->insert_custom_fields($this->data['listing_fields'], $data, NULL);
591 }
592 else
593 {
594 $this->listingfield_m->insert_custom_fields($this->data['listing_fields'], $data, $id);
595 }
596
597 if($this->db->last_error() != '')
598 exit('DB Error: '.esc_html($this->db->last_error()));
599
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']);
610
611 if(wdk_get_option('wdk_sub_listings_enable')) {
612 /* generate fast childs ids for parents */
613
614 if(isset($listing_data['listing_parent_post_id']) && !empty($listing_data['listing_parent_post_id'])) {
615
616 $this->db->select('post_id');
617 $this->db->order_by('sublisting_order,idlisting');
618 $this->db->from($this->listing_m->_table_name);
619 $this->db->where(array('listing_parent_post_id' => intval($listing_data['listing_parent_post_id'])));
620 $query = $this->db->get();
621
622 $listings_childs = '';
623 if ($this->db->num_rows() > 0)
624 foreach ($this->db->results() as $listing) {
625 $listings_childs .= $listing->post_id.',';
626 }
627
628 if(!empty($listings_childs))
629 $listings_childs = substr($listings_childs,0, -1);
630
631 $this->listing_m->insert(array('listing_related_ids' => $listings_childs), intval($listing_data['listing_parent_post_id']));
632 }
633
634 if(isset($listing_data['listing_related_ids']) && !empty($listing_data['listing_related_ids'])) {
635
636 $old_childs_ids = wmvc_show_data('listing_related_ids', $this->data['db_data'],'',TRUE, TRUE);
637 $order_index = 0;
638 $listings_childs = '';
639
640 $old_childs_ids = explode(',', $old_childs_ids);
641 $old_childs_ids = array_flip($old_childs_ids);
642 foreach (explode(',', $listing_data['listing_related_ids']) as $idlisting) {
643 $this->listing_m->insert(array('listing_parent_post_id' => $listing_post_id, 'sublisting_order'=>$order_index++), intval($idlisting));
644
645 if(isset($old_childs_ids[$idlisting])) {
646 unset($old_childs_ids[$idlisting]);
647 }
648 }
649
650 /* clear old related listings */
651 if(!empty($old_childs_ids)) {
652 foreach ($old_childs_ids as $idlisting => $v) {
653 $this->listing_m->insert(array('listing_parent_post_id' => NULL), intval($idlisting));
654 }
655 }
656 }
657 }
658
659 // redirect
660 if(empty($listing_post_id) && !empty($id))
661 {
662 wp_redirect(admin_url("admin.php?page=wdk_listing&id=$id&is_updated=true"));
663 exit;
664 }
665
666 /* fix checkbox after submit */
667 if(!empty($id))
668 {
669 $is_approved_before_save = (isset($this->data['db_data']['is_approved'])) ? $this->data['db_data']['is_approved'] : 0;
670
671 $listing_post = get_post( $id );
672 $listing_db_data = $this->listing_m->get($id, TRUE);
673 $listingfield_db_data = $this->listingfield_m->get($id, TRUE);
674 $listingusers_db_data = $this->listingusers_m->get($id);
675 $this->data['db_data'] = array_merge((array) $listing_post,
676 (array) $listing_db_data,
677 (array) $listingfield_db_data);
678
679 $this->data['db_data']['listing_agents'] = array();
680 $this->data['db_data']['listing_sub_locations'] = array();
681 $this->data['db_data']['listing_sub_categories'] = array();
682
683 foreach ($listingusers_db_data as $key => $listinguser) {
684 if(isset($this->data['agents'][$listinguser->user_id]))
685 $this->data['db_data']['listing_agents'] [$listinguser->user_id]= $this->data['agents'][$listinguser->user_id];
686 }
687
688 if(isset($_POST['listing_sub_locations'])) {
689 $this->data['db_data']['listing_sub_locations'] = $_POST['listing_sub_locations'];
690 unset($_POST['listing_sub_locations']);
691 }
692 if(isset($_POST['listing_sub_categories'])) {
693 $this->data['db_data']['listing_sub_categories'] = $_POST['listing_sub_categories'];
694 unset($_POST['listing_sub_categories']);
695 }
696
697 /* if approved message */
698 if (!empty($listing_post_id) && wmvc_show_data('user_id', $data, false)) {
699 if( $is_approved_before_save != 1 && wmvc_show_data('is_approved', $data) == 1 && wmvc_show_data('is_activated', $data) == 1) {
700
701 $user = get_userdata( wmvc_show_data('user_id', $data) );
702
703 $data_message = array();
704 $data_message['user'] = $user;
705 $data_message['post_id'] = $id;
706 $data_message['post'] = $this->data['db_data'];
707 $ret = wdk_mail($user->user_email, __('Your Listing Approved', 'wpdirectorykit'), $data_message, 'new_listing_approved');
708 }
709 }
710 }
711
712 }
713
714 $this->data['calendar_id'] = NULL;
715 if(!empty($listing_post_id) && function_exists('run_wdk_bookings')) {
716 global $Winter_MVC_wdk_bookings;
717 $Winter_MVC_wdk_bookings->model('calendar_m');
718 $calendar = $Winter_MVC_wdk_bookings->calendar_m->get_by(array('post_id'=>$listing_post_id), TRUE);
719 if($calendar) {
720 $this->data['calendar_id'] = $calendar->idcalendar;
721 }
722 }
723
724 $this->load->view('wdk_listing/index', $this->data);
725 }
726
727 }
728