-------------------------------------------------------------------------------
$Id$
-----------------------------------------------------------------------------*/
require_once 'HTML/QuickForm/Renderer.php';
require_once 'MECON/HTML/Tabla.php';
/**
* QuickForm renderer que usa Tabla como backend.
* Basado en el QuickForm Renderer basico.
*
* @access public
*/
class MECON_HTML_QuickForm_Renderer_Tabla extends HTML_QuickForm_Renderer {
/**
* Tabla usada para dibujar el formulario.
* @var object Tabla
* @access private
*/
var $tabla;
/**
* HTML con los scripts para poner antes del formulario (tipicamente
* un javascript).
* @var string
* @access private
*/
var $_script = '';
/**
* HTML para agregar antes de la tabla (tipicamente un javascript).
* @var string
* @access private
*/
var $_prepend = '';
/**
* HTML para agregar despues de la tabla.
* @var string
* @access private
*/
var $_append = '';
/**
* True if we are inside a group
* @var bool
* @access private
*/
var $_inGroup = false;
/**
* Group error related message.
* @var string
* @access private
*/
var $_groupError = '';
/**
* Array with HTML generated for group elements
* @var array
* @access private
*/
var $_groupElements = array();
/**
* Constructor.
*
* @param mixed $param Array o sting con el estilo de la tabla u objeto
* tabla alternativo para usar.
*
* @access public
*/
function MECON_HTML_QuickForm_Renderer_Tabla($param = array())
{
$this->HTML_QuickForm_Renderer();
if (is_a($param, 'Tabla')) {
$this->setTable($param);
}
else {
$this->tabla =& new MECON_HTML_Tabla($param);
}
} // end constructor
/**
* returns the HTML generated for the form
*
* @access public
* @return string
*/
function toHtml()
{
return $this->_script . $this->_prepend .
$this->tabla->toHtml() .
$this->_append;
} // end func toHtml
/**
* Called when visiting a form, before processing any form elements
*
* @param object An HTML_QuickForm object being visited
* @access public
* @return void
*/
function startForm(&$form)
{
# FIXME - deberia sacarlo del QuickForm
#$this->_prepend = $form->getFormStart();
$attrs = $form->getAttributes(true);
$this->_prepend = "\n
\n";
} // end func finishForm
/**
* Called when visiting a header element
*
* @param object An HTML_QuickForm_header element being visited
* @access public
* @return void
*/
function renderHeader(&$header)
{
$name = $header->getName();
$this->tabla->addRow(
array($header->toHtml()),
array('colspan' => 2, $name => true)
);
} // end func renderHeader
/**
* Renders an element Html
* Called when visiting an element
*
* @param object An HTML_QuickForm_element object being visited
* @param bool Whether an element is required
* @param string An error message associated with an element
* @access public
* @return void
*/
function renderElement(&$element, $required, $error)
{
if (!$this->_inGroup) {
$id = $this->tabla->addRow(
array(
$element->getLabel() . ($required ? '*' : ''),
$element->toHtml() . ($error ? "
$error" : ''),
)
);
$this->tabla->updateCellAttributes($id, 0, array('titulo' => true, 'align' => 'left'));
$this->tabla->updateCellAttributes($id, 1, array('align' => 'left'));
} else {
$this->_groupElements[] = ($element->getLabel() ? ($element->getLabel().' ') : '') . $element->toHtml();
}
} // end func renderElement
/**
* Renders an hidden element
* Called when visiting a hidden element
*
* @param object An HTML_QuickForm_hidden object being visited
* @access public
* @return void
*/
function renderHidden(&$element)
{
$this->_prepend .= "\n\t". $element->toHtml();
} // end func renderHidden
/**
* Called when visiting a raw HTML/text pseudo-element
*
* @param object An HTML_QuickForm_html element being visited
* @access public
* @return void
*/
function renderHtml(&$data)
{
$this->tabla->addRow(
array($header->toHtml()),
array('colspan' => 2)
);
} // end func renderHtml
/**
* Called when visiting a group, before processing any group elements
*
* @param object An HTML_QuickForm_group object being visited
* @param bool Whether a group is required
* @param string An error message associated with a group
* @access public
* @return void
*/
function startGroup(&$group, $required, $error)
{
$this->_groupElements = array();
$this->_groupError = $error;
$this->_inGroup = true;
} // end func startGroup
/**
* Called when visiting a group, after processing all group elements
*
* @param object An HTML_QuickForm_group object being visited
* @access public
* @return void
*/
function finishGroup(&$group)
{
$name = $group->getName();
$sep = $group->_separator;
if (strtolower($name) == 'botones') {
$id = $this->tabla->addRow(
array(join('', $this->_groupElements))
);
$this->tabla->updateCellAttributes($id, 0, array('valign' => 'middle', 'align' => 'center', 'colspan' => 2));
} else {
$id = $this->tabla->addRow(
array($group->getLabel(), join($sep, $this->_groupElements)),
array('valign' => 'middle', 'align' => 'left')
);
$this->tabla->updateCellAttributes($id, 0, array('titulo' => true, 'align' => 'left'));
}
$this->_inGroup = false;
} // end func finishGroup
/**
* Actualiza atributos de la tabla interna.
*
* @param mixed $attrs Html attributes
* @access public
* @return void
* @deprecated Usar $renderer->tabla->updateAttributes().
*/
function updateAttributes($attrs) {
$this->tabla->updateAttributes($attrs);
}
/**
* Setea atributos.
*
* @param mixed $attrs Html attributes
* @access public
* @return void
* @deprecated Usar $renderer->tabla->setAttributes().
*/
function setAttributes($attrs) {
$this->tabla->setAttributes($attrs);
}
/**
* Obtiene atributos.
*
* @access public
* @return mixed
* @deprecated Usar $renderer->tabla->getAttributes().
*/
function getAttributes() {
return $this->tabla->getAttributes();
}
/**
* Setea la tabla que utilizará el renderer.
*
* @param Tabla $param Objeto tabla alternativo para utilizar
*
* @access public
*
* @deprecated Usar $renderer->tabla.
*/
function setTable(&$param) {
$this->tabla =& $param;
}
function getCSS() {
return $this->tabla->getCSS();
}
} // end class HTML_QuickForm_Renderer_Default
?>