<?php
require ("lib/genopar.lib.php");
require ("lib/config.php");

if(!doAuth(LVLADM)) {
	$genopar->fechaPagina(); exit;
}

$genopar= new Genopar(__FILE__);

$genopar->abrePagina("Submeter Nova Montagem");

verGetPost(array("nomeMtg", "submit", "tipoArq"));
echo $tipoArq."<BR>";
if (
    !($submit && $nomeMtg && ($tipoArq == "fasta" && $_FILES['fastaFile']['name']) || ($tipoArq == "gbZip" && $_FILES['gbZipFile']['name']))
   ){
	$genopar->abreForm();
	echo "<TABLE CELLSPACING=5 CELLPADDING=5 BORDER=1 RULES=ROWS FRAME=BOX>";
	echo "<TR>";
	echo "<TD>";
	echo "Nome da Montagem: ";
	echo "</TD>";
	echo "<TD>";
	$genopar->input("nomeMtg", "text", $nomeMtg, "", 30, 30);
	echo "</TD>";
	echo "</TR>";
	echo "<TR><TD></TD></TR>";
	echo "<TR>";
	echo "<TD>";
	$genopar->input("tipoArq", "radio", "fasta", "checked");
	echo " Arquivo Montagem (Fasta): ";
	echo "</TD>";
	echo "<TD>";
	$genopar->input("fastaFile", "file");
	echo "</TD>";
	echo "</TR>";
	echo "<TR>";
	echo "<TD>";
	$genopar->input("tipoArq", "radio", "gbZip");
	echo " Arquivos Anotação (GenBank): ";
	echo "</TD>";
	echo "<TD>";
	$genopar->input("gbZipFile", "file");
	echo "</TD>";
	echo "</TR>";
	echo "<TD align=center colspan=2>";
	$genopar->submit();
	echo "</TD>";
	echo "</TABLE>";
	$genopar->fechaForm();

}elseif($tipoArq == "fasta"){

	$db_name = $genopar->MySQL_Default_DBname;

	$genopar->abreBanco();

	$n = $genopar->queryBanco("SELECT idMontagem FROM contig WHERE idMontagem='$nomeMtg'");
	if ($n > 0)
		$genopar->error("Já existe uma montagem chamada <i>$nomeMtg</i>.");

	$genopar->fechaBanco();

	$size = 1 << 20; // size = 2^20 = 1 MB;
	$size = $size * 10; // size = 5 MB;
	$path = "tmp/";

	$genomaFasta = $path."/".$_FILES["fastaFile"]["name"];

	$file = $genopar->upload($_FILES["fastaFile"], $path, $size);

	if ($file){
		system("cd autoAnnot && perl autoAnnot.pl $db_name $nomeMtg $file");
	}

}else{
	$db_name = $genopar->MySQL_Default_DBname;

	$outAnnotDir = "Fasta/$nomeMtg";
	$outContigDir = "Fasta/$nomeMtg/Contigs";
	$outOrfDir = "Fasta/$nomeMtg/ORFs";

	$genopar->abreBanco();

	$n = $genopar->queryBanco("SELECT idMontagem FROM contig WHERE idMontagem='$nomeMtg'");
	if ($n > 0)
		$genopar->error("Já existe uma montagem chamada <i>$nomeMtg</i>.");

	$genopar->fechaBanco();

	$zipFile = $_FILES['gbZipFile']['name'];
	$allowedMIME = array("application/x-compressed", "application/x-gtar", "application/x-zip-compressed", "application/zip", "application/gzip");
	$size = 1 << 20; // size = 2^20 = 1 MB;
	$size = $size * 10; // size = 10 MB;
	$path = "tmp/";

	$file = $genopar->upload($_FILES["gbZipFile"], $path, $size, $allowedMIME);
	$dir = dirname($file);
// echo $file;
	if ($file){
		$list = unzip($file);
		if (is_array($list)){
			createTree($outAnnotDir);
// 			createDB($genopar, $dbName, $updateInfoAnnot, $DB_HOST, $DB_USER, $DB_PASS);
			$outDir = array_shift($list);

			foreach ($list as $file){
				$file = $outDir."/".$file;
				system("perl gbk2fna.pl $file $outContigDir");
				system("perl addAnnot.pl $file $nomeMtg $outOrfDir");
			}
		}elseif ($list === 1){
			$genopar->error("O arquivo comprimido deve conter um diretório raiz.");
		}
	}else{
		$genopar->error("Este tipo de arquivo não é permitido.");
	}
	$ctgs = count($list);
	echo "<H2>Foram adicionados $ctgs contigs anotados para a montagem <i>$nomeMtg</i></H2>";
}

$genopar->fechaPagina();

function unzip($zipFile){
	$cmd = "tar -tf $zipFile";
	$outDir = dirname($zipFile);
	$content= array();
	exec($cmd, $content);
	if (preg_match("/\/$/", $content[0])){
// 		if (is_dir($outDir."/".$content[0])){
			$random = time();
			$rootDir = substr($content[0],0,-1);
			$outDir = $outDir."/".$rootDir.$random;
			mkdir($outDir);
			$content[0] = $outDir;
// 		}
		$cmd = "cd $outDir && tar -xzf $zipFile";
		exec($cmd);
// 		array_unshift($content, );
		return $content;
	}else{
		return 1;
	}
}

function createTree($root){
	mkdir($root);
		mkdir($root."/Contigs");
			mkdir($root."/Contigs"."/n");
			mkdir($root."/Contigs"."/p");
		mkdir($root."/ORFs");
			mkdir($root."/ORFs"."/n");
			mkdir($root."/ORFs"."/p");
}

$genopar->fechaPagina();

?>
