Lista de archivos .bin en el repositorio

cancel
Showing results for 
Search instead for 
Did you mean: 
javigarcia
Member II

Lista de archivos .bin en el repositorio

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 Smiley Very Happy

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!!
3 Replies
javigarcia
Member II

Re: Lista de archivos .bin en el repositorio

Muy buenas!

acabo de ejecutar la aplicación en IEX y se ve fatal jaja! en firefox se ve de lujo, y como es algo personal pos no me apetece adaptarlo a IEX Smiley Tongue así que podéis darme caña con el diseño si quereis Smiley Very Happy

Saludos!
Highlighted
venzia
Senior Member

Re: Lista de archivos .bin en el repositorio

Hola Javi, meterse con los binarios no es muy recomendable. Además no llego a entender el sentido de lo que quieres hacer ya que para un backup completo con copiar el alf_data y la base de datos va sobrado, con los acps puedes hacer copias selectivas (aunq es cierto que puede darte algun que otro quebradero de cabeza) .. y luego existe el modulo liberado por la Junta de Andalucia para las "copias de seguridad" flexibles http://www.juntadeandalucia.es/repositorio/usuario/listado/list.jsf?linkDummyForm:_idcl=items_proyec....
eso si .. al menos te va a servir para entender la estructura de alfresco a nivel de ficheros :mrgreen:.
Saludos .. buen finde!! .. y gracias por el aporte!
javigarcia
Member II

Re: Lista de archivos .bin en el repositorio

eso si .. al menos te va a servir para entender la estructura de alfresco a nivel de ficheros :mrgreen:.!

Lo has clavao Smiley Very Happy

Saludos!