예제 #1
0
 /**
  * Iterate all active modules "etc" folders and combine data from
  * specidied xml file name to one object
  *
  * @param   string $fileName
  * @param   null|Mage_Core_Model_Config_Base $mergeToObject
  * @return  Mage_Core_Model_Config_Base
  */
 public function loadPackageConfiguration($mergeToObject = null, $mergeModel = null)
 {
     if ($mergeToObject === null) {
         $mergeToObject = new Mage_Core_Model_Config_Base();
         $mergeToObject->loadString('<config/>');
     }
     if ($mergeModel === null) {
         $mergeModel = new Mage_Core_Model_Config_Base();
     }
     $channels = Mage::getModel('channel/channel')->getCollection();
     foreach ($channels as $id => $channel) {
         // if the store is an activated channel
         if ($channel->load($id)->isChannel()) {
             if ($mergeModel->loadString($channel->getApiConfig())) {
                 $mergeToObject->extend($mergeModel, true);
             }
         }
     }
     /* $packages = Mage::getModel('catalog/product')
                 ->getCollection()
                 ->addFieldToFilter(
                 	'type_id',
                     Faett_Package_Model_Product_Type::TYPE_PACKAGE
                 );
     
             foreach ($packages as $id => $package) {
                 if ($mergeModel->loadString($package->load($id)->getApiConfig())) {
                     $mergeToObject->extend($mergeModel, true);
                 }
             } */
     return $mergeToObject;
 }
예제 #2
0
 /**
  * Iterate all active modules "etc" folders and combine data from
  * specidied xml file name to one object
  *
  * @param   string $fileName
  * @param   null|Mage_Core_Model_Config_Base $mergeToObject
  * @return  Mage_Core_Model_Config_Base
  */
 public function loadPackageConfiguration($mergeToObject = null, $mergeModel = null)
 {
     // initialize the configuration XML structure to append
     if ($mergeToObject === null) {
         $mergeToObject = new Mage_Core_Model_Config_Base();
         $mergeToObject->loadString('<config/>');
     }
     // initialize the configuration XML structure
     if ($mergeModel === null) {
         $mergeModel = new Mage_Core_Model_Config_Base();
     }
     // load the Collection with all channels
     $channels = Mage::getModel('channel/channel')->getCollection();
     // iterate over the channels
     foreach ($channels as $id => $channel) {
         // if the store is an activated channel
         if ($channel->load($id)->isChannel()) {
             // merge the channel to the ACL's
             if ($mergeModel->loadString($channel->getApiConfig())) {
                 $mergeToObject->extend($mergeModel, true);
             }
             // load the package Collection
             $packages = Mage::helper('channel')->getPackageCollection($channel);
             // merge the packages to the channel's ACL's
             foreach ($packages as $id => $package) {
                 if ($mergeModel->loadString($package->load($id)->getApiConfig($channel))) {
                     $mergeToObject->extend($mergeModel, true);
                 }
             }
         }
     }
     // return the configuration structure
     return $mergeToObject;
 }
예제 #3
0
 /**
  * Load declared modules configuration
  *
  * @param   null $mergeConfig depricated
  * @return  Mage_Core_Model_Config
  */
 protected function _loadDeclaredModules($mergeConfig = null)
 {
     $moduleFiles = $this->_getDeclaredModuleFiles();
     if (!$moduleFiles) {
         return;
     }
     Varien_Profiler::start('config/load-modules-declaration');
     $unsortedConfig = new Mage_Core_Model_Config_Base();
     $unsortedConfig->loadString('<config/>');
     $fileConfig = new Mage_Core_Model_Config_Base();
     // load modules declarations
     foreach ($moduleFiles as $file) {
         $fileConfig->loadFile($file);
         $unsortedConfig->extend($fileConfig);
     }
     $moduleDepends = array();
     foreach ($unsortedConfig->getNode('modules')->children() as $moduleName => $moduleNode) {
         if (!$this->_isAllowedModule($moduleName)) {
             continue;
         }
         $depends = array();
         if ($moduleNode->depends) {
             foreach ($moduleNode->depends->children() as $depend) {
                 $depends[$depend->getName()] = true;
             }
         }
         $moduleDepends[$moduleName] = array('module' => $moduleName, 'depends' => $depends, 'active' => 'true' === (string) $moduleNode->active ? true : false);
     }
     // check and sort module dependence
     $moduleDepends = $this->_sortModuleDepends($moduleDepends);
     // create sorted config
     $sortedConfig = new Mage_Core_Model_Config_Base();
     $sortedConfig->loadString('<config><modules/></config>');
     foreach ($unsortedConfig->getNode()->children() as $nodeName => $node) {
         if ($nodeName != 'modules') {
             $sortedConfig->getNode()->appendChild($node);
         }
     }
     foreach ($moduleDepends as $moduleProp) {
         $node = $unsortedConfig->getNode('modules/' . $moduleProp['module']);
         $sortedConfig->getNode('modules')->appendChild($node);
     }
     $this->extend($sortedConfig);
     Varien_Profiler::stop('config/load-modules-declaration');
     return $this;
 }
