AnsweredAssumed Answered

Lista de archivos .bin en el repositorio

Question asked by javigarcia on Nov 13, 2009
Latest reply on Nov 16, 2009 by javigarcia
Muy buenas foreros,

estoy investigando un poco el tema de los binarios, a ver de qué manera se pueden rescatar, hacer backups, listar, etc.

He creado una pequeña aplicación que lista todos los archivos en la carpeta alf_data/contentstore/ y los muestra en pantalla. Me gustaría compartirlo con vosotros y bueno, si es de utilidad para alguien, que lo use tranquilamente. De todas formas lo estoy toqueteando un poco, así que cualquier sugerencia o duda estaré encantado de leerlas :D

La aplicación consta de los siguientes archivos:

index.php // archivo principal, qué decir jeje
listar_directorios.php // aquí está la función que llamaré con ajax para listar los archivos pasándole la ruta desde el index
funciones.js // varias funciones para validar el formulario de petición y creación del objeto ajax
estilos.css // hoja de estilo

#################################################################################################################
Archivo index.php


<?php
$meses = Array (
   0 => array (
      "id" => 0,
      "nombre" => "Todos los meses",
   ),
   1 => array (
      "id" => 1,
      "nombre" => "Enero",
   ),
   2 => array (
      "id" => 2,
      "nombre" => "Febrero",
   ),
   3 => array (
      "id" => 3,
      "nombre" => "Marzo",
   ),
   4 => array (
      "id" => 4,
      "nombre" => "Abril",
   ),
   5 => array (
      "id" => 5,
      "nombre" => "Mayo",
   ),
   6 => array (
      "id" => 6,
      "nombre" => "Junio",
   ),
   7 => array (
      "id" => 7,
      "nombre" => "Julio",
   ),
   8 => array (
      "id" => 8,
      "nombre" => "Agosto",
   ),
   9 => array (
      "id" => 9,
      "nombre" => "Septiembre",
   ),
   10 => array (
      "id" => 10,
      "nombre" => "Octubre",
   ),
   11 => array (
      "id" => 11,
      "nombre" => "Noviembre",
   ),
   12 => array (
      "id" => 12,
      "nombre" => "Diciembre",
   ),
);

?>
<html>
<head>
<link href="estilos.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" language="javascript" src="funciones.js"></script>
</head>
<body>
<div id="main">
   <div id="formulario">
      <h1>BUSCAR ARCHIVOS EN REPOSITORIO</h1>
      <form id="form" name="form" action="#" method="POST" onsubmit="return listarArchivos()">
         <p>Fecha</p>
         <!– Año –>
         <select name="ano" id="ano" onchange="abrirMeses()">
            <option value="0" selected>Todos los años</option>
            <?php
            for ($i = 2009; $i <= 2020; $i++) {
            ?>
            <option value="<?php echo $i?>"><?php echo $i?></option>
            <?php
            }
            ?>
         </select>   
         <!– Mes –>
         <select name="mes" id="mes" onchange="abrirDias()" disabled>
            <?php
            for ($i = 0; $i < 13; $i++) {
            ?>
            <option value="<?php echo $meses[$i]['id']?>"><?php echo $meses[$i]['nombre']?></option>
            <?php
            }
            ?>
         </select>         
         <!– Dia –>
         <select name="dia" id="dia" onchange="abrirHoras()" disabled>
            <option value="0" selected>Todos los dias</option>
            <?php
            for ($i = 1; $i <= 31; $i++) {
            ?>
            <option value="<?php echo $i?>"><?php echo $i?></option>
            <?php
            }
            ?>
         </select>
         <p>Hora</p>
         <!– Horas –>
         <select name="horas" id="horas" onchange="abrirMinutos()" disabled>
            <option value="0" selected>Cualquier hora</option>
            <?php
            for ($i = 1; $i <= 24; $i++) {
            ?>
            <option value="<?php echo $i?>"><?php printf("%02d", $i)?></option>
            <?php
            }
            ?>
         </select>
         <!– Minutos –>
         <select name="minutos" id="minutos" disabled>
            <option value="" selected>Cualquier minuto</option>
            <?php
            for ($i = 0; $i <= 59; $i++) {
            ?>
            <option value="<?php echo $i?>"><?php echo $i?></option>
            <?php
            }
            ?>
         </select>
         <input type="submit" id="submit" value="Buscar archivos">
         <select name="listado" id="listado" multiple></select>
      </form>
   </div>
   <div id="resultado"><br><br><img src="ajax-loader.gif"></div>
</div>
</body>
</html>

#################################################################################################################
Archivo listar_directorios.php


<?php

$ano          = $_GET['ano'];
$mes          = $_GET['mes'];
$dia          = $_GET['dia'];
$horas          = $_GET['horas'];
$minutos       = $_GET['minutos'];
$ruta_inicial    = "C:\AlfrescoCommunity\alf_data\contentstore";
   
if ($ano != "0" && $ano != "") {
   $ruta_final = $ruta_inicial.'\\'.$ano;
}
if ($mes != "0" && $mes != "") {
   $ruta_final = $ruta_inicial.'\\'.$ano.'\\'.$mes;
}
if ($dia != "0" && $dia != "") {
   $ruta_final = $ruta_inicial.'\\'.$ano.'\\'.$mes.'\\'.$dia;
}
if ($horas != "0" && $horas != "") {
   $ruta_final = $ruta_inicial.'\\'.$ano.'\\'.$mes.'\\'.$dia.'\\'.$horas;
}
if ($minutos != "") {
   $ruta_final = $ruta_inicial.'\\'.$ano.'\\'.$mes.'\\'.$dia.'\\'.$horas.'\\'.$minutos;
}

function buscarArchivos($directory) {
    if($dir = opendir($directory)) {
        $tmp = Array();
        while($file = readdir($dir)) {
            // Me aseguro de que existen archivos
            if($file != "." && $file != ".." && $file[0] != '.') {
                // Si es un dir, listo todos los archivos de su interior
                if(is_dir($directory . "/" . $file)) {
                    $tmp2 = buscarArchivos($directory . "/" . $file);
                    if(is_array($tmp2)) {
                        $tmp = array_merge($tmp, $tmp2);
                    }
                }else{
                    array_push($tmp, $file);
                }
            }
        }
        closedir($dir);
        return $tmp;
    }
}
$lista = buscarArchivos($ruta_final);
foreach ($lista as $archivo) {
   $listado .= $archivo.", ";
}
echo $listado;

?>

#################################################################################################################
Archivo funciones.js


// Creacion del objeto AJAX
function objetoAjax() {
  try { return new XMLHttpRequest(); } catch(e) {}
  try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
  alert("XMLHttpRequest not supported");
  return null;
}

// Listado de archivos
function listarArchivos(tipo) {
   var datos = "";
   var texto = "";
   var total = "";
   var listado = document.getElementById('listado');
   var res = document.getElementById('resultado');
   var ano = document.getElementById('ano').value;
   var mes = document.getElementById('mes').value;
   var dia = document.getElementById('dia').value;
   var horas = document.getElementById('horas').value;
   var minutos = document.getElementById('minutos').value;
   if (listado.length > 0) {
      for (j = listado.length; j > 0; j–) {
         listado.remove(listado.length - 1);
      }
   }
   ajax = objetoAjax();
   ajax.open("GET", "listar_directorios.php?ano=" + ano + "&mes=" + mes + "&dia=" + dia + "&horas=" + horas + "&minutos=" + minutos);
   ajax.onreadystatechange = function () {
      if (ajax.readyState == 4) {
         if (ajax.status == 200 && ajax.responseText != null) {
            res.style.display = "block";
            datos = ajax.responseText;
            texto = datos.split(", ");
            total = texto.length - 1;
            for (i = 0; i < texto.length - 1; i++) {
               document.form.listado.options[i] = new Option(texto[i], texto[i]);
            }
            res.style.display = "block";
            res.innerHTML = "<br>Se han encontrado " + total + " archivos.";
         }
      }
   }
   ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
   ajax.send(null);
   return false;
}

