/**
  * Delete a product attribute
  *
  * @param int $idAttribute The attribute ID
  * @param int $idProduct The product ID
  *
  * @return array
  */
 public function ajaxProcessDeleteProductAttribute($idAttribute, $idProduct)
 {
     if (!\CombinationCore::isFeatureActive()) {
         return false;
     }
     if ($idProduct && \ValidateCore::isUnsignedId($idProduct) && \ValidateCore::isLoadedObject($product = new \ProductCore($idProduct))) {
         if (($depends_on_stock = \StockAvailableCore::dependsOnStock($idProduct)) && \StockAvailableCore::getQuantityAvailableByProduct($idProduct, $idAttribute)) {
             return array('status' => 'error', 'message' => 'It is not possible to delete a combination while it still has some quantities in the Advanced Stock Management. You must delete its stock first.');
         } else {
             $product->deleteAttributeCombination((int) $idAttribute);
             $product->checkDefaultAttributes();
             \ToolsCore::clearColorListCache((int) $product->id);
             if (!$product->hasAttributes()) {
                 $product->cache_default_attribute = 0;
                 $product->update();
             } else {
                 \ProductCore::updateDefaultAttribute($idProduct);
             }
             if ($depends_on_stock && !\StockCore::deleteStockByIds($idProduct, $idAttribute)) {
                 return array('status' => 'error', 'message' => 'Error while deleting the stock');
             } else {
                 return array('status' => 'ok', 'message' => 'Successful deletion');
             }
         }
     } else {
         return array('status' => 'error', 'message' => 'You cannot delete this attribute.');
     }
 }
Пример #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
 /**
  * processProductAttribute
  * Update a combination
  *
  * @param object $product
  * @param array $combinationValues the posted values
  *
  * @return \AdminProductsControllerCore instance
  */
 public function processProductAttribute($product, $combinationValues)
 {
     $id_product_attribute = (int) $combinationValues['id_product_attribute'];
     $images = [];
     if (!\CombinationCore::isFeatureActive() || $id_product_attribute == 0) {
         return;
     }
     if (!isset($combinationValues['attribute_wholesale_price'])) {
         $combinationValues['attribute_wholesale_price'] = 0;
     }
     if (!isset($combinationValues['attribute_price_impact'])) {
         $combinationValues['attribute_price_impact'] = 0;
     }
     if (!isset($combinationValues['attribute_weight_impact'])) {
         $combinationValues['attribute_weight_impact'] = 0;
     }
     if (!isset($combinationValues['attribute_ecotax'])) {
         $combinationValues['attribute_ecotax'] = 0;
     }
     if (isset($combinationValues['attribute_default']) && $combinationValues['attribute_default'] == 1) {
         $product->deleteDefaultAttributes();
     }
     if (!empty($combinationValues['id_image_attr'])) {
         $images = $combinationValues['id_image_attr'];
     }
     $product->updateAttribute($id_product_attribute, $combinationValues['attribute_wholesale_price'], $combinationValues['attribute_price'] * $combinationValues['attribute_price_impact'], $combinationValues['attribute_weight'] * $combinationValues['attribute_weight_impact'], $combinationValues['attribute_unity'] * $combinationValues['attribute_unit_impact'], $combinationValues['attribute_ecotax'], $images, $combinationValues['attribute_reference'], $combinationValues['attribute_ean13'], isset($combinationValues['attribute_default']) && $combinationValues['attribute_default'] == 1, isset($combinationValues['attribute_location']) ? $combinationValues['attribute_location'] : null, $combinationValues['attribute_upc'], $combinationValues['attribute_minimal_quantity'], $combinationValues['available_date_attribute'], false, array(), $combinationValues['attribute_isbn']);
     \StockAvailableCore::setProductDependsOnStock((int) $product->id, $product->depends_on_stock, null, $id_product_attribute);
     \StockAvailableCore::setProductOutOfStock((int) $product->id, $product->out_of_stock, null, $id_product_attribute);
     $product->checkDefaultAttributes();
     if (isset($combinationValues['attribute_default']) && $combinationValues['attribute_default'] == 1) {
         \ProductCore::updateDefaultAttribute((int) $product->id);
         if (isset($id_product_attribute)) {
             $product->cache_default_attribute = (int) $id_product_attribute;
         }
         if ($available_date = $combinationValues['available_date_attribute']) {
             $product->setAvailableDate($available_date);
         } else {
             $product->setAvailableDate();
         }
     }
     $this->processQuantityUpdate($product, $combinationValues['attribute_quantity'], $id_product_attribute);
 }