Formulaire upload

Ce plugin permet d’uploader des documents depuis l’espace public

Objectifs

Ce plugin permet d’ajouter un formulaire dans l’espace public pour uploader et gérer des fichiers. A priori, il peut se greffer sur tous types d’objets SPIP : articles, auteurs, ....

L’upload repose sur la librairie jQuery Multifile qui permet :

  • Envoi de plusieurs fichiers en une seule passe
  • De limiter le nombre ou les types de fichiers à placer en ligne
Attention : Si vous cherchez uniquement à autoriser vos visiteurs à ajouter des documents sur les forums d’article, utilisez directement la fonction native proposée dans SPIP 3.

Aperçu de l’interface

Il est possible de personnaliser la css du formulaire.

Configuration

Une fois le plugin activé, vous pouvez le configurer :

  • Type d’extensions de fichiers autorisés (vide = toutes les extensions autorisées par SPIP)
  • Nombre de fichiers autorisés en un seul upload
  • Afficher ou non des raccourcis d’insertion du type <imgXX> ....

Sur la version SPIP 3, il est aussi possible de déterminer

  • Nombre de fichiers autorisés par utilisateur (quota)
  • La possibilité de gérer les titres des documents

Mise en œuvre dans vos squelettes

Il suffit d’ajouter la balise

 #FORMULAIRE_UPLOAD

Le formulaire dépendra du contexte, s’il est placé dans une boucle articles, il uploadera les documents dans l’article et non pas au niveau de l’auteur.

Hors d’une boucle et sans paramètres, le formulaire prends en argument l’id_auteur de l’auteur connecté

La syntaxe complète est

 #FORMULAIRE_UPLOAD{type_objet,id_objet,fond_documents}

Avec :

  • type_objet auteur par exemple
  • id_objet pour l’id_auteur ou autre élément
  • fond_documents fond situé dans le répertoire /formulaires à utiliser pour l’affichage des documents (personnalisable)

Autorisations

Les autorisations sont les autorisations natives de SPIP. Il est possible de les affiner via le fichier autorisation (spip3)

Retours

Le plugin est sur la zone. N’hésitez pas à le faire évoluer.

Discussion

24 discussions

  • Bonjour

    merci pour ce plugin.
    Bientôt un portage sur spip 4.0.0 ?

    Répondre à ce message

  • Bonjour,

    je l’ai installé sur un Spip 3.2.
    J’ai mis le code sur une noisette, pour un article, via une composition. Pour que l’article récupère des images.
    Le code originel #FORMULAIRE_UPLOAD n’affichait rien.
    J’ai mis ça pour avoir le formulaire affiché (avec le N° de l’article)
    #FORMULAIRE_UPLOADarticle,3510,inc-upload_documents

    Rq : « fond_documents » n’existe pas apparemment dans le dossier du plugin (erreur spip affichée), j’ai mis « inc-upload_documents » à la place
    Le formulaire s’affiche, mais j’ai un « error 404 » après chaque opération effectuée (qui semble prise en compte quand même)

    D’autre part, ce formulaire ne s’affiche que pour un rédacteur connecté, par pour les simples visiteurs c’est ça ?
    possible de le faire s’afficher pour qu’un visiteur envoi des fichiers ? et ce sans que le visiteur puissent modifier/supprimer les fichiers déjà envoyés...

    Si c’est pas possible, je crois qu’on peut activer le chargement d’images via les commentaires de l’article, mais je voulais éviter car alors ça active les images pour tous les commentaires, alors que je cherche une fonction pour permettre l’upload d’images par des visiteurs seulement sur des articles précis.
    Sinon, je pourrais aussi tenter via Formidable, mais là me semble qu’on ne peut pas envoyer les fichiers chargés en docs joints d’un article.

    merci

    Répondre à ce message

  • Bonjour

    Pour afficher la numérotation des titres dans le champ « gérer les titres des documents », j’ai mis value=« #TITRE** » (aide de chankalan sur irc) sinon la numérotation était supprimée.

    Selon le contexte, l’étoile double n’est peut être pas conseillé... https://www.spip.net/fr_article4376.html

    Répondre à ce message

  • Quel est le code qui permet de charger un fichier (.jpg .png .gif) directement dans le portfolio sans recalculer la page ?

    Répondre à ce message

  • Je pense avoir trouvé ce qui concerne « supprimer »
    Dans formulaireupload.css
    J’ai mis un hover pour qu’on ait l’impressions qu’il se passe qq chose
    .fupld .choix:hover {background-color: yellow;}

    Dans inc-upload_documents.html

    <div class='choix'>
    <input type="checkbox" name="supprimer[]" id="supprimer_[(#ID_DOCUMENT)]_#ENV{objet}_#ENV{id_objet}" class="checkbox" value="#ID_DOCUMENT" title="<:formupload:doc_delete:>" />
    <label for="supprimer_[(#ID_DOCUMENT)]_#ENV{objet}_#ENV{id_objet}"><:formupload:remove:></label>
    </div> 

    comment transformer le label supprimer en submit
    pour ne pas, par après, avoir à cliquer sur enregistrer.
    BUT : supprimer le document en un seul clic ? Merci

    Répondre à ce message

  • 2

    Salut,
    J’ai perdu mon accès SVN, mais sachez que le plugin fonctionne parfaitement en 3.2, après avoir changé la borne.

    Répondre à ce message

  • 2

    Bonjour,

    Je cherche à créer un Intranet et donner la possibilité aux membres (rédacteurs) d’uploader des documents sur leurs articles via l’espace public.
    Si ce plugin fonctionne très bien pour un un administrateur, le formulaire ne s’affiche pas pour les rédacteurs, ce qui devrait normalement fonctionner si je ne m’abuse.
    Merci de m’aiguiller dans mes recherches.

    • Laëtitia

      Bonjour GUX,

      as tu avancé dans tes recherches ? J’ai testé à peu près toutes les propositions trouvées sur la Spip zone, forum spip,... et rien n’y faite. Même avec #FORMULAIRE_JOINDRE_DOCUMENT rien ne se passe

      Laëtitia

    • Bonjour,

      Je me joins à vous pour le mẽme souci.
      Le formulaire ne s’affiche que pour les admins ?

      nicolas

    Répondre à ce message

  • laëtitia

    Bonjour,

    Dans une zone restreinte (rubrique=19) de mon site le rédacteur identifié peut créer un article public dans une rubrique (n°77) avec texte, documents, logo et modifier si besoin.

    Pour cela j’ai créé un modèle intégré dans un article de la rubrique19 , je colle ici :

             #CACHE{0}
      
        <BOUCLE_art(ARTICLES){id_auteur=#SESSION{id_auteur}}{id_rubrique=76}{0,1}> 
       
    		<div class='ajax'>#FORMULAIRE_EDITER_ARTICLE_PUBLIC{#ID_ARTICLE, #ID_RUBRIQUE, #SELF}</div>
       		
    <BOUCLE_lesdocs(ARTICLES) {id_article}>
        #SESSION_SET{statut,1comite,Ominirezo} #FORMULAIRE_UPLOAD
        </BOUCLE_lesdocs>						
    			
    #SESSION_SET{statut,1comite,Ominirezo} 	#FORMULAIRE_EDITER_LOGO{article,#ID_ARTICLE}
    	
        </BOUCLE_art>
    
    <--! si pas d'article j'en créé un -->
        #FORMULAIRE_EDITER_ARTICLE_PUBLIC{new,76, #SELF}
        <//B_art>
     

    Je remarque une chose, si il y a 1 document dans le portfolio du rédacteur il peut en charger d’autres sur sa page, mais quand la page n’ en a pas encore alors l’ajout à l’article ne se fait pas, le document s’installe dans la médiathèque et n’est lié à rien.

    je vois que dans le fichier formulaireupload_autorisations.php, le rédacteur est bien autorisé à joindre un document

    merci pour vos corrections ou informations sur ce souci, j’avoue être bloquée

    Répondre à ce message

  • Dans le fichier Upload, il y a cette ligne :

    <form action="#ENV{action}#formulaire_upload" method="post" enctype="multipart/form-data">

    Elle me créait une erreur 404...
    Je l’ai changé :

    et c’est OK. Mais si vous pouvez m’expliquer pourquoi !!!

    Répondre à ce message

  • Bonjour j’essaie ce plugin sous SPIP 3.1.1
    mais le html calculé ne donne que ça :

    <div class="formulaire_spip formulaire_upload" id="formulaire_upload_auteurs_1">
    <br class='bugajaxie' />
    </div>	

    merci de m’aider :-)

    Répondre à ce message

  • 5

    Pour info, la fonctionnalité est disponible nativement en SPIP3 dans le plugin medias de SPIP :

    Il faut utiliser le #FORMULAIRE_JOINDRE_DOCUMENT, en y précisant à quel objet éditorial attacher le document.
    Par exemple :

    <div class="ajax">
    #FORMULAIRE_JOINDRE_DOCUMENT{new,article,#ID_ARTICLE}
    </div>

    On peut aussi associer des documents sans les attacher à aucun objet éditorial :

    <div class="ajax">
    #FORMULAIRE_JOINDRE_DOCUMENT
    </div>
    • la seule (et grosse différence pour moi, en tous cas sur le site sur lequel je bosse actuellement) c’est que la gestion des titre, descriptif et crédits ne sont pas permises par ce formulaire, il faut jouer avec plusieurs formulaires pour y arriver, et c’est pas simple :)

      mais j’y arriverai !

    • Il faut utiliser le #FORMULAIRE_JOINDRE_DOCUMENT, en y précisant à quel objet éditorial attacher le document.

      Pour ne pas oublier je l’écris ici :

      Pour que le formulaire #FORMULAIRE_JOINDRE_DOCUMENT fonctionne correctement, il ne faut pas oublier que la classe CSS none-js doit avoir la propriété CSS suivante display:none;. Par défaut, cette classe est définie dans le fichier CSS prive/themes/spip/clear.css qui a priori n’est pas chargé dans l’espace public.

      Donc, il faut soit attribuer le display:none; à la classe soi-même, soit charger la feuille CSS.

    • Faire attention à l’ordre des paramètres donnés. La bonne syntaxe est la suivante :

      <div class="ajax">
      #FORMULAIRE_JOINDRE_DOCUMENT{new,#ID_ARTICLE,article}
      </div>
    • Serait-il possible dans la prochaine mise à jours de rendre le plugin actif sur un formulaire personnalisé ?

       #FORMULAIRE_JOINDRE_DOCUMENT_PERSO{new,#ID_ARTICLE,article}

      En attendant j’ai mis ceci à la ligne 60 dans le pipelines (uploadhtml5_pipelines.php)

      if ($flux['args']['form'] == 'joindre_document' || $flux['args']['form'] == 'joindre_document_prive')

      Julien.

    • Pour résumer les message de Ben et Beurt, concernant le formulaire d’upload natif à SPIP. On peut l’intégrer dans un squelette avec le code suivant :

      -  Pour uploader des documents depuis l’espace public sans les rattacher à un objet.

      <div class="ajax">
      #FORMULAIRE_JOINDRE_DOCUMENT
      </div>

      -  Pour uploader des documents depuis l’espace public en les rattachant à un objet (un « article » dans cet exemple).

      <div class="ajax">
      #FORMULAIRE_JOINDRE_DOCUMENT{new,#ID_ARTICLE,article}
      </div>

      Pour que le formulaire d’upload de fichier natif s’affiche correctement, ajouter dans la feuille CSS perso

      .none-js {
      	display:none;
      }

      A noter que le formulaire sans argument #FORMULAIRE_JOINDRE_DOCUMENT est visible pour tout le monde, y compris les visiteurs non authentifiés, mais la balise avec arguments (pour rattacher le document à un article par exemple), n’est visible que des administrateurs.
      L’usage de cette balise est donc assez limité, heureusement le plugin Formulaire Upload permet d’aller plus loin.

    Répondre à ce message

  • 2

    Bonjour,
    Mon site doit avoir un formulaire d’upload sans utilisateurs connecter, (sans auteurs),
    Comment forcer le plugin à fonctionner sans être loger ?

    Merci

    Warning : Illegal string offset ’id_auteur’ in ..../www/plugins/auto/formulaireupload/v1.0.5/formulaires/upload.php on line 20

    • Salut, ce n’est pas pris en charge par le plugin, mais comme indiqué dans la documentation, tu peux utiliser la fonctionnalité d’upload des documents dans les forums.

      Si vous cherchez uniquement à autoriser vos visiteurs à ajouter des documents sur les forums d’article, utilisez directement la fonction native proposée dans SPIP 3.

      Sinon, tu peux aussi y arriver en mettant les mains dans le code à l’aide de l’API CVT Upload : http://plugins.spip.net/cvtupload.html

    • La balise native SPIP #FORMULAIRE_JOINDRE_DOCUMENT te permet d’uploader un document depuis l’espace public sans être authentifié.

      Sinon, tu peux assouplir les autorisations dans le plugin Formulaire Upload. Dans l’exemple ci-dessous, on permet à un visiteur (statut 6forum) d’uploader des fichiers (alors que normalement il faut au moins être rédacteur) :

      Modifier le fichier formulaire upload_autorisations.php qui se trouve à la racine du répertoire du plugin, et remplacer la ligne :

      return  autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt);

      par la ligne

      if ($qui['statut'] == '6forum'){
      		return true;
      	}
      	else {
      	return  autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt);
      	}

    Répondre à ce message

  • Teenoo

    Chouette petit plug pour un intranet :) Tite question ! Possibilité de permettre d’adjoindre des mots-clés ? Facile à intégrer ?

    Répondre à ce message

  • 2
    Spipmalion

    Lorsque je ne suis pas connecté, j’obtiens ceci à la place du formulaire :

    Warning : Illegal string offset ’id_auteur’ in \plugins\formulaire_upload_3_0\formulaires\upload.php on line 20

    • Tu peux corriger le plugin ? À la ligne en question rajouter un test d’existence (isset) ou ignorer l’erreur avec un @.

    • Spipmalion

      J’ai fait la modif et testé en local sur le trunk et sur mon site local, l’erreur n’apparaît plus
      On me demande un login/mdp pour pouvoir la commit
      J’ai fait une demande sur la liste rezo

    Répondre à ce message

  • 2

    D’après ce que j’en ai compris, ce plugin permet de faire 3 choses :

    1. il affiche les documents
    2. il permet d’en supprimer
    3. il permet d’en rajouter

    Mais ça, seulement si l’auteur a un droit de modification sur la rubrique.

    J’ai un cas d’usage où ces formulaires ne sont montrés que dans des zones d’accès restreint. Mais si l’auteur n’est pas en plus admin (ou admin restreint) de la rubrique, alors rien ne s’affiche.

    Est-ce que je peux modifier le plugin pour que ça affiche systématiquement la liste (1), mais 2) et 3) seulement si y’a les autorisations pour ?

    • Hop, si tu as déjà le patch, poste le quelque part pour qu’on y jette un œil. Sinon, envoie le commit et on gueulera après ;)

    • Spipmalion

      Bonjour RealET,

      Est-ce que tu as pu ajouter les modifs pour les rubriques restreintes au plugin ?

    Répondre à ce message

  • Est-ce que ce plugin pourrait être utilisé pour remplacer le formulaire d’ajout de document dans les forums publics, car il n’est possible de joindre qu’un seul document en réaction au forum ?

    Répondre à ce message

  • Pour les nuls, en complément à Ben et Beurt méthode 2 (méthode 1 ? qd à celle de g0uZ ?!...)
    « Pour que le formulaire #FORMULAIRE_JOINDRE_DOCUMENT fonctionne correctement » :
    ajouter dans /inclure/head.html

    [(#REM) 1'. complément CSS formulaire_joindre_document]
    <link rel="stylesheet" href="prive/themes/spip/clear.css" type="text/css" />

    et dans article.html :

    <div class="none-js; ajax display:none;">
    #FORMULAIRE_JOINDRE_DOCUMENT{new,#ENV{id_article},'article','auto'} <!--et non {new,article,#ID_ARTICLE} -->
    </div>

    mais on n’a pas ainsi accès à la médiathèque depuis le site public ...

    Répondre à ce message

  • 1

    En SPIP3, pour ceux qui aimerait avoir la possibilité d’uploader un fichier dans un formulaire CVT :

    coté PHP, ajouter dans votre fonction traiter() :

    	    // Gérer les pièces jointes
                include_spip('inc/joindre_document');
                $files = joindre_trouver_fichier_envoye();
                if (is_array($files)) {     
                    $ajouter_documents = charger_fonction('ajouter_documents', 'action');
                    $nouveaux_doc = $ajouter_documents($id_document, $files, "solution", $id_solution, 'document');                
                }

    ou « id_solution » / solution à l’identifiant auquel vous souhaitez voir rattaché votre document.

    Coté HTML, ajouter dans votre formulaire :

    <input type="file" name="fichier" />
    <input type="hidden" name="joindre_upload" value="1" />

    L’attribut name de l’input de type file est libre.

    Vous pourrez donc uploader un fichier via votre formulaire CVT et l’avoir (ou non, modulo une petite adaptation) attaché a votre objet éditorial perso.

    • Delorimier

      Comment faire pour les logos d’articles svp ?

    Répondre à ce message

  • bonjour,
    Quel balise faut coller dans l’espace privé pour afficher ce formulaire ?? j’ai essayé

    <?php include_once("/opt/nursit/sys/home/nursit/matrice/public/4.2/07/spip/ecrire/balise/formulaire_.php"); if ($lang_select = "fr") $lang_select = lang_select($lang_select); inserer_balise_dynamique(balise_FORMULAIRE__dyn(arguments_balise_dyn_depuis_modele('FORMULAIRE_UPLOAD')), array('', '', '', '', 'fr', '1')); if ($lang_select) lang_select(); ?>

    mais marche pas.....Merci de votre aide

    Répondre à ce message

  • Bonjour,

    Apparemment il n’est pas possible de déposer des documents dans sa rubrique pour un rédacteur.

    Une idée ??? J’ai essayé de surcharger les autorisations mais je patine un peut...

    Merci de votre aide et pour ce plugin

    Répondre à ce message

  • Si vous voulez uploader sur un autre type d’objet que les objets classiques de spip, faut aller dans inc-upload_document.html et rajouter dans la boucle (DOCUMENTS documents_liens) le critère optionellement qu’il vous faudrait {id_chats?} par exemple.

    Répondre à ce message

  • 1

    Bonjour,
    Je veux cumulé ce plugin avec formidable, puisque avec formidable impossible de faire un upload...Mais je ne sais pas quoi faire pour que le fichier upload et mon formulaire partent ensemble dans le même mail. Est ce que quelqu’un l’a dèja utilisé ?? Merci de votre aide

    • Salut,

      Si tu souhaites permettre l’upload de fichier depuis un formulaire Formidable, tu n’est pas sur la bonne piste avec le plugin Formulaire upload...

      Tu devrais plutôt poser ta question dans le forum de Formidable.

      ++

    Répondre à ce message

  • 1

    J’ai un souci avec la suppression est-ce normal ? Je désespère de voir un autre message que « 0 document(s) supprimé(s) ».

    merci pour ce plugin !

    • en effet, il y avait un bug sur la suppression (dans la configuration sans la gestion du titre.)
      c’est corrigé avec la version 1.0.4.

    Répondre à ce message

  • 2

    Bonjour,

    Je pense avoir détecté un bug lorsqu’on upload avec ce plugin des documents qui ne sont pas des images.

    Pour être sûr, j’utilise un spip 3.0.4 tout frais, avec pour seul plugin actif Formulaire Upload
    1.0.3 (svn 66424). J’appelle le formulaire par la balise [(#FORMULAIRE_UPLOAD{article,1})]

    Tout marche super tant qu’il s’agit d’images.

    Par contre si on upload un autre type de fichier (odt par exemple), ça ne marche qu’une seule fois. Après, le bouton ’téléverser’ ne répond plus, on ne peut plus rien uploader.

    Dans ce cas-là, je remarque aussi une bizarrerie côté html, comme si p.boutons sortait de la div englobante .formulaire_spip

    Un plugin très pratique sinon, qui me fait gagner beaucoup de temps dans mes formulaires.
    Un grand merci pour cette contribution !

    • [Résolu]
      Dans le fichier formulaires/inc-upload_documents.html, ligne 40-44,
      j’ai remplacé ça :

      		[(#EXTENSION|match{jpg|gif|png}|oui)
      		<div class="abbrimg">...
                       ]</div>
      		[(#EXTENSION|match{jpg|gif|png}|oui)
      		<div class="abbrdoc">...
                       ]</div>

      par ça :

      		[(#EXTENSION|match{jpg|gif|png}|oui)
      		<div class="abbrimg">...
                       </div>]
      		[(#EXTENSION|match{jpg|gif|png}|non)
      		<div class="abbrdoc">...
                       </div>]

      et ça corrige le problème.
      Puis-je vous laisser commiter le correctif ?

    • merci pour la solution, mais il vaut mieux que tu prennes le temps de la commiter toi-même ; et si c’est la première fois que tu commites, il faut bien une première fois :)

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom