Changeset 14041 in spip-zone


Ignore:
Timestamp:
Jul 31, 2007, 7:09:12 AM (13 years ago)
Author:
bobcatt@…
Message:
  • version 1.1: Support de la recherche des vignettes locales
  • meilleures integration des documents distants
  • meilleure gestoin des langues
  • update di plugin.xml
Location:
_plugins_/_test_/documents_distants
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_test_/documents_distants/documents_distants.html

    r9939 r14041  
    33       
    44        <label for="document"><:documentsdistants:explicatif:></label>
    5         <textarea name='documents' rows='40' cols='80'>#ENV{documents}</textarea>
     5        <textarea name='documents' rows='30' cols='80'>#ENV{documents}</textarea>
    66       
    77        <br />
    88                <label><:documentsdistants:attribuer:>
    99                <select  name='type_lien'>
    10                 [(#CONFIG{documents_article}|=={oui}|?{<option [(#ENV{type_lien}|=={articles}|?{selected="selected"})] value="articles"><:info_article:></option>})]
    11                 [(#CONFIG{documents_rubrique}|=={oui}|?{<option [(#ENV{type_lien}|=={rubriques}|?{selected="selected"})] value="rubriques"><:info_rubriques:></option>})]
     10                [(#CONFIG{documents_article}|=={oui}|?{<option [(#ENV{type_lien}|=={article}|?{selected="selected"})] value="article"><:info_articles:></option>})]
     11                [(#CONFIG{documents_rubrique}|=={oui}|?{<option [(#ENV{type_lien}|=={rubrique}|?{selected="selected"})] value="rubrique"><:info_rubriques:></option>})]
    1212               
    1313        </label>
    1414       
    1515        <label><:id:><input [value="(#ENV{id})"] type="texte" name="id" /></label>
    16         <label><input type="checkbox" name="retour[]" value="oui" [(#ENV{retour}|?{checked="checked"})]/><:documentsdistants:retourner:></label>       
     16        <label><input type="checkbox" name="vignette" value="oui" [(#ENV{vignette}|=={oui}|?{checked="checked"})] title="<:documentsdistants:alt_vignette:>"/><:documentsdistants:vignette:></label>
     17        <label><input type="checkbox" name="retour" value="oui" [(#ENV{retour}|=={oui}|?{checked="checked"})]/><:documentsdistants:retourner:></label> 
    1718        <input type="submit" name="valider" value="<:bouton_enregistrer:>" />
    1819       
  • _plugins_/_test_/documents_distants/exec/documents_distants.php

    r9939 r14041  
    11<?
    22
    3 function exec_documents_distants(){
     3if (!defined("_ECRIRE_INC_VERSION")) return;
     4
     5function exec_documents_distants()
     6{
    47        global $documents;
    58        global $id;
     
    912
    1013        global $retour;
    11        
    12         $retour[0] =="oui" ? $retour="oui" : ($retour == "oui" ? $retour = "d" : pass);
    13        
     14
     15        $retour = $_POST['retour'];
     16        $vignette = $_POST['vignette'];
     17
     18        $retour =="oui" ? $retour="oui" : $retour = "non";
     19        $vignette =="oui" ? $vignette="oui" : $retour = "non";
     20
    1421        if ($valider)
    15                 {
    16                 $erreur=importer_document($documents,$type_lien,$id,$retour);
    17                 }
     22        {
     23                $erreur=importer_document($documents,$type_lien,$id,$vignette,$retour);
     24        }
    1825       
    1926        $commencer_page= charger_fonction('commencer_page', 'inc');
     
    3138        echo gros_titre(_T('documentsdistants:importer'));
    3239       
    33         echo recuperer_fond('documents_distants',Array('documents'=>$documents,'id'=>$id,'type_lien'=>$type_lien,'retour'=>$retour));
     40        echo recuperer_fond('documents_distants',Array('documents'=>$documents,'id'=>$id,'type_lien'=>$type_lien,'retour'=>$retour,'vignette'=>$vignette));
    3441        fin_cadre_formulaire();
    3542       
     
    3946
    4047
    41 function importer_document($documents_distants,$type_lien,$id,$retour)
    42         {
     48function importer_document($documents_distants,$type_lien,$id,$vignette,$retour)
     49{
    4350        include_spip('inc/autoriser');
    4451       
     
    5663        if (!$autoriser) {return 'pasdroits';}
    5764        include_spip('inc/distant');
     65        include_spip('inc/action');
     66        include_spip('inc/ajouter_documents');
    5867        include_spip('inc/indexation');
    59        
    60        
    61        
    62         foreach ($tableau as $documents_distants){
    63                
    64                 if ($infos=recuperer_infos_distantes(trim($documents_distants))){
    65                
    66                
    67                
    68                         $request='INSERT INTO  `spip_documents` (`fichier`,`titre`,`taille`,`date`,`largeur`,`distant`,`hauteur`,`mode`,`id_type`) VALUES ("'.$documents_distants.'","'.$infos['titre'].'","'.$infos['taille'].'",NOW(),"'.$infos['largeur'].'","oui","'.$infos['hauteur'].'","document","'.$infos['id_type'].'") ;
    69                           ';
    70                          
    71                          spip_query($request); // il doit y avoir moyen de se servir de  spip_mysql_insert(), si quelqu'un sait comment ...
    72                         $dernier_document = spip_insert_id();
    73                                        
    74                         spip_query('INSERT INTO  `spip_documents_'.$type_lien.'` VALUES ("'.$dernier_document.'","'.$id.'")');
    75                        
    76                         marquer_indexer('spip_documents', $dernier_document);
     68
     69        $dir_ftp = determine_upload();
     70
     71        foreach ($tableau as $documents_distants)
     72        {
     73                $docs_actifs = array();
     74                inc_ajouter_documents_dist(     $documents_distants,            /* $source = http://.../ */
     75                                                basename($documents_distants),  /* $nom_envoye = 'nimportequoi.pdf' */
     76                                                $type_lien,                     /* $type_lien = 'article' | 'rubrique' */
     77                                                $id,                            /* $id_lien = id_article */
     78                                                'distant',                      /* $mode = 'distant' */
     79                                                '',                             /* $id_document = '' (car c'est le doc principal, pas la vignette */
     80                                                $docs_actifs);                  /* $actifs = array() */
     81
     82       
     83
     84                if ( $vignette == "oui" )
     85                {
     86                        $dernier_document = $docs_actifs[0];
     87                        /* idealement, cela se passe ainsi */
     88                        /* mais comme il est impossible de copier un fichier dont la destination est ../ */
     89                        /* et bien ca ne fonctionne pas */
     90                        /* d'après _fil_ cela est corrigé pour la version 1.9.3 */
     91                        /* affaire a suivre donc */
     92                        /* En attendant, je code ma propre fonction */
     93
     94                        $fichier_vignette = $dir_ftp ."/". basename($documents_distants);
     95
     96                        importer_vignette(      $fichier_vignette,              // $source = tmp/upload/nimportequoi.jpg
     97                                                basename($documents_distants),  // $nom_envoye = 'nimportequoi.pdf'
     98                                                $type_lien,                     // $type_lien = 'article' | 'rubrique'
     99                                                $id,                            // $id_lien = id_article
     100                                                'vignette',                     // $mode = 'distant'
     101                                                $dernier_document);             // $id_document = $dernier_document (car c'est le doc principal, pas la vignette
    77102                }
    78                
     103        }
     104
     105        if($retour=="oui")
     106        {
     107                include_spip('inc/headers');
     108                $type_lien == 'article' ?  $url = './?exec=articles&id_article='.$id: pass ;
     109                $type_lien == 'rubrique' ? $url = './?exec=naviguer&id_rubrique='.$id : pass;
     110                redirige_par_entete($url); //pas sur
     111        }
     112}
     113
     114/*
     115 * Cette fonction se charge de trouver une vignette pour le document distant indiqué
     116 * la vignette est une image de type .jpg, .png ou .gif (dans cet ordre).
     117 * par exemple pour spip.pdf les vignettes cherchees sont spip.jpg, jpip.png et spip.gif
     118 * une fois trouvée, la vignette est copié dans le répertoire IMG/*extension* en prenant soin
     119 * de ne pas écraser une image existante (copier_vignette() )
     120 * Puis on appelle inc_ajouter_documents_dist() pour intégrer la vignette.
     121 *
     122 * Note : la fonction "deplacer_fichier_upload()" ne supporte pas les "../" dans la destiantion
     123 * du fichier, d'ou la creation de la fonction copier_vignette().
     124 * le passage de parametre du nom de fichier avec "../" permet a copier_document() de ne pas
     125 * appeler la fonction deplacer_fichier_upload() et du meme coup, de ne pas terminer le
     126 * script prematurément.
     127 * Pour etre complet ce hack necessite la mise a jour du nom du fichier pour la vignette concernee
     128 * car sinon, des "../" trainent dans le nom et empeche l'affichage.
     129*/
     130function importer_vignette($source, $nom_envoye, $type_lien, $id_lien, $mode, $id_document)
     131{
     132        /* liste des extensions de vignettes a chercher dans l'upload */
     133        $array_ext = array("jpg","png","gif");
     134
     135        $dir_ftp = determine_upload();
     136
     137        preg_match(",\.([^.]+)$,", $nom_envoye, $match);
     138        $ext = corriger_extension(strtolower($match[1]));
     139        $fichier = basename($source);
     140        $fichier_nu = substr($fichier,0,strrpos($fichier,'.'));
     141
     142        foreach ( $array_ext as $extension_vignette )
     143        {
     144                $fichier_vignette = $dir_ftp.'/'.$fichier_nu .'.'.$extension_vignette;
     145                if (@file_exists($fichier_vignette) )
     146                {
     147                        $doc_actifs = array();
     148                        $fichier_dest = copier_vignette($extension_vignette,$fichier,$fichier_vignette);
     149                        if ( strlen($fichier_dest) == 0 )
     150                        {
     151                                spip_log("erreur dans la copie de la vignette: $fichier_vignette");
     152                                break;
     153                        }
     154
     155                        inc_ajouter_documents_dist(     $fichier_dest,          // $source = IMG/$ext/fichier_trouve
     156                                                        basename($fichier_dest),// $nom_envoye
     157                                                        $type_lien,             // $type_lien = 'article' | 'rubrique'
     158                                                        $id,                    // $id_lien = id_article
     159                                                        'vignette',             // $mode = 'distant'
     160                                                        $id_document,           // $id_document = $dernier_document (car c'est le doc principal, pas la vignette
     161                                                        $docs_actifs);          // $actifs = array()
     162
     163                        if ( count($docs_actifs) != 1 )
     164                        {
     165                                spip_log("erreur, pas de document actifs pour la vignette");
     166                                break;
     167                        }
     168
     169                        $dernier_document = $docs_actifs[0];
     170                        $q = spip_query("SELECT id_vignette FROM spip_documents WHERE id_document = '$dernier_document'");
     171                        if ( !$row = spip_fetch_array($q))
     172                        {
     173                                spip_log("erreur dans la restitution de l'id_vignette");
     174                                break;
     175                        }
     176                        $derniere_vignette = $row['id_vignette'];
     177                        if ( $derniere_vignette == '' )
     178                        {
     179                                spip_og("pas de vignette dans le resultat");
     180                                break;
     181                        }
     182                        $fichier_dest = substr($fichier_dest,3,strlen($fichier_dest)-3); // nom du fichier dans les "../" devant
     183                        spip_log("mise a jour : id: $derniere_vignette fichier: $fichier_dest");
     184                        spip_query("UPDATE spip_documents SET fichier = '$fichier_dest' WHERE id_document = '$derniere_vignette'");
     185
     186                        // copier l'image
     187                        // copier_vignette($ext,,$
     188                        // appeler la fonction officielle
     189                        break;
     190
    79191                }
    80        
    81         if($retour=="oui") {
    82                
    83                 include_spip('inc/headers');
    84                 $type_lien == 'articles' ?  $url = './?exec=articles&id_article='.$id: pass ;
    85                 $type_lien == 'rubriques' ? $url = './?exec=naviguer&id_rubrique='.$id : pass;
    86                 $type_lien == 'breves'   ?      $url = './?exec=breves_voir&id_breve='.$id : pass;
    87                
    88                
    89                 redirige_par_entete($url); //pas sur
    90                 }
    91         }
     192        }
     193}
     194
     195/*
     196 * je pompe le code de inc/getdocument.php:copier_document() mais en corrigeant le souci
     197 * de la destination qui contient ../
     198*/
     199function copier_vignette($ext, $orig, $source)
     200{
     201        $dir = creer_repertoire_documents($ext);
     202        $dest = ereg_replace("[^.a-zA-Z0-9_=-]+", "_",
     203                        translitteration(ereg_replace("\.([^.]+)$", "",
     204                                                      ereg_replace("<[^>]*>", '', basename($orig)))));
     205
     206        // ne pas accepter de noms de la forme -r90.jpg qui sont reserves
     207        // pour les images transformees par rotation (action/documenter)
     208        $dest = preg_replace(',-r(90|180|270)$,', '', $dest);
     209
     210        // Si le document "source" est deja au bon endroit, ne rien faire
     211        if ($source == ($dir . $dest . '.' . $ext))
     212                return $source;
     213
     214        // sinon tourner jusqu'a trouver un numero correct
     215        $n = 0;
     216        while (@file_exists($newFile = $dir . $dest .($n++ ? ('-'.$n) : '').'.'.$ext));
     217
     218        return copy($source, $newFile) ? $newFile : '';
     219
     220}
    92221
    93222?>
  • _plugins_/_test_/documents_distants/lang/documentsdistants_fr.php

    r9876 r14041  
    44
    55$GLOBALS[$GLOBALS['idx_lang']] = array(
    6 'importer'              =>      "Importer massivement des documents distants",
    7 'explicatif'    =>      "Notez ici la liste des documents distants que vous souhaitez importer, chaque document distant est séparé par un point virgule",
    8 'attribuer'             =>      'Attribués à',
    9 'retourner'             =>'Y retourner',
     6'importer'      =>"Importer massivement des documents distants",
     7'explicatif'    =>"Notez ici la liste des documents distants que vous souhaitez importer, chaque document distant est séparé par un point virgule",
     8'attribuer'     =>'Attribués à',
     9'retourner'     =>'Y retourner',
    1010'pasdroits'     =>'Vous ne pouvez pas joindre des documents à cet objet',
     11'alt_vignette'  =>'Ajouter les vignettes à partir de l\'upload local',
     12'vignette'      =>'Vignettes locales',
    1113'completer'     =>"Vous n'avez pas complétez le formulaire"
    1214);
  • _plugins_/_test_/documents_distants/plugin.xml

    r12246 r14041  
    33        Importer massivement des documents distants
    44        </nom>
    5         <auteur>        <!-- Auteur du plugin -->
    6         Maïeul Rouquette (maieulrouquette @ tele2.fr)
     5        <auteur>
     6_ 1.0: Maïeul Rouquette (maieulrouquette @ tele2.fr)
     7_ 1.1: BobCaTT (bobcatt CHEZ menfin POINT net)
    78_ &#169; 2007 - Licence GPL
    89        </auteur>
    910        <version>
    10         1.0
     11        1.1
    1112        </version>
    1213        <etat>
     
    1718        N&#233;c&#233;ssite SPIp 1.9.2
    1819        </description>
    19        
    2020
    21         <prefix> 
     21        <prefix>
    2222        documents_distants
    2323        </prefix>
Note: See TracChangeset for help on using the changeset viewer.