PluginProbe
WP Directory Kit / 1.5.7
WP Directory Kit v1.5.7
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.7, at application/controllers/Wdk_listing.php

725 lines 32.5 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'] = date('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: '.$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 = 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
467 if((wmvc_user_in_role('administrator') || current_user_can('wdk_listings_manage')) && $this->input->post('slug')) {
468 // update the post slug
469 wp_update_post( array(
470 'ID' => $id,
471 'post_name' => sanitize_text_field($this->input->post('slug'))
472 ));
473
474 }
475
476 if(!function_exists('run_wdk_membership')) {
477 if($listing_data['is_activated'] == 1) {
478 $listing_data['is_approved'] = 1;
479 } else {
480 $listing_data['is_approved'] = 0;
481 }
482 }
483
484 if(!wmvc_user_in_role('administrator') && !current_user_can('wdk_listings_manage')) {
485 unset($listing_data['rank']);
486 }
487
488 if(function_exists('run_wdk_payments') && wmvc_show_data('package_id', $listing_data_field, false)) {
489
490 global $Winter_MVC_wdk_payments;
491 $Winter_MVC_wdk_payments->model('package_m');
492 $package = $Winter_MVC_wdk_payments->package_m->get(wmvc_show_data('package_id', $listing_data_field, false), TRUE);
493 if ($packages) {
494 if(!isset($listing_data['rank']) || empty($listing_data['rank']))
495 $listing_data['rank'] = wdk_show_data('featured_rank',$package, 0, TRUE, TRUE);
496 $listing_data['date_package_expire'] = date('Y-m-d H:i:s', strtotime('+'.wdk_show_data('days_limit',$package, 0, TRUE, TRUE).'days'));
497 }
498 }
499
500 /* dates set */
501 if(isset($this->data['db_data']['date']))
502 $listing_data['date'] = $this->data['db_data']['date'];
503
504 $listing_data['date_modified'] = date('Y-m-d H:i:s');
505
506 if(empty($listing_db_data))
507 {
508 $id_ret = $this->listing_m->insert($listing_data, NULL);
509 }
510 else
511 {
512 $id_ret = $this->listing_m->insert($listing_data, $id);
513 }
514
515 if($this->db->last_error() != '')
516 exit('DB Error: '.$this->db->last_error());
517
518 //var_dump($id_ret);
519
520 // insert users/agents
521
522 if(function_exists('run_wdk_membership')){
523 $this->listingusers_m->delete_where(array('post_id' => $id));
524 if(is_array($data['listing_agents']))
525 foreach($data['listing_agents'] as $val)
526 {
527 $this->listingusers_m->insert(array('post_id' => $id, 'user_id' => $val), NULL);
528 }
529 }
530
531 $data_other_categories = array();
532 if(isset($data['listing_sub_categories']) || is_null($data['listing_sub_categories'])) {
533 $this->categorieslistings_m->delete_where(array('post_id' => $id));
534 if(is_array($data['listing_sub_categories']))
535 foreach($data['listing_sub_categories'] as $val)
536 {
537 $this->categorieslistings_m->insert(array('post_id' => $id, 'category_id' => $val), NULL);
538
539 $data_other_categories []= $val;
540 }
541 }
542
543 $data_other_locations = array();
544 if(isset($data['listing_sub_locations']) || is_null($data['listing_sub_locations'])) {
545 $this->locationslistings_m->delete_where(array('post_id' => $id));
546 if(is_array($data['listing_sub_locations']))
547 foreach($data['listing_sub_locations'] as $val)
548 {
549 $this->locationslistings_m->insert(array('post_id' => $id, 'location_id' => $val), NULL);
550 $data_other_locations []= $val;
551 }
552 }
553
554 $data_update = array(
555 'categories_list'=> '',
556 'locations_list'=>''
557 );
558
559 if(!empty($data_other_categories)) {
560 $data_update['categories_list'] = ','.join(',',$data_other_categories).',';
561 }
562
563 if(!empty($data_other_locations)) {
564 $data_update['locations_list'] = ','.join(',',$data_other_locations).',';
565 }
566
567
568 if(!empty($data_update))
569 $this->listing_m->insert($data_update, $id);
570
571 //exit($this->db->last_query());
572
573 // Save dynamic fields data
574
575 $data['post_id'] = $id;
576
577 global $wpdb;
578 foreach($this->data['fields'] as $key => $field)
579 {
580 if($field->field_type == 'TEXTAREA' && !empty($data['field_'.$field->idfield])){
581 $data[ 'field_'.$field->idfield ] = wp_encode_emoji( $data['field_'.$field->idfield] );
582 }
583 }
584
585 if(empty($listingfield_db_data))
586 {
587 $this->listingfield_m->insert_custom_fields($this->data['listing_fields'], $data, NULL);
588 }
589 else
590 {
591 $this->listingfield_m->insert_custom_fields($this->data['listing_fields'], $data, $id);
592 }
593
594 if($this->db->last_error() != '')
595 exit('DB Error: '.$this->db->last_error());
596
597 $this->load->model('editlog_m');
598 $this->editlog_m->insert(array(
599 'user_id' => get_current_user_id(),
600 'post_id' => $id,
601 'date' => date('Y-m-d H:i:s'),
602 'ip' => $_SERVER['REMOTE_ADDR']
603 ));
604
605
606 do_action('wpdirectorykit/listing/saved', $id, $this->data['db_data']);
607
608 if(wdk_get_option('wdk_sub_listings_enable')) {
609 /* generate fast childs ids for parents */
610
611 if(isset($listing_data['listing_parent_post_id']) && !empty($listing_data['listing_parent_post_id'])) {
612
613 $this->db->select('post_id');
614 $this->db->order_by('sublisting_order,idlisting');
615 $this->db->from($this->listing_m->_table_name);
616 $this->db->where(array('listing_parent_post_id' => intval($listing_data['listing_parent_post_id'])));
617 $query = $this->db->get();
618
619 $listings_childs = '';
620 if ($this->db->num_rows() > 0)
621 foreach ($this->db->results() as $listing) {
622 $listings_childs .= $listing->post_id.',';
623 }
624
625 if(!empty($listings_childs))
626 $listings_childs = substr($listings_childs,0, -1);
627
628 $this->listing_m->insert(array('listing_related_ids' => $listings_childs), intval($listing_data['listing_parent_post_id']));
629 }
630
631 if(isset($listing_data['listing_related_ids']) && !empty($listing_data['listing_related_ids'])) {
632
633 $old_childs_ids = wmvc_show_data('listing_related_ids', $this->data['db_data'],'',TRUE, TRUE);
634 $order_index = 0;
635 $listings_childs = '';
636
637 $old_childs_ids = explode(',', $old_childs_ids);
638 $old_childs_ids = array_flip($old_childs_ids);
639 foreach (explode(',', $listing_data['listing_related_ids']) as $idlisting) {
640 $this->listing_m->insert(array('listing_parent_post_id' => $listing_post_id, 'sublisting_order'=>$order_index++), intval($idlisting));
641
642 if(isset($old_childs_ids[$idlisting])) {
643 unset($old_childs_ids[$idlisting]);
644 }
645 }
646
647 /* clear old related listings */
648 if(!empty($old_childs_ids)) {
649 foreach ($old_childs_ids as $idlisting => $v) {
650 $this->listing_m->insert(array('listing_parent_post_id' => NULL), intval($idlisting));
651 }
652 }
653 }
654 }
655
656 // redirect
657 if(empty($listing_post_id) && !empty($id))
658 {
659 wp_redirect(admin_url("admin.php?page=wdk_listing&id=$id&is_updated=true"));
660 exit;
661 }
662
663 /* fix checkbox after submit */
664 if(!empty($id))
665 {
666 $is_approved_before_save = (isset($this->data['db_data']['is_approved'])) ? $this->data['db_data']['is_approved'] : 0;
667
668 $listing_post = get_post( $id );
669 $listing_db_data = $this->listing_m->get($id, TRUE);
670 $listingfield_db_data = $this->listingfield_m->get($id, TRUE);
671 $listingusers_db_data = $this->listingusers_m->get($id);
672 $this->data['db_data'] = array_merge((array) $listing_post,
673 (array) $listing_db_data,
674 (array) $listingfield_db_data);
675
676 $this->data['db_data']['listing_agents'] = array();
677 $this->data['db_data']['listing_sub_locations'] = array();
678 $this->data['db_data']['listing_sub_categories'] = array();
679
680 foreach ($listingusers_db_data as $key => $listinguser) {
681 if(isset($this->data['agents'][$listinguser->user_id]))
682 $this->data['db_data']['listing_agents'] [$listinguser->user_id]= $this->data['agents'][$listinguser->user_id];
683 }
684
685 if(isset($_POST['listing_sub_locations'])) {
686 $this->data['db_data']['listing_sub_locations'] = $_POST['listing_sub_locations'];
687 unset($_POST['listing_sub_locations']);
688 }
689 if(isset($_POST['listing_sub_categories'])) {
690 $this->data['db_data']['listing_sub_categories'] = $_POST['listing_sub_categories'];
691 unset($_POST['listing_sub_categories']);
692 }
693
694 /* if approved message */
695 if (!empty($listing_post_id) && wmvc_show_data('user_id', $data, false)) {
696 if( $is_approved_before_save != 1 && wmvc_show_data('is_approved', $data) == 1 && wmvc_show_data('is_activated', $data) == 1) {
697
698 $user = get_userdata( wmvc_show_data('user_id', $data) );
699
700 $data_message = array();
701 $data_message['user'] = $user;
702 $data_message['post_id'] = $id;
703 $data_message['post'] = $this->data['db_data'];
704 $ret = wdk_mail($user->user_email, __('Your Listing Approved', 'wpdirectorykit'), $data_message, 'new_listing_approved');
705 }
706 }
707 }
708
709 }
710
711 $this->data['calendar_id'] = NULL;
712 if(!empty($listing_post_id) && function_exists('run_wdk_bookings')) {
713 global $Winter_MVC_wdk_bookings;
714 $Winter_MVC_wdk_bookings->model('calendar_m');
715 $calendar = $Winter_MVC_wdk_bookings->calendar_m->get_by(array('post_id'=>$listing_post_id), TRUE);
716 if($calendar) {
717 $this->data['calendar_id'] = $calendar->idcalendar;
718 }
719 }
720
721 $this->load->view('wdk_listing/index', $this->data);
722 }
723
724 }
725