Japon, jeux vidéo, Drupal, ... : le blog d'un geek !
Mon blog et mes galeries photo maintenant sur un même site !
J'y parlerai de mes passions : Japon et jeux vidéo principalement, mais du reste aussi.

Télécharger le pack langue française pour TinyMCE avec Drush Make via une requête POST

J'ai décidé de me remettre à écrire de petits articles concernant Drupal, qui est l'outil principal que j'utilise dans mon travail. Ça n'intéressera sûrement pas les mêmes personnes, mais il faudra vous y faire, c'est comme ça.

Commençons par des petits rappels, pour ceux qui ne suivent Drupal que de loin.

(Je vous conseille de suivre les liens pour avoir plus de détails.)

Drush, c'est un projet qui met à disposition tout un tas de lignes de commandes pour agir sur son site Drupal (vider les caches, exécuter du code Javascript, télécharger, installer, désactiver un module, etc.).

Drush Make est un module qui fournit à Drush une nouvelle commande, "make", qui permet de construire un site à partir d'un fichier .make. Ce fichier contient, en gros, la liste des modules, bibliothèques, versions, à télécharger pour construire le site.

TinyMCE est un éditeur de texte riche, qu'on peut installer sur un site Drupal, avec par exemple le module WYSIWYG.

L'objectif de cet article, comme l'indique son titre, est d'ajouter à mon fichier .make ce qu'il faut pour télécharger les fichiers fournissant la langue française à l'éditeur de texte TinyMCE. Ça m'a pris un peu de temps et n'a pas été simple, j'espère que ce qui suit facilitera la tâche à certains...

Ça été compliqué parce que l'archive n'est pas disponible derrière un simple lien de téléchargement : c'est une page avec du Javascript qui envoie une requête POST pour récupérer le fichier (la page de téléchargement de langues de TinyMCE en question) . Drush Make permet de simuler ce comportement, le plus dur était de retrouver les bons paramètres. Voici donc ci-dessous le code que j'ai ajouté à mon fichier .make pour télécharger TinyMCE et son pack français.

; Download TinyMCE library
libraries[tinymce][download][type] = "file"
libraries[tinymce][download][url] = "http://github.com/downloads/tinymce/tinymce/tinymce_3.4.2.zip"
libraries[tinymce][directory_name] = "tinymce"
; TinyMCE French language pack (JS export)
libraries[tinymce_fr][download][type] = "file"
libraries[tinymce_fr][download][request_type] = "post"
libraries[tinymce_fr][download][url] = "http://tinymce.moxiecode.com/i18n/index.php?ctrl=export&act=zip"
libraries[tinymce_fr][download][data] = "la[]=fr&la_export=js&pr_id=7&submitted=Download"
; Force filename so Drush Make unzips it
libraries[tinymce_fr][download][filename] = "tinymce_fr.zip"
; The two following lines are telling drush make to put the archive files in libraries/tinymce/jscripts/tiny_mce
libraries[tinymce_fr][destination] = "libraries/tinymce/jscripts"
libraries[tinymce_fr][directory_name] = "tiny_mce"
; Allow drush make to install librairies[tinymce_fr] inside a non empty directory
libraries[tinymce_fr][overwrite] = 1

Important : si vous ne souhaitez pas lire le détail des lignes ci-dessous, rendez-vous directement à la dernière, qui a une importance particulière.

Les trois lignes commençant par libraries[tinymce] concernent le téléchargement de TinyMCE. Rien de bien compliqué, il s'agit d'un téléchargement standard avec une URL.

Les autres, commençant par libraries[tinymce_fr] concernent la langue française (j'ai choisi d'appeler la bibliothèque "tinymce_fr", vous avez libre choix sur le nom). Voyons-en le détail.

libraries[tinymce_fr][download][type] = "file"

Type de téléchargement : fichier (ça pourrait être git, svn, etc.).

libraries[tinymce_fr][download][request_type] = "post"

Utiliser une requête HTTP de type POST, au lieu du GET habituel. Cela permet d'envoyer des variables en POST, comme le font certains formulaires (et comme le fait la page de téléchargement de la langue française pour TinyMCE).

libraries[tinymce_fr][download][url] = "http://tinymce.moxiecode.com/i18n/index.php?ctrl=export&act=zip"

L'URL vers laquelle envoyer la requête. Constatez qu'elle contient une "query string", faisant passer certaines variables en GET. Ça a son importance.

libraries[tinymce_fr][download][data] = "la[]=fr&la_export=js&pr_id=7&submitted=Download"

Les variables à faire passer dans la requête en POST.

libraries[tinymce_fr][download][filename] = "tinymce_fr.zip"

Par défaut, la fin de l'URL est utilisée pour nommer le fichier. Comme nous avons ici une "query string", il est préférable de nommer explicitement le fichier téléchargé. Entre autres parce que c'est une archive ZIP qu'on veut que Drush Make reconnaisse et décompresse.

libraries[tinymce_fr][destination] = "libraries/tinymce/jscripts"

La destination. Il s'agit là de préciser dans quel répertoire sera posée la bibliothèque décompressée.

libraries[tinymce_fr][directory_name] = "tiny_mce"

C'est le nom du dossier dans lequel sera extraite l'archive. S'il n'est pas fourni, alors le nom de la bibliothèque (ici, "tinymce_fr") sera utilisé.

Constatons que le cumul des deux lignes précédentes demande à extraire l'archive dans libraries/tinymce/jscripts/tiny_mce. Ainsi, tous les fichiers du pack de langue se retrouvent dans l'arborescence de fichiers de TinyMCE, au bon endroit.

libraries[tinymce_fr][overwrite] = 1

Cette ligne, indispensable, ne fonctionnera à l'heure actuelle que si vous appliquez sur Drush Make le patch disponible sur la page suivante : autoriser un projet Drush Make à être installé dans un répertoire non vide.

Car là est le problème : Drush Make n'autorise pas à installer une bibliothèque dans un répertoire non vide, mais c'est exactement ce qu'on a besoin de faire dans ce cas précis : installer le pack de langue à l'intérieur de TinyMCE.

Et voilà ! L'utilisation de ces lignes dans un fichier .make permettra de récupérer dans votre projet Drupal la bibliothèque TinyMCE, et son pack français.

Le code est de plus facilement adaptable pour télécharger d'autres langues en les rajoutant dans la ligne "data" : il faut rajouter des "la[]=XX&" dans la "query string", où XX est le code de la langue affiché sur la page de TinyMCE.

Commentaires

ça a marché pour moi avec la

ça a marché pour moi avec la config suivante :

libraries[kplatforms_tinymce_fr][directory_name] = tinymce
libraries[kplatforms_tinymce_fr][download][type] = get
libraries[kplatforms_tinymce_fr][download][url] = http://www.tinymce.com/i18n3x/index.php%3Fctrl%3Dexport%26act%3Dzip%26la...
libraries[kplatforms_tinymce_fr][overwrite] = TRUE

(voir aussi https://drupal.org/node/1737092)