-----------------------------------------------------------------------------*/
require_once 'HTML/Table.php';
+require_once 'MECON/HTML/Image.php';
+require_once 'MECON/HTML/Link.php';
/**
- * Manejo de tablas.
- *
* Libreria para le manejo de las tablas de los sistemas de intranet.
*
- * @version $Rev$
- * @author $Author$
*/
-
-class Tabla extends HTML_Table {
-
+class MECON_HTML_Tabla extends HTML_Table {
+
/**
* Valores de Configuracion particular
*
- * @var array
+ * @var array() $conf
+ * @access protected
*/
var $_conf;
/**
* Atributos de las tablas.
*
- * @var array
+ * @var array() attrs
+ * @access protected
*/
var $_attrs;
/**
- * Constructor.
+ * Íconos e información que va arriba de la tabla.
+ *
+ * @var array()
+ * @access private.
+ */
+ var $_cabecera = array();
+
+ /**
+ * Íconos e información que va abajo de la tabla.
*
+ * @var array()
+ * @access private.
+ */
+ var $_pie = array();
+
+ /**
+ * Constructor.
* Puede recibir como parametro un string con los atributos que se
* quieren dar a la tabla en cuestion. Estos atributos estan
* seteados por default segun el archivo de configuracion.
+ * Ademas puede recibir la indicacion de algun estilo en particular.
*
- * @param $atributos Atributos diferentes a los estandares para la
- * tabla
+ * @param mixed $attrs Atributos diferentes a los estandares para la tabla
+ * @param string $estilo Tipo de tabla
*
* @access public
*/
- function Tabla($attrs = null)
- {
- $this->_conf = include 'MECON/HTML/Tabla/conf_Tabla.php'; // Obtengo los valores particulares de configuracion
+ function MECON_HTML_Tabla($attrs = null, $estilo = 'comun') {
+ // Obtengo los valores particulares de configuracion.
+ $this->_conf = include(dirname(__FILE__) . '/Tabla/estilo_' . $estilo . '.php');
// Seteo los atributos para la tabla
$this->_attrs = $this->_conf['atributos']['tabla_comun'];
//Genero el objeto HTML_Table
}
}
$this->HTML_Table($this->_attrs);
- }
-
- /**
- * Agrega una fila del tipo Cabecera
- *
- * Agrega una fila del tipo cabecera, tomando colores y demas del
- * archivo de configuracion. Recibe como parametro un array con
- * los datos a incluir en la linea. Agrega tantas columnas como
- * elementos tenga el array. Si no recibe parametro alguno,
- * inserta una fila en blanco. Devuelve el identificador de la
- * fila en donde inserto los datos.
- *
- * @param $contenido Contenido de la fila
- *
- * @return int Identificador de Linea
- *
- * @access public
- * @deprecated
- */
- function agregarFilaCabecera($contenido = '', $atributos = '')
- {
- return $this->addRow($contenido, 'cabecera');
- }
-
- /**
- * Agrega una fila del tipo Comun
- *
- * Agrega una fila del tipo comun, tomando colores y demas del
- * archivo de configuracion. Recibe como parametro un array con
- * los datos a incluir en la linea. Agrega tantas columnas como
- * elementos tenga el array. Si no recibe parametro alguno,
- * inserta una fila en blanco. Devuelve el identificador de la
- * fila en donde inserto los datos.
- *
- * @param $contenido Contenido de la fila
- *
- * @return int Identificador de Linea
- *
- * @access public
- * @deprecated
- */
- function agregarFila($contenido = '')
- {
- return $this->addRow($contenido, 'comun');
- }
-
- /**
- * Modifica el atributo rowSpan a la celda pasada por parametro
- *
- * @param int $fila
- * @param int $columna
- * @param int $valor
- *
- * @access public
- * @deprecated
- */
- function rowSpan($fila, $columna, $valor)
- {
- return $this->updateCellAttributes($fila, $columna, 'rowspan="'.$valor.'"');
- }
-
- /**
- * Modifica el atributo colSpan a la celda pasada por parametro
- *
- * @param int $fila
- * @param int $columna
- * @param int $valor
- *
- * @access public
- * @deprecated
- */
- function colSpan($fila, $columna, $valor)
- {
- return $this->updateCellAttributes($fila, $columna, 'colspan="'.$valor.'"');
- }
-
- /**
- * Modifica el atributo aling de la celda pasada por parametro
- *
- * @param int $fila
- * @param int $columna
- * @param string $valor (left, center, right...)
- *
- * @access public
- * @deprecated
- */
- function align($fila, $columna, $valor)
- {
- return $this->updateCellAttributes($fila, $columna, 'align="'.$valor.'"');
- }
-
- /**
- * Setea una columna como del tipo cabecera
- *
- * @param int $columna
- *
- * @access public
- * @deprecated
- */
- function setColCabecera($columna)
- {
- return $this->updateColAttributes($columna, 'cabecera');
- }
-
- /**
- * Setea una columna como del tipo titulo
- *
- * @param int $columna
- *
- * @access public
- * @deprecated
- */
- function setColTitulo($columna)
- {
- return $this->updateColAttributes($columna, 'titulo');
- }
-
- /**
- * Alinea una columna entera
- *
- * @param int $columna
- * @param string $valor
- *
- * @access public
- * @deprecated
- */
- function setColAlign($columna, $valor)
- {
- return $this->updateColAttributes($columna,'align="'.$valor.'"');
- }
-
- /**
- * Cambia el tamanio de una columna entera
- *
- * @param int $columna
- * @param string $valor
- *
- * @access public
- * @deprecated
- */
- function setColWidth($columna, $valor)
- {
- return $this->updateColAttributes($columna,'width="'.$valor.'"');
- }
+ if (isset($attrs['align'])) {
+ $this->_attrs['align'] = $attrs['align'];
+ }
- /**
- * Cambia el color de fondo de una celda
- *
- * @param int $fila
- * @param int $columna
- * @param string $valor
- *
- * @access public
- * @deprecated
- */
- function setCellBgcolor($fila, $columna, $valor)
- {
- return $this->updateCellAttributes($fila, $columna,'bgcolor="'.$valor.'"');
- }
+ }
/**
* Devuelve el html de la tabla
* Si $simple es falso, devuelve el html comun y corriente (con 2
* tablas), si es false devuelve una tabla sola.
*
- * @param bool $simple
+ * @param bool $simple Tipo de tabla que se quiere recibir.
*
* @return string Html
*
* @access public
*/
- function toHtml($simple = 0)
- {
- // Agregar la tabla de fondo.
+ function toHtml($simple = 0) {
if ($simple) {
$result = parent::toHtml();
+ // Agregar la tabla de fondo.
} else {
$contenedora = $this->_conf['atributos']['tabla_contenedora'];
$contenedora['width'] = $this->getAttribute('width');
+ $contenedora['align'] = $this->_attrs['align'];
$this->updateAttributes(array('width' => '100%'));
$tabla_externa = new HTML_Table($contenedora);
$tabla_externa->addRow(array(parent::toHtml()),
$this->_conf['atributos']['celda_contenedora']);
$result = $tabla_externa->toHtml();
}
+ // Si tiene pie o cabecera, crea tabla.
+ if ($this->_cabecera or $this->_pie) {
+ $tabla_externa = new HTML_Table(array('width'=>'100%','border'=>0));
+ }
+ // Si tiene cabecera, la agrega.
+ $this->_addSpecialRow($this->_cabecera, $tabla_externa);
+ // Si tiene cabecera o pie, agrega la tabla original.
+ if ($this->_cabecera or $this->_pie) {
+ //$id = $tabla_externa->addRow($result);
+ $tabla_externa->addRow(array($result), array(
+ 'align' => 'center',
+ 'valign' => 'middle',
+ 'width' => '100%',
+ 'colspan' => '3',
+ ));
+ }
+ // Si tiene pie, lo agrega.
+ $this->_addSpecialRow($this->_pie, $tabla_externa);
+ return ($this->_cabecera or $this->_pie) ? $tabla_externa->toHtml() : $result;
+ }
- return $result;
+ function _addSpecialRow($array, &$tabla) {
+ if ($array) {
+ $row = array();
+ foreach ($array as $key => $val) {
+ $row[$key] = $val ? $val : ' ';
+ }
+ $id = $tabla->addRow($row, array(
+ 'valign' => 'middle',
+ 'width' => '33%',
+ ));
+ // Si no hay celda central, hace colspan.
+ if ($array[0] and !$array[1]) {
+ $tabla->updateCellAttributes($id, 0, array(
+ 'colspan' => 2,
+ 'width' => '67%'));
+ /* } XXX se complica hacer el colspan para atras:
+ elseif ($array[2] and !$array[1]) {
+ $tabla->updateCellAttributes($id, 1, array(
+ 'colspan' => 2,
+ 'width' => '67%')); */
+ }
+ $tabla->updateCellAttributes($id, 0, array('align' => 'left'));
+ $tabla->updateCellAttributes($id, 1, array('align' => 'center'));
+ $tabla->updateCellAttributes($id, 2, array('align' => 'right'));
+ }
}
/**
* asociativo, se setean los atributos representados por las claves
* con los valores.
*
- * @param int $row
- * @param int $col
- * @param mixed $attrs
+ * @param int $row Identificador de la fila que se quiere modificar
+ * @param int $col Identificador de la columna que se quiere modificar
+ * @param mixed $attrs Atributo a modificar
*
* @access public
*/
- function updateCellAttributes($row, $col, $attrs)
- {
- return parent::updateCellAttributes($row, $col, $this->_translateAttributes($attrs));
+ function updateCellAttributes($row, $col, $attrs) {
+ return parent::updateCellAttributes($row, $col, $this->_translateAttributes($attrs, false));
}
/**
* asociativo, se setean los atributos representados por las claves
* con los valores.
*
- * @param int $row
- * @param int $col
- * @param mixed $attrs
+ * @param int $row Identificador de la fila que se quiere modificar
+ * @param int $col Identificador de la columna que se quiere modificar
+ * @param mixed $attrs Atributo a modificar
*
* @access public
*/
- function setCellAttributes($row, $col, $attrs)
- {
- return parent::setCellAttributes($row, $col, $this->_translateAttributes($attrs));
+ function setCellAttributes($row, $col, $attrs) {
+ return parent::setCellAttributes($row, $col, $this->_translateAttributes($attrs, true));
}
/**
* Agrega una fila. El contenido es el que viene representado por
* el array $content. Recibe los atributos en la variable $attrs
*
- * @param mixed $content
- * @param mixed $attrs
+ * @param mixed $content Contenido
+ * @param mixed $attrs Atributos
*
- * @return int $rowId
+ * @return int $rowId Identificador de la fila
*
* @access public
*/
- function addRow($content, $attrs = 'comun')
- {
+ function addRow($content, $attrs = 'comun') {
return parent::addRow($content, $attrs);
}
* Convierte un atributo HTML al string para pasar a los metodos de HTML_Table
* Recibe en $attrs los atributos a modificar.
*
- * @param string $attrs
+ * @param mixed $attrs Atributos.
+ * @param bool $isSet Indica si hay que setear.
*
- * @return string
+ * @return array
* @access private
*/
- function _translateAttributes($attrs)
- {
+ function _translateAttributes($attrs, $isSet) {
if (!$attrs) {
return array();
}
if (is_string($attrs)) {
$attrs = $this->_parseAttributes($attrs);
}
- #$rta = array();
- $rta = $this->_conf['atributos']['celda_comun'];
- #$sin_estilo = true;
+ if ($isSet) {
+ $rta = $this->_conf['atributos']['celda_comun'];
+ } else {
+ $rta = array();
+ }
foreach ($attrs as $attr => $val) {
$attr = strtolower($attr);
switch ($attr) {
case 'comun':
case 'cabecera':
case 'titulo':
- #$sin_estilo = false;
- $rta = array_merge($rta, $this->_conf['atributos']["celda_$attr"]);
+ $rta = array_merge($rta,
+ $this->_conf['atributos']["celda_$attr"]);
+ $rta[$attr] = $attr;
break;
case 'align':
case 'valign':
case 'border':
case 'cellspacing':
case 'cellpadding':
+ case 'nowrap':
$rta[$attr] = $val;
break;
case 'spacing':
case 'padding':
$rta["cell$attr"] = $val;
break;
- case 'nowrap':
case 'th':
$rta[$attr] = '';
break;
+ case 'clara':
+ $tmp = $this->_conf['atributos']['celda_comun'];
+ $tmp['bgcolor'] = $this->_conf['atributos']['celda_titulo']['bgcolor'];
+ $tmp['class'] = $this->_conf['atributos']['celda_titulo']['class'];
+ $rta = array_merge($rta, $tmp);
+ $rta[$attr] = $attr;
+ break;
+ case 'oscura':
+ $tmp = $this->_conf['atributos']['celda_comun'];
+ $tmp['bgcolor'] = $this->_conf['atributos']['celda_cabecera']['bgcolor'];
+ $tmp['class'] = $this->_conf['atributos']['celda_cabecera']['class'];
+ $rta = array_merge($rta, $tmp);
+ $rta[$attr] = $attr;
+ break;
default:
trigger_error("No se permite setear el atributo $attr", E_USER_ERROR);
}
}
- // Si no tiene estilo, agrego estilo comun.
- #if ($sin_estilo) {
- #$rta = $this->_conf['atributos']['celda_comun'];
- #}
return $rta;
}
+ /**
+ * Obtiene la Cascade Style Sheet para esta tabla.
+ *
+ * @return string Path 'web' a la css.
+ */
+ function getCSS() {
+ return $this->_conf['css'];
+ }
+
+ /**
+ * Setea la cabecera.
+ * Ejemplo:
+ * @code
+ * $tabla->setCabecera(array('Hola', '', 'mundo!'));
+ * @endcode
+ *
+ * @param array $cabecera Array de 3 elementos, que son la celda izquierda,
+ * central y derecha de la cabecera (en ese órden).
+ */
+ function setCabecera($cabecera) {
+ if (count($cabecera) != 3) {
+ $this->raiseError('Parámetro incorrecto: debe ser un array de 3 elementos.');
+ }
+ $this->_cabecera = $cabecera;
+ }
+
+ /**
+ * Agrega información a la cabecera de la tabla.
+ * Ejemplo:
+ * @code
+ * $tabla->updateCabecera('Hola', 'izquierda');
+ * $tabla->updateCabecera('mundo!', 'derecha');
+ * @endcode
+ *
+ * @param mixed $cabecera Celda a agregar a la cabecera. Puede ser un string
+ * o un objeto con un método toHtml().
+ * @param string $lugar Lugar en donde poner la cabecera. Puede ser
+ * 'izquierda', 'centro' o 'derecha'.
+ */
+ function updateCabecera($cabecera, $lugar) {
+ if (!$this->_cabecera) {
+ $this->_cabecera = array('', '', '');
+ }
+ if ($lugar == 'izquierda') {
+ $this->_cabecera[0] = $cabecera;
+ } elseif ($lugar == 'centro') {
+ $this->_cabecera[1] = $cabecera;
+ } elseif ($lugar == 'derecha') {
+ $this->_cabecera[2] = $cabecera;
+ } else {
+ $this->raiseError('Parámetro incorrecto: lugar debe ser izquierda, centro o derecha.');
+ }
+ }
+
+ /**
+ * Setea el pie.
+ *
+ * @param array $pie Array de 3 elementos, que son la celda izquierda,
+ * central y derecha del pie (en ese órden).
+ *
+ * @see Ejemplo en setCabecera().
+ */
+ function setPie($pie) {
+ if (count($pie) != 3) {
+ $this->raiseError('Parámetro incorrecto: debe ser un array de 3 elementos.');
+ }
+ $this->_pie = $pie;
+ }
+
+ /**
+ * Agrega información al pie de la tabla.
+ *
+ * @param mixed $pie Celda a agregar al pie. Puede ser un string
+ * o un objeto con un método toHtml().
+ * @param string $lugar Lugar en donde poner el pie. Puede ser
+ * 'izquierda', 'centro' o 'derecha'.
+ *
+ * @see Ejemplo en updateCabecera().
+ */
+ function updatePie($pie, $lugar) {
+ if (!$this->_pie) {
+ $this->_pie = array('', '', '');
+ }
+ if ($lugar == 'izquierda') {
+ $this->_pie[0] = $pie;
+ } elseif ($lugar == 'centro') {
+ $this->_pie[1] = $pie;
+ } elseif ($lugar == 'derecha') {
+ $this->_pie[2] = $pie;
+ } else {
+ $this->raiseError('Parámetro incorrecto: lugar debe ser izquierda, centro o derecha.');
+ }
+ }
+
+ /**
+ * Agrega un link predefinido a la cabecera o pie de la tabla.
+ * Ejemplo:
+ * @code
+ * if ($muchos) {
+ * $tabla->addLink('nuevo');
+ * } else {
+ * $tabla->addLink('nuevos', 'nuevos.php');
+ * }
+ * $tabla->addLink('volver',
+ * new MECON_HTML_Link('atras.php'));
+ * $tabla->addLink('anterior',
+ * new MECON_HTML_Link('previo.php', 'Persona Anterior'));
+ * $tabla->addLink('siguiente',
+ * new MECON_HTML_Link('previo.php', 'Siguiente persona',
+ * array('pers' => 'prox')));
+ * @endcode
+ *
+ * @param string $id Identificador del link predefinido. Puede ser 'volver',
+ * 'nuevo', 'nuevos', 'buscar', 'anterior' y 'siguiente'.
+ * @param MECON_HTML_Link $link Link a usar. Si no tiene contenidos, se pone
+ * uno por defecto. Si es null, se pone como
+ * link la página actual.
+ *
+ */
+ function addLink($id, $link = null) {
+ if (!$link) {
+ $link = @$_SERVER['PHP_SELF'];
+ }
+ if (is_string($link)) {
+ $link = new MECON_HTML_Link($link, '');
+ }
+ switch ($id) {
+ case 'nuevo':
+ $img = new MECON_HTML_Image('/MECON/images/general_nuevo', ' >>');
+ // Si no tiene titulo, le pone titulo por defecto.
+ if (!$link->getContents()) {
+ $link->setContents('Nuevo');
+ }
+ $link->addContents($img);
+ $this->updateCabecera($link, 'derecha');
+ break;
+ case 'nuevos':
+ $img = new MECON_HTML_Image('/MECON/images/general_muchos_nuevo', ' >>');
+ // Si no tiene titulo, le pone titulo por defecto.
+ if (!$link->getContents()) {
+ $link->setContents('Nuevos');
+ }
+ $link->addContents($img);
+ $this->updateCabecera($link, 'derecha');
+ break;
+ case 'buscar':
+ $img = new MECON_HTML_Image('/MECON/images/general_lupa', ' ?>');
+ // Si no tiene titulo, le pone titulo por defecto.
+ if (!$link->getContents()) {
+ $link->setContents('Buscar');
+ }
+ $link->addContents($img);
+ $this->updateCabecera($link, 'derecha');
+ break;
+ case 'siguiente':
+ $img = new MECON_HTML_Image('/MECON/images/general_posterior', ' >>');
+ // Si no tiene titulo, le pone titulo por defecto.
+ if (!$link->getContents()) {
+ $link->setContents('Siguiente');
+ }
+ $link->addContents($img);
+ $this->updatePie($link, 'derecha');
+ break;
+ case 'volver':
+ $img = new MECON_HTML_Image('/MECON/images/general_anterior', '<< ');
+ // Si no tiene titulo, le pone titulo por defecto.
+ $cont = $link->getContents() ? $link->getContents() : 'Volver';
+ $link->setContents($img);
+ $link->addContents($cont);
+ $this->updateCabecera($link, 'izquierda');
+ break;
+ case 'anterior':
+ $img = new MECON_HTML_Image('/MECON/images/general_anterior', '<< ');
+ // Si no tiene titulo, le pone titulo por defecto.
+ $cont = $link->getContents() ? $link->getContents() : 'Anterior';
+ $link->setContents($img);
+ $link->addContents($cont);
+ $this->updatePie($link, 'izquierda');
+ break;
+ default:
+ $this->raiseError("No hay un link predefinido llamado '$id'.");
+ }
+ }
+
}
?>