/components/com_fabrik/libs/getid3/demos/demo.mysql.php
PHP | 2130 lines | 1790 code | 304 blank | 36 comment | 290 complexity | db9679172893e0a2f4024ed94d60afd2 MD5 | raw file
Possible License(s): LGPL-2.1, AGPL-1.0
Large files files are truncated, but you can click here to view the full file
- <?php
- /////////////////////////////////////////////////////////////////
- /// getID3() by James Heinrich <info@getid3.org> //
- // available at http://getid3.sourceforge.net //
- // or http://www.getid3.org //
- /////////////////////////////////////////////////////////////////
- // //
- // /demo/demo.mysql.php - part of getID3() //
- // Sample script for recursively scanning directories and //
- // storing the results in a database //
- // See readme.txt for more details //
- // ///
- /////////////////////////////////////////////////////////////////
- // OPTIONS:
- $getid3_demo_mysql_encoding = 'ISO-8859-1';
- $getid3_demo_mysql_md5_data = false; // All data hashes are by far the slowest part of scanning
- $getid3_demo_mysql_md5_file = false;
- define('GETID3_DB_HOST', 'localhost');
- define('GETID3_DB_USER', 'getid3');
- define('GETID3_DB_PASS', 'getid3');
- define('GETID3_DB_DB', 'getid3');
- define('GETID3_DB_TABLE', 'files');
- if (!@mysql_connect(GETID3_DB_HOST, GETID3_DB_USER, GETID3_DB_PASS)) {
- die('Could not connect to MySQL host: <blockquote style="background-color: #FF9933; padding: 10px;">'.mysql_error().'</blockquote>');
- }
- if (!@mysql_select_db(GETID3_DB_DB)) {
- die('Could not select database: <blockquote style="background-color: #FF9933; padding: 10px;">'.mysql_error().'</blockquote>');
- }
- if (!@include_once('../getid3/getid3.php')) {
- die('Cannot open '.realpath('../getid3/getid3.php'));
- }
- // Initialize getID3 engine
- $getID3 = new getID3;
- $getID3->setOption(array(
- 'option_md5_data' => $getid3_demo_mysql_md5_data,
- 'encoding' => $getid3_demo_mysql_encoding,
- ));
- function RemoveAccents($string) {
- // Revised version by markstewardØhotmail*com
- return strtr(strtr($string, 'ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ', 'SZszYAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy'), array('Þ' => 'TH', 'þ' => 'th', 'Ð' => 'DH', 'ð' => 'dh', 'ß' => 'ss', 'Œ' => 'OE', 'œ' => 'oe', 'Æ' => 'AE', 'æ' => 'ae', 'µ' => 'u'));
- }
- function FixTextFields($text) {
- $text = getid3_lib::SafeStripSlashes($text);
- $text = htmlentities($text, ENT_QUOTES);
- return $text;
- }
- function BitrateColor($bitrate, $BitrateMaxScale=768) {
- // $BitrateMaxScale is bitrate of maximum-quality color (bright green)
- // below this is gradient, above is solid green
- $bitrate *= (256 / $BitrateMaxScale); // scale from 1-[768]kbps to 1-256
- $bitrate = round(min(max($bitrate, 1), 256));
- $bitrate--; // scale from 1-256kbps to 0-255kbps
- $Rcomponent = max(255 - ($bitrate * 2), 0);
- $Gcomponent = max(($bitrate * 2) - 255, 0);
- if ($bitrate > 127) {
- $Bcomponent = max((255 - $bitrate) * 2, 0);
- } else {
- $Bcomponent = max($bitrate * 2, 0);
- }
- return str_pad(dechex($Rcomponent), 2, '0', STR_PAD_LEFT).str_pad(dechex($Gcomponent), 2, '0', STR_PAD_LEFT).str_pad(dechex($Bcomponent), 2, '0', STR_PAD_LEFT);
- }
- function BitrateText($bitrate, $decimals=0) {
- return '<span style="color: #'.BitrateColor($bitrate).'">'.number_format($bitrate, $decimals).' kbps</span>';
- }
- function fileextension($filename, $numextensions=1) {
- if (strstr($filename, '.')) {
- $reversedfilename = strrev($filename);
- $offset = 0;
- for ($i = 0; $i < $numextensions; $i++) {
- $offset = strpos($reversedfilename, '.', $offset + 1);
- if ($offset === false) {
- return '';
- }
- }
- return strrev(substr($reversedfilename, 0, $offset));
- }
- return '';
- }
- function RenameFileFromTo($from, $to, &$results) {
- $success = true;
- if ($from === $to) {
- $results = '<span style="color: #FF0000;"><b>Source and Destination filenames identical</b><br>FAILED to rename';
- } elseif (!file_exists($from)) {
- $results = '<span style="color: #FF0000;"><b>Source file does not exist</b><br>FAILED to rename';
- } elseif (file_exists($to) && (strtolower($from) !== strtolower($to))) {
- $results = '<span style="color: #FF0000;"><b>Destination file already exists</b><br>FAILED to rename';
- } elseif (@rename($from, $to)) {
- $SQLquery = 'DELETE FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`filename` = "'.mysql_escape_string($from).'")';
- safe_mysql_query($SQLquery);
- $results = '<span style="color: #008000;">Successfully renamed';
- } else {
- $results = '<br><span style="color: #FF0000;">FAILED to rename';
- $success = false;
- }
- $results .= ' from:<br><i>'.$from.'</i><br>to:<br><i>'.$to.'</i></span><hr>';
- return $success;
- }
- if (!empty($_REQUEST['renamefilefrom']) && !empty($_REQUEST['renamefileto'])) {
- $results = '';
- RenameFileFromTo($_REQUEST['renamefilefrom'], $_REQUEST['renamefileto'], $results);
- echo $results;
- exit;
- } elseif (!empty($_REQUEST['m3ufilename'])) {
- header('Content-type: audio/x-mpegurl');
- echo '#EXTM3U'."\n";
- echo WindowsShareSlashTranslate($_REQUEST['m3ufilename'])."\n";
- exit;
- } elseif (!isset($_REQUEST['m3u']) && !isset($_REQUEST['m3uartist']) && !isset($_REQUEST['m3utitle'])) {
- echo '<html><head><title>getID3() demo - /demo/mysql.php</title><style>BODY, TD, TH { font-family: sans-serif; font-size: 10pt; } A { text-decoration: none; } A:hover { text-decoration: underline; } A:visited { font-style: italic; }</style></head><body>';
- }
- function WindowsShareSlashTranslate($filename) {
- if (substr($filename, 0, 2) == '//') {
- return str_replace('/', '\\', $filename);
- }
- return $filename;
- }
- function safe_mysql_query($SQLquery) {
- $result = @mysql_query($SQLquery);
- if (mysql_error()) {
- die('<FONT COLOR="red">'.mysql_error().'</FONT><hr><TT>'.$SQLquery.'</TT>');
- }
- return $result;
- }
- function mysql_table_exists($tablename) {
- return (bool) mysql_query('DESCRIBE '.$tablename);
- }
- function AcceptableExtensions($fileformat, $audio_dataformat='', $video_dataformat='') {
- static $AcceptableExtensionsAudio = array();
- if (empty($AcceptableExtensionsAudio)) {
- $AcceptableExtensionsAudio['mp3']['mp3'] = array('mp3');
- $AcceptableExtensionsAudio['mp2']['mp2'] = array('mp2');
- $AcceptableExtensionsAudio['mp1']['mp1'] = array('mp1');
- $AcceptableExtensionsAudio['asf']['asf'] = array('asf');
- $AcceptableExtensionsAudio['asf']['wma'] = array('wma');
- $AcceptableExtensionsAudio['riff']['mp3'] = array('wav');
- $AcceptableExtensionsAudio['riff']['wav'] = array('wav');
- }
- static $AcceptableExtensionsVideo = array();
- if (empty($AcceptableExtensionsVideo)) {
- $AcceptableExtensionsVideo['mp3']['mp3'] = array('mp3');
- $AcceptableExtensionsVideo['mp2']['mp2'] = array('mp2');
- $AcceptableExtensionsVideo['mp1']['mp1'] = array('mp1');
- $AcceptableExtensionsVideo['asf']['asf'] = array('asf');
- $AcceptableExtensionsVideo['asf']['wmv'] = array('wmv');
- $AcceptableExtensionsVideo['gif']['gif'] = array('gif');
- $AcceptableExtensionsVideo['jpg']['jpg'] = array('jpg');
- $AcceptableExtensionsVideo['png']['png'] = array('png');
- $AcceptableExtensionsVideo['bmp']['bmp'] = array('bmp');
- }
- if (!empty($video_dataformat)) {
- return (isset($AcceptableExtensionsVideo[$fileformat][$video_dataformat]) ? $AcceptableExtensionsVideo[$fileformat][$video_dataformat] : array());
- } else {
- return (isset($AcceptableExtensionsAudio[$fileformat][$audio_dataformat]) ? $AcceptableExtensionsAudio[$fileformat][$audio_dataformat] : array());
- }
- }
- if (!empty($_REQUEST['scan'])) {
- if (mysql_table_exists(GETID3_DB_TABLE)) {
- $SQLquery = 'DROP TABLE `'.GETID3_DB_TABLE.'`';
- safe_mysql_query($SQLquery);
- }
- }
- if (!mysql_table_exists(GETID3_DB_TABLE)) {
- $SQLquery = 'CREATE TABLE `'.GETID3_DB_TABLE.'` (';
- $SQLquery .= ' `ID` mediumint(8) unsigned NOT NULL auto_increment,';
- $SQLquery .= ' `filename` text NOT NULL,';
- $SQLquery .= ' `LastModified` text NOT NULL,';
- $SQLquery .= ' `md5_file` varchar(32) NOT NULL default "",';
- $SQLquery .= ' `md5_data` varchar(32) NOT NULL default "",';
- $SQLquery .= ' `md5_data_source` varchar(32) NOT NULL default "",';
- $SQLquery .= ' `filesize` int(10) unsigned NOT NULL default "0",';
- $SQLquery .= ' `fileformat` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `audio_dataformat` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `video_dataformat` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `audio_bitrate` float NOT NULL default "0",';
- $SQLquery .= ' `video_bitrate` float NOT NULL default "0",';
- $SQLquery .= ' `playtime_seconds` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `tags` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `artist` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `title` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `remix` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `album` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `genre` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `comment` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `track` varchar(7) NOT NULL default "",';
- $SQLquery .= ' `comments_all` text NOT NULL,';
- $SQLquery .= ' `comments_id3v2` text NOT NULL,';
- $SQLquery .= ' `comments_ape` text NOT NULL,';
- $SQLquery .= ' `comments_lyrics3` text NOT NULL,';
- $SQLquery .= ' `comments_id3v1` text NOT NULL,';
- $SQLquery .= ' `warning` text NOT NULL,';
- $SQLquery .= ' `error` text NOT NULL,';
- $SQLquery .= ' `track_volume` float NOT NULL default "0",';
- $SQLquery .= ' `encoder_options` varchar(255) NOT NULL default "",';
- $SQLquery .= ' `vbr_method` varchar(255) NOT NULL default "",';
- $SQLquery .= ' PRIMARY KEY (`ID`)';
- $SQLquery .= ') TYPE=MyISAM;';
- safe_mysql_query($SQLquery);
- }
- $ExistingTableFields = array();
- $result = mysql_query('DESCRIBE `'.GETID3_DB_TABLE.'`');
- while ($row = mysql_fetch_array($result)) {
- $ExistingTableFields[$row['Field']] = $row;
- }
- if (!isset($ExistingTableFields['encoder_options'])) { // Added in 1.7.0b2
- echo '<b>adding field `encoder_options`</b><br>';
- mysql_query('ALTER TABLE `'.GETID3_DB_TABLE.'` ADD `encoder_options` VARCHAR(255) DEFAULT "" NOT NULL AFTER `error`');
- mysql_query('OPTIMIZE TABLE `'.GETID3_DB_TABLE.'`');
- }
- if (isset($ExistingTableFields['track']) && ($ExistingTableFields['track']['Type'] != 'varchar(7)')) { // Changed in 1.7.0b2
- echo '<b>changing field `track` to VARCHAR(7)</b><br>';
- mysql_query('ALTER TABLE `'.GETID3_DB_TABLE.'` CHANGE `track` `track` VARCHAR(7) DEFAULT "" NOT NULL');
- mysql_query('OPTIMIZE TABLE `'.GETID3_DB_TABLE.'`');
- }
- if (!isset($ExistingTableFields['track_volume'])) { // Added in 1.7.0b5
- echo '<H1><FONT COLOR="red">WARNING! You should erase your database and rescan everything because the comment storing has been changed since the last version</FONT></H1><hr>';
- echo '<b>adding field `track_volume`</b><br>';
- mysql_query('ALTER TABLE `'.GETID3_DB_TABLE.'` ADD `track_volume` FLOAT NOT NULL AFTER `error`');
- mysql_query('OPTIMIZE TABLE `'.GETID3_DB_TABLE.'`');
- }
- if (!isset($ExistingTableFields['remix'])) { // Added in 1.7.3b1
- echo '<b>adding field `encoder_options`, `alternate_name`, `parody`</b><br>';
- mysql_query('ALTER TABLE `'.GETID3_DB_TABLE.'` ADD `remix` VARCHAR(255) DEFAULT "" NOT NULL AFTER `title`');
- mysql_query('ALTER TABLE `'.GETID3_DB_TABLE.'` ADD `alternate_name` VARCHAR(255) DEFAULT "" NOT NULL AFTER `track`');
- mysql_query('ALTER TABLE `'.GETID3_DB_TABLE.'` ADD `parody` VARCHAR(255) DEFAULT "" NOT NULL AFTER `alternate_name`');
- mysql_query('OPTIMIZE TABLE `'.GETID3_DB_TABLE.'`');
- }
- function SynchronizeAllTags($filename, $synchronizefrom='all', $synchronizeto='A12', &$errors) {
- global $getID3;
- set_time_limit(30);
- $ThisFileInfo = $getID3->analyze($filename);
- getid3_lib::CopyTagsToComments($ThisFileInfo);
- if ($synchronizefrom == 'all') {
- $SourceArray = @$ThisFileInfo['comments'];
- } elseif (!empty($ThisFileInfo['tags'][$synchronizefrom])) {
- $SourceArray = @$ThisFileInfo['tags'][$synchronizefrom];
- } else {
- die('ERROR: $ThisFileInfo[tags]['.$synchronizefrom.'] does not exist');
- }
- $SQLquery = 'DELETE FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`filename` = "'.mysql_escape_string($filename).'")';
- safe_mysql_query($SQLquery);
- $TagFormatsToWrite = array();
- if ((strpos($synchronizeto, '2') !== false) && ($synchronizefrom != 'id3v2')) {
- $TagFormatsToWrite[] = 'id3v2.3';
- }
- if ((strpos($synchronizeto, 'A') !== false) && ($synchronizefrom != 'ape')) {
- $TagFormatsToWrite[] = 'ape';
- }
- if ((strpos($synchronizeto, 'L') !== false) && ($synchronizefrom != 'lyrics3')) {
- $TagFormatsToWrite[] = 'lyrics3';
- }
- if ((strpos($synchronizeto, '1') !== false) && ($synchronizefrom != 'id3v1')) {
- $TagFormatsToWrite[] = 'id3v1';
- }
- getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'write.php', __FILE__, true);
- $tagwriter = new getid3_writetags;
- $tagwriter->filename = $filename;
- $tagwriter->tagformats = $TagFormatsToWrite;
- $tagwriter->overwrite_tags = true;
- $tagwriter->tag_encoding = $getID3->encoding;
- $tagwriter->tag_data = $SourceArray;
- if ($tagwriter->WriteTags()) {
- $errors = $tagwriter->errors;
- return true;
- }
- $errors = $tagwriter->errors;
- return false;
- }
- $IgnoreNoTagFormats = array('', 'png', 'jpg', 'gif', 'bmp', 'swf', 'zip', 'mid', 'mod', 'xm', 'it', 's3m');
- if (!empty($_REQUEST['scan']) || !empty($_REQUEST['newscan']) || !empty($_REQUEST['rescanerrors'])) {
- $SQLquery = 'DELETE from `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`fileformat` = "")';
- safe_mysql_query($SQLquery);
- $FilesInDir = array();
- if (!empty($_REQUEST['rescanerrors'])) {
- echo '<a href="'.$_SERVER['PHP_SELF'].'">abort</a><hr>';
- echo 'Re-scanning all media files already in database that had errors and/or warnings in last scan<hr>';
- $SQLquery = 'SELECT `filename`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`error` <> "")';
- $SQLquery .= ' OR (`warning` <> "")';
- $SQLquery .= ' ORDER BY `filename` ASC';
- $result = safe_mysql_query($SQLquery);
- while ($row = mysql_fetch_array($result)) {
- if (!file_exists($row['filename'])) {
- echo '<b>File missing: '.$row['filename'].'</b><br>';
- $SQLquery = 'DELETE FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`filename` = "'.mysql_escape_string($row['filename']).'")';
- safe_mysql_query($SQLquery);
- } else {
- $FilesInDir[] = $row['filename'];
- }
- }
- } elseif (!empty($_REQUEST['scan']) || !empty($_REQUEST['newscan'])) {
- echo '<a href="'.$_SERVER['PHP_SELF'].'">abort</a><hr>';
- echo 'Scanning all media files in <b>'.str_replace('\\', '/', realpath(!empty($_REQUEST['scan']) ? $_REQUEST['scan'] : $_REQUEST['newscan'])).'</b> (and subdirectories)<hr>';
- $SQLquery = 'SELECT COUNT(*) AS `num`, `filename`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' GROUP BY `filename`';
- $SQLquery .= ' ORDER BY `num` DESC';
- $result = safe_mysql_query($SQLquery);
- $DupesDeleted = 0;
- while ($row = mysql_fetch_array($result)) {
- set_time_limit(30);
- if ($row['num'] <= 1) {
- break;
- }
- $SQLquery = 'DELETE FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE `filename` LIKE "'.mysql_escape_string($row['filename']).'"';
- safe_mysql_query($SQLquery);
- $DupesDeleted++;
- }
- if ($DupesDeleted > 0) {
- echo 'Deleted <b>'.number_format($DupesDeleted).'</b> duplicate filenames<hr>';
- }
- if (!empty($_REQUEST['newscan'])) {
- $AlreadyInDatabase = array();
- set_time_limit(60);
- $SQLquery = 'SELECT `filename`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' ORDER BY `filename` ASC';
- $result = safe_mysql_query($SQLquery);
- while ($row = mysql_fetch_array($result)) {
- //$AlreadyInDatabase[] = strtolower($row['filename']);
- $AlreadyInDatabase[] = $row['filename'];
- }
- }
- $DirectoriesToScan = array(@$_REQUEST['scan'] ? $_REQUEST['scan'] : $_REQUEST['newscan']);
- $DirectoriesScanned = array();
- while (count($DirectoriesToScan) > 0) {
- foreach ($DirectoriesToScan as $DirectoryKey => $startingdir) {
- if ($dir = opendir($startingdir)) {
- set_time_limit(30);
- echo '<b>'.str_replace('\\', '/', $startingdir).'</b><br>';
- flush();
- while (($file = readdir($dir)) !== false) {
- if (($file != '.') && ($file != '..')) {
- $RealPathName = realpath($startingdir.'/'.$file);
- if (is_dir($RealPathName)) {
- if (!in_array($RealPathName, $DirectoriesScanned) && !in_array($RealPathName, $DirectoriesToScan)) {
- $DirectoriesToScan[] = $RealPathName;
- }
- } else if (is_file($RealPathName)) {
- if (!empty($_REQUEST['newscan'])) {
- if (!in_array(str_replace('\\', '/', $RealPathName), $AlreadyInDatabase)) {
- $FilesInDir[] = $RealPathName;
- }
- } elseif (!empty($_REQUEST['scan'])) {
- $FilesInDir[] = $RealPathName;
- }
- }
- }
- }
- closedir($dir);
- } else {
- echo '<FONT COLOR="RED">Failed to open directory "<b>'.$startingdir.'</b>"</FONT><br><br>';
- }
- $DirectoriesScanned[] = $startingdir;
- unset($DirectoriesToScan[$DirectoryKey]);
- }
- }
- echo '<i>List of files to scan complete (added '.number_format(count($FilesInDir)).' files to scan)</i><hr>';
- flush();
- }
- $FilesInDir = array_unique($FilesInDir);
- sort($FilesInDir);
- $starttime = time();
- $rowcounter = 0;
- $totaltoprocess = count($FilesInDir);
- foreach ($FilesInDir as $filename) {
- set_time_limit(300);
- echo '<br>'.date('H:i:s').' ['.number_format(++$rowcounter).' / '.number_format($totaltoprocess).'] '.str_replace('\\', '/', $filename);
- $ThisFileInfo = $getID3->analyze($filename);
- getid3_lib::CopyTagsToComments($ThisFileInfo);
- if (file_exists($filename)) {
- $ThisFileInfo['file_modified_time'] = filemtime($filename);
- $ThisFileInfo['md5_file'] = ($getid3_demo_mysql_md5_file ? md5_file($filename) : '');
- }
- if (empty($ThisFileInfo['fileformat'])) {
- echo ' (<span style="color: #990099;">unknown file type</span>)';
- } else {
- if (!empty($ThisFileInfo['error'])) {
- echo ' (<span style="color: #FF0000;">errors</span>)';
- } elseif (!empty($ThisFileInfo['warning'])) {
- echo ' (<span style="color: #FF9999;">warnings</span>)';
- } else {
- echo ' (<span style="color: #009900;">OK</span>)';
- }
- $this_track_track = '';
- if (!empty($ThisFileInfo['comments']['track'])) {
- foreach ($ThisFileInfo['comments']['track'] as $key => $value) {
- if (strlen($value) > strlen($this_track_track)) {
- $this_track_track = str_pad($value, 2, '0', STR_PAD_LEFT);
- }
- }
- if (ereg('^([0-9]+)/([0-9]+)$', $this_track_track, $matches)) {
- // change "1/5"->"01/05", "3/12"->"03/12", etc
- $this_track_track = str_pad($matches[1], 2, '0', STR_PAD_LEFT).'/'.str_pad($matches[2], 2, '0', STR_PAD_LEFT);
- }
- }
- $this_track_remix = '';
- $this_track_title = '';
- if (!empty($ThisFileInfo['comments']['title'])) {
- foreach ($ThisFileInfo['comments']['title'] as $possible_title) {
- if (strlen($possible_title) > strlen($this_track_title)) {
- $this_track_title = $possible_title;
- }
- }
- }
- $ParenthesesPairs = array('()', '[]', '{}');
- foreach ($ParenthesesPairs as $pair) {
- if (preg_match_all('/(.*) '.preg_quote($pair{0}).'(([^'.preg_quote($pair).']*[\- '.preg_quote($pair{0}).'])?(cut|dub|edit|version|live|reprise|[a-z]*mix))'.preg_quote($pair{1}).'/iU', $this_track_title, $matches)) {
- $this_track_title = $matches[1][0];
- $this_track_remix = implode("\t", $matches[2]);
- }
- }
- if (!empty($_REQUEST['rescanerrors'])) {
- $SQLquery = 'UPDATE `'.GETID3_DB_TABLE.'` SET ';
- $SQLquery .= '`LastModified` = "'.mysql_escape_string(@$ThisFileInfo['file_modified_time']).'", ';
- $SQLquery .= '`md5_file` = "'.mysql_escape_string(@$ThisFileInfo['md5_file']).'", ';
- $SQLquery .= '`md5_data` = "'.mysql_escape_string(@$ThisFileInfo['md5_data']).'", ';
- $SQLquery .= '`md5_data_source` = "'.mysql_escape_string(@$ThisFileInfo['md5_data_source']).'", ';
- $SQLquery .= '`filesize` = "'.mysql_escape_string(@$ThisFileInfo['filesize']).'", ';
- $SQLquery .= '`fileformat` = "'.mysql_escape_string(@$ThisFileInfo['fileformat']).'", ';
- $SQLquery .= '`audio_dataformat` = "'.mysql_escape_string(@$ThisFileInfo['audio']['dataformat']).'", ';
- $SQLquery .= '`video_dataformat` = "'.mysql_escape_string(@$ThisFileInfo['video']['dataformat']).'", ';
- $SQLquery .= '`audio_bitrate` = "'.mysql_escape_string(@$ThisFileInfo['audio']['bitrate']).'", ';
- $SQLquery .= '`video_bitrate` = "'.mysql_escape_string(@$ThisFileInfo['video']['bitrate']).'", ';
- $SQLquery .= '`playtime_seconds` = "'.mysql_escape_string(@$ThisFileInfo['playtime_seconds']).'", ';
- $SQLquery .= '`tags` = "'.mysql_escape_string(@implode("\t", @array_keys(@$ThisFileInfo['tags']))).'", ';
- $SQLquery .= '`artist` = "'.mysql_escape_string(@implode("\t", @$ThisFileInfo['comments']['artist'])).'", ';
- $SQLquery .= '`title` = "'.mysql_escape_string($this_track_title).'", ';
- $SQLquery .= '`remix` = "'.mysql_escape_string($this_track_remix).'", ';
- $SQLquery .= '`album` = "'.mysql_escape_string(@implode("\t", @$ThisFileInfo['comments']['album'])).'", ';
- $SQLquery .= '`genre` = "'.mysql_escape_string(@implode("\t", @$ThisFileInfo['comments']['genre'])).'", ';
- $SQLquery .= '`comment` = "'.mysql_escape_string(@implode("\t", @$ThisFileInfo['comments']['comment'])).'", ';
- $SQLquery .= '`track` = "'.mysql_escape_string($this_track_track).'", ';
- $SQLquery .= '`comments_all` = "'.mysql_escape_string(@serialize(@$ThisFileInfo['comments'])).'", ';
- $SQLquery .= '`comments_id3v2` = "'.mysql_escape_string(@serialize(@$ThisFileInfo['tags']['id3v2'])).'", ';
- $SQLquery .= '`comments_ape` = "'.mysql_escape_string(@serialize(@$ThisFileInfo['tags']['ape'])).'", ';
- $SQLquery .= '`comments_lyrics3` = "'.mysql_escape_string(@serialize(@$ThisFileInfo['tags']['lyrics3'])).'", ';
- $SQLquery .= '`comments_id3v1` = "'.mysql_escape_string(@serialize(@$ThisFileInfo['tags']['id3v1'])).'", ';
- $SQLquery .= '`warning` = "'.mysql_escape_string(@implode("\t", @$ThisFileInfo['warning'])).'", ';
- $SQLquery .= '`error` = "'.mysql_escape_string(@implode("\t", @$ThisFileInfo['error'])).'", ';
- $SQLquery .= '`encoder_options` = "'.mysql_escape_string(trim(@$ThisFileInfo['audio']['encoder'].' '.@$ThisFileInfo['audio']['encoder_options'])).'", ';
- $SQLquery .= '`vbr_method` = "'.mysql_escape_string(@$ThisFileInfo['mpeg']['audio']['VBR_method']).'", ';
- $SQLquery .= '`track_volume` = "'.mysql_escape_string(@$ThisFileInfo['replay_gain']['track']['volume']).'" ';
- $SQLquery .= 'WHERE (`filename` = "'.mysql_escape_string(@$ThisFileInfo['filenamepath']).'")';
- } elseif (!empty($_REQUEST['scan']) || !empty($_REQUEST['newscan'])) {
- $SQLquery = 'INSERT INTO `'.GETID3_DB_TABLE.'` (`filename`, `LastModified`, `md5_file`, `md5_data`, `md5_data_source`, `filesize`, `fileformat`, `audio_dataformat`, `video_dataformat`, `audio_bitrate`, `video_bitrate`, `playtime_seconds`, `tags`, `artist`, `title`, `remix`, `album`, `genre`, `comment`, `track`, `comments_all`, `comments_id3v2`, `comments_ape`, `comments_lyrics3`, `comments_id3v1`, `warning`, `error`, `encoder_options`, `vbr_method`, `track_volume`) VALUES (';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['filenamepath']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['file_modified_time']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['md5_file']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['md5_data']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['md5_data_source']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['filesize']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['fileformat']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['audio']['dataformat']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['video']['dataformat']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['audio']['bitrate']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['video']['bitrate']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['playtime_seconds']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@implode("\t", @array_keys(@$ThisFileInfo['tags']))).'", ';
- $SQLquery .= '"'.mysql_escape_string(@implode("\t", @$ThisFileInfo['comments']['artist'])).'", ';
- $SQLquery .= '"'.mysql_escape_string($this_track_title).'", ';
- $SQLquery .= '"'.mysql_escape_string($this_track_remix).'", ';
- $SQLquery .= '"'.mysql_escape_string(@implode("\t", @$ThisFileInfo['comments']['album'])).'", ';
- $SQLquery .= '"'.mysql_escape_string(@implode("\t", @$ThisFileInfo['comments']['genre'])).'", ';
- $SQLquery .= '"'.mysql_escape_string(@implode("\t", @$ThisFileInfo['comments']['comment'])).'", ';
- $SQLquery .= '"'.mysql_escape_string($this_track_track).'", ';
- $SQLquery .= '"'.mysql_escape_string(@serialize(@$ThisFileInfo['comments'])).'", ';
- $SQLquery .= '"'.mysql_escape_string(@serialize(@$ThisFileInfo['tags']['id3v2'])).'", ';
- $SQLquery .= '"'.mysql_escape_string(@serialize(@$ThisFileInfo['tags']['ape'])).'", ';
- $SQLquery .= '"'.mysql_escape_string(@serialize(@$ThisFileInfo['tags']['lyrics3'])).'", ';
- $SQLquery .= '"'.mysql_escape_string(@serialize(@$ThisFileInfo['tags']['id3v1'])).'", ';
- $SQLquery .= '"'.mysql_escape_string(@implode("\t", @$ThisFileInfo['warning'])).'", ';
- $SQLquery .= '"'.mysql_escape_string(@implode("\t", @$ThisFileInfo['error'])).'", ';
- $SQLquery .= '"'.mysql_escape_string(trim(@$ThisFileInfo['audio']['encoder'].' '.@$ThisFileInfo['audio']['encoder_options'])).'", ';
- $SQLquery .= '"'.mysql_escape_string(!empty($ThisFileInfo['mpeg']['audio']['LAME']) ? 'LAME' : @$ThisFileInfo['mpeg']['audio']['VBR_method']).'", ';
- $SQLquery .= '"'.mysql_escape_string(@$ThisFileInfo['replay_gain']['track']['volume']).'")';
- }
- flush();
- safe_mysql_query($SQLquery);
- }
- }
- $SQLquery = 'OPTIMIZE TABLE `'.GETID3_DB_TABLE.'`';
- safe_mysql_query($SQLquery);
- echo '<hr>Done scanning!<hr>';
- } elseif (!empty($_REQUEST['missingtrackvolume'])) {
- $MissingTrackVolumeFilesScanned = 0;
- $MissingTrackVolumeFilesAdjusted = 0;
- $MissingTrackVolumeFilesDeleted = 0;
- $SQLquery = 'SELECT `filename`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`track_volume` = "0")';
- $SQLquery .= ' AND (`audio_bitrate` > "0")';
- $result = safe_mysql_query($SQLquery);
- echo 'Scanning <span ID="missingtrackvolumeNowScanning">0</span> / '.number_format(mysql_num_rows($result)).' files for track volume information:<hr>';
- while ($row = mysql_fetch_array($result)) {
- set_time_limit(30);
- echo '<script>if (document.getElementById("missingtrackvolumeNowScanning")) document.getElementById("missingtrackvolumeNowScanning").innerHTML = "'.number_format($MissingTrackVolumeFilesScanned++).'";</script>. ';
- flush();
- if (file_exists($row['filename'])) {
- $ThisFileInfo = $getID3->analyze($row['filename']);
- if (!empty($ThisFileInfo['replay_gain']['track']['volume'])) {
- $MissingTrackVolumeFilesAdjusted++;
- $SQLquery = 'UPDATE `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' SET `track_volume` = "'.$ThisFileInfo['replay_gain']['track']['volume'].'"';
- $SQLquery .= ' WHERE (`filename` = "'.mysql_escape_string($row['filename']).'")';
- safe_mysql_query($SQLquery);
- }
- } else {
- $MissingTrackVolumeFilesDeleted++;
- $SQLquery = 'DELETE FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`filename` = "'.mysql_escape_string($row['filename']).'")';
- safe_mysql_query($SQLquery);
- }
- }
- echo '<hr>Scanned '.number_format($MissingTrackVolumeFilesScanned).' files with no track volume information.<br>';
- echo 'Found track volume information for '.number_format($MissingTrackVolumeFilesAdjusted).' of them (could not find info for '.number_format($MissingTrackVolumeFilesScanned - $MissingTrackVolumeFilesAdjusted).' files; deleted '.number_format($MissingTrackVolumeFilesDeleted).' records of missing files)<hr>';
- } elseif (!empty($_REQUEST['deadfilescheck'])) {
- $SQLquery = 'SELECT COUNT(*) AS `num`, `filename`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' GROUP BY `filename`';
- $SQLquery .= ' ORDER BY `num` DESC';
- $result = safe_mysql_query($SQLquery);
- $DupesDeleted = 0;
- while ($row = mysql_fetch_array($result)) {
- set_time_limit(30);
- if ($row['num'] <= 1) {
- break;
- }
- echo '<br>'.FixTextFields($row['filename']).' (<font color="#FF9999">duplicate</font>)';
- $SQLquery = 'DELETE FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE `filename` LIKE "'.mysql_escape_string($row['filename']).'"';
- safe_mysql_query($SQLquery);
- $DupesDeleted++;
- }
- if ($DupesDeleted > 0) {
- echo '<hr>Deleted <b>'.number_format($DupesDeleted).'</b> duplicate filenames<hr>';
- }
- $SQLquery = 'SELECT `filename`, `filesize`, `LastModified`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' ORDER BY `filename` ASC';
- $result = safe_mysql_query($SQLquery);
- $totalchecked = 0;
- $totalremoved = 0;
- $previousdir = '';
- while ($row = mysql_fetch_array($result)) {
- $totalchecked++;
- set_time_limit(30);
- $reason = '';
- if (!file_exists($row['filename'])) {
- $reason = 'deleted';
- } elseif (filesize($row['filename']) != $row['filesize']) {
- $reason = 'filesize changed';
- } elseif (filemtime($row['filename']) != $row['LastModified']) {
- if (abs(filemtime($row['filename']) - $row['LastModified']) != 3600) {
- // off by exactly one hour == daylight savings time
- $reason = 'last-modified time changed';
- }
- }
- $thisdir = dirname($row['filename']);
- if ($reason) {
- $totalremoved++;
- echo '<br>'.FixTextFields($row['filename']).' (<font color="#FF9999">'.$reason.'</font>)';
- flush();
- $SQLquery = 'DELETE FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`filename` = "'.mysql_escape_string($row['filename']).'")';
- safe_mysql_query($SQLquery);
- } elseif ($thisdir != $previousdir) {
- echo '. ';
- flush();
- }
- $previousdir = $thisdir;
- }
- echo '<hr><b>'.number_format($totalremoved).' of '.number_format($totalchecked).' files in database no longer exist, or have been altered since last scan. Removed from database.</b><hr>';
- } elseif (!empty($_REQUEST['encodedbydistribution'])) {
- if (!empty($_REQUEST['m3u'])) {
- header('Content-type: audio/x-mpegurl');
- echo '#EXTM3U'."\n";
- $SQLquery = 'SELECT `filename`, `comments_id3v2`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`encoder_options` = "'.mysql_escape_string($_REQUEST['encodedbydistribution']).'")';
- $result = mysql_query($SQLquery);
- $NonBlankEncodedBy = '';
- $BlankEncodedBy = '';
- while ($row = mysql_fetch_array($result)) {
- set_time_limit(30);
- $CommentArray = unserialize($row['comments_id3v2']);
- if (isset($CommentArray['encoded_by'][0])) {
- $NonBlankEncodedBy .= WindowsShareSlashTranslate($row['filename'])."\n";
- } else {
- $BlankEncodedBy .= WindowsShareSlashTranslate($row['filename'])."\n";
- }
- }
- echo $NonBlankEncodedBy;
- echo $BlankEncodedBy;
- exit;
- } elseif (!empty($_REQUEST['showfiles'])) {
- echo '<a href="'.$_SERVER['PHP_SELF'].'?encodedbydistribution='.urlencode('%').'">show all</a><br>';
- echo '<table border="1">';
- $SQLquery = 'SELECT `filename`, `comments_id3v2`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $result = mysql_query($SQLquery);
- while ($row = mysql_fetch_array($result)) {
- set_time_limit(30);
- $CommentArray = unserialize($row['comments_id3v2']);
- if (($_REQUEST['encodedbydistribution'] == '%') || (!empty($CommentArray['encoded_by'][0]) && ($_REQUEST['encodedbydistribution'] == $CommentArray['encoded_by'][0]))) {
- echo '<tr><td><a href="'.$_SERVER['PHP_SELF'].'?m3ufilename='.urlencode($row['filename']).'">m3u</a></td>';
- echo '<td><a href="demo.browse.php?filename='.rawurlencode($row['filename']).'">'.FixTextFields($row['filename']).'</a></td></tr>';
- }
- }
- echo '</table>';
- } else {
- $SQLquery = 'SELECT `encoder_options`, `comments_id3v2`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' ORDER BY (`encoder_options` LIKE "LAME%") DESC, (`encoder_options` LIKE "CBR%") DESC';
- $result = mysql_query($SQLquery);
- $EncodedBy = array();
- while ($row = mysql_fetch_array($result)) {
- set_time_limit(30);
- $CommentArray = unserialize($row['comments_id3v2']);
- if (isset($EncodedBy[$row['encoder_options']][@$CommentArray['encoded_by'][0]])) {
- $EncodedBy[$row['encoder_options']][@$CommentArray['encoded_by'][0]]++;
- } else {
- $EncodedBy[$row['encoder_options']][@$CommentArray['encoded_by'][0]] = 1;
- }
- }
- echo '<a href="'.$_SERVER['PHP_SELF'].'?encodedbydistribution='.urlencode('%').'&m3u=1">.m3u version</a><br>';
- echo '<table border="1"><tr><th>m3u</th><th>Encoder Options</th><th>Encoded By (ID3v2)</th></tr>';
- foreach ($EncodedBy as $key => $value) {
- echo '<tr><TD VALIGN="TOP"><a href="'.$_SERVER['PHP_SELF'].'?encodedbydistribution='.urlencode($key).'&showfiles=1&m3u=1">m3u</a></td>';
- echo '<TD VALIGN="TOP"><b>'.$key.'</b></td>';
- echo '<td><table border="0" WIDTH="100%">';
- arsort($value);
- foreach ($value as $string => $count) {
- echo '<tr><TD ALIGN="RIGHT" WIDTH="50"><i>'.number_format($count).'</i></td><td> </td>';
- echo '<td><a href="'.$_SERVER['PHP_SELF'].'?encodedbydistribution='.urlencode($string).'&showfiles=1">'.$string.'</a></td></tr>';
- }
- echo '</table></td></tr>';
- }
- echo '</table>';
- }
- } elseif (!empty($_REQUEST['audiobitrates'])) {
- getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.mp3.php', __FILE__, true);
- $BitrateDistribution = array();
- $SQLquery = 'SELECT ROUND(audio_bitrate / 1000) AS `RoundBitrate`, COUNT(*) AS `num`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`audio_bitrate` > 0)';
- $SQLquery .= ' GROUP BY `RoundBitrate`';
- $result = safe_mysql_query($SQLquery);
- while ($row = mysql_fetch_array($result)) {
- @$BitrateDistribution[getid3_mp3::ClosestStandardMP3Bitrate($row['RoundBitrate'] * 1000)] += $row['num']; // safe_inc
- }
- echo '<table border="1" cellspacing="0" cellpadding="3">';
- echo '<tr><th>Bitrate</th><th>Count</th></tr>';
- foreach ($BitrateDistribution as $Bitrate => $Count) {
- echo '<tr>';
- echo '<TD ALIGN="RIGHT">'.round($Bitrate / 1000).' kbps</td>';
- echo '<TD ALIGN="RIGHT">'.number_format($Count).'</td>';
- echo '</tr>';
- }
- echo '</table>';
- } elseif (!empty($_REQUEST['emptygenres'])) {
- $SQLquery = 'SELECT `fileformat`, `filename`, `genre`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`genre` = "")';
- $SQLquery .= ' OR (`genre` = "Unknown")';
- $SQLquery .= ' OR (`genre` = "Other")';
- $SQLquery .= ' ORDER BY `filename` ASC';
- $result = safe_mysql_query($SQLquery);
- if (!empty($_REQUEST['m3u'])) {
- header('Content-type: audio/x-mpegurl');
- echo '#EXTM3U'."\n";
- while ($row = mysql_fetch_array($result)) {
- if (!in_array($row['fileformat'], $IgnoreNoTagFormats)) {
- echo WindowsShareSlashTranslate($row['filename'])."\n";
- }
- }
- exit;
- } else {
- echo '<a href="'.$_SERVER['PHP_SELF'].'?emptygenres='.urlencode($_REQUEST['emptygenres']).'&m3u=1">.m3u version</a><br>';
- $EmptyGenreCounter = 0;
- echo '<table border="1" cellspacing="0" cellpadding="3">';
- echo '<tr><th>m3u</th><th>filename</th></tr>';
- while ($row = mysql_fetch_array($result)) {
- if (!in_array($row['fileformat'], $IgnoreNoTagFormats)) {
- $EmptyGenreCounter++;
- echo '<tr>';
- echo '<td><a href="'.$_SERVER['PHP_SELF'].'?m3ufilename='.urlencode($row['filename']).'">m3u</a></td>';
- echo '<td><a href="demo.browse.php?filename='.rawurlencode($row['filename']).'">'.FixTextFields($row['filename']).'</a></td>';
- echo '</tr>';
- }
- }
- echo '</table>';
- echo '<b>'.number_format($EmptyGenreCounter).'</b> files with empty genres';
- }
- } elseif (!empty($_REQUEST['nonemptycomments'])) {
- $SQLquery = 'SELECT `filename`, `comment`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`comment` <> "")';
- $SQLquery .= ' ORDER BY `comment` ASC';
- $result = safe_mysql_query($SQLquery);
- if (!empty($_REQUEST['m3u'])) {
- header('Content-type: audio/x-mpegurl');
- echo '#EXTM3U'."\n";
- while ($row = mysql_fetch_array($result)) {
- echo WindowsShareSlashTranslate($row['filename'])."\n";
- }
- exit;
- } else {
- $NonEmptyCommentsCounter = 0;
- echo '<a href="'.$_SERVER['PHP_SELF'].'?nonemptycomments='.urlencode($_REQUEST['nonemptycomments']).'&m3u=1">.m3u version</a><br>';
- echo '<table border="1" cellspacing="0" cellpadding="3">';
- echo '<tr><th>m3u</th><th>filename</th><th>comments</th></tr>';
- while ($row = mysql_fetch_array($result)) {
- $NonEmptyCommentsCounter++;
- echo '<tr>';
- echo '<td><a href="'.$_SERVER['PHP_SELF'].'?m3ufilename='.urlencode($row['filename']).'">m3u</a></td>';
- echo '<td><a href="demo.browse.php?filename='.rawurlencode($row['filename']).'">'.FixTextFields($row['filename']).'</a></td>';
- if (strlen(trim($row['comment'])) > 0) {
- echo '<td>'.FixTextFields($row['comment']).'</td>';
- } else {
- echo '<td><i>space</i></td>';
- }
- echo '</tr>';
- }
- echo '</table>';
- echo '<b>'.number_format($NonEmptyCommentsCounter).'</b> files with non-empty comments';
- }
- } elseif (!empty($_REQUEST['trackzero'])) {
- $SQLquery = 'SELECT `filename`, `track`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`track` <> "")';
- $SQLquery .= ' AND ((`track` < "1")';
- $SQLquery .= ' OR (`track` > "99"))';
- $SQLquery .= ' ORDER BY `filename` ASC';
- $result = safe_mysql_query($SQLquery);
- if (!empty($_REQUEST['m3u'])) {
- header('Content-type: audio/x-mpegurl');
- echo '#EXTM3U'."\n";
- while ($row = mysql_fetch_array($result)) {
- if ((strlen($row['track']) > 0) && ($row['track'] < 1) || ($row['track'] > 99)) {
- echo WindowsShareSlashTranslate($row['filename'])."\n";
- }
- }
- exit;
- } else {
- echo '<a href="'.$_SERVER['PHP_SELF'].'?trackzero='.urlencode($_REQUEST['trackzero']).'&m3u=1">.m3u version</a><br>';
- $TrackZeroCounter = 0;
- echo '<table border="1" cellspacing="0" cellpadding="3">';
- echo '<tr><th>m3u</th><th>filename</th><th>track</th></tr>';
- while ($row = mysql_fetch_array($result)) {
- if ((strlen($row['track']) > 0) && ($row['track'] < 1) || ($row['track'] > 99)) {
- $TrackZeroCounter++;
- echo '<tr>';
- echo '<td><a href="'.$_SERVER['PHP_SELF'].'?m3ufilename='.urlencode($row['filename']).'">m3u</a></td>';
- echo '<td><a href="demo.browse.php?filename='.rawurlencode($row['filename']).'">'.FixTextFields($row['filename']).'</a></td>';
- echo '<td>'.FixTextFields($row['track']).'</td>';
- echo '</tr>';
- }
- }
- echo '</table>';
- echo '<b>'.number_format($TrackZeroCounter).'</b> files with track "zero"';
- }
- } elseif (!empty($_REQUEST['titlefeat'])) {
- $SQLquery = 'SELECT `filename`, `title`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`title` LIKE "%feat.%")';
- $SQLquery .= ' ORDER BY `filename` ASC';
- $result = safe_mysql_query($SQLquery);
- if (!empty($_REQUEST['m3u'])) {
- header('Content-type: audio/x-mpegurl');
- echo '#EXTM3U'."\n";
- while ($row = mysql_fetch_array($result)) {
- echo WindowsShareSlashTranslate($row['filename'])."\n";
- }
- exit;
- } else {
- echo '<b>'.number_format(mysql_num_rows($result)).'</b> files with "feat." in the title (instead of the artist)<br><br>';
- echo '<a href="'.$_SERVER['PHP_SELF'].'?titlefeat='.urlencode($_REQUEST['titlefeat']).'&m3u=1">.m3u version</a><br>';
- echo '<table border="1" cellspacing="0" cellpadding="3">';
- echo '<tr><th>m3u</th><th>filename</th><th>title</th></tr>';
- while ($row = mysql_fetch_array($result)) {
- echo '<tr>';
- echo '<td><a href="'.$_SERVER['PHP_SELF'].'?m3ufilename='.urlencode($row['filename']).'">m3u</a></td>';
- echo '<td><a href="demo.browse.php?filename='.rawurlencode($row['filename']).'">'.FixTextFields($row['filename']).'</a></td>';
- echo '<td>'.eregi_replace('(feat\. .*)', '<b>\\1</b>', FixTextFields($row['title'])).'</td>';
- echo '</tr>';
- }
- echo '</table>';
- }
- } elseif (!empty($_REQUEST['tracknoalbum'])) {
- $SQLquery = 'SELECT `filename`, `track`, `album`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`track` <> "")';
- $SQLquery .= ' AND (`album` = "")';
- $SQLquery .= ' ORDER BY `filename` ASC';
- $result = safe_mysql_query($SQLquery);
- if (!empty($_REQUEST['m3u'])) {
- header('Content-type: audio/x-mpegurl');
- echo '#EXTM3U'."\n";
- while ($row = mysql_fetch_array($result)) {
- echo WindowsShareSlashTranslate($row['filename'])."\n";
- }
- exit;
- } else {
- echo '<b>'.number_format(mysql_num_rows($result)).'</b> files with a track number, but no album<br><br>';
- echo '<a href="'.$_SERVER['PHP_SELF'].'?tracknoalbum='.urlencode($_REQUEST['tracknoalbum']).'&m3u=1">.m3u version</a><br>';
- echo '<table border="1" cellspacing="0" cellpadding="3">';
- echo '<tr><th>m3u</th><th>filename</th><th>track</th><th>album</th></tr>';
- while ($row = mysql_fetch_array($result)) {
- echo '<tr>';
- echo '<td><a href="'.$_SERVER['PHP_SELF'].'?m3ufilename='.urlencode($row['filename']).'">m3u</a></td>';
- echo '<td><a href="demo.browse.php?filename='.rawurlencode($row['filename']).'">'.FixTextFields($row['filename']).'</a></td>';
- echo '<td>'.FixTextFields($row['track']).'</td>';
- echo '<td>'.FixTextFields($row['album']).'</td>';
- echo '</tr>';
- }
- echo '</table>';
- }
- } elseif (!empty($_REQUEST['synchronizetagsfrom']) && !empty($_REQUEST['filename'])) {
- echo 'Applying new tags from <b>'.$_REQUEST['synchronizetagsfrom'].'</b> in <b>'.FixTextFields($_REQUEST['filename']).'</b><ul>';
- $errors = array();
- if (SynchronizeAllTags($_REQUEST['filename'], $_REQUEST['synchronizetagsfrom'], 'A12', $errors)) {
- echo '<li>Sucessfully wrote tags</li>';
- } else {
- echo '<li>Tag writing had errors: <ul><li>'.implode('</li><li>', $errors).'</li></ul></li>';
- }
- echo '</ul>';
- } elseif (!empty($_REQUEST['unsynchronizedtags'])) {
- $NotOKfiles = 0;
- $Autofixedfiles = 0;
- $FieldsToCompare = array('title', 'artist', 'album', 'year', 'genre', 'comment', 'track');
- $TagsToCompare = array('id3v2'=>false, 'ape'=>false, 'lyrics3'=>false, 'id3v1'=>false);
- $ID3v1FieldLengths = array('title'=>30, 'artist'=>30, 'album'=>30, 'year'=>4, 'genre'=>99, 'comment'=>28);
- if (strpos($_REQUEST['unsynchronizedtags'], '2') !== false) {
- $TagsToCompare['id3v2'] = true;
- }
- if (strpos($_REQUEST['unsynchronizedtags'], 'A') !== false) {
- $TagsToCompare['ape'] = true;
- }
- if (strpos($_REQUEST['unsynchronizedtags'], 'L') !== false) {
- $TagsToCompare['lyrics3'] = true;
- }
- if (strpos($_REQUEST['unsynchronizedtags'], '1') !== false) {
- $TagsToCompare['id3v1'] = true;
- }
- echo '<a href="'.$_SERVER['PHP_SELF'].'?unsynchronizedtags='.urlencode($_REQUEST['unsynchronizedtags']).'&autofix=1">Auto-fix empty tags</a><br><br>';
- echo '<div id="Autofixing"></div>';
- echo '<table border="1" cellspacing="0" cellpadding="3">';
- echo '<tr>';
- echo '<th>View</th>';
- echo '<th>Filename</th>';
- echo '<th>Combined</th>';
- if ($TagsToCompare['id3v2']) {
- echo '<th><a href="'.$_SERVER['PHP_SELF'].'?unsynchronizedtags='.urlencode($_REQUEST['unsynchronizedtags']).'&autofix=1&autofixforcesource=id3v2&autofixforcedest=A1" TITLE="Auto-fix all tags to match ID3v2 contents" onClick="return confirm(\'Are you SURE you want to synchronize all tags to match ID3v2?\');">ID3v2</a></th>';
- }
- if ($TagsToCompare['ape']) {
- echo '<th><a href="'.$_SERVER['PHP_SELF'].'?unsynchronizedtags='.urlencode($_REQUEST['unsynchronizedtags']).'&autofix=1&autofixforcesource=ape&autofixforcedest=21" TITLE="Auto-fix all tags to match APE contents" onClick="return confirm(\'Are you SURE you want to synchronize all tags to match APE?\');">APE</a></th>';
- }
- if ($TagsToCompare['lyrics3']) {
- echo '<th>Lyrics3</th>';
- }
- if ($TagsToCompare['id3v1']) {
- echo '<th><a href="'.$_SERVER['PHP_SELF'].'?unsynchronizedtags='.urlencode($_REQUEST['unsynchronizedtags']).'&autofix=1&autofixforcesource=ape&autofixforcedest=2A" TITLE="Auto-fix all tags to match ID3v1 contents" onClick="return confirm(\'Are you SURE you want to synchronize all tags to match ID3v1?\');">ID3v1</a></th>';
- }
- echo '</tr>';
- $SQLquery = 'SELECT `filename`, `comments_all`, `comments_id3v2`, `comments_ape`, `comments_lyrics3`, `comments_id3v1`';
- $SQLquery .= ' FROM `'.GETID3_DB_TABLE.'`';
- $SQLquery .= ' WHERE (`fileformat` = "mp3")';
- $SQLquery .= ' ORDER BY `filename` ASC';
- $result = safe_mysql_query($SQLquery);
- $lastdir = '';
- while ($row = mysql_fetch_array($result)) {
- set_time_limit(30);
- if ($lastdir != dirname($row['filename'])) {
- echo '<script>if (document.getElementById("Autofixing")) document.getElementById("Autofixing").innerHTML = "'.htmlentities($lastdir, ENT_QUOTES).'";</script>';
- flush();
- }
- $FileOK = true;
- $Mismatched = array('id3v2'=>false, 'ape'=>false, 'lyrics3'=>false, 'id3v1'=>false);
- $SemiMatched = array('id3v2'=>false, 'ape'=>false, 'lyrics3'=>false, 'id3v1'=>false);
- $EmptyTags = array('id3v2'=>true, 'ape'=>true, 'lyrics3'=>true, 'id3v1'=>true);
- $Comments['all'] = @unserialize($row['comments_all']);
- $Comments['id3v2'] = @unserialize($row['comments_id3v2']);
- $Comments['ape'] = @unserialize($row['comments_ape']);
- $Comments['lyrics3'] = @unserialize($row['comments_lyrics3']);
- $Comments['id3v1'] = @unserialize($row['comments_id3v1']);
- if (isset($Comments['ape']['tracknumber'])) {
- $Comments['ape']['track'] = $Comments['ape']['tracknumber'];
- unset($Comments['ape']['tracknumber']);
- }
- if (!empty($Comments['all']['track'])) {
- $besttrack = '';
- foreach ($Comments['all']['track'] as $key => $value) {
- if (strlen($value) > strlen($besttrack)) {
- $besttrack = $value;
- }
- }
- $Comments['all']['track'] = array(0=>$besttrack);
- }
- $ThisLine = '<tr>';
- $ThisLine .= '<td><a href="demo.browse.php?filename='.rawurlencode($row['filename']).'">view</a></td>';
- $ThisLine .= '<td><a href="'.$_SERVER['PHP_SELF'].'?m3ufilename='.urlencode($row['filename']).'">'.FixTextFields($row['filename']).'</a></td>';
- $tagvalues = '';
- foreach ($FieldsToCompare as $fieldname) {
- $tagvalues .= $fieldname.' = '.@implode(" \n", @$Comments['all'][$fieldname])." \n";
- }
- $ThisLine .= '<td><a href="'.$_SERVER['PHP_SELF'].'?synchronizetagsfrom=all&filename='.urlencode($row['filename']).'" TITLE="'.htmlentities(rtrim($tagvalues, "\n"), ENT_QUOTES).'" TARGET="retagwindow">all</a></td>';
- foreach ($TagsToCompare as $tagtype => $CompareThisTagType) {
- if ($CompareThisTagType) {
- $tagvalues = '';
- foreach ($FieldsToCompare as $fieldname) {
- if ($tagtype == 'id3v1') {
- getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v1.php', __FILE__, true);
- if (($fieldname == 'genre') && !getid3_id3v1::LookupGenreID(@$Comments['all'][$fieldname][0])) {
- // non-standard genres can never match, so just ignore
- $tagvalues .= $fieldname.' = '.@$Comments[$tagtype][$fieldname][0]."\n";
- } elseif ($fieldname == 'comment') {
- if (rtrim(substr(@$Comments[$tagtype][$fieldname][0], 0, 28)) != rtrim(substr(@$Comments['all'][$fieldname][0], 0, 28))) {
- $tagvalues .= $fieldname.' = [['.@$Comments[$tagtype][$fieldname][0].']]'."\n";
- if (trim(strtolower(RemoveAccents(substr(@$Comments[$tagtype][$fieldname][0], 0, 28)))) == trim(strtolower(RemoveAccents(substr(@$Comments['all'][$fieldname][0], 0, 28))))) {
- $SemiMatched[$tagtype] = true;
- } else {
- $Mismatched[$tagtype] = true;
- }
- $FileOK = false;
- } else {
- $tagvalues .= $fieldname.' = '.@$Comments[$tagtype][$fieldname][0]."\n";
- }
- } elseif ($fieldname == 'track') {
- // intval('01/20') == intval('1')
- if (intval(@$Comments[$tagtype][$fieldname][0]) != intval(@$Comments['all'][$fieldname][0])) {
- $tagvalues .= $fieldname.' = [['.@$Comments[$tagtype][$fieldname][0].']]'."\n";
- $Mismatched[$tagtype] = true;
- $FileOK = false;
- } else {
- $tagvalues .= $fieldname.' = '.@$Comments[$tagtype][$fieldname][0]."\n";
- }
- } elseif (rtrim(substr(@$Comments[$tagtype][$fieldname][0], 0, 30)) != rtrim(substr(@$Comments['all'][$fieldname][0], 0, 30))) {
- $tagvalues .= $fieldname.' = [['.@$Comments[$tagtype][$fieldname][0].']]'."\n";
- if (strtolower(RemoveAccents(trim(substr(@$Comments[$tagtype][$fieldname][0], 0, 30)))) == strtolower(RemoveAccents(trim(substr(@$Comments['all'][$fieldname][0], 0, 30))))) {
- $SemiMatched[$tagtype] = true;
- } else {
- $Mismatched[$tagtype] = true;
- }
- $FileOK = false;
- if (strlen(trim(@$Comments[$tagtype][$fieldname][0])) > 0) {
- $EmptyTags[$tagtype] = false;
- }
- } else {
- $tagvalues .= $fieldname.' = '.@$Comments[$tagtype][$fieldname][0]."\n";
- if (strlen(trim(@$Comments[$tagtype][$fieldname][0])) > 0) {
- $EmptyTags[$tagtype] = false;
- }
- }
- } elseif (($tagtype == 'ape') && ($fieldname == 'year')) {
- if ((@$Comments['ape']['date'][0] != @$Comments['all']['year'][0]) && (@$Comments['ape']['year'][0] != @$Comments['all']['year'][0])) {
- $tagvalues .= $fieldname.' = [['.@$Comments['ape']['date'][0].']]'."\n";
- $Mismatched[$tagtype] = true;
- $FileOK = false;
- if (strlen(trim(@$Comments['ape']['date'][0])) > 0) {
- $EmptyTags[$tagtype] = false;
- }
- } else {
- $tagvalues .= $fieldname.' = '.@$Comments[$tagtype][$fieldname][0]."\n";
- if (strlen(trim(@$Comments[$tagtype][$fieldname][0])) > 0) {
- $EmptyTags[$tagtype] = false;
- }
- }
- } elseif (($fieldname == 'genre') && !empty($Comments['all'][$fieldname]) && !empty($Comments[$tagtype][$fieldname]) && in_array($Comments[$tagtype][$fieldname][0], $Comments['all'][$fieldname])) {
- $t…
Large files files are truncated, but you can click here to view the full file