require_once 'HTML/Table.php';
require_once 'MECON/HTML/Image.php';
-require_once 'MECON/DB/Pager.php';
+require_once 'MECON/HTML/Link.php';
/**
* Libreria para le manejo de las tablas de los sistemas de intranet.
* seteados por default segun el archivo de configuracion.
* Ademas puede recibir la indicacion de algun estilo en particular.
*
- * @param mixed $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
}
- /**
- * 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 array() $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, 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 array() $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 Identificador de la fila que se quiere modificar
- * @param int $columna Identificador de la columna que se quiere modificar
- * @param int $valor Atributo a modificar
- *
- * @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 Identificador de la fila que se quiere modificar
- * @param int $columna Identificador de la columna que se quiere modificar
- * @param int $valor Atributo a modificar
- *
- * @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 Identificador de la fila que se quiere modificar
- * @param int $columna Identificador de la columna que se quiere modificar
- * @param string $valor Atributo a modificar
- *
- * @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 Identificador de la columna que se quiere modificar
- *
- * @access public
- * @deprecated
- */
- function setColCabecera($columna) {
- return $this->updateColAttributes($columna, 'cabecera');
- }
-
- /**
- * Setea una columna como del tipo titulo
- *
- * @param int $columna Identificador de la columna que se quiere modificar
- *
- * @access public
- * @deprecated
- */
- function setColTitulo($columna) {
- return $this->updateColAttributes($columna, 'titulo');
- }
-
- /**
- * Alinea una columna entera
- *
- * @param int $columna Identificador de la columna que se quiere modificar
- * @param string $valor Valor
- *
- * @access public
- * @deprecated
- */
- function setColAlign($columna, $valor) {
- return $this->updateColAttributes($columna,'align="'.$valor.'"');
- }
-
- /**
- * Cambia el tamanio de una columna entera
- *
- * @param int $columna Identificadore de la columna que se quiere modificar
- * @param string $valor Valor
- *
- * @access public
- * @deprecated
- */
- function setColWidth($columna, $valor) {
- return $this->updateColAttributes($columna,'width="'.$valor.'"');
- }
-
- /**
- * Cambia el color de fondo de una celda
- *
- * @param int $fila Identificador de la fila que se quiere modificar
- * @param int $columna Identificador de la columna que se quiere modificar
- * @param string $valor Atributo a modificar
- *
- * @access public
- * @deprecated
- */
- function setCellBgcolor($fila, $columna, $valor) {
- return $this->updateCellAttributes($fila, $columna,'bgcolor="'.$valor.'"');
- }
-
/**
* Devuelve el html de la tabla
*
$tabla_externa = new HTML_Table(array('width'=>'100%','border'=>0));
}
// Si tiene cabecera, la agrega.
- if ($this->_cabecera) {
- $tabla_externa->addRow($this->_cabecera, array(
- 'valign' => 'middle',
- 'width' => '33%',
- ));
- $tabla_externa->updateCellAttributes(0, 0, array('align' => 'left'));
- $tabla_externa->updateCellAttributes(0, 1, array('align' => 'center'));
- $tabla_externa->updateCellAttributes(0, 2, array('align' => 'right'));
- }
+ $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);
));
}
// Si tiene pie, lo agrega.
- if ($this->_pie) {
- $id = $tabla_externa->addRow($this->_pie, array(
+ $this->_addSpecialRow($this->_pie, $tabla_externa);
+ return ($this->_cabecera or $this->_pie) ? $tabla_externa->toHtml() : $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%',
+ 'width' => '33%',
));
- $tabla_externa->updateCellAttributes($id, 0, array('align' => 'left'));
- $tabla_externa->updateCellAttributes($id, 1, array('align' => 'center'));
- $tabla_externa->updateCellAttributes($id, 2, array('align' => 'right'));
+ // 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'));
}
- return ($this->_cabecera or $this->_pie) ? $tabla_externa->toHtml() : $result;
}
/**
case 'comun':
case 'cabecera':
case 'titulo':
- $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 '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;
+ case 'comun_clara':
+ $tmp = $this->_conf['atributos']['celda_comun'];
+ $tmp['class'].= '_clara';
+ $rta = array_merge($rta,
+ $this->_conf['atributos']["celda_comun"]);
+ $rta[$attr] = $attr;
+ break;
default:
trigger_error("No se permite setear el atributo $attr", E_USER_ERROR);
}
* Setea la cabecera.
* Ejemplo:
* @code
- * $tabla->setCabecera(array('Hola', ' ', 'mundo!'));
+ * $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($pie) != 3) {
+ if (count($cabecera) != 3) {
$this->raiseError('Parámetro incorrecto: debe ser un array de 3 elementos.');
}
$this->_cabecera = $cabecera;
*/
function updateCabecera($cabecera, $lugar) {
if (!$this->_cabecera) {
- $this->_cabecera = array(' ', ' ', ' ');
+ $this->_cabecera = array('', '', '');
}
if ($lugar == 'izquierda') {
$this->_cabecera[0] = $cabecera;
*/
function updatePie($pie, $lugar) {
if (!$this->_pie) {
- $this->_pie = array(' ', ' ', ' ');
+ $this->_pie = array('', '', '');
}
if ($lugar == 'izquierda') {
$this->_pie[0] = $pie;
* @endcode
*
* @param string $id Identificador del link predefinido. Puede ser 'volver',
- * 'nuevo', 'nuevos', 'anterior' y 'siguiente'.
+ * '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.
}
switch ($id) {
case 'nuevo':
- $img = new MECON_HTML_Image('/MECON/images/general_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');
$this->updateCabecera($link, 'derecha');
break;
case 'nuevos':
- $img = new MECON_HTML_Image('/MECON/images/general_muchos_nuevo', '-<');
+ $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', '-<');
+ $img = new MECON_HTML_Image('/MECON/images/general_posterior', ' >>');
// Si no tiene titulo, le pone titulo por defecto.
if (!$link->getContents()) {
$link->setContents('Siguiente');
$this->updatePie($link, 'derecha');
break;
case 'volver':
- $img = new MECON_HTML_Image('/MECON/images/general_anterior', '>-');
+ $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);
$this->updateCabecera($link, 'izquierda');
break;
case 'anterior':
- $img = new MECON_HTML_Image('/MECON/images/general_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);
}
}
- /**
- * Agrega un páginador a la tabla, basado en un resultado de una base de datos.
- * Ejemplo:
- * @code
- * $tabla = new MECON_HTML_Tabla();
- * $result = $db->query('SELECT * FROM tabla');
- * if (DB::isError($result)) {
- * die('Error');
- * }
- * $pager = $tabla->addPager($result);
- * $tabla->addRow(array('Nombre', 'Apellido'), 'cabecera');
- * if ($pager->numRows()) {
- * while ($row = $pager->fetchRow(DB_FETCHMODE_ASSOC)) {
- * $tabla->addRow(array($row['nombre'], $row['apellido']));
- * }
- * } else {
- * $tabla->addRow(array(new MECON_HTML_Error('No se encontraron agentes.')),
- * array('colspan' => 2));
- * }
- * $tabla->display();
- * @endcode
- *
- * @param DB_Result $result Resultado de una consulta de base de datos.
- * @param mixed $tipo Tipo de link(s) a agregar. Puede ser:
- * <ul>
- * <li><tt>'anterior'</tt></li>
- * <li><tt>'siguiente'</tt></li>
- * <li><tt>'paginas'</tt></li>
- * <li><tt>'total'</tt></li>
- * <li><tt>'info'</tt></li>
- * </ul>
- * Puede pasarse uno solo como un string o varios como un
- * array. Si se pasa <tt>'todo'</tt>, se incluyen todos.
- * Si se pasa null, se incluyen <tt>'anterior'</tt>,
- * <tt>'siguiente'</tt> y <tt>'paginas'</tt>.
- * @param mixed $link Dirección a la que apuntan los links generados. Puede
- * ser un MECON_HTML_Link (para poder pasar variables por
- * GET) o un string.
- * @param int $limit Parámetro usado para crear el MECON_DB_Pager.
- * @param int $maxpages Parámetro usado para crear el MECON_DB_Pager.
- *
- * @return MECON_DB_Pager Pager que se puede usar para realizar los fetch de
- * los resultados de la página actual.
- *
- * @see MECON_DB_Pager
- */
- function addPager($result, $tipo = null, $link = null, $limit = 10, $maxpages = 21) {
- // Creo el pager con el resultado.
- $pager = new MECON_DB_Pager($result, @$_GET['pager_from'], $limit, $maxpages);
- // Obtengo un link válido.
- if (!$link) {
- $link = @$_SERVER['PHP_SELF'];
- }
- if (is_string($link)) {
- $link = new MECON_HTML_Link($link, '');
- }
- // Si es el tipo por defecto pone paginador nada más.
- if (!$tipo) {
- $tipo = array('anterior', 'paginas', 'siguiente');
- }
- // Convierte tipo a array.
- if (!is_array($tipo)) {
- $tipo = array($tipo);
- }
- // Si se quiere mostrar todas las decoraciones del paginador.
- if (in_array('todo', $tipo)) {
- $tipo = array('anterior', 'paginas', 'siguiente', 'total', 'info');
- }
- // Me fijo si tiene cada uno de los elementos y los agrego.
- if (in_array('anterior', $tipo) and $pager->numRows() and $pager->currentpage != 1) {
- $link->setGetVar('pager_from', $pager->prev);
- $this->addLink('anterior', $link);
- }
- if (in_array('siguiente', $tipo) and $pager->numRows() and $pager->currentpage != $pager->numpages) {
- $link->setGetVar('pager_from', $pager->next);
- $this->addLink('siguiente', $link);
- }
- if (in_array('paginas', $tipo) and $pager->numRows() and $pager->numpages > 1) {
- $from = @$_GET['pager_from'];
- $pags = '';
- $lnk = $link->getContents();
- foreach ($pager->pages as $page => $start_row) {
- if ($start_row == $from) {
- $pags .= $page;
- } else {
- $link->setGetVar('pager_from', $start_row);
- $link->setContents($page);
- $pags .= $link->toHtml();
- }
- if ($page != $pager->lastpage) {
- $pags .= ' | ';
- }
- }
- $link->setContents($lnk);
- $this->updatePie($pags, 'centro');
- }
- if (in_array('total', $tipo) and $pager->numRows()) {
- $this->updateCabecera('Se encontraron ' . $pager->numrows . ' resultados.', 'izquierda');
- }
- if (in_array('info', $tipo) and $pager->numRows()) {
- $this->updateCabecera('Página ' . $pager->currentpage . ' de ' . $pager->numpages
- . ' - ' . $pager->limit . ' resultados por página.', 'derecha');
- }
- return $pager;
- }
-
}
?>