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

require_once 'db.function.php';

$db = getDB();
$genome = $db->getAssoc("select name, genome_id from genome");
$method = $db->getAssoc("select name, method_id from method");
$fieldmap = array('genome' => 'genome_id', 'method' => 'method_id');

foreach($_GET['vals'] as $bedfile_id => $values) {
    $bedfile_id = preg_replace("/[^0-9]/", '', $bedfile_id);
    if(!is_array($values) || !bedfile_access_permission($_SESSION['researcher_id'], $bedfile_id)) {
        continue;
    }
    $fields = array();
    $vals = array();
    foreach($values as $v) {
        $v['val'] = strip_tags($v['val']); // no shenanigans
        $fields[] = (isset($fieldmap[$v['field']]) ? $fieldmap[$v['field']] : $v['field']);
        if($v['field'] == 'genome') {
            $vals[] = (isset($genome[$v['val']]) ? $genome[$v['val']] : null);
        } else if($v['field'] == 'method') {
            $vals[] = (isset($method[$v['val']]) ? $method[$v['val']] : null);
            //$vals[] = $method[$v['val']];
        } else {
            $vals[] = $v['val'];
        }
    }
    $vals[] = $bedfile_id;
    $fields_clean = array_filter($fields, 'isSafeForSQL');
    if(count($fields_clean) != count($fields)) {
        print '{"err":"Illegal field name."}';
        die;
    }
    $set_clause = "SET " . join(' = ?, ', $fields) . ' = ?';
    $stat = $db->query("update bedfile $set_clause WHERE bedfile_id = ?", $vals);
    if(PEAR::isError($stat)) {
        file_put_contents("/tmp/dasrupd.log", print_r($_GET, true) . print_r($stat, true), FILE_APPEND);
        print '{"err":"An error occurred with the update. '. $stat->getUserInfo() . '"}';
        $db->rollback();
        die;
    }
    if($rawfilepath = $db->getOne("select filepath from rawbed where bedfile_id = ?", $bedfile_id)) {
        $header = str_replace("'", "'\''", $vals[array_search('header', $fields)]);
        $cmd = "/bin/sed -i '1 c $header' $rawfilepath";
        file_put_contents("/tmp/sed.log", "$cmd\n");
        require_once 'exec.class.php';
        exec::background($cmd);
    }
}
$db->commit();

print "{\"err\":\"\"}";


?>
