*/ abstract class Varien_Data_Form_Element_Abstract extends Varien_Data_Form_Abstract { protected $_id; protected $_type; protected $_form; protected $_elements; protected $_renderer; public function __construct($attributes = array()) { parent::__construct($attributes); $this->_renderer = Varien_Data_Form::getElementRenderer(); } /** * Add form element * * @param Varien_Data_Form_Element_Abstract $element * @return Varien_Data_Form */ public function addElement(Varien_Data_Form_Element_Abstract $element, $after=false) { if ($this->getForm()) { $this->getForm()->checkElementId($element->getId()); $this->getForm()->addElementToCollection($element); } parent::addElement($element, $after); return $this; } public function getId() { return $this->_id; } public function getType() { return $this->_type; } public function getForm() { return $this->_form; } public function setId($id) { $this->_id = $id; $this->setData('html_id', $id); return $this; } public function getHtmlId() { return $this->getForm()->getHtmlIdPrefix() . $this->getData('html_id') . $this->getForm()->getHtmlIdSuffix(); } public function getName() { $name = $this->getData('name'); if ($suffix = $this->getForm()->getFieldNameSuffix()) { $name = $this->getForm()->addSuffixToName($name, $suffix); } return $name; } public function setType($type) { $this->_type = $type; $this->setData('type', $type); return $this; } public function setForm($form) { $this->_form = $form; return $this; } public function removeField($elementId) { $this->getForm()->removeField($elementId); return parent::removeField($elementId); } public function getHtmlAttributes() { return array('type', 'title', 'class', 'style', 'onclick', 'onchange', 'disabled', 'readonly', 'tabindex'); } public function addClass($class) { $oldClass = $this->getClass(); $this->setClass($oldClass.' '.$class); return $this; } /** * Remove CSS class * * @param string $class * @return Varien_Data_Form_Element_Abstract */ public function removeClass($class) { $classes = array_unique(explode(' ', $this->getClass())); if (false !== ($key = array_search($class, $classes))) { unset($classes[$key]); } $this->setClass(implode(' ', $classes)); return $this; } protected function _escape($string) { return htmlspecialchars($string, ENT_COMPAT); } public function getEscapedValue($index=null) { $value = $this->getValue($index); if ($filter = $this->getValueFilter()) { $value = $filter->filter($value); } return $this->_escape($value); } public function setRenderer(Varien_Data_Form_Element_Renderer_Interface $renderer) { $this->_renderer = $renderer; return $this; } public function getRenderer() { return $this->_renderer; } public function getElementHtml() { $html = 'serialize($this->getHtmlAttributes()).'/>'."\n"; $html.= $this->getAfterElementHtml(); return $html; } public function getAfterElementHtml() { return $this->getData('after_element_html'); } /** * Render HTML for element's label * * @param string $idSuffix * @return string */ public function getLabelHtml($idSuffix = '') { if (!is_null($this->getLabel())) { $html = '' . "\n"; } else { $html = ''; } return $html; } public function getDefaultHtml() { $html = $this->getData('default_html'); if (is_null($html)) { $html = ( $this->getNoSpan() === true ) ? '' : ''."\n"; $html.= $this->getLabelHtml(); $html.= $this->getElementHtml(); $html.= ( $this->getNoSpan() === true ) ? '' : ''."\n"; } return $html; } public function getHtml() { if ($this->getRequired()) { $this->addClass('required-entry'); } if ($this->_renderer) { $html = $this->_renderer->render($this); } else { $html = $this->getDefaultHtml(); } return $html; } public function toHtml() { return $this->getHtml(); } public function serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"') { if (in_array('disabled', $attributes) && !empty($this->_data['disabled'])) { $this->_data['disabled'] = 'disabled'; } else { unset($this->_data['disabled']); } if (in_array('checked', $attributes) && !empty($this->_data['checked'])) { $this->_data['checked'] = 'checked'; } else { unset($this->_data['checked']); } return parent::serialize($attributes, $valueSeparator, $fieldSeparator, $quote); } public function getReadonly() { if ($this->hasData('readonly_disabled')) { return $this->_getData('readonly_disabled'); } return $this->_getData('readonly'); } public function getHtmlContainerId() { if ($this->hasData('container_id')) { return $this->getData('container_id'); } elseif ($idPrefix = $this->getForm()->getFieldContainerIdPrefix()) { return $idPrefix . $this->getId(); } return ''; } /** * Add specified values to element values * * @param string|int|array $values * @param bool $overwrite * @return Varien_Data_Form_Element_Abstract */ public function addElementValues($values, $overwrite = false) { if (empty($values) || (is_string($values) && trim($values) == '')) { return $this; } if (!is_array($values)) { $values = Mage::helper('core')->escapeHtml(trim($values)); $values = array($values => $values); } $elementValues = $this->getValues(); if (!empty($elementValues)) { foreach ($values as $key => $value) { if ((isset($elementValues[$key]) && $overwrite) || !isset($elementValues[$key])) { $elementValues[$key] = Mage::helper('core')->escapeHtml($value); } } $values = $elementValues; } $this->setValues($values); return $this; } }