Ignore:
Timestamp:
Dec 30, 2018, 6:02:45 PM (6 months ago)
Author:
spip.franck@…
Message:

Mise à jour de la lib getid en version 1.9.16, nous étions en 1.9.14
https://github.com/JamesHeinrich/getID3/blob/master/changelog.txt

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _core_/branches/spip-3.2/plugins/medias/lib/getid3/write.php

    r106592 r113162  
    11<?php
     2
    23/////////////////////////////////////////////////////////////////
    34/// getID3() by James Heinrich <info@getid3.org>               //
    4 //  available at http://getid3.sourceforge.net                 //
    5 //            or http://www.getid3.org                         //
    6 //          also https://github.com/JamesHeinrich/getID3       //
    7 /////////////////////////////////////////////////////////////////
    8 // See readme.txt for more details                             //
     5//  available at https://github.com/JamesHeinrich/getID3       //
     6//            or https://www.getid3.org                        //
     7//            or http://getid3.sourceforge.net                 //
     8//  see readme.txt for more details                            //
    99/////////////////////////////////////////////////////////////////
    1010///                                                            //
     
    2828}
    2929
    30 
    31 // NOTES:
    32 //
    33 // You should pass data here with standard field names as follows:
    34 // * TITLE
    35 // * ARTIST
    36 // * ALBUM
    37 // * TRACKNUMBER
    38 // * COMMENT
    39 // * GENRE
    40 // * YEAR
    41 // * ATTACHED_PICTURE (ID3v2 only)
    42 //
    43 // http://www.personal.uni-jena.de/~pfk/mpp/sv8/apekey.html
    44 // The APEv2 Tag Items Keys definition says "TRACK" is correct but foobar2000 uses "TRACKNUMBER" instead
    45 // Pass data here as "TRACKNUMBER" for compatability with all formats
    46 
    47 
     30/**
     31 * NOTES:
     32 *
     33 * You should pass data here with standard field names as follows:
     34 * * TITLE
     35 * * ARTIST
     36 * * ALBUM
     37 * * TRACKNUMBER
     38 * * COMMENT
     39 * * GENRE
     40 * * YEAR
     41 * * ATTACHED_PICTURE (ID3v2 only)
     42 * The APEv2 Tag Items Keys definition says "TRACK" is correct but foobar2000 uses "TRACKNUMBER" instead
     43 * Pass data here as "TRACKNUMBER" for compatability with all formats
     44 *
     45 * @link http://www.personal.uni-jena.de/~pfk/mpp/sv8/apekey.html
     46 */
    4847class getid3_writetags
    4948{
    50         // public
    51         public $filename;                            // absolute filename of file to write tags to
    52         public $tagformats         = array();        // array of tag formats to write ('id3v1', 'id3v2.2', 'id2v2.3', 'id3v2.4', 'ape', 'vorbiscomment', 'metaflac', 'real')
    53         public $tag_data           = array(array()); // 2-dimensional array of tag data (ex: $data['ARTIST'][0] = 'Elvis')
    54         public $tag_encoding       = 'ISO-8859-1';   // text encoding used for tag data ('ISO-8859-1', 'UTF-8', 'UTF-16', 'UTF-16LE', 'UTF-16BE', )
    55         public $overwrite_tags     = true;          // if true will erase existing tag data and write only passed data; if false will merge passed data with existing tag data
    56         public $remove_other_tags  = false;          // if true will erase remove all existing tags and only write those passed in $tagformats; if false will ignore any tags not mentioned in $tagformats
    57 
    58         public $id3v2_tag_language = 'eng';          // ISO-639-2 3-character language code needed for some ID3v2 frames (http://www.id3.org/iso639-2.html)
    59         public $id3v2_paddedlength = 4096;           // minimum length of ID3v2 tags (will be padded to this length if tag data is shorter)
    60 
    61         public $warnings           = array();        // any non-critical errors will be stored here
    62         public $errors             = array();        // any critical errors will be stored here
    63 
    64         // private
    65         private $ThisFileInfo; // analysis of file before writing
     49        /**
     50         * Absolute filename of file to write tags to.
     51         *
     52         * @var string
     53         */
     54        public $filename;
     55
     56        /**
     57         * Array of tag formats to write ('id3v1', 'id3v2.2', 'id2v2.3', 'id3v2.4', 'ape', 'vorbiscomment',
     58         * 'metaflac', 'real').
     59         *
     60         * @var array
     61         */
     62        public $tagformats         = array();
     63
     64        /**
     65         * 2-dimensional array of tag data (ex: $data['ARTIST'][0] = 'Elvis').
     66         *
     67         * @var array
     68         */
     69        public $tag_data           = array(array());
     70
     71        /**
     72         * Text encoding used for tag data ('ISO-8859-1', 'UTF-8', 'UTF-16', 'UTF-16LE', 'UTF-16BE', ).
     73         *
     74         * @var string
     75         */
     76        public $tag_encoding       = 'ISO-8859-1';
     77
     78        /**
     79         * If true will erase existing tag data and write only passed data; if false will merge passed data
     80         * with existing tag data.
     81         *
     82         * @var bool
     83         */
     84        public $overwrite_tags     = true;
     85
     86        /**
     87         * If true will erase remove all existing tags and only write those passed in $tagformats;
     88         * If false will ignore any tags not mentioned in $tagformats.
     89         *
     90         * @var bool
     91         */
     92        public $remove_other_tags  = false;
     93
     94        /**
     95         * ISO-639-2 3-character language code needed for some ID3v2 frames.
     96         *
     97         * @link http://www.id3.org/iso639-2.html
     98         *
     99         * @var string
     100         */
     101        public $id3v2_tag_language = 'eng';
     102
     103        /**
     104         * Minimum length of ID3v2 tags (will be padded to this length if tag data is shorter).
     105         *
     106         * @var int
     107         */
     108        public $id3v2_paddedlength = 4096;
     109
     110        /**
     111         * Any non-critical errors will be stored here.
     112         *
     113         * @var array
     114         */
     115        public $warnings           = array();
     116
     117        /**
     118         * Any critical errors will be stored here.
     119         *
     120         * @var array
     121         */
     122        public $errors             = array();
     123
     124        /**
     125         * Analysis of file before writing.
     126         *
     127         * @var array
     128         */
     129        private $ThisFileInfo;
    66130
    67131        public function __construct() {
    68                 return true;
    69         }
    70 
    71 
     132        }
     133
     134        /**
     135         * @return bool
     136         */
    72137        public function WriteTags() {
    73138
     
    84149                        return false;
    85150                }
     151                // prevent duplicate tag formats
     152                $this->tagformats = array_unique($this->tagformats);
     153
     154                // prevent trying to specify more than one version of ID3v2 tag to write simultaneously
     155                $id3typecounter = 0;
     156                foreach ($this->tagformats as $tagformat) {
     157                        if (substr(strtolower($tagformat), 0, 6) == 'id3v2.') {
     158                                $id3typecounter++;
     159                        }
     160                }
     161                if ($id3typecounter > 1) {
     162                        $this->errors[] = 'tagformats must not contain more than one version of ID3v2';
     163                        return false;
     164                }
    86165
    87166                $TagFormatsToRemove = array();
     167                $AllowedTagFormats = array();
    88168                if (filesize($this->filename) == 0) {
    89169
     
    249329                                case 'ape':
    250330                                        $ape_writer = new getid3_write_apetag;
    251                                         if (($ape_writer->tag_data = $this->FormatDataForAPE()) !== false) {
     331                                        if ($ape_writer->tag_data = $this->FormatDataForAPE()) {
    252332                                                $ape_writer->filename = $this->filename;
    253333                                                if (($success = $ape_writer->WriteAPEtag()) === false) {
     
    261341                                case 'id3v1':
    262342                                        $id3v1_writer = new getid3_write_id3v1;
    263                                         if (($id3v1_writer->tag_data = $this->FormatDataForID3v1()) !== false) {
     343                                        if ($id3v1_writer->tag_data = $this->FormatDataForID3v1()) {
    264344                                                $id3v1_writer->filename = $this->filename;
    265345                                                if (($success = $id3v1_writer->WriteID3v1()) === false) {
     
    277357                                        $id3v2_writer->majorversion = intval(substr($tagformat, -1));
    278358                                        $id3v2_writer->paddedlength = $this->id3v2_paddedlength;
    279                                         if (($id3v2_writer->tag_data = $this->FormatDataForID3v2($id3v2_writer->majorversion)) !== false) {
     359                                        $id3v2_writer_tag_data = $this->FormatDataForID3v2($id3v2_writer->majorversion);
     360                                        if ($id3v2_writer_tag_data !== false) {
     361                                                $id3v2_writer->tag_data = $id3v2_writer_tag_data;
     362                                                unset($id3v2_writer_tag_data);
    280363                                                $id3v2_writer->filename = $this->filename;
    281364                                                if (($success = $id3v2_writer->WriteID3v2()) === false) {
     
    289372                                case 'vorbiscomment':
    290373                                        $vorbiscomment_writer = new getid3_write_vorbiscomment;
    291                                         if (($vorbiscomment_writer->tag_data = $this->FormatDataForVorbisComment()) !== false) {
     374                                        if ($vorbiscomment_writer->tag_data = $this->FormatDataForVorbisComment()) {
    292375                                                $vorbiscomment_writer->filename = $this->filename;
    293376                                                if (($success = $vorbiscomment_writer->WriteVorbisComment()) === false) {
     
    301384                                case 'metaflac':
    302385                                        $metaflac_writer = new getid3_write_metaflac;
    303                                         if (($metaflac_writer->tag_data = $this->FormatDataForMetaFLAC()) !== false) {
     386                                        if ($metaflac_writer->tag_data = $this->FormatDataForMetaFLAC()) {
    304387                                                $metaflac_writer->filename = $this->filename;
    305388                                                if (($success = $metaflac_writer->WriteMetaFLAC()) === false) {
     
    313396                                case 'real':
    314397                                        $real_writer = new getid3_write_real;
    315                                         if (($real_writer->tag_data = $this->FormatDataForReal()) !== false) {
     398                                        if ($real_writer->tag_data = $this->FormatDataForReal()) {
    316399                                                $real_writer->filename = $this->filename;
    317400                                                if (($success = $real_writer->WriteReal()) === false) {
     
    336419        }
    337420
    338 
     421        /**
     422         * @param string[] $TagFormatsToDelete
     423         *
     424         * @return bool
     425         */
    339426        public function DeleteTags($TagFormatsToDelete) {
    340427                foreach ($TagFormatsToDelete as $DeleteTagFormat) {
     
    398485
    399486                                default:
    400                                         $this->errors[] = 'Invalid tag format to delete: "'.$tagformat.'"';
     487                                        $this->errors[] = 'Invalid tag format to delete: "'.$DeleteTagFormat.'"';
    401488                                        return false;
    402489                                        break;
     
    409496        }
    410497
    411 
     498        /**
     499         * @param string $TagFormat
     500         * @param array  $tag_data
     501         *
     502         * @return bool
     503         * @throws Exception
     504         */
    412505        public function MergeExistingTagData($TagFormat, &$tag_data) {
    413506                // Merge supplied data with existing data, if requested
     
    415508                        // do nothing - ignore previous data
    416509                } else {
    417 throw new Exception('$this->overwrite_tags=false is known to be buggy in this version of getID3. Will be fixed in the near future, check www.getid3.org for a newer version.');
     510                        throw new Exception('$this->overwrite_tags=false is known to be buggy in this version of getID3. Check http://github.com/JamesHeinrich/getID3 for a newer version.');
    418511                        if (!isset($this->ThisFileInfo['tags'][$TagFormat])) {
    419512                                return false;
     
    424517        }
    425518
     519        /**
     520         * @return array
     521         */
    426522        public function FormatDataForAPE() {
    427523                $ape_tag_data = array();
     
    450546        }
    451547
    452 
     548        /**
     549         * @return array
     550         */
    453551        public function FormatDataForID3v1() {
     552                $tag_data_id3v1            = array();
    454553                $tag_data_id3v1['genreid'] = 255;
    455554                if (!empty($this->tag_data['GENRE'])) {
     
    475574        }
    476575
     576        /**
     577         * @param int $id3v2_majorversion
     578         *
     579         * @return array|false
     580         */
    477581        public function FormatDataForID3v2($id3v2_majorversion) {
    478582                $tag_data_id3v2 = array();
     
    606710        }
    607711
     712        /**
     713         * @return array
     714         */
    608715        public function FormatDataForVorbisComment() {
    609716                $tag_data_vorbiscomment = $this->tag_data;
     
    613720                foreach ($tag_data_vorbiscomment as $tag_key => $valuearray) {
    614721                        foreach ($valuearray as $key => $value) {
    615                                 str_replace("\r", "\n", $value);
    616                                 if (strstr($value, "\n")) {
    617                                         unset($tag_data_vorbiscomment[$tag_key][$key]);
    618                                         $multilineexploded = explode("\n", $value);
    619                                         foreach ($multilineexploded as $newcomment) {
    620                                                 if (strlen(trim($newcomment)) > 0) {
    621                                                         $tag_data_vorbiscomment[$tag_key][] = getid3_lib::iconv_fallback($this->tag_encoding, 'UTF-8', $newcomment);
    622                                                 }
    623                                         }
    624                                 } elseif (is_string($value) || is_numeric($value)) {
    625                                         $tag_data_vorbiscomment[$tag_key][$key] = getid3_lib::iconv_fallback($this->tag_encoding, 'UTF-8', $value);
     722                                if (($tag_key == 'ATTACHED_PICTURE') && is_array($value)) {
     723                                        continue; // handled separately in write.metaflac.php
    626724                                } else {
    627                                         $this->warnings[] = '$data['.$tag_key.']['.$key.'] is not a string value - all of $data['.$tag_key.'] NOT written to VorbisComment tag';
    628                                         unset($tag_data_vorbiscomment[$tag_key]);
    629                                         break;
     725                                        str_replace("\r", "\n", $value);
     726                                        if (strstr($value, "\n")) {
     727                                                unset($tag_data_vorbiscomment[$tag_key][$key]);
     728                                                $multilineexploded = explode("\n", $value);
     729                                                foreach ($multilineexploded as $newcomment) {
     730                                                        if (strlen(trim($newcomment)) > 0) {
     731                                                                $tag_data_vorbiscomment[$tag_key][] = getid3_lib::iconv_fallback($this->tag_encoding, 'UTF-8', $newcomment);
     732                                                        }
     733                                                }
     734                                        } elseif (is_string($value) || is_numeric($value)) {
     735                                                $tag_data_vorbiscomment[$tag_key][$key] = getid3_lib::iconv_fallback($this->tag_encoding, 'UTF-8', $value);
     736                                        } else {
     737                                                $this->warnings[] = '$data['.$tag_key.']['.$key.'] is not a string value - all of $data['.$tag_key.'] NOT written to VorbisComment tag';
     738                                                unset($tag_data_vorbiscomment[$tag_key]);
     739                                                break;
     740                                        }
    630741                                }
    631742                        }
     
    635746        }
    636747
     748        /**
     749         * @return array
     750         */
    637751        public function FormatDataForMetaFLAC() {
    638752                // FLAC & OggFLAC use VorbisComments same as OggVorbis
     
    641755        }
    642756
     757        /**
     758         * @return array
     759         */
    643760        public function FormatDataForReal() {
    644761                $tag_data_real['title']     = getid3_lib::iconv_fallback($this->tag_encoding, 'ISO-8859-1', implode(' ', (isset($this->tag_data['TITLE']    ) ? $this->tag_data['TITLE']     : array())));
Note: See TracChangeset for help on using the changeset viewer.