Example #1
0
 /**
  * Initialize form element
  *
  * @param array $element
  * @param Varien_Data_Form_Element_Fieldset $fieldset
  * @param array $group
  * @param array $section
  * @param string $path
  * @param string $fieldPrefix
  * @param string $labelPrefix
  */
 protected function _initElement($element, $fieldset, $group, $section, $path, $fieldPrefix = '', $labelPrefix = '')
 {
     $elementId = $section['id'] . '_' . $group['id'] . '_' . $fieldPrefix . $element['id'];
     if (array_key_exists($path, $this->_configData)) {
         $data = $this->_configData[$path];
         $inherit = false;
     } else {
         $data = $this->_configRoot->descend($path);
         $inherit = true;
     }
     $fieldRenderer = $this->_getFieldRenderer($element);
     $fieldRenderer->setForm($this);
     $fieldRenderer->setConfigData($this->_configData);
     $helperName = $this->_systemConfig->getAttributeModule($section, $group, $element);
     $fieldType = isset($element['type']) ? $element['type'] : 'text';
     $name = 'groups[' . $group['id'] . '][fields][' . $fieldPrefix . $element['id'] . '][value]';
     $label = $this->helper($helperName)->__($labelPrefix) . ' ' . $this->helper($helperName)->__(array_key_exists('label', $element) ? (string) $element['label'] : '');
     $hint = isset($element['hint']) ? $this->helper($helperName)->__($element['hint']) : '';
     if (isset($element['backend_model'])) {
         $data = $this->_fetchBackendModelData($element, $path, $data);
     }
     $comment = $this->_prepareFieldComment($element, $helperName, $data);
     $tooltip = $this->_prepareFieldTooltip($element, $helperName);
     if (isset($element['depends'])) {
         $this->_processElementDependencies($element, $section, $group, $elementId, $fieldPrefix);
     }
     $field = $fieldset->addField($elementId, $fieldType, array('name' => $name, 'label' => $label, 'comment' => $comment, 'tooltip' => $tooltip, 'hint' => $hint, 'value' => $data, 'inherit' => $inherit, 'class' => isset($element['frontend_class']) ? $element['frontend_class'] : '', 'field_config' => $element, 'scope' => $this->getScope(), 'scope_id' => $this->getScopeId(), 'scope_label' => $this->getScopeLabel($element), 'can_use_default_value' => $this->canUseDefaultValue(isset($element['showInDefault']) ? (int) $element['showInDefault'] : 0), 'can_use_website_value' => $this->canUseWebsiteValue(isset($element['showInWebsite']) ? (int) $element['showInWebsite'] : 0)));
     $this->_applyFieldConfiguration($field, $element);
     $field->setRenderer($fieldRenderer);
     if (isset($element['source_model'])) {
         $field->setValues($this->_extractDataFromSourceModel($element, $path, $fieldType));
     }
 }
Example #2
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 Mage_Adminhtml_Block_System_Config_Form
  */
 public function initFields($fieldset, $group, $section, $fieldPrefix = '', $labelPrefix = '')
 {
     foreach ($group->fields as $elements) {
         $elements = (array) $elements;
         usort($elements, array($this, '_sortForm'));
         foreach ($elements as $e) {
             if (!$this->_canShowField($e)) {
                 continue;
             }
             $path = $section->getName() . '/' . $group->getName() . '/' . $fieldPrefix . $e->getName();
             $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);
             $comment = (string) $e->comment ? Mage::helper($helperName)->__((string) $e->comment) : '';
             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)->afterLoad();
                 $data = $model->getValue();
             }
             $field = $fieldset->addField($id, $fieldType, array('name' => $name, 'label' => $label, 'comment' => $comment, 'value' => $data, 'inherit' => $inherit, 'class' => $e->frontend_class, 'field_config' => $e, 'scope' => $this->getScope(), 'scope_id' => $this->getScopeId(), 'can_use_default_value' => $this->canUseDefaultValue((int) $e->show_in_default), 'can_use_website_value' => $this->canUseWebsiteValue((int) $e->show_in_website)));
             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) {
                 $sourceModel = Mage::getSingleton((string) $e->source_model);
                 if ($sourceModel instanceof Varien_Object) {
                     $sourceModel->setPath($path);
                 }
                 $field->setValues($sourceModel->toOptionArray($fieldType == 'multiselect'));
             }
         }
     }
     return $this;
 }
Example #3
0
 /**
  * Returns node found by the $path
  *
  * @see     Varien_Simplexml_Element::descend
  * @param   string $path
  * @return  Varien_Simplexml_Element
  */
 public function getNode($path = null)
 {
     if (!$this->_xml instanceof Varien_Simplexml_Element) {
         return false;
     } elseif ($path === null) {
         return $this->_xml;
     } else {
         return $this->_xml->descend($path);
     }
 }
Example #4
0
 /**
  * Initialize form element
  *
  * @param Mage_Backend_Model_Config_Structure_Element_Field $field
  * @param Varien_Data_Form_Element_Fieldset $fieldset
  * @param $path
  * @param string $fieldPrefix
  * @param string $labelPrefix
  */
 protected function _initElement(Mage_Backend_Model_Config_Structure_Element_Field $field, Varien_Data_Form_Element_Fieldset $fieldset, $path, $fieldPrefix = '', $labelPrefix = '')
 {
     $inherit = true;
     if (array_key_exists($path, $this->_configData)) {
         $data = $this->_configData[$path];
         $inherit = false;
     } elseif ($field->getConfigPath() !== null) {
         $data = $this->_configRoot->descend($field->getConfigPath());
     } else {
         $data = $this->_configRoot->descend($path);
     }
     $fieldRendererClass = $field->getFrontendModel();
     if ($fieldRendererClass) {
         $fieldRenderer = Mage::getBlockSingleton($fieldRendererClass);
     } else {
         $fieldRenderer = $this->_fieldRenderer;
     }
     $fieldRenderer->setForm($this);
     $fieldRenderer->setConfigData($this->_configData);
     $elementName = $this->_generateElementName($field->getPath(), $fieldPrefix);
     $elementId = $this->_generateElementId($field->getPath($fieldPrefix));
     if ($field->hasBackendModel()) {
         $backendModel = $field->getBackendModel();
         $backendModel->setPath($path)->setValue($data)->setWebsite($this->getWebsiteCode())->setStore($this->getStoreCode())->afterLoad();
         $data = $backendModel->getValue();
     }
     $dependencies = $field->getDependencies($fieldPrefix, $this->getStoreCode());
     $this->_populateDependenciesBlock($dependencies, $elementId, $elementName);
     $formField = $fieldset->addField($elementId, $field->getType(), array('name' => $elementName, 'label' => $field->getLabel($labelPrefix), 'comment' => $field->getComment($data), 'tooltip' => $field->getTooltip(), 'hint' => $field->getHint(), 'value' => $data, 'inherit' => $inherit, 'class' => $field->getFrontendClass(), 'field_config' => $field->getData(), 'scope' => $this->getScope(), 'scope_id' => $this->getScopeId(), 'scope_label' => $this->getScopeLabel($field), 'can_use_default_value' => $this->canUseDefaultValue($field->showInDefault()), 'can_use_website_value' => $this->canUseWebsiteValue($field->showInWebsite())));
     $field->populateInput($formField);
     if ($field->hasValidation()) {
         $formField->addClass($field->getValidation());
     }
     if ($field->getType() == 'multiselect') {
         $formField->setCanBeEmpty($field->canBeEmpty());
     }
     if ($field->hasSourceModel()) {
         $formField->setValues($field->getOptions());
     }
     $formField->setRenderer($fieldRenderer);
 }
Example #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 Mage_Adminhtml_Block_System_Config_Form
  */
 public function initFields($fieldset, $group, $section, $fieldPrefix = '', $labelPrefix = '')
 {
     if (!$this->_configDataObject) {
         $this->_initObjects();
     }
     // Extends for config data
     $configDataAdditionalGroups = array();
     foreach ($group->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;
 }
Example #6
0
 /**
  * load a module
  *
  * @access public
  * @param Varien_Simplexml_Element $xml
  * @return bool|Ultimate_ModuleCreator_Model_Module
  * @author Marius Strajeru <*****@*****.**>
  */
 public function loadModule($xml)
 {
     /** @var Ultimate_ModuleCreator_Model_Module $module */
     $module = Mage::getModel('modulecreator/module');
     $moduleFields = $module->getXmlAttributes();
     $data = array();
     foreach ($moduleFields as $field) {
         $data[$field] = (string) $xml->{$field};
     }
     $module->setData($data);
     /** @var Ultimate_ModuleCreator_Model_Entity $entity */
     $entity = Mage::getModel('modulecreator/entity');
     $entityFields = $entity->getXmlAttributes();
     foreach ($xml->entities->entity as $entityNode) {
         $data = array();
         foreach ($entityFields as $field) {
             $data[$field] = (string) $entityNode->{$field};
         }
         $entity = Mage::getModel('modulecreator/entity');
         $entity->setData($data);
         $module->addEntity($entity);
         foreach ($entityNode->attributes->attribute as $attributeNode) {
             $attributeData = (array) $attributeNode;
             foreach ($attributeData as $key => $value) {
                 $attributeData[$key] = (string) $value;
             }
             $attribute = Mage::getModel('modulecreator/attribute');
             $attribute->setData($attributeData);
             $entity->addAttribute($attribute);
         }
     }
     $relations = (array) $xml->descend('relations');
     if ($relations) {
         foreach ($relations as $key => $type) {
             $parts = explode('_', $key);
             if (count($parts) == 2) {
                 $e1 = $module->getEntity($parts[0]);
                 $e2 = $module->getEntity($parts[1]);
                 if ($e1 && $e2) {
                     /** @var Ultimate_ModuleCreator_Model_Relation $relation */
                     $relation = Mage::getModel('modulecreator/relation');
                     $relation->setEntities($e1, $e2, (string) $type);
                     $module->addRelation($relation);
                 }
             }
         }
     }
     return $module;
 }
 /**
  * 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 Mage_Adminhtml_Block_System_Config_Form
  */
 public function initFields($fieldset, $group, $section, $fieldPrefix = '', $labelPrefix = '')
 {
     foreach ($group->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;
             }
             $path = $section->getName() . '/' . $group->getName() . '/' . $fieldPrefix . $e->getName();
             $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);
             $comment = (string) $e->comment ? Mage::helper($helperName)->__((string) $e->comment) : '';
             $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)->afterLoad();
                 $data = $model->getValue();
             }
             if ($e->depends) {
                 foreach ($e->depends->children() as $dependent) {
                     $dependentId = $section->getName() . '_' . $group->getName() . '_' . $fieldPrefix . $dependent->getName();
                     $dependentValue = (string) $dependent;
                     $this->_getDependence()->addFieldMap($id, $id)->addFieldMap($dependentId, $dependentId)->addFieldDependence($id, $dependentId, $dependentValue);
                 }
             }
             $field = $fieldset->addField($id, $fieldType, array('name' => $name, 'label' => $label, 'comment' => $comment, '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)));
             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;
 }