<?
if (!empty($_GET['userid']) && is_number($_GET['userid'])) {
	$UserID = $_GET['userid'];
} else {
	error(0);
}

if(!check_perms('zip_downloader')) {
	error(403);
}

$User = user_info($UserID);
$Perms = get_permissions($User['PermissionID']);
$UserClass = $Perms['Class'];

require(SERVER_ROOT.'/classes/class_torrent.php');
require(SERVER_ROOT.'/classes/class_zip.php');

if (empty($_GET['type'])) {
	error(0);
} else {
	
	switch ($_GET['type']) {
		case 'uploads':
			if(!check_paranoia('uploads', $User['Paranoia'], $UserClass, $UserID)) { error(403); }
			$SQL = "WHERE t.UserID='$UserID'";
			$Month = "t.Time";
			break;
		case 'snatches':
			if(!check_paranoia('snatched', $User['Paranoia'], $UserClass, $UserID)) { error(403); }
			$SQL = "JOIN xbt_snatched AS x ON t.ID=x.fid WHERE x.uid='$UserID'";
			$Month = "FROM_UNIXTIME(x.tstamp)";
			break;
		case 'seeding':
			if(!check_paranoia('seeding', $User['Paranoia'], $UserClass, $UserID)) { error(403); }
			$SQL = "JOIN xbt_files_users AS xfu ON t.ID = xfu.fid WHERE xfu.uid='$UserID' AND xfu.remaining = 0";
			$Month = "FROM_UNIXTIME(xfu.mtime)";
			break;
		default:
			error(0);
	}
}

ZIP::unlimit();

$DB->query("SELECT 
	DATE_FORMAT(".$Month.",'%b \'%y') AS Month,
	t.GroupID,
	t.Media,
	t.Format,
	t.Encoding,
	IF(t.RemasterYear=0,tg.Year,t.RemasterYear),
	tg.Name,
	t.Size,
	f.File
	FROM torrents as t 
	JOIN torrents_group AS tg ON t.GroupID=tg.ID 
	LEFT JOIN torrents_files AS f ON t.ID=f.TorrentID
	".$SQL."
	GROUP BY t.ID");
$Downloads = $DB->to_array(false,MYSQLI_NUM,false);
$Artists = get_artists($DB->collect('GroupID'));

list($UserID, $Username) = array_values(user_info($UserID));
$Zip = new ZIP($Username.'\'s '.ucfirst($_GET['type']));
foreach($Downloads as $Download) {
	list($Month, $GroupID, $Media, $Format, $Encoding, $Year, $Album, $Size, $Contents) = $Download;
	$Artist = display_artists($Artists[$GroupID],false,true,false);
	$Contents = unserialize(base64_decode($Contents));
	$Tor = new TORRENT($Contents, true);
	$Tor->set_announce_url(ANNOUNCE_URL.'/'.$LoggedUser['torrent_pass'].'/announce');
	unset($Tor->Val['announce-list']);

	$TorrentName='';
	$TorrentInfo='';
	$TorrentName = $Artist;
	$TorrentName .= $Album;

	if ($Year>0) { $TorrentName.=' - '.$Year; }

	if ($Media!='') { $TorrentInfo.=$Media; }

	if ($Format!='') {
		if ($TorrentInfo!='') { $TorrentInfo.=' - '; }
		$TorrentInfo.=$Format;
	}

	if ($Encoding!='') {
		if ($TorrentInfo!='') { $TorrentInfo.=' - '; }
		$TorrentInfo.=$Encoding;
	}

	if ($TorrentInfo!='') { $TorrentName.=' ('.$TorrentInfo.')'; }

	if (!$TorrentName) { $TorrentName="No Name"; }

	$FileName = file_string($TorrentName);
	if ($Browser == 'Internet Explorer') {
		$FileName = urlencode($FileName);
	}
	$FileName .= '.torrent';
	$Zip->add_file($Tor->enc(), file_string($Month).'/'.$FileName);
}
$Zip->close_stream();