From ba4c954ab8b18a6530077e1f981a9ffade371c43 Mon Sep 17 00:00:00 2001 From: vSchoener Date: Thu, 22 Dec 2011 18:24:38 +0000 Subject: [PATCH] // Fixed bug #PSTEST-136, Attachement works correctly after any changements --- classes/Attachment.php | 26 ++++++++++++++++++++++--- controllers/front/ProductController.php | 8 ++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/classes/Attachment.php b/classes/Attachment.php index fc76a6954..5d2fbbb3e 100644 --- a/classes/Attachment.php +++ b/classes/Attachment.php @@ -87,21 +87,41 @@ class AttachmentCore extends ObjectModel ); } + /** + * @static + * @param $id_product + * @return bool + */ + public static function deleteProductAttachments($id_product) + { + return Db::getInstance()->execute(' + DELETE FROM '._DB_PREFIX_.'product_attachment + WHERE id_product = '.(int)$id_product); + } + + /** + * @static + * @param $id_product + * @param $array + * @return bool + */ public static function attachToProduct($id_product, $array) { - $result1 = Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'product_attachment WHERE id_product = '.(int)$id_product); + $result1 = Attachment::deleteProductAttachments($id_product); if (is_array($array)) { $ids = array(); foreach ($array as $id_attachment) - $ids[] = '('.(int)$id_product.','.(int)$id_attachment.')'; + if ((int)$id_attachment > 0) + $ids[] = '('.(int)$id_product.','.(int)$id_attachment.')'; Db::getInstance()->execute(' UPDATE '._DB_PREFIX_.'product SET cache_has_attachments = '.(count($ids) ? '1' : '0').' WHERE id_product = '.(int)$id_product.' LIMIT 1 '); - return ($result1 && Db::getInstance()->execute(' + + return ($result1 && count($ids) && Db::getInstance()->execute(' INSERT INTO '._DB_PREFIX_.'product_attachment (id_product, id_attachment) VALUES '.implode(',', $ids)) ); diff --git a/controllers/front/ProductController.php b/controllers/front/ProductController.php index dd34f3144..d767f7fa3 100644 --- a/controllers/front/ProductController.php +++ b/controllers/front/ProductController.php @@ -105,7 +105,7 @@ class ProductControllerCore extends FrontController { if (!$this->errors) { - // Assign to the tempate the id of the virtuale product. "0" if the product is not downloadable. + // Assign to the template the id of the virtual product. "0" if the product is not downloadable. $this->context->smarty->assign('virtual', ProductDownload::getIdFromIdProduct((int)$this->product->id)); // If the product is not active, it's the admin preview mode @@ -129,7 +129,7 @@ class ProductControllerCore extends FrontController $this->textRecord($this->product, $this->context->cart); $this->formTargetFormat(); } - else if (Tools::getIsset('deletePicture') && !$this->context->cart->deleteCustomizationToProduct((int)$this->product->id, (int)Tools::getValue('deletePicture'))) + else if (Tools::getIsset('deletePicture') && !$this->context->cart->deletePictureToProduct($this->product->id, Tools::getValue('deletePicture'))) $this->errors[] = Tools::displayError('An error occurred while deleting the selected picture'); $files = $this->context->cart->getProductCustomization($this->product->id, Product::CUSTOMIZE_FILE, true); @@ -470,7 +470,7 @@ class ProductControllerCore extends FrontController $product_picture_width = (int)Configuration::get('PS_PRODUCT_PICTURE_WIDTH'); $product_picture_height = (int)Configuration::get('PS_PRODUCT_PICTURE_HEIGHT'); - if ($error || (!$tmp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmp_name))) + if ($error || (!$tmp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS') || !move_uploaded_file($file['tmp_name'], $tmp_name))) return false; /* Original file */ else if (!imageResize($tmp_name, _PS_UPLOAD_DIR_.$file_name)) @@ -485,7 +485,7 @@ class ProductControllerCore extends FrontController // Store customization in database $cart->addPictureToProduct($this->product->id, $indexes[$field_name], Product::CUSTOMIZE_FILE, $file_name); } - @unlink($tmp_name); + unlink($tmp_name); } return true; }