Proyecto

General

Perfil

Plugins AnnexesInServer y Modulo ElFinder

Información

Autor Iván Hernández
Sitio Web http://intranet.adapting.com/intranet/Document/Documents/Show/ADP-2020-08-00121-I - http://intranet.adapting.com/intranet/Document/Documents/Show/ADP-2018-12-00167-I?Version=6296
Repositorio source:Metadata/trunk/src/
Código fuente http://svn-community.adapting.com:8080/svn/Community/Plugins/Metadata/trunk/
Versión Actual v1.0
Compatible con Abox 4.1

Resumen

Este tipo de metadato permite ingresar rutas, a partir de una carpeta raíz dentro del servidor, en las cuales se desea gestionar archivos. Se implementa un File Manager llamado ELFinder. Este es un plugin basado en Jquery e implementa PHP como conector al servidor.

Notas de instalación

Descargue el código fuente del plugin y compílelo usando Visual Studio 2017. Luego dependiendo si lo va a integrar en una instalación de Abox o en un proyecto de extensión de Abox sigua las siguientes instrucciones.

En una instalación de Abox

Copiar la dll que genera el proyecto, en principio se debe llamar Adapting.AnnexesInServerMetadata.dll, en la carpeta /bin del sitio web donde esta Abox.
Copiar la vista AnnexesInServerField.ascx en la carpeta Fields que se encuentra en Areas/Network/Views/.
Copiar el JavaScript adapting.extensions.fields.AnnexesInServer.js en la ruta Content/Javascript.

Instalar Elfinder en Abox

Copiar el proyecto del plugin Elfinder contenido en la carpeta elFinder en la ruta Content.
Es un requisito que el servidor ejecute archivos PHP. En el archivo adjunto "Using FastCGI to Host PHP Applications on IIS 7 _ Microsoft Docs.pdf" se encuentran los pasos para que IIS corra PHP. Ver enlace web.

Instalar Elfinder en un servidor externos

Copiar el proyecto del plugin Elfinder contenido en la carpeta elFinder en alguna carpeta dentro del htdocs del servidor, el cual debe ejecutar PHP por ejemplo: HTTP Apache.

Guía de uso

Una vez incluida la clase en el proyecto y recompilado el proyecto, se debe añadir una key en el archivo de configuración appsetting.config. Esta representa la carpeta raiz y apartir de ella se indexará la ruta ingresada al metadato.
Ejemplo:

<add key="RootAnnexesMetadata" value="~/../Data/"/>      <!-- Ruta de carpeta raíz para repositorios internos (en la instalación de Abox) -->
<add key="RootAnnexesMetadataExternal" value="Anexos"/>  <!-- Ruta de carpeta raíz para repositorios externos -->

Se entiende que la ruta de carpeta raíz se calcula a partir de la ubicación en donde se ha alojado la carpeta elFinder en el servidor.

Luego de implementarlo solo queda añadir el metadato a un documento y al editarlo se debe agregar dos parámetros en el metadato: el nombre de la ruta (no obligatoria) y la ruta (obligatoria).
Ejemplos de ruta: Folder1 , Folder1/SubFolder1, etc. donde el Folder1 es una subcarpeta de la carpeta raíz (~/../Data/).

Luego en la vista del metadato saldrá un icono de carpeta el cual permitirá abrir el plugin ElFinder dentro de abox. En él se gestionará los archivos del drive solo si cumple con las siguientes condiciones: si el documento NO está bloqueado y (si el metadato No tiene record o el usuario tiene permiso de anular record de documentos) y (si el usuario es el autor del documento o {el usuario tiene permiso de editar documentos y permiso de convertir record de documentos}). En caso contrario solo podrá ver el contenido de la carpeta mostrada por ElFinder.

elFinder

elFinder is an open-source file manager for web, written in JavaScript using jQuery UI. Creation is inspired by simplicity and convenience of Finder program used in Mac OS X operating system.
SOURCE: https://github.com/Studio-42/elFinder
DEMO: https://studio-42.github.io/elFinder/

Histórico

