]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/HTML/TablaDB.php
Se corrige pequeño bug a Link.
[mecon/meconlib.git] / lib / MECON / HTML / TablaDB.php
index 35b4bba053e1ee3c9ed6e98d65541fa4a02d6f00..6876e947aa8120f8d08af2a5573989e5345f06ed 100644 (file)
@@ -42,6 +42,25 @@ class MECON_HTML_TablaDB extends MECON_HTML_Tabla {
      */
     var $_desc = 'resultados';
 
      */
     var $_desc = 'resultados';
 
+    /**
+     * Datos a agregar delante de cada fila que se agregue desde una base de datos.
+     * Cada elemento del array es a su vez un array cuyo primer elemento es el
+     * formato del texto a agregar (tipo printf()) y el segundo es un array con los
+     * campos de la DB a utilizar para ese formato en una fila dada.
+     */
+    var $_prependRowsData = array();
+
+    /**
+     * Datos a agregar al final de cada fila que se agregue desde una base de datos.
+     * El formato es el mismo que el de _prependRowsData.
+     */
+    var $_appendRowsData = array();
+
+    /**
+     * Prefijo a usar para las variables GET que genera la tabla.
+     */
+    var $_getVarPrefix = 'tabladb_';
+
     /**
      * Constructor. 
      * Puede recibir como parametro un string con los atributos que se 
     /**
      * Constructor. 
      * Puede recibir como parametro un string con los atributos que se 
@@ -62,6 +81,20 @@ class MECON_HTML_TablaDB extends MECON_HTML_Tabla {
         parent::MECON_HTML_Tabla($attrs, $estilo);
     }    
 
         parent::MECON_HTML_Tabla($attrs, $estilo);
     }    
 
+    /**
+     * Establece el prefijo usado para las variables de GET que genera la tabla.
+     */
+    function setGetVarPrefix($prefix) {
+        $this->_getVarPrefix = $prefix;
+    }
+
+    /**
+     * Obtiene el prefijo usado para las variables de GET que genera la tabla.
+     */
+    function getGetVarPrefix() {
+        return $this->_getVarPrefix;
+    }
+
     /**
      * Agrega un páginador a la tabla, basado en un resultado de una base de datos.
      * Ejemplo:
     /**
      * Agrega un páginador a la tabla, basado en un resultado de una base de datos.
      * Ejemplo:
@@ -95,15 +128,17 @@ class MECON_HTML_TablaDB extends MECON_HTML_Tabla {
      *                    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.
      *                    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.
+     * @param string $getvar Nombre de la variable GET a usar para indicar el número
+     *               de página actual (se le pone el \ref setGetPrefix prefijo)
      *
      * @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.
      */
      *
      * @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) {
+    function addPager($result, $tipo = null, $link = null, $limit = 10, $maxpages = 21, $getvar = 'from') {
         // Creo el pager con el resultado.
         // Creo el pager con el resultado.
-        $pager = new MECON_DB_Pager($result, @$_GET['pager_from'], $limit, $maxpages);
+        $pager = new MECON_DB_Pager($result, @$_GET[$this->_getVarPrefix.$getvar], $limit, $maxpages);
         // Obtengo un link válido.
         if (!$link) {
             $link = @$_SERVER['PHP_SELF'];
         // Obtengo un link válido.
         if (!$link) {
             $link = @$_SERVER['PHP_SELF'];
@@ -125,22 +160,22 @@ class MECON_HTML_TablaDB extends MECON_HTML_Tabla {
         }
         // Me fijo si tiene cada uno de los elementos y los agrego.
         if (in_array('anterior', $tipo) and $pager->numRows() and $pager->currentpage != 1) {
         }
         // 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);
+            $link->setGetVar($this->_getVarPrefix.$getvar, $pager->prev);
             $this->addLink('anterior', $link);
         }
         if (in_array('siguiente', $tipo) and $pager->numRows() and $pager->currentpage != $pager->numpages) {
             $this->addLink('anterior', $link);
         }
         if (in_array('siguiente', $tipo) and $pager->numRows() and $pager->currentpage != $pager->numpages) {
-            $link->setGetVar('pager_from', $pager->next);
+            $link->setGetVar($this->_getVarPrefix.$getvar, $pager->next);
             $this->addLink('siguiente', $link);
         }
         if (in_array('paginas', $tipo) and $pager->numRows() and $pager->numpages > 1) {
             $this->addLink('siguiente', $link);
         }
         if (in_array('paginas', $tipo) and $pager->numRows() and $pager->numpages > 1) {
-            $from = @$_GET['pager_from'];
+            $from = @$_GET[$this->_getVarPrefix.$getvar];
             $pags = '';
             $lnk = $link->getContents();
             foreach ($pager->pages as $page => $start_row) {
                 if ($start_row == $from) {
                     $pags .= $page;
                 } else {
             $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->setGetVar($this->_getVarPrefix.$getvar, $start_row);
                     $link->setContents($page);
                     $pags .= $link->toHtml();
                 }
                     $link->setContents($page);
                     $pags .= $link->toHtml();
                 }
@@ -199,9 +234,15 @@ class MECON_HTML_TablaDB extends MECON_HTML_Tabla {
     function addRowsResult($result, $campos) {
         while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
             $datos = array();
     function addRowsResult($result, $campos) {
         while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
             $datos = array();
+            if ($this->_prependRowsData) {
+                $datos = $this->_buildRowsData($datos, $row, $this->_prependRowsData);
+            }
             foreach ($campos as $campo) {
                 $datos[] = $row[$campo];
             }
             foreach ($campos as $campo) {
                 $datos[] = $row[$campo];
             }
+            if ($this->_appendRowsData) {
+                $datos = $this->_buildRowsData($datos, $row, $this->_appendRowsData);
+            }
             $this->addRow($datos);
         }
     }
             $this->addRow($datos);
         }
     }
@@ -235,6 +276,105 @@ class MECON_HTML_TablaDB extends MECON_HTML_Tabla {
         }
     }
 
         }
     }
 
