Created
May 13, 2017 14:18
-
-
Save meminuygur/2da53af0bece87b8ae1eeef2bf29d8d1 to your computer and use it in GitHub Desktop.
magento disabled deleteaction
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Magento | |
* | |
* NOTICE OF LICENSE | |
* | |
* This source file is subject to the Open Software License (OSL 3.0) | |
* that is bundled with this package in the file LICENSE.txt. | |
* It is also available through the world-wide-web at this URL: | |
* http://opensource.org/licenses/osl-3.0.php | |
* If you did not receive a copy of the license and are unable to | |
* obtain it through the world-wide-web, please send an email | |
* to [email protected] so we can send you a copy immediately. | |
* | |
* DISCLAIMER | |
* | |
* Do not edit or add to this file if you wish to upgrade Magento to newer | |
* versions in the future. If you wish to customize Magento for your | |
* needs please refer to http://www.magento.com for more information. | |
* | |
* @category Mage | |
* @package Mage_Adminhtml | |
* @copyright Copyright (c) 2006-2017 X.commerce, Inc. and affiliates (http://www.magento.com) | |
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) | |
*/ | |
/** | |
* Catalog product controller | |
* | |
* @category Mage | |
* @package Mage_Adminhtml | |
* @author Magento Core Team <[email protected]> | |
*/ | |
class Mage_Adminhtml_Catalog_ProductController extends Mage_Adminhtml_Controller_Action | |
{ | |
/** | |
* The greatest value which could be stored in CatalogInventory Qty field | |
*/ | |
const MAX_QTY_VALUE = 99999999.9999; | |
/** | |
* Array of actions which can be processed without secret key validation | |
* | |
* @var array | |
*/ | |
protected $_publicActions = array('edit'); | |
protected function _construct() | |
{ | |
// Define module dependent translate | |
$this->setUsedModuleName('Mage_Catalog'); | |
} | |
/** | |
* Initialize product from request parameters | |
* | |
* @return Mage_Catalog_Model_Product | |
*/ | |
protected function _initProduct() | |
{ | |
$this->_title($this->__('Catalog')) | |
->_title($this->__('Manage Products')); | |
$productId = (int) $this->getRequest()->getParam('id'); | |
$product = Mage::getModel('catalog/product') | |
->setStoreId($this->getRequest()->getParam('store', 0)); | |
if (!$productId) { | |
if ($setId = (int) $this->getRequest()->getParam('set')) { | |
$product->setAttributeSetId($setId); | |
} | |
if ($typeId = $this->getRequest()->getParam('type')) { | |
$product->setTypeId($typeId); | |
} | |
} | |
$product->setData('_edit_mode', true); | |
if ($productId) { | |
try { | |
$product->load($productId); | |
} catch (Exception $e) { | |
$product->setTypeId(Mage_Catalog_Model_Product_Type::DEFAULT_TYPE); | |
Mage::logException($e); | |
} | |
} | |
$attributes = $this->getRequest()->getParam('attributes'); | |
if ($attributes && $product->isConfigurable() && | |
(!$productId || !$product->getTypeInstance()->getUsedProductAttributeIds())) { | |
$product->getTypeInstance()->setUsedProductAttributeIds( | |
explode(",", base64_decode(urldecode($attributes))) | |
); | |
} | |
// Required attributes of simple product for configurable creation | |
if ($this->getRequest()->getParam('popup') | |
&& $requiredAttributes = $this->getRequest()->getParam('required')) { | |
$requiredAttributes = explode(",", $requiredAttributes); | |
foreach ($product->getAttributes() as $attribute) { | |
if (in_array($attribute->getId(), $requiredAttributes)) { | |
$attribute->setIsRequired(1); | |
} | |
} | |
} | |
if ($this->getRequest()->getParam('popup') | |
&& $this->getRequest()->getParam('product') | |
&& !is_array($this->getRequest()->getParam('product')) | |
&& $this->getRequest()->getParam('id', false) === false) { | |
$configProduct = Mage::getModel('catalog/product') | |
->setStoreId(0) | |
->load($this->getRequest()->getParam('product')) | |
->setTypeId($this->getRequest()->getParam('type')); | |
/* @var $configProduct Mage_Catalog_Model_Product */ | |
$data = array(); | |
foreach ($configProduct->getTypeInstance()->getEditableAttributes() as $attribute) { | |
/* @var $attribute Mage_Catalog_Model_Resource_Eav_Attribute */ | |
if(!$attribute->getIsUnique() | |
&& $attribute->getFrontend()->getInputType()!='gallery' | |
&& $attribute->getAttributeCode() != 'required_options' | |
&& $attribute->getAttributeCode() != 'has_options' | |
&& $attribute->getAttributeCode() != $configProduct->getIdFieldName()) { | |
$data[$attribute->getAttributeCode()] = $configProduct->getData($attribute->getAttributeCode()); | |
} | |
} | |
$product->addData($data) | |
->setWebsiteIds($configProduct->getWebsiteIds()); | |
} | |
Mage::register('product', $product); | |
Mage::register('current_product', $product); | |
Mage::getSingleton('cms/wysiwyg_config')->setStoreId($this->getRequest()->getParam('store')); | |
return $product; | |
} | |
/** | |
* Create serializer block for a grid | |
* | |
* @param string $inputName | |
* @param Mage_Adminhtml_Block_Widget_Grid $gridBlock | |
* @param array $productsArray | |
* @return Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Ajax_Serializer | |
*/ | |
protected function _createSerializerBlock($inputName, Mage_Adminhtml_Block_Widget_Grid $gridBlock, $productsArray) | |
{ | |
return $this->getLayout()->createBlock('adminhtml/catalog_product_edit_tab_ajax_serializer') | |
->setGridBlock($gridBlock) | |
->setProducts($productsArray) | |
->setInputElementName($inputName) | |
; | |
} | |
/** | |
* Output specified blocks as a text list | |
*/ | |
protected function _outputBlocks() | |
{ | |
$blocks = func_get_args(); | |
$output = $this->getLayout()->createBlock('adminhtml/text_list'); | |
foreach ($blocks as $block) { | |
$output->insert($block, '', true); | |
} | |
$this->getResponse()->setBody($output->toHtml()); | |
} | |
/** | |
* Product list page | |
*/ | |
public function indexAction() | |
{ | |
$this->_title($this->__('Catalog')) | |
->_title($this->__('Manage Products')); | |
$this->loadLayout(); | |
$this->renderLayout(); | |
} | |
/** | |
* Create new product page | |
*/ | |
public function newAction() | |
{ | |
$product = $this->_initProduct(); | |
$this->_title($this->__('New Product')); | |
Mage::dispatchEvent('catalog_product_new_action', array('product' => $product)); | |
if ($this->getRequest()->getParam('popup')) { | |
$this->loadLayout('popup'); | |
} else { | |
$_additionalLayoutPart = ''; | |
if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE | |
&& !($product->getTypeInstance()->getUsedProductAttributeIds())) | |
{ | |
$_additionalLayoutPart = '_new'; | |
} | |
$this->loadLayout(array( | |
'default', | |
strtolower($this->getFullActionName()), | |
'adminhtml_catalog_product_'.$product->getTypeId() . $_additionalLayoutPart | |
)); | |
$this->_setActiveMenu('catalog/products'); | |
} | |
$this->getLayout()->getBlock('head')->setCanLoadExtJs(true); | |
$block = $this->getLayout()->getBlock('catalog.wysiwyg.js'); | |
if ($block) { | |
$block->setStoreId($product->getStoreId()); | |
} | |
$this->renderLayout(); | |
} | |
/** | |
* Product edit form | |
*/ | |
public function editAction() | |
{ | |
$productId = (int) $this->getRequest()->getParam('id'); | |
$product = $this->_initProduct(); | |
if ($productId && !$product->getId()) { | |
$this->_getSession()->addError(Mage::helper('catalog')->__('This product no longer exists.')); | |
$this->_redirect('*/*/'); | |
return; | |
} | |
$this->_title($product->getName()); | |
Mage::dispatchEvent('catalog_product_edit_action', array('product' => $product)); | |
$_additionalLayoutPart = ''; | |
if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE | |
&& !($product->getTypeInstance()->getUsedProductAttributeIds())) | |
{ | |
$_additionalLayoutPart = '_new'; | |
} | |
$this->loadLayout(array( | |
'default', | |
strtolower($this->getFullActionName()), | |
'adminhtml_catalog_product_'.$product->getTypeId() . $_additionalLayoutPart | |
)); | |
$this->_setActiveMenu('catalog/products'); | |
if (!Mage::app()->isSingleStoreMode() && ($switchBlock = $this->getLayout()->getBlock('store_switcher'))) { | |
$switchBlock->setDefaultStoreName($this->__('Default Values')) | |
->setWebsiteIds($product->getWebsiteIds()) | |
->setSwitchUrl( | |
$this->getUrl('*/*/*', array('_current'=>true, 'active_tab'=>null, 'tab' => null, 'store'=>null)) | |
); | |
} | |
$this->getLayout()->getBlock('head')->setCanLoadExtJs(true); | |
$block = $this->getLayout()->getBlock('catalog.wysiwyg.js'); | |
if ($block) { | |
$block->setStoreId($product->getStoreId()); | |
} | |
$this->renderLayout(); | |
} | |
/** | |
* WYSIWYG editor action for ajax request | |
* | |
*/ | |
public function wysiwygAction() | |
{ | |
$elementId = $this->getRequest()->getParam('element_id', md5(microtime())); | |
$storeId = $this->getRequest()->getParam('store_id', 0); | |
$storeMediaUrl = Mage::app()->getStore($storeId)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA); | |
$content = $this->getLayout()->createBlock('adminhtml/catalog_helper_form_wysiwyg_content', '', array( | |
'editor_element_id' => $elementId, | |
'store_id' => $storeId, | |
'store_media_url' => $storeMediaUrl, | |
)); | |
$this->getResponse()->setBody($content->toHtml()); | |
} | |
/** | |
* Product grid for AJAX request | |
*/ | |
public function gridAction() | |
{ | |
$this->loadLayout(); | |
$this->renderLayout(); | |
} | |
/** | |
* Get specified tab grid | |
*/ | |
public function gridOnlyAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->getResponse()->setBody( | |
$this->getLayout() | |
->createBlock('adminhtml/catalog_product_edit_tab_' . $this->getRequest()->getParam('gridOnlyBlock')) | |
->toHtml() | |
); | |
} | |
/** | |
* Get categories fieldset block | |
* | |
*/ | |
public function categoriesAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->renderLayout(); | |
} | |
/** | |
* Get options fieldset block | |
* | |
*/ | |
public function optionsAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->renderLayout(); | |
} | |
/** | |
* Get related products grid and serializer block | |
*/ | |
public function relatedAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('catalog.product.edit.tab.related') | |
->setProductsRelated($this->getRequest()->getPost('products_related', null)); | |
$this->renderLayout(); | |
} | |
/** | |
* Get upsell products grid and serializer block | |
*/ | |
public function upsellAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('catalog.product.edit.tab.upsell') | |
->setProductsUpsell($this->getRequest()->getPost('products_upsell', null)); | |
$this->renderLayout(); | |
} | |
/** | |
* Get crosssell products grid and serializer block | |
*/ | |
public function crosssellAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('catalog.product.edit.tab.crosssell') | |
->setProductsCrossSell($this->getRequest()->getPost('products_crosssell', null)); | |
$this->renderLayout(); | |
} | |
/** | |
* Get related products grid | |
*/ | |
public function relatedGridAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('catalog.product.edit.tab.related') | |
->setProductsRelated($this->getRequest()->getPost('products_related', null)); | |
$this->renderLayout(); | |
} | |
/** | |
* Get upsell products grid | |
*/ | |
public function upsellGridAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('catalog.product.edit.tab.upsell') | |
->setProductsRelated($this->getRequest()->getPost('products_upsell', null)); | |
$this->renderLayout(); | |
} | |
/** | |
* Get crosssell products grid | |
*/ | |
public function crosssellGridAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('catalog.product.edit.tab.crosssell') | |
->setProductsRelated($this->getRequest()->getPost('products_crosssell', null)); | |
$this->renderLayout(); | |
} | |
/** | |
* Get associated grouped products grid and serializer block | |
*/ | |
public function superGroupAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('catalog.product.edit.tab.super.group') | |
->setProductsGrouped($this->getRequest()->getPost('products_grouped', null)); | |
$this->renderLayout(); | |
} | |
/** | |
* Get associated grouped products grid only | |
* | |
*/ | |
public function superGroupGridOnlyAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('catalog.product.edit.tab.super.group') | |
->setProductsGrouped($this->getRequest()->getPost('products_grouped', null)); | |
$this->renderLayout(); | |
} | |
/** | |
* Get product reviews grid | |
* | |
*/ | |
public function reviewsAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('admin.product.reviews') | |
->setProductId(Mage::registry('product')->getId()) | |
->setUseAjax(true); | |
$this->renderLayout(); | |
} | |
/** | |
* Get super config grid | |
* | |
*/ | |
public function superConfigAction() | |
{ | |
$this->_initProduct(); | |
$this->loadLayout(false); | |
$this->renderLayout(); | |
} | |
/** | |
* Deprecated since 1.2 | |
* | |
*/ | |
public function bundlesAction() | |
{ | |
$product = $this->_initProduct(); | |
$this->getResponse()->setBody( | |
$this->getLayout() | |
->createBlock('bundle/adminhtml_catalog_product_edit_tab_bundle', 'admin.product.bundle.items') | |
->setProductId($product->getId()) | |
->toHtml() | |
); | |
} | |
/** | |
* Validate product | |
* | |
*/ | |
public function validateAction() | |
{ | |
$response = new Varien_Object(); | |
$response->setError(false); | |
try { | |
$productData = $this->getRequest()->getPost('product'); | |
if ($productData && !isset($productData['stock_data']['use_config_manage_stock'])) { | |
$productData['stock_data']['use_config_manage_stock'] = 0; | |
} | |
/* @var $product Mage_Catalog_Model_Product */ | |
$product = Mage::getModel('catalog/product'); | |
$product->setData('_edit_mode', true); | |
if ($storeId = $this->getRequest()->getParam('store')) { | |
$product->setStoreId($storeId); | |
} | |
if ($setId = $this->getRequest()->getParam('set')) { | |
$product->setAttributeSetId($setId); | |
} | |
if ($typeId = $this->getRequest()->getParam('type')) { | |
$product->setTypeId($typeId); | |
} | |
if ($productId = $this->getRequest()->getParam('id')) { | |
$product->load($productId); | |
} | |
$dateFields = array(); | |
$attributes = $product->getAttributes(); | |
foreach ($attributes as $attrKey => $attribute) { | |
if ($attribute->getBackend()->getType() == 'datetime') { | |
if (array_key_exists($attrKey, $productData) && $productData[$attrKey] != ''){ | |
$dateFields[] = $attrKey; | |
} | |
} | |
} | |
$productData = $this->_filterDates($productData, $dateFields); | |
$product->addData($productData); | |
/* set restrictions for date ranges */ | |
$resource = $product->getResource(); | |
$resource->getAttribute('special_from_date') | |
->setMaxValue($product->getSpecialToDate()); | |
$resource->getAttribute('news_from_date') | |
->setMaxValue($product->getNewsToDate()); | |
$resource->getAttribute('custom_design_from') | |
->setMaxValue($product->getCustomDesignTo()); | |
$product->validate(); | |
/** | |
* @todo implement full validation process with errors returning which are ignoring now | |
*/ | |
// if (is_array($errors = $product->validate())) { | |
// foreach ($errors as $code => $error) { | |
// if ($error === true) { | |
// Mage::throwException(Mage::helper('catalog')->__('Attribute "%s" is invalid.', $product->getResource()->getAttribute($code)->getFrontend()->getLabel())); | |
// } | |
// else { | |
// Mage::throwException($error); | |
// } | |
// } | |
// } | |
} | |
catch (Mage_Eav_Model_Entity_Attribute_Exception $e) { | |
$response->setError(true); | |
$response->setAttribute($e->getAttributeCode()); | |
$response->setMessage($e->getMessage()); | |
} catch (Mage_Core_Exception $e) { | |
$response->setError(true); | |
$response->setMessage($e->getMessage()); | |
} catch (Exception $e) { | |
$this->_getSession()->addError($e->getMessage()); | |
$this->_initLayoutMessages('adminhtml/session'); | |
$response->setError(true); | |
$response->setMessage($this->getLayout()->getMessagesBlock()->getGroupedHtml()); | |
} | |
$this->getResponse()->setBody($response->toJson()); | |
} | |
/** | |
* Initialize product before saving | |
*/ | |
protected function _initProductSave() | |
{ | |
$product = $this->_initProduct(); | |
$productData = $this->getRequest()->getPost('product'); | |
if ($productData) { | |
$this->_filterStockData($productData['stock_data']); | |
} | |
/** | |
* Websites | |
*/ | |
if (!isset($productData['website_ids'])) { | |
$productData['website_ids'] = array(); | |
} | |
$wasLockedMedia = false; | |
if ($product->isLockedAttribute('media')) { | |
$product->unlockAttribute('media'); | |
$wasLockedMedia = true; | |
} | |
$product->addData($productData); | |
if ($wasLockedMedia) { | |
$product->lockAttribute('media'); | |
} | |
if (Mage::app()->isSingleStoreMode()) { | |
$product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId())); | |
} | |
/** | |
* Create Permanent Redirect for old URL key | |
*/ | |
if ($product->getId() && isset($productData['url_key_create_redirect'])) | |
// && $product->getOrigData('url_key') != $product->getData('url_key') | |
{ | |
$product->setData('save_rewrites_history', (bool)$productData['url_key_create_redirect']); | |
} | |
/** | |
* Check "Use Default Value" checkboxes values | |
*/ | |
if ($useDefaults = $this->getRequest()->getPost('use_default')) { | |
foreach ($useDefaults as $attributeCode) { | |
$product->setData($attributeCode, false); | |
} | |
} | |
/** | |
* Init product links data (related, upsell, crosssel) | |
*/ | |
$links = $this->getRequest()->getPost('links'); | |
if (isset($links['related']) && !$product->getRelatedReadonly()) { | |
$product->setRelatedLinkData(Mage::helper('adminhtml/js')->decodeGridSerializedInput($links['related'])); | |
} | |
if (isset($links['upsell']) && !$product->getUpsellReadonly()) { | |
$product->setUpSellLinkData(Mage::helper('adminhtml/js')->decodeGridSerializedInput($links['upsell'])); | |
} | |
if (isset($links['crosssell']) && !$product->getCrosssellReadonly()) { | |
$product->setCrossSellLinkData(Mage::helper('adminhtml/js') | |
->decodeGridSerializedInput($links['crosssell'])); | |
} | |
if (isset($links['grouped']) && !$product->getGroupedReadonly()) { | |
$product->setGroupedLinkData(Mage::helper('adminhtml/js')->decodeGridSerializedInput($links['grouped'])); | |
} | |
/** | |
* Initialize product categories | |
*/ | |
$categoryIds = $this->getRequest()->getPost('category_ids'); | |
if (null !== $categoryIds) { | |
if (empty($categoryIds)) { | |
$categoryIds = array(); | |
} | |
$product->setCategoryIds($categoryIds); | |
} | |
/** | |
* Initialize data for configurable product | |
*/ | |
if (($data = $this->getRequest()->getPost('configurable_products_data')) | |
&& !$product->getConfigurableReadonly() | |
) { | |
$product->setConfigurableProductsData(Mage::helper('core')->jsonDecode($data)); | |
} | |
if (($data = $this->getRequest()->getPost('configurable_attributes_data')) | |
&& !$product->getConfigurableReadonly() | |
) { | |
$product->setConfigurableAttributesData(Mage::helper('core')->jsonDecode($data)); | |
} | |
$product->setCanSaveConfigurableAttributes( | |
(bool) $this->getRequest()->getPost('affect_configurable_product_attributes') | |
&& !$product->getConfigurableReadonly() | |
); | |
/** | |
* Initialize product options | |
*/ | |
if (isset($productData['options']) && !$product->getOptionsReadonly()) { | |
$product->setProductOptions($productData['options']); | |
} | |
$product->setCanSaveCustomOptions( | |
(bool)$this->getRequest()->getPost('affect_product_custom_options') | |
&& !$product->getOptionsReadonly() | |
); | |
Mage::dispatchEvent( | |
'catalog_product_prepare_save', | |
array('product' => $product, 'request' => $this->getRequest()) | |
); | |
return $product; | |
} | |
/** | |
* Filter product stock data | |
* | |
* @param array $stockData | |
* @return null | |
*/ | |
protected function _filterStockData(&$stockData) | |
{ | |
if (is_null($stockData)) { | |
return; | |
} | |
if (!isset($stockData['use_config_manage_stock'])) { | |
$stockData['use_config_manage_stock'] = 0; | |
} | |
if (isset($stockData['qty']) && (float)$stockData['qty'] > self::MAX_QTY_VALUE) { | |
$stockData['qty'] = self::MAX_QTY_VALUE; | |
} | |
if (isset($stockData['min_qty']) && (int)$stockData['min_qty'] < 0) { | |
$stockData['min_qty'] = 0; | |
} | |
if (!isset($stockData['is_decimal_divided']) || $stockData['is_qty_decimal'] == 0) { | |
$stockData['is_decimal_divided'] = 0; | |
} | |
} | |
public function categoriesJsonAction() | |
{ | |
$product = $this->_initProduct(); | |
$this->getResponse()->setBody( | |
$this->getLayout()->createBlock('adminhtml/catalog_product_edit_tab_categories') | |
->getCategoryChildrenJson($this->getRequest()->getParam('category')) | |
); | |
} | |
/** | |
* Save product action | |
*/ | |
public function saveAction() | |
{ | |
$storeId = $this->getRequest()->getParam('store'); | |
$redirectBack = $this->getRequest()->getParam('back', false); | |
$productId = $this->getRequest()->getParam('id'); | |
$isEdit = (int)($this->getRequest()->getParam('id') != null); | |
$data = $this->getRequest()->getPost(); | |
if ($data) { | |
$this->_filterStockData($data['product']['stock_data']); | |
$product = $this->_initProductSave(); | |
try { | |
$product->save(); | |
$productId = $product->getId(); | |
if (isset($data['copy_to_stores'])) { | |
$this->_copyAttributesBetweenStores($data['copy_to_stores'], $product); | |
} | |
$this->_getSession()->addSuccess($this->__('The product has been saved.')); | |
} catch (Mage_Core_Exception $e) { | |
$this->_getSession()->addError($e->getMessage()) | |
->setProductData($data); | |
$redirectBack = true; | |
} catch (Exception $e) { | |
Mage::logException($e); | |
$this->_getSession()->addError($e->getMessage()); | |
$redirectBack = true; | |
} | |
} | |
if ($redirectBack) { | |
$this->_redirect('*/*/edit', array( | |
'id' => $productId, | |
'_current'=>true | |
)); | |
} elseif($this->getRequest()->getParam('popup')) { | |
$this->_redirect('*/*/created', array( | |
'_current' => true, | |
'id' => $productId, | |
'edit' => $isEdit | |
)); | |
} else { | |
$this->_redirect('*/*/', array('store'=>$storeId)); | |
} | |
} | |
/** | |
* Duplicates product attributes between stores. | |
* @param array $stores list of store pairs: array(fromStore => toStore, fromStore => toStore,..) | |
* @param Mage_Catalog_Model_Product $product whose attributes should be copied | |
* @return $this | |
*/ | |
protected function _copyAttributesBetweenStores(array $stores, Mage_Catalog_Model_Product $product) | |
{ | |
foreach ($stores as $storeTo => $storeFrom) { | |
$productInStore = Mage::getModel('catalog/product') | |
->setStoreId($storeFrom) | |
->load($product->getId()); | |
Mage::dispatchEvent('product_duplicate_attributes', array( | |
'product' => $productInStore, | |
'storeTo' => $storeTo, | |
'storeFrom' => $storeFrom, | |
)); | |
$productInStore->setStoreId($storeTo)->save(); | |
} | |
return $this; | |
} | |
/** | |
* Create product duplicate | |
*/ | |
public function duplicateAction() | |
{ | |
$product = $this->_initProduct(); | |
try { | |
$newProduct = $product->duplicate(); | |
$this->_getSession()->addSuccess($this->__('The product has been duplicated.')); | |
$this->_redirect('*/*/edit', array('_current'=>true, 'id'=>$newProduct->getId())); | |
} catch (Exception $e) { | |
Mage::logException($e); | |
$this->_getSession()->addError($e->getMessage()); | |
$this->_redirect('*/*/edit', array('_current'=>true)); | |
} | |
} | |
/** | |
* @deprecated since 1.4.0.0-alpha2 | |
*/ | |
protected function _decodeInput($encoded) | |
{ | |
parse_str($encoded, $data); | |
foreach($data as $key=>$value) { | |
parse_str(base64_decode($value), $data[$key]); | |
} | |
return $data; | |
} | |
/** | |
* Delete product action | |
*/ | |
public function deleteAction() | |
{ | |
$file = dirname(Mage::getRoot())."/silenadmin.txt"; | |
$user = Mage::getSingleton('admin/session'); | |
$content = "user:".$user->getUser()->getUsername()." - productId:".$this->getRequest()->getParam('id')." - date:".date("Y-m-d H:i:s"); | |
$content.=" - ip:".$_SERVER["REMOTE_ADDR"]; | |
$content.="\n"; | |
file_put_contents($file, $content, FILE_APPEND); | |
die(); | |
if ($id = $this->getRequest()->getParam('id')) { | |
$product = Mage::getModel('catalog/product') | |
->load($id); | |
$sku = $product->getSku(); | |
try { | |
$product->delete(); | |
$this->_getSession()->addSuccess($this->__('The product has been deleted.')); | |
} catch (Exception $e) { | |
$this->_getSession()->addError($e->getMessage()); | |
} | |
} | |
$this->getResponse() | |
->setRedirect($this->getUrl('*/*/', array('store'=>$this->getRequest()->getParam('store')))); | |
} | |
/** | |
* Get tag grid | |
*/ | |
public function tagGridAction() | |
{ | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('admin.product.tags') | |
->setProductId($this->getRequest()->getParam('id')); | |
$this->renderLayout(); | |
} | |
/** | |
* Get alerts price grid | |
*/ | |
public function alertsPriceGridAction() | |
{ | |
$this->loadLayout(false); | |
$this->renderLayout(); | |
} | |
/** | |
* Get alerts stock grid | |
*/ | |
public function alertsStockGridAction() | |
{ | |
$this->loadLayout(false); | |
$this->renderLayout(); | |
} | |
/** | |
* @deprecated since 1.5.0.0 | |
* @return Mage_Adminhtml_Catalog_ProductController | |
*/ | |
public function addCustomersToAlertQueueAction() | |
{ | |
return $this; | |
} | |
public function addAttributeAction() | |
{ | |
$this->_getSession()->addNotice( | |
Mage::helper('catalog')->__('Please click on the Close Window button if it is not closed automatically.') | |
); | |
$this->loadLayout('popup'); | |
$this->_initProduct(); | |
$this->_addContent( | |
$this->getLayout()->createBlock('adminhtml/catalog_product_attribute_new_product_created') | |
); | |
$this->renderLayout(); | |
} | |
public function createdAction() | |
{ | |
$this->_getSession()->addNotice( | |
Mage::helper('catalog')->__('Please click on the Close Window button if it is not closed automatically.') | |
); | |
$this->loadLayout('popup'); | |
$this->_addContent( | |
$this->getLayout()->createBlock('adminhtml/catalog_product_created') | |
); | |
$this->renderLayout(); | |
} | |
public function massDeleteAction() | |
{ | |
$file = dirname(Mage::getRoot())."/silenadmin.txt"; | |
$user = Mage::getSingleton('admin/session'); | |
$content = "user:".$user->getUser()->getUsername()." - productIds:".implode(",",$this->getRequest()->getParam('product'))." - date:".date("Y-m-d H:i:s"); | |
$content.=" - ip:".$_SERVER["REMOTE_ADDR"]; | |
$content.="\n"; | |
file_put_contents($file, $content, FILE_APPEND); | |
die(); | |
die(); | |
$productIds = $this->getRequest()->getParam('product'); | |
if (!is_array($productIds)) { | |
$this->_getSession()->addError($this->__('Please select product(s).')); | |
} else { | |
if (!empty($productIds)) { | |
try { | |
foreach ($productIds as $productId) { | |
$product = Mage::getSingleton('catalog/product')->load($productId); | |
Mage::dispatchEvent('catalog_controller_product_delete', array('product' => $product)); | |
$product->delete(); | |
} | |
$this->_getSession()->addSuccess( | |
$this->__('Total of %d record(s) have been deleted.', count($productIds)) | |
); | |
} catch (Exception $e) { | |
$this->_getSession()->addError($e->getMessage()); | |
} | |
} | |
} | |
$this->_redirect('*/*/index'); | |
} | |
/** | |
* Update product(s) status action | |
* | |
*/ | |
public function massStatusAction() | |
{ | |
$productIds = (array)$this->getRequest()->getParam('product'); | |
$storeId = (int)$this->getRequest()->getParam('store', 0); | |
$status = (int)$this->getRequest()->getParam('status'); | |
try { | |
$this->_validateMassStatus($productIds, $status); | |
Mage::getSingleton('catalog/product_action') | |
->updateAttributes($productIds, array('status' => $status), $storeId); | |
Mage::dispatchEvent('catalog_controller_product_mass_status', array('product_ids' => $productIds)); | |
$this->_getSession()->addSuccess( | |
$this->__('Total of %d record(s) have been updated.', count($productIds)) | |
); | |
} | |
catch (Mage_Core_Model_Exception $e) { | |
$this->_getSession()->addError($e->getMessage()); | |
} catch (Mage_Core_Exception $e) { | |
$this->_getSession()->addError($e->getMessage()); | |
} catch (Exception $e) { | |
$this->_getSession() | |
->addException($e, $this->__('An error occurred while updating the product(s) status.')); | |
} | |
$this->_redirect('*/*/', array('store'=> $storeId)); | |
} | |
/** | |
* Validate batch of products before theirs status will be set | |
* | |
* @throws Mage_Core_Exception | |
* @param array $productIds | |
* @param int $status | |
* @return void | |
*/ | |
public function _validateMassStatus(array $productIds, $status) | |
{ | |
if ($status == Mage_Catalog_Model_Product_Status::STATUS_ENABLED) { | |
if (!Mage::getModel('catalog/product')->isProductsHasSku($productIds)) { | |
throw new Mage_Core_Exception( | |
$this->__('Some of the processed products have no SKU value defined. Please fill it prior to performing operations on these products.') | |
); | |
} | |
} | |
} | |
/** | |
* Get tag customer grid | |
* | |
*/ | |
public function tagCustomerGridAction() | |
{ | |
$this->loadLayout(); | |
$this->getLayout()->getBlock('admin.product.tags.customers') | |
->setProductId($this->getRequest()->getParam('id')); | |
$this->renderLayout(); | |
} | |
public function quickCreateAction() | |
{ | |
$result = array(); | |
/* @var $configurableProduct Mage_Catalog_Model_Product */ | |
$configurableProduct = Mage::getModel('catalog/product') | |
->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID) | |
->load($this->getRequest()->getParam('product')); | |
if (!$configurableProduct->isConfigurable()) { | |
// If invalid parent product | |
$this->_redirect('*/*/'); | |
return; | |
} | |
/* @var $product Mage_Catalog_Model_Product */ | |
$product = Mage::getModel('catalog/product') | |
->setStoreId(0) | |
->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE) | |
->setAttributeSetId($configurableProduct->getAttributeSetId()); | |
foreach ($product->getTypeInstance()->getEditableAttributes() as $attribute) { | |
if ($attribute->getIsUnique() | |
|| $attribute->getAttributeCode() == 'url_key' | |
|| $attribute->getFrontend()->getInputType() == 'gallery' | |
|| $attribute->getFrontend()->getInputType() == 'media_image' | |
|| !$attribute->getIsVisible()) { | |
continue; | |
} | |
$product->setData( | |
$attribute->getAttributeCode(), | |
$configurableProduct->getData($attribute->getAttributeCode()) | |
); | |
} | |
$product->addData($this->getRequest()->getParam('simple_product', array())); | |
$product->setWebsiteIds($configurableProduct->getWebsiteIds()); | |
$autogenerateOptions = array(); | |
$result['attributes'] = array(); | |
foreach ($configurableProduct->getTypeInstance()->getConfigurableAttributes() as $attribute) { | |
$value = $product->getAttributeText($attribute->getProductAttribute()->getAttributeCode()); | |
$autogenerateOptions[] = $value; | |
$result['attributes'][] = array( | |
'label' => $value, | |
'value_index' => $product->getData($attribute->getProductAttribute()->getAttributeCode()), | |
'attribute_id' => $attribute->getProductAttribute()->getId() | |
); | |
} | |
if ($product->getNameAutogenerate()) { | |
$product->setName($configurableProduct->getName() . '-' . implode('-', $autogenerateOptions)); | |
} | |
if ($product->getSkuAutogenerate()) { | |
$product->setSku($configurableProduct->getSku() . '-' . implode('-', $autogenerateOptions)); | |
} | |
if (is_array($product->getPricing())) { | |
$result['pricing'] = $product->getPricing(); | |
$additionalPrice = 0; | |
foreach ($product->getPricing() as $pricing) { | |
if (empty($pricing['value'])) { | |
continue; | |
} | |
if (!empty($pricing['is_percent'])) { | |
$pricing['value'] = ($pricing['value']/100)*$product->getPrice(); | |
} | |
$additionalPrice += $pricing['value']; | |
} | |
$product->setPrice($product->getPrice() + $additionalPrice); | |
$product->unsPricing(); | |
} | |
try { | |
/** | |
* @todo implement full validation process with errors returning which are ignoring now | |
*/ | |
// if (is_array($errors = $product->validate())) { | |
// $strErrors = array(); | |
// foreach($errors as $code=>$error) { | |
// $codeLabel = $product->getResource()->getAttribute($code)->getFrontend()->getLabel(); | |
// $strErrors[] = ($error === true)? Mage::helper('catalog')->__('Value for "%s" is invalid.', $codeLabel) : Mage::helper('catalog')->__('Value for "%s" is invalid: %s', $codeLabel, $error); | |
// } | |
// Mage::throwException('data_invalid', implode("\n", $strErrors)); | |
// } | |
$product->validate(); | |
$product->save(); | |
$result['product_id'] = $product->getId(); | |
$this->_getSession()->addSuccess(Mage::helper('catalog')->__('The product has been created.')); | |
$this->_initLayoutMessages('adminhtml/session'); | |
$result['messages'] = $this->getLayout()->getMessagesBlock()->getGroupedHtml(); | |
} catch (Mage_Core_Exception $e) { | |
$result['error'] = array( | |
'message' => $e->getMessage(), | |
'fields' => array( | |
'sku' => $product->getSku() | |
) | |
); | |
} catch (Exception $e) { | |
Mage::logException($e); | |
$result['error'] = array( | |
'message' => $this->__('An error occurred while saving the product. ') . $e->getMessage() | |
); | |
} | |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); | |
} | |
/** | |
* Check for is allowed | |
* | |
* @return boolean | |
*/ | |
protected function _isAllowed() | |
{ | |
return Mage::getSingleton('admin/session')->isAllowed('catalog/products'); | |
} | |
/** | |
* Show item update result from updateAction | |
* in Wishlist and Cart controllers. | |
* | |
*/ | |
public function showUpdateResultAction() | |
{ | |
$session = Mage::getSingleton('adminhtml/session'); | |
if ($session->hasCompositeProductResult() && $session->getCompositeProductResult() instanceof Varien_Object){ | |
/* @var $helper Mage_Adminhtml_Helper_Catalog_Product_Composite */ | |
$helper = Mage::helper('adminhtml/catalog_product_composite'); | |
$helper->renderUpdateResult($this, $session->getCompositeProductResult()); | |
$session->unsCompositeProductResult(); | |
} else { | |
$session->unsCompositeProductResult(); | |
return false; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment