3 Commits
tests ... 1.03

Author SHA1 Message Date
rmontanana
8ffd97b474 Versión 1.03:
incluye: borrados ficheros innecesarios y recolocado upgrade.php en sql

Terminado el mantenimiento con:
-Control de la url de vuelta
-funcionamiento correcto de la cadena de búsqueda con la ordenación, edición, etc.
-funcionamiento correcto de la paginación y el orden con la edición, borrado, etc.
-mensaje de inserción de registros con nuevo formato y redirección con tiempo.

Arreglado que salía mantenimiento de Artículos cuando se solicitaba Matenimiento de Elementos.
2014-03-12 10:56:53 +01:00
rmontanana
caae389c93 AportaContenido: Arreglado el mensaje de Mantenimiento de Elementos que aparecía de artículos.
Mantenimiento, Sql y *xml: Arreglado el mantenimiento para que gestione bien la URL y trabaje bien el paginador y la cadena de búsqueda coordinado con la edición, las inserciones y el borrado. También se han añadido mensajes mejorados en Mantenimiento.
2014-03-12 09:24:17 +01:00
rmontanana
42eb01c27e Mejora en la visualización de la tabla de Configuración en resoluciones pequeñas. 2014-03-11 13:21:16 +01:00
48 changed files with 6418 additions and 14895 deletions

View File

