예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 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);
     }
 }
예제 #3
0
 /**
  * @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;
 }
예제 #4
0
 /**
  * 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);
 }