예제 #4
0
 public function mergeConfig($mergeToObject, $extensions)
 {
     foreach ($extensions as $extension) {
         if ($extension) {
             $mergeModel = new Mage_Core_Model_Config_Base();
             if ($mergeModel->loadString($extension)) {
                 $mergeToObject->extend($mergeModel->getNode(), true);
             }
         }
     }
     return $mergeToObject;
 }
예제 #5
0
    /**
     * Init fieldset fields
     *
     * @param Varien_Data_Form_Element_Fieldset $fieldset
     * @param Varien_Simplexml_Element $group
     * @param Varien_Simplexml_Element $section
     * @param string $fieldPrefix
     * @param string $labelPrefix
     * @return Soon_StockReleaser_Block_Adminhtml_System_Config_Form
     */
    public function initFields($fieldset, $group, $section, $fieldPrefix = '', $labelPrefix = '')
    {
        if (!$group->is('use_custom_form', 1)) {
            return parent::initFields($fieldset, $group, $section, $fieldPrefix = '', $labelPrefix = '');
        }
        if (!$this->_configDataObject) {
            $this->_initObjects();
        }
        // Extends for config data
        $configDataAdditionalGroups = array();
        $paymentMethods = Mage::helper('payment')->getPaymentMethods();
        $xmlString = "<config><fields>";
        $sort_order = 0;
        foreach ($paymentMethods as $code => $paymentMethod) {
            if (!isset($paymentMethod['active']) || $paymentMethod['active'] == 0) {
                continue;
            }
            ++$sort_order;
            $xmlString .= '
        		<' . $code . ' translate="label">
                            <label>' . $paymentMethod['title'] . '</label>
                            <frontend_type>text</frontend_type>
                            <sort_order>' . $sort_order . '</sort_order>
                            <validate>validate-number</validate>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
			</' . $code . '>';
            ++$sort_order;
            $xmlString .= '                    
        		<' . $code . '-unit translate="label">
                            <frontend_type>select</frontend_type>
                            <source_model>stockreleaser/system_config_source_unit</source_model>
                            <sort_order>' . $sort_order . '</sort_order>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
			</' . $code . '-unit>';
        }
        $xmlString .= "</fields></config>";
        $element = new Mage_Core_Model_Config_Base();
        $element->loadString($xmlString);
        foreach ($element->getNode('fields') as $elements) {
            $elements = (array) $elements;
            // sort either by sort_order or by child node values bypassing the sort_order
            if ($group->sort_fields && $group->sort_fields->by) {
                $fieldset->setSortElementsByAttribute((string) $group->sort_fields->by, $group->sort_fields->direction_desc ? SORT_DESC : SORT_ASC);
            } else {
                usort($elements, array($this, '_sortForm'));
            }
            foreach ($elements as $e) {
                if (!$this->_canShowField($e)) {
                    continue;
                }
                /**
                 * Look for custom defined field path
                 */
                $path = (string) $e->config_path;
                if (empty($path)) {
                    $path = $section->getName() . '/' . $group->getName() . '/' . $fieldPrefix . $e->getName();
                } elseif (strrpos($path, '/') > 0) {
                    // Extend config data with new section group
                    $groupPath = substr($path, 0, strrpos($path, '/'));
                    if (!isset($configDataAdditionalGroups[$groupPath])) {
                        $this->_configData = $this->_configDataObject->extendConfig($groupPath, false, $this->_configData);
                        $configDataAdditionalGroups[$groupPath] = true;
                    }
                }
                $id = $section->getName() . '_' . $group->getName() . '_' . $fieldPrefix . $e->getName();
                if (isset($this->_configData[$path])) {
                    $data = $this->_configData[$path];
                    $inherit = false;
                } else {
                    $data = $this->_configRoot->descend($path);
                    $inherit = true;
                }
                if ($e->frontend_model) {
                    $fieldRenderer = Mage::getBlockSingleton((string) $e->frontend_model);
                } else {
                    $fieldRenderer = $this->_defaultFieldRenderer;
                }
                $fieldRenderer->setForm($this);
                $fieldRenderer->setConfigData($this->_configData);
                $helperName = $this->_configFields->getAttributeModule($section, $group, $e);
                $fieldType = (string) $e->frontend_type ? (string) $e->frontend_type : 'text';
                $name = 'groups[' . $group->getName() . '][fields][' . $fieldPrefix . $e->getName() . '][value]';
                $label = Mage::helper($helperName)->__($labelPrefix) . ' ' . Mage::helper($helperName)->__((string) $e->label);
                $hint = (string) $e->hint ? Mage::helper($helperName)->__((string) $e->hint) : '';
                if ($e->backend_model) {
                    $model = Mage::getModel((string) $e->backend_model);
                    if (!$model instanceof Mage_Core_Model_Config_Data) {
                        Mage::throwException('Invalid config field backend model: ' . (string) $e->backend_model);
                    }
                    $model->setPath($path)->setValue($data)->setWebsite($this->getWebsiteCode())->setStore($this->getStoreCode())->afterLoad();
                    $data = $model->getValue();
                }
                $comment = $this->_prepareFieldComment($e, $helperName, $data);
                $tooltip = $this->_prepareFieldTooltip($e, $helperName);
                if ($e->depends) {
                    foreach ($e->depends->children() as $dependent) {
                        $dependentId = $section->getName() . '_' . $group->getName() . '_' . $fieldPrefix . $dependent->getName();
                        $shouldBeAddedDependence = true;
                        $dependentValue = (string) $dependent;
                        $dependentFieldName = $fieldPrefix . $dependent->getName();
                        $dependentField = $group->fields->{$dependentFieldName};
                        /*
                         * If dependent field can't be shown in current scope and real dependent config value
                         * is not equal to preferred one, then hide dependence fields by adding dependence
                         * based on not shown field (not rendered field)
                         */
                        if (!$this->_canShowField($dependentField)) {
                            $dependentFullPath = $section->getName() . '/' . $group->getName() . '/' . $fieldPrefix . $dependent->getName();
                            $shouldBeAddedDependence = $dependentValue != Mage::getStoreConfig($dependentFullPath, $this->getStoreCode());
                        }
                        if ($shouldBeAddedDependence) {
                            $this->_getDependence()->addFieldMap($id, $id)->addFieldMap($dependentId, $dependentId)->addFieldDependence($id, $dependentId, $dependentValue);
                        }
                    }
                }
                $field = $fieldset->addField($id, $fieldType, array('name' => $name, 'label' => $label, 'comment' => $comment, 'tooltip' => $tooltip, 'hint' => $hint, 'value' => $data, 'inherit' => $inherit, 'class' => $e->frontend_class, 'field_config' => $e, 'scope' => $this->getScope(), 'scope_id' => $this->getScopeId(), 'scope_label' => $this->getScopeLabel($e), 'can_use_default_value' => $this->canUseDefaultValue((int) $e->show_in_default), 'can_use_website_value' => $this->canUseWebsiteValue((int) $e->show_in_website)));
                $this->_prepareFieldOriginalData($field, $e);
                if (isset($e->validate)) {
                    $field->addClass($e->validate);
                }
                if (isset($e->frontend_type) && 'multiselect' === (string) $e->frontend_type && isset($e->can_be_empty)) {
                    $field->setCanBeEmpty(true);
                }
                $field->setRenderer($fieldRenderer);
                if ($e->source_model) {
                    // determine callback for the source model
                    $factoryName = (string) $e->source_model;
                    $method = false;
                    if (preg_match('/^([^:]+?)::([^:]+?)$/', $factoryName, $matches)) {
                        array_shift($matches);
                        list($factoryName, $method) = array_values($matches);
                    }
                    $sourceModel = Mage::getSingleton($factoryName);
                    if ($sourceModel instanceof Varien_Object) {
                        $sourceModel->setPath($path);
                    }
                    if ($method) {
                        if ($fieldType == 'multiselect') {
                            $optionArray = $sourceModel->{$method}();
                        } else {
                            $optionArray = array();
                            foreach ($sourceModel->{$method}() as $value => $label) {
                                $optionArray[] = array('label' => $label, 'value' => $value);
                            }
                        }
                    } else {
                        $optionArray = $sourceModel->toOptionArray($fieldType == 'multiselect');
                    }
                    $field->setValues($optionArray);
                }
            }
        }
        return $this;
    }
