/magento/app/code/core/Mage/Adminhtml/controllers/System/StoreController.php
PHP | 504 lines | 318 code | 22 blank | 164 comment | 9 complexity | 5810a89a6e8df566883b5f0a6510dbf8 MD5 | raw file
Possible License(s): LGPL-3.0
- <?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 license@magentocommerce.com 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.magentocommerce.com for more information.
- *
- * @category Mage
- * @package Mage_Adminhtml
- * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Store controller
- *
- * @category Mage
- * @package Mage_Adminhtml
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Adminhtml_System_StoreController extends Mage_Adminhtml_Controller_Action
- {
- /**
- * Init actions
- *
- * @return Mage_Adminhtml_Cms_PageController
- */
- protected function _initAction()
- {
- // load layout, set active menu and breadcrumbs
- $this->loadLayout()
- ->_setActiveMenu('system/store')
- ->_addBreadcrumb(Mage::helper('adminhtml')->__('System'), Mage::helper('adminhtml')->__('System'))
- ->_addBreadcrumb(Mage::helper('adminhtml')->__('Manage Stores'), Mage::helper('adminhtml')->__('Manage Stores'))
- ;
- return $this;
- }
- public function indexAction()
- {
- $this->_title($this->__('System'))
- ->_title($this->__('Stores'));
- $this->_initAction()
- ->_addContent($this->getLayout()->createBlock('adminhtml/system_store_store'))
- ->renderLayout();
- }
- public function newWebsiteAction()
- {
- Mage::register('store_type', 'website');
- $this->_forward('newStore');
- }
- public function newGroupAction()
- {
- Mage::register('store_type', 'group');
- $this->_forward('newStore');
- }
- public function newStoreAction()
- {
- if (!Mage::registry('store_type')) {
- Mage::register('store_type', 'store');
- }
- Mage::register('store_action', 'add');
- $this->_forward('editStore');
- }
- public function editWebsiteAction()
- {
- Mage::register('store_type', 'website');
- $this->_forward('editStore');
- }
- public function editGroupAction()
- {
- Mage::register('store_type', 'group');
- $this->_forward('editStore');
- }
- public function editStoreAction()
- {
- $this->_title($this->__('System'))
- ->_title($this->__('Stores'));
- $session = $this->_getSession();
- if ($session->getPostData()) {
- Mage::register('store_post_data', $session->getPostData());
- $session->unsPostData();
- }
- if (!Mage::registry('store_type')) {
- Mage::register('store_type', 'store');
- }
- if (!Mage::registry('store_action')) {
- Mage::register('store_action', 'edit');
- }
- switch (Mage::registry('store_type')) {
- case 'website':
- $itemId = $this->getRequest()->getParam('website_id', null);
- $model = Mage::getModel('core/website');
- $title = Mage::helper('core')->__("Website");
- $notExists = Mage::helper('core')->__("The website does not exist.");
- $codeBase = Mage::helper('core')->__('Before modifying the website code please make sure that it is not used in index.php.');
- break;
- case 'group':
- $itemId = $this->getRequest()->getParam('group_id', null);
- $model = Mage::getModel('core/store_group');
- $title = Mage::helper('core')->__("Store");
- $notExists = Mage::helper('core')->__("The store does not exist");
- $codeBase = false;
- break;
- case 'store':
- $itemId = $this->getRequest()->getParam('store_id', null);
- $model = Mage::getModel('core/store');
- $title = Mage::helper('core')->__("Store View");
- $notExists = Mage::helper('core')->__("Store view doesn't exist");
- $codeBase = Mage::helper('core')->__('Before modifying the store view code please make sure that it is not used in index.php.');
- break;
- }
- if (null !== $itemId) {
- $model->load($itemId);
- }
- if ($model->getId() || Mage::registry('store_action') == 'add') {
- Mage::register('store_data', $model);
- if (Mage::registry('store_action') == 'add') {
- $this->_title($this->__('New ') . $title);
- }
- else {
- $this->_title($model->getName());
- }
- if (Mage::registry('store_action') == 'edit' && $codeBase && !$model->isReadOnly()) {
- $this->_getSession()->addNotice($codeBase);
- }
- $this->_initAction()
- ->_addContent($this->getLayout()->createBlock('adminhtml/system_store_edit'))
- ->renderLayout();
- }
- else {
- $session->addError($notExists);
- $this->_redirect('*/*/');
- }
- }
- public function saveAction()
- {
- if ($this->getRequest()->isPost() && $postData = $this->getRequest()->getPost()) {
- if (empty($postData['store_type']) || empty($postData['store_action'])) {
- $this->_redirect('*/*/');
- return;
- }
- $session = $this->_getSession();
- try {
- switch ($postData['store_type']) {
- case 'website':
- $postData['website']['name'] = $this->_getHelper()->removeTags($postData['website']['name']);
- $websiteModel = Mage::getModel('core/website');
- if ($postData['website']['website_id']) {
- $websiteModel->load($postData['website']['website_id']);
- }
- $websiteModel->setData($postData['website']);
- if ($postData['website']['website_id'] == '') {
- $websiteModel->setId(null);
- }
- $websiteModel->save();
- $session->addSuccess(Mage::helper('core')->__('The website has been saved.'));
- break;
- case 'group':
- $postData['group']['name'] = $this->_getHelper()->removeTags($postData['group']['name']);
- $groupModel = Mage::getModel('core/store_group');
- if ($postData['group']['group_id']) {
- $groupModel->load($postData['group']['group_id']);
- }
- $groupModel->setData($postData['group']);
- if ($postData['group']['group_id'] == '') {
- $groupModel->setId(null);
- }
- $groupModel->save();
- Mage::dispatchEvent('store_group_save', array('group' => $groupModel));
- $session->addSuccess(Mage::helper('core')->__('The store has been saved.'));
- break;
- case 'store':
- $eventName = 'store_edit';
- $storeModel = Mage::getModel('core/store');
- $postData['store']['name'] = $this->_getHelper()->removeTags($postData['store']['name']);
- if ($postData['store']['store_id']) {
- $storeModel->load($postData['store']['store_id']);
- }
- $storeModel->setData($postData['store']);
- if ($postData['store']['store_id'] == '') {
- $storeModel->setId(null);
- $eventName = 'store_add';
- }
- $groupModel = Mage::getModel('core/store_group')->load($storeModel->getGroupId());
- $storeModel->setWebsiteId($groupModel->getWebsiteId());
- $storeModel->save();
- Mage::app()->reinitStores();
- Mage::dispatchEvent($eventName, array('store'=>$storeModel));
- $session->addSuccess(Mage::helper('core')->__('The store view has been saved'));
- break;
- default:
- $this->_redirect('*/*/');
- return;
- }
- $this->_redirect('*/*/');
- return;
- }
- catch (Mage_Core_Exception $e) {
- $session->addError($e->getMessage());
- $session->setPostData($postData);
- }
- catch (Exception $e) {
- $session->addException($e, Mage::helper('core')->__('An error occurred while saving. Please review the error log.'));
- $session->setPostData($postData);
- }
- $this->_redirectReferer();
- return;
- }
- $this->_redirect('*/*/');
- }
- public function deleteWebsiteAction()
- {
- $this->_title($this->__('System'))
- ->_title($this->__('Stores'))
- ->_title($this->__('Delete Website'));
- $session = $this->_getSession();
- $itemId = $this->getRequest()->getParam('item_id', null);
- if (!$model = Mage::getModel('core/website')->load($itemId)) {
- $session->addError(Mage::helper('core')->__('Unable to proceed. Please, try again.'));
- $this->_redirect('*/*/');
- return ;
- }
- if (!$model->isCanDelete()) {
- $session->addError(Mage::helper('core')->__('This website cannot be deleted.'));
- $this->_redirect('*/*/editWebsite', array('website_id' => $itemId));
- return ;
- }
- $this->_addDeletionNotice('website');
- $this->_initAction()
- ->_addBreadcrumb(Mage::helper('core')->__('Delete Website'), Mage::helper('core')->__('Delete Website'))
- ->_addContent($this->getLayout()->createBlock('adminhtml/system_store_delete')
- ->setFormActionUrl($this->getUrl('*/*/deleteWebsitePost'))
- ->setBackUrl($this->getUrl('*/*/editWebsite', array('website_id' => $itemId)))
- ->setStoreTypeTitle(Mage::helper('core')->__('Website'))
- ->setDataObject($model)
- )
- ->renderLayout();
- }
- public function deleteGroupAction()
- {
- $this->_title($this->__('System'))
- ->_title($this->__('Stores'))
- ->_title($this->__('Delete Store'));
- $session = $this->_getSession();
- $itemId = $this->getRequest()->getParam('item_id', null);
- if (!$model = Mage::getModel('core/store_group')->load($itemId)) {
- $session->addError(Mage::helper('core')->__('Unable to proceed. Please, try again.'));
- $this->_redirect('*/*/');
- return ;
- }
- if (!$model->isCanDelete()) {
- $session->addError(Mage::helper('core')->__('This store cannot be deleted.'));
- $this->_redirect('*/*/editGroup', array('group_id' => $itemId));
- return ;
- }
- $this->_addDeletionNotice('store');
- $this->_initAction()
- ->_addBreadcrumb(Mage::helper('core')->__('Delete Store'), Mage::helper('core')->__('Delete Store'))
- ->_addContent($this->getLayout()->createBlock('adminhtml/system_store_delete')
- ->setFormActionUrl($this->getUrl('*/*/deleteGroupPost'))
- ->setBackUrl($this->getUrl('*/*/editGroup', array('group_id' => $itemId)))
- ->setStoreTypeTitle(Mage::helper('core')->__('Store'))
- ->setDataObject($model)
- )
- ->renderLayout();
- }
- public function deleteStoreAction()
- {
- $this->_title($this->__('System'))
- ->_title($this->__('Stores'))
- ->_title($this->__('Delete Store View'));
- $session = $this->_getSession();
- $itemId = $this->getRequest()->getParam('item_id', null);
- if (!$model = Mage::getModel('core/store')->load($itemId)) {
- $session->addError(Mage::helper('core')->__('Unable to proceed. Please, try again.'));
- $this->_redirect('*/*/');
- return ;
- }
- if (!$model->isCanDelete()) {
- $session->addError(Mage::helper('core')->__('This store view cannot be deleted.'));
- $this->_redirect('*/*/editStore', array('store_id' => $itemId));
- return ;
- }
- $this->_addDeletionNotice('store view');;
- $this->_initAction()
- ->_addBreadcrumb(Mage::helper('core')->__('Delete Store View'), Mage::helper('core')->__('Delete Store View'))
- ->_addContent($this->getLayout()->createBlock('adminhtml/system_store_delete')
- ->setFormActionUrl($this->getUrl('*/*/deleteStorePost'))
- ->setBackUrl($this->getUrl('*/*/editStore', array('store_id' => $itemId)))
- ->setStoreTypeTitle(Mage::helper('core')->__('Store View'))
- ->setDataObject($model)
- )
- ->renderLayout();
- }
- public function deleteWebsitePostAction()
- {
- $itemId = $this->getRequest()->getParam('item_id');
- if (!$model = Mage::getModel('core/website')->load($itemId)) {
- $this->_getSession()->addError(Mage::helper('core')->__('Unable to proceed. Please, try again'));
- $this->_redirect('*/*/');
- return ;
- }
- if (!$model->isCanDelete()) {
- $this->_getSession()->addError(Mage::helper('core')->__('This website cannot be deleted.'));
- $this->_redirect('*/*/editWebsite', array('website_id' => $model->getId()));
- return ;
- }
- $this->_backupDatabase('*/*/editWebsite', array('website_id' => $itemId));
- try {
- $model->delete();
- $this->_getSession()->addSuccess(Mage::helper('core')->__('The website has been deleted.'));
- $this->_redirect('*/*/');
- return ;
- }
- catch (Mage_Core_Exception $e) {
- $this->_getSession()->addError($e->getMessage());
- }
- catch (Exception $e) {
- $this->_getSession()->addException($e, Mage::helper('core')->__('Unable to delete website. Please, try again later.'));
- }
- $this->_redirect('*/*/editWebsite', array('website_id' => $itemId));
- }
- public function deleteGroupPostAction()
- {
- $itemId = $this->getRequest()->getParam('item_id');
- if (!$model = Mage::getModel('core/store_group')->load($itemId)) {
- $this->_getSession()->addError(Mage::helper('core')->__('Unable to proceed. Please, try again.'));
- $this->_redirect('*/*/');
- return ;
- }
- if (!$model->isCanDelete()) {
- $this->_getSession()->addError(Mage::helper('core')->__('This store cannot be deleted.'));
- $this->_redirect('*/*/editGroup', array('group_id' => $model->getId()));
- return ;
- }
- $this->_backupDatabase('*/*/editGroup', array('group_id' => $itemId));
- try {
- $model->delete();
- $this->_getSession()->addSuccess(Mage::helper('core')->__('The store has been deleted.'));
- $this->_redirect('*/*/');
- return ;
- }
- catch (Mage_Core_Exception $e) {
- $this->_getSession()->addError($e->getMessage());
- }
- catch (Exception $e) {
- $this->_getSession()->addException($e, Mage::helper('core')->__('Unable to delete store. Please, try again later.'));
- }
- $this->_redirect('*/*/editGroup', array('group_id' => $itemId));
- }
- /**
- * Delete store view post action
- *
- */
- public function deleteStorePostAction()
- {
- $itemId = $this->getRequest()->getParam('item_id');
- if (!$model = Mage::getModel('core/store')->load($itemId)) {
- $this->_getSession()->addError(Mage::helper('core')->__('Unable to proceed. Please, try again'));
- $this->_redirect('*/*/');
- return ;
- }
- if (!$model->isCanDelete()) {
- $this->_getSession()->addError(Mage::helper('core')->__('This store view cannot be deleted.'));
- $this->_redirect('*/*/editStore', array('store_id' => $model->getId()));
- return ;
- }
- $this->_backupDatabase('*/*/editStore', array('store_id' => $itemId));
- try {
- $model->delete();
- Mage::dispatchEvent('store_delete', array('store' => $model));
- $this->_getSession()->addSuccess(Mage::helper('core')->__('The store view has been deleted.'));
- $this->_redirect('*/*/');
- return ;
- }
- catch (Mage_Core_Exception $e) {
- $this->_getSession()->addError($e->getMessage());
- }
- catch (Exception $e) {
- $this->_getSession()->addException($e, Mage::helper('core')->__('Unable to delete store view. Please, try again later.'));
- }
- $this->_redirect('*/*/editStore', array('store_id' => $itemId));
- }
- protected function _isAllowed()
- {
- return Mage::getSingleton('admin/session')->isAllowed('system/store');
- }
- /**
- * Backup database
- *
- * @param string $failPath redirect path if backup failed
- * @param array $arguments
- * @return Mage_Adminhtml_System_StoreController
- */
- protected function _backupDatabase($failPath, $arguments=array())
- {
- if (! $this->getRequest()->getParam('create_backup')) {
- return $this;
- }
- try {
- $backupDb = Mage::getModel('backup/db');
- $backup = Mage::getModel('backup/backup')
- ->setTime(time())
- ->setType('db')
- ->setPath(Mage::getBaseDir('var') . DS . 'backups');
- $backupDb->createBackup($backup);
- $this->_getSession()->addSuccess(Mage::helper('backup')->__('Database was successfuly backed up.'));
- }
- catch (Mage_Core_Exception $e) {
- $this->_getSession()->addError($e->getMessage());
- $this->_redirect($failPath, $arguments);
- return ;
- }
- catch (Exception $e) {
- $this->_getSession()->addException($e, Mage::helper('backup')->__('Unable to create backup. Please, try again later.'));
- $this->_redirect($failPath, $arguments);
- return ;
- }
- return $this;
- }
- /**
- * Add notification on deleting store / store view / website
- *
- * @param string $typeTitle
- * @return Mage_Adminhtml_System_StoreController
- */
- protected function _addDeletionNotice($typeTitle)
- {
- $this->_getSession()->addNotice(
- Mage::helper('core')->__('Deleting a %1$s will not delete the information associated with the %1$s (e.g. categories, products, etc.), but the %1$s will not be able to be restored. It is suggested that you create a database backup before deleting the %1$s.', $typeTitle)
- );
- return $this;
- }
- }