Beispiel #1
0
 /**
  * Save config section
  * Require set: section, website, store and groups
  *
  * @return Mage_Adminhtml_Model_Config_Data
  */
 public function save()
 {
     Mage::dispatchEvent('searchanise_adminhtml_config_data_save_before', array('object' => $this));
     $ret = parent::save();
     Mage::dispatchEvent('searchanise_adminhtml_config_data_save_after', array('object' => $ret));
     return $ret;
 }
Beispiel #2
0
 /**
  * Save config section
  * Require set: section, website, store and groups
  *
  * @return Mage_Adminhtml_Model_Config_Data
  */
 public function save()
 {
     $is_csgroup = Mage::app()->getRequest()->getParam('is_csgroup', false);
     if (!$is_csgroup) {
         return parent::save();
     }
     $this->_validate();
     $this->_getScope();
     $section = $this->getSection();
     $website = $this->getWebsite();
     $store = $this->getStore();
     $groups = $this->getGroups();
     $scope = $this->getScope();
     $scopeId = $this->getScopeId();
     if (empty($groups)) {
         return $this;
     }
     $sections = Mage::getModel('adminhtml/config')->getSections();
     /* @var $sections Mage_Core_Model_Config_Element */
     $oldConfig = $this->_getConfig(true);
     $deleteTransaction = Mage::getModel('core/resource_transaction');
     /* @var $deleteTransaction Mage_Core_Model_Resource_Transaction */
     $saveTransaction = Mage::getModel('core/resource_transaction');
     /* @var $saveTransaction Mage_Core_Model_Resource_Transaction */
     // Extends for old config data
     $oldConfigAdditionalGroups = array();
     foreach ($groups as $group => $groupData) {
         /**
          * Map field names if they were cloned
          */
         $groupConfig = $sections->descend($section . '/groups/' . $group);
         if ($clonedFields = !empty($groupConfig->clone_fields)) {
             if ($groupConfig->clone_model) {
                 $cloneModel = Mage::getModel((string) $groupConfig->clone_model);
             } else {
                 Mage::throwException('Config form fieldset clone model required to be able to clone fields');
             }
             $mappedFields = array();
             $fieldsConfig = $sections->descend($section . '/groups/' . $group . '/fields');
             if ($fieldsConfig->hasChildren()) {
                 foreach ($fieldsConfig->children() as $field => $node) {
                     foreach ($cloneModel->getPrefixes() as $prefix) {
                         $mappedFields[$prefix['field'] . (string) $field] = (string) $field;
                     }
                 }
             }
         }
         // set value for group field entry by fieldname
         // use extra memory
         $fieldsetData = array();
         foreach ($groupData['fields'] as $field => $fieldData) {
             $fieldsetData[$field] = is_array($fieldData) && isset($fieldData['value']) ? $fieldData['value'] : null;
         }
         foreach ($groupData['fields'] as $field => $fieldData) {
             /**
              * Get field backend model
              */
             $backendClass = $sections->descend($section . '/groups/' . $group . '/fields/' . $field . '/backend_model');
             if (!$backendClass && $clonedFields && isset($mappedFields[$field])) {
                 $backendClass = $sections->descend($section . '/groups/' . $group . '/fields/' . $mappedFields[$field] . '/backend_model');
             }
             if (!$backendClass) {
                 $backendClass = 'core/config_data';
             }
             $dataObject = Mage::getModel($backendClass);
             if (!$dataObject instanceof Mage_Core_Model_Config_Data) {
                 Mage::throwException('Invalid config field backend model: ' . $backendClass);
             }
             /* @var $dataObject Mage_Core_Model_Config_Data */
             $fieldConfig = $sections->descend($section . '/groups/' . $group . '/fields/' . $field);
             if (!$fieldConfig && $clonedFields && isset($mappedFields[$field])) {
                 $fieldConfig = $sections->descend($section . '/groups/' . $group . '/fields/' . $mappedFields[$field]);
             }
             $dataObject->setField($field)->setGroups($groups)->setGroupId($group)->setStoreCode($store)->setWebsiteCode($website)->setScope($scope)->setScopeId($scopeId)->setFieldConfig($fieldConfig)->setFieldsetData($fieldsetData);
             if (!isset($fieldData['value'])) {
                 $fieldData['value'] = null;
             }
             /*if (is_array($fieldData['value'])) {
                   $fieldData['value'] = join(',', $fieldData['value']);
               }*/
             $path = $section . '/' . $group . '/' . $field;
             /**
              * Look for custom defined field path
              */
             if (is_object($fieldConfig)) {
                 $configPath = (string) $fieldConfig->config_path;
                 if (!empty($configPath) && strrpos($configPath, '/') > 0) {
                     // Extend old data with specified section group
                     $groupPath = substr($configPath, 0, strrpos($configPath, '/'));
                     if (!isset($oldConfigAdditionalGroups[$groupPath])) {
                         $oldConfig = $this->extendConfig($groupPath, true, $oldConfig);
                         $oldConfigAdditionalGroups[$groupPath] = true;
                     }
                     $path = $configPath;
                 }
             }
             $oldPath = $path;
             switch ($is_csgroup) {
                 case 1:
                     if (Mage::helper('core')->isModuleEnabled('Ced_CsGroup')) {
                         $groupData = Mage::app()->getRequest()->getPost();
                         $gcode = isset($groupData['group_code']) && strlen($groupData['group_code']) > 0 ? $groupData['group_code'] : (Mage::app()->getRequest()->getParam('gcode', false) ? Mage::app()->getRequest()->getParam('gcode') : '');
                         if (strlen($gcode) > 0) {
                             $path = $gcode . '/' . $path;
                         }
                     }
                     break;
                 case 2:
                     if (Mage::helper('core')->isModuleEnabled('Ced_CsCommission')) {
                         $vendorId = Mage::app()->getRequest()->getParam('vendor_id', 0);
                         $vendor = Mage::getModel('csmarketplace/vendor')->load($vendorId);
                         if ($vendor && $vendor->getId()) {
                             $path = $vendor->getId() . '/' . $path;
                         }
                     }
                     break;
                 default:
                     return $this;
                     break;
             }
             if ($path == $oldPath) {
                 return $this;
             }
             $inherit = !empty($fieldData['inherit']);
             /* echo $path;
             			echo $fieldData['value'];die; */
             $dataObject->setPath($path)->setValue($fieldData['value']);
             if (isset($oldConfig[$path])) {
                 $dataObject->setConfigId($oldConfig[$path]['config_id']);
                 /**
                  * Delete config data if inherit
                  */
                 if (!$inherit) {
                     $saveTransaction->addObject($dataObject);
                 } else {
                     $deleteTransaction->addObject($dataObject);
                 }
             } elseif (isset($oldConfig[$oldPath])) {
                 $dataObject->setConfigId($oldConfig[$oldPath]['config_id']);
                 /**
                  * Delete config data if inherit
                  */
                 if (!$inherit) {
                     $saveTransaction->addObject($dataObject);
                 } else {
                     $deleteTransaction->addObject($dataObject);
                 }
             } elseif (!$inherit) {
                 $dataObject->unsConfigId();
                 $saveTransaction->addObject($dataObject);
             }
         }
     }
     /* print_r($dataObject->getData());die; */
     $deleteTransaction->delete();
     /* print_r($dataObject->getData());die; */
     $saveTransaction->save();
     return $this;
 }