27/12/2018
  • Se añade un parámetro en la creación del metadato llamado "url" que se usaría para añadir repositorios externos, los cuales deben estar configurados de manera que puedan correr el plugin elFinder (Requisitos: Apache y PHP). Luego de cumplir estos requisitos se debe añadir la carpeta que contiene el plugin (elFinder-2.1.42) en el servidor externo.

La ruta ingresada del repositorio externo debe apuntar al archivo "iframeElfinder.html". Ejemplo: //192.168.1.X/elFinder-2.1.42/iframeElfinder.html.

  • Para este caso el parámetro "path", que se ingresa al editar el metadato en la vista del documento, toma como carpeta raíz el origen del servidor "Apache".
  • NO se valida si la ruta existe ya que es un repositorio externo.

Nota: En caso de que el parámetro "url" sea null entonces se accede al propio servidor desde la carpeta raiz en appsetting.config, como funcionaba anteriormente.

15/01/2019
  • Se fija la ruta de la carpeta raíz para mantener el estándar (ver en la guía de uso).
  • Se puede eliminar los datos del metadato dejando vacío el campo "path", que se ingresa al editar el metadato en la vista del documento, y luego dando clic a guardar.
23/01/2019
  • Se añade un CheckBox en la creación de metadato que especificará si el repositorio es EXTERNO o INTERNO. En caso que sea externo se mantendrá la funcionalidad actual. Pero si es interna, la url ingresada se tendrá en cuenta y se añadirá después de la carpeta raiz. Ejemplo para caso INTERNO: SubFolderRoot/ , SubFolderRoot/SubFolder/, etc.
    Entonces, si la carpeta raiz es "~/Data/", la url es "SubFolderRoot/" y el path es "Anexos", la ruta completa seria "~/Data/SubFolderRoot/Anexos".
01/02/2019
  • Para repositorios externos se crea por defecto la carpeta "Data" como la carpeta contenedora de los archivos a consultar, ubicada en la raíz del servidor.
04/04/2019 16/04/2019
  • Se utiliza el comando open del conector PHP del plugin ElFinder para obtener datos de los ficheros. Solo se utilizan 3 datos: el hash(del nombre), el ts(fecha hora ultima modificación) y el size(peso), los cuales se obtendrán de todas las rutas posibles. Estos se guardarán en un parámetro del metadato llamado "Record" y hay otro parámetro "HashYes" almacenará el estado de validación del record. Y otro mas llamado "InfoRecord" el cual almacena información del record como: autor, fecha y estado de validacion. La funcionalidad consiste en comparar los datos almacenados en el metadato (Record) con una nueva consulta.
  • Se añade un botón con la etiqueta:
    "Core,ProtectRoute" => "Proteger Ruta".
  • Se añade el usuario y fecha en el "Record" y se muestra en un ALT de la imagen de validación.
  • Se valida permiso del usuario "Convertir a Record" para mostrar el botón de proteger ruta.

29/05/2019
Se realiza el ajuste para usar rutas independientes para repositorio internos y externos. Revisar en el archivo de configuración appsetting.config.
Ejemplo:

<add key="RootAnnexesMetadata" value="~/../Data/"/>
<add key="RootAnnexesMetadataExternal" value="Anexos"/>

Donde "RootAnnexesMetadata" es la ruta raiz para repositorios internos y "RootAnnexesMetadataExternal" es para repositorios externos.

21/11/2019
  • Se modifica el nombre la carpeta del pluguin ELFINDER de "elFinder-2.1.42" a "elFinder".
  • Se añade un nuevo campo a la definición del metadato que almacenaría la ruta de la carpeta (con posibilidad de palabras claves) que se creará por un enlace desde la pestaña de anexos. Este enlace solo aparecerá si el contenido tiene un metadato FileExplorer con código "fileExplorer". Y solo se permitirá crear la carpeta si el nuevo campo de ruta de carpeta contiene un valor valido.

Nota: Se aclara que la carpeta elFinder está (caso servidor local) en esta ruta: C:\inetpub\wwwroot\siar\htdocs\Content\elFinder (debe cambiarse para que funcione en modo local).

