public function processAllTextShortcodes($post_id, $tpl_html, $max_length = false, $ItemObj = false) { // get item object $listing_id = WPLE_ListingQueryHelper::getListingIDFromPostID($post_id); $item = ListingsModel::getItem($listing_id); // main content - [[product_content]] (unless updating title when saving product...) if (!isset($_REQUEST['action']) || $_REQUEST['action'] != 'editpost' || isset($_REQUEST['wpl_ebay_revise_on_update']) || isset($_REQUEST['wpl_ebay_relist_on_update'])) { $tpl_html = $this->processMainContentShortcode($post_id, $tpl_html, $item); } // product excerpt $product_id = $item['parent_id'] ? $item['parent_id'] : $item['post_id']; // maybe use parent post_id (for split variations) $tpl_html = str_replace('[[product_excerpt]]', WPLE_ListingQueryHelper::getRawPostExcerpt($product_id), $tpl_html); $tpl_html = str_replace('[[product_excerpt_nl2br]]', nl2br(WPLE_ListingQueryHelper::getRawPostExcerpt($product_id)), $tpl_html); $tpl_html = str_replace('[[product_additional_content]]', wpautop(WPLE_ListingQueryHelper::getRawPostExcerpt($product_id)), $tpl_html); $tpl_html = str_replace('[[product_additional_content_nl2br]]', nl2br(WPLE_ListingQueryHelper::getRawPostExcerpt($product_id)), $tpl_html); // product price $item_price = $item['price']; if ($ItemObj && $ItemObj->StartPrice) { $item_price = $ItemObj->StartPrice->value; } if ($ItemObj && $ItemObj->Variations) { $item_price = $ItemObj->Variations->Variation[0]->StartPrice; } $tpl_html = str_replace('[[product_price]]', number_format_i18n(floatval($item_price), 2), $tpl_html); $tpl_html = str_replace('[[product_price_raw]]', $item_price, $tpl_html); // product_category $tpl_html = str_replace('[[product_category]]', ProductWrapper::getProductCategoryName($post_id), $tpl_html); // SKU $tpl_html = str_replace('[[product_sku]]', ProductWrapper::getSKU($post_id), $tpl_html); // weight $tpl_html = str_replace('[[product_weight]]', ProductWrapper::getWeight($post_id, true), $tpl_html); // dimensions $dimensions = ProductWrapper::getDimensions($post_id); $width = @$dimensions['width'] . ' ' . @$dimensions['width_unit']; $height = @$dimensions['height'] . ' ' . @$dimensions['height_unit']; $length = @$dimensions['length'] . ' ' . @$dimensions['length_unit']; $tpl_html = str_replace('[[product_width]]', $width, $tpl_html); $tpl_html = str_replace('[[product_height]]', $height, $tpl_html); $tpl_html = str_replace('[[product_length]]', $length, $tpl_html); // attributes $tpl_html = $this->processAttributeShortcodes($post_id, $tpl_html, $max_length); // custom meta $tpl_html = $this->processCustomMetaShortcodes($post_id, $tpl_html, $max_length); return $tpl_html; }
public function buildShipping($id, $item, $post_id, $profile_details, $listing, $isVariation) { // no shipping options for classified ads if ($item->ListingType == 'LeadGeneration') { return $item; } // handle flat and calc shipping WPLE()->logger->info('shipping_service_type: ' . $profile_details['shipping_service_type']); // $isFlat = $profile_details['shipping_service_type'] != 'calc' ? true : false; // $isCalc = $profile_details['shipping_service_type'] == 'calc' ? true : false; // if this is a single split variation, use variation post_id instead of parent post_id for weight and dimensions $actual_post_id = $isVariation ? $listing['post_id'] : $post_id; // handle flat and calc shipping (new version) $service_type = $profile_details['shipping_service_type']; if ($service_type == '') { $service_type = 'Flat'; } if ($service_type == 'flat') { $service_type = 'Flat'; } if ($service_type == 'calc') { $service_type = 'Calculated'; } $isFlatLoc = in_array($service_type, array('Flat', 'FreightFlat', 'FlatDomesticCalculatedInternational')) ? true : false; $isFlatInt = in_array($service_type, array('Flat', 'FreightFlat', 'CalculatedDomesticFlatInternational')) ? true : false; $hasWeight = in_array($service_type, array('Calculated', 'FreightFlat', 'FlatDomesticCalculatedInternational', 'CalculatedDomesticFlatInternational')) ? true : false; $isCalcLoc = !$isFlatLoc; $isCalcInt = !$isFlatInt; $shippingDetails = new ShippingDetailsType(); $shippingDetails->ShippingType = $service_type; WPLE()->logger->info('shippingDetails->ShippingType: ' . $shippingDetails->ShippingType); // local shipping options $localShippingOptions = $profile_details['loc_shipping_options']; WPLE()->logger->debug('localShippingOptions: ' . print_r($localShippingOptions, 1)); $pr = 1; $localShippingServices = array(); foreach ($localShippingOptions as $opt) { $price = $this->getDynamicShipping($opt['price'], $post_id); $add_price = $this->getDynamicShipping($opt['add_price'], $post_id); if ($price == '') { $price = 0; } if ($opt['service_name'] == '') { continue; } $ShippingServiceOptions = new ShippingServiceOptionsType(); $ShippingServiceOptions->setShippingService($opt['service_name']); $ShippingServiceOptions->setShippingServicePriority($pr); // set shipping costs for flat services if ($isFlatLoc) { $ShippingServiceOptions->setShippingServiceCost($price); // FreeShipping is only allowed for the first shipping service if ($price == 0 && $pr == 1) { $ShippingServiceOptions->setFreeShipping(true); } // price for additonal items if (trim($add_price) == '') { $ShippingServiceOptions->setShippingServiceAdditionalCost($price); } else { $ShippingServiceOptions->setShippingServiceAdditionalCost($add_price); } } else { // enable FreeShipping option for calculated shipping services if specified in profile (or product meta) $free_shipping_enabled = isset($profile_details['shipping_loc_enable_free_shipping']) ? $profile_details['shipping_loc_enable_free_shipping'] : false; // $free_shipping_enabled = $free_shipping_enabled || get_post_meta( $post_id, '_ebay_shipping_loc_enable_free_shipping', true ); if ($free_shipping_enabled && $pr == 1) { $ShippingServiceOptions->setFreeShipping(true); } } $localShippingServices[] = $ShippingServiceOptions; $pr++; $EbayShippingModel = new EbayShippingModel(); $lastShippingCategory = $EbayShippingModel->getShippingCategoryByServiceName($opt['service_name']); WPLE()->logger->debug('ShippingCategory: ' . print_r($lastShippingCategory, 1)); } // apply filter and set shipping services $localShippingServices = apply_filters('wple_local_shipping_services', $localShippingServices, $post_id, $actual_post_id, $listing); $shippingDetails->setShippingServiceOptions($localShippingServices, null); // $intlShipping = array( // 'UK_RoyalMailAirmailInternational' => array ( // 'Europe' => 1, // 'Worldwide' => 1.50 // ), // 'UK_RoyalMailInternationalSignedFor' => array ( // 'Europe' => 5, // ) // ); $intlShipping = $profile_details['int_shipping_options']; WPLE()->logger->debug('intlShipping: ' . print_r($intlShipping, 1)); $pr = 1; $shippingInternational = array(); foreach ($intlShipping as $opt) { // foreach ($opt as $loc=>$price) { $price = $this->getDynamicShipping($opt['price'], $post_id); $add_price = $this->getDynamicShipping($opt['add_price'], $post_id); // if ( ( $price == '' ) || ( $opt['service_name'] == '' ) ) continue; if ($price == '') { $price = 0; } if ($opt['location'] == '') { continue; } if ($opt['service_name'] == '') { continue; } $InternationalShippingServiceOptions = new InternationalShippingServiceOptionsType(); $InternationalShippingServiceOptions->setShippingService($opt['service_name']); $InternationalShippingServiceOptions->setShippingServicePriority($pr); // $InternationalShippingServiceOptions->setShipToLocation( $opt['location'] ); if (is_array($opt['location'])) { foreach ($opt['location'] as $location) { $InternationalShippingServiceOptions->addShipToLocation($location); } } else { $InternationalShippingServiceOptions->setShipToLocation($opt['location']); } $InternationalShippingServiceOptions->setShipToLocation($opt['location']); // set shipping costs for flat services if ($isFlatInt) { $InternationalShippingServiceOptions->setShippingServiceCost($price); if (trim($add_price) == '') { $InternationalShippingServiceOptions->setShippingServiceAdditionalCost($price); } else { $InternationalShippingServiceOptions->setShippingServiceAdditionalCost($add_price); } } $shippingInternational[] = $InternationalShippingServiceOptions; $pr++; // } } // filter international shipping services $shippingInternational = apply_filters('wple_international_shipping_services', $shippingInternational, $post_id, $actual_post_id, $listing); // only set international shipping if $intlShipping array contains one or more valid items if (isset($intlShipping[0]['service_name']) && $intlShipping[0]['service_name'] != '') { $shippingDetails->setInternationalShippingServiceOption($shippingInternational, null); } // set CalculatedShippingRate if ($isCalcLoc || $isCalcInt) { $calculatedShippingRate = new CalculatedShippingRateType(); $calculatedShippingRate->setOriginatingPostalCode($profile_details['postcode']); // set ShippingPackage if calculated shipping is used if ($isCalcInt) { $calculatedShippingRate->setShippingPackage($profile_details['shipping_package']); } if ($isCalcLoc) { $calculatedShippingRate->setShippingPackage($profile_details['shipping_package']); } if ($isCalcLoc) { $calculatedShippingRate->setPackagingHandlingCosts(self::dbSafeFloatval(@$profile_details['PackagingHandlingCosts'])); } if ($isCalcInt) { // $calculatedShippingRate->setPackagingHandlingCosts( self::dbSafeFloatval( @$profile_details['PackagingHandlingCosts'] ) ); $calculatedShippingRate->setInternationalPackagingHandlingCosts(self::dbSafeFloatval(@$profile_details['InternationalPackagingHandlingCosts'])); } list($weight_major, $weight_minor) = ProductWrapper::getEbayWeight($actual_post_id); $calculatedShippingRate->setWeightMajor(self::dbSafeFloatval($weight_major)); $calculatedShippingRate->setWeightMinor(self::dbSafeFloatval($weight_minor)); $dimensions = ProductWrapper::getDimensions($actual_post_id); if (trim(@$dimensions['width']) != '') { $calculatedShippingRate->setPackageWidth($dimensions['width']); } if (trim(@$dimensions['length']) != '') { $calculatedShippingRate->setPackageLength($dimensions['length']); } if (trim(@$dimensions['height']) != '') { $calculatedShippingRate->setPackageDepth($dimensions['height']); } // debug // $weight = ProductWrapper::getWeight( $actual_post_id ) ; // WPLE()->logger->info('weight: '.print_r($weight,1)); // WPLE()->logger->info('dimensions: '.print_r($dimensions,1)); $shippingDetails->setCalculatedShippingRate($calculatedShippingRate); } // handle option to always send weight and dimensions if (get_option('wplister_send_weight_and_size', 'default') == 'always') { $hasWeight = ProductWrapper::getWeight($actual_post_id); } // set ShippingPackageDetails if ($hasWeight) { $shippingPackageDetails = new ShipPackageDetailsType(); // set ShippingPackage if calculated shipping is used if ($isCalcInt) { $shippingPackageDetails->setShippingPackage($profile_details['shipping_package']); } if ($isCalcLoc) { $shippingPackageDetails->setShippingPackage($profile_details['shipping_package']); } list($weight_major, $weight_minor) = ProductWrapper::getEbayWeight($actual_post_id); $shippingPackageDetails->setWeightMajor(self::dbSafeFloatval($weight_major)); $shippingPackageDetails->setWeightMinor(self::dbSafeFloatval($weight_minor)); $dimensions = ProductWrapper::getDimensions($actual_post_id); if (trim(@$dimensions['width']) != '') { $shippingPackageDetails->setPackageWidth($dimensions['width']); } if (trim(@$dimensions['length']) != '') { $shippingPackageDetails->setPackageLength($dimensions['length']); } if (trim(@$dimensions['height']) != '') { $shippingPackageDetails->setPackageDepth($dimensions['height']); } // debug // $weight = ProductWrapper::getWeight( $actual_post_id ) ; // WPLE()->logger->info('weight: '.print_r($weight,1)); // WPLE()->logger->info('dimensions: '.print_r($dimensions,1)); $item->setShippingPackageDetails($shippingPackageDetails); } // set local shipping discount profile if ($isFlatLoc) { $local_profile_id = isset($profile_details['shipping_loc_flat_profile']) ? $profile_details['shipping_loc_flat_profile'] : false; if ($custom_profile_id = get_post_meta($post_id, '_ebay_shipping_loc_flat_profile', true)) { $local_profile_id = $custom_profile_id; } } else { $local_profile_id = isset($profile_details['shipping_loc_calc_profile']) ? $profile_details['shipping_loc_calc_profile'] : false; if ($custom_profile_id = get_post_meta($post_id, '_ebay_shipping_loc_calc_profile', true)) { $local_profile_id = $custom_profile_id; } } if ($local_profile_id) { $shippingDetails->setShippingDiscountProfileID($local_profile_id); } // set international shipping discount profile if ($isFlatLoc) { $int_profile_id = isset($profile_details['shipping_int_flat_profile']) ? $profile_details['shipping_int_flat_profile'] : false; if ($custom_profile_id = get_post_meta($post_id, '_ebay_shipping_int_flat_profile', true)) { $int_profile_id = $custom_profile_id; } } else { $int_profile_id = isset($profile_details['shipping_int_calc_profile']) ? $profile_details['shipping_int_calc_profile'] : false; if ($custom_profile_id = get_post_meta($post_id, '_ebay_shipping_int_calc_profile', true)) { $int_profile_id = $custom_profile_id; } } if ($int_profile_id) { $shippingDetails->setInternationalShippingDiscountProfileID($int_profile_id); } // PromotionalShippingDiscount $PromotionalShippingDiscount = isset($profile_details['PromotionalShippingDiscount']) ? $profile_details['PromotionalShippingDiscount'] : false; if ($PromotionalShippingDiscount == '1') { $shippingDetails->setPromotionalShippingDiscount(true); } // InternationalPromotionalShippingDiscount $InternationalPromotionalShippingDiscount = isset($profile_details['InternationalPromotionalShippingDiscount']) ? $profile_details['InternationalPromotionalShippingDiscount'] : false; if ($InternationalPromotionalShippingDiscount == '1') { $shippingDetails->setInternationalPromotionalShippingDiscount(true); } // ShipToLocations if (is_array($ShipToLocations = maybe_unserialize($profile_details['ShipToLocations']))) { foreach ($ShipToLocations as $location) { $item->addShipToLocations($location); } } // ExcludeShipToLocations if (is_array($ExcludeShipToLocations = maybe_unserialize($profile_details['ExcludeShipToLocations']))) { foreach ($ExcludeShipToLocations as $location) { $shippingDetails->addExcludeShipToLocation($location); } } // global shipping if (@$profile_details['global_shipping'] == 1) { $shippingDetails->setGlobalShipping(true); // available since api version 781 } if (get_post_meta($post_id, '_ebay_global_shipping', true) == 'yes') { $shippingDetails->setGlobalShipping(true); } // store pickup if (@$profile_details['store_pickup'] == 1) { $item->PickupInStoreDetails = new PickupInStoreDetailsType(); $item->PickupInStoreDetails->setEligibleForPickupInStore(true); } // Payment Instructions if (trim(@$profile_details['payment_instructions']) != '') { $shippingDetails->setPaymentInstructions(nl2br($profile_details['payment_instructions'])); } if (trim(get_post_meta($post_id, '_ebay_payment_instructions', true)) != '') { $shippingDetails->setPaymentInstructions(nl2br(get_post_meta($post_id, '_ebay_payment_instructions', true))); } // COD cost if (isset($profile_details['cod_cost']) && trim($profile_details['cod_cost'])) { $shippingDetails->setCODCost(str_replace(',', '.', $profile_details['cod_cost'])); } // check if we have local pickup only if (count($localShippingOptions) == 1 && $lastShippingCategory == 'PICKUP') { $item->setShipToLocations('None'); $item->setDispatchTimeMax(null); WPLE()->logger->info('PICKUP ONLY mode'); // don't set ShippingDetails for pickup-only in UK! if ($item->Site != 'UK') { $item->setShippingDetails($shippingDetails); } } else { $item->setShippingDetails($shippingDetails); } // force AutoPay off for Freight shipping if ($service_type == 'FreightFlat') { $item->setAutoPay(0); } return $item; }