예제 #1
0
 public function fix_categories($charge = false)
 {
     global $wpdb;
     // Delete fee information for categories that no longer exist.
     $wpdb->query($wpdb->prepare("DELETE lf FROM {$wpdb->prefix}wpbdp_listing_fees lf WHERE lf.listing_id = %d AND lf.category_id NOT IN (SELECT tt.term_id FROM {$wpdb->term_taxonomy} tt WHERE tt.taxonomy=%s)", $this->id, WPBDP_CATEGORY_TAX));
     $terms = wp_get_post_terms($this->id, WPBDP_CATEGORY_TAX, 'fields=ids');
     // Remove listing information for categories that no longer apply to the listing.
     $removed_cats = array_diff(array_keys($this->get_categories('current')), $terms);
     if ($removed_cats) {
         $cats = implode(',', $removed_cats);
         $wpdb->query($wpdb->prepare("DELETE lf FROM {$wpdb->prefix}wpbdp_listing_fees lf WHERE lf.listing_id = %d AND lf.category_id IN ({$cats})", $this->id));
     }
     // Assign a default fee for categories without a fee.
     foreach ($terms as $category_id) {
         $category_info = $this->get_category_info($category_id);
         if ($category_info && 'pending' == $category_info->status) {
             $this->add_category($category_id, $category_info->fee, false, null, true);
         } elseif (!$category_info) {
             $fee_options = wpbdp_get_fees_for_category($category_id);
             if ($charge) {
                 $payment = new WPBDP_Payment(array('listing_id' => $this->id));
                 $payment->add_category_fee_item($category_id, $fee_options[0]);
                 $payment->set_status(WPBDP_Payment::STATUS_COMPLETED);
                 $payment->save();
             } else {
                 $this->add_category($category_id, $fee_options[0]);
             }
         }
     }
 }
 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();
 }