Gestor de archivos
El gestor de archivos es elFinder: el cliente va en src/statics/plugins/elfinder/ y el
conector, por Composer (studio-42/elfinder). Los dos tienen que ir en la misma versión. Lo monta
PiecesPHP\FileManager\Controllers\FileManagerController, y se apaga con la constante FILE_MANAGER_MODULE
(src/app/config/constants.php).
Las dos rutas
| Gestor general | Gestor del editor | |
|---|---|---|
| Vista | filemanager-admin-filemanager |
filemanager-admin-filemanager-rich-editor |
| Conector | filemanager-admin-filemanager-configuration |
filemanager-admin-filemanager-configuration-rich-editor |
| Quién entra | Solo el usuario principal | Todos los tipos de usuario |
| Carpetas | files, documents y statics/uploads, con sus papeleras |
documents y su papelera |
| Tipos que se suben | Todos | Lista cerrada (abajo) |
| Comandos apagados | chmod |
chmod, extract, archive, mkfile, put, edit |
| Subir por URL | Sí | No |
El gestor del editor es el que abre CKEditor al insertar una imagen o enlazar un archivo. Si cambias su configuración, prueba insertar desde el editor de una publicación.
Qué se puede subir por el editor
FileManagerController::EDITOR_UPLOAD_ALLOWED: JPEG, PNG, GIF, WebP, PDF, texto plano, CSV, los formatos de Office
(.doc, .docx, .xls, .xlsx, .ppt, .pptx), OpenDocument de texto y de hoja de cálculo, vídeo MP4 y WebM, y audio
MP3, Ogg y WAV.
Decide el tipo detectado en el contenido, no la extensión. Un .jpg con HTML dentro se rechaza. SVG, HTML y XML no
entran por esta ruta. Para ampliar la lista, añade el MIME tal como lo detecta el servidor: un .wav, por ejemplo, se
detecta como audio/x-wav, y por eso están los dos.
Sin medir con archivos reales: .doc, .xls, .ppt y .mp3. Si uno legítimo se rechaza, mira qué tipo detecta el
servidor y añádelo.
Lo activo no se activa
Los archivos con contenido activo (SVG, HTML, XML) se sirven con cabeceras que impiden que se ejecuten al abrirlos. Por eso
statics/filemanager/ lleva el mismo .htaccess que las subidas, escrito por ProtectedUploads::writeDenyHtaccess() al arrancar y al abrir el
conector. Lo ignora git.
.svg,.svgz,.html,.htm,.xhtml,.xml,.xsly.xsltsalen conContent-Security-Policy: sandbox.- Los mismos, salvo
.svgy.svgz, salen además como descarga. - Un
.svgen una etiqueta<img>se sigue viendo.
Limitaciones conocidas
- Pide Apache con
mod_headersyAllowOverride. Con nginx ese.htaccessno aplica: pide esas cabeceras en tu configuración; sin medir en nginx. - La carpeta
documentses común: un usuario ve lo que subieron los demás en esa carpeta. - El usuario principal no tiene lista cerrada: su gestor ve las mismas carpetas y sube cualquier tipo.
netmount: su botón se ve, pero no hay controlador que montar. elFinder no da una forma limpia de apagarlo.- Un archivo de texto plano llamado
.jpgentra como texto y se sirve como imagen, sin activar nada.
La apariencia
elFinder lleva el aspecto del panel, en claro y en oscuro, con una hoja propia del módulo:
src/app/classes/PiecesPHP/FileManager/Statics/sass/elfinder-theme.scss, que gulp sass-modules compila a la carpeta
css/ hermana y que el controlador carga en las dos vistas, detrás de import_elfinder(). Usa solo las variables del tema
(--theme-*, --accent-*, --r-*, --shadow-*, --font-body), así que sigue al modo del usuario sin más trabajo, y
sustituye los iconos de elFinder (barra, menú contextual, árbol y tipos de archivo) por la fuente de iconos del panel. Las
miniaturas de las imágenes se quedan.
- Vive fuera de
src/statics/plugins/elfinder/a propósito: esa carpeta se reemplaza entera al actualizar elFinder (abajo), y un tema escrito ahí se perdería. - elFinder carga además su propio
src/statics/plugins/elfinder/css/theme.css(su opcióncssAutoLoad, activa por omisión) aunque ya no esté en la lista deimport_elfinder(), y lo carga DESPUÉS de nuestra hoja. Por eso todas sus reglas van dentro de:root: un punto más de especificidad que gana sin tocar el JS de las vistas. Una regla nueva de la hoja, también dentro de:root. - La vista del gestor es una tarjeta del panel (
ui segmentenfile-manager.php) que ocupa el alto de la ventana: el alto lo calcula la opciónheightdefile-manager.jsal cargar (elFinder lo escribe en línea), con 420 px de mínimo. No se recalcula al redimensionar la ventana. - Lo que todavía viene de elFinder: los avisos flotantes (info, error, éxito) con sus colores fijos, las flechas del árbol, el asa de redimensionar y los iconos de la vista rápida.
Añadir una carpeta
structureOptions($dirs, $trashes) arma cada raíz con sus valores seguros: acceptedName (rechaza .php y compañía en
cualquier posición del nombre), accessControl y la protección de lo privado. Añade la carpeta en el arreglo $dirs del
método del conector que le toque, con alias y relativePath. Si la va a usar alguien que no sea el usuario principal, ponle
lista cerrada y comandos apagados como las raíces del editor.
Al actualizar elFinder, copia js/, css/, img/ y sounds/ de src/vendor/studio-42/elfinder/ a src/statics/plugins/elfinder/.