/** * Add field to form based on parameter configuration * * @param Varien_Data_Form_Element_Fieldset $fieldset * @param Varien_Object $parameter * @return Varien_Data_Form_Element_Abstract */ protected function _addRendererField($fieldset, $parameter) { $form = $this->getForm(); // Prepare element data with values (either from request of from default values) $fieldName = $parameter->getKey(); $data = array('name' => $form->addSuffixToName($fieldName, 'parameters'), 'label' => $this->_translationHelper->__($parameter->getLabel()), 'required' => $parameter->getRequired(), 'class' => 'renderer-option', 'note' => $this->_translationHelper->__($parameter->getDescription())); if ($values = $this->getRendererParams()) { $data['value'] = isset($values[$fieldName]) ? $values[$fieldName] : ''; } else { $data['value'] = $parameter->getValue(); // Prepare unique ID value if ($fieldName == 'unique_id' && $data['value'] == '') { $data['value'] = md5(microtime(1)); } } // Prepare element dropdown values if ($values = $parameter->getValues()) { // Dropdown options are specified in configuration $data['values'] = array(); foreach ($values as $option) { $data['values'][] = array('label' => $this->_translationHelper->__($option['label']), 'value' => $option['value']); } } elseif ($sourceModel = $parameter->getSourceModel()) { // Otherwise, a source model is specified if (is_array($sourceModel)) { // TODO check if invalid model / method ? $data['values'] = call_user_func(array(Mage::getModel($sourceModel['model']), $sourceModel['method'])); } else { $data['values'] = Mage::getModel($sourceModel)->toOptionArray(); } } // Prepare field type or renderer $fieldRenderer = null; $fieldType = $parameter->getType(); if (!$parameter->getVisible()) { // Hidden element $fieldType = 'hidden'; } elseif (false !== strpos($fieldType, '/')) { // Just an element renderer $fieldRenderer = $this->getLayout()->createBlock($fieldType); $fieldType = $this->_defaultElementType; } // Instantiate field and render html $field = $fieldset->addField($this->getFieldsetHtmlId() . '_' . $fieldName, $fieldType, $data); if ($fieldRenderer) { $field->setRenderer($fieldRenderer); } // Extra html preparations if ($helper = $parameter->getHelperBlock()) { $helperBlock = $this->getLayout()->createBlock($helper->getType(), '', $helper->getData()); if ($helperBlock instanceof Varien_Object) { $helperBlock->setConfig($helper->getData())->setFieldsetId($fieldset->getId())->setTranslationHelper($this->_translationHelper)->prepareElementHtml($field); } } // Dependencies from other fields $dependenceBlock = $this->getChild('form_after'); $dependenceBlock->addFieldMap($field->getId(), $fieldName); if ($parameter->getDepends()) { foreach ($parameter->getDepends() as $from => $row) { $values = isset($row['values']) ? array_values($row['values']) : (string) $row['value']; $dependenceBlock->addFieldDependence($fieldName, $from, $values); } } return $field; }