Un futur module : création d'aperçus des fichiers PDF attachés à la volée

Un bout de code qui deviendra prochainement un module : la création d'aperçus des fichiers PDF attachés à la volée. L'idée est que lorsqu'on utilise un module d'image qui associe une (ou plusieurs) image à un node, une image de ce type soit générée automatiquement à partir des fichiers PDF attachés au node. Il nous faut donc :
  1. Que les fichiers attachés soient activés pour au moins un type de contenu
  2. Qu'un module d'image soit activé. Pour l'instant, seul le module Image attach fonctionne, mais le module sera compatible avec CCK.
  3. Disposer d'un serveur dédié, seul à même de nous permettre l'utilisation de Ghostscript, qui nous permettra de générer une image à partir d'un fichier PDF. Cela marche aussi avec les fichiers EPS.
Voici une première version du code, qu'il faudra à l'évidence nettoyer et améliorer, mais il fonctionne : function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { switch ($op) {  case 'insert':  case 'update':  if ($node->files) {  $files = $node->files;  foreach ($files as $f) {   $f = (object)$f;   if ($f->filemime == "application/pdf") {   $file = $f;   break;   }  }   $file = $_SERVER['DOCUMENT_ROOT'].'/'.$file->filepath; // the original file   $path = substr($file, 0, strrpos($file,'/'));   $filename = substr($file, strrpos($file,'/')+1);   $filename = substr($filename, 0, strrpos($filename,'.')).'.jpg';   $file2 = file_create_filename($filename, $path);      $esc_file = str_replace(' ', '\ ', $file); // escape for gs command   $esc_file2 = str_replace(' ', '\ ', $file2);   $result1 = @exec("gs -q -dNOPAUSE -dBATCH -sDEVICE=jpeg -sOutputFile=$esc_file2 $esc_file 2>&1");   @chmod($file2, 0664);      if (isset($node->iid)) node_delete($node->iid); // delete old thumb   $image = image_create_node_from($file2, t('Image').' '.$node->title, ''); // create image node   $node->iid = $image->nid; // save image_node attachment   if (isset($node->iid)) {   db_query("DELETE FROM {image_attach} WHERE nid=%d", $node->nid);   if ($node->iid > 0) {    db_query("INSERT INTO {image_attach} (nid, iid) VALUES (%d, %d)", $node->nid, $node->iid);   }   }   watchdog('File thumbnail', l('node/'.$node->iid, 'node/'.$node->iid));  }  break; } } Avec ce hook, lorsqu'on enregistre un node, un node image est créé et attaché au node à partir du fichier PDF attaché ! Après un peu de travail, nous mettrons à disposition ce module, bien entendu !