/app/code/core/Mage/Adminhtml/controllers/System/ConfigController.php
PHP | 327 lines | 196 code | 35 blank | 96 comment | 23 complexity | 7e995de63b1316f45b28edc384dc9612 MD5 | raw file
- <?php
- /**
- * Magento Enterprise Edition
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Magento Enterprise Edition License
- * that is bundled with this package in the file LICENSE_EE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://www.magentocommerce.com/license/enterprise-edition
- * 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://www.magentocommerce.com/license/enterprise-edition
- */
- /**
- * Configuration controller
- *
- * @category Mage
- * @package Mage_Adminhtml
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Adminhtml_System_ConfigController extends Mage_Adminhtml_Controller_Action
- {
- /**
- * Whether current section is allowed
- *
- * @var bool
- */
- protected $_isSectionAllowedFlag = true;
- /**
- * Controller predispatch method
- * Check if current section is found and is allowed
- *
- * @return Mage_Adminhtml_System_ConfigController
- */
- public function preDispatch()
- {
- parent::preDispatch();
- if ($this->getRequest()->getParam('section')) {
- $this->_isSectionAllowedFlag = $this->_isSectionAllowed($this->getRequest()->getParam('section'));
- }
- return $this;
- }
- /**
- * Index action
- *
- */
- public function indexAction()
- {
- $this->_forward('edit');
- }
- /**
- * Edit configuration section
- *
- */
- public function editAction()
- {
- $this->_title($this->__('System'))->_title($this->__('Configuration'));
- $current = $this->getRequest()->getParam('section');
- $website = $this->getRequest()->getParam('website');
- $store = $this->getRequest()->getParam('store');
- Mage::getSingleton('adminhtml/config_data')
- ->setSection($current)
- ->setWebsite($website)
- ->setStore($store);
- $configFields = Mage::getSingleton('adminhtml/config');
- $sections = $configFields->getSections($current);
- $section = $sections->$current;
- $hasChildren = $configFields->hasChildren($section, $website, $store);
- if (!$hasChildren && $current) {
- $this->_redirect('*/*/', array('website'=>$website, 'store'=>$store));
- }
- $this->loadLayout();
- $this->_setActiveMenu('system/config');
- $this->getLayout()->getBlock('menu')->setAdditionalCacheKeyInfo(array($current));
- $this->_addBreadcrumb(Mage::helper('adminhtml')->__('System'), Mage::helper('adminhtml')->__('System'),
- $this->getUrl('*/system'));
- $this->getLayout()->getBlock('left')
- ->append($this->getLayout()->createBlock('adminhtml/system_config_tabs')->initTabs());
- if ($this->_isSectionAllowedFlag) {
- $this->_addContent($this->getLayout()->createBlock('adminhtml/system_config_edit')->initForm());
- $this->_addJs($this->getLayout()
- ->createBlock('adminhtml/template')
- ->setTemplate('system/shipping/ups.phtml'));
- $this->_addJs($this->getLayout()
- ->createBlock('adminhtml/template')
- ->setTemplate('system/config/js.phtml'));
- $this->_addJs($this->getLayout()
- ->createBlock('adminhtml/template')
- ->setTemplate('system/shipping/applicable_country.phtml'));
- $this->renderLayout();
- }
- }
- /**
- * Save configuration
- *
- */
- public function saveAction()
- {
- $session = Mage::getSingleton('adminhtml/session');
- /* @var $session Mage_Adminhtml_Model_Session */
- $groups = $this->getRequest()->getPost('groups');
- if (isset($_FILES['groups']['name']) && is_array($_FILES['groups']['name'])) {
- /**
- * Carefully merge $_FILES and $_POST information
- * None of '+=' or 'array_merge_recursive' can do this correct
- */
- foreach($_FILES['groups']['name'] as $groupName => $group) {
- if (is_array($group)) {
- foreach ($group['fields'] as $fieldName => $field) {
- if (!empty($field['value'])) {
- $groups[$groupName]['fields'][$fieldName] = array('value' => $field['value']);
- }
- }
- }
- }
- }
- try {
- if (!$this->_isSectionAllowed($this->getRequest()->getParam('section'))) {
- throw new Exception(Mage::helper('adminhtml')->__('This section is not allowed.'));
- }
- // custom save logic
- $this->_saveSection();
- $section = $this->getRequest()->getParam('section');
- $website = $this->getRequest()->getParam('website');
- $store = $this->getRequest()->getParam('store');
- Mage::getSingleton('adminhtml/config_data')
- ->setSection($section)
- ->setWebsite($website)
- ->setStore($store)
- ->setGroups($groups)
- ->save();
- // reinit configuration
- Mage::getConfig()->reinit();
- Mage::dispatchEvent('admin_system_config_section_save_after', array(
- 'website' => $website,
- 'store' => $store,
- 'section' => $section
- ));
- Mage::app()->reinitStores();
- // website and store codes can be used in event implementation, so set them as well
- Mage::dispatchEvent("admin_system_config_changed_section_{$section}",
- array('website' => $website, 'store' => $store)
- );
- $session->addSuccess(Mage::helper('adminhtml')->__('The configuration has been saved.'));
- }
- catch (Mage_Core_Exception $e) {
- foreach(explode("\n", $e->getMessage()) as $message) {
- $session->addError($message);
- }
- }
- catch (Exception $e) {
- $session->addException($e,
- Mage::helper('adminhtml')->__('An error occurred while saving this configuration:') . ' '
- . $e->getMessage());
- }
- $this->_saveState($this->getRequest()->getPost('config_state'));
- $this->_redirect('*/*/edit', array('_current' => array('section', 'website', 'store')));
- }
- /**
- * Custom save logic for section
- */
- protected function _saveSection ()
- {
- $method = '_save' . uc_words($this->getRequest()->getParam('section'), '');
- if (method_exists($this, $method)) {
- $this->$method();
- }
- }
- /**
- * Advanced save procedure
- */
- protected function _saveAdvanced()
- {
- Mage::app()->cleanCache(
- array(
- 'layout',
- Mage_Core_Model_Layout_Update::LAYOUT_GENERAL_CACHE_TAG
- ));
- }
- /**
- * Save fieldset state through AJAX
- *
- */
- public function stateAction()
- {
- if ($this->getRequest()->getParam('isAjax') == 1
- && $this->getRequest()->getParam('container') != ''
- && $this->getRequest()->getParam('value') != '') {
- $configState = array(
- $this->getRequest()->getParam('container') => $this->getRequest()->getParam('value')
- );
- $this->_saveState($configState);
- $this->getResponse()->setBody('success');
- }
- }
- /**
- * Export shipping table rates in csv format
- *
- */
- public function exportTableratesAction()
- {
- $fileName = 'tablerates.csv';
- /** @var $gridBlock Mage_Adminhtml_Block_Shipping_Carrier_Tablerate_Grid */
- $gridBlock = $this->getLayout()->createBlock('adminhtml/shipping_carrier_tablerate_grid');
- $website = Mage::app()->getWebsite($this->getRequest()->getParam('website'));
- if ($this->getRequest()->getParam('conditionName')) {
- $conditionName = $this->getRequest()->getParam('conditionName');
- } else {
- $conditionName = $website->getConfig('carriers/tablerate/condition_name');
- }
- $gridBlock->setWebsiteId($website->getId())->setConditionName($conditionName);
- $content = $gridBlock->getCsvFile();
- $this->_prepareDownloadResponse($fileName, $content);
- }
- /**
- * Check is allow modify system configuration
- *
- * @return bool
- */
- protected function _isAllowed()
- {
- return Mage::getSingleton('admin/session')->isAllowed('system/config');
- }
- /**
- * Check if specified section allowed in ACL
- *
- * Will forward to deniedAction(), if not allowed.
- *
- * @param string $section
- * @return bool
- */
- protected function _isSectionAllowed($section)
- {
- try {
- $session = Mage::getSingleton('admin/session');
- $resourceLookup = "admin/system/config/{$section}";
- if ($session->getData('acl') instanceof Mage_Admin_Model_Acl) {
- $resourceId = $session->getData('acl')->get($resourceLookup)->getResourceId();
- if (!$session->isAllowed($resourceId)) {
- throw new Exception('');
- }
- return true;
- }
- }
- catch (Zend_Acl_Exception $e) {
- $this->norouteAction();
- $this->setFlag('', self::FLAG_NO_DISPATCH, true);
- return false;
- }
- catch (Exception $e) {
- $this->deniedAction();
- $this->setFlag('', self::FLAG_NO_DISPATCH, true);
- return false;
- }
- }
- /**
- * Save state of configuration field sets
- *
- * @param array $configState
- * @return bool
- */
- protected function _saveState($configState = array())
- {
- $adminUser = Mage::getSingleton('admin/session')->getUser();
- if (is_array($configState)) {
- $extra = $adminUser->getExtra();
- if (!is_array($extra)) {
- $extra = array();
- }
- if (!isset($extra['configState'])) {
- $extra['configState'] = array();
- }
- foreach ($configState as $fieldset => $state) {
- $extra['configState'][$fieldset] = $state;
- }
- $adminUser->saveExtra($extra);
- }
- return true;
- }
- }