/** * Override method to output our custom HTML with JavaScript * * @param Varien_Data_Form_Element_Abstract $element * * @return String */ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) { // Only do validation if module is installed and active if ($this->helper('bronto_common')->isModuleInstalled('Bronto_Verify')) { $_html = array(); // Create form object to grab scope details $form = new Mage_Adminhtml_Block_System_Config_Form(); $scope = $form->getScope(); $scopeId = $form->getScopeId(); $element->setData('onchange', "validateToken(this.form, this);"); $element->setData('after_element_html', "\n <span id=\"loadingMask\" style=\"display: none; width: 100px;\">\n <span class=\"loader\" id=\"loading-mask-loader\" style=\"background: url(" . $this->getSkinUrl('bronto/images/ajax-loader-tr.gif') . ") no-repeat 0 50%; background-size: 20px; padding:3px 0 3px 25px;\">" . $this->__(' Verifying...') . "</span>\n <span id=\"loading-mask\"></span>\n </span>\n <script>\n /**\n * Function to Toggle Form Elements Disabled Status Based On Token Status\n */\n function toggleDisabled(form, element) {\n // Get Status Text Element\n var statusText = \$('bronto-validation-status-text');\n // If Status Text Element has Class of 'invalid' or empty, set boolean disabled value\n var disabled = (statusText.className == 'invalid' || statusText.className == '');\n\n // Cycle through form elements and disable/enable elements\n for (i = 0; i < form.length; i++) {\n if (form.elements[i].id != '{$element->getId()}' &&\n form.elements[i].id != 'bronto_settings_enabled' &&\n form.elements[i].id != 'verify-button' &&\n form.elements[i].type != 'hidden' &&\n form.elements[i].name.indexOf('groups') == 0) {\n form.elements[i].disabled = disabled;\n }\n }\n\n // Get Last Element of Form, and if the class name is 'note', empty the html value\n var last = element.parentNode.lastChild;\n if (last.className == 'note') {\n last.innerHTML = '';\n }\n }\n\n function trim1 (str) {\n return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*\$/, '');\n }\n\n function validateToken(form, element) {\n var token = trim1(\$('{$element->getId()}').value);\n var statusText = \$('bronto-validation-status');\n var reloadUrl = '{$this->getUrl('*/apitoken/ajaxvalidation')}';\n\n statusText.innerHTML = \$('loadingMask').innerHTML;\n statusText.removeClassName('valid').removeClassName('invalid');\n\n new Ajax.Request(reloadUrl, {\n method: 'post',\n parameters: {token: token, scope: '{$scope}', scopeid: '{$scopeId}'},\n onComplete: function(transport) {\n Element.hide('loadingMask');\n statusText.innerHTML = transport.responseText;\n\n toggleDisabled(form, element);\n }\n });\n\n return false;\n }\n </script>\n "); if (!$this->helper('bronto_common')->getApiToken()) { $element->setComment('<span style="color:red;font-weight:bold">Please enter your Bronto API key here.</span>'); $buttonHtml = ""; } else { $button = $this->getLayout()->createBlock('bronto_verify/adminhtml_widget_button_runtoken')->toHtml(); $buttonHtml = "<p class=\"form-buttons\" id=\"verify-button\">{$button}</p>"; } // Show Roundtrip Install Verification Status $_html[] = $buttonHtml . '<style>' . ' #bronto-validation-status { color:grey; font-weight:bold; }' . ' #bronto-validation-status .valid { color: green; }' . ' #bronto-validation-status .invalid { color: red; }' . '</style>' . '<strong style="float: left; width: 80px">Last Status:</strong> ' . '<span id="bronto-validation-status">' . $this->helper('bronto_verify/apitoken')->getAdminScopedApitokenStatusText() . '</span>'; // Show everything Else if (!empty($_html)) { $elementHtml = $element->getElementHtml(); if ($element->getComment()) { $elementHtml .= '<p class="note"><span>' . $element->getComment() . '</span></p>'; $element->setComment(null); } $elementHtml .= '<div style="margin-top:10px">'; $elementHtml .= implode('<br />', $_html); $elementHtml .= '</div>'; return $elementHtml; } } return parent::_getElementHtml($element); }
protected function _prepareForm() { $form = new Varien_Data_Form(array('id' => 'config_edit_form_codeswholesale', 'action' => $this->getUrl('apiplugin/adminhtml_configuration_settings/save'), 'method' => 'post', 'enctype' => 'multipart/form-data')); $form->setUseContainer(true); $this->setForm($form); return parent::_prepareForm(); }
/** * @return Netz98_CustomerGroup_Block_Adminhtml_System_Config_Form */ protected function _initObjects() { parent::_initObjects(); $sections = $this->_configFields->getSection($this->getSectionCode(), $this->getWebsiteCode(), $this->getStoreCode()); /** * Create config field during runtime. * * Check if we are in sales tab and sub-tab payment or shipping. * Then we create SimpleXMLElements for form init. */ if ($sections->tab == 'sales' && in_array($sections->getName(), array('payment', 'carriers'))) { // // Standard payment and shipping sections // foreach ($sections->groups as $group) { foreach ($group as $subGroup) { if (in_array($subGroup->getName(), array('paypal_payment_solutions', 'paypal_alternative_payment_methods', 'account'))) { continue; } if (isset($subGroup->fields)) { $this->_addFieldToConfigGroup($subGroup); } } } } elseif ($sections->tab == 'sales' && $sections->getName() == 'paypal') { /// // PayPal // if (isset($sections->groups->express)) { $this->_addFieldToConfigGroup($sections->groups->express); } if (isset($sections->groups->wps)) { $this->_addFieldToConfigGroup($sections->groups->wps); } } /* elseif ($sections->tab == 'sales' && $sections->getName() == 'google') { // // Google checkout and shipping // if (isset($sections->groups->checkout)) { $this->_addFieldToConfigGroup($sections->groups->checkout); } if (isset($sections->groups->checkout_shipping_merchant)) { $this->_addFieldToConfigGroup($sections->groups->checkout_shipping_merchant); } if (isset($sections->groups->checkout_shipping_carrier)) { $this->_addFieldToConfigGroup($sections->groups->checkout_shipping_carrier); } if (isset($sections->groups->checkout_shipping_flatrate)) { $this->_addFieldToConfigGroup($sections->groups->checkout_shipping_flatrate); } if (isset($sections->groups->checkout_shipping_virtual)) { $this->_addFieldToConfigGroup($sections->groups->checkout_shipping_virtual); } }*/ return $this; }
/** * Override method to output our custom HTML with JavaScript * * @param Varien_Data_Form_Element_Abstract $element * * @return String */ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) { $_html = array(); // Create form object to grab scope details $form = new Mage_Adminhtml_Block_System_Config_Form(); $scope = $form->getScope(); $scopeId = $form->getScopeId(); $script = "\n <span id=\"roundtrip_loadingmask\" style=\"display: none; width: 100px;\">\n <span class=\"loader\" id=\"roundtrip-loading-mask-loader\" style=\"background: url(" . $this->getSkinUrl('bronto/images/ajax-loader-tr.gif') . ") no-repeat 0 50%; background-size: 20px; padding:3px 0 3px 25px;\">" . $this->__(' Validating...') . "</span>\n <span id=\"roundtrip-loading-mask\"></span>\n </span>\n <script>\n function validateRoundtrip() {\n var statusText = \$('bronto-roundtrip-status');\n var reloadurl = '{$this->getUrl('*/roundtrip/ajaxvalidation')}';\n \n statusText.innerHTML = \$('roundtrip_loadingmask').innerHTML;\n statusText.removeClassName('valid').removeClassName('invalid');\n\n new Ajax.Request(reloadurl, {\n method: 'post',\n parameters: {scope: '{$scope}', scopeid: '{$scopeId}'},\n onComplete: function(transport) {\n Element.hide('roundtrip_loadingmask');\n if (transport.responseText == '\"Passed Verification\"') {\n statusText.innerHTML = 'Passed Verification';\n statusText.addClassName('valid');\n } else if (transport.responseText == '\"Failed Verification\"') {\n statusText.innerHTML = 'Failed Verification';\n statusText.addClassName('invalid');\n } else {\n statusText.innerHTML = 'Failed Verification';\n statusText.addClassName('invalid');\n }\n }\n });\n \n return false;\n }\n </script>\n "; $statusText = '<span style="color:grey;font-weight:bold">' . $this->helper('bronto_verify/roundtrip')->getAdminScopedRoundtripStatusText() . '</span>'; $button = $this->getLayout()->createBlock('bronto_verify/adminhtml_widget_button_runroundtrip')->toHtml(); $buttonHtml = "<p class=\"form-buttons\" id=\"roundtrip-verify-button\">{$button}</p>"; // Show Roundtrip Install Verification Status $_html[] = '<style>' . '#bronto-roundtrip-status { color:grey; font-weight:bold; }' . '#bronto-roundtrip-status.valid { color: green; }' . '#bronto-roundtrip-status.invalid { color: red; }' . '</style>' . $statusText . $buttonHtml; $_html[] = $script; // Show everything Else if (!empty($_html)) { $elementHtml = implode('<br />', $_html); return $elementHtml; } return parent::_getElementHtml($element); }
/** * Override method to output our custom HTML with JavaScript * * @param Varien_Data_Form_Element_Abstract $element * * @return String */ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) { $_html = array(); // Create form object to grab scope details $form = new Mage_Adminhtml_Block_System_Config_Form(); $scope = $form->getScope(); $scopeId = $form->getScopeId(); $token = Mage::helper('bronto_verify/apitoken')->getApiToken(); $script = "\r\n <span id=\"loadingmask\" style=\"display: none; width: 100px;\">\r\n <span class=\"loader\" id=\"loading-mask-loader\" style=\"background: url(" . $this->getSkinUrl('bronto/images/ajax-loader-tr.gif') . ") no-repeat 0 50%; background-size: 20px; padding:3px 0 3px 25px;\">" . $this->__(' Validating...') . "</span>\r\n <span id=\"loading-mask\"></span>\r\n </span>\r\n <script>\r\n function trim1 (str) {\r\n return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*\$/, '');\r\n }\r\n\r\n function validateToken() {\r\n var token = trim1('{$token}');\r\n var statusText = \$('bronto-validation-status');\r\n var reloadurl = '{$this->getUrl('*/apitoken/ajaxvalidation')}';\r\n \r\n statusText.innerHTML = \$('loadingmask').innerHTML;\r\n statusText.removeClassName('valid').removeClassName('invalid');\r\n\r\n new Ajax.Request(reloadurl, {\r\n method: 'post',\r\n parameters: {token: token, scope: '{$scope}', scopeid: '{$scopeId}'},\r\n onComplete: function(transport) {\r\n Element.hide('loadingmask');\r\n statusText.innerHTML = transport.responseText;\r\n }\r\n });\r\n \r\n return false;\r\n }\r\n </script>\r\n "; $button = $this->getLayout()->createBlock('bronto_verify/adminhtml_widget_button_runtoken')->toHtml(); $buttonHtml = "<p class=\"form-buttons\" id=\"verify-button\">{$button}</p>"; // Show API Token Verification Status $_html[] = $buttonHtml . '<style>' . ' #bronto-validation-status { color:grey; font-weight:bold; }' . ' #bronto-validation-status .valid { color: green; }' . ' #bronto-validation-status .invalid { color: red; }' . '</style>' . '<span id="bronto-validation-status">' . $this->helper('bronto_verify/apitoken')->setApiToken($token)->getAdminScopedApitokenStatusText() . '</span>'; $_html[] = $script; // Show everything Else if (!empty($_html)) { $elementHtml = implode('<br />', $_html); return $elementHtml; } return parent::_getElementHtml($element); }
protected function _prepareLayout() { $this->getLayout()->getBlock('head')->addJs('M2ePro/General/PhpFunctions.js'); $this->getLayout()->getBlock('head')->addJs('M2ePro/General/PrototypeSimulate.js'); $this->getLayout()->getBlock('head')->addJs('M2ePro/General/CommonHandler.js'); $this->getLayout()->getBlock('head')->addJs('M2ePro/General/TranslatorHandler.js'); $this->getLayout()->getBlock('head')->addJs('M2ePro/General/PhpHandler.js'); $this->getLayout()->getBlock('head')->addJs('M2ePro/General/UrlHandler.js'); $this->getLayout()->getBlock('head')->addJs('M2ePro/Plugin/Magento/Message.js'); $this->getLayout()->getBlock('head')->addJs('M2ePro/Plugin/Magento/Block.js'); $this->getLayout()->getBlock('head')->addJs('M2ePro/Plugin/Magento/FieldTip.js'); $this->getLayout()->getBlock('head')->addJs('M2ePro/Plugin/BlockNotice.js'); $this->getLayout()->getBlock('head')->addJs('M2ePro/Initialization.js'); $this->getLayout()->getBlock('head')->addCss('M2ePro/css/main.css'); $this->getLayout()->getBlock('head')->addCss('M2ePro/css/Plugin/BlockNotice.css'); parent::_prepareLayout(); }
/** * @return Wage_ShippingDescription_Block_Adminhtml_System_Config_Form */ protected function _initObjects() { parent::_initObjects(); $sections = $this->_configFields->getSection($this->getSectionCode(), $this->getWebsiteCode(), $this->getStoreCode()); if ($sections->tab == 'sales' && in_array($sections->getName(), array('carriers'))) { // // Standard payment and shipping sections // foreach ($sections->groups as $group) { foreach ($group as $key => $subGroup) { if (isset($subGroup->fields)) { $this->_addFieldToConfigGroup($subGroup); } } } } return $this; }
/** * Prepare settings form * * @return Mage_Adminhtml_Block_Widget_Form */ protected function _prepareForm() { /** @var $settings Itoris_LayeredNavigation_Model_Settings */ $settings = Mage::getModel('itoris_layerednavigation/settings'); $settings->load($this->getDataHelper()->getWebsiteIdFromRequest(), $this->getDataHelper()->getStoreIdFromRequest()); $scope = $this->getDataHelper()->getScope($this->getRequest()); Varien_Data_Form::getFieldsetElementRenderer()->setTemplate('itoris/layerednavigation/settings/element.phtml'); $form = new Varien_Data_Form(); $fieldSet = $form->addFieldset('base_fieldset', array('legend' => $this->__('Settings'))); $fieldSet->addField('enabled', 'select', array('name' => 'settings[enabled][value]', 'label' => $this->__('Extension Enabled'), 'data_type' => 'int', 'values' => array(array('value' => 1, 'label' => $this->__('Yes')), array('value' => 0, 'label' => $this->__('No'))), 'use_parent_value' => $settings->isParentValue('enabled', $scope))); $fieldSet->addField('multicategory_enabled', 'select', array('name' => 'settings[multicategory_enabled][value]', 'label' => $this->__('Multi-category mode'), 'data_type' => 'int', 'values' => array(array('value' => 1, 'label' => $this->__('Yes')), array('value' => 0, 'label' => $this->__('No'))), 'use_parent_value' => $settings->isParentValue('multicategory_enabled', $scope))); $fieldSet->addField('graphical_price_enabled', 'select', array('name' => 'settings[graphical_price_enabled][value]', 'label' => $this->__('Graphical price range'), 'data_type' => 'int', 'values' => array(array('value' => 1, 'label' => $this->__('Yes')), array('value' => 0, 'label' => $this->__('No'))), 'use_parent_value' => $settings->isParentValue('graphical_price_enabled', $scope))); $form->setValues($settings->getSettings()); $form->setAction($this->getUrl('*/*/save', array('website' => $this->getRequest()->getParam('website'), 'store' => $this->getRequest()->getParam('store')))); $form->setMethod('post'); $form->setUseContainer(true); $form->setId('edit_form'); $this->setForm($form); return parent::_prepareForm(); }
/** * @see parent */ public function _afterToHtml($html) { $html .= ' <script type="text/javascript"> function confirmAndSubmit() { var canSubmit = true; $$("#bronto_support_terms").each(function(elem) { if (elem.value === "0") { canSubmit = confirm("You must agree to Bronto\'s Terms of Service in the Registration section. You agree to the Terms by pressing \\"OK\\"."); if (canSubmit) { elem.value = "1"; } } }); if (canSubmit) { configForm.submit(); } } </script>'; return parent::_afterToHtml($html); }
/** * 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 $this */ public function initFields($fieldset, $group, $section, $fieldPrefix = '', $labelPrefix = '') { parent::initFields($fieldset, $group, $section, $fieldPrefix, $labelPrefix); /** @var Aoe_ConfigHelper_Helper_Data $helper */ $helper = Mage::helper('Aoe_ConfigHelper'); // Return early if restrictions are disabled if ($helper->getConfigPathRestrictionMode() === '') { return $this; } foreach ($group->fields as $fields) { foreach ((array) $fields as $field) { // Generate the field element ID $id = $section->getName() . '_' . $group->getName() . '_' . $fieldPrefix . $field->getName(); // Grab the field off the fieldset $fieldElement = $fieldset->getElements()->searchById($id); if (!$fieldElement) { continue; } // Generate the field config path $path = (string) $field->config_path ?: $section->getName() . '/' . $group->getName() . '/' . $fieldPrefix . $field->getName(); // Look up the mode for a config path $mode = $helper->getConfigPathMode($path, $this->getWebsiteCode(), $this->getStoreCode()); if ($mode === $helper::MODE_READONLY) { $tooltip = htmlspecialchars($helper->__('This value is managed externally. Changes are not permitted.')); $scopeLabel = $helper->__('[READ-ONLY / EXTERNAL]'); $scopeLabel = "<span style=\"color: red;\" title=\"{$tooltip}\">{$scopeLabel}</span>"; $fieldElement->setScopeLabel($fieldElement->getScopeLabel() . ' ' . $scopeLabel); $fieldElement->setDisabled(true); $fieldElement->setCanUseWebsiteValue(false); $fieldElement->setCanUseDefaultValue(false); } elseif ($mode === $helper::MODE_WARNING) { $tooltip = htmlspecialchars($helper->__('This value is managed externally. Any manual changes are subject to being reverted.')); $scopeLabel = $helper->__('[WARNING / EXTERNAL]'); $scopeLabel = "<span style=\"color: red;\" title=\"{$tooltip}\">{$scopeLabel}</span>"; $fieldElement->setScopeLabel($fieldElement->getScopeLabel() . ' ' . $scopeLabel); } } } return $this; }
public function testInitFormAddsFieldsets() { new Mage_Core_Controller_Front_Action(Mage::app()->getRequest(), Mage::app()->getResponse()); Mage::app()->getRequest()->setParam('section', 'general'); $block = new Mage_Adminhtml_Block_System_Config_Form(); $block->setLayout(Mage::app()->getLayout()); $block->initForm(); $expectedIds = array('general_country' => array('general_country_default' => 'select', 'general_country_allow' => 'select', 'general_country_optional_zip_countries' => 'select', 'general_country_eu_countries' => 'select'), 'general_region' => array('general_region_state_required' => 'select', 'general_region_display_all' => 'select'), 'general_locale' => array('general_locale_timezone' => 'select', 'general_locale_code' => 'select', 'general_locale_firstday' => 'select', 'general_locale_weekend' => 'select'), 'general_restriction' => array('general_restriction_is_active' => 'select', 'general_restriction_mode' => 'select', 'general_restriction_http_redirect' => 'select', 'general_restriction_cms_page' => 'select', 'general_restriction_http_status' => 'select'), 'general_store_information' => array('general_store_information_name' => 'text', 'general_store_information_phone' => 'text', 'general_store_information_merchant_country' => 'select', 'general_store_information_merchant_vat_number' => 'text', 'general_store_information_validate_vat_number' => 'text', 'general_store_information_address' => 'textarea')); $elements = $block->getForm()->getElements(); foreach ($elements as $element) { $this->assertInstanceOf('Varien_Data_Form_Element_Fieldset', $element); $this->assertArrayHasKey($element->getId(), $expectedIds); $fields = $element->getSortedElements(); $this->assertEquals(count($expectedIds[$element->getId()]), count($fields)); foreach ($element->getElements() as $field) { $this->assertArrayHasKey($field->getId(), $expectedIds[$element->getId()]); $this->assertEquals($expectedIds[$element->getId()][$field->getId()], $field->getType()); } } }
public function __construct() { parent::__construct(); $this->setTemplate('em0072settings/form.phtml'); }
/** * Initialize properties of object required for test. * * @return Mage_Adminhtml_Block_System_Config_Form */ protected function _initObjects() { parent::_initObjects(); $this->_configData = $this->_configDataStub; $this->_defaultFieldRenderer = new Mage_Adminhtml_Block_System_Config_Form_Field(); }
public function __construct() { parent::__construct(); $this->setTemplate('galaelectronuessettings/form.phtml'); }
/** * Add the additional grid type as a viable type on the form * * @return array */ protected function _getAdditionalElementTypes() { $types = parent::_getAdditionalElementTypes(); $types["minigrid"] = Mage::getConfig()->getBlockClassName("baminigrid/system_config_form_field_minigrid"); return $types; }
protected function _prepareLayout() { $this->getLayout()->getBlock('head')->removeItem('js', 'mage/adminhtml/loader.js'); $this->getLayout()->getBlock('head')->addJs('commercestack/adminhtml/recommender.js'); return parent::_prepareLayout(); }
public function __construct() { parent::__construct(); $this->setTemplate('em_googlefont/form.phtml'); }
protected function _prepareLayout() { $return = parent::_prepareLayout(); $this->initForm(); return $return; }
/** * @see parent */ public function setParentBlock(Mage_Core_Block_Abstract $block) { $block->getChild('save_button')->setLabel(Mage::helper('adminhtml')->__('Refresh'))->setOnClick("configForm.submit('{$this->getSubmitUrl()}');"); return parent::setParentBlock($block); }
/** * 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; }