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

725 lines 32.8 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($_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($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');
196 $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');
197 $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');
198 $this->db->where(array(
199 '(date_expire > \''.current_time( 'mysql' ).'\')'=>NULL,
200 '(user_id = \''.wmvc_show_data('user_id_editor', $this->data['db_data'], false).'\')'=>NULL,
201 '(status = \'ACTIVE\')'=>NULL,
202 )
203 );
204
205 $subscriptions = $Winter_MVC_wdk_membership->subscription_user_m->get();
206 if (count($subscriptions) > 0) {
207 foreach($subscriptions as $subscription) {
208 $this->data['subscriptions'][wdk_show_data('subscription_id',$subscription,'', TRUE, TRUE)] = wdk_show_data('subscription_id', $subscription,'', TRUE, TRUE)
209 .', '.wdk_show_data('subscription_name', $subscription,'', TRUE, TRUE)
210 .', '.wdk_show_data('location_title',$subscription, esc_html__('Any', 'wpdirectorykit'), TRUE, TRUE).' '. esc_html__('Location', 'wpdirectorykit')
211 .', '.wdk_show_data('category_title',$subscription, esc_html__('Any', 'wpdirectorykit'), TRUE, TRUE).' '. esc_html__('Category', 'wpdirectorykit')
212 .'('.wdk_get_date(wdk_show_data('date_expire', $subscription,'', TRUE, TRUE)).')';
213 }
214 }
215 }
216
217
218 $this->db->where(array('field_type !='=> 'SECTION'));
219 $this->data['listing_fields'] = $this->field_m->get();
220
221 $this->data['fields'] = $this->field_m->get();
222
223 $rules = array(
224 array(
225 'field' => 'post_title',
226 'label' => __('Title', 'wpdirectorykit'),
227 'rules' => 'required'
228 ),
229 array(
230 'field' => 'post_content',
231 'label' => __('Content', 'wpdirectorykit'),
232 'rules' => (wdk_get_option('wdk_is_post_content_enable', FALSE)) ? 'required' : ''
233 ),
234 array(
235 'field' => 'category_id',
236 'label' => __('Category', 'wpdirectorykit'),
237 'rules' => (wdk_get_option('wdk_listing_category_required')) ? 'required':''
238 ),
239 array(
240 'field' => 'location_id',
241 'label' => __('Location', 'wpdirectorykit'),
242 'rules' => (wdk_get_option('wdk_listing_location_required')) ? 'required':''
243 ),
244 array(
245 'field' => 'address',
246 'label' => __('Address', 'wpdirectorykit'),
247 'rules' => ''
248 ),
249 array(
250 'field' => 'lat',
251 'label' => __('lat', 'wpdirectorykit'),
252 'rules' => (wdk_get_option('wdk_is_address_enabled')) ? 'wdk_gps_single':''
253 ),
254 array(
255 'field' => 'lng',
256 'label' => __('lng', 'wpdirectorykit'),
257 'rules' => (wdk_get_option('wdk_is_address_enabled')) ? 'wdk_gps_single':''
258 ),
259 array(
260 'field' => 'listing_images',
261 'label' => __('Listing images', 'wpdirectorykit'),
262 'rules' => (wdk_get_option('wdk_listings_images_required_enable')) ? 'required' : ''
263 ),
264 array(
265 'field' => 'listing_plans_documents',
266 'label' => __('Listing plans and documents', 'wpdirectorykit'),
267 'rules' => ''
268 ),
269 array(
270 'field' => 'is_featured',
271 'label' => __('Is Featured', 'wpdirectorykit'),
272 'rules' => ''
273 ),
274 array(
275 'field' => 'is_activated',
276 'label' => __('Is Activated', 'wpdirectorykit'),
277 'rules' => ''
278 ),
279 array(
280 'field' => 'is_approved',
281 'label' => __('Is Approved', 'wpdirectorykit'),
282 'rules' => ''
283 ),
284 array(
285 'field' => 'user_id_editor',
286 'label' => __('Agents', 'wpdirectorykit'),
287 'rules' => ''
288 ),
289 array(
290 'field' => 'listing_agents',
291 'label' => __('Agents', 'wpdirectorykit'),
292 'rules' => ''
293 ),
294 array(
295 'field' => 'listing_sub_locations',
296 'label' => __('Locations', 'wpdirectorykit'),
297 'rules' => ''
298 ),
299 array(
300 'field' => 'listing_sub_categories',
301 'label' => __('Categories', 'wpdirectorykit'),
302 'rules' => ''
303 ),
304 array(
305 'field' => 'package_id',
306 'label' => __('Package', 'wpdirectorykit'),
307 'rules' => ''
308 ),
309 array(
310 'field' => 'subscription_id',
311 'label' => __('Subscription id', 'wpdirectorykit'),
312 'rules' => ''
313 ),
314 array(
315 'field' => 'listing_parent_post_id',
316 'label' => __('Listing parent id', 'wpdirectorykit'),
317 'rules' => ''
318 ),
319 array(
320 'field' => 'listing_related_ids',
321 'label' => __('Listing childs', 'wpdirectorykit'),
322 'rules' => ''
323 ),
324 );
325
326 $rules[] = array(
327 'field' => 'rank',
328 'label' => __('Rank', 'wpdirectorykit'),
329 'rules' => 'numeric'
330 );
331
332
333 foreach($this->data['fields'] as $key => $field)
334 {
335 if($field->field_type == 'SECTION'){
336 $this->data['fields'][$key]->is_required = '';
337 continue;
338 }
339
340 $rule_required = (wmvc_show_data('is_required', $field) == 1) ? 'required' : '';
341
342 if(wmvc_show_data('validation', $field)) {
343 if(!empty($rule_required)) {
344 $rule_required .= '|';
345 }
346 $rule_required .= wmvc_show_data('validation', $field);
347 }
348
349 if(!empty(wmvc_show_data('min_length', $field))) {
350 if(!empty($rule_required)) {
351 $rule_required .= '|';
352 }
353
354 if(wmvc_show_data('field_type', $field) == "NUMBER") {
355 $rule_required .= "min_number";
356 } else {
357 $rule_required .= "min_length";
358 }
359 $rule_required .= "[".wmvc_show_data('min_length', $field)."]";
360
361 }
362
363 if(!empty(wmvc_show_data('max_length', $field))) {
364 if(!empty($rule_required)) {
365 $rule_required .= '|';
366 }
367 if(wmvc_show_data('field_type', $field) == "NUMBER") {
368 $rule_required .= "max_number";
369 } else {
370 $rule_required .= "max_length";
371 }
372 $rule_required .= "[".wmvc_show_data('max_length', $field)."]";
373 }
374
375 /* clear rules, because hidden field */
376 if(isset($_POST['category_id']) && !empty($_POST['category_id'])) {
377 if(wdk_depend_is_hidden_field($field->idfield, intval($_POST['category_id']))) {
378 $rule_required = '';
379 }
380 }
381
382 $rules[] =
383 array(
384 'field' => 'field_'.$field->idfield,
385 'label' => $field->field_label,
386 'rules' => $rule_required
387 );
388
389 if(isset($this->data['db_data']['field_'.$field->idfield.'_'.$field->field_type]))
390 $this->data['db_data']['field_'.$field->idfield] =
391 $this->data['db_data']['field_'.$field->idfield.'_'.$field->field_type];
392 }
393
394 $this->form->add_error_message('wdk_gps_single', __('Gps field is not valid, should be like xx.xxxxxx (between -180 and 180)', 'wpdirectorykit'));
395 if($this->form->run($rules))
396 {
397 // Check _wpnonce
398 check_admin_referer( 'wdk-listing-edit_'.$listing_post_id, '_wpnonce' );
399
400 $data = $this->listing_m->prepare_data(wdk_get_post(), $rules, FALSE);
401 // Save standard wp post
402
403 if(!isset($data['post_content'])) {
404 $data['post_content'] = '';
405 }
406
407 // Create post object
408 $listing_post = array(
409 'ID' => $listing_post_id,
410 'post_type' => 'wdk-listing',
411 'post_title' => wp_strip_all_tags( $data['post_title'] ),
412 'post_content' => $data['post_content'],
413 'post_status' => 'publish',
414 'post_author' => get_current_user_id()
415 );
416
417 // Insert the post into the database
418 $id = wp_insert_post( $listing_post );
419
420 // Save our main listing data
421
422 $listing_data = array('post_id' => $id);
423
424 $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',
425 'user_id_editor', 'listing_parent_post_id','listing_related_ids');
426 foreach($listing_data_fields as $field_name)
427 {
428 $listing_data[$field_name] = $data[$field_name];
429 }
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'){
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