+    function addRowsData($format, $campos = array(), $lugar = 'append') {
+        if (!is_array($campos)) {
+            $campos = array($campos);
+        }
+        switch (strtolower($lugar)) {
+            case 'prepend':
+                $this->_prependRowsData[] = array($format, $campos);
+                break;
+            case 'append':
+                $this->_appendRowsData[] = array($format, $campos);
+                break;
+            default:
+                $this->raiseError('Lugar incorrecto. Lugares soportados: append, prepend.');
+        }
+    }
+
+    function _buildRowsData($datos, $row, $array) {
+        if ($array) {
+            foreach ($array as $data) {
+                list($format, $fields) = $data;
+                // Si tiene formatos y argumentos.
+                if ($fields) {
+                    $args = array($format);
+                    foreach ($fields as $field) {
+                        if (is_array($row)) {
+                            $args[] = $row[$field];
+                        } else {
+                            $args[] = $row->$field;
+                        }
+                    }
+                    $datos[] = call_user_func_array('sprintf', $args);
+                // Si tiene solo formato.
+                } else {
+                    #echo "TAG: $format<br>";
+                    // Si es un link, traduce las variables GET.
+                    if (is_a($format, 'mecon_html_link')) {
+                        $vars = $format->getGetVars();
+                        foreach ($vars as $var => $val) {
+                            if (preg_match("/^{$this->_getVarPrefix}(.+)$/", $var, $m)
+                                    and ($val === null)) {
+                                $format->setGetVar($var, $row[$m[1]]);
+                            }
+                        }
+                    }
+                    $datos[] = $format;
+                }
+            }
+        }
+        return $datos;
+    }
+
+    function addRowsIcon($id, $campos = array(), $link = null, $lugar = 'append') {
+        if (is_string($campos)) {
+            $campos = array($campos);
+        }
+        if (!$link) {
+            $link = @$_SERVER['PHP_SELF'];
+        }
+        if (is_string($link)) {
+            $link = new MECON_HTML_Link($link, '');
+        }
+        switch ($id) {
+            case 'modificar':
+                $img = new MECON_HTML_Image('/MECON/images/general_modificar', '(M)');
+                $link->addContents($img);
+                foreach ($campos as $campo) {
+                    $link->setGetVar($this->_getVarPrefix.$campo, null);
+                }
+                $this->addRowsData($link, array(), $lugar);
+                break;
+            case 'no_modificar':
+                $img = new MECON_HTML_Image('/MECON/images/general_modificar_des', '(-)');
+                $this->addRowsData($img, array(), $lugar);
+                break;
+            case 'borrar':
+                $img = new MECON_HTML_Image('/MECON/images/general_eliminar', '(B)');
+                $link->addContents($img);
+                foreach ($campos as $campo) {
+                    $link->setGetVar($this->_getVarPrefix.$campo, null);
+                }
+                $this->addRowsData($link, array(), $lugar);
+                break;
+            case 'no_borrar':
+                $img = new MECON_HTML_Image('/MECON/images/general_eliminar_des', '(-)');
+                $this->addRowsData($img, array(), $lugar);
+                break;
+            case 'ir':
+                $img = new MECON_HTML_Image('/MECON/images/general_ir4', '->');
+                $link->addContents($img);
+                foreach ($campos as $campo) {
+                    $link->setGetVar($this->_getVarPrefix.$campo, null);
+                }
+                $this->addRowsData($link, array(), $lugar);
+                break;
+            default:
+                $this->raiseError("No hay un ícono predefinido llamado '$id'.");
+        }
+    }
+
 }
 
 ?>
 }
 
 ?>