/** * This methods overwrites Mage_Adminhtml_Model_System_Config_Backend_File::_beforeSave * in a bad way, just because the "$uploader = new class". * * @param Mage_Adminhtml_Model_System_Config_Backend_File $model * @param type $uploadDir * @param type $allowedExtensions * @return Mage_Adminhtml_Model_System_Config_Backend_File */ public function systemConfigBackendFileBeforeSave(Mage_Adminhtml_Model_System_Config_Backend_File $model, $uploadDir, $allowedExtensions) { $value = $model->getValue(); if ($_FILES['groups']['tmp_name'][$model->getGroupId()]['fields'][$model->getField()]['value']) { try { $file = array(); $tmpName = $_FILES['groups']['tmp_name']; $file['tmp_name'] = $tmpName[$model->getGroupId()]['fields'][$model->getField()]['value']; $name = $_FILES['groups']['name']; $file['name'] = $name[$model->getGroupId()]['fields'][$model->getField()]['value']; $uploader = new MageFM_CDN_Model_Uploader($file); $uploader->setAllowedExtensions($allowedExtensions); $uploader->setAllowRenameFiles(true); $uploader->addValidateCallback('size', $model, 'validateMaxSize'); $result = $uploader->save($uploadDir); } catch (Exception $e) { Mage::throwException($e->getMessage()); return $model; } $filename = $result['file']; if ($filename) { $filename = $model->prependScopeInfo($filename); $model->setValue($filename); } } else { if (is_array($value) && !empty($value['delete'])) { $model->setValue(''); } else { $model->unsValue(); } } return $model; }
/** * This responds to a settings import request from the advanced section of the admin panel configurations. * The code here should get the imported file, run through it, and update every value that's included in it. */ protected function _beforeSave() { parent::_beforeSave(); //List of settings fields that we want to import or export. $fields = array('general_settings' => array('host', 'port', 'sitekey'), 'export_settings' => array('zipname', 'datahistoryname', 'delimiter', 'enclosed_values', 'min_tier_price', 'type', 'path', 'ftp_host', 'ftp_port', 'ftp_user', 'ftp_password', 'passive', 'cron_expr', 'extra_tables'), 'display_settings' => array('campaigns_enabled', 'alt_message', 'price_selector', 'enable_multiselect', 'go_to_product_on_one_result'), 'nav_to_search_settings' => array('nav_to_search', 'nav_to_search_search_by', 'nav_to_search_use_full_category_path', 'nav_to_search_enable_blacklist', 'nav_to_search_blacklist'), 'anlx_settings' => array('host', 'cid'), 'autocomplete_settings' => array('autocomplete_enabled', 'ac_customer_name', 'ac_frontend_address', 'ac_scriptserver_address'), 'livesight_settings' => array('livesight_enabled'), 'crosssell_settings' => array('crosssell_enabled', 'crosssell_limit', 'upsell_enabled', 'upsell_limit', 'crosssell_customer_name', 'crosssell_request_handle', 'crosssell_address'), 'advanced' => array('export_chunk_size', 'export_process_limit', 'enable_monitoring', 'enable_connectivity', 'connectivity_attempts', 'connectivity_failures')); //@todo clean up all the issets and array_key_exists - they'll probably cause unexpected behavior in case something doesn't run correctly. //@todo clean up all the Mage::logs. //Fetching the imported settings from the file. $imported_settings = json_decode(file_get_contents(Mage::getBaseDir('base') . '/' . $this->_getUploadDir() . '/' . $this->getValue())); //Mage::log('imported settings: '); //Mage::log($imported_settings); $stores = array(0); foreach (Mage::app()->getStores() as $store) { $stores[$store->getId()] = $store->getId(); } foreach ($stores as $store) { //Mage::log('running on store: ' . $store); $store_settings = Mage::getStoreConfig('conversionpro', $store); $isOverrideEnabled = Mage::getStoreConfig('conversionpro/advanced/import_override', $store); //Mage::log('isOverrideEnabled: ' . $isOverrideEnabled); $scope = $store == 0 ? 'default' : 'stores'; //Mage::log('scope: ' . $scope); foreach ($fields as $group => $values) { //Mage::log('group: ' . $group); if (array_key_exists($group, $store_settings) && !is_array($store_settings[$group])) { //Mage::log('group did not exist in store_setting or it was not an array'); $store_settings[$group] = array(); } foreach ($values as $key) { //Mage::log('key: ' . $key); $value = ''; if (array_key_exists($group, $store_settings) && array_key_exists($key, $store_settings[$group])) { //Mage::log($store_settings[$group]); //Mage::log('key exists in store_settings'); $value = $store_settings[$group][$key]; //Mage::log('value: ' . $value); } if (!isset($value) || $value == '' || $isOverrideEnabled) { //Mage::log('value does not exist or override is enabled.'); if (isset($imported_settings)) { if (isset($imported_settings[$store]->{$group}) && isset($imported_settings[$store]->{$group}->{$key})) { //Mage::log($imported_settings[$store]->$group->$key); //Mage::log('key exists in imported settings.'); //Override the existing value in the database. Mage::log('setting ' . 'conversionpro/' . $group . '/' . $key . ' to ' . $imported_settings[$store]->{$group}->{$key} . ' on store ' . $store); Mage::getConfig()->saveConfig('conversionpro/' . $group . '/' . $key, $imported_settings[$store]->{$group}->{$key}, $scope, $store); } else { //Mage::log('key does not exist in imported settings.'); //Delete the row from the database, so that it'll check the 'Use Default' option. Mage::getConfig()->deleteConfig('conversionpro/' . $group . '/' . $key, $scope, $store); } } } } } } Mage::getConfig()->reinit(); Mage::app()->reinitStores(); return $this; }
/** * Overwritten parent method for adding validators * * @param Mage_Core_Model_File_Uploader $uploader */ protected function addValidators(Mage_Core_Model_File_Uploader $uploader) { parent::addValidators($uploader); $validator = new Mage_Core_Model_File_Validator_Image(); $validator->setAllowedImageTypes($this->_getAllowedExtensions()); $uploader->addValidateCallback(Mage_Core_Model_File_Validator_Image::NAME, $validator, 'validate'); }
/** * Override core before save for upload. Validate the export order configuration XML file * before saving the value for core_config_data. In case validation fails unset value. * * @return Mage_Adminhtml_Model_System_Config_Backend_File */ protected function _beforeSave() { parent::_beforeSave(); $file = @file_get_contents(Mage::getBaseDir() . DS . 'var' . DS . 'uploads' . DS . $this->getValue()); if (isset($file) && $file != '' && $file) { try { Mage::helper('orderexporter/config')->validateExportXML($file); } catch (Exception $e) { $this->setValue(null); Mage::throwException($e->getMessage()); } Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Order Export Configuration XML was loaded and validated successfully.')); } return $this; }