예제 #6
0
 /**
  * Iterate all active modules "etc" folders and combine data from
  * specidied xml file name to one object
  *
  * @param   string $fileName
  * @param   null|Mage_Core_Model_Config_Base $mergeToObject
  * @return  Mage_Core_Model_Config_Base
  */
 public function loadModulesConfiguration($fileName, $mergeToObject = null, $mergeModel = null)
 {
     $disableLocalModules = !$this->_canUseLocalModules();
     if ($mergeToObject === null) {
         $mergeToObject = new Mage_Core_Model_Config_Base();
         $mergeToObject->loadString('<config/>');
     }
     if ($mergeModel === null) {
         $mergeModel = new Mage_Core_Model_Config_Base();
     }
     $modules = $this->getNode('modules')->children();
     foreach ($modules as $modName => $module) {
         if ($module->is('active')) {
             if ($disableLocalModules && 'local' === (string) $module->codePool) {
                 continue;
             }
             $configFile = $this->getModuleDir('etc', $modName) . DS . $fileName;
             if ($mergeModel->loadFile($configFile)) {
                 $mergeToObject->extend($mergeModel, true);
             }
         }
     }
     return $mergeToObject;
 }
예제 #7
0
    public function mergexmlAction()
    {
        /*@davidselo: Action para entender como funciona el merge de los archivos XML*/
        /*$first = new Mage_Core_Model_Config_Base;
        		$first->loadString('<config>
        				<one></one>
        				<two></two>
        				<three></three>
        				</config>');
        		
        		$second = new Mage_Core_Model_Config_Base;
        		$second->loadString('<config>
        				<four></four>
        				<five></five>
        				</config>');
        		
        		$first->extend($second);
        	    echo  $first->getNode()->asNiceXml();*/
        /*SALIDA POR PANTALLA:
         * <config>
         * 		<one/>
         * 		<two/>
         * 		<three/>
         *  	<four/>
         *  	<five/>
         *  </config>
         * 
         * */
        /*
        		$first = new Mage_Core_Model_Config_Base;
        		$first->loadString('<config>
        				<one></one>
        				<two></two>
        				<three></three>
        				</config>');
        		
        		$second = new Mage_Core_Model_Config_Base;
        		$second->loadString('<config>
        				<one>Hello</one>
        				<two>Goodby</two>
        				</config>');
        		
        		$first->extend($second);
        		echo $first->getNode()->asNiceXml();*/
        /*SALIDA POR PANTALLA:
         * <config>
         *   <three/>
         *     <one>Hello</one>
         *     <two>Goodby</two>
         * </config>*/
        /*$first = new Mage_Core_Model_Config_Base;
        		$first->loadString('<config>
        				<one>
        				<two>
        				<three></three>
        				</two>
        				</one>
        				</config>');
        		
        		$second = new Mage_Core_Model_Config_Base;
        		$second->loadString('<config>
        				<one>
        				<two>
        				<four></four>
        				</two>
        				</one>
        				</config>');
        		
        		$first->extend($second);
        		echo $first->getNode()->asNiceXml();
        		*/
        $first = new Mage_Core_Model_Config_Base();
        $first->loadString('<config>
				<one>
				<two>
				<three>Original Value</three>
				</two>
				</one>
				</config>');
        $second = new Mage_Core_Model_Config_Base();
        $second->loadString('<config>
				<one>
				<two>
				<four></four>
				<three>New Value</three>
				</two>
				</one>
				</config>');
        $first->extend($second, false);
        echo $first->getNode()->asNiceXml();
    }
예제 #8
0
 /**
  * Class construct
  *
  * @param Magento_ObjectManager $objectManager
  * @param mixed $sourceData
  */
 public function __construct(Magento_ObjectManager $objectManager, $sourceData = null)
 {
     $this->_objectManager = $objectManager;
     $this->setCacheId('config_global');
     $options = $sourceData;
     if (!is_array($options)) {
         $options = array($options);
     }
     $this->_options = $this->_objectManager->create('Mage_Core_Model_Config_Options', array('data' => $options));
     $this->_prototype = $this->_objectManager->create('Mage_Core_Model_Config_Base');
     $this->_prototype->loadString('<config/>');
     $this->_cacheChecksum = null;
     parent::__construct($sourceData);
 }