-------------------------------------------------------------------------------
$Id: Tabla.php 462 2004-01-09 21:11:01Z www-data $
-----------------------------------------------------------------------------*/
require_once 'HTML/QuickForm/Renderer.php';
require_once 'MECON/HTML/Tabla.php';
/**
* QuickForm renderer que usa Tabla como backend. Es similar a
* MECON_HTML_QuickForm_Renderer_Tabla pero dibuja la tabla horizontalmente.
* Ej:
*
* $form = new MECON_HTML_QuickForm();
* $form->renderer = new MECON_HTML_QuickForm_Renderer_TablaHorizontal(array('width' => 400));
* // Sigo creando el formulario normalmente...
*
*/
class MECON_HTML_QuickForm_Renderer_TablaHorizontal extends HTML_QuickForm_Renderer {
/**
* Tabla usada para dibujar el formulario.
* @var object Tabla
* @access private
*/
var $tabla;
/**
* Estructura de la tabla en filas a usar para renderizar.
* @access private
*/
var $_rows = array();
/**
* Guarda posición de la fila donde comienzan los elementos.
* @private
*/
var $_elementsPos = null;
/**
* Guarda elementos del formulario.
* @private
*/
var $_elements = array();
/**
* Guarda opciones del renderer.
* @private
*/
var $_opts = array();
/**
* 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 $param Array o sting con el estilo de la tabla u objeto
* tabla alternativo para usar.
* @param $opts Opciones, pueden ser:
* - btn_row: Si es true, se dibujan los botones en una fila
* completa, después de los campos. Si es false, se
* dibuja como un elemento con un rowspan para que
* ocupe la celda del label y del contenido.
* - req_note: Si es true, se incluye una fila adicional con la
* 'require note'. Si es false no se la muestra.
*
* @access public
*/
function MECON_HTML_QuickForm_Renderer_TablaHorizontal($param = array(), $opts = array())
{
parent::HTML_QuickForm_Renderer();
$this->_opts = $opts;
if (is_a($param, 'Tabla')) {
$this->setTable($param);
}
else {
$this->setTable(new MECON_HTML_Tabla($param));
}
} // end constructor
/**
* returns the HTML generated for the form
*
* @access public
* @return string
*/
function toHtml()
{
$pos = $this->_elementsPos;
$rows = count($this->_rows);
foreach ($this->_elements as $e) {
list($label, $elem) = $e;
$cols = array();
for ($i = 0; $i < $pos; ++$i) {
$cols[] = '';
}
if (is_null($label)) { // Para caso especial como botones.
$cols[] = $elem;
$cols[] = '';
} else { // Para caso común.
$cols[] = $label;
$cols[] = $elem;
}
for ($i = $pos + 2; $i < $rows; ++$i) {
$cols[] = '';
}
$id = $this->tabla->addCol($cols, array(array('align' => 'center')));
if (is_null($label)) { // Para caso especial como botones.
$this->tabla->updateCellAttributes($pos, $id, array('rowspan' => 2));
} else { // Para caso común.
$this->tabla->updateCellAttributes($pos, $id, array('titulo' => true));
}
}
foreach ($this->_rows as $i => $row) {
if ($row) { // Si no son las filas de los elementos...
list($html, $attrs) = $row;
$attrs['colspan'] = count($this->_elements);
$this->tabla->updateRowAttributes($i, $attrs);
$this->tabla->setCellContents($i, 0, $html);
}
}
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)
{
$attrs = $form->getAttributes(true);
$this->_prepend = "\n