From bd2f0ed4b82b2060844876c2526d8aca12c5d9e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ricardo=20Montan=CC=83ana?=
Date: Tue, 11 Mar 2014 23:58:20 +0100
Subject: [PATCH] =?UTF-8?q?En=20mantenimiento=20puesta=20la=20gesti=C3=B3n?=
=?UTF-8?q?=20de=20URL=20para=20que=20vuelva=20siempre=20a=20donde=20estab?=
=?UTF-8?q?a=20tanto=20desde=20altas,=20modificaciones=20o=20bajas=20Refor?=
=?UTF-8?q?mateado=20de=20ficheros?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Mantenimiento.php | 320 +-
Sql.php | 16 +
css/bootstrap-datetimepicker.es.js | 76 +-
css/bootstrap-datetimepicker.min.js | 825 ++-
css/bootstrap/css/bootstrap-theme.css | 394 +-
css/bootstrap/css/bootstrap.css | 5982 ++++++++---------
.../fonts/glyphicons-halflings-regular.svg | 453 +-
css/bootstrap/js/bootstrap.js | 3252 ++++-----
css/bootstrap/js/bootstrap.min.js | 584 +-
css/dashboard.php | 96 +-
css/estilo.css | 526 +-
css/jquery.min.js | 2309 ++++++-
css/jquery.simplecolorpicker-glyphicons.css | 18 +-
css/jquery.simplecolorpicker.css | 70 +-
css/jquery.simplecolorpicker.js | 406 +-
css/moment.min.js | 794 ++-
font/courier.php | 5 +-
font/courierb.php | 5 +-
font/courierbi.php | 5 +-
font/courieri.php | 5 +-
font/helvetica.php | 25 +-
font/helveticab.php | 25 +-
font/helveticabi.php | 25 +-
font/helveticai.php | 25 +-
font/makefont/makefont.php | 728 +-
font/symbol.php | 25 +-
font/times.php | 25 +-
font/timesb.php | 25 +-
font/timesbi.php | 25 +-
font/timesi.php | 25 +-
font/zapfdingbats.php | 25 +-
inc/configuracion.inc | 45 +-
plant/bootstrap.html | 2 +-
plant/normal.html | 62 +-
tests/ConfiguracionTest.php | 12 +-
tests/MenuTest.php | 10 +-
tests/SqlTest.php | 39 +-
xml/mantenimientoElementos.xml | 2 +-
xml/mantenimientoUsuarios.xml | 2 +-
39 files changed, 11002 insertions(+), 6291 deletions(-)
diff --git a/Mantenimiento.php b/Mantenimiento.php
index 4ede6d5..0cce2f9 100644
--- a/Mantenimiento.php
+++ b/Mantenimiento.php
@@ -29,7 +29,6 @@ class Mantenimiento {
private $descripcion;
protected $bdd;
protected $url;
- protected $cabecera;
protected $tabla;
protected $cadenaBusqueda;
protected $campos = array();
@@ -37,39 +36,85 @@ class Mantenimiento {
protected $campoBusca = "Descripcion";
protected $comandoConsulta = "";
protected $perfil;
+ protected $datosURL = array();
+ protected $datosURLb = array();
- public function __construct($baseDatos, $perfil, $nombre) {
+ public function __construct($baseDatos, $perfil, $nombre)
+ {
$this->bdd = $baseDatos;
- $this->url = "index.php?$nombre&opc=inicial";
- $this->cabecera = 'Location: ' . $this->url;
+ $this->url = "index.php?$nombre";
+ //$this->datosURL['']
$this->tabla = ucfirst($nombre);
$this->perfil = $perfil;
+ $this->cargaDatosURL();
}
- public function ejecuta() {
- $opc = $_GET['opc'];
- $id = $_GET['id'];
- $orden = isset($_GET['orden']) ? $_GET['orden'] : '';
- $sentido = isset($_GET['sentido']) ? $_GET['sentido'] : 'asc';
- //Sólo tiene sentido para las modificaciones.
- //Es la página donde estaba el registro
- $pag = isset($_GET['pag']) ? $_GET['pag'] : '0';
- $this->cadenaBusqueda = $_GET['buscar'];
+ /**
+ * Carga en los atributos de la clase los datos de la URL
+ * Los datos constantes en la URL son:
+ * - opc = {inicial, editar, eliminar, nuevo, insertar, modificar, borrar}
+ * - orden = {id, ... } nombre del campo por el que se ordena la visualización
+ * - sentido = {asc, desc}
+ * - pag = nº página 0, 1, 2, ...
+ * Los datos opcionales de la URL son:
+ * - buscar = cadena de búsqueda
+ * - id = nº de la clave necesario para la edición o el borrado
+ */
+ public function cargaDatosURL()
+ {
+ $this->datosURL['opc'] = isset($_GET['opc']) ? $_GET['opc'] : 'inicial';
+ $this->datosURL['orden'] = isset($_GET['orden']) ? $_GET['orden'] : 'id';
+ $this->datosURL['sentido'] = isset($_GET['sentido']) ? $_GET['sentido'] : 'asc';
+ $this->datosURL['pag'] = isset($_GET['pag']) ? $_GET['pag'] : '0';
+ $this->cadenaBusqueda = isset($_GET['buscar']) ? $_GET['buscar'] : null;
+ $this->cadenaBusqueda = isset($_POST['buscar']) ? $_POST['buscar'] : $this->cadenaBusqueda;
+ $this->datosURL['buscar'] = $this->cadenaBusqueda;
+ $this->datosURL['id'] = isset($_GET['id']) ? $_GET['id'] : null;
+ }
+
+ public function backupURL()
+ {
+ $this->datosURLb = $this->datosURL;
+ }
+
+ public function restoreURL()
+ {
+ $this->datosURL = $this->datosURLb;
+ }
+
+ //Monta una URL con los datos cargados en los atributos de la clase
+ private function montaURL()
+ {
+ //Primero los datos obligatorios
+ $opc = "&opc=" . $this->datosURL['opc'];
+ $orden = "&orden=" . $this->datosURL['orden'];
+ $sentido = "&sentido=" . $this->datosURL['sentido'];
+ $pag = "&pag=" . $this->datosURL['pag'];
+ //Ahora los datos opcionales
+ $buscar = isset($this->cadenaBusqueda) ? "buscar=$this->cadenaBusqueda" : null;
+ $id = isset($this->datosURL['id']) ? "&id=" . $this->datosURL['id'] : null;
+ $enlace = $this->url . $opc . $orden . $sentido . $pag . $buscar . $id;
+ return $enlace;
+ }
+
+ public function ejecuta()
+ {
$this->obtenerCampos();
$this->obtieneClavesForaneas();
- switch ($opc) {
- case 'inicial':return $this->consulta($id, $orden, $sentido);
- case 'editar':return $this->muestra($id, EDICION, $pag, $orden, $sentido);
- case 'eliminar':return $this->muestra($id, BORRADO);
- case 'nuevo':return $this->muestra(null, ANADIR);
+ switch ($this->datosURL['opc']) {
+ case 'inicial':return $this->consulta();
+ case 'editar':return $this->muestra(EDICION);
+ case 'eliminar':return $this->muestra(BORRADO);
+ case 'nuevo':return $this->muestra(ANADIR);
case 'insertar':return $this->insertar();
- case 'modificar':return $this->modificar($id, $pag, $orden, $sentido);
- case 'borrar':return $this->borrar($id);
- default:return 'La clase Mantenimiento No entiende lo solicitado.';
+ case 'modificar':return $this->modificar();
+ case 'borrar':return $this->borrar();
+ default: return "La clase Mantenimiento No entiende lo solicitado [" . $this->datosURL['opc'] . "]";
}
}
- protected function obtieneClavesForaneas() {
+ protected function obtieneClavesForaneas()
+ {
$salida = null;
foreach ($this->campos as $clave => $valor) {
$trozos = explode(",", $valor["Comment"]);
@@ -87,21 +132,23 @@ class Mantenimiento {
$this->foraneas = $salida;
}
- private function consulta($pagina, $orden, $sentido) {
+ private function consulta()
+ {
+ $orden = $this->datosURL['orden'];
+ $sentido = $this->datosURL['sentido'];
//Calcula los números de página anterior y siguiente.
- $pagina = $pagina + 0;
+ $pagina = $this->datosURL['pag'];
$pagSigte = $pagina <= 0 ? 1 : $pagina + 1;
- $pagAnt = $pagSigte - 2;
+ $pagAnt = $pagSigte - 2 < 0 ? 0 : $pagSigte -2;
$pagFwd = $pagSigte + 3;
- $pagRew = $pagAnt - 3 < 0 ? $pagAnt : $pagAnt - 3;
+ $pagRew = $pagAnt - 3 < 0 ? 0 : $pagAnt - 3;
//Tengo que procesar la cabecera antes de lo de la cadena de búsqueda por el tema de las búsquedas
$cabecera = $this->cabeceraTabla();
//Trata con la cadena de búsqueda si viene del post debe quedarse con ella sino con la del get y si no está definida => vacía
- $this->cadenaBusqueda = isset($_GET['buscar']) ? $_GET['buscar'] : null;
- $this->cadenaBusqueda = isset($_POST['buscar']) ? $_POST['buscar'] : $this->cadenaBusqueda;
+ //$this->cadenaBusqueda = isset($_GET['buscar']) ? $_GET['buscar'] : null;
+ //$this->cadenaBusqueda = isset($_POST['buscar']) ? $_POST['buscar'] : $this->cadenaBusqueda;
if (isset($this->cadenaBusqueda) && strlen($this->cadenaBusqueda)) {
$sufijo = " where $this->campoBusca like '%" . $this->bdd->filtra($this->cadenaBusqueda) . "%'";
- $sufijoEnlace = '&buscar=' . $this->cadenaBusqueda .'';
$comando = str_replace('{buscar}', $sufijo, $this->comandoConsulta);
} else {
$comando = str_replace('{buscar}', '', $this->comandoConsulta);
@@ -114,36 +161,35 @@ class Mantenimiento {
$comando = str_replace('{orden}', ' ', $comando);
}
//Introduce un botón para hacer búsquedas y el número de la página
- $salida = $this->enlaceBusqueda($pagSigte, $this->cadenaBusqueda);
- //Esta orden de centrado se cierra en el pie de la tabla
- //$salida.='Página ' . $pagSigte . '
';
-// $salida .='';
+ $salida = $this->enlaceBusqueda($pagSigte);
$salida.= $cabecera;
//Consulta paginada de todas las tuplas
- $comando = str_replace('{inferior}', ($pagAnt + 1) * NUMFILAS, $comando);
+ $comando = str_replace('{inferior}', $pagina * NUMFILAS, $comando);
$comando = str_replace('{superior}', NUMFILAS, $comando);
- //$salida.=$comando;
$tabla = strtolower($this->tabla);
$this->bdd->ejecuta($comando);
+ $numRegistros = $this->bdd->numeroTotalTuplas();
+ //Si el número de la página fwd es mayor que el total de páginas lo establece a éste
+ if (NUMFILAS > 0) {
+ $totalPags = (int) ($numRegistros / NUMFILAS) - 1;
+ if ($numRegistros % NUMFILAS) {
+ $totalPags++;
+ }
+ } else {
+ $totalPags = 0;
+ }
+ $pagFwd = $pagFwd > $totalPags ? $totalPags : $pagFwd;
if ($this->bdd->numeroTuplas() == 0) {
if ($pagSigte > 1) {
// Si no hay datos en la consulta y no es la primera página,
- // carga la página inicial
- header('Location: ' . $this->url);
+ // carga la página final
+ $this->datosURL['pag'] = $totalPags;
+ header('Location: ' . $this->montaURL());
} else {
$salida = "No hay registros
";
}
}
- //$salida.=print_r($this->perfil);
//$salida.=$comando;
- //var_dump($this->campos);
while ($fila = $this->bdd->procesaResultado()) {
$salida.='';
foreach ($fila as $clave => $valor) {
@@ -170,37 +216,56 @@ class Mantenimiento {
}
//Añade el icono de editar
if ($this->perfil['Modificacion']) {
- $salida.='backupURL(); $this->datosURL['opc'] = "editar"; $this->datosURL['id'] = $id;
+ $salida.=' | ';
+ $this->restoreURL();
}
//Añade el icono de eliminar
if ($this->perfil['Borrado']) {
- $salida.=' backupURL(); $this->datosURL['opc'] = "eliminar"; $this->datosURL['id'] = $id;
+ $salida.='  |
' . "\n";
+ $this->restoreURL();
}
}
$salida.="";
//Añade botones de comandos
- $enlace = '
\n";
- $siguiente = $enlace . $pagSigte . $sufijoEnlace . "\">
\n";
- $fwd = $enlace . $pagFwd . $sufijoEnlace . "\">
\n";
- $rew = $enlace . $pagRew . $sufijoEnlace . "\">
\n";
- if (strlen($orden) > 0) {
- $az = '
';
- $za = '
';
- } else {
- $az = $za = '';
- }
+
+ if ($numRegistros) {
+ $this->backupURL();
+ $this->datosURL['pag'] = $pagAnt;
+ $anterior = $this->montaURL();
+ $this->datosURL['pag'] = $pagSigte;
+ $siguiente = $this->montaURL();
+ $this->datosURL['pag'] = $pagFwd;
+ $fwd = $this->montaURL();
+ $this->datosURL['pag'] = $pagRew;
+ $rew = $this->montaURL();
+ $anterior = '
\n";
+ $siguiente = '
\n";
+ $fwd = '
\n";
+ $rew = '
\n";
+ $this->restoreURL();
+ $this->datosURL['sentido'] = "asc";
+ $az = $this->montaURL();
+ $az = '
';
+ $this->datosURL['sentido'] = "desc";
+ $za = $this->montaURL();
+ $za = '
';
+ $this->restoreURL();
if ($this->perfil['Informe']) {
$informe = '
';
} else {
$informe = "";
}
+ $this->restoreURL();
}
if ($this->perfil['Alta']) {
- $anadir = '' .
+ $this->datosURL['opc'] = 'nuevo';
+ $anadir = '' .
'
';
} else {
$anadir = "";
@@ -210,41 +275,35 @@ class Mantenimiento {
return $salida;
}
- private function enlaceBusqueda($pagina, $valorAnterior) {
- //$salida = '';
- //$salida .='
';
- //$salida.='';
- $valor = isset($valorAnterior) ? 'value="'.$valorAnterior.'"' : '';
+ private function enlaceBusqueda($pagina)
+ {
+ $valor = isset($this->cadenaBusqueda) ? 'value="' . $this->cadenaBusqueda . '"' : '';
$salida = '';
- //$salida .= '';
$salida .= '';
-// $salida .= '
-//
-// Página 5 de 620% Complete
-//
-//
';
return $salida;
}
- protected function borrar($id) {
+ protected function borrar()
+ {
//@todo hay que tener en cuenta aquí la cadena de búsqueda y la página en la url
+ $id = $this->datosURL['id'];
$comando = "delete from " . $this->tabla . " where id=\"$id\"";
if (!$this->bdd->ejecuta($comando)) {
return $this->errorBD($comando);
}
- header('Location: ' . $this->url);
+ $this->datosURL['opc'] = 'inicial';
+ $this->datosURL['id'] = null;
+ $url = $this->montaURL();
+ header('Location: ' . $url);
return;
}
- protected function insertar() {
+ protected function insertar()
+ {
$comando = "insert into " . $this->tabla . " (";
$lista = explode("&", $_POST['listacampos']);
$primero = true;
@@ -278,7 +337,7 @@ class Mantenimiento {
if (empty($_POST[$campo])) {
$valor = "0";
}
- $valor = $_POST[$campo] == "on" ? '1' : $valor;
+ $valor = $_POST[$campo] == "on" ? '1' : $valor;
} else {
$valor = $_POST[$campo] == "" ? "null" : '"' . $_POST[$campo] . '"';
}
@@ -288,12 +347,14 @@ class Mantenimiento {
if (!$this->bdd->ejecuta($comando)) {
return $this->errorBD($comando);
}
- list($enlace, $resto) = explode("&", $this->url);
+ $this->datosURL['opc'] = 'inicial';
+ $this->datosURL['id'] = null;
$enlace.="&opc=inicial";
- return "";
+ return "";
}
- protected function modificar($id, $pag, $orden, $sentido) {
+ protected function modificar()
+ {
//Los datos a utilizar para actualizar la tupla vienen en $_POST.
//La lista de atributos de la tupla viene en el campo oculto listacampos
//print_r($_GET);
@@ -301,7 +362,6 @@ class Mantenimiento {
//@todo hay que tener en cuenta aquí la página en la que se encuentra y la cadena de búsqueda
$comando = "update " . $this->tabla . " set ";
$lista = explode("&", $_POST['listacampos']);
- //var_dump($lista);
$primero = true;
foreach ($lista as $campo) {
if ($campo == "id" || $campo == "")
@@ -327,20 +387,20 @@ class Mantenimiento {
}
}
}
- $comando.=" where id=\"$id\"";
+ $comando.=" where id=\"" . $this->datosURL['id'] . "\"";
if (!$this->bdd->ejecuta($comando)) {
return $this->errorBD($comando);
}
-
- list($enlace, $resto) = explode("&", $this->url);
- $enlace.="&opc=inicial&orden=" . $orden . "&sentido=" . $sentido . "&id=" . $pag;
- //echo $comando;
- header('Location: ' . $enlace);
+ $this->datosURL['id'] = null;
+ $this->datosURL['opc'] = inicial;
+ header('Location: ' . $this->montaURL());
return;
}
- protected function muestra($id, $tipoAccion, $pag = "", $orden = "", $sentido = "") {
- if (isset($id)) {
+ protected function muestra($tipoAccion)
+ {
+ $id = $this->datosURL['id'];
+ if ($tipoAccion != ANADIR) {
$comando = "select * from " . $this->tabla . " where id='$id'";
$resultado = $this->bdd->ejecuta($comando);
if (!$resultado) {
@@ -350,14 +410,10 @@ class Mantenimiento {
} else {
$fila = null;
}
- //list($tipo,$valor)=explode($columna["Type"]);
- $accion = "index.php?" . strtolower($this->tabla) . "&id=$id&opc=";
+ /*$accion = "index.php?" . strtolower($this->tabla) . "&id=$id&opc=";
switch ($tipoAccion) {
case EDICION:
$accion.="modificar";
- $accion.=isset($pag) ? "&pag=$pag" : '';
- $accion.=isset($orden) ? "&orden=$orden" : '';
- $accion.=isset($sentido) ? "&sentido=$sentido" : '';
break;
case BORRADO:
$accion.="borrar";
@@ -366,13 +422,18 @@ class Mantenimiento {
$accion.="insertar";
break;
}
+ $accion.=isset($pag) ? "&pag=$pag" : '';
+ $accion.=isset($orden) ? "&orden=$orden" : '';
+ $accion.=isset($sentido) ? "&sentido=$sentido" : '';
+ $accion.=isset($this->cadenaBusqueda) ? "&buscar=$this->cadenaBusqueda" : '';*/
//Genera un formulario con los datos de la tupla seleccionada.
- return $this->formularioCampos($accion, $tipoAccion, $fila);
+ return $this->formularioCampos($tipoAccion, $fila);
}
//Función que genera un campo de lista con los valores de descripción de la
//tabla a la cual pertenece la clave foránea.
- protected function generaLista($datos, $campo, $valorInicial, $modo) {
+ protected function generaLista($datos, $campo, $valorInicial, $modo)
+ {
$salida = "