/** * 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; }
/** * 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; }