2 Commits

Author SHA1 Message Date
7272e2b85a Merge branch 'release/1.15'
* release/1.15:
  Actualizado el número de versión a 1.15
  Corregido codificación/decodificación de la cadena de búsqueda en la URL
  Fix #40 Crear la opción de clonar registro en Mantenimiento. -Crear iconos de clonado en todos los estilos. -Corregido determinaAccion en Imagen para aceptar el clonado
  Corregido que aparezca el código de artículo en las etiquetas qr del inventario de Artículos Añadida la creación del directorio de imágenes en las instrucciones de instalación del README
2014-06-29 21:22:57 +02:00
6148593c7c Merge branch 'release/1.14.1'
* release/1.14.1:
  Actualizado el CHANGELOG
  Añadido la v para indicar la versión en la cabecera de los informes Acortado el nombre de la aplicación en la página principal para que en dispositivos pequeños se visualice bien con el icono nuevo del manual
  Añadidos enlaces a manual y a aplicación de ejemplo en readme.md
  Arreglado que los créditos salgan centrados en lugar de alineados a la derecha
2014-06-02 19:44:52 +02:00
12 changed files with 56 additions and 100 deletions

View File

@@ -210,11 +210,7 @@ class AportaContenido {
return $salida;
}
case 'opcion':
if (strstr($this->opcionActual, "&")) {
list($opcion, $parametro) = explode("&", $this->opcionActual);
} else {
$opcion = $this->opcionActual; $parametro = "";
}
switch ($opcion) {
case 'bienvenido':
return "Menú Principal";
@@ -248,19 +244,13 @@ class AportaContenido {
// if (!$this->registrado) {
// return $this->mensajeRegistro();
// }
if (strstr($this->opcionActual, "&")) {
list($opcion, $parametro) = explode("&", $this->opcionActual);
} else {
$opcion = $this->opcionActual; $parametro = "";
}
switch ($opcion) {
case 'bienvenido':
$mensaje = '<div class="alert alert-success">';
$mensaje .= 'Bienvenid@ ' . $this->usuario . '</div>';
case 'principal': // contenido inicial
if (!isset($mensaje)) {
$mensaje = "";
}
$creditos = "$('#creditos').modal({keyboard: false});";
$centro = '<div class="well well-sm">' . CENTRO . '</div>';
$tabla = $this->creaTablaAcercaDe();
@@ -274,7 +264,7 @@ class AportaContenido {
case 'elementos':
$this->cargaDatosURL();
if ($this->datosURL['opc'] == "informe") {
if ($this->perfil['Informe']) {
if (!$this->pefil['Informe']) {
$this->procesaURL();
$fichero = 'xml/informe' . ucfirst($opcion) . '.xml';
$salida = TMP.'/informe' . ucfirst($opcion) . '.xml';
@@ -353,7 +343,7 @@ class AportaContenido {
case 'copiaseg':
if ($this->perfil['Config']) {
$copia = new CopiaSeguridad();
if (isset($_GET['confirmado']) && $_GET['confirmado'] == "1") {
if ($_GET['confirmado'] == "1") {
if (!$copia->creaCopia()) {
$tipo = "danger";
$cabecera = "ERROR";

View File

@@ -1,9 +1,3 @@
Version 1.17 29-07-2014
-Eliminados los mensajes de aviso de php en todos los archivos php
Versión 1.16 28-07-2014
-Fix #41. Arregla las llamadas a Instalar.php que se hacían desde Inventario.php y desde Instalar.php
Versión 1.15 29-06-2014
-Crear la opción de clonar registro en Mantenimiento.
-Crear iconos de clonado en todos los estilos.

View File

@@ -82,7 +82,7 @@ class Configuracion {
fwrite($fsalida, $registro);
}
}
$salida = $this->formulario();
$salida.=$this->formulario();
if ($grabar) {
$salida.='<div class="alert alert-success">Configuraci&oacute;n guardada correctamente</div>';
fclose($fsalida);

View File

@@ -23,6 +23,10 @@ class CopiaSeguridad {
private $baseDatos;
private $imagenes;
public function __construct()
{
$opcion = $_GET['opc'];
}
public function creaCopia()
{
if (!$this->copiaBaseDatos()) {

53
Csv.php
View File

@@ -76,8 +76,7 @@ class Csv {
* Constructor de la clase.
* @param BaseDatos $baseDatos Manejador de la base de datos
*/
public function __construct($baseDatos)
{
public function __construct($baseDatos) {
$this->bdd = $baseDatos;
}
@@ -85,8 +84,7 @@ class Csv {
* Crea un fichero csv con el nombre especificado
* @param String $fichero Nombre del fichero
*/
public function crea($fichero)
{
public function crea($fichero) {
$this->nombre = $fichero;
$this->fichero = fopen($this->nombre, "w") or die("No puedo abrir " . $this->nombre . " para escritura.");
}
@@ -95,18 +93,15 @@ class Csv {
*
* @param array $datos escribe la línea en el archivo
*/
public function escribeLinea($datos)
{
public function escribeLinea($datos) {
fputcsv($this->fichero, $datos, ',', '"') or die("No puedo escribir en el fichero csv");
}
public function __destruct()
{
public function __destruct() {
$this->cierra();
}
public function cierra()
{
public function cierra() {
fclose($this->fichero) or die("No puedo cerrar el archivo csv");
}
@@ -114,8 +109,7 @@ class Csv {
*
* @param String $fichero Archivo xml que contiene la definición de la consulta
*/
public function ejecutaConsulta($fichero)
{
public function ejecutaConsulta($fichero) {
$consulta = simplexml_load_file($fichero) or die("No puedo cargar el fichero xml " . $fichero . " al csv");
// Escribe la cabecera del fichero
$this->escribeLinea(array($consulta->Pagina->Cabecera, $consulta->Titulo['id'], $consulta->Titulo['Texto']));
@@ -138,8 +132,7 @@ class Csv {
*
* @param String $ficheroCSV Nombre del archivo csv
*/
public function cargaCSV($ficheroCSV)
{
public function cargaCSV($ficheroCSV) {
$this->nombre = $ficheroCSV;
$this->fichero = fopen($this->nombre, "r") or die('No puedo abrir el archivo ' . $this->nombre . " para lectura.");
list($archivo, $idCabecera, $cabecera) = fgetcsv($this->fichero);
@@ -156,8 +149,7 @@ class Csv {
* Muestra un resumen de los datos del fichero csv cargado por pantalla
*
*/
public function resumen()
{
public function resumen() {
//$mensaje .=
$mensaje = "<center><h1>Archivo [inventario" . $this->cabecera[0] . "]</h1>";
$mensaje .= "<h2>id=[" . $this->cabecera[1] . "] Descripci&oacute;n=[" . $this->cabecera[2] . "]</h2><br>";
@@ -219,14 +211,12 @@ class Csv {
* @param $array línea de datos del fichero csv para comprobar las cantidades si se han modificado o no
* @return string
*/
private function compruebaCantidades($i)
{
//$ultimo = count($datos);
private function compruebaCantidades($i) {
$ultimo = count($datos);
return $this->datosFichero[$i][$this->cantidadReal] - $this->datosFichero[$i][$this->cantidad];
}
private function panelMensaje($info, $tipo = "danger", $cabecera = "&iexcl;Atenci&oacute;n!")
{
private function panelMensaje($info, $tipo = "danger", $cabecera = "&iexcl;Atenci&oacute;n!") {
$mensaje = '<div class="panel panel-' . $tipo . '"><div class="panel-heading">';
$mensaje .= '<h3 class="panel-title">' . $cabecera . '</h3></div>';
$mensaje .= '<div class="panel-body">';
@@ -236,16 +226,14 @@ class Csv {
return $mensaje;
}
private function escribeLog($comando)
{
private function escribeLog($comando) {
$fp = fopen($this->nombre.".log", "a");
$linea = strftime("%Y/%m/%d")."|".$this->nombre."|".$comando;
fputs($fp, $linea . "\n");
fclose($fp);
}
private function bajaElemento($i)
{
private function bajaElemento($i) {
$id = $this->datosFichero[$i][$this->idElemento];
$comando = 'delete from Elementos where id="' . $id . '";';
$this->escribeLog($comando);
@@ -254,8 +242,7 @@ class Csv {
}
}
private function modificaElemento($i)
{
private function modificaElemento($i) {
$id = $this->datosFichero[$i][$this->idElemento];
$comando = 'update Elementos set Cantidad=' . $this->datosFichero[$i][$this->cantidadReal] . ' where id="' . $id . '";';
$this->escribeLog($comando);
@@ -264,8 +251,7 @@ class Csv {
}
}
private function altaElemento($i)
{
private function altaElemento($i) {
if ($this->cabecera[0] == "Articulo") {
$idUbicacion = $this->datosFichero[$i][$this->idUbicacion];
$idArticulo = $this->cabecera[1];
@@ -283,8 +269,7 @@ class Csv {
}
}
private function cargaIndices($campos)
{
private function cargaIndices($campos) {
for ($i = 0; $i < count($campos); $i++) {
switch ($campos[$i]) {
case "Cant. Real": $this->cantidadReal = $i;
@@ -310,8 +295,7 @@ class Csv {
/**
* Procesa contra la base de datos todas las acciones del archivo
*/
public function ejecutaFichero()
{
public function ejecutaFichero() {
$this->cargaIndices($this->datosFichero[0]);
//Realiza una transacción para que no se ejecute parcialmente una actualización
try {
@@ -346,8 +330,7 @@ class Csv {
}
}
private function ejecutaFichero2()
{
private function ejecutaFichero2() {
echo '<script>visualizaProgreso();</script>';
for ($i = 1; $i < 80; $i++) {
//sleep(1);

View File

@@ -55,7 +55,6 @@ class Importacion {
private function formulario() {
$accion = "index.php?importacion&opc=importar";
$salida = "";
//$salida .= '<script type="text/javascript" src="css/bootstrap-filestyle.min.js"> </script>';
$salida .='<div class="col-sm-6 col-md-6">';
$salida .= '<form enctype="multipart/form-data" name="importacion.form" method="post" action="' . $accion . '">' . "\n";

View File

@@ -149,7 +149,7 @@ class Instalar {
// Final del paso
$info .='</ul>';
$info .= $this->validaPaso0() ? $this->retornaBoton(false, "Instalar.php?paso=1") : $this->retornaBoton(true, "Instalar.php");
$info .= $this->validaPaso0() ? $this->retornaBoton(false, "instalar.php?paso=1") : $this->retornaBoton(true, "instalar.php");
$panel = $this->panelMensaje($info, 'primary', 'PASO 1: Configuración del servidor y la aplicación');
return $panel;
}
@@ -284,7 +284,7 @@ class Instalar {
return $this->paso2();
}
$info = '<form method="post" name="conf" action="Instalar.php?paso=1">';
$info = '<form method="post" name="conf" action="instalar.php?paso=1">';
$info .= '<ul class="list-group">';
$info .= '<li class="list-group-item list-group-item-info">Datos de configuración</li>';
$info .= '<li class="list-group-item">Servidor <input type="text" name="SERVIDOR" class="form-control" placeholder="Nombre del servidor o dirección IP" value="'. $datos['SERVIDOR'] .'"></li>';
@@ -293,8 +293,8 @@ class Instalar {
$info .= '<li class="list-group-item">Usuario <input type="text" name="USUARIO" class="form-control" placeholder="Usuario" value="'. $datos['USUARIO'] .'"></li>';
$info .= '<li class="list-group-item">Contraseña <input type="text" name="CLAVE" class="form-control" placeholder="Contraseña" value="'. $datos['CLAVE'] .'"></li>';
$info .= '</ul>';
$info .= $this->botonVolver("Instalar.php");
$info .= $this->validaPaso1() ? $this->retornaBoton(false, "Instalar.php?paso=1", false) : $this->retornaBoton(true, "Instalar.php?paso=1", false);
$info .= $this->botonVolver("instalar.php");
$info .= $this->validaPaso1() ? $this->retornaBoton(false, "instalar.php?paso=1", false) : $this->retornaBoton(true, "instalar.php?paso=1", false);
$info .= '</form>';
$panel = $this->panelMensaje($info, 'primary', 'PASO 2: Configuración de la Base de Datos.');
return $panel;
@@ -415,7 +415,7 @@ class Instalar {
}
$info = '
<form data-toggle="validator" role="form" class="form-horizontal" method="post" action="Instalar.php?paso=2">
<form data-toggle="validator" role="form" class="form-horizontal" method="post" action="instalar.php?paso=2">
<div class="form-group">
<label for="usuario" class="control-label col-sm-2">Usuario</label>
<div class="form-group col-sm-10">
@@ -435,7 +435,7 @@ class Instalar {
</div>
<div class="form-group col-sm-12">
' . $this->botonVolver("Instalar.php?paso=1") . '
' . $this->botonVolver("instalar.php?paso=1") . '
<button type="submit" class="btn btn-primary pull-right btn-lg" disabled="disabled">Crear base de datos y usuario <span class="glyphicon glyphicon-arrow-right"></button>
</div>
</div>

View File

@@ -42,7 +42,7 @@ class Inventario {
$this->opcActual = $_SERVER['QUERY_STRING'] == '' ? 'principal' : $_SERVER['QUERY_STRING'];
//Si el programa no está instalado, llama al instalador.
if (INSTALADO == "no") {
header('location: Instalar.php');
header('location: instalar.php');
return;
}
// Iniciamos una sesión

View File

@@ -200,7 +200,6 @@ class Mantenimiento {
}
//$salida.=$comando;
//$salida.=var_export($this->campos,true);
$cant = 0;
while ($fila = $this->bdd->procesaResultado()) {
$salida.='<tr bottom="middle">';
foreach ($fila as $clave => $valor) {
@@ -219,7 +218,7 @@ class Mantenimiento {
$datoEnlace = $tmpco[1];
}
}
$this->campoBusca = isset($dato[1]) ? $dato[1] : "";
$this->campoBusca = $dato[1];
$valor = '<a title="Inventario de ' . $valor . '" $target="_blank" href="index.php?informeInventario&opc=listar' . $datoEnlace . '&id=' . $id . '">' . $valor;
}
if (strstr($this->campos[$clave]['Comment'], "imagen") && isset($valor)) {
@@ -345,8 +344,6 @@ class Mantenimiento {
$informe = "";
}
$this->restoreURL();
} else {
$anterior = $rew = $az = $informe = $za = $siguiente = $fwd = "";
}
if ($this->perfil['Alta']) {
$this->datosURL['opc'] = 'nuevo';
@@ -425,14 +422,14 @@ class Mantenimiento {
} else {
$coma = ",";
}
if (isset($this->campos[$campo]['Type']) && $this->campos[$campo]['Type'] == 'Boolean(1)') {
if ($this->campos[$campo]['Type'] == 'Boolean(1)') {
$valor = "";
if (empty($_POST[$campo])) {
$valor = "0";
}
$valor = $_POST[$campo] == "on" ? '1' : $valor;
} else {
if (isset($this->campos[$campo]['Comment']) && stristr($this->campos[$campo]['Comment'], "imagen")) {
if (stristr($this->campos[$campo]['Comment'], "imagen")) {
//procesa el envío de la imagen
$imagen = new Imagen();
$accion = $imagen->determinaAccion($campo);
@@ -445,11 +442,7 @@ class Mantenimiento {
$campoImagen = $campo;
} else {
//Comprobamos si hay clonación y hay imagen a clonar.
if (isset($_POST[$campo])) {
$valor = $_POST[$campo];
} else {
$valor = "";
}
if ($_POST['tipoOperacion'] == CLONAR && file_exists($valor)) {
$hayImagen = true;
$campoImagen = $campo;
@@ -726,10 +719,9 @@ class Mantenimiento {
break;
}
$accion = $this->montaURL();
$salida = '<div class="col-sm-8"><form name="mantenimiento.form" enctype="multipart/form-data" class="form-horizontal" role="form" method="post" action="' . $accion . '">' . "\n";
$salida.='<div class="col-sm-8"><form name="mantenimiento.form" enctype="multipart/form-data" class="form-horizontal" role="form" method="post" action="' . $accion . '">' . "\n";
$salida.="<fieldset style=\"width: 96%;\"><p><legend style=\"color: red;\"><b>$tipo</b></legend>\n";
//$salida.= var_export($datos,true);
$campos = "";
foreach ($this->campos as $clave => $valor) {
if ($valor["Editable"] == "no") {
//Se salta los campos que no deben aparecer
@@ -868,7 +860,7 @@ class Mantenimiento {
private function creaModal($valor, $id)
{
$mensaje = '
$mensaje .= '
<div id="mensajeModal'.$id.'" class="modal fade " tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
<div class="modal-dialog text-center">
<div class="modal-content text-center">

View File

@@ -111,8 +111,7 @@ class Pdf_mysql_table extends FPDF
if ($this->procesandoTotales) {
$this->SetFont('Arial','B',12);
}
$dato = isset($data[$col['f']]) ? $data[$col['f']] : "";
$this->Cell($col['w'],5,utf8_decode($dato),1,0,$alin,$fill);
$this->Cell($col['w'],5,utf8_decode($data[$col['f']]),1,0,$alin,$fill);
//$this->Cell($col['w'],5,utf8_decode($data[$col['f']]),1,0,$alin,$fill);
//$this->Cell($col['w'],5,utf8_decode($data['proveedor']),1,0,$alin,$fill);
//$this->Write(5,"nombre=".$col['f'].",titulo=".$col['c'].",ancho=".$col['w'].",alin=".$col['a']);
@@ -120,10 +119,7 @@ class Pdf_mysql_table extends FPDF
//print_r($data);
//print_r($this->aCols);
if ($col['t']=='S' && !$this->procesandoTotales) {
if (isset($this->totales[$col['f']]))
$this->totales[$col['f']]+=$data[$col['f']];
else
$this->totales[$col['f']] = $data[$col['f']];
}
}

View File

@@ -1,4 +1,4 @@
# Inventario de Centro Educativo [![Project Stats](https://www.ohloh.net/p/inventario2/widgets/project_thin_badge.gif)](https://www.ohloh.net/p/inventario2)
# Inventario de Centro Educativo
Copyright (c) 2008-2014, Ricardo Montañana Gómez
Inventario2 is free software: you can redistribute it and/or modify
@@ -17,8 +17,6 @@ Utiliza:
[Instalación de ejemplo](http://inventario2.rmontanana.es)
[Estadísticas del proyecto](https://www.ohloh.net/p/inventario2)
##Instalación
Para instalar la aplicación basta con seguir estos pasos:
###1. Copiar los archivos en una ubicación a la que tenga acceso el usuario con el que se ejecuta el servidor Apache (apache, _www, etc.).

View File

@@ -23,5 +23,5 @@
*/
define('AUTOR', 'Ricardo Montañana Gómez');
define('VERSION', '1.17');
define('VERSION', '1.15');
?>