<?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                             //
//                                                            ///
/////////////////////////////////////////////////////////////////


die('Due to a security issue, this demo has been disabled. It can be enabled by removing line 16 in demos/demo.mysql.php');


// 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']))).'", ';
&