WebDAV est une extension du protocole HTTP orientée vers la gestion de fichiers. Elle permet d'accéder à un système de fichiers distant à travers HTTP. eZ Publish fournit nativement une implémentation de webdav qui permet d'accéder aux contenus comme à une arborescence de fichiers. On peut ainsi facilement, par simple copier-coller dans un explorateur de fichier, créer des contenus fichiers, images, ou de n'importe quel type.

Mise en oeuvre

Elle est relativement simple : côté Apache, activer le support WebDAV, et créer un hôte virtuel redirigeant toutes les requêtes vers le fichier webdav.php situé à la racine du site. Côté eZ, il suffit, dans le fichier webdav.ini.append.php de positionner le paramètre EnableWebDAV à vrai et de préciser les siteaccess accessibles par webdav dans SiteList. Pour plus de détails, voir le manuel eZ. Il suffit ensuite de se connecter à l'hôte virtuel défini pour voir une liste des siteaccess disponibles et naviguer dans l'arborescence des contenus. Les droits d'accès sont les mêmes que pour une utilisation par http classique, donc si vous essayez d'accéder à des contenus protégés, votre client vous demandera de vous identifier avec un compte actif pour le site.

Par défaut, tous les noeuds sont présentés comme des répertoires, sauf ceux dont un attribut est de type "image", "media" ou "file", qui sont affichés comme des fichiers. Ainsi, si un type de contenu possède un attribut de type image, il apparaîtra dans l'arborescence comme une image. Si le noeud contient plusieurs fichiers, seul le premier sera visible. Tout cela est bien sûr paramétrable.

Créer des contenus

Le fichier upload.ini.append.php permet de paramétrer les actions à effectuer lorsqu'on colle ou déplace des fichier dans l'arborescence, depuis un client webdav. En fonction du type MIME du fichier, on pourra créer directement un contenu ou appeler un gestionnaire spécifique. Voici un exemple de paramétrage:

[CreateSettings]
MimeClassMap[]
MimeClassMap[image]=image
MimeClassMap[video/quicktime]=quicktime
MimeClassMap[application/x-shockwave-flash]=flash
DefaultClass=file

Ici, en fonction du type MIME, eZ créera des contenus de classe image, quicktime ou flash. S'il ne reconnaît pas le type, il créera par défaut un fichier.

On définit ensuite pour chaque classe son attribut qui contiendra le fichier, celui qui contiendra le nom du contenu et la façon dont ce nom sera déterminée:

[image_ClassSettings]
FileAttribute=image
NameAttribute=name
NamePattern=<original_filename_base>

Ici, lors de la création d'une image, son nom, stocké dans l'attribut name, sera le nom du fichier, et le fichier sera stocké dans l'attribut image.

Mais eZ Publish permet d'aller plus loin, et d'associer certains type de fichiers à des gestionnaires (handler) qui s'occuperont de créer le contenu. Par exemple, toujours dans le fichier upload.ini.append.php

MimeUploadHandlerMap[]
MimeUploadHandlerMap[application/vnd.sun.xml.writer]=ezopenofficeupload

Ici, l'upload d'un fichier Open Document Text fera appel à la classe ezopenofficeupload.

Pour créer un gestionnaire spécifique, il suffit de créer une classe étendant eZContentUploadHandler et implémentant une méthode handleFile.

Importer des articles.

eZ fournit une extension, eZODF, fournissant une interface avec le format Open Document Text, qui est la norme internationale en matière de documents contenant du texte formaté. Cette extension permet d'exporter des contenus au format ODT, mais aussi d'en importer, soit en les uploadant, soit en les collant via webdav.

L'import nécessite que les documents respectent un certain formalisme: ils doivent contenir des sections nommées. On définit dans un fichier de paramétrage de l'extension les types de contenus importables, et les liens entre leurs attributs et les sections du document ODT.

Exemple de fichier odf.ini.append.php (extrait)

[ODFImport]
DefaultImportClass=article
RegisteredClassArray[]=article
RegisteredClassArray[]=folder

[article]
DefaultImportTitleAttribute=title
DefaultImportBodyAttribute=body
Attribute[title]=title
Attribute[intro]=intro
Attribute[body]=body
Attribute[image]=image

[folder]
DefaultImportTitleAttribute=name
DefaultImportBodyAttribute=description
Attribute[name]=name
Attribute[short_description]=short_description
Attribute[description]=description

On autorise la création d'articles et de dossiers (folder). Quand on passe un fichier au gestionnaire (par upload ou via webDAV), celui-ci essaie de déterminer le type de contenu à créer en comparant les noms des sections du fichier aux attributs définis dans la configuration. S'il ne trouve pas de correspondance exacte, il créera par défaut un article et mettra le contenu du fichier dans l'attribut body. Ici, un fichier contenant les sections "name", "short_description" et "description" créera un dossier. On peut de cette façon créer des contenus via un traitement de texte, en utilisant des modèles pour respecter le formalisme des sections, avant de les importer dans eZ Publish.

L'extension permet également l'import de documents au format propriétaire et fermé de Microsoft Word (.doc). Les documents sont dans ce cas convertis à la volée au format OpenDocument via une version d'Open Office tournant en tâche de fond sur le serveur. Je n'ai pas testé cette solution, et je pense qu'il est bien plus simple de créer des documents directement en odt plutôt que de multiplier le nombre de conversions entre le document original et sa version dans eZ. (dit autrement : word, ça pue, c'est pas libre !)