Pour chaque fichier attaché, lorsque cela est pertinent, une vignette ainsi qu'éventuellement un lien pour en prévisualiser le contenu sont proposés à l'utilisateur. La prévisualisation peut éventuellement être augmentée d'une fonction d'affichage/de visualisation en ligne : c'est le cas par exemple pour les fichiers audio.
Enfin un formulaire de téléchargement (générique ou propre à un format) permet d'accéder au fichier.
Certains formats de fichiers sont l'objet de traitements particuliers (extraction de données EXIF, balises id3...) en vue de leur indexation et/ou possèdent une vignette. Cela concerne notamment :
—les fichiers image (jpg, png, gif, svg) qui peuvent être affichés dans un modal,
—les fichiers pdf qui peuvent être prévisualisés ou affichés sous forme d'images (y compris si vous ne disposez pas d'un lecteur PDF côté client),
—les fichiers audio (mp3, ogg, wav) qui peuvent être écoutés, séparément ou dans une liste de lecture regroupant tous les fichiers audio de la collection,
—les fichiers vidéo (mp4) qui peuvent être visionnés dans un modal.
D'autres formats de fichiers peuvent éventuellement être consultés/prévisualisés, mais ils sont représentés par une icône générique et ne sont pas l'objet de traitements particuliers (en général, leur contenu ne sera pas indexé). Ainsi :
—les fichiers epub peuvent uniquement être prévisualisés,
—les fichiers odt, doc/docx et ods, xls/xlsx peuvent être prévisualisés une fois convertis en PDF : cette conversion peut être automatisée sur l'hôte qui héberge chora à l'aide du service headless de conversion de documents fourni par le binaire soffice de la suite Libre Office avec unoconv. Un exemple pour lancer un tel service est fourni dans /binaries/libreoffice/ (le script libreoffice a été conçu pour les systèmes BSD, mais pourra facilement être adapté pour les systèmes Linux).
Pour distinguer ces formats et les regrouper, des types factices ont été définis : BIN (images), AUD (fichiers audio), VID (fichiers vidéo), PDF et OTH (pour les autres formats de fichiers qui n'ont pas de vignette, mais peuvent éventuellement être prévisualisés).
Pour les fichiers qui disposent d'un type factice particulier, le mécanisme extensible (à de nouveaux formats) repose sur l'architecture suivante :
Listes montrant les attachements (Contrôleur + vue) |
(Détection du type factice) ⇔ |
fonctions de création de vignette (icône) (fonctions d'aide + bibliothèque/binaire externe) + fonction de génération de la balise <IMG> pour l'affichage de la vignette (fonction |
⇔ |
Prévisualisation (Contrôleur + vue) + bibliothèque JS / code HTML nécessaire pour l'affichage |
⇒ |
Téléchargement (Contrôleur + vue) Visualisation (Contrôleur + vue) |
is_image is_jpeg ⇔ BIN |
helpers/thumbs_helper.php + GD2 |
⇔ | - nyroModal + HTML <img> directement dans la liste |
Main/file + views/main/file.php - |
||
Collections + views/collections /manage ou views/collections /viewaslist ou ... |
is_pdf ⇔ |
helpers/thumbs_helper.php + Ghostscript |
⇔ |
Main/pdf + views/main/pdf.php + assets/js/vendor/pdf.js |
⇒ |
Main/file + views/main/file.php Main/pdf_preview + pdf-preview.php |
Data + views/data/manage ou views/data/view ou ... |
is_audio ⇔ AUD |
helpers/thumbs_helper.php + FFmpeg |
⇔ |
Main/audio + views/main /audio.php + assets/js/vendor /howler.js + HTML 5 <audio> |
⇒ |
Main/file + views/main/file.php Main/audio_playlist + audio-playlist.php |
Idem | is_video ⇔ VID |
helpers/thumbs_helper.php + FFmpeg |
⇔ | Main/video +
views/main /video.php + HTML 5 <video> |
Main/file + views/main/file.php - |
Les types factices de fichiers servent également à déterminer quels sont les traitements qui doivent être effectués pour l'affichage du fichier ou pour son indexation plein texte avec Elasticsearch (lorsque la recherche avec Elasticsearch est activée).
L'indexation des différents types de fichiers (et formats) repose sur les fonctions idxafes()
et idxfes()
présentes dans les contrôleurs Collections et Data : s'il est indexable, le contenu du fichier est converti en texte, puis chargé dans le champ body du JSON envoyé à Elasticsearch.
Les fonctions d'aide (helpers) qui permettent la manipulation des fichiers se trouvent dans /application/helpers/general_helper.php
et /application/helpers/content_helper.php
Pour gérer de nouveaux types de fichiers devant avoir une vignette ou recevoir des traitements spécifiques, il faut schématiquement :
—ajouter une fonction de détection is_<format factice> dans helpers/thumbs_helper.php
—ajouter une fonction de génération de vignette thumb<type>()
dans le même fichier : les éventuelles bibliothèques et binaires externes nécessaires pour manipuler le format y seront utilisées. Si une vignette ne peut être générée, une icône devra être proposée à la place (c'est le cas pour les fichiers audio).
—ajouter une vue main/<type factice>.php
et la fonction correspondante dans le contrôleur Main —pour la prévisualition, une fonction supplémentaire (<type factice>_preview.php
, et la vue correspondante main/<type factice>-preview.php
) peuvent également être ajoutées : les éventuelles bibliothèques Javascript nécessaires pour l'affichage y seront utilisées.
—ajouter la génération du code HTML nécessaire à l'affichage de la vignette dans libraries/Formats.php
Le cas des fichiers du type factice OTH est plus simple : la fonction has_preview() de la bibliothèque Formats est appelée dans la vue view/main/file.php (elle renvoie vrai/faux). Si vrai est renvoyé, un bouton de prévisualisation est automatiquement affiché. Ce dernier suppose la création d'une fonction <type factice>_preview()
dans le contrôleur Main et la création de la vue associée main/<type factice>-preview.php
Par convention, le contenu indexable d'un fichier (qui devra être converti au format texte) est lui-même enregistré dans un fichier .txt ayant le même nom et se trouvant dans le même dossier que le fichier d'origine.
Notez enfin que mécanisme est utilisé sous condition pour proposer le téléchargement du fichier PDF d'un contenu (les chemins diffèrent).
Ce document a été publié le 2019-01-28 00:41:05. (Dernière mise à jour : 2019-07-23 23:02:09.)