cancel
Showing results for 
Search instead for 
Did you mean: 

Lista de archivos .bin en el repositorio

javigarcia
Champ in-the-making
Champ in-the-making
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 3

javigarcia
Champ in-the-making
Champ in-the-making
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!

venzia
Star Collaborator
Star Collaborator
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
Champ in-the-making
Champ in-the-making
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!