Changeset 62476 in spip-zone for _plugins_/getID3


Ignore:
Timestamp:
Jun 13, 2012, 3:48:54 PM (7 years ago)
Author:
kent1@…
Message:

On améliore nos pipelines

On ajoute une static pour éviter de repasser dans le goulot plusieurs fois.

On utilise document_modifier au lieu d'une requete sql

On ajoute quelques explications

Location:
_plugins_/getID3/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/getID3/trunk/getid3_pipelines.php

    r62472 r62476  
    1818 */
    1919function getid3_post_edition($flux){
    20         $id_document = $flux['args']['id_objet'];
    21         $son_modif_id3 = array("mp3");
    22         $son_recup_id3 = array("mp3","ogg","flac","aiff","aif","wav","m4a","oga");
    23         $extensions_vignettes = array("png","gif","jpg");
    24         $conf_id3 = lire_config('getid3/reecriture_tags',array());
    25         $document_orig = sql_fetsel('*','spip_documents','id_vignette='.intval($id_document));
    26        
    27         if($flux['args']['operation'] == 'ajouter_document'){
    28                 $document = sql_fetsel("*", "spip_documents","id_document=".intval($id_document));
    29                 $extension = $document['extension'];
    30                 /**
    31                  * Récupération automatique des infos des fichiers sons à leur insertion
    32                  */
    33                 if(in_any($extension,$son_recup_id3)){
    34                         $recuperer_infos = charger_fonction('getid3_recuperer_infos','inc');
    35                         $infos = $recuperer_infos($id_document);
    36                 }
    37                 /**
    38                  * L'ajout est une vignette
    39                  * Insertion de la vignette automatiquement dans le mp3 si changement
    40                  */
    41                 else if(in_any($extension,$extensions_vignettes)
    42                         && ($document_orig = sql_fetsel('*','spip_documents','id_vignette='.intval($id_document)))
    43                         && ($document_orig['distant'] != 'oui')
    44                         && in_array($document_orig['extension'],$son_modif_id3)
    45                 ){
    46                         include_spip('inc/documents');
    47                        
    48                         $fichier_orig = get_spip_doc($document_orig['fichier']);
    49                         $recuperer_id3 = charger_fonction('recuperer_id3','inc');
    50                         $valeurs = $recuperer_id3($fichier_orig);
    51                        
    52                         $files[] = get_spip_doc($document['fichier']);
    53                        
    54                         foreach($valeurs as $valeur => $info){
    55                                 if(preg_match('/cover/',$valeur) && (count($files) == 0)){
    56                                         $files[] = $info;
    57                                 }else{
    58                                         $valeurs[$valeur] = filtrer_entites($info);
     20        if(in_array($flux['args']['operation'],array('ajouter_document','modifier'))){
     21                static $getid3_done = false;
     22                if(!$getid3_done){
     23                        $id_document = $flux['args']['id_objet'];
     24                        $son_modif_id3 = array("mp3");
     25                        $son_recup_id3 = array("mp3","ogg","flac","aiff","aif","wav","m4a","oga");
     26                        $extensions_vignettes = array("png","gif","jpg");
     27                        $conf_id3 = lire_config('getid3/reecriture_tags',array());
     28                        $document_orig = sql_fetsel('*','spip_documents','id_vignette='.intval($id_document));
     29                        $document = sql_fetsel("*", "spip_documents","id_document=".sql_quote($id_document));
     30                        $extension = $document['extension'];
     31                        if($flux['args']['operation'] == 'ajouter_document'){
     32                                spip_log('on ajoute le document','getid3');
     33                                $getid3_done = true;
     34                                /**
     35                                 * Récupération automatique des infos des fichiers sons à leur insertion
     36                                 */
     37                                if(in_any($extension,$son_recup_id3)){
     38                                        $recuperer_infos = charger_fonction('getid3_recuperer_infos','inc');
     39                                        $infos = $recuperer_infos($id_document);
     40                                }
     41                                /**
     42                                 * L'ajout est une vignette
     43                                 * Insertion de la vignette automatiquement dans le mp3 si changement
     44                                 */
     45                                else if(in_any($extension,$extensions_vignettes)
     46                                        && ($document_orig = sql_fetsel('*','spip_documents','id_vignette='.intval($id_document)))
     47                                        && ($document_orig['distant'] != 'oui')
     48                                        && in_array($document_orig['extension'],$son_modif_id3)
     49                                ){
     50                                        include_spip('inc/documents');
     51                                       
     52                                        $fichier_orig = get_spip_doc($document_orig['fichier']);
     53                                        $recuperer_id3 = charger_fonction('recuperer_id3','inc');
     54                                        $valeurs = $recuperer_id3($fichier_orig);
     55                                       
     56                                        $files[] = get_spip_doc($document['fichier']);
     57                                       
     58                                        foreach($valeurs as $valeur => $info){
     59                                                if(preg_match('/cover/',$valeur) && (count($files) == 0)){
     60                                                        $files[] = $info;
     61                                                }else{
     62                                                        $valeurs[$valeur] = filtrer_entites($info);
     63                                                }
     64                                        }
     65                                       
     66                                        /**
     67                                         * On écrit les tags
     68                                         */
     69                                        $ecrire_id3 = charger_fonction('getid3_ecrire_infos','inc');
     70                                        $err = $ecrire_id3($document_orig['id_document'],$valeurs,$files);
    5971                                }
    6072                        }
    61                        
    6273                        /**
    63                          * On écrit les tags
     74                         * Mise à jour des tags des mp3 si besoin
    6475                         */
    65                         $ecrire_id3 = charger_fonction('getid3_ecrire_infos','inc');
    66                         $err = $ecrire_id3($document_orig['id_document'],$valeurs,$files);
    67                 }
    68         }
    69         /**
    70          * Mise à jour des tags des mp3 si besoin
    71          */
    72         if($flux['args']['action'] == 'modifier'){
    73                 $document = sql_fetsel("*", "spip_documents AS docs INNER JOIN spip_documents_liens AS L ON L.id_document=docs.id_document","L.id_document=".sql_quote($id_document));
    74                 $extension = $document['extension'];
    75                 if(in_any($extension,$son_modif_id3)){
    76                         $update = false;
    77                         foreach($flux['data'] as $key => $value){
    78                                 if(in_array($key,$conf_id3))
    79                                         $update = true;
    80                         }
    81                         if(is_numeric($flux['data']['id_vignette'])){
    82                                 $update = true;
    83                         }
    84                         if($update){
    85                                 $files = null;
     76                        if($flux['args']['action'] == 'modifier'){
     77                        $getid3_done = true;
     78                                spip_log('on modifie le document','getid3');
    8679                               
    87                                 /**
    88                                  * On récupère tout d'abord les anciens tags
    89                                  */     
    90                                 include_spip('inc/documents');
    91                                 $fichier = get_spip_doc($document['fichier']);
    92                                 $recuperer_id3 = charger_fonction('recuperer_id3','inc');
    93                                 $valeurs = $recuperer_id3($fichier);
    94                                
    95                                 if(is_numeric($flux['data']['id_vignette'])){
    96                                         $files[] = get_spip_doc(sql_getfetsel('fichier','spip_documents','id_document='.intval($flux['data']['id_vignette'])));
    97                                 }
    98                                 foreach($valeurs as $valeur => $info){
    99                                         if(preg_match('/cover/',$valeur) && (count($files) == 0)){
    100                                                 $files[] = $info;
    101                                         }else{
    102                                                 $valeurs[$valeur] = filtrer_entites($info);
     80                                if(in_any($extension,$son_modif_id3)){
     81                                        $update = false;
     82                                        foreach($flux['data'] as $key => $value){
     83                                                if(in_array($key,$conf_id3))
     84                                                        $update = true;
     85                                        }
     86                                        if(is_numeric($flux['data']['id_vignette'])){
     87                                                $update = true;
     88                                        }
     89                                        if($update){
     90                                                $files = null;
     91                                               
     92                                                /**
     93                                                 * On récupère tout d'abord les anciens tags
     94                                                 */     
     95                                                include_spip('inc/documents');
     96                                                $fichier = get_spip_doc($document['fichier']);
     97                                                $recuperer_id3 = charger_fonction('recuperer_id3','inc');
     98                                                $valeurs = $recuperer_id3($fichier);
     99                                               
     100                                                if(is_numeric($flux['data']['id_vignette'])){
     101                                                        $files[] = get_spip_doc(sql_getfetsel('fichier','spip_documents','id_document='.intval($flux['data']['id_vignette'])));
     102                                                }
     103                                                foreach($valeurs as $valeur => $info){
     104                                                        if(preg_match('/cover/',$valeur) && (count($files) == 0)){
     105                                                                $files[] = $info;
     106                                                        }else{
     107                                                                $valeurs[$valeur] = filtrer_entites($info);
     108                                                        }
     109                                                }
     110                                               
     111                                                if(isset($flux['data']['titre']) && in_array('titre',$conf_id3))
     112                                                        $valeurs['title'] = $flux['data']['titre'];
     113                                                       
     114                                                if(isset($flux['data']['descriptif']) && in_array('descriptif',$conf_id3))
     115                                                        $valeurs['comment'] = $flux['data']['descriptif'];
     116                                                       
     117                                                /**
     118                                                 * On écrit les tags
     119                                                 */
     120                                                $ecrire_id3 = charger_fonction('getid3_ecrire_infos','inc');
     121                                                $err = $ecrire_id3($id_document,$valeurs,$files);
    103122                                        }
    104123                                }
    105                                
    106                                 if(isset($flux['data']['titre']) && in_array('titre',$conf_id3))
    107                                         $valeurs['title'] = $flux['data']['titre'];
    108                                        
    109                                 if(isset($flux['data']['descriptif']) && in_array('descriptif',$conf_id3))
    110                                         $valeurs['comment'] = $flux['data']['descriptif'];
    111                                        
    112                                 /**
    113                                  * On écrit les tags
    114                                  */
    115                                 $ecrire_id3 = charger_fonction('getid3_ecrire_infos','inc');
    116                                 $err = $ecrire_id3($id_document,$valeurs,$files);
    117124                        }
    118125                }
  • _plugins_/getID3/trunk/inc/getid3_ecrire_infos.php

    r62461 r62476  
    1616 *
    1717 * @param int $id_document
     18 *              L'identifiant numérique du document
    1819 * @param array $infos
     20 *              Un array des informations à écrire dans le fichier
    1921 * @param array $images
     22 *              Un array correspondant à la cover à ajouter au fichier
    2023 * @param array $formats
     24 *              Un array correspondant aux types de tags à écrire
    2125 */
    2226
     
    2529                return;
    2630        }
     31       
    2732        $document = sql_fetsel("fichier,distant,extension", "spip_documents","id_document=".intval($id_document));
    2833       
    29         if($document['extension'] == 'ogg'){
    30                 $formats = array('vorbiscomment');
    31                 $infos['date'] = $infos['year'];
    32         }else if($document['extension'] == 'flac'){
    33                 $formats = array('metaflac');
    34                 $infos['date'] = $infos['year'];
    35         }
    36        
    3734        if($document['distant'] != 'oui'){
     35
     36                if($document['extension'] == 'ogg'){
     37                        $formats = array('vorbiscomment');
     38                        $infos['date'] = $infos['year'];
     39                }else if($document['extension'] == 'flac'){
     40                        $formats = array('metaflac');
     41                        $infos['date'] = $infos['year'];
     42                }
     43               
    3844                $err = array();
    3945                $TagData = array();
     46               
    4047                include_spip('inc/documents');
    4148                $document_chemin = get_spip_doc($document['fichier']);
     
    4653                        return false;
    4754                }
     55               
    4856                include_spip('getid3/write');
    4957                $getid3->encoding         = 'UTF-8';
     
    6573                }
    6674               
    67                 $TagData = pipeline('pre_edition',
    68                         array(
    69                                 'args' => array(
    70                                         'table' => 'spip_documents', // compatibilite
    71                                         'table_objet' => 'documents',
    72                                         'spip_table_objet' => 'spip_documents',
    73                                         'type' =>'document',
    74                                         'id_objet' => $id_document,
    75                                         'action' => 'getid3_ecrire_infos',
    76                                         'operation' => 'getid3_ecrire_infos', // compat <= v2.0
    77                                 ),
    78                                 'data' => $TagData
    79                         )
    80                 );
    8175                /**
    8276                 * Ajout des images
     
    111105                        }
    112106                }
    113                 $ecrire->tag_data = $TagData;
     107               
     108                /**
     109                 * Le pipeline de pre_edition
     110                 * Avant l'écriture des tags dans le fichier
     111                 */
     112                $TagData = pipeline('pre_edition',
     113                        array(
     114                                'args' => array(
     115                                        'table' => 'spip_documents', // compatibilite
     116                                        'table_objet' => 'documents',
     117                                        'spip_table_objet' => 'spip_documents',
     118                                        'type' =>'document',
     119                                        'id_objet' => $id_document,
     120                                        'action' => 'getid3_ecrire_infos'
     121                                ),
     122                                'data' => $TagData
     123                        )
     124                );
    114125               
    115126                /**
    116127                 * On écrit le tout
    117128                 */
     129                $ecrire->tag_data = $TagData;
    118130                $ecrire->WriteTags();
    119131       
     
    132144                }
    133145               
     146                /**
     147                 * Modification de la taille du document en base
     148                 * car elle peut être modifiée par l'ajout de tags ou de cover
     149                 */
    134150                $taille = filesize($document_chemin);
    135151                include_spip('action/editer_document');
    136152                document_modifier($id_document, array('taille'=>$taille));
    137153               
     154                /**
     155                 * Le pipeline de post_edition du document
     156                 */
    138157                pipeline('post_edition',
    139158                        array(
     
    144163                                        'type' =>'document',
    145164                                        'id_objet' => $id_document,
    146                                         'action' => 'getid3_ecrire_infos',
    147                                         'operation' => 'getid3_ecrire_infos', // compat <= v2.0
     165                                        'action' => 'getid3_ecrire_infos'
    148166                                ),
    149167                                'data' => $infos
  • _plugins_/getID3/trunk/inc/getid3_recuperer_infos.php

    r62458 r62476  
    2222                return;
    2323        }
     24       
     25        include_spip('action/editer_document');
    2426        include_spip('inc/documents');
    2527        include_spip('inc/filtres');
    26         $document = sql_fetsel("docs.id_document,docs.titre,docs.extension,docs.fichier,docs.taille,docs.mode", "spip_documents AS docs INNER JOIN spip_documents_liens AS L ON L.id_document=docs.id_document","L.id_document=".intval($id_document));
     28        $document = sql_fetsel("*", "spip_documents","id_document=".intval($id_document));
    2729        $son_chemin = get_spip_doc($document['fichier']);
    2830
     
    6466                }
    6567        }
    66         spip_log($covers,'getid3');
     68
     69        /**
     70         * Les valeurs que l'on mettra en base à la fin
     71         */
     72        $valeurs = array(
     73                        'titre'=>filtrer_entites($document['titre']),
     74                        'descriptif'=>filtrer_entites($document['descriptif']),
     75                        'duree'=> $id3['duree_secondes'],
     76                        'bitrate' => $id3['bitrate'],
     77                        'bitrate_mode'=>$id3['bitrate_mode'],
     78                        'audiosamplerate'=>$id3['audiosamplerate'],
     79                        'encodeur'=>$id3['codec'],
     80                        'bits'=>$id3['bits'],
     81                        'canaux' => $id3['channels']
     82                );
     83
    6784        if(count($covers) > 0){
    6885                $id_vignette = sql_getfetsel('id_vignette','spip_documents','id_document='.intval($id_document));
     
    7491                        list($extension,$arg) = fixer_extension_document($covers[0]);
    7592                        $cover_ajout = array(array('tmp_name'=>$covers[0],'name'=> basename($covers[0])));
    76                         spip_log('on ajoute la cover','getid3');
    77                         spip_log($cover_ajout,'getid3');
    7893                        $ajoute = $ajouter_documents($id_vignette,$cover_ajout,'',0,'vignette');
    7994
    8095                        if (is_numeric(reset($ajoute))
    8196                          AND $id_vignette = reset($ajoute)){
    82                                 include_spip('action/editer_document');
    83                                 document_modifier($id_document,array("id_vignette" => $id_vignette,'mode'=>'document'));
    84                                 recuperer_id3_doc($id_document);
     97                                $valeurs['id_vignette'] = $id_vignette;
    8598                        }
    8699                }
     
    105118                        if (is_numeric(reset($ajoute))
    106119                          AND $id_vignette = reset($ajoute)){
    107                                 include_spip('action/editer_document');
    108                                 document_modifier($id_document,array("id_vignette" => $id_vignette,'mode'=>'document'));
     120                                $valeurs['id_vignette'] = $id_vignette;
    109121                        }
    110122                }
    111123        }
    112         sql_updateq('spip_documents',
    113                 array(
    114                         'titre'=>filtrer_entites($document['titre']),
    115                         'descriptif'=>filtrer_entites($document['descriptif']),
    116                         'duree'=> $id3['duree_secondes'],
    117                         'bitrate' => $id3['bitrate'],
    118                         'bitrate_mode'=>$id3['bitrate_mode'],
    119                         'audiosamplerate'=>$id3['audiosamplerate'],
    120                         'encodeur'=>$id3['codec'],
    121                         'bits'=>$id3['bits'],
    122                         'canaux' => $id3['channels']
    123                 ),
    124                 'id_document='.intval($id_document));
    125         spip_log($id3,'getid3');
     124       
     125        document_modifier($id_document,$valeurs);
     126
    126127        return $id3;
    127128}
Note: See TracChangeset for help on using the changeset viewer.