<?php
session_start();
require_once 'util.function.php';
if(!$_SESSION['researcher_id'] || !bedfile_access_permission($_SESSION['researcher_id'], $_GET['ids'])) {
    exit;
}

require_once 'db.function.php';
require_once 'const.inc.php';

$db = getDB();
$qmarks = join(',', array_fill(0, count($_GET['ids']), '?'));
$bedfiles = $db->query("select bedfile_id, filetype, header, name from bedfile where bedfile_id in ($qmarks)", $_GET['ids']);

$archive_name = preg_replace("/[\";'\#\!\@\?\/\\\[\]\{\}:,\+\=\$\%\^\&\*\`~\|]/", '_', $_GET['archive_name']);
$archive_name = preg_replace("/\.zip$/i", '', $archive_name);
$suffix = '';
if(trim($_GET['suffix'])) {
    $dot = ($_GET['suffix'][0] == '.' ? '' : '.');
    $suffix = trim("$dot$_GET[suffix]");
}

$tmp_parent = FILE_REPOSITORY_PATH . "/" . uniqid();
$tmpdir = "$tmp_parent/$archive_name";
mkdir($tmpdir, 0700, true);
chdir($tmp_parent);
$filterOutKeys = array('summarybed_id', 'bedfile_id');
while($r = $bedfiles->fetchRow()) {
    $fname = $orig_fname = "$tmpdir/$r[name]$suffix";
    for($j = 2; file_exists($fname); $j++) {
        $fname = generate_new_name($orig_fname, $j, "\\$suffix");
    }
    if($r['filetype'] == 'summarybed') {
        // pull all rows, save into file
        $rows = $db->query("select * from summarybed where bedfile_id = ?", $r['bedfile_id']);
        $fp = fopen($fname, "w");
        fputs($fp, trim($r['header']) . "\n");
        while($b = $rows->fetchRow()) {
            //if(isset($chrom_length[$r['chrom']]) && $r['chromend'] > $chrom_length[$r['chrom']]) {
            //    $r['chromend'] = $chrom_length[$r['chrom']]; //continue;
            //}
            $b = array_diff_key($b, array_flip($filterOutKeys));
            fputs($fp, trim(join("\t", $b)) . "\n");
        }
        fclose($fp);
    } else if($r['filetype'] == 'rawbed') {
        // copy file to tmp
        $filepath = $db->getOne("select filepath from rawbed where bedfile_id = ?", $r['bedfile_id']);
        copy($filepath, $fname);
    }
}
// zip files together
`zip -r $archive_name.zip $archive_name`;
// dump to browser
header("Content-type: application/zip");
header("Content-disposition: attachment; filename=\"$archive_name.zip\"");
readfile("$archive_name.zip");
rrmdir($tmp_parent);

function generate_new_name($fname, $j, $suffix) {
    $newname = preg_replace("/\.bed$|$suffix$/i", "$j$0", $fname);
    if($newname != $fname) {
        return $newname;
    } else {
        return "$fname$j";
    }
}
?>
