ARNO*

Geek dilettante habitant une belle et grande propriété sur la Côte d’améthyste

  • À l’aide, @SPIP : j’essaie de convertir un de mes plugins qui permet d’uploader un fichier via un formulaire CVT dans l’espace privé, pour qu’il fonctionne avec BigUp.

    J’arrive maintenant à obtenir l’interface, et le glisser-déposer d’un gros fichier semble se faire jusqu’au bout. Mais à la fin de l’upload (avec la prévisuation, la vignette et la barre de progression), ça se contente de faire disparaître la barre de progression et ça remplace le bouton « Annuler » par le bouton « Enlever ».

    Mais l’action voulue (traiter l’image dans la partie traiter du formulaire) n’est pas du tout déclenchée.

    Mais je ne trouve ni exemple d’utilisation de BigUp en dehors des éléments natifs de l’interface, dans un autre plugin par exemple, ni documentation détaillée de ce qu’il faut faire côté PHP.

    Est-ce qu’il y a un /formulaire quelque part dans l’espace SPIP, par exemple dans un plugin, qui me permettrait de comprendre comment je dois procéder ?

    • Oui. Et notamment ceci que je ne comprends pas :

      Pour recréer le tableu $_FILES tel que le crée habituellement PHP, il faut connaître la valeur de l’attribut name de la balise input.

      Cette valeur est transmise avec le token calculé, et est inscrite dans le chemin de cache des fichiers reçu. Cela permet, à partir d’un fichier cache donné, de recréer le $_FILES qui lui correspondait.

      Apparemment, je ne récupères pas de valeur $_FILES dans mon _traiter ($_FILES qui fonctionne en mode « non bigup ») . Est-ce qu’il y a quelque chose à faire pour récupérer ce tableau calculé à partir du token, et si oui : quoi ?

    • Non plus. J’avais déjà ajouté :

              if (!$_FILES) {
                      $_FILES = isset($GLOBALS['HTTP_POST_FILES']) ? $GLOBALS['HTTP_POST_FILES'] : array();
              }

      qui ne m’apporter rien (je ne vois pas d’infos concernant le fichier installé ni dans $_FILES ni dans $_GLOBALS).

    • Ah… il faut ajouter

      $valeurs['_bigup_rechercher_fichiers'] = true;

      dans la partie _charger du formulaire.

      C’est écrit de manière un peu critique dans le README :

      Au chargement d’un formulaire CVT, si la clé _bigup_rechercher_fichiers est présente, le plugin Bigup se chargera de retrouver les fichiers déjà chargés pour ce formulaire et d’ajouter leur liste, pour chaque champ concerné du formulaire, dans l’environnement.

    • Grrrr, ça marchait ça marche plus, et je n’arrive pas à voir pourquoi.

      Quand je valide mon formulaire (après l’upload via Bigup), je me cogne un vilain écran d’erreur :

      Fatal error: Uncaught Error: [] operator not supported for strings in /home/clients/d674084bbe9c0c511a4685e13dee1efb/web/fabre/plugins-dist/bigup/inc/Bigup/Files.php:163 Stack trace: #0 /home/clients/d674084bbe9c0c511a4685e13dee1efb/web/fabre/plugins-dist/bigup/inc/Bigup.php(93): Spip\Bigup\Files::integrer_fichier('upload_fond_hot...', Array) #1 /home/clients/d674084bbe9c0c511a4685e13dee1efb/web/fabre/plugins-dist/bigup/bigup_pipelines.php(169): Spip\Bigup\Bigup->reinserer_fichiers(Array) #2 /home/clients/d674084bbe9c0c511a4685e13dee1efb/web/fabre/ecrire/inc/utils.php(199): bigup_formulaire_receptionner(Array) #3 /home/clients/d674084bbe9c0c511a4685e13dee1efb/web/fabre/tmp/cache/charger_pipelines.php(640): minipipe('bigup_formulair...', Array) #4 /home/clients/d674084bbe9c0c511a4685e13dee1efb/web/fabre/ecrire/inc/utils.php(265): execute_pipeline_formulaire_receptionner(Array) #5 /home/clients/d674084bbe9c0c511a4685e13dee1efb/web/fabre/ecrire/public/aiguiller.php(212): pipeline('formulaire_rece...', Array) #6 /home/clients in /home/clients/d674084bbe9c0c511a4685e13dee1efb/web/fabre/plugins-dist/bigup/inc/Bigup/Files.php on line 163

      [EDIT] Corrigé : il faut que le formulaire soit dans une classe .ajax (donc formulaire Ajax).

    • En revanche, il me reste un truc que je ne trouve pas : comment je fais pour que le formulaire se valide dès que ça a terminé l’upload ?

      Ça le fait pour les logos et pour les documents joints, mais je ne trouve pas comment faire pour mon propre formulaire. Parce que pour l’instant, j’ai le barre d’upload, puis ça affiche la petit vignette, le nom du fichier et son poids, mais il faut encore que le valide le formulaire (« Téléverser »).

    • ça peut être fait en surchargeant l’appel de bigup de la façon suivante :

      $('input.bigup').bigup({}, {
              complete: function(){
                      $('.formulaire_bigform form').submit();
              }
      }).on('bigup.fileSuccess', function(){
              setTimeout("ajaxReload('docs_ressource')", 2000);
      });

      (dans cet exemple qui se joue en page publique, la 2ème partie permet de recharger la liste des docs affichés)

    • En tout cas, merci les amis, c’est vraiment une belle bête ce Big-Up. J’avais hâte de réussir à faire tourner mon propre formulaire avec. Surtout que c’est précisément un endroit où j’ai généralement besoin d’installer des gros fichiers…