Module WebDAV pour Drupal
Le 12 septembre 2008 à 18:38, 30ième version du billet (Updated by DAV module).

Historique (tout afficher)
  • v30 - Updated by DAV module (2008-10-07 23:25)
  • v29 - Updated by DAV module (2008-09-20 23:00)

Éditions disponibles

Project license

Licence Publique Générale GNU Version 2

De quoi ça cause ?

L'objectif du module WebDAV pour Drupal est de permettre avant tout l'édition et la sauvegarde des nodes (billets, blogs, etc.) à partir d'un véritable éditeur HTML, à distance, sans copier-collés, et sans passer par l'interface WEB.

Pear:WebDAV Server

Techniquement, une bonne partie du travail a été réalisée grâce au module PHP Pear::HTTP_WebDAV_Server. Le développement de ce dernier semblant être figé, j'ai du commencer à le modifier pour le faire évoluer. La bonne question est donc de savoir si la licence PHP du module Pear est suffisamment compatible avec la GPL v2 de Drupal pour laisser les sources dans le module...

Ce module Drupal s'appuie donc sur cette librairie pour ajouter une mécanique Module Drupal, une couche de simplification du protocole WebDav pour finir par une "WebDAV API" relativement simple à implémenter.

\"WebDAV\" API

L'idée d'un API WebDAV est née il y a plus d'un ans suite une discussion avec Nick Vahalik qui bossait à l'époque avec moi sur le projet. Le but d'origine était de fournir un mapping quasi direct de WebDAV sur des hools. Aujourd'hui c'est devenu une abstraction de WebDav beaucoup plus simple à implémenter.

Cette API permet donc à quiconque de rapidement de monter sur l'arborescence WebDav une branche spécifique (taxonomie, fichiers, commentaires, etc.).

Toutes les fonctions WebDAV prises en charge par PEAR donnent ainsi lieu à la possibilité pour un module d'implémenter le hook correspondant. L'API est cependant une version abstraite du protocole DAV, évitant de rentrer trop dans ses finesses.

Module \"plugin\" de gestion des nodes

Du coup, la gestion des nodes est un module à part entière utilisant WebDAV API. Il prend en charge la gestion des droits et les verrous, le renommage du titre, l'édition (lecture et sauvegarde) du contenu, la suppression et la création. Je n'ai pas bien vu l'intérêt d'implémenter la copie de node...

D'un point de vue utilisateur, ce module accroche à la racine webdav (http://mon_serveur/webdav), un dossier DAV nommé nodes contenant autant de sous-dossier qu'il y de type de nodes. Dans chacun de ces dossiers, nous avons un dossiers par node d'un type donnée, portant le titre comme nom. Ainsi créer un nouveau dossier revient à créer un node, en supprimer à détruire un node, et le renommer à changer le titre du node.

Si l'on va dans le dossier du node, il y a pour l'instant un unique fichier nommé content.html. Il suffit de l'éditer pour éditer le contenu du node. Chaque sauvegarde donne lieu à la création d'une révision (paramétrable). De même est paramétrable la manière dont est vue un node (texte, HTML, code source) en fonction de son format d'entrée. Ainsi il est possible de voir un commentaire comme un fichier .txt et un node comme un .html.

Par ce module, il est aussi possible de directement poser des attachements dans un node, d'en supprimer, etc.

Compatibilité

DavFS2

DavFS2 permet de monter un système de fichiers WebDAV comme n'importe quel système de fichier. Il utilise la librairie Neon comme Litmus. Comme tous le client qui imaginer qu'il s'agit d'un système de fichier réel, il ne sait pas détruire le node.

  User-Agent : davfs2/1.3.3 neon/0.28.3

Client Statut
Keep Alive OK
Authentification OK
Session N/A
Compression N/A
Naviguer X
Créer un node (MKCOL) X
Lire un contenu (GET) X
Sauver un contenu (PUT) X
Créer un fichier X
Détruire un fichier X
Renommer un node X
Supprimer un node

Le plus compatible et efficace de tous, parfait ou presque.

Cadaver

  User-Agent : cadaver/0.23.2 neon/0.28.3

Client Statut
Keep Alive OK
Authentification OK
Session N/A
Compression N/A
Naviguer X
Créer un node (MKCOL) X
Lire un contenu (GET) X
Sauver un contenu (PUT) X
Créer un fichier X
Détruire un fichier X
Renommer un node X
Supprimer un node X

Le plus compatible et efficace de tous, parfait ou presque.

Nautilus/gfsd-dav

C'est un début de support qui fonctionne au minima. Il est globalement très mais alors très lent car pas très optimisé dans ses requêtes. Il aussi plante assez régulièrement. Pour le debugger il faut lancer /usr/lib/gvfsd --replace de sorte à avoir les traces. Pour en avoir plus, il faut exporter avant une variable GVFS_HTTP_DEBUG avec comme valeur all, body ou header.

Sinon il supporte mal les Redirection 301 lorsqu'il demande une ressource sans le dernier slash et qu'on le redirige gentiment vers la bonne URL.

Enfin la suppression pose elle un petit soucis car il n'apprécie pas que le dossier soit non vide. Autoriser la suppression des éléments virtuels (genre files, content.html) n'aide pas car le bougre vérifie que tout est bien détruit par un propfind avant de détruire la racine.

  User-Agent : gvfs/0.99.7.1

Client Statut
Keep Alive N/A
Authentification OK
Session N/A
Compression N/A
Naviguer X
Créer un node (MKCOL) X
Lire un contenu (GET) X
Sauver un contenu (PUT) X
Créer un fichier X
Détruire un fichier X
Renommer un node X
Supprimer un node

Dolphin/KIO

Alors Dolphin/KIO forment de loin le meilleur client WebDAV que j'ai testé. Basiquement tout fonctionne mais surtout de manière très rapide. Et pour cause, c'est le seul avec DAVExplorer à prendre en charge la compression et le seul tout court à utiliser les sessions (cookies). Maintenant je le trouve assez moche et au final KIO est moins générique que le sera GIO lorsque ce dernier sera finalisé.

  User-Agent      : mozilla/5.0 (compatible; konqueror/4.1; linux) khtml/4.1.1 (like gecko)

Client Statut
Keep Alive N/A
Authentification OK
Session N/A
Compression N/A
Naviguer X
Créer un node (MKCOL) X
Lire un contenu (GET) X
Sauver un contenu (PUT) X
Créer un fichier X
Détruire un fichier X
Renommer un node X
Supprimer un node

Windows XP

Voilà le UserAgent le plus "ouf" que j'ai jamais vu : microsoft data access internet publishing provider protocol discovery... Et pour ce prix, il n'y a pas la version...

Mais à la limite c'est presque le plus efficace avec cadaver. Il ne génère pas des tonnes de traffic et tout fonctionne, ou presque. La suppression pose un problème non encore identifié (le même que Gnome ?) et lorsqu'il y a un espace dans un nom de ressource "dossier" (ex. un titre de node), le dossier se retrouve dupliqué à l'intérieur de lui-même...

  User-Agent     : microsoft data access internet publishing provider protocol discovery

Client Statut
Keep Alive OK
Authentification OK
Session N/A
Compression N/A
Naviguer X
Créer un node (MKCOL) X
Lire un contenu (GET) X
Sauver un contenu (PUT) X
Créer un fichier X
Détruire un fichier X
Renommer un node X
Supprimer un node

MacOS/webdavfs 1.3

Pour autant que je puisse en juger avec un MacOS dans un VmWare (c'est trèèès lent!!), ça marche plutôt pas mal. Juste un détail, si les locks ne sont pas activés, le file système (/Volumes/webdav) est monté en lecture seule...

  User-Agent     : webdavfs/1.3 (01308000) darwin/8.1.0 (x86)

Client Statut
Keep Alive OK
Authentification OK
Session N/A
Compression N/A
Naviguer X
Créer un node (MKCOL)
Lire un contenu (GET) X
Sauver un contenu (PUT) X
Créer un fichier X
Détruire un fichier ?
Renommer un node
Supprimer un node

DAVExplorer 0.91

Alors Ok, il est très moche mais c'est le seul client à ma connaissance qui supporte la compression. Le résultat est une navigation très rapide sur les grands volumes de ressources. A se demander pourquoi les autres ne le font pas.

Maintenant il semble que l'outil ait des soucis s'il y a des espaces en début de nom sur le renommage et la destruction. Ceci dit c'est aussi le cas des montages DAV de Windows.

  User-Agent      : uci dav explorer/0.91 rpt-httpclient/0.3-3e

Client Statut
Keep Alive OK
Authentification OK
Session N/A
Compression OK
Naviguer X
Créer un node (MKCOL) X
Lire un contenu (GET) X
Sauver un contenu (PUT) X
Créer un fichier X
Détruire un fichier X
Renommer un node X
Supprimer un node X

Avancement

La version 1.0 est en cours de développement et comme je n'ai pas porté la v0.5 sous Drupal 6.x, il n'y a pour ainsi dire pas de version stable. Vous pouvez aller sur la page des sources de la version "trunk" pour la tester, prendre connaissance des changements ou donner vos idées d'amélioration.

Instructions

C'est un module Drupal tout ce qu'il y a de plus classique. Copiez les sources dans le dossier des modules, activez les modules "Dav for Drupal" et "Node Dav" puis testez en ajoutant le chemin /webdav/ à votre adresse de serveur.

Commentaires

Armetiz , le 18 September, 2008 - 22:11

Vraiment... Tip top, comme toujours.
J'ai passé mon blog de Drupal à Wordpress pour des raisons un peu de découverte et de non prise de tête, mais... Qu'est-ce qu'il peut manque le Drupal pour les aspects exotiques...
A quand de nouveau contrat de prestation Web où je pourrai utiliser, et ré-utiliser Drupal.

Ulhume, le 19 September, 2008 - 08:13

@armetiz merci Smiling Il est beau ton thème d'ailleurs c'est toi qui l'a réalisé ?

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...