Le hack qui sauve un lapin

Contexte :

  • Drupal 6.26
  • Webform 6.x-3.18

Problématique : Le site sur lequel je travaille actuellement doit permettre à des gens du monde entier de s’enregistrer pour participer à un concours de chant et d’uploader des fichiers de formats divers. Pour cela, la première étape est déjà d’obliger les gens à s’inscrire sur le site pour permettre d’avoir un identifiant unique pour chacun. Je fais ensuite intervenir le module Webform qui me sert à construire mon formulaire de manière très complète mais qui ne permet cependant pas d’utiliser un token pour modifier le file path. Ce qui m’aurait permis de créer automatiquement un répertoire d’upload unique pour chaque utilisateur. Par défaut, c’est sites/default/files/webform/ ; éventuellement je peux créer des sous-répertoires, mais pas de manière dynamique. Donc là, j’ai un problème.

Solution : Après quelques recherches et la lecture de nombreux sujets sur les forums Drupal, il s’avère que, faute de développeur dévoué à la cause, ça fait au moins 3 ans et demi que cette demande d’évolution spécifique est en attente. Heureusement dans le même thread, il y a mon sauveur : dzaretsky. Comme il m’a fait gagner du temps et réduit grandement la chute de mes cheveux, je partage son petit bout de code.

Dans /components/files.inc, ajoutez les lignes suivantes dans la fonction _webform_validate_file(..) :
global $user;
$ext_path = ($user->name ? ('/'.$user->name.'/') : '');

Ensuite, retrouvez la ligne suivante pour la modifier ainsi. Il y a juste un petit quelque chose à rajouter à la fin normalement :
$upload_dir = file_directory_path() . '/webform/'. $component['extra']['savelocation'] . $ext_path;

Et là, la magie s’opère.