El nombre el parámetro es "FolderRoute" que puede contener: Keywords, cadena de texto o combinación de ambas.

Ejemplo: \[ParentFolderCode(0,6)]\[Year]\cadena de texto\[CasefolderCode]\[EntityCode]
  • [Year] -> Año actual
  • [Month] -> Mes actual
  • [CasefolderCode] -> Código del expediente donde se encuentra el contenido actual
  • [CasefolderName] -> Nombre (título) del expediente donde se encuentra el contenido actual
  • [ParentFolderCode(ni,n)] --> Código de la primera carpeta padre donde se encuentra el contenido actual (puede ser la carpeta del expediente padre), donde ni es el número del caracter inicial del intervalo de caracteres a elegir y n seria el número de caracteres, a partir del ni, hasta donde se desea elegir. OJO, ni se cuenta desde el caracter 0, es decir, el primer caracter es el 0.
  • [EntityCode] --> Código del documento actual.
  • [EntityName] --> Nombre del documento actual.
  • Si hay una cadena de texto SIN [], entonces se tomará como una constante o nombre de carpeta.
23/11/2020
  • Se añaden 3 nuevos parámetros de configuración del metadato para implementar la "Solicitud de copia" de otro drive. Para esta mejora se requiere la instalación del programa "HotDrives" en el drive solicitante. En resumen, lo que se pretende es que puedan relacionar dos metadatos, en el cual un usuario no tenga acceso por red a un drive (lo llamamos permanente) pero si pueda tener acceso a otro drive (lo llamamos temporal) que luego de un tiempo se realice una copia automática al drive permanente (a través del "HotDrives").
  • Parámetros:
    - Ruta del archivo xml para la solicitud de copia: ruta a partir de la carpeta raíz en donde se almacería los archivos xmls de solicitud de copia. Por ejemplo: config.
    - Código del metadato dependiente: Código del metadato que contendrá el drive permanente. Por ejemplo: fileExplorer.
    - Permiso de solicitud de copia: Roles que van a poder solicitar copia en el metadato configurado, por el momento solo se pueden seleccionar hasta 6 roles.
  • En la vista del metadato vamos a encontrar un nuevo botón llamado "Solicitar Copia" el cual realizará dos acciones:
    1. Ejecuta la creación de ruta configurada en el metadato del drive permanente, en caso de que no este creada.
    2. Crea la ruta en el metadato del drive temporal a partir del metadato del drive permanente, es decir, hace una copia solo de la ruta. y adicionalmente, crea el fichero xml de solicitud de copia en la ruta parametrizada.
  • Luego el programa "HotDrives" se encargará de gestionar la copia de archivos entre los drives.
  • Estructura general del archivo de configuración XML:
    <Request>
        <FolderName>Nombre de carpeta del drive temporal</FolderName>
        <Path>ruta de carpeta del drive temporal</Path>
        <Sync>Si requiere sincronizar copia</Sync>
        <IsClose>Si el drive permanente esta cerrado</IsClose>
        <Notification>
            <From>Email destino para la notificación</From>
            <Subject>Asunto de la notificación</Subject>
            <UrlResource>Url del cliente</UrlResource>
            <BodyVar>
                <ContentTitle>Nombre del documento</ContentTitle>
                <ContentCode>Cóndigo del documento</ContentCode>
                <ContentUrl>link del documento en la pestaña de anexos</ContentUrl>
                <CreateDate>fecha de la solicitud</CreateDate>
                <BodySubjectOk><![CDATA[Messages, ElFinderBodySubjectOk]]></BodySubjectOk>
                <MainDescriptionOk><![CDATA[Messages, ElFinderMainDescriptionOk]]></MainDescriptionOk>
                <Contents1Ok><![CDATA[Messages, ElFinderContents1Ok]]></Contents1Ok>
                <Contents2Ok><![CDATA[Messages, ElFinderContents2Ok]]></Contents2Ok>
                <BodySubjectError><![CDATA[Messages, ElFinderBodySubjectError]]></BodySubjectError>
                <MainDescriptionError><![CDATA[Messages, ElFinderMainDescriptionError]]></MainDescriptionError>
                <Contents1Error><![CDATA[Messages, ElFinderContents1Error]]></Contents1Error>
                <Contents2Error><![CDATA[Messages, ElFinderContents2Error]]></Contents2Error>
                <ClientAddress>Dirección del cliente</ClientAddress>
                <PhoneNumber>Teléfono del cliente</PhoneNumber>
                <ClientMail>Email del cliente</ClientMail>
                <ClientWeb>Url del cliente</ClientWeb>
                <UserMail>Email del ususario</UserMail>
            </BodyVar>
        </Notification>
    </Request>
    

