[SPIP] v3.2.1-->v3.2.3
[lhc/web/www.git] / www / plugins-dist / medias / lib / getid3 / write.lyrics3.php
1 <?php
2
3 /////////////////////////////////////////////////////////////////
4 /// getID3() by James Heinrich <info@getid3.org> //
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 //
9 /////////////////////////////////////////////////////////////////
10 // //
11 // write.lyrics3.php //
12 // module for writing Lyrics3 tags //
13 // dependencies: module.tag.lyrics3.php //
14 // ///
15 /////////////////////////////////////////////////////////////////
16
17
18 class getid3_write_lyrics3
19 {
20 /**
21 * @var string
22 */
23 public $filename;
24
25 /**
26 * @var array
27 */
28 public $tag_data;
29 //public $lyrics3_version = 2; // 1 or 2
30
31 /**
32 * Any non-critical errors will be stored here.
33 *
34 * @var array
35 */
36 public $warnings = array();
37
38 /**
39 * Any critical errors will be stored here.
40 *
41 * @var array
42 */
43 public $errors = array();
44
45 public function __construct() {
46 }
47
48 /**
49 * @return bool
50 */
51 public function WriteLyrics3() {
52 $this->errors[] = 'WriteLyrics3() not yet functional - cannot write Lyrics3';
53 return false;
54 }
55
56 /**
57 * @return bool
58 */
59 public function DeleteLyrics3() {
60 // Initialize getID3 engine
61 $getID3 = new getID3;
62 $ThisFileInfo = $getID3->analyze($this->filename);
63 if (isset($ThisFileInfo['lyrics3']['tag_offset_start']) && isset($ThisFileInfo['lyrics3']['tag_offset_end'])) {
64 if (is_readable($this->filename) && getID3::is_writable($this->filename) && is_file($this->filename) && ($fp = fopen($this->filename, 'a+b'))) {
65
66 flock($fp, LOCK_EX);
67 $oldignoreuserabort = ignore_user_abort(true);
68
69 fseek($fp, $ThisFileInfo['lyrics3']['tag_offset_end']);
70 $DataAfterLyrics3 = '';
71 if ($ThisFileInfo['filesize'] > $ThisFileInfo['lyrics3']['tag_offset_end']) {
72 $DataAfterLyrics3 = fread($fp, $ThisFileInfo['filesize'] - $ThisFileInfo['lyrics3']['tag_offset_end']);
73 }
74
75 ftruncate($fp, $ThisFileInfo['lyrics3']['tag_offset_start']);
76
77 if (!empty($DataAfterLyrics3)) {
78 fseek($fp, $ThisFileInfo['lyrics3']['tag_offset_start']);
79 fwrite($fp, $DataAfterLyrics3, strlen($DataAfterLyrics3));
80 }
81
82 flock($fp, LOCK_UN);
83 fclose($fp);
84 ignore_user_abort($oldignoreuserabort);
85
86 return true;
87
88 } else {
89 $this->errors[] = 'Cannot fopen('.$this->filename.', "a+b")';
90 return false;
91 }
92 }
93 // no Lyrics3 present
94 return true;
95 }
96
97 }