Changeset 16909 in spip-zone


Ignore:
Timestamp:
Nov 17, 2007, 10:32:31 PM (12 years ago)
Author:
renato@…
Message:

rewrote the ajax code to avoid using an id, in order to allow multiple upload form in a page;
new jquery plugin upload_attach;
added argument type: #FORMULAIRE_UPLOAD{type,fond} where type is the object to which the document will be joint;
the form now post also the type and id, in order to create the right context when the form is received via ajax;
maybe now it is worth to use the hash to secure the action

Location:
_plugins_/_dev_/formulaire_upload
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_dev_/formulaire_upload/balise/formulaire_upload.php

    r16165 r16909  
    1717// http://doc.spip.org/@balise_FORMULAIRE_UPLOAD_stat
    1818function balise_FORMULAIRE_UPLOAD_stat($args, $filtres) {
    19         if(!$args[5] || !preg_match(",\w+,",$args[5]))
    20                 $args[5] = "upload";
     19        if(!isset($args[5]) || !preg_match(",article|breve|rubrique|syndic|forum|auteur,",$args[5]))
     20                $args[5] = "";
     21        if(!$args[6] || !preg_match(",\w+,",$args[6]))
     22                $args[6] = "upload";
     23               
    2124        return $args;
    2225}
     
    2528// http://doc.spip.org/@balise_FORMULAIRE_UPLOAD_dyn
    2629function balise_FORMULAIRE_UPLOAD_dyn(
    27         $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic, $fond
     30        $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic, $type, $fond
    2831) {
    2932
     
    3639        if ($id_rubrique > 0 AND ($id_article OR $id_breve OR $id_syndic))
    3740                $id_rubrique = 0;
    38         foreach (array('id_article', 'id_breve', 'id_rubrique', 'id_syndic', 'id_forum') as $o) {
    39                 if ($x = intval($$o)) {
    40                         $ids[$o] = $x;
    41                         $id = $x;
    42                         $type = str_replace('id_', '', $o);
    43                 }
    44         }
    4541
    4642        if (!$proprietaire = intval($GLOBALS['auteur_session']['id_auteur']))
    4743                return false;
    4844
     45        if($type) {
     46                if($type=="auteur")
     47                        $ids['id_auteur'] = $proprietaire;
     48                else if($x = intval(${"id_".$type})) {
     49                        $ids['id_'.$type] = $x;
     50                        $id = $x;       
     51                }
     52        } else
     53                foreach (array('id_article', 'id_breve', 'id_rubrique', 'id_syndic', 'id_forum') as $o) {
     54                        if ($x = intval($$o)) {
     55                                $ids[$o] = $x;
     56                                $id = $x;
     57                                $type = str_replace('id_', '', $o);
     58                        }
     59                }
    4960
    5061        if (!$type) {
     
    94105        }
    95106
     107        $script_hidden = array();
     108        foreach($ids as $t => $id)
     109                $script_hidden[] = $t."=".$id;
     110        $script_hidden = "?".join("&",$script_hidden);
     111
    96112        return array('formulaires/'.$fond, 0,
    97113
  • _plugins_/_dev_/formulaire_upload/formulaires/upload.html

    r16512 r16909  
    1 <div class="formulaire_spip formulaire_upload"  id="formulaire_upload">
     1<div class="formulaire_spip formulaire_upload">
    22
    33<form action="#ENV{url}#formulaire_upload" method="post" enctype="multipart/form-data"><div>
  • _plugins_/_dev_/formulaire_upload/upload_zone.html

    r13655 r16909  
    2424
    2525[<script type="text/javascript" src="(#CHEMIN{javascript/jquery.MultiFile.js})"></script>
     26][<script type="text/javascript" src="(#CHEMIN{javascript/jquery.upload_attach.js})"></script>
    2627]
    2728</head>
     
    9798<script type='text/javascript'><!--
    9899if (window.jQuery && jQuery.fn.ajaxForm) {
    99 function upload_attach (re) {
    100         jQuery('#formulaire_upload>form')
     100        //options
     101        //-url (string)
     102        //-callback (function)
     103        var options = {
     104                url: '#URL_PAGE{mini_formulaire_upload}',
     105                callback: function() {
     106                        load_zone_documents(); // recharge la partie du milieu
     107                        // si on reattache les evenements, remettre les crayons
     108                        if (window.cQuery)
     109                                cQuery(".crayon:lt(1000)",this).initcrayon();
     110                }
     111        };
    101112
    102         // changer l'action : pas indispensable mais permet d'eviter la lenteur du
    103         // recalcul total de la page, qui provoque en plus un rechargement
    104         // des javascripts etc. dans l'iframe.
    105         .attr('action', '#URL_PAGE{mini_formulaire_upload}')
    106 
    107         .ajaxForm({
    108                 'beforeSubmit': function(formData, jqForm, options){
    109                         $('#formulaire_upload')
     113        jQuery('.formulaire_upload')
     114        .upload_attach(options)
     115        // et la pagination
     116        .each(function() {
     117                var self = this;
     118                $('.pagination a',self)
     119                .click(function(){
     120                        var r = ($(this).attr('href')||'').match(/[?&;]debut_docs=([0-9]+)/);
     121                        r = r ? r[1] : 0;
     122                        $(self)
    110123                        .addClass('ajaxloading')
    111124                        .css({'opacity': 0.5});
    112                         return true;
    113                 },
    114                 'success': function(e){
    115                         var h;
    116                         if (h = $('<iframe><\/iframe>').html(e).find('#formulaire_upload').html()) {
    117                                 $('#formulaire_upload')
    118                                 .html(h)
    119                                 .removeClass('ajaxloading')
    120                                 .css({'opacity':1.0});
    121                                 upload_attach(true);
    122                                 load_zone_documents(); // recharge la partie du milieu
    123                         }
    124                         else
    125                                 alert('bug !');
    126                 }
     125                        $.get(
     126                                '#URL_PAGE{mini_formulaire_upload}&debut_docs='+r,
     127                                function(c) {
     128                                        $(self)
     129                                        .removeClass('ajaxloading')
     130                                        .css({'opacity': 1.0})
     131                                        .html(
     132                                                $('<iframe>').html(c).find('.formulaire_upload').html()
     133                                        ).
     134                                        upload_attach(options);
     135                                }
     136                        );
     137                        return false;
     138                });
    127139        });
    128 
    129         // si on reattache les evenements, remettre les crayons
    130         if (re && window.cQuery)
    131                 cQuery("#formulaire_upload .crayon:lt(1000)").initcrayon();
    132 
    133         // si multifile est la, on l'utilise (trop bien)
    134         if (jQuery.fn.MultiFile)
    135         $('#formulaire_upload>form input[@type=file]').MultiFile({
    136                 max: 5,
    137                 STRING: {'remove': 'x', 'selected': '$file'}
    138         });
    139 
    140         // et la pagination
    141         $('#formulaire_upload .pagination a')
    142         .click(function(){
    143                 var r = ($(this).attr('href')||'').match(/[?&;]debut_docs=([0-9]+)/);
    144                 r = r ? r[1] : 0;
    145                 $('#formulaire_upload')
    146                 .addClass('ajaxloading')
    147                 .css({'opacity': 0.5});
    148                 $.get(
    149                         '#URL_PAGE{mini_formulaire_upload}&debut_docs='+r,
    150                         function(c) {
    151                                 $('#formulaire_upload')
    152                                 .removeClass('ajaxloading')
    153                                 .css({'opacity': 1.0})
    154                                 .html(
    155                                         $('<iframe>').html(c).find('#formulaire_upload').html()
    156                                 );
    157                                 upload_attach(true);
    158                         }
    159                 );
    160                 return false;
    161         });
    162 
    163 };
    164 upload_attach(false);
    165140}
    166141// --></script>
Note: See TracChangeset for help on using the changeset viewer.