11/12/2020

Cálculo anticipado del record

  • Se implementa el cálculo anticipado del record que consiste en: copiar el record del "Permanente" al "temporal" cuando se da click en solicitar copia y del "temporal" al "permanente" cuando le damos a cerrar al "permanente".
  • Este record tiene implementa un parámetro nuevo dentro del "InfoRecord" llamado "validateFolderTs" el permitirá validar el record sin tener en cuenta la fecha de modificación de las carpetas. Esto debido a que cuando se copian las carpetas entre drivers la fecha de modificación de las mismas cambia.
  • Se implementa un cambio de nombre del botón "Solicitar copia" a "Crear carpeta" esto debido a la mejor comprensión de las acciones, pero siguen teniendo la misma funcionalidad. El "Crear carpeta" solo aparece cuando no se ha creado el driver "temporal" y el driver "permanente" este vacío o no exista. El "Solicitar copia" solo aparece cuando cuando el "permanente" tiene record y el "temporal" no tiene record o si la carpeta ha sido borrada.
  • Ahora se puede vicisulizar dos mensajes cuando no hay conexión con el driver desde el Cliente. Cuando no hay conexion definitiva con el servidor externo aparece "Error de conexión" en rojo, pero cuando sí hay conexión pero no se encuentre la carpeta a la que apunta el driver, aparece el mensaje "Ruta no encontrada" en amarillo.
  • Se modifica el icono que muestra el error del hash por un reloj de arena cuando el metadato tiene record pero la carpeta esta vacía. Esto para indicar que aun falta subir los archivos a la carpeta para que la validación del record retorne correcto.

24/03/2022

Crear carpetas a los usuarios logeados

  • Se implementa que por medio de una entrada de menú se pueda mostrar el Elfinder.
  • Al momento de ingresar a esta entrada de menú automáticamente se creara una carpeta por usuario logeado, si ya existe una carpeta este solo la mostrara.
  • Se creo una nueva etiqueta en el appSettings.config con una llave llamada "RootAnnexesMetadataMas" solo para usuarios
<add key="RootAnnexesMetadataMas" value="AnexosMasiva-SSPD/"/>  <!-- Ruta de carpeta raíz para repositorios externos solo para usuarios -->

  • Permite mover archivos a traves de servidores
  • No se logro lo esperado de mostrar el servicio ElFinder dentro de un Iframe, este lo muestra desde una nueva pestaña

Crear carpetas a los usuarios logeados

  • Se implementa que por medio de una entrada de menú se pueda mostrar el Elfinder.
  • Al momento de ingresar a esta entrada de menú automáticamente se creara una carpeta por usuario logeado, si ya existe una carpeta este solo la mostrara.
  • Se creo una nueva etiqueta en el appSettings.config con una llave llamada "RootAnnexesMetadataMas" solo para usuarios
<add key="RootAnnexesMetadataMas" value="AnexosMasiva-SSPD/"/>  <!-- Ruta de carpeta raíz para repositorios externos solo para usuarios -->

  • Permite mover archivos a traves de servidores
  • No se logro lo esperado de mostrar el servicio ElFinder dentro de un Iframe, este lo muestra desde una nueva pestaña

Configuración ElFinder cantidad de caracteres en el nombre del fichero 12/04/2024

Se ha implementado la posibilidad de configurar la cantidad de caracteres permitidos en el ElFinder en el archivo connector.minimal.php ubicado en la carpeta de php.

function validName($name) {
return preg_match('/^.{5,10}$/', $name);
}

Logrando imprimir por Abox el mensaje de "Nombre de archivo no válido o muy largo para incorporacion por servidores."

Recuperación AnnexesInServer + JavaScript del 23/11/2020 al 23/04/2024 #24962.

Se realiza la recuperación a nivel de código hasta la actualidad. Recuperando:

23/11/2020
Se añaden 3 nuevos parámetros de configuración del metadato para implementar la "Solicitud de copia" de otro drive. Para esta mejora se requiere la instalación del programa "HotDrives" en el drive solicitante. En resumen, lo que se pretende es que puedan relacionar dos metadatos, en el cual un usuario no tenga acceso por red a un drive (lo llamamos permanente) pero si pueda tener acceso a otro drive (lo llamamos temporal) que luego de un tiempo se realice una copia automática al drive permanente (a través del "HotDrives").
Parámetros:
- Ruta del archivo xml para la solicitud de copia: ruta a partir de la carpeta raíz en donde se almacería los archivos xmls de solicitud de copia. Por ejemplo: config.
- Código del metadato dependiente: Código del metadato que contendrá el drive permanente. Por ejemplo: fileExplorer.
- Permiso de solicitud de copia: Roles que van a poder solicitar copia en el metadato configurado, por el momento solo se pueden seleccionar hasta 6 roles.
En la vista del metadato vamos a encontrar un nuevo botón llamado "Solicitar Copia" el cual realizará dos acciones:
1. Ejecuta la creación de ruta configurada en el metadato del drive permanente, en caso de que no este creada.
2. Crea la ruta en el metadato del drive temporal a partir del metadato del drive permanente, es decir, hace una copia solo de la ruta. y adicionalmente, crea el fichero xml de solicitud de copia en la ruta parametrizada.
Luego el programa "HotDrives" se encargará de gestionar la copia de archivos entre los drives.

11/12/2020
Editar esta sección
Cálculo anticipado del record
Se implementa el cálculo anticipado del record que consiste en: copiar el record del "Permanente" al "temporal" cuando se da click en solicitar copia y del "temporal" al "permanente" cuando le damos a cerrar al "permanente".
Este record tiene implementa un parámetro nuevo dentro del "InfoRecord" llamado "validateFolderTs" el permitirá validar el record sin tener en cuenta la fecha de modificación de las carpetas. Esto debido a que cuando se copian las carpetas entre drivers la fecha de modificación de las mismas cambia.
Se implementa un cambio de nombre del botón "Solicitar copia" a "Crear carpeta" esto debido a la mejor comprensión de las acciones, pero siguen teniendo la misma funcionalidad. El "Crear carpeta" solo aparece cuando no se ha creado el driver "temporal" y el driver "permanente" este vacío o no exista. El "Solicitar copia" solo aparece cuando cuando el "permanente" tiene record y el "temporal" no tiene record o si la carpeta ha sido borrada.
Ahora se puede vicisulizar dos mensajes cuando no hay conexión con el driver desde el Cliente. Cuando no hay conexion definitiva con el servidor externo aparece "Error de conexión" en rojo, pero cuando sí hay conexión pero no se encuentre la carpeta a la que apunta el driver, aparece el mensaje "Ruta no encontrada" en amarillo.
Se modifica el icono que muestra el error del hash por un reloj de arena cuando el metadato tiene record pero la carpeta esta vacía. Esto para indicar que aun falta subir los archivos a la carpeta para que la validación del record retorne correcto.

Todo quedo plasmado en el ticket base: #24962

Validación de permiso de acción 06/05/2024 #24962.

Se realiza un análisis y se detecta que estaba obligando a tomar dos permisos de acción en el modulo documento. ( Anular Record y Convertir a Record) para mostrar o no mostrar el botón de Cerrar.
Se corrige el presente ya que el Anular record no tiene que ver con el mostrar botón. Se deja el de producto Convertir a Record, ya que el mismo es responsable de añadir record a la carpeta de ElFinder. (Producto)

Volver al inicio
Agregar imagen desde el portapapeles (Tamaño máximo: 10 MB)