/** * Get product pack items * * @param int $id_product * @param int $id_lang */ public function getItems($id_product, $id_lang) { $packItems = \PackCore::getItems($id_product, $id_lang); foreach ($packItems as $k => $packItem) { $cover = $packItem->id_pack_product_attribute ? \Product::getCombinationImageById($packItem->id_pack_product_attribute, $id_lang) : \Product::getCover($packItem->id); $packItem->image = \Context::getContext()->link->getImageLink($packItem->link_rewrite, $cover ? $cover['id_image'] : '', 'home_default'); } return $packItems; }
public function duplicateProduct($productId, $namePattern = 'copy of %s') { //TODO : use the $namePattern var to input translated version of 'copy of %s', if translation requested. $product = new \ProductCore($productId); if (!\ValidateCore::isLoadedObject($product)) { throw new \Exception('AdminProductDataUpdater->duplicateProduct() received an unknown ID.', 5005); } $id_product_old = $product->id; if (empty($product->price) && \ShopCore::getContext() == \ShopCore::CONTEXT_GROUP) { $shops = \ShopGroupCore::getShopsFromGroup(\ShopCore::getContextShopGroupID()); foreach ($shops as $shop) { if ($product->isAssociatedToShop($shop['id_shop'])) { $product_price = new \ProductCore($id_product_old, false, null, $shop['id_shop']); $product->price = $product_price->price; } } } unset($product->id); unset($product->id_product); $product->indexed = 0; $product->active = 0; // change product name to prefix it foreach ($product->name as $langKey => $oldName) { if (!preg_match('/^' . str_replace('%s', '.*', preg_quote($namePattern, '/') . '$/'), $oldName)) { $newName = sprintf($namePattern, $oldName); if (mb_strlen($newName, 'UTF-8') <= 127) { $product->name[$langKey] = $newName; } } } if ($product->add() && \CategoryCore::duplicateProductCategories($id_product_old, $product->id) && \ProductCore::duplicateSuppliers($id_product_old, $product->id) && ($combination_images = \ProductCore::duplicateAttributes($id_product_old, $product->id)) !== false && \GroupReductionCore::duplicateReduction($id_product_old, $product->id) && \ProductCore::duplicateAccessories($id_product_old, $product->id) && \ProductCore::duplicateFeatures($id_product_old, $product->id) && \ProductCore::duplicateSpecificPrices($id_product_old, $product->id) && \PackCore::duplicate($id_product_old, $product->id) && \ProductCore::duplicateCustomizationFields($id_product_old, $product->id) && \ProductCore::duplicateTags($id_product_old, $product->id) && \ProductCore::duplicateDownload($id_product_old, $product->id)) { if ($product->hasAttributes()) { \ProductCore::updateDefaultAttribute($product->id); } if (!\Image::duplicateProductImages($id_product_old, $product->id, $combination_images)) { throw new DataUpdateException('product', $id_product_old, 'An error occurred while copying images.', 5008); } else { $this->hookDispatcher->dispatchForParameters('actionProductAdd', array('id_product' => (int) $product->id, 'product' => $product)); if (in_array($product->visibility, array('both', 'search')) && \Configuration::get('PS_SEARCH_INDEXATION')) { \SearchCore::indexation(false, $product->id); } return $product->id; } } else { throw new \Exception('An error occurred while creating an object.', 5009); } }
/** * @param $iIdProduct * @param $aAccessories * @return bool */ public static function changeProductsPacks($iIdProduct, $aProductsPacks) { $bResult = true; $aProductsID = $aProductsCleaned = array(); foreach ($aProductsPacks as $sProduct) { preg_match('#([0-9A-Za-z]*)\\(([0-9]*)\\)#', $sProduct, $matches); $aProductsID[isset($matches[1]) ? $matches[1] : $sProduct] = (int) (isset($matches[2]) ? $matches[2] : 1); $aProductsCleaned[] = isset($matches[1]) ? $matches[1] : $sProduct; } $aProductsPacks = NowProduct::getProductsLight($aProductsCleaned); foreach ($aProductsPacks as $aProductPack) { // On récupère la bonne quantité $aProductPack['pack_quantity'] = 1; if (array_key_exists($aProductPack['id_product'], $aProductsID)) { $aProductPack['pack_quantity'] = (int) $aProductsID[$aProductPack['id_product']]; } elseif (array_key_exists($aProductPack['reference'], $aProductsID)) { $aProductPack['pack_quantity'] = (int) $aProductsID[$aProductPack['reference']]; } $bResult &= PackCore::addItem($iIdProduct, $aProductPack['id_product'], $aProductPack['pack_quantity']); } return $bResult; }
/** * Is this product in a pack? * If $id_product_attribute specified, then will restrict search on the given combination, * else this method will match a product if at least one of all its combination is in a pack. * * @param \ProductCore $product * @param integer $id_product_attribute Optional combination of the product * @return boolean */ public function isPacked($product, $id_product_attribute = false) { return \PackCore::isPacked($product->id, $id_product_attribute); }