protected function step_save() { $listing = $this->state->editing ? WPBDP_Listing::get($this->state->listing_id) : WPBDP_Listing::create($this->state); $listing->set_field_values($this->state->fields); $listing->set_images($this->state->images); $listing->set_thumbnail_id($this->state->thumbnail_id); if (!$this->state->editing) { // Generate payment for the listing. $payment = new WPBDP_Payment(array('listing_id' => $listing->get_id())); if (!$this->state->editing) { $payment->tag('initial'); } foreach ($this->state->categories as $cat_id => $fee_id) { $category_info = $listing->get_category_info($cat_id); if (!$category_info) { $fee = wpbdp_get_fee($fee_id); if (!$fee) { continue; } $payment->add_item($this->state->autorenew_fees ? 'recurring_fee' : 'fee', $fee->amount, sprintf(_x('Fee "%s" for category "%s"%s', 'listings', 'WPBDM'), $fee->label, wpbdp_get_term_name($cat_id), $this->state->autorenew_fees ? ' ' . _x('(recurring)', 'listings', 'WPBDM') : ''), array('fee_id' => $fee_id, 'fee_days' => $fee->days, 'fee_images' => $fee->images), $cat_id, $fee_id); } } if ($this->state->upgrade_to_sticky) { $payment->add_item('upgrade', wpbdp_get_option('featured-price'), _x('Listing upgrade to featured', 'submit', 'WPBDM')); } $payment->set_submit_state_id($this->state->id); if (current_user_can('administrator')) { $payment->set_status(WPBDP_Payment::STATUS_COMPLETED); } $payment->save(); $this->state->listing_id = $listing->get_id(); $this->state->payment_id = $payment->get_id(); } do_action_ref_array('wpbdp_listing_form_extra_sections_save', array(&$this->state)); $listing->save(); $listing->set_post_status($this->state->editing ? wpbdp_get_option('edit-post-status') : wpbdp_get_option('new-post-status')); $this->state->advance(false); // This step is 'invisible'. return $this->dispatch(); }
private function import_row($data) { global $wpdb; global $wpbdp; if ($this->settings['test-import']) { return; } extract($data); $state = (object) array('fields' => array(), 'images' => array(), 'categories' => array()); $errors = array(); // Create categories. foreach ($categories as &$c) { if ($c['term_id']) { $state->categories[] = intval($c['term_id']); continue; } if ($t = term_exists(str_replace('&', '&', $c['name']), WPBDP_CATEGORY_TAX)) { $c['term_id'] = $t['term_id']; } else { if ($t = wp_insert_term(str_replace('&', '&', $c['name']), WPBDP_CATEGORY_TAX)) { $c['term_id'] = $t['term_id']; } else { $errors[] = sprintf(_x('Could not create listing category "%s"', 'admin csv-import', 'WPBDM'), $c['name']); } } if ($c['term_id']) { $state->categories[] = intval($c['term_id']); } } $listing_id = 0; // Support sequence_id. if ($meta['sequence_id']) { $listing_id = intval($wpdb->get_var($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s LIMIT 1", '_wpbdp[import_sequence_id]', $meta['sequence_id']))); if (WPBDP_POST_TYPE != get_post_type($listing_id)) { $listing_id = 0; } } // Handle fields. foreach ($fields as $field_id => $field_data) { $f = wpbdp_get_form_field($field_id); if ('image' != $f->get_field_type_id()) { continue; } $img = trim($field_data); if (!$img) { continue; } $media_id = $this->upload_image($img); $fields[$field_id] = $media_id ? $media_id : ''; } $state->fields = $fields; // Handle images. foreach ($data['images'] as $filename) { if ($img_id = $this->upload_image($filename)) { $state->images[] = $img_id; } } // Insert or update listing. if ($listing_id) { $listing = WPBDP_Listing::get($listing_id); $listing->update($state); $listing->set_post_status(wpbdp_get_option('edit-post-status')); } else { $listing = WPBDP_Listing::create($state); $listing->set_field_values($state->fields); $listing->set_images($state->images); $listing->set_categories($state->categories); $listing->set_post_status($this->settings['post-status']); $listing->save(); } // Set username. if ($u = get_user_by('login', $meta['username'])) { wp_update_post(array('ID' => $listing->get_id(), 'post_author' => $u->ID)); } // Set featured level. if ($meta['featured_level']) { if ($l = $wpbdp->listings->upgrades->get($meta['featured_level'])) { $wpbdp->listings->upgrades->set_sticky($listing->get_id(), $l->id); } } // Create permalink. $post = get_post($listing->get_id()); wp_update_post(array('ID' => $post->ID, 'post_name' => wp_unique_post_slug(sanitize_title($post->post_title), $post->ID, $post->post_status, $post->post_type, $post->post_parent))); // Update expiration dates. foreach ($categories as $c) { if (!$c['expires_on']) { continue; } $wpdb->update($wpdb->prefix . 'wpbdp_listing_fees', array('expires_on' => $c['expires_on']), array('category_id' => $c['term_id'], 'listing_id' => $listing->get_id())); } // Update sequence_id. if ($meta['sequence_id']) { update_post_meta($listing->get_id(), '_wpbdp[import_sequence_id]', $meta['sequence_id']); } if ($errors) { $error = new WP_Error(); foreach ($errors as $e) { $error->add('listing-add-error', $e); } return $error; } return $listing->get_id(); }