function abrirMeses() {
   var ano    = document.getElementById('ano').value;
   var mes      = document.getElementById('mes');
   var dia      = document.getElementById('dia');
   var horas   = document.getElementById('horas');
   var minutos   = document.getElementById('minutos');
   if (ano != "0") {
      mes.disabled = false;
   }else{
      mes.disabled = true;
      dia.disabled = true;
      horas.disabled = true;
      minutos.disabled = true;
      mes.value = "0";
      dia.value = "0";
      horas.value = "0";
      minutos.value = "";
   }
}

function abrirDias() {
   var mes      = document.getElementById('mes').value;
   var dia      = document.getElementById('dia');
   var horas   = document.getElementById('horas');
   var minutos   = document.getElementById('minutos');
   if (mes != "0") {
      dia.disabled = false;
   }else{
      dia.disabled = true;
      horas.disabled = true;
      minutos.disabled = true;
      dia.value = "0";
      horas.value = "0";
      minutos.value = "";
   }
}

function abrirHoras() {
   var dia      = document.getElementById('dia').value;
   var horas   = document.getElementById('horas');
   var minutos   = document.getElementById('minutos');
   if (dia != "0") {
      horas.disabled = false;
   }else{
      horas.disabled = true;
      minutos.disabled = true;
      horas.value = "0";
      minutos.value = "";
   }
}

function abrirMinutos() {
   var horas   = document.getElementById('horas').value;
   var minutos = document.getElementById('minutos');
   if (horas != "0") {
      minutos.disabled = false;
   }else{
      minutos.disabled = true;
      minutos.value = "";
   }
}

function comprobarCampos() {
   var ano    = document.getElementById('ano').value;
   var mes      = document.getElementById('mes').value;
   var dia      = document.getElementById('dia').value;
   var horas   = document.getElementById('horas').value;
   var minutos   = document.getElementById('minutos').value;
   alert ("Año: " + ano + " / Mes: " + mes + " / Dia: " + dia + " / Horas: " + horas + " / Minutos: " + minutos);
}

#################################################################################################################
Archivo estilos.css


.body {
   margin: 0 auto;
   padding: 0;
   text-align: center;
}

#main {
   margin: 0 auto;
   padding: 0;
   width: 50%;
   height: 400px;
   border: 1px solid #000000;
   background-color: #DEDEDE;
   text-align: center;
}

#form {
   margin: 0 auto;
   margin-top: 20px;
   padding: 0;
   padding-top: 20px;
   padding-left: 40px;
   width: 80%;
   height: 120px;
   border: 1px solid #000000;
   background-color: #FFFFFF;
   text-align: left;
}

#main h1 {
   font-family: Tahoma;
   font-size: 14px;
   font-weight: bolder;
   text-align: center;
   color: #AEAEAE;
   margin-top: 20px;
   margin-bottom: 0;
   padding: 0;
}

p {
   font-family: Tahoma;
   font-size: 12px;
   font-weight: bold;
   margin: 0;
   padding: 0;
   margin-right: 5px;
   margin-bottom: 10px;
}
input, select {
   margin-bottom: 10px;
   margin-right: 10px;
   width: 109pt;
}

#submit {
   border: 1px solid #000000;
   background-color: #DEDEDE;
}

#listado {
   margin-top: 20px;
   padding: 0;
   width: 411pt;
   height: 130px;
   margin-left: -41px;
}

#resultado {
   width: 200px;
   margin: 0 auto;
   padding: 0;
   height: 50px;
   text-align: center;
   font-family: Tahoma;
   font-size: 12px;
   font-weight: bold;
   margin-top: 140px;
   display: none;
}

#################################################################################################################

Lo que estoy programando ahora es que puedas pinchar un .bin y te lo abra para ver sus datos, lo que pasa es que necesitaría que me localizara los archivos en el repositorio de Alfresco para ver su nombre y qué tipo de archivo es, pero vamos, que de momento va bien la cosa.

Como apunte final, hay una imagen llamada ajax-loader.gif que la podeis descargar desde la web http://www.ajaxload.info/

Un saludo!!

Outcomes