@@ -118,14 +118,14 @@ class AportaContenido {
public function __call($metodo, $parametros) { public function __call($metodo, $parametros) {
switch ($metodo) { // Dependiendo del método invocado switch ($metodo) { // Dependiendo del método invocado
case 'titulo': // devolvemos el título case 'titulo': // devolvemos el título
return PROGRAMA.VERSION; return APLICACION;
case 'usuario': case 'usuario':
if ($this->registrado) if ($this->registrado)
return "Usuario=$this->usuario"; return "Usuario=$this->usuario";
else else
return ''; return '';
case 'fecha': return $this->fechaActual(); case 'fecha': return $this->fechaActual();
case 'aplicacion': return PROGRAMA.VERSION; case 'aplicacion': return APLICACION;
case 'menu': // el menú case 'menu': // el menú
if ($this->registrado) { if ($this->registrado) {
return $this->miMenu->insertaMenu(); return $this->miMenu->insertaMenu();

View File

@@ -1,5 +1,4 @@
<?php <?php
/** /**
* @package Inventario * @package Inventario
* @copyright Copyright (c) 2008, Ricardo Montañana Gómez * @copyright Copyright (c) 2008, Ricardo Montañana Gómez
@@ -20,58 +19,127 @@
* *
*/ */
class Configuracion { class Configuracion {
private $nombreCentro;
private $numFilas;
private $estilo;
private $servidor;
private $baseDatos;
private $usuario;
private $clave;
private $configuracion="inc/configuracion.inc"; private $configuracion="inc/configuracion.inc";
private $confNueva="inc/configuracion.new"; private $confNueva="inc/configuracion.new";
private $confAnterior="inc/configuracion.ant"; private $confAnterior="inc/configuracion.ant";
private $datosConf; private $plantilla;
//Campos del fichero de configuración que se van a editar. private $colorLateral;
private $lista = array('SERVIDOR', 'BASEDATOS', 'BASEDATOSTEST', 'USUARIO', 'CLAVE', 'CENTRO', 'NUMFILAS', 'ESTILO', 'PLANTILLA', 'COLORLAT', 'COLORFON', 'MYSQLDUMP', 'GZIP'); private $colorFondo;
private $campos; private $mysqldump; //comando mysqldump para la copia de seguridad
private $gzip; //comando gzip para comprimir la copia de seguridad
public function __construct() public function ejecuta()
{ {
$this->campos = implode(",", $this->lista); $fichero=file_get_contents($this->configuracion,FILE_TEXT);
}
//Hecho público para poder efectuar los tests correspondientes.
public function obtieneFichero()
{
return file_get_contents($this->configuracion, FILE_TEXT);
}
public function obtieneLista()
{
return $this->lista;
}
public function obtieneDatos($linea, &$clave, &$valor)
{
$filtro = str_replace("'", "", $linea);
list($clave, $valor) = explode(",", $filtro);
list($resto, $campo) = explode("(", $clave);
list($valor, $resto) = explode(")", $valor);
list($resto, $clave) = explode("(", $clave);
$valor = trim($valor);
}
public function ejecuta() {
$fichero = $this->obtieneFichero();
$datos=explode("\n",$fichero); $datos=explode("\n",$fichero);
$grabar = isset($_POST['SERVIDOR']); $grabar=isset($_POST['servidor']);
if ($grabar) { if ($grabar) {
$fsalida=@fopen($this->confNueva,"wb"); $fsalida=@fopen($this->confNueva,"wb");
} }
foreach($datos as $linea) { foreach($datos as $linea) {
if (stripos($linea,"DEFINE")!==false) { if (stripos($linea,"DEFINE")!==false) {
//Comprueba que tenga una definición correcta $filtro=str_replace("'","",$linea);
$this->obtieneDatos($linea, $clave, $valor); list($clave,$valor)=explode(",",$filtro);
$this->datosConf[$clave] = $valor; list($resto,$campo)=explode("(",$clave);
if ($grabar && stripos($this->campos, $clave) !== false) { list($valor,$resto)=explode(")",$valor);
$linea = str_replace($valor, $_POST[$clave], $linea); //$salida.="[$campo]=[$valor]<br>\n";
$this->datosConf[$clave] = $_POST[$clave]; switch ($campo) {
case 'CENTRO':
$this->nombreCentro=$valor;
if ($grabar) {
$linea=str_replace($valor, $_POST['centro'],$linea);
$this->nombreCentro=$_POST['centro'];
}
break;
case 'NUMFILAS':
$this->numFilas=$valor;
if ($grabar) {
$linea=str_replace($valor, $_POST['filas'],$linea);
$this->numFilas=$_POST['filas'];
}
break;
case 'ESTILO':
$this->estilo=$valor;
if ($grabar) {
$linea=str_replace($valor, $_POST['estilo'],$linea);
$this->estilo=$_POST['estilo'];
}
break;
case 'PLANTILLA':
$this->plantilla=$valor;
if ($grabar) {
$linea=str_replace($valor, $_POST['plantilla'],$linea);
$this->plantilla=$_POST['plantilla'];
}
break;
case 'SERVIDOR':
$this->servidor=$valor;
if ($grabar) {
$linea=str_replace($valor, $_POST['servidor'],$linea);
$this->servidor=$_POST['servidor'];
}
break;
case 'BASEDATOS':
$this->baseDatos=$valor;
if ($grabar) {
$linea=str_replace($valor, $_POST['baseDatos'],$linea);
$this->baseDatos=$_POST['baseDatos'];
}
break;
case 'USUARIO':
$this->usuario=$valor;
if ($grabar) {
$linea=str_replace($valor, $_POST['usuario'],$linea);
$this->usuario=$_POST['usuario'];
}
break;
case 'CLAVE':
$this->clave=$valor;
if ($grabar) {
$linea=str_replace($valor, $_POST['clave'],$linea);
$this->clave=$_POST['clave'];
}
break;
case 'COLORLAT':
$valor = trim($valor);
$this->colorLateral = $valor;
if ($grabar) {
$linea=str_replace($valor,$_POST['colorLat'],$linea);
$this->colorLateral=$_POST['colorLat'];
}
break;
case 'COLORFON':
$valor = trim($valor);
$this->colorFondo = $valor;
if ($grabar) {
$linea=str_replace($valor,$_POST['colorFon'],$linea);
$this->colorFondo=$_POST['colorFon'];
}
break;
case 'MYSQLDUMP':
$valor = trim($valor);
$this->mysqldump = $valor;
if ($grabar) {
$linea=str_replace($valor,$_POST['mysqldump'],$linea);
$this->mysqldump=$_POST['mysqldump'];
}
break;
case 'GZIP':
$valor = trim($valor);
$this->gzip = $valor;
if ($grabar) {
$linea=str_replace($valor,$_POST['gzip'],$linea);
$this->gzip=$_POST['gzip'];
}
break;
} }
//$salida = "DatosConf=".var_export($this->datosConf, true) . "stripos = " . stripos($campos, "GZIP");
//$salida .= "Post=" . var_export($_POST, true);
} }
if ($grabar) { if ($grabar) {
$registro=substr($linea,0,2)=="?>"?$linea:$linea."\n"; $registro=substr($linea,0,2)=="?>"?$linea:$linea."\n";
@@ -80,6 +148,7 @@ class Configuracion {
} }
$salida.=$this->formulario(); $salida.=$this->formulario();
if ($grabar) { if ($grabar) {
//$salida.='<label class="warn">Configuraci&oacute;n guardada correctamente</label>';
$salida.='<p class="bg-primary">Configuraci&oacute;n guardada correctamente</p>'; $salida.='<p class="bg-primary">Configuraci&oacute;n guardada correctamente</p>';
fclose($fsalida); fclose($fsalida);
//unlink($this->confAnterior); //unlink($this->confAnterior);
@@ -89,76 +158,74 @@ class Configuracion {
} }
return $salida; return $salida;
} }
private function formulario()
private function formulario() { {
$coloresLateral = array( "Original" => "#C4FAEC", "Verde" => "#7bd148", "Azul marino" => "#5484ed", "Azul" => "#a4bdfc", "Turquesa" => "#46d6db", $coloresLateral = array( "Original" => "#C4FAEC", "Verde" => "#7bd148", "Azul marino" => "#5484ed", "Azul" => "#a4bdfc", "Turquesa" => "#46d6db",
"Verde claro" => "#7ae7bf", "Verde oscuro" => "#51b749", "Amarillo" => "#fbd75b", "Naranja" => "#ffb878", "Morado" => "#6633FF", "Verde claro" => "#7ae7bf", "Verde oscuro" => "#51b749", "Amarillo" => "#fbd75b", "Naranja" => "#ffb878", "Morado" => "#6633FF",
"Rojo oscuro" => "#dc2127", "P&uacute;rpura" => "#dbadff", "Gris" => "#e1e1e1"); "Rojo oscuro" => "#dc2127", "P&uacute;rpura" => "#dbadff", "Gris" => "#e1e1e1");
$coloresFondo = array( "Verde" => "#7bd148", "Azul marino" => "#5484ed", "Azul" => "#a4bdfc", "Turquesa" => "#46d6db", $coloresFondo = array( "Verde" => "#7bd148", "Azul marino" => "#5484ed", "Azul" => "#a4bdfc", "Turquesa" => "#46d6db",
"Verde claro" => "#7ae7bf", "Verde oscuro" => "#51b749", "Amarillo" => "#fbd75b", "Naranja" => "#ffb878", "Rojo" => "#ff887c", "Verde claro" => "#7ae7bf", "Verde oscuro" => "#51b749", "Amarillo" => "#fbd75b", "Naranja" => "#ffb878", "Rojo" => "#ff887c",
"Rojo oscuro" => "#dc2127", "P&uacute;rpura" => "#dbadff", "Gris" => "#e1e1e1", "Original" => '#F3FEC8'); "Rojo oscuro" => "#dc2127", "P&uacute;rpura" => "#dbadff", "Gris" => "#e1e1e1", "Original" => '#F3FEC8');
$personal = $this->datosConf['ESTILO'] == "personal" ? 'selected' : ' '; $personal=$this->estilo=="personal"?'selected':' ';
$bluecurve = $this->datosConf['ESTILO'] == "bluecurve" ? 'selected' : ' '; $bluecurve=$this->estilo=="bluecurve"?'selected':' ';
$cristal = $this->datosConf['ESTILO'] == "cristal" ? 'selected' : ' '; $cristal=$this->estilo=="cristal"?'selected':' ';
$normal = $this->datosConf['PLANTILLA'] == "normal" ? 'selected' : ' '; $normal=$this->plantilla=="normal"? 'selected':' ';
$bootstrap = $this->datosConf['PLANTILLA'] == "bootstrap" ? 'selected' : ' '; $bootstrap=$this->plantilla=="bootstrap" ? 'selected':' ';
$salida = '<center><div class="col-sm-4 col-md-6"><form name="configura" method="post">'; $salida='<center><div class="col-sm-8 col-md-8"><form name="configura" method="post">';
//$salida.='<p align="center"><table border=1 class="tablaDatos"><tbody>'; //$salida.='<p align="center"><table border=1 class="tablaDatos"><tbody>';
$salida.='<p align="center"><table border=2 class="table table-hover"><tbody>'; $salida.='<p align="center"><table border=2 class="table table-hover"><tbody>';
$salida.='<th colspan=2 class="info"><center><b>Preferencias</b></center></th>'; $salida.='<th colspan=2 class="info"><center><b>Preferencias</b></center></th>';
$salida.='<tr><td>Nombre del Centro</td><td><input type="text" name="CENTRO" value="' . $this->datosConf['CENTRO'] . '" size="30" /></td></tr>'; $salida.='<tr><td>Nombre del Centro</td><td><input type="text" name="centro" value="'.$this->nombreCentro.'" size="30" /></td></tr>';
$salida.='<tr><td>N&uacute;mero de filas</td><td><input type="text" name="NUMFILAS" value="' . $this->datosConf['NUMFILAS'] . '" size="3" /></td></tr>'; $salida.='<tr><td>N&uacute;mero de filas</td><td><input type="text" name="filas" value="'.$this->numFilas.'" size="3" /></td></tr>';
$salida.='<tr><td style="vertical-align:middle">Plantilla</td><td><select name="PLANTILLA" class="form-control">'; $salida.='<tr><td style="vertical-align:middle">Plantilla</td><td><select name="plantilla" class="form-control">';
$salida.='<option value="normal" '.$normal.'>normal</option>'; $salida.='<option value="normal" '.$normal.'>normal</option>';
$salida.='<option '.$bootstrap.'>bootstrap</option></select></td></tr>'; $salida.='<option '.$bootstrap.'>bootstrap</option></select></td></tr>';
$salida.='<tr><td style="vertical-align:middle">Estilo</td><td><select name="ESTILO" class="form-control">'; $salida.='<tr><td style="vertical-align:middle">Estilo</td><td><select name="estilo" class="form-control">';
$salida.='<option value="personal" '.$personal.'>personal</option>'; $salida.='<option value="personal" '.$personal.'>personal</option>';
$salida.='<option '.$bluecurve.'>bluecurve</option>'; $salida.='<option '.$bluecurve.'>bluecurve</option>';
$salida.='<option '.$cristal.'>cristal</option></select></td></tr>'; $salida.='<option '.$cristal.'>cristal</option></select></td></tr>';
$salida.='<tr><td style="vertical-align:middle">Color Lateral (bootstrap)</td><td style="vertical-align:middle"><select name="COLORLAT" id="COLORLAT" class="form-control">'; $salida.='<tr><td style="vertical-align:middle">Color Lateral (bootstrap)</td><td style="vertical-align:middle"><select name="colorLat" id="colorLat" class="form-control">';
foreach ($coloresLateral as $color => $codigo) { foreach ($coloresLateral as $color => $codigo) {
$selec = ""; $selec = "";
if (trim($this->datosConf['COLORLAT']) == $codigo) { if ($this->colorLateral == $codigo) {
$selec = "selected"; $selec = "selected";
} }
$salida.='<option value="'.$codigo.'" '.$selec.' >'.$color.'</option>'; $salida.='<option value="'.$codigo.'" '.$selec.' >'.$color.'</option>';
} }
$salida.='</select></td></tr>'; $salida.='</select></td></tr>';
$salida.='<tr><td style="vertical-align:middle">Color Fondo (bootstrap)</td><td style="vertical-align:middle"><select name="COLORFON" id="COLORFON" class="form-control">'; $salida.='<tr><td style="vertical-align:middle">Color Fondo (bootstrap)</td><td style="vertical-align:middle"><select name="colorFon" id="colorFon" class="form-control">';
foreach ($coloresFondo as $color => $codigo) { foreach ($coloresFondo as $color => $codigo) {
$selec = ""; $selec = "";
if (trim($this->datosConf['COLORFON']) == $codigo) { if ($this->colorFondo == $codigo) {
$selec = "selected"; $selec = "selected";
} }
$salida.='<option value="'.$codigo.'" '.$selec.' >'.$color.'</option>'; $salida.='<option value="'.$codigo.'" '.$selec.' >'.$color.'</option>';
} }
$salida.='</select></td></tr>'; $salida.='</select></td></tr>';
$salida.='<th colspan=2 class="danger"><center><b>Base de datos</b></center></th>'; $salida.='<th colspan=2 class="danger"><center><b>Base de datos</b></center></th>';
$salida.='<tr><td>Servidor</td><td><input type="text" name="SERVIDOR" value="' . $this->datosConf['SERVIDOR'] . '" size="30" /></td></tr>'; $salida.='<tr><td>Servidor</td><td><input type="text" name="servidor" value="'.$this->servidor.'" size="30" /></td></tr>';
$salida.='<tr><td>Base de datos</td><td><input type="text" name="BASEDATOS" value="' . $this->datosConf['BASEDATOS'] . '" size="30" /></td></tr>'; $salida.='<tr><td>Base de datos</td><td><input type="text" name="baseDatos" value="'.$this->baseDatos.'" size="30" /></td></tr>';
$salida.='<tr><td>Base de datos Tests</td><td><input type="text" name="BASEDATOSTEST" value="' . $this->datosConf['BASEDATOSTEST'] . '" size="30" /></td></tr>'; $salida.='<tr><td>Usuario</td><td><input type="text" name="usuario" value="'.$this->usuario.'" size="30" /></td></tr>';
$salida.='<tr><td>Usuario</td><td><input type="text" name="USUARIO" value="' . $this->datosConf['USUARIO'] . '" size="30" /></td></tr>'; $salida.='<tr><td>Clave</td><td><input type="text" name="clave" value="'.$this->clave.'" size="30" /></td></tr>';
$salida.='<tr><td>Clave</td><td><input type="text" name="CLAVE" value="' . $this->datosConf['CLAVE'] . '" size="30" /></td></tr>'; $salida.='<tr><td>mysqldump</td><td><input type="text" name="mysqldump" value="'.$this->mysqldump.'" size="30" /></td></tr>';
$salida.='<tr><td>mysqldump</td><td><input type="text" name="MYSQLDUMP" value="' . $this->datosConf['MYSQLDUMP'] . '" size="30" /></td></tr>'; $salida.='<tr><td>gzip</td><td><input type="text" name="gzip" value="'.$this->gzip.'" size="30" /></td></tr>';
$salida.='<tr><td>gzip</td><td><input type="text" name="GZIP" value="' . $this->datosConf['GZIP'] . '" size="30" /></td></tr>';
$salida.='<tr align=center><td colspan=2><input type="submit" class="btn btn-primary" align="center" value="Aceptar" name="aceptar" /></td></tr></p>'; $salida.='<tr align=center><td colspan=2><input type="submit" class="btn btn-primary" align="center" value="Aceptar" name="aceptar" /></td></tr></p>';
$salida.='</form></div></center>'; $salida.='</form></div></center>';
$salida.="<script> $salida.="<script>
$(document).ready(function() { $(document).ready(function() {
$('select[name=" . '"COLORFON"' . "]').on('change', function() { $('select[name=" .'"colorFon"'. "]').on('change', function() {
$(document.body).css('background-color', $('select[name=" . '"COLORFON"' . "]').val()); $(document.body).css('background-color', $('select[name=" .'"colorFon"'. "]').val());
$('.main').css('background-color', $('select[name=" . '"COLORFON"' . "]').val()); $('.main').css('background-color', $('select[name=" .'"colorFon"'. "]').val());
}); });
$('select[name=" . '"COLORLAT"' . "]').on('change', function() { $('select[name=" .'"colorLat"'. "]').on('change', function() {
$('.sidebar').css('background-color', $('select[name=" . '"COLORLAT"' . "]').val()); $('.sidebar').css('background-color', $('select[name=" .'"colorLat"'. "]').val());
}); });
$('select[name=" . '"COLORLAT"' . "]').simplecolorpicker({theme: 'glyphicons'}); $('select[name=". '"colorLat"' ."]').simplecolorpicker({theme: 'glyphicons'});
$('select[name=" . '"COLORFON"' . "]').simplecolorpicker({theme: 'glyphicons'}); $('select[name=" .'"colorFon"' ."]').simplecolorpicker({theme: 'glyphicons'});
}); });
</script>"; </script>";
//$salida.="<br>fondo=[$this->colorFondo] lateral=[$this->colorLateral]<br>";
return $salida; return $salida;
} }
} }
?> ?>

View File

@@ -1,179 +0,0 @@
<?php
/**
* genera un documento PDF a partir de una descripción dada en un archivo XML
* @author Ricardo Montañana <rmontanana@gmail.com>
* @version 1.0
* @package Inventario
* @copyright Copyright (c) 2008, Ricardo Montañana
* @package Inventario
* @copyright Copyright (c) 2008, Ricardo Montañana Gómez
* @license http://www.gnu.org/licenses/gpl-3.0.txt
* This file is part of Inventario.
* Inventario is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Inventario is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Inventario. If not, see <http://www.gnu.org/licenses/>.
*
*/
require_once 'phpqrcode.php';
class EtiquetasPDF {
/**
*
* @var basedatos Controlador de la base de datos
*/
private $bdd;
private $docu;
private $pdf;
private $def;
private $nombreFichero = "tmp/informeEtiquetas.pdf";
/**
* El constructor recibe como argumento el nombre del archivo XML con la definición, encargándose de recuperarla y guardar toda la información localmente
* @param basedatos $bdd manejador de la base de datos
* @param string $definicion fichero con la definición del informe en XML
* @param boolean $registrado usuario registrado si/no
* @return ficheroPDF
* todo: cambiar este comentario
*/
public function __construct($bdd, $definicion, $registrado)
{
if (!$registrado) {
return 'Debe registrarse para acceder a este apartado';
}
// Recuperamos la definición del informe
$this->def = simplexml_load_file($definicion);
$this->bdd = $bdd;
$this->pdf = new FPDF();
$this->pdf->SetMargins(0.2, 0.2, 0.2);
$this->pdf->SetFont('Arial', '', 11);
$this->pdf->setAutoPageBreak(false);
//echo $def->Titulo.$def->Cabecera;
$this->pdf->setAuthor(AUTOR, true);
$creador = CENTRO . " " . PROGRAMA . VERSION;
$this->pdf->setCreator(html_entity_decode($creador), true);
$this->pdf->setSubject($this->def->Titulo, true);
//$this->pdf->setAutoPageBreak(true, 10);
}
public function crea($definicion)
{
//print_r($def);echo $bdd;die();
// Iniciamos la creación del documento
$this->def = simplexml_load_file($definicion);
//Ejecuta la consulta y prepara las variables de la base de datos.
$this->bdd->ejecuta(trim($this->def->Datos->Consulta));
//Inicializa las variables para el control de las etiquetas.
$this->pdf->AddPage();
$tamLinea = 5;
$fila = -1;
$primero = true; $i = 0;
$url = explode("/", $_SERVER['SCRIPT_NAME']);
$aplicacion = $url[1];
$protocolo = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ? "https://" : "http://";
$enlace = $protocolo . $_SERVER['SERVER_NAME'] . "/" . $aplicacion . "/index.php?elementos&opc=editar&id=";
while($tupla = $this->bdd->procesaResultado()) {
if ($i % 2) {
//Columna 2
$etiq1 = 136;
$etiq2 = 105;
} else {
//Columna 1
$etiq1 = 30;
$etiq2 = 1;
$fila++;
}
if ($i % 14 == 0) {
if (!$primero) {
$this->pdf->AddPage();
$fila = 0;
}
$primero = false;
}
$py = 6 + 41 * $fila;
$enlace2=$enlace.$tupla['idEl'];
$fichero = "tmp/etiq".rand(1000,9999).".png";
QRcode::png($enlace2, $fichero);
$this->pdf->image($fichero, $etiq2, $py, 30, 30);
unlink($fichero);
$this->pdf->setxy($etiq1, $py);
$this->pdf->Cell(30, 10, utf8_decode($tupla['articulo']));
$py+=$tamLinea;
$this->pdf->setxy($etiq1, $py);
$this->pdf->Cell(30, 10, utf8_decode($tupla['marca']));
$py+=$tamLinea;
$this->pdf->setxy($etiq1, $py);
$this->pdf->Cell(30, 10, utf8_decode($tupla['modelo']));
$py+=$tamLinea;
$this->pdf->setxy($etiq1, $py);
$this->pdf->Cell(30, 10, utf8_decode($tupla['numserie']));
$py+=$tamLinea;
$this->pdf->setxy($etiq1, $py);
$this->pdf->Cell(30, 10, $tupla['fechaCompra']);
$py+=$tamLinea-1;
$this->pdf->setxy($etiq2, $py);
$this->pdf->Cell(30, 10, utf8_decode($tupla['ubicacion']));
$py+=$tamLinea-1;
$this->pdf->setxy($etiq2, $py);
$cadena = "idElemento=" . $tupla['idEl'] . " / idArticulo=" . $tupla['idArt'] . " / idUbicacion=" . $tupla['idUbic'];
$this->pdf->Cell(30, 10, $cadena);
$i++;
}
//$this->pdf->MultiCell(0,30,var_export($filas,true));
}
public function cierraPDF()
{
$this->pdf->Close();
$this->docu = $this->pdf->Output('', 'S');
}
public function getContenido()
{
return $this->docu;
}
public function getCabecera()
{
$cabecera = "Content-type: application/pdf";
$cabecera = $cabecera . "Content-length: " . strlen($this->docu);
$cabecera = $cabecera . "Content-Disposition: inline; filename=" . $this->nombreFichero;
return $cabecera;
}
public function guardaArchivo($nombre = "tmp/Informe.pdf")
{
$fichero = fopen($nombre, "w");
fwrite($fichero, $this->getCabecera());
fwrite($fichero, $this->getContenido(), strlen($this->getContenido()));
$this->nombreFichero = $nombre;
fclose($fichero);
}
public function enviaCabecera()
{
header("Content-type: application/pdf");
$longitud = strlen($this->docu);
header("Content-length: $longitud");
header("Content-Disposition: inline; filename=" . $this->nombreFichero);
}
public function imprimeInforme()
{
$this->enviaCabecera();
echo $this->docu;
}
}
?>

View File

@@ -40,19 +40,12 @@ class InformeInventario {
private function listarUbicacion() { private function listarUbicacion() {
$salidaInforme = isset($_POST['salida']) ? $_POST['salida'] : 'pantalla'; $salidaInforme = isset($_POST['salida']) ? $_POST['salida'] : 'pantalla';
switch ($salidaInforme) { if ($salidaInforme == "pantalla") {
case "pantalla":
$fichero = "xml/inventarioUbicacion.xml"; $fichero = "xml/inventarioUbicacion.xml";
$salida = "tmp/inventarioUbicacion.xml"; $salida = "tmp/inventarioUbicacion.xml";
break; } else {
case "csv":
$fichero = "xml/inventarioUbicacionCSV.xml"; $fichero = "xml/inventarioUbicacionCSV.xml";
$salida = "tmp/inventarioUbicacionCSV.xml"; $salida = "tmp/inventarioUbicacionCSV.xml";
break;
case "etiquetas":
$fichero = "xml/inventarioUbicacionEtiquetas.xml";
$salida = "tmp/inventarioUbicacionEtiquetas.xml";
break;
} }
$plantilla = file_get_contents($fichero) or die('Fallo en la apertura de la plantilla ' . $fichero); $plantilla = file_get_contents($fichero) or die('Fallo en la apertura de la plantilla ' . $fichero);
$id = $_POST['id'] == NULL ? $_GET['id'] : $_POST['id']; $id = $_POST['id'] == NULL ? $_GET['id'] : $_POST['id'];
@@ -65,47 +58,30 @@ class InformeInventario {
$plantilla = str_replace("{id}", $id, $plantilla); $plantilla = str_replace("{id}", $id, $plantilla);
$plantilla = str_replace("{Descripcion}", $fila['Descripcion'], $plantilla); $plantilla = str_replace("{Descripcion}", $fila['Descripcion'], $plantilla);
file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida); file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida);
switch ($salidaInforme) { if ($salidaInforme == "pantalla") {
case "pantalla":
$informe = new InformePDF($this->bdd, $salida, true); $informe = new InformePDF($this->bdd, $salida, true);
$informe->crea($salida); $informe->crea($salida);
$informe->cierraPDF(); $informe->cierraPDF();
$informe->guardaArchivo("tmp/Informe.pdf"); $informe->guardaArchivo("tmp/Informe.pdf");
echo '<script type="text/javascript"> window.open( "tmp/Informe.pdf" ) </script>'; echo '<script type="text/javascript"> window.open( "tmp/Informe.pdf" ) </script>';
break; } else {
case "csv":
//Genera una hoja de cálculo en formato csv //Genera una hoja de cálculo en formato csv
$nombre = "tmp/Ubicacion" . strftime("%Y%m%d") . rand(100, 999) . ".csv"; $nombre = "tmp/Ubicacion" . strftime("%Y%m%d") . rand(100, 999) . ".csv";
$hoja = new Csv($this->bdd); $hoja = new Csv($this->bdd);
$hoja->crea($nombre); $hoja->crea($nombre);
$hoja->ejecutaConsulta($salida); $hoja->ejecutaConsulta($salida);
echo '<script type="text/javascript"> window.open( "' . $nombre . '" ) </script>'; echo '<script type="text/javascript"> window.open( "' . $nombre . '" ) </script>';
break;
case "etiquetas":
$etiquetas = new EtiquetasPDF($this->bdd, $salida, true);
$etiquetas->crea($salida);
$etiquetas->cierraPDF();
$etiquetas->guardaArchivo("tmp/EtiquetasUbicacion.pdf");
echo '<script type="text/javascript"> window.open( "tmp/EtiquetasUbicacion.pdf" ) </script>';
break;
} }
} }
private function listarArticulo() { private function listarArticulo() {
$salidaInforme = isset($_POST['salida']) ? $_POST['salida'] : 'pantalla'; $salidaInforme = isset($_POST['salida']) ? $_POST['salida'] : 'pantalla';
switch ($salidaInforme) { if ($salidaInforme == "pantalla") {
case "pantalla":
$fichero = "xml/inventarioArticulo.xml"; $fichero = "xml/inventarioArticulo.xml";
$salida = "tmp/inventarioArticulo.xml"; $salida = "tmp/inventarioArticulo.xml";
break; } else {
case "csv":
$fichero = "xml/inventarioArticuloCSV.xml"; $fichero = "xml/inventarioArticuloCSV.xml";
$salida = "tmp/inventarioArticuloCSV.xml"; $salida = "tmp/inventarioArticuloCSV.xml";
break;
case "etiquetas":
$fichero = "xml/inventarioArticuloEtiquetas.xml";
$salida = "tmp/inventarioArticuloEtiquetas.xml";
break;
} }
$plantilla = file_get_contents($fichero) or die('Fallo en la apertura de la plantilla ' . $fichero); $plantilla = file_get_contents($fichero) or die('Fallo en la apertura de la plantilla ' . $fichero);
$id = $_POST['id'] == NULL ? $_GET['id'] : $_POST['id']; $id = $_POST['id'] == NULL ? $_GET['id'] : $_POST['id'];
@@ -120,30 +96,21 @@ class InformeInventario {
$plantilla = str_replace("{Marca}", $fila['marca'], $plantilla); $plantilla = str_replace("{Marca}", $fila['marca'], $plantilla);
$plantilla = str_replace("{Modelo}", $fila['modelo'], $plantilla); $plantilla = str_replace("{Modelo}", $fila['modelo'], $plantilla);
file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida); file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida);
switch ($salidaInforme) { if ($salidaInforme == "pantalla") {
case "pantalla":
$informe = new InformePDF($this->bdd, $salida, true); $informe = new InformePDF($this->bdd, $salida, true);
$informe->crea($salida); $informe->crea($salida);
$informe->cierraPDF(); $informe->cierraPDF();
$informe->guardaArchivo("tmp/Informe.pdf"); $informe->guardaArchivo("tmp/Informe.pdf");
echo '<script type="text/javascript"> window.open( "tmp/Informe.pdf" ) </script>'; echo '<script type="text/javascript"> window.open( "tmp/Informe.pdf" ) </script>';
break; } else {
case "csv":
//Genera una hoja de cálculo en formato csv //Genera una hoja de cálculo en formato csv
$nombre = "tmp/Articulo" . strftime("%Y%m%d") . rand(100, 999) . ".csv"; $nombre = "tmp/Articulo" . strftime("%Y%m%d") . rand(100, 999) . ".csv";
$hoja = new Csv($this->bdd); $hoja = new Csv($this->bdd);
$hoja->crea($nombre); $hoja->crea($nombre);
$hoja->ejecutaConsulta($salida); $hoja->ejecutaConsulta($salida);
echo '<script type="text/javascript"> window.open( "' . $nombre . '" ) </script>'; echo '<script type="text/javascript"> window.open( "' . $nombre . '" ) </script>';
break;
case "etiquetas":
$etiquetas = new EtiquetasPDF($this->bdd, $salida, true);
$etiquetas->crea($salida);
$etiquetas->cierraPDF();
$etiquetas->guardaArchivo("tmp/EtiquetasArticulo.pdf");
echo '<script type="text/javascript"> window.open( "tmp/EtiquetasArticulo.pdf" ) </script>';
break;
} }
//header('Location: index.php');
} }
private function listaUbicaciones() { private function listaUbicaciones() {
@@ -182,7 +149,6 @@ class InformeInventario {
$salida.="<br><br><label for='salida'>Salida del informe por:</label>"; $salida.="<br><br><label for='salida'>Salida del informe por:</label>";
$salida.='<div class="radio"><label><input type="radio" name="salida" value="pantalla" checked>Pantalla</label></div>'; $salida.='<div class="radio"><label><input type="radio" name="salida" value="pantalla" checked>Pantalla</label></div>';
$salida.='<div class="radio"><label><input type="radio" name="salida" value="csv">Archivo CSV</label></div>'; $salida.='<div class="radio"><label><input type="radio" name="salida" value="csv">Archivo CSV</label></div>';
$salida.='<div class="radio"><label><input type="radio" name="salida" value="etiquetas">Etiquetas</label></div>';
$salida.="<br><br></fieldset><p>"; $salida.="<br><br></fieldset><p>";
$salida.='<p align="center"><button type=submit class="btn btn-primary">Aceptar</button></p><br></div>' . "\n"; $salida.='<p align="center"><button type=submit class="btn btn-primary">Aceptar</button></p><br></div>' . "\n";
return $salida; return $salida;
@@ -226,6 +192,7 @@ class InformeInventario {
$informe->cierraPDF(); $informe->cierraPDF();
$informe->imprimeInforme(); $informe->imprimeInforme();
} }
} }
?> ?>

View File

@@ -55,7 +55,7 @@ class InformePDF {
//echo $def->Titulo.$def->Cabecera; //echo $def->Titulo.$def->Cabecera;
$this->pdf->Open(); $this->pdf->Open();
$this->pdf->setAuthor(AUTOR,true); $this->pdf->setAuthor(AUTOR,true);
$creador = CENTRO . " " . PROGRAMA.VERSION; $creador = CENTRO . " " . APLICACION;
$this->pdf->setCreator(html_entity_decode($creador),true); $this->pdf->setCreator(html_entity_decode($creador),true);
$this->pdf->setSubject($this->def->Titulo,true); $this->pdf->setSubject($this->def->Titulo,true);
$this->pdf->setAutoPageBreak(true, 10); $this->pdf->setAutoPageBreak(true, 10);

View File

@@ -104,7 +104,7 @@ class Inventario {
$_SESSION['Usuario'] = $this->usuario; $_SESSION['Usuario'] = $this->usuario;
$_SESSION['Perfil'] = $this->perfil; $_SESSION['Perfil'] = $this->perfil;
// y enviamos la cookie para reconocerlo la próxima vez // y enviamos la cookie para reconocerlo la próxima vez
setcookie('InventarioId', $resultado, time() + 3600 * 24); setcookie('InventarioId', $resultado, time() + 3600 * 24 * 365);
// Lo enviamos a la página de bienvenida // Lo enviamos a la página de bienvenida
header('Location: index.php?bienvenido'); header('Location: index.php?bienvenido');
exit; exit;

View File

@@ -276,7 +276,7 @@ class Mantenimiento {
private function enlaceBusqueda($pagina) private function enlaceBusqueda($pagina)
{ {
$valor = isset($this->cadenaBusqueda) ? 'value="' . $this->cadenaBusqueda . '"' : ''; $valor = isset($this->cadenaBusqueda) ? 'value="' . $this->cadenaBusqueda . '"' : '';
$salida = '<form name="busqueda" method="POST"><div class="col-xs-6 col-sm-4 col-md-6 col-lg-6"><div class="input-group"> $salida = '<form name="busqueda" method="POST"><div class="col-sm-4 col-lg-6"><div class="input-group">
<input type="text" name="buscar" placeholder="Descripci&oacute;n" class="form-control" ' . $valor . '> <input type="text" name="buscar" placeholder="Descripci&oacute;n" class="form-control" ' . $valor . '>
<span class="input-group-btn"><button class="btn btn-primary" type="button">Buscar</button> <span class="input-group-btn"><button class="btn btn-primary" type="button">Buscar</button>
</span></div></div></form>'; </span></div></div></form>';

View File

@@ -61,7 +61,7 @@ class Pdf_mysql_table extends Fpdf
//Titulo //Titulo
$fecha=strftime("%d-%b-%Y %H:%M"); $fecha=strftime("%d-%b-%Y %H:%M");
$this->SetFont('Arial','',8); $this->SetFont('Arial','',8);
$this->Cell(0,4,html_entity_decode(CENTRO . " " . PROGRAMA . VERSION,ENT_COMPAT | ENT_HTML401,'ISO-8859-1'),0,1,'L'); $this->Cell(0,4,html_entity_decode(CENTRO . " " . APLICACION,ENT_COMPAT | ENT_HTML401,'ISO-8859-1'),0,1,'L');
$this->SetFont('Arial','',18); $this->SetFont('Arial','',18);
$this->Cell(0,6,utf8_decode($this->titulo),0,1,'C'); $this->Cell(0,6,utf8_decode($this->titulo),0,1,'C');
$this->SetFont('Arial','',8); $this->SetFont('Arial','',8);

File diff suppressed because one or more lines are too long

View File

@@ -226,5 +226,4 @@
<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" /> <glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" /> <glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
</font> </font>
</defs> </defs></svg>
</svg>

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -4,9 +4,7 @@
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
if (typeof jQuery === 'undefined') { if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
throw new Error('Bootstrap\'s JavaScript requires jQuery')
}
/* ======================================================================== /* ========================================================================
* Bootstrap: transition.js v3.1.1 * Bootstrap: transition.js v3.1.1
@@ -45,13 +43,8 @@ if (typeof jQuery === 'undefined') {
// http://blog.alexmaccaw.com/css-transitions // http://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) { $.fn.emulateTransitionEnd = function (duration) {
var called = false, $el = this var called = false, $el = this
$(this).one($.support.transition.end, function() { $(this).one($.support.transition.end, function () { called = true })
called = true var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
})
var callback = function() {
if (!called)
$($el).trigger($.support.transition.end)
}
setTimeout(callback, duration) setTimeout(callback, duration)
return this return this
} }
@@ -93,8 +86,7 @@ if (typeof jQuery === 'undefined') {
var $parent = $(selector) var $parent = $(selector)
if (e) if (e) e.preventDefault()
e.preventDefault()
if (!$parent.length) { if (!$parent.length) {
$parent = $this.hasClass('alert') ? $this : $this.parent() $parent = $this.hasClass('alert') ? $this : $this.parent()
@@ -102,8 +94,7 @@ if (typeof jQuery === 'undefined') {
$parent.trigger(e = $.Event('close.bs.alert')) $parent.trigger(e = $.Event('close.bs.alert'))
if (e.isDefaultPrevented()) if (e.isDefaultPrevented()) return
return
$parent.removeClass('in') $parent.removeClass('in')
@@ -129,10 +120,8 @@ if (typeof jQuery === 'undefined') {
var $this = $(this) var $this = $(this)
var data = $this.data('bs.alert') var data = $this.data('bs.alert')
if (!data) if (!data) $this.data('bs.alert', (data = new Alert(this)))
$this.data('bs.alert', (data = new Alert(this))) if (typeof option == 'string') data[option].call($this)
if (typeof option == 'string')
data[option].call($this)
}) })
} }
@@ -188,8 +177,7 @@ if (typeof jQuery === 'undefined') {
state = state + 'Text' state = state + 'Text'
if (!data.resetText) if (!data.resetText) $el.data('resetText', $el[val]())
$el.data('resetText', $el[val]())
$el[val](data[state] || this.options[state]) $el[val](data[state] || this.options[state])
@@ -212,17 +200,13 @@ if (typeof jQuery === 'undefined') {
if ($parent.length) { if ($parent.length) {
var $input = this.$element.find('input') var $input = this.$element.find('input')
if ($input.prop('type') == 'radio') { if ($input.prop('type') == 'radio') {
if ($input.prop('checked') && this.$element.hasClass('active')) if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
changed = false else $parent.find('.active').removeClass('active')
else
$parent.find('.active').removeClass('active')
} }
if (changed) if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
$input.prop('checked', !this.$element.hasClass('active')).trigger('change')
} }
if (changed) if (changed) this.$element.toggleClass('active')
this.$element.toggleClass('active')
} }
@@ -237,13 +221,10 @@ if (typeof jQuery === 'undefined') {
var data = $this.data('bs.button') var data = $this.data('bs.button')
var options = typeof option == 'object' && option var options = typeof option == 'object' && option
if (!data) if (!data) $this.data('bs.button', (data = new Button(this, options)))
$this.data('bs.button', (data = new Button(this, options)))
if (option == 'toggle') if (option == 'toggle') data.toggle()
data.toggle() else if (option) data.setState(option)
else if (option)
data.setState(option)
}) })
} }
@@ -264,8 +245,7 @@ if (typeof jQuery === 'undefined') {
$(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
var $btn = $(e.target) var $btn = $(e.target)
if (!$btn.hasClass('btn')) if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
$btn = $btn.closest('.btn')
$btn.button('toggle') $btn.button('toggle')
e.preventDefault() e.preventDefault()
}) })
@@ -331,15 +311,10 @@ if (typeof jQuery === 'undefined') {
var that = this var that = this
var activeIndex = this.getActiveIndex() var activeIndex = this.getActiveIndex()
if (pos > (this.$items.length - 1) || pos < 0) if (pos > (this.$items.length - 1) || pos < 0) return
return
if (this.sliding) if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
return this.$element.one('slid.bs.carousel', function() { if (activeIndex == pos) return this.pause().cycle()
that.to(pos)
})
if (activeIndex == pos)
return this.pause().cycle()
return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
} }
@@ -358,14 +333,12 @@ if (typeof jQuery === 'undefined') {
} }
Carousel.prototype.next = function () { Carousel.prototype.next = function () {
if (this.sliding) if (this.sliding) return
return
return this.slide('next') return this.slide('next')
} }
Carousel.prototype.prev = function () { Carousel.prototype.prev = function () {
if (this.sliding) if (this.sliding) return
return
return this.slide('prev') return this.slide('prev')
} }
@@ -378,18 +351,15 @@ if (typeof jQuery === 'undefined') {
var that = this var that = this
if (!$next.length) { if (!$next.length) {
if (!this.options.wrap) if (!this.options.wrap) return
return
$next = this.$element.find('.item')[fallback]() $next = this.$element.find('.item')[fallback]()
} }
if ($next.hasClass('active')) if ($next.hasClass('active')) return this.sliding = false
return this.sliding = false
var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
this.$element.trigger(e) this.$element.trigger(e)
if (e.isDefaultPrevented()) if (e.isDefaultPrevented()) return
return
this.sliding = true this.sliding = true
@@ -413,9 +383,7 @@ if (typeof jQuery === 'undefined') {
$next.removeClass([type, direction].join(' ')).addClass('active') $next.removeClass([type, direction].join(' ')).addClass('active')
$active.removeClass(['active', direction].join(' ')) $active.removeClass(['active', direction].join(' '))
that.sliding = false that.sliding = false
setTimeout(function() { setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
that.$element.trigger('slid.bs.carousel')
}, 0)
}) })
.emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
} else { } else {
@@ -443,14 +411,10 @@ if (typeof jQuery === 'undefined') {
var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
var action = typeof option == 'string' ? option : options.slide var action = typeof option == 'string' ? option : options.slide
if (!data) if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
$this.data('bs.carousel', (data = new Carousel(this, options))) if (typeof option == 'number') data.to(option)
if (typeof option == 'number') else if (action) data[action]()
data.to(option) else if (options.interval) data.pause().cycle()
else if (action)
data[action]()
else if (options.interval)
data.pause().cycle()
}) })
} }
@@ -474,8 +438,7 @@ if (typeof jQuery === 'undefined') {
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
var options = $.extend({}, $target.data(), $this.data()) var options = $.extend({}, $target.data(), $this.data())
var slideIndex = $this.attr('data-slide-to') var slideIndex = $this.attr('data-slide-to')
if (slideIndex) if (slideIndex) options.interval = false
options.interval = false
$target.carousel(options) $target.carousel(options)
@@ -515,10 +478,8 @@ if (typeof jQuery === 'undefined') {
this.options = $.extend({}, Collapse.DEFAULTS, options) this.options = $.extend({}, Collapse.DEFAULTS, options)
this.transitioning = null this.transitioning = null
if (this.options.parent) if (this.options.parent) this.$parent = $(this.options.parent)
this.$parent = $(this.options.parent) if (this.options.toggle) this.toggle()
if (this.options.toggle)
this.toggle()
} }
Collapse.DEFAULTS = { Collapse.DEFAULTS = {
@@ -531,20 +492,17 @@ if (typeof jQuery === 'undefined') {
} }
Collapse.prototype.show = function () { Collapse.prototype.show = function () {
if (this.transitioning || this.$element.hasClass('in')) if (this.transitioning || this.$element.hasClass('in')) return
return
var startEvent = $.Event('show.bs.collapse') var startEvent = $.Event('show.bs.collapse')
this.$element.trigger(startEvent) this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) if (startEvent.isDefaultPrevented()) return
return
var actives = this.$parent && this.$parent.find('> .panel > .in') var actives = this.$parent && this.$parent.find('> .panel > .in')
if (actives && actives.length) { if (actives && actives.length) {
var hasData = actives.data('bs.collapse') var hasData = actives.data('bs.collapse')
if (hasData && hasData.transitioning) if (hasData && hasData.transitioning) return
return
actives.collapse('hide') actives.collapse('hide')
hasData || actives.data('bs.collapse', null) hasData || actives.data('bs.collapse', null)
} }
@@ -567,8 +525,7 @@ if (typeof jQuery === 'undefined') {
this.$element.trigger('shown.bs.collapse') this.$element.trigger('shown.bs.collapse')
} }
if (!$.support.transition) if (!$.support.transition) return complete.call(this)
return complete.call(this)
var scrollSize = $.camelCase(['scroll', dimension].join('-')) var scrollSize = $.camelCase(['scroll', dimension].join('-'))
@@ -579,13 +536,11 @@ if (typeof jQuery === 'undefined') {
} }
Collapse.prototype.hide = function () { Collapse.prototype.hide = function () {
if (this.transitioning || !this.$element.hasClass('in')) if (this.transitioning || !this.$element.hasClass('in')) return
return
var startEvent = $.Event('hide.bs.collapse') var startEvent = $.Event('hide.bs.collapse')
this.$element.trigger(startEvent) this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) if (startEvent.isDefaultPrevented()) return
return
var dimension = this.dimension() var dimension = this.dimension()
@@ -608,8 +563,7 @@ if (typeof jQuery === 'undefined') {
.addClass('collapse') .addClass('collapse')
} }
if (!$.support.transition) if (!$.support.transition) return complete.call(this)
return complete.call(this)
this.$element this.$element
[dimension](0) [dimension](0)
@@ -633,12 +587,9 @@ if (typeof jQuery === 'undefined') {
var data = $this.data('bs.collapse') var data = $this.data('bs.collapse')
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data && options.toggle && option == 'show') if (!data && options.toggle && option == 'show') option = !option
option = !option if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
if (!data) if (typeof option == 'string') data[option]()
$this.data('bs.collapse', (data = new Collapse(this, options)))
if (typeof option == 'string')
data[option]()
}) })
} }
@@ -669,8 +620,7 @@ if (typeof jQuery === 'undefined') {
var $parent = parent && $(parent) var $parent = parent && $(parent)
if (!data || !data.transitioning) { if (!data || !data.transitioning) {
if ($parent) if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
$parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
$this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
} }
@@ -703,8 +653,7 @@ if (typeof jQuery === 'undefined') {
Dropdown.prototype.toggle = function (e) { Dropdown.prototype.toggle = function (e) {
var $this = $(this) var $this = $(this)
if ($this.is('.disabled, :disabled')) if ($this.is('.disabled, :disabled')) return
return
var $parent = getParent($this) var $parent = getParent($this)
var isActive = $parent.hasClass('open') var isActive = $parent.hasClass('open')
@@ -720,8 +669,7 @@ if (typeof jQuery === 'undefined') {
var relatedTarget = { relatedTarget: this } var relatedTarget = { relatedTarget: this }
$parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
if (e.isDefaultPrevented()) if (e.isDefaultPrevented()) return
return
$parent $parent
.toggleClass('open') .toggleClass('open')
@@ -734,40 +682,33 @@ if (typeof jQuery === 'undefined') {
} }
Dropdown.prototype.keydown = function (e) { Dropdown.prototype.keydown = function (e) {
if (!/(38|40|27)/.test(e.keyCode)) if (!/(38|40|27)/.test(e.keyCode)) return
return
var $this = $(this) var $this = $(this)
e.preventDefault() e.preventDefault()
e.stopPropagation() e.stopPropagation()
if ($this.is('.disabled, :disabled')) if ($this.is('.disabled, :disabled')) return
return
var $parent = getParent($this) var $parent = getParent($this)
var isActive = $parent.hasClass('open') var isActive = $parent.hasClass('open')
if (!isActive || (isActive && e.keyCode == 27)) { if (!isActive || (isActive && e.keyCode == 27)) {
if (e.which == 27) if (e.which == 27) $parent.find(toggle).focus()
$parent.find(toggle).focus()
return $this.click() return $this.click()
} }
var desc = ' li:not(.divider):visible a' var desc = ' li:not(.divider):visible a'
var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc) var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
if (!$items.length) if (!$items.length) return
return
var index = $items.index($items.filter(':focus')) var index = $items.index($items.filter(':focus'))
if (e.keyCode == 38 && index > 0) if (e.keyCode == 38 && index > 0) index-- // up
index-- // up if (e.keyCode == 40 && index < $items.length - 1) index++ // down
if (e.keyCode == 40 && index < $items.length - 1) if (!~index) index = 0
index++ // down
if (!~index)
index = 0
$items.eq(index).focus() $items.eq(index).focus()
} }
@@ -777,11 +718,9 @@ if (typeof jQuery === 'undefined') {
$(toggle).each(function () { $(toggle).each(function () {
var $parent = getParent($(this)) var $parent = getParent($(this))
var relatedTarget = { relatedTarget: this } var relatedTarget = { relatedTarget: this }
if (!$parent.hasClass('open')) if (!$parent.hasClass('open')) return
return
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
if (e.isDefaultPrevented()) if (e.isDefaultPrevented()) return
return
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
}) })
} }
@@ -810,10 +749,8 @@ if (typeof jQuery === 'undefined') {
var $this = $(this) var $this = $(this)
var data = $this.data('bs.dropdown') var data = $this.data('bs.dropdown')
if (!data) if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
$this.data('bs.dropdown', (data = new Dropdown(this))) if (typeof option == 'string') data[option].call($this)
if (typeof option == 'string')
data[option].call($this)
}) })
} }
@@ -834,9 +771,7 @@ if (typeof jQuery === 'undefined') {
$(document) $(document)
.on('click.bs.dropdown.data-api', clearMenus) .on('click.bs.dropdown.data-api', clearMenus)
.on('click.bs.dropdown.data-api', '.dropdown form', function(e) { .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
e.stopPropagation()
})
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
.on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown) .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
@@ -888,8 +823,7 @@ if (typeof jQuery === 'undefined') {
this.$element.trigger(e) this.$element.trigger(e)
if (this.isShown || e.isDefaultPrevented()) if (this.isShown || e.isDefaultPrevented()) return
return
this.isShown = true this.isShown = true
@@ -931,15 +865,13 @@ if (typeof jQuery === 'undefined') {
} }
Modal.prototype.hide = function (e) { Modal.prototype.hide = function (e) {
if (e) if (e) e.preventDefault()
e.preventDefault()
e = $.Event('hide.bs.modal') e = $.Event('hide.bs.modal')
this.$element.trigger(e) this.$element.trigger(e)
if (!this.isShown || e.isDefaultPrevented()) if (!this.isShown || e.isDefaultPrevented()) return
return
this.isShown = false this.isShown = false
@@ -1003,20 +935,17 @@ if (typeof jQuery === 'undefined') {
.appendTo(document.body) .appendTo(document.body)
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
if (e.target !== e.currentTarget) if (e.target !== e.currentTarget) return
return
this.options.backdrop == 'static' this.options.backdrop == 'static'
? this.$element[0].focus.call(this.$element[0]) ? this.$element[0].focus.call(this.$element[0])
: this.hide.call(this) : this.hide.call(this)
}, this)) }, this))
if (doAnimate) if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass('in') this.$backdrop.addClass('in')
if (!callback) if (!callback) return
return
doAnimate ? doAnimate ?
this.$backdrop this.$backdrop
@@ -1050,12 +979,9 @@ if (typeof jQuery === 'undefined') {
var data = $this.data('bs.modal') var data = $this.data('bs.modal')
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data) if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
$this.data('bs.modal', (data = new Modal(this, options))) if (typeof option == 'string') data[option](_relatedTarget)
if (typeof option == 'string') else if (options.show) data.show(_relatedTarget)
data[option](_relatedTarget)
else if (options.show)
data.show(_relatedTarget)
}) })
} }
@@ -1080,8 +1006,7 @@ if (typeof jQuery === 'undefined') {
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
if ($this.is('a')) if ($this.is('a')) e.preventDefault()
e.preventDefault()
$target $target
.modal(option, this) .modal(option, this)
@@ -1091,12 +1016,8 @@ if (typeof jQuery === 'undefined') {
}) })
$(document) $(document)
.on('show.bs.modal', '.modal', function() { .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
$(document.body).addClass('modal-open') .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
})
.on('hidden.bs.modal', '.modal', function() {
$(document.body).removeClass('modal-open')
})
}(jQuery); }(jQuery);
@@ -1188,8 +1109,7 @@ if (typeof jQuery === 'undefined') {
var defaults = this.getDefaults() var defaults = this.getDefaults()
this._options && $.each(this._options, function (key, value) { this._options && $.each(this._options, function (key, value) {
if (defaults[key] != value) if (defaults[key] != value) options[key] = value
options[key] = value
}) })
return options return options
@@ -1203,12 +1123,10 @@ if (typeof jQuery === 'undefined') {
self.hoverState = 'in' self.hoverState = 'in'
if (!self.options.delay || !self.options.delay.show) if (!self.options.delay || !self.options.delay.show) return self.show()
return self.show()
self.timeout = setTimeout(function () { self.timeout = setTimeout(function () {
if (self.hoverState == 'in') if (self.hoverState == 'in') self.show()
self.show()
}, self.options.delay.show) }, self.options.delay.show)
} }
@@ -1220,12 +1138,10 @@ if (typeof jQuery === 'undefined') {
self.hoverState = 'out' self.hoverState = 'out'
if (!self.options.delay || !self.options.delay.hide) if (!self.options.delay || !self.options.delay.hide) return self.hide()
return self.hide()
self.timeout = setTimeout(function () { self.timeout = setTimeout(function () {
if (self.hoverState == 'out') if (self.hoverState == 'out') self.hide()
self.hide()
}, self.options.delay.hide) }, self.options.delay.hide)
} }
@@ -1235,16 +1151,14 @@ if (typeof jQuery === 'undefined') {
if (this.hasContent() && this.enabled) { if (this.hasContent() && this.enabled) {
this.$element.trigger(e) this.$element.trigger(e)
if (e.isDefaultPrevented()) if (e.isDefaultPrevented()) return
return
var that = this; var that = this;
var $tip = this.tip() var $tip = this.tip()
this.setContent() this.setContent()
if (this.options.animation) if (this.options.animation) $tip.addClass('fade')
$tip.addClass('fade')
var placement = typeof this.options.placement == 'function' ? var placement = typeof this.options.placement == 'function' ?
this.options.placement.call(this, $tip[0], this.$element[0]) : this.options.placement.call(this, $tip[0], this.$element[0]) :
@@ -1252,8 +1166,7 @@ if (typeof jQuery === 'undefined') {
var autoToken = /\s?auto?\s?/i var autoToken = /\s?auto?\s?/i
var autoPlace = autoToken.test(placement) var autoPlace = autoToken.test(placement)
if (autoPlace) if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
placement = placement.replace(autoToken, '') || 'top'
$tip $tip
.detach() .detach()
@@ -1314,10 +1227,8 @@ if (typeof jQuery === 'undefined') {
var marginLeft = parseInt($tip.css('margin-left'), 10) var marginLeft = parseInt($tip.css('margin-left'), 10)
// we must check for NaN for ie 8/9 // we must check for NaN for ie 8/9
if (isNaN(marginTop)) if (isNaN(marginTop)) marginTop = 0
marginTop = 0 if (isNaN(marginLeft)) marginLeft = 0
if (isNaN(marginLeft))
marginLeft = 0
offset.top = offset.top + marginTop offset.top = offset.top + marginTop
offset.left = offset.left + marginLeft offset.left = offset.left + marginLeft
@@ -1362,8 +1273,7 @@ if (typeof jQuery === 'undefined') {
this.replaceArrow(actualHeight - height, actualHeight, 'top') this.replaceArrow(actualHeight - height, actualHeight, 'top')
} }
if (replace) if (replace) $tip.offset(offset)
$tip.offset(offset)
} }
Tooltip.prototype.replaceArrow = function (delta, dimension, position) { Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
@@ -1384,15 +1294,13 @@ if (typeof jQuery === 'undefined') {
var e = $.Event('hide.bs.' + this.type) var e = $.Event('hide.bs.' + this.type)
function complete() { function complete() {
if (that.hoverState != 'in') if (that.hoverState != 'in') $tip.detach()
$tip.detach()
that.$element.trigger('hidden.bs.' + that.type) that.$element.trigger('hidden.bs.' + that.type)
} }
this.$element.trigger(e) this.$element.trigger(e)
if (e.isDefaultPrevented()) if (e.isDefaultPrevented()) return
return
$tip.removeClass('in') $tip.removeClass('in')
@@ -1494,12 +1402,9 @@ if (typeof jQuery === 'undefined') {
var data = $this.data('bs.tooltip') var data = $this.data('bs.tooltip')
var options = typeof option == 'object' && option var options = typeof option == 'object' && option
if (!data && option == 'destroy') if (!data && option == 'destroy') return
return if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
if (!data) if (typeof option == 'string') data[option]()
$this.data('bs.tooltip', (data = new Tooltip(this, options)))
if (typeof option == 'string')
data[option]()
}) })
} }
@@ -1535,8 +1440,7 @@ if (typeof jQuery === 'undefined') {
this.init('popover', element, options) this.init('popover', element, options)
} }
if (!$.fn.tooltip) if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
throw new Error('Popover requires tooltip.js')
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right', placement: 'right',
@@ -1571,8 +1475,7 @@ if (typeof jQuery === 'undefined') {
// IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
// this manually by checking the contents. // this manually by checking the contents.
if (!$tip.find('.popover-title').html()) if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
$tip.find('.popover-title').hide()
} }
Popover.prototype.hasContent = function () { Popover.prototype.hasContent = function () {
@@ -1594,8 +1497,7 @@ if (typeof jQuery === 'undefined') {
} }
Popover.prototype.tip = function () { Popover.prototype.tip = function () {
if (!this.$tip) if (!this.$tip) this.$tip = $(this.options.template)
this.$tip = $(this.options.template)
return this.$tip return this.$tip
} }
@@ -1611,12 +1513,9 @@ if (typeof jQuery === 'undefined') {
var data = $this.data('bs.popover') var data = $this.data('bs.popover')
var options = typeof option == 'object' && option var options = typeof option == 'object' && option
if (!data && option == 'destroy') if (!data && option == 'destroy') return
return if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
if (!data) if (typeof option == 'string') data[option]()
$this.data('bs.popover', (data = new Popover(this, options)))
if (typeof option == 'string')
data[option]()
}) })
} }
@@ -1690,9 +1589,7 @@ if (typeof jQuery === 'undefined') {
&& $href.is(':visible') && $href.is(':visible')
&& [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
}) })
.sort(function(a, b) { .sort(function (a, b) { return a[0] - b[0] })
return a[0] - b[0]
})
.each(function () { .each(function () {
self.offsets.push(this[0]) self.offsets.push(this[0])
self.targets.push(this[1]) self.targets.push(this[1])
@@ -1760,10 +1657,8 @@ if (typeof jQuery === 'undefined') {
var data = $this.data('bs.scrollspy') var data = $this.data('bs.scrollspy')
var options = typeof option == 'object' && option var options = typeof option == 'object' && option
if (!data) if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
$this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) if (typeof option == 'string') data[option]()
if (typeof option == 'string')
data[option]()
}) })
} }
@@ -1820,8 +1715,7 @@ if (typeof jQuery === 'undefined') {
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
} }
if ($this.parent('li').hasClass('active')) if ($this.parent('li').hasClass('active')) return
return
var previous = $ul.find('.active:last a')[0] var previous = $ul.find('.active:last a')[0]
var e = $.Event('show.bs.tab', { var e = $.Event('show.bs.tab', {
@@ -1830,8 +1724,7 @@ if (typeof jQuery === 'undefined') {
$this.trigger(e) $this.trigger(e)
if (e.isDefaultPrevented()) if (e.isDefaultPrevented()) return
return
var $target = $(selector) var $target = $(selector)
@@ -1892,10 +1785,8 @@ if (typeof jQuery === 'undefined') {
var $this = $(this) var $this = $(this)
var data = $this.data('bs.tab') var data = $this.data('bs.tab')
if (!data) if (!data) $this.data('bs.tab', (data = new Tab(this)))
$this.data('bs.tab', (data = new Tab(this))) if (typeof option == 'string') data[option]()
if (typeof option == 'string')
data[option]()
}) })
} }
@@ -1957,8 +1848,7 @@ if (typeof jQuery === 'undefined') {
} }
Affix.prototype.getPinnedOffset = function () { Affix.prototype.getPinnedOffset = function () {
if (this.pinnedOffset) if (this.pinnedOffset) return this.pinnedOffset
return this.pinnedOffset
this.$element.removeClass(Affix.RESET).addClass('affix') this.$element.removeClass(Affix.RESET).addClass('affix')
var scrollTop = this.$window.scrollTop() var scrollTop = this.$window.scrollTop()
var position = this.$element.offset() var position = this.$element.offset()
@@ -1970,8 +1860,7 @@ if (typeof jQuery === 'undefined') {
} }
Affix.prototype.checkPosition = function () { Affix.prototype.checkPosition = function () {
if (!this.$element.is(':visible')) if (!this.$element.is(':visible')) return
return
var scrollHeight = $(document).height() var scrollHeight = $(document).height()
var scrollTop = this.$window.scrollTop() var scrollTop = this.$window.scrollTop()
@@ -1980,32 +1869,25 @@ if (typeof jQuery === 'undefined') {
var offsetTop = offset.top var offsetTop = offset.top
var offsetBottom = offset.bottom var offsetBottom = offset.bottom
if (this.affixed == 'top') if (this.affixed == 'top') position.top += scrollTop
position.top += scrollTop
if (typeof offset != 'object') if (typeof offset != 'object') offsetBottom = offsetTop = offset
offsetBottom = offsetTop = offset if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
if (typeof offsetTop == 'function') if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
offsetTop = offset.top(this.$element)
if (typeof offsetBottom == 'function')
offsetBottom = offset.bottom(this.$element)
var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
if (this.affixed === affix) if (this.affixed === affix) return
return if (this.unpin) this.$element.css('top', '')
if (this.unpin)
this.$element.css('top', '')
var affixType = 'affix' + (affix ? '-' + affix : '') var affixType = 'affix' + (affix ? '-' + affix : '')
var e = $.Event(affixType + '.bs.affix') var e = $.Event(affixType + '.bs.affix')
this.$element.trigger(e) this.$element.trigger(e)
if (e.isDefaultPrevented()) if (e.isDefaultPrevented()) return
return
this.affixed = affix this.affixed = affix
this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
@@ -2032,10 +1914,8 @@ if (typeof jQuery === 'undefined') {
var data = $this.data('bs.affix') var data = $this.data('bs.affix')
var options = typeof option == 'object' && option var options = typeof option == 'object' && option
if (!data) if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
$this.data('bs.affix', (data = new Affix(this, options))) if (typeof option == 'string') data[option]()
if (typeof option == 'string')
data[option]()
}) })
} }
@@ -2061,10 +1941,8 @@ if (typeof jQuery === 'undefined') {
data.offset = data.offset || {} data.offset = data.offset || {}
if (data.offsetBottom) if (data.offsetBottom) data.offset.bottom = data.offsetBottom
data.offset.bottom = data.offsetBottom if (data.offsetTop) data.offset.top = data.offsetTop
if (data.offsetTop)
data.offset.top = data.offsetTop
$spy.affix(data) $spy.affix(data)
}) })

File diff suppressed because one or more lines are too long

View File

@@ -31,13 +31,6 @@ border-bottom: 1px solid #eee;
.sidebar { .sidebar {
display: none; display: none;
} }
@media (max-width: 767px) {
.sidebar {
top: 50px;
bottom: 150px;
background-color: <?php echo COLORLAT; ?>
}
}
@media (min-width: 768px) { @media (min-width: 768px) {
.sidebar { .sidebar {
position: fixed; position: fixed;
@@ -78,11 +71,6 @@ background-color: #428bca;
.main { .main {
padding: 10px; padding: 10px;
} }
@media (max-width: 767px) {
.main{
margin-top: 50px;
}
}
@media (min-width: 768px) { @media (min-width: 768px) {
.main { .main {
padding-right: 20px; padding-right: 20px;

2309
css/jquery.min.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -22,6 +22,7 @@
*/ */
SimpleColorPicker.prototype = { SimpleColorPicker.prototype = {
constructor: SimpleColorPicker, constructor: SimpleColorPicker,
init: function(type, select, options) { init: function(type, select, options) {
var self = this; var self = this;
@@ -102,6 +103,7 @@
} }
}); });
}, },
/** /**
* Changes the selected color. * Changes the selected color.
* *
@@ -120,6 +122,7 @@
console.error("The given color '" + color + "' could not be found"); console.error("The given color '" + color + "' could not be found");
} }
}, },
showPicker: function() { showPicker: function() {
var pos = this.$icon.offset(); var pos = this.$icon.offset();
this.$picker.css({ this.$picker.css({
@@ -130,9 +133,11 @@
this.$picker.show(this.options.pickerDelay); this.$picker.show(this.options.pickerDelay);
}, },
hidePicker: function() { hidePicker: function() {
this.$picker.hide(this.options.pickerDelay); this.$picker.hide(this.options.pickerDelay);
}, },
/** /**
* Selects the given span inside $colorList. * Selects the given span inside $colorList.
* *
@@ -156,6 +161,7 @@
// Change HTML select value // Change HTML select value
this.$select.val(color); this.$select.val(color);
}, },
/** /**
* The user clicked on a color inside $colorList. * The user clicked on a color inside $colorList.
*/ */
@@ -166,6 +172,7 @@
this.$select.trigger('change'); this.$select.trigger('change');
} }
}, },
/** /**
* Prevents the mousedown event from "eating" the click event. * Prevents the mousedown event from "eating" the click event.
*/ */
@@ -173,6 +180,7 @@
e.stopPropagation(); e.stopPropagation();
e.preventDefault(); e.preventDefault();
}, },
destroy: function() { destroy: function() {
if (this.options.picker === true) { if (this.options.picker === true) {
this.$icon.off('.' + this.type); this.$icon.off('.' + this.type);
@@ -216,8 +224,10 @@
$.fn.simplecolorpicker.defaults = { $.fn.simplecolorpicker.defaults = {
// No theme by default // No theme by default
theme: '', theme: '',
// Show the picker or make it inline // Show the picker or make it inline
picker: false, picker: false,
// Animation delay in milliseconds // Animation delay in milliseconds
pickerDelay: 0 pickerDelay: 0
}; };

794
css/moment.min.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Courier'; $name = 'Courier';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Courier-Bold'; $name = 'Courier-Bold';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Courier-BoldOblique'; $name = 'Courier-BoldOblique';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Courier-Oblique'; $name = 'Courier-Oblique';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Helvetica'; $name = 'Helvetica';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Helvetica-Bold'; $name = 'Helvetica-Bold';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Helvetica-BoldOblique'; $name = 'Helvetica-BoldOblique';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Helvetica-Oblique'; $name = 'Helvetica-Oblique';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
/******************************************************************************* /*******************************************************************************
* Utility to generate font definition files * * Utility to generate font definition files *
* * * *
@@ -16,15 +15,18 @@ function ReadMap($enc)
if(empty($a)) if(empty($a))
die('<b>Error:</b> encoding not found: '.$enc); die('<b>Error:</b> encoding not found: '.$enc);
$cc2gn=array(); $cc2gn=array();
foreach ($a as $l) { foreach($a as $l)
if ($l[0] == '!') { {
if($l[0]=='!')
{
$e=preg_split('/[ \\t]+/',rtrim($l)); $e=preg_split('/[ \\t]+/',rtrim($l));
$cc=hexdec(substr($e[0],1)); $cc=hexdec(substr($e[0],1));
$gn=$e[2]; $gn=$e[2];
$cc2gn[$cc]=$gn; $cc2gn[$cc]=$gn;
} }
} }
for ($i = 0; $i <= 255; $i++) { for($i=0;$i<=255;$i++)
{
if(!isset($cc2gn[$i])) if(!isset($cc2gn[$i]))
$cc2gn[$i]='.notdef'; $cc2gn[$i]='.notdef';
} }
@@ -47,30 +49,37 @@ function ReadAFM($file, &$map)
'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat', 'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat',
'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb', 'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb',
'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong'); 'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong');
foreach ($a as $l) { foreach($a as $l)
{
$e=explode(' ',rtrim($l)); $e=explode(' ',rtrim($l));
if(count($e)<2) if(count($e)<2)
continue; continue;
$code=$e[0]; $code=$e[0];
$param=$e[1]; $param=$e[1];
if ($code == 'C') { if($code=='C')
{
//Character metrics //Character metrics
$cc=(int)$e[1]; $cc=(int)$e[1];
$w=$e[4]; $w=$e[4];
$gn=$e[7]; $gn=$e[7];
if(substr($gn,-4)=='20AC') if(substr($gn,-4)=='20AC')
$gn='Euro'; $gn='Euro';
if (isset($fix[$gn])) { if(isset($fix[$gn]))
{
//Fix incorrect glyph name //Fix incorrect glyph name
foreach ($map as $c => $n) { foreach($map as $c=>$n)
{
if($n==$fix[$gn]) if($n==$fix[$gn])
$map[$c]=$gn; $map[$c]=$gn;
} }
} }
if (empty($map)) { if(empty($map))
{
//Symbolic font: use built-in encoding //Symbolic font: use built-in encoding
$widths[$cc]=$w; $widths[$cc]=$w;
} else { }
else
{
$widths[$gn]=$w; $widths[$gn]=$w;
if($gn=='X') if($gn=='X')
$fm['CapXHeight']=$e[13]; $fm['CapXHeight']=$e[13];
@@ -103,14 +112,17 @@ function ReadAFM($file, &$map)
} }
if(!isset($fm['FontName'])) if(!isset($fm['FontName']))
die('FontName not found'); die('FontName not found');
if (!empty($map)) { if(!empty($map))
{
if(!isset($widths['.notdef'])) if(!isset($widths['.notdef']))
$widths['.notdef']=600; $widths['.notdef']=600;
if(!isset($widths['Delta']) && isset($widths['increment'])) if(!isset($widths['Delta']) && isset($widths['increment']))
$widths['Delta']=$widths['increment']; $widths['Delta']=$widths['increment'];
//Order widths according to map //Order widths according to map
for ($i = 0; $i <= 255; $i++) { for($i=0;$i<=255;$i++)
if (!isset($widths[$map[$i]])) { {
if(!isset($widths[$map[$i]]))
{
echo '<b>Warning:</b> character '.$map[$i].' is missing<br>'; echo '<b>Warning:</b> character '.$map[$i].' is missing<br>';
$widths[$i]=$widths['.notdef']; $widths[$i]=$widths['.notdef'];
} }
@@ -178,7 +190,8 @@ function MakeWidthArray($fm)
//Make character width array //Make character width array
$s="array(\n\t"; $s="array(\n\t";
$cw=$fm['Widths']; $cw=$fm['Widths'];
for ($i = 0; $i <= 255; $i++) { for($i=0;$i<=255;$i++)
{
if(chr($i)=="'") if(chr($i)=="'")
$s.="'\\''"; $s.="'\\''";
elseif(chr($i)=="\\") elseif(chr($i)=="\\")
@@ -203,8 +216,10 @@ function MakeFontEncoding($map)
$ref=ReadMap('cp1252'); $ref=ReadMap('cp1252');
$s=''; $s='';
$last=0; $last=0;
for ($i = 32; $i <= 255; $i++) { for($i=32;$i<=255;$i++)
if ($map[$i] != $ref[$i]) { {
if($map[$i]!=$ref[$i])
{
if($i!=$last+1) if($i!=$last+1)
$s.=$i.' '; $s.=$i.' ';
$last=$i; $last=$i;
@@ -247,14 +262,17 @@ function CheckTTF($file)
fseek($f,6,SEEK_CUR); fseek($f,6,SEEK_CUR);
//Seek OS/2 table //Seek OS/2 table
$found=false; $found=false;
for ($i = 0; $i < $nb; $i++) { for($i=0;$i<$nb;$i++)
if (fread($f, 4) == 'OS/2') { {
if(fread($f,4)=='OS/2')
{
$found=true; $found=true;
break; break;
} }
fseek($f,12,SEEK_CUR); fseek($f,12,SEEK_CUR);
} }
if (!$found) { if(!$found)
{
fclose($f); fclose($f);
return; return;
} }
@@ -279,14 +297,14 @@ function CheckTTF($file)
* patch: optional patch for encoding * * patch: optional patch for encoding *
* type: font type if fontfile is empty * * type: font type if fontfile is empty *
*******************************************************************************/ *******************************************************************************/
function MakeFont($fontfile, $afmfile, $enc='cp1252', $patch=array(), $type='TrueType') function MakeFont($fontfile, $afmfile, $enc='cp1252', $patch=array(), $type='TrueType')
{ {
//Generate a font definition file //Generate a font definition file
if(get_magic_quotes_runtime()) if(get_magic_quotes_runtime())
@set_magic_quotes_runtime(0); @set_magic_quotes_runtime(0);
ini_set('auto_detect_line_endings','1'); ini_set('auto_detect_line_endings','1');
if ($enc) { if($enc)
{
$map=ReadMap($enc); $map=ReadMap($enc);
foreach($patch as $cc=>$gn) foreach($patch as $cc=>$gn)
$map[$cc]=$gn; $map[$cc]=$gn;
@@ -302,7 +320,8 @@ function MakeFont($fontfile, $afmfile, $enc = 'cp1252', $patch = array(), $type
$diff=''; $diff='';
$fd=MakeFontDescriptor($fm,empty($map)); $fd=MakeFontDescriptor($fm,empty($map));
//Find font type //Find font type
if ($fontfile) { if($fontfile)
{
$ext=strtolower(substr($fontfile,-3)); $ext=strtolower(substr($fontfile,-3));
if($ext=='ttf') if($ext=='ttf')
$type='TrueType'; $type='TrueType';
@@ -311,7 +330,8 @@ function MakeFont($fontfile, $afmfile, $enc = 'cp1252', $patch = array(), $type
else else
die('<b>Error:</b> unrecognized font file extension: '.$ext); die('<b>Error:</b> unrecognized font file extension: '.$ext);
} }
else { else
{
if($type!='TrueType' && $type!='Type1') if($type!='TrueType' && $type!='Type1')
die('<b>Error:</b> incorrect font type: '.$type); die('<b>Error:</b> incorrect font type: '.$type);
} }
@@ -331,7 +351,8 @@ function MakeFont($fontfile, $afmfile, $enc = 'cp1252', $patch = array(), $type
$s.='$enc=\''.$enc."';\n"; $s.='$enc=\''.$enc."';\n";
$s.='$diff=\''.$diff."';\n"; $s.='$diff=\''.$diff."';\n";
$basename=substr(basename($afmfile),0,-4); $basename=substr(basename($afmfile),0,-4);
if ($fontfile) { if($fontfile)
{
//Embedded font //Embedded font
if(!file_exists($fontfile)) if(!file_exists($fontfile))
die('<b>Error:</b> font file not found: '.$fontfile); die('<b>Error:</b> font file not found: '.$fontfile);
@@ -342,10 +363,12 @@ function MakeFont($fontfile, $afmfile, $enc = 'cp1252', $patch = array(), $type
die('<b>Error:</b> Can\'t open '.$fontfile); die('<b>Error:</b> Can\'t open '.$fontfile);
$file=fread($f,filesize($fontfile)); $file=fread($f,filesize($fontfile));
fclose($f); fclose($f);
if ($type == 'Type1') { if($type=='Type1')
{
//Find first two sections and discard third one //Find first two sections and discard third one
$header=(ord($file[0])==128); $header=(ord($file[0])==128);
if ($header) { if($header)
{
//Strip first binary header //Strip first binary header
$file=substr($file,6); $file=substr($file,6);
} }
@@ -353,7 +376,8 @@ function MakeFont($fontfile, $afmfile, $enc = 'cp1252', $patch = array(), $type
if(!$pos) if(!$pos)
die('<b>Error:</b> font file does not seem to be valid Type1'); die('<b>Error:</b> font file does not seem to be valid Type1');
$size1=$pos+6; $size1=$pos+6;
if ($header && ord($file[$size1]) == 128) { if($header && ord($file[$size1])==128)
{
//Strip second binary header //Strip second binary header
$file=substr($file,0,$size1).substr($file,$size1+6); $file=substr($file,0,$size1).substr($file,$size1+6);
} }
@@ -363,23 +387,28 @@ function MakeFont($fontfile, $afmfile, $enc = 'cp1252', $patch = array(), $type
$size2=$pos-$size1; $size2=$pos-$size1;
$file=substr($file,0,$size1+$size2); $file=substr($file,0,$size1+$size2);
} }
if (function_exists('gzcompress')) { if(function_exists('gzcompress'))
{
$cmp=$basename.'.z'; $cmp=$basename.'.z';
SaveToFile($cmp,gzcompress($file),'b'); SaveToFile($cmp,gzcompress($file),'b');
$s.='$file=\''.$cmp."';\n"; $s.='$file=\''.$cmp."';\n";
echo 'Font file compressed ('.$cmp.')<br>'; echo 'Font file compressed ('.$cmp.')<br>';
} else { }
else
{
$s.='$file=\''.basename($fontfile)."';\n"; $s.='$file=\''.basename($fontfile)."';\n";
echo '<b>Notice:</b> font file could not be compressed (zlib extension not available)<br>'; echo '<b>Notice:</b> font file could not be compressed (zlib extension not available)<br>';
} }
if ($type == 'Type1') { if($type=='Type1')
{
$s.='$size1='.$size1.";\n"; $s.='$size1='.$size1.";\n";
$s.='$size2='.$size2.";\n"; $s.='$size2='.$size2.";\n";
} }
else else
$s.='$originalsize='.filesize($fontfile).";\n"; $s.='$originalsize='.filesize($fontfile).";\n";
} }
else { else
{
//Not embedded font //Not embedded font
$s.='$file='."'';\n"; $s.='$file='."'';\n";
} }
@@ -387,5 +416,4 @@ function MakeFont($fontfile, $afmfile, $enc = 'cp1252', $patch = array(), $type
SaveToFile($basename.'.php',$s,'t'); SaveToFile($basename.'.php',$s,'t');
echo 'Font definition file generated ('.$basename.'.php'.')<br>'; echo 'Font definition file generated ('.$basename.'.php'.')<br>';
} }
?> ?>

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Symbol'; $name = 'Symbol';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Times-Roman'; $name = 'Times-Roman';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Times-Bold'; $name = 'Times-Bold';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Times-BoldItalic'; $name = 'Times-BoldItalic';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'Times-Italic'; $name = 'Times-Italic';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
$type = 'Core'; $type = 'Core';
$name = 'ZapfDingbats'; $name = 'ZapfDingbats';
$up = -100; $up = -100;

View File

@@ -1,5 +1,4 @@
<?php <?php
/** /**
* Fichero de configuración donde se introducirán los valores para * Fichero de configuración donde se introducirán los valores para
* la conexión con el servidor MySQL y otros para personalizar la aplicación. * la conexión con el servidor MySQL y otros para personalizar la aplicación.
@@ -21,20 +20,20 @@
* along with Inventario. If not, see <http://www.gnu.org/licenses/>. * along with Inventario. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
require_once 'version.inc'; define('AUTOR','Ricardo Montañana Gómez');
define('SERVIDOR','localhost'); //Ubicación del servidor MySQL define('SERVIDOR','localhost'); //Ubicación del servidor MySQL
define('BASEDATOS','Inventario2'); //Nombre de la base de datos. define('BASEDATOS','Inventario2'); //Nombre de la base de datos.
define('BASEDATOSTEST', 'Inventario_test'); //Base de datos para los tests.
define('USUARIO','test'); //Usuario con permisos de lectura/escritura en la base de datos define('USUARIO','test'); //Usuario con permisos de lectura/escritura en la base de datos
define('CLAVE','tset'); //contraseña del usuario. define('CLAVE','tset'); //contraseña del usuario.
define('VERSION','1.03');
define('PROGRAMA','Gesti&oacute;n de Inventario.'); define('PROGRAMA','Gesti&oacute;n de Inventario.');
define('CENTRO','I.E.S.O. Pascual Serrano'); define('CENTRO','I.E.S.O. Pascual Serrano');
define('NUMFILAS', '17'); // Número de registros a mostrar en las pantallas de consulta iniciales define('APLICACION',PROGRAMA.VERSION);
define('PAUSA', '2'); //Nº segundos de pausa para mostrar mensaje id insertado define('NUMFILAS',17); // Número de registros a mostrar en las pantallas de consulta iniciales
define('PAUSA',2);//Nº segundos de pausa para mostrar mensaje id insertado
define('ESTILO','personal'); //Estilo de los iconos de edición (personal, personal, personal) define('ESTILO','personal'); //Estilo de los iconos de edición (personal, personal, personal)
define('PLANTILLA','bootstrap'); //Estilo de la plantilla y recursos a utilizar define('PLANTILLA','bootstrap'); //Estilo de la plantilla y recursos a utilizar
define('COLORLAT', '#46d6db'); //Color de la barra de menú lateral define('COLORLAT', '#7ae7bf'); //Color de la barra de menú lateral
define('COLORFON', '#a4bdfc'); //Color del fondo de la pantalla define('COLORFON', '#a4bdfc'); //Color del fondo de la pantalla
define('MYSQLDUMP', '/usr/local/bin/mysqldump'); //camino a mysqldump define('MYSQLDUMP', '/usr/local/bin/mysqldump'); //camino a mysqldump
define('GZIP', '/usr/bin/gzip'); //Camino a gzip define('GZIP', '/usr/bin/gzip'); //Camino a gzip

View File

@@ -1,27 +0,0 @@
<?php
/**
* Fichero de configuración donde se introducirán los valores
* de autor y de la versión
* @package Inventario
* @copyright Copyright (c) 2008, Ricardo Montañana Gómez
* @license http://www.gnu.org/licenses/gpl-3.0.txt
* This file is part of Inventario.
* Inventario is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Inventario is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Inventario. If not, see <http://www.gnu.org/licenses/>.
*
*/
define('AUTOR', 'Ricardo Montañana Gómez');
define('VERSION', '1.03b');
?>

File diff suppressed because it is too large Load Diff

View File

@@ -24,7 +24,7 @@
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container-fluid"> <div class="container-fluid">
<div class="navbar-header"> <div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".sidebar"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span> <span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
@@ -38,7 +38,7 @@
</div> </div>
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right"> <ul class="nav navbar-nav navbar-right">
<!--<li><a href="#">{usuario}</a></li>--> <li><a href="#">{usuario}</a></li>
<li><a href="#">{fecha}</a></li> <li><a href="#">{fecha}</a></li>
<li>{control}</li> <li>{control}</li>
</ul> </ul>

View File

@@ -22,8 +22,8 @@
$host="localhost"; $host="localhost";
$baseAnt="Inventario"; $baseAnt="Inventario";
$baseNueva="Inventario2"; $baseNueva="Inventario2";
$usuario="root"; $usuario="test";
$claveUsuario="galeote"; $claveUsuario="tset";
$probar=false; $probar=false;

View File

@@ -1,75 +0,0 @@
<?php
require_once 'Configuracion.php';
/**
* Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2014-03-07 at 23:58:14.
*/
class ConfiguracionTest extends PHPUnit_Framework_TestCase {
/**
* @var Configuracion
*/
protected $config;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this->config = new Configuracion;
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
/**
* @covers Configuracion::ejecuta
*/
public function testEjecuta()
{
$this->assertFileExists('inc/Configuracion.inc', "El fichero de configuración no existe");
$permisos = fileperms('inc/Configuracion.inc');
//Comprueba que el propietario o el grupo tengan derecho de escritura
$test = $permisos & 0x0080 || $permisos & 0x0010;
$this->assertTrue($test, "El fichero de configuración no tiene los permisos adecuados");
//Comprueba que existan todas las claves editables en el fichero de configuración.
$fichero = $this->config->obtieneFichero();
$this->assertNotNull($fichero, "El fichero de configuración no se ha leído o no tiene contenido");
$lineas = explode("\n", $fichero);
$campos = $this->config->obtieneLista();
$numero = 0;
$lista = implode(",", $campos);
//var_dump($campos);
//var_dump($lista);
foreach ($lineas as $linea) {
if (stripos($linea, "DEFINE") !== false) {
$this->assertStringMatchesFormat("define('%s', '%s');%S", $linea, "La línea [" . $linea . "] del fichero de configuración no tiene el formato correcto");
$this->config->obtieneDatos($linea, $clave, $valor);
if (stripos($lista, $clave) !== false) {
$this->assertContains($clave, $campos, "El fichero de configuración no tiene la clave [" . $clave . "]");
$numero++;
$verificados[] = $clave;
}
}
}
$this->assertCount($numero, $campos, "No se han verificado todas las claves");
if ($numero != count($campos)) {
echo "Las claves verificadas han sido: \n";
var_export($verificados);
}
// @todo comprobar que la salida incluye una tabla con todos los campos editables.
// @todo comprobar que los valores seleccionados se corresponden co los del fichero
$salida = $this->config->ejecuta();
}
}
?>

View File

@@ -1,47 +0,0 @@
<?php
require_once('Menu.php');
/**
* Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2014-03-08 at 17:47:42.
*/
class MenuTest extends PHPUnit_Framework_TestCase {
/**
* @var Menu
*/
protected $object;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this->object = new Menu('inc/inventario.menu');
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
/**
* @covers Menu::insertaMenu
* @todo Implement testInsertaMenu().
*/
public function testInsertaMenu()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
}
?>

View File

@@ -1,204 +0,0 @@
<?php
require_once('inc/configuracion.inc');
require_once('Sql.php');
/**
* Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2014-03-08 at 01:19:34.
*/
class SqlTest extends PHPUnit_Framework_TestCase {
/**
* @var Sql
*/
protected $bd;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
* @covers Sql::__construct
* @uses Sql
*/
protected function setUp()
{
$this->bd = new Sql(SERVIDOR, USUARIO, CLAVE, BASEDATOSTEST);
$this->assertFalse($this->bd->error(), "No se ha conectado a la base de datos de pruebas [" . BASEDATOSTEST . "]");
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
/**
* @covers Sql::__destruct
* @todo Implement test__destruct().
*/
public function test__destruct()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::filtra
* @todo Implement testFiltra().
*/
public function testFiltra()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::ejecuta
* @todo Implement testEjecuta().
*/
public function testEjecuta()
{
}
/**
* @covers Sql::procesaResultado
* @todo Implement testProcesaResultado().
*/
public function testProcesaResultado()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::camposResultado
* @todo Implement testCamposResultado().
*/
public function testCamposResultado()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::numeroTuplas
* @todo Implement testNumeroTuplas().
*/
public function testNumeroTuplas()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::error
* @todo Implement testError().
*/
public function testError()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::mensajeError
* @todo Implement testMensajeError().
*/
public function testMensajeError()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::estructura
* @todo Implement testEstructura().
*/
public function testEstructura()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::ultimoId
* @todo Implement testUltimoId().
*/
public function testUltimoId()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::obtieneManejador
* @todo Implement testObtieneManejador().
*/
public function testObtieneManejador()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::comienzaTransaccion
* @todo Implement testComienzaTransaccion().
*/
public function testComienzaTransaccion()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::abortaTransaccion
* @todo Implement testAbortaTransaccion().
*/
public function testAbortaTransaccion()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @covers Sql::confirmaTransaccion
* @todo Implement testConfirmaTransaccion().
*/
public function testConfirmaTransaccion()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
}
?>

View File

@@ -1,26 +0,0 @@
<?xml version="1.0"?>
<Informe>
<Titulo Texto="{Descripcion}" id="{id}"/>
<Datos>
<Consulta>
select A.id as id, A.Descripcion as articulo, A.Marca as marca, A.Modelo as modelo, E.id as idEl, U.id as idUbic,U.Descripcion as ubicacion,E.numserie as numserie,
E.fechaCompra as fechaCompra,E.Cantidad as cantidad, E.Cantidad as cantReal, 'N' as Baja
from Elementos E, Articulos A, Ubicaciones U where A.id=E.id_Articulo and U.id=E.id_Ubicacion
and A.id='{id}' order by U.Descripcion,numserie;
</Consulta>
</Datos>
<Pagina Orientacion="P" Formato="A4">
<Cabecera>Articulo</Cabecera>
<Cuerpo>
<Col Nombre="Baja" Titulo="Baja"/>
<Col Nombre="idEl" Titulo="idElem"/>
<Col Nombre="idUbic" Titulo="idUbic"/>
<Col Nombre="articulo" Titulo="Articulo"/>
<Col Nombre="ubicacion" Titulo="Ubicación"/>
<Col Nombre="numserie" Titulo="N Serie"/>
<Col Nombre="fechaCompra" Titulo="Fecha C." />
<Col Nombre="cantidad" Titulo="Cantidad"/>
<Col Nombre="cantReal" Titulo="Cant. Real"/>
</Cuerpo>
</Pagina>
</Informe>

View File

@@ -1,29 +0,0 @@
<?xml version="1.0"?>
<Informe>
<Titulo Texto="{Descripcion}" id="{id}"/>
<Datos>
<Consulta>
select A.id as idArt,E.id as idEl,U.id as idUbic,U.Descripcion as ubicacion,A.Marca as marca,A.Modelo as modelo,E.numSerie as numserie,
E.fechaCompra as fechaCompra,A.Descripcion as articulo,E.Cantidad as cantidad, E.Cantidad as cantReal, 'N' as Baja
from Elementos E, Articulos A, Ubicaciones U where A.id=E.id_Articulo and U.id=E.id_Ubicacion
and U.id='{id}' order by A.descripcion;
</Consulta>
</Datos>
<Pagina Horizontal="2" Vertical="7">
<Cabecera>Ubicacion</Cabecera>
<Cuerpo>
<Col Nombre="Qr" Valor="{url}"/>
<Col Nombre="idEl" Titulo="idElem"/>
<Col Nombre="idArt" Titulo="idArt"/>
<Col Nombre="idUbic" Titulo="idUbic"/>
<Col Nombre="ubicacion" Titulo="Ubicacion"/>
<Col Nombre="articulo" Titulo="Artículo"/>
<Col Nombre="marca" Titulo="Marca"/>
<Col Nombre="modelo" Titulo="Modelo"/>
<Col Nombre="numserie" Titulo="N Serie"/>
<Col Nombre="fechaCompra" Titulo="Fecha C." />
<Col Nombre="cantidad" Titulo="Cantidad"/>
<Col Nombre="cantReal" Titulo="Cant. Real"/>
</Cuerpo>
</Pagina>
</Informe>