]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/HTML/Tabla.php
Se modifica el método acumular para que las secuencias se pinten automáticamente...
[mecon/meconlib.git] / lib / MECON / HTML / Tabla.php
index e6010a7c836849bc903825f9b130eb4e993a1935..378653b2e81c3fdfce1dfafa5c14f9cac3c9cec5 100644 (file)
@@ -26,7 +26,7 @@ $Id$
 
 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.
@@ -73,7 +73,7 @@ class MECON_HTML_Tabla extends HTML_Table {
      * 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
@@ -108,149 +108,6 @@ class MECON_HTML_Tabla extends HTML_Table {
 
     }    
 
-    /**                 
-     * 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
      *
@@ -284,15 +141,7 @@ class MECON_HTML_Tabla extends HTML_Table {
             $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);
@@ -304,16 +153,35 @@ class MECON_HTML_Tabla extends HTML_Table {
             ));
         }
         // 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;
     }
 
     /**
@@ -398,7 +266,9 @@ class MECON_HTML_Tabla extends HTML_Table {
                 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':
@@ -421,6 +291,20 @@ class MECON_HTML_Tabla extends HTML_Table {
                 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);
             }
@@ -441,14 +325,14 @@ class MECON_HTML_Tabla extends HTML_Table {
      * 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;
@@ -469,7 +353,7 @@ class MECON_HTML_Tabla extends HTML_Table {
      */
     function updateCabecera($cabecera, $lugar) {
         if (!$this->_cabecera) {
-            $this->_cabecera = array(' ', ' ', ' ');
+            $this->_cabecera = array('', '', '');
         }
         if ($lugar == 'izquierda') {
             $this->_cabecera[0] = $cabecera;
@@ -509,7 +393,7 @@ class MECON_HTML_Tabla extends HTML_Table {
      */
     function updatePie($pie, $lugar) {
         if (!$this->_pie) {
-            $this->_pie = array(' ', ' ', ' ');
+            $this->_pie = array('', '', '');
         }
         if ($lugar == 'izquierda') {
             $this->_pie[0] = $pie;
@@ -541,7 +425,7 @@ class MECON_HTML_Tabla extends HTML_Table {
      * @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.
@@ -556,7 +440,7 @@ class MECON_HTML_Tabla extends HTML_Table {
         }
         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');
@@ -565,7 +449,7 @@ class MECON_HTML_Tabla extends HTML_Table {
                 $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');
@@ -573,8 +457,17 @@ class MECON_HTML_Tabla extends HTML_Table {
                 $link->addContents($img);
                 $this->updateCabecera($link, 'derecha');
                 break;
+            case 'buscar':
+                $img = new MECON_HTML_Image('/MECON/images/general_lupa', 'Q');
+                // 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');
@@ -583,7 +476,7 @@ class MECON_HTML_Tabla extends HTML_Table {
                 $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);
@@ -591,7 +484,7 @@ class MECON_HTML_Tabla extends HTML_Table {
                 $this->updateCabecera($link, 'izquierda');
                 break;
             case 'anterior':
-                $img = new MECON_HTML_Image('/MECON/images/general_anterior', '&gt;-');
+                $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);
@@ -603,112 +496,6 @@ class MECON_HTML_Tabla extends HTML_Table {
         }
     }
 
-    /**
-     * 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;
-    }
-
 }
 
 ?>