Dans la famille des packages shiny de Datastorm, voici le petit dernier : shinydrive. Le package shinydrive a été développé pour répondre à un besoin simple : faciliter le partage de fichiers entre différents utilisateurs d’une application R/shiny.
Structure
C’est simple, Shinydrive se compose :
- d’un module shiny à insérer en quelques lignes de code et disposant de deux rôles :
- l’administrateur qui peut ajouter / modifier / supprimer des fichiers disponibles ensuite en téléchargement, et créer si besoin également des sous-dossiers
- le lecteur qui peut uniquement télécharger un ou plusieurs fichiers disponibles
- de 3 fonctions R permettant si besoin de gérer les fichiers en dehors de l’application shiny (génération quotidienne d’un rapport via un batch par exemple, et mise à disposition automatique dans l’application) :
add_file_in_dir
pour ajouter un nouveau fichieredit_file_in_dir
pour éditer un fichier existantsuppress_file_in_dir
pour supprimer un fichier
Le fonctionnement du package est aussi simple :
- Le module se branche à un répertoire existant
- La gestion des fichiers importés se fait ensuite via un fichier
yaml
permettant de stocker :- le nom d’origine du fichier ainsi que sa date et heure de mise à disposition. Cela permet notamment de renommer les fichiers dans le répertoire de stockage en évitant les conflits dans le cas où l’administrateur ajouterait deux fichiers
portant le même nom. Cette étape de renommage est totalement transparente pour le lecteur qui retrouvera bien le fichier avec le nom d’origine lors du téléchargement. - le type de fichier
- une description optionnelle de son contenu
- le nom d’origine du fichier ainsi que sa date et heure de mise à disposition. Cela permet notamment de renommer les fichiers dans le répertoire de stockage en évitant les conflits dans le cas où l’administrateur ajouterait deux fichiers
Côté shiny, nous retrouvons une interface claire et épurée, disponible actuellement
en trois langues (français, anglais et chinois), et qui se présente sous cette forme :
Administateur
Vue des fichiers, avec la possibilité de les éditer / supprimer / télécharger
Popup pour l’insertion d’un nouveau fichier
Lecteur
Uniquement la possibilité de télécharger les fichiers
N.B : La dernière colonne du tableau, composée de checkbox, permet de sélectionner plusieurs fichiers afin de tous les télécharger ou de les supprimer (administrateur).
Installation
Le package arrivera dans les prochaines semaines sur le CRAN. En attendant, vous pouvez l’installer directement depuis notre gitub https://github.com/datastorm-open :
if(!require(devtools)) install.packages("devtools") devtools::install_github("datastorm-open/shinydrive")
Application de démonstration
Une application de démonstration est disponible
- directement dans le package :
runApp(system.file("demo_app", package = "shinydrive"))
- en ligne : https://datastorm-demo.shinyapps.io/shinydrive/
- ou dans la vidéo ci-dessous :
Utilisation
En insérant tout simplement le module dans votre application shiny, avec l’utilisation des deux fonctions suivantes :
shiny_drive_ui
: dans le script ui.R, avec uniquement l’identifiant du module à renseignershiny_drive_server
: dans la partie du server.R avec a minima :- l’identifiant du module (id)
- ainsi que le répertoire de stockage (save_dir)
En complément, il est possible de :
- définir le rôle, administrateur ou lecteur (admin_user)
- la langue (lan)
- de forcer le remplissage du champ “description” lors de l’insertion d’un nouveau fichier (force_desc)
- et de restreindre les accès à un sous-ensemble de sous-dossiers si nécessaire (dir_access)
require(shinydrive) ui <- fluidPage( shiny_drive_ui(id = "idm") ) server <- function(input, output, session) { callModule(module = shiny_drive_server, id = "idm", admin_user = TRUE, save_dir = getwd(), lan = "EN") } shinyApp(ui, server)
L’ensemble des arguments peut être donné de façon réactive afin de gérer les différentes options en fonction du profil de l’utilisateur.
Next steps ?
Les perspectives d’évolutions d’ores et déjà identifiées sont :
- le chiffrement des fichiers
- les logs de téléchargement
- la fonction de transformation du fichier avant téléchargement
> Retrouvez les autres packages développés par Datastorm sur notre github : https://github.com/datastorm-open