Changeset 987


Ignore:
Timestamp:
01/29/09 04:56:22 (11 years ago)
Author:
kent1
Message:

Gros update sur le formulaire d'import en masse de documents

Location:
plugins_spip/esd_import_sons
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • plugins_spip/esd_import_sons/formulaires/importer_son.html

    r981 r987  
    2121                                </li>]
    2222                                [(#INCLURE{fond=formulaires/inc-select_sons}{content=#ENV{content}}|?{'',' '})
    23                                 <li><:esdimport:uploader_son_repertoire{repertoire=[(#CONFIG{esdimport_rep_upload}|sinon{'files/'})]}:></li>]
     23                                <li><:esdimport:uploader_son_repertoire{repertoire=#CONFIG{esdimport/repertoire_upload}}:></li>]
    2424                                <li class="importer_son_rubrique[ (#ENV**{erreurs}|table_valeur{importer_sons_rubrique}|oui)erreur]">
    2525                                        <label for="sons_rubrique"><:esdimport:choix_rubrique:></label>
  • plugins_spip/esd_import_sons/formulaires/importer_son.php

    r984 r987  
    4444 */
    4545function formulaires_importer_son_traiter_dist(){
     46        include_spip('inc/ajouter_documents');
    4647        $message = "";
    4748       
     
    5152        if($liste_fichier != null){
    5253                $importer_son = charger_fonction('recuperer_id3','inc');
    53                 include_spip('getid3/getid3');
     54               
    5455                $message = _T('esdimport:creation_articles');
    5556                $message .= '<ul>';
     57               
    5658                foreach($liste_fichier as $item){
    5759                        $message .= "<li>";
    58                         $id3 = $importer_son($item);
    5960
    6061                        //Retrouver le nom du fichier
     62                        $poids = filesize($item);
    6163                        $filename = basename($item);
    62                         spip_log("filename=$filename");
     64                       
     65                        preg_match(",^(.*)\.([^.]+)$,", $filename, $match);
     66                        @list(,$titre_nom_fichier,$ext) = $match;
     67                       
     68                        spip_log("ESD_IMPORT : filename = $filename");
    6369                        $type = 'article';
    6470                       
    6571                        // traiter le titre proprement (sans underscore et en utf-8)
    6672                        // si pas de titre on prend l'ensemble du nom du fichier sans l'extension
    67                         $titre = utf8_encode($id3['titre']);
     73                        $id3 = $importer_son($item);
     74                        $titre = utf8_encode($id3['title']);
     75                        $genre = $id3['genre'] ? $id3['genre'] : _T('getid3:non_defini');
     76                        $comments = $id3['comments'] ? $id3['comments'] : _T('getid3:non_defini');
     77                        $nom_rubrique = utf8_encode($id3['album']);
     78                        $auteur = utf8_decode(htmlspecialchars_decode($id3['artist']));
     79                       
     80                        // Si le titre n'est pas disponible dans les id3
     81                        // On utilise le nom du fichier sans son extension
    6882                        if(!$titre){
    69                                 $titre = substr($filename, 0, -4);
    70                         }
     83                                $titre = $titre_nom_fichier;
     84                        }
     85                       
     86                        // On le nettoie un peu
    7187                        $titre = ereg_replace('_',' ',$titre);
    72                         $titre = utf8_encode($titre);
    7388                       
    7489                        $message .= "<strong>"._T('getid3:title')." :</strong> $titre<br />";
    7590                        $message .= "<strong>"._T('getid3:son_nom_fichier')." :</strong> $item<br />";
    76                         $message .= "<strong>"._T('getid3:genre')." :</strong>".$id3['genre'] ? $id3['genre'] : _T('getid3:non_defini') ."<br />";
    77                         $message .= "<strong>"._T('getid3:comment')." :</strong>".$id3['comment'] ? $id3['comment'] : _T('getid3:non_defini') ."<br />";
     91                        $message .= "<strong>"._T('getid3:genre')." :</strong> $genre<br />";
     92                        $message .= "<strong>"._T('getid3:comment')." :</strong> $comment<br />";
    7893                       
    7994                        if(!$rubrique){
    8095                                // Trouver le nom de la rubrique qui servira aussi de sous-titre
    81                                 $nom_rubrique = utf8_encode($id3['album']);
    8296                                $nom_rubrique = ereg_replace('_',' ',$nom_rubrique);
    8397                                $message .= "<strong>Rubrique :</strong> $nom_rubrique<br />";
    8498                        }
    85                        
    86                         // Trouver le ou les auteurs en UTF-8 et les séparer
    87                         // pour créer un auteur spip par personne ...
    88                         // La chaine sera laissée telle quelle en surtitre
    89                         $auteur = utf8_encode($id3['artist']);
    90                         $auteur = trim(ereg_replace('with',' ',$auteur));
    91                         $message .= "<strong>Auteurs :</strong><br />";
    92                         // D'abord on tente de séparer les auteurs séparés par des &
    93                         $auteurs = explode('&',$auteur);
    94                         if(count($auteurs)<2){
    95                                 $auteurs = explode('+',$auteur);
     99
     100                        if ($auteur){
     101                                // Trouver le ou les auteurs en UTF-8 et les séparer
     102                                // pour créer un auteur spip par personne ...
     103                                // La chaine sera laissée telle quelle en surtitre
     104                                $auteur = trim(ereg_replace('with',' ',$auteur));
     105                                $auteur = trim(ereg_replace('MTM :',' ',$auteur));
     106       
     107                                // D'abord on tente de séparer les auteurs séparés par des &
     108                                $auteurs = explode('& ',$auteur);
    96109                                if(count($auteurs)<2){
    97                                         $auteurs = explode(',',$auteur);
    98                                 }
    99                         }
    100 
    101                         if(trim($nom_rubrique) == ''){
    102                                 $nom_rubrique = 'uncategorized';
    103                         }
    104 
     110                                        $auteurs = explode('+',$auteur);
     111                                        // Puis par des virgules
     112                                        if(count($auteurs)<2){
     113                                                $auteurs = explode(',',$auteur);
     114                                        }
     115                                }
     116                        }
     117                       
     118                        $message .= "<strong>Auteurs : </strong>";
     119                       
    105120                        if(!$id_rubrique){
    106121                                $id_rubrique = sql_getfetsel('id_rubrique','spip_rubriques',"titre LIKE '$nom_rubrique'");
     
    112127                        }
    113128
     129                        // On vérifie (dans le cas ou un fichier identique existe) si l'article en question est dans la bonne rubrique
     130                        // Si oui : on ne fait rien et on supprime le fichier de la liste
     131                        // Si non : on crée un autre article en lui liant l'ancien document afin de ne pas ajouter deux fois le document
     132                       
     133                        // Lors de la copie de document, spip renomme le fichier
     134                        // $file_recherche devrait être le nom du fichier final
     135                        $file_recherche = nom_fichier_final($filename,$ext);   
     136                        $doc_existe = sql_getfetsel("id_document","spip_documents","fichier LIKE '%$file_recherche' AND taille='$poids'");
     137                        //$doc_existe = sql_getfetsel("id_document","spip_documents","REPLACE('fichier','%/','') = '$filename'");
     138                        spip_log("doc_existe ? = $doc_existe");
     139                        //return array('editable' => true);
     140                        if($doc_existe>0){
     141                                spip_log("ESD_IMPORT : Le document existait déjà");
     142                                $id_article_tmp = sql_getfetsel("id_objet","spip_documents_liens","id_document = $doc_existe AND objet = 'article'");
     143                                $rub_doc_tmp = sql_getfetsel("id_rubrique","spip_articles","id_article=$id_article_tmp");
     144                                if($rub_doc_tmp != $id_rubrique){
     145                                        $copie_document = true;
     146                                        spip_log("ESD_IMPORT: l'article existe déjà donc on ne le recrée pas, on crée juste une copie");
     147                                }else{
     148                                        $id_article = $id_article_tmp;
     149                                }
     150                        }
     151                       
    114152                        //Création de l'article si inexistant
    115                         $id_article = sql_getfetsel('id_article','spip_articles',"titre LIKE '$titre'");
    116153                        if(!$id_article){
    117                                 $accepter_forum = substr(lire_meta('forums_publics'),0,3);
    118                                 $id_secteur = sql_getfetsel("id_secteur","spip_rubriques","id_rubrique=$id_rubrique");
    119                                 $id_article = sql_insertq('spip_articles',array('titre'=>$titre,'surtitre'=>$nom_rubrique,'soustitre'=>$auteur,'id_rubrique'=>$id_rubrique,'accepter_forum'=>$accepter_forum,'id_secteur'=>$id_secteur,'statut'=>'publie','date'=>'NOW()'));
     154                                spip_log('ESD_IMPORT : Pas de id_article ... on en crée un');
     155                                $valeurs['accepter_forum'] = substr(lire_meta('forums_publics'),0,3);
     156                                $row = sql_getfetsel("id_secteur,lang","spip_rubriques","id_rubrique=$id_rubrique");
     157                                $lang_rub = $row['lang'];
     158
     159                                $lang = _request('choix_langue');
     160                               
     161                                if($lang){
     162                                        $choisie = 'oui';
     163                                }
     164                                // La langue a la creation : si les liens de traduction sont autorises
     165                                // dans les rubriques, on essaie avec la langue de l'auteur,
     166                                // ou a defaut celle de la rubrique
     167                                // Sinon c'est la langue de la rubrique qui est choisie + heritee
     168                                else{
     169                                        if ($GLOBALS['meta']['multi_articles'] == 'oui') {
     170                                                lang_select($GLOBALS['visiteur_session']['lang']);
     171                                                if (in_array($GLOBALS['spip_lang'],
     172                                                explode(',', $GLOBALS['meta']['langues_multilingue']))) {
     173                                                        $lang = $GLOBALS['spip_lang'];
     174                                                        $choisie = 'oui';
     175                                                }
     176                                       
     177                                        }
     178                                        if (!$lang) {
     179                                                $choisie = 'non';
     180                                                $lang = $lang_rub ? $lang_rub : $GLOBALS['meta']['langue_site'];
     181                                        }
     182                                }
     183                               
     184                                $valeurs['titre'] = $titre;
     185                                $valeurs['surtitre'] = $nom_rubrique;
     186                                $valeurs['soustitre'] = $auteur;
     187                                $valeurs['id_rubrique'] = $id_rubrique;
     188                                $valeurs['id_secteur'] = $row['id_secteur'];
     189                                $valeurs['lang'] = $lang;
     190                                $valeurs['langue_choisie'] = $choisie;
     191                                $valeurs['statut'] = 'publie';
     192                                $valeurs['date'] = 'NOW()';
     193                               
     194                                $id_article = sql_insertq('spip_articles',$valeurs);
     195                                spip_log("ESD_IMPORT : Création de l'article $id_article avec les données $valeurs");
     196                               
    120197                                if(lire_config('esdimport/geoloc') == 'on'){
    121198                                        $geodatas = sql_fetsel('lat,lonx,zoom','spip_gis',"id_rubrique=$id_rubrique");
     
    126203                                        }
    127204                                }
    128                         }
    129                        
    130                         // On associe le mot clé choisi dans la conf si cela a été activé
    131                         if($id_article && (lire_config('esdimport/associe_mot') != null)){
    132                                 $id_mot = lire_config('esdimport/associe_mot');
    133                                 sql_insertq("spip_mots_articles", array('id_article'=> $id_article,'id_mot' => $id_mot));
    134                         }
    135                        
    136                         // Utilisation des auteurs des id3 comme réels auteurs de l'article
    137                         // à cocher dans la configuration
    138                         if(lire_config('esdimport/auteur_id3') == 'on'){
    139                                 // Ajout du ou des auteurs à l'article
    140                                 foreach($auteurs as $auteur_solo){
    141                                         $auteur_solo = trim($auteur_solo);
    142                                         if($auteur_solo == ''){
    143                                                 $message .= "- <strong>Pas d'auteur</strong><br />";
    144                                         }
    145                                         else{
    146                                                 $id_auteur = sql_getfetsel('id_auteur','spip_auteurs',"nom LIKE '$auteur_solo'");
    147                                                 if(!$id_auteur){
    148                                                         $id_auteur = sql_insertq('spip_auteurs',array('nom'=>$auteur_solo,'statut'=>'6forum'));
    149                                                         $message .= "- $auteur_solo<br />";
     205                                // On associe le mot clé choisi dans la conf si cela a été activé
     206                                if($id_article && (lire_config('esdimport/associe_mot') != null)){
     207                                        $id_mot = lire_config('esdimport/associe_mot');
     208                                        sql_insertq("spip_mots_articles", array('id_article'=> $id_article,'id_mot' => $id_mot));
     209                                }
     210                                // Utilisation des auteurs des id3 comme réels auteurs de l'article
     211                                // à cocher dans la configuration
     212                                if(lire_config('esdimport/auteur_id3') == 'on'){
     213                                        // Ajout du ou des auteurs à l'article
     214                                        foreach($auteurs as $auteur_solo){
     215                                                $auteur_solo = trim($auteur_solo);
     216                                                if($auteur_solo == ''){
     217                                                        $message .= "<strong>Pas d'auteur</strong><br />";
    150218                                                }
    151219                                                else{
    152                                                         $message .= "- $auteur_solo (existait deja)<br />";
    153                                                 }
    154                                                 sql_insertq('spip_auteurs_articles',array('id_auteur'=>$id_auteur,'id_article'=>$id_article));
    155                                         }
    156                                 }
    157                         }
    158                         // Sinon on associe comme auteur à l'article l'auteur connecté en cours
    159                         else{
    160                                 $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
    161                                 sql_insertq('spip_auteurs_articles',array('id_auteur'=>$id_auteur,'id_article'=>$id_article));
     220                                                        $id_auteur = sql_getfetsel('id_auteur','spip_auteurs',"nom LIKE '$auteur_solo'");
     221                                                        if(!$id_auteur){
     222                                                                $id_auteur = sql_insertq('spip_auteurs',array('nom'=>$auteur_solo,'statut'=>'6forum'));
     223                                                                $message .= "$auteur_solo<br />";
     224                                                        }
     225                                                        else{
     226                                                                $message .= "$auteur_solo (existait deja)<br />";
     227                                                        }
     228                                                        sql_insertq('spip_auteurs_articles',array('id_auteur'=>$id_auteur,'id_article'=>$id_article));
     229                                                }
     230                                        }
     231                                }
     232                                // Sinon on associe comme auteur à l'article l'auteur connecté en cours
     233                                else{
     234                                        $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
     235                                        sql_insertq('spip_auteurs_articles',array('id_auteur'=>$id_auteur,'id_article'=>$id_article));
     236                                }
    162237                        }
    163238                       
    164239                        //Ajout du document original à l'article
    165240                        $ajouter_documents = charger_fonction('ajouter_documents','inc');
    166                         $fichier_existant = sql_getfetsel('id_document','spip_documents',"titre LIKE '$titre'");
    167                         if(!$fichier_existant){
     241                        if(!$doc_existe){
    168242                                $id_document_original = $ajouter_documents($item,$filename,$type,$id_article, 'document', 0,&$actifs);
    169243                                $c = array(
     
    173247                                revision_document($id_document_original, $c);
    174248                        }
     249                        else if($copie_document == true){
     250                                sql_insertq("spip_documents_liens",array('objet'=> $id_article,'id_objet'=>$id_article,'id_document'=>$doc_existe));
     251                                $id_document_original = $doc_existe;
     252                        }
    175253                        else{
    176                                 spip_log('le fichier existe deja');
     254                                $id_document_original = $doc_existe;
     255                                spip_log('ESD_IMPORT : le fichier existait deja');
    177256                        }
    178257
     
    181260                        $pattern_autres_ext = substr($item, 0, -4).'.*';
    182261                        $files = glob($pattern_autres_ext);
    183                         foreach($files as $file){
    184                                 if($file != $item){
    185                                         $filename = basename($file);
    186                                         spip_log('nom fichier = '.$filename);
    187 
    188                                         $fichier_existant = sql_getfetsel('id_document','spip_documents',"titre LIKE '$titre'");
    189                                         $fichier_existant = sql_getfetsel('id_document','spip_documents',"fichier LIKE '%$filename'");
    190                                         if(!$fichier_existant){
    191                                                 $id_document = $ajouter_documents($item,$filename,$type,$id_article, 'document', 0,&$actifs);
    192                                                 $c = array(
    193                                                         'titre'=>$titre
    194                                                 );
    195                                                 revision_document($id_document, $c);
    196                                                 $message .= "Il existe aussi $file<br />";
    197                                         }
    198                                         else{
    199                                                 spip_log('le fichier existe deja');
    200                                         }
    201                                         if($id_document>0){
    202                                                 supprimer_fichier($file);
     262                        if($files){
     263                                foreach($files as $file){
     264                                        spip_log("ESD_IMPORT : Vérification des autres fichiers du même nom d'une autre extension");
     265                                        if($file != $item){
     266                                                preg_match(",^(.*)\.([^.]+)$,", $file, $match);
     267                                                @list(,$titre_nom_fichier,$ext) = $match;
     268                                               
     269                                                $poids = filesize($file);
     270                                                $filename = basename($file);
     271                                                spip_log('ESD_IMPORT : on a trouvé : '.$filename);
     272                                               
     273                                                // Lors de la copie de document, spip renomme le fichier
     274                                                // $file_recherche devrait être le nom du fichier final
     275                                                $file_recherche = nom_fichier_final($filename,$ext);   
     276                                                $fichier_existant = sql_getfetsel("id_document","spip_documents","fichier LIKE '%$file_recherche' AND taille='$poids'");
     277       
     278                                                if(!$fichier_existant){
     279                                                        $id_document = $ajouter_documents($file,$filename,$type,$id_article, 'document', 0,&$actifs);
     280                                                        $c = array(
     281                                                                'titre'=>$titre
     282                                                        );
     283                                                        revision_document($id_document, $c);
     284                                                        $message .= "Il existe aussi $file<br />";
     285                                                }
     286                                                else if($copie_document == true){
     287                                                        sql_insertq("spip_documents_liens",array('objet'=> $id_article,'id_objet'=>$id_article,'id_document'=>$fichier_existant));
     288                                                        $id_document = $fichier_existant;
     289                                                        spip_log("ESD_IMPORT : le fichier (dans un autre format) existait deja mais c'est une copie de document vers une autre rubrique");
     290                                                }
     291                                                else{
     292                                                        $id_document = $fichier_existant;
     293                                                        spip_log('ESD_IMPORT : le fichier (dans un autre format) existait deja');
     294                                                }
     295                                                if($id_document>0){
     296                                                        $supp = supprimer_fichier($file);
     297                                                        if(!$supp){
     298                                                                $message .= _T('esdimport:suppression_impossible',array('fichier'=>$file));
     299                                                        }else{
     300                                                                $message .= _T('esdimport:suppression_fichier',array('fichier'=>$file));
     301                                                                spip_log("ESD_IMPORT : suppression de $file");
     302                                                        }
     303                                                }
    203304                                        }
    204305                                }
    205306                        }
    206307                        if($id_document_original>0){
    207                                 supprimer_fichier($item);
    208                                 spip_log("suppression de $item");
    209                         }
     308                                $suppitem = supprimer_fichier($item);
     309                                if(!$suppitem){
     310                                        $message .= _T('esdimport:suppression_impossible',array('fichier'=>$item));
     311                                }else{
     312                                        $message .= _T('esdimport:suppression_fichier',array('fichier'=>$item));
     313                                        spip_log("ESD_IMPORT : suppression de $item");
     314                                }
     315                        }
     316                        $url = generer_url_entite($id_article,'article');
     317                        $message .= _T('esdimport:url_article',array('url'=>$url)).'<br />';
    210318                        $message .= "</li>";
     319                        unset($id_article);
    211320                }
    212321                $message .= "</ul>";
     
    216325        }
    217326
    218         return array('message_ok' => $message);
     327        return array('message_ok' => $message, 'editable' => true);
    219328}
    220329
     
    267376   return ($min+lcg_value()*(abs($max-$min)));
    268377}
     378
     379
     380/**
     381 * Donne le nom du fichier final lorsqu'il sera passé par la méthode d'upload de spip
     382 *
     383 * @param string $orig = nom du fichier original
     384 * @param string $ext = extension du fichier
     385 * @return string = nom final complet (basename)
     386 */
     387function nom_fichier_final($orig,$ext){
     388        $orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
     389        $dest = preg_replace("/[^._=-\w\d]+/", "_",
     390                translitteration(preg_replace("/\.([^.]+)$/", "",
     391                        preg_replace("/<[^>]*>/", '', basename($orig)))));
     392        $ext = corriger_extension(strtolower($ext));
     393        $dest = $dest . '.' . $ext;
     394        return $dest;
     395}
    269396?>
  • plugins_spip/esd_import_sons/lang/esdimport_fr.php

    r982 r987  
    66                'icone_import' => 'Importer les Medias',
    77                'titre_page_esd_import' => 'Module d\'import des medias',
    8                 'uploader_son_repertoire' => 'Aucun fichier sonore n\'est disponible. Veuillez en uploader dans le r&eacute;pertoire ad&eacute;quat.',
     8                'uploader_son_repertoire' => 'Aucun media n\'est disponible. Veuillez en uploader dans le r&eacute;pertoire ad&eacute;quat : "@repertoire@".',
    99                'importer_son_titre' => 'Importation de medias',
    1010                'pas_autorise' => 'Vous n\'&ecirc;tes pas autoris&eacute; &agrave; acc&eacute;der &agrave; cette page',
     
    1414                'liste_sons_dispo' => 'Liste des medias disponibles :',
    1515                'creation_articles' => '<p>Un ou plusieurs articles ont été créés.</p>',
    16        
     16                'suppression_fichier' => '<p>Le fichier "@fichier@" a &eacute;t&eacute; supprim&eacute; du r&eacute;pertoire temporaire.</p>',
     17                'suppression_impossible' => '<p>Il est impossible de supprimer le fichier "@fichier@" du dossier temporaire.</p><p>Veuillez v&eacute;rifier les droits du r&eacute;pertoire et des fichiers.',
     18                'url_article' => '<a href="@url@">Url de l\'article.</a>',
    1719       
    1820                // Formulaire de configuration (CFG)
  • plugins_spip/esd_import_sons/plugin.xml

    r981 r987  
    11<plugin>
    22        <nom> <!-- Nom du plugin -->
    3         Import sons ESD
     3        Import medias ESD
    44        </nom>
    55        <auteur>        <!-- Auteur du plugin -->
     
    77        </auteur>
    88        <version>
    9         0.1
     9        0.2
    1010        </version>
    1111        <etat>
     
    2323        esdimport
    2424        </prefix>
     25        <fonctions>
     26                esdimport_fonctions.php
     27        </fonctions>
    2528        <pipeline>
    2629                <nom>ajouter_boutons</nom>
Note: See TracChangeset for help on using the changeset viewer.