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

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

$genopar= new Genopar(__FILE__);

$genopar->abrePagina("Adicionar Nova Anotação");

verGetPost(array("submit"));

if (!$submit || !$_FILES['zipFile']){
	$genopar->abreForm();
	echo "<TABLE CELLSPACING=5 CELLPADDING=5 BORDER=1 RULES=ROWS FRAME=BOX>";
	echo "<TR>";
	echo "<TD>";
	echo "Annotation Name: ";
	echo "</TD>";
	echo "<TD>";
	$genopar->input("name", "text", "", "", 30, 30);
	echo "</TD>";
	echo "</TR>";
	echo "<TR>";
	echo "<TD>";
	echo "Annotation Compressed File: ";
	echo "</TD>";
	echo "<TD>";
	$genopar->input("zipFile", "file");
	echo "</TD>";
	echo "</TR>";
	echo "<TD align=center colspan=2>";
	$genopar->submit();
	echo "</TD>";
	echo "</TABLE>";
	$genopar->fechaForm();
}else{
	$dbName = $_POST['name'];

	$outAnnotDir = $genopar->dir_padrao."/annotations/".$dbName;
	$outContigDir = $genopar->dir_padrao."/annotations/".$dbName."/Contigs";
	$outOrfDir = $genopar->dir_padrao."/annotations/".$dbName."/ORFs";

	if (!$dbName){
		$dbName = "annot";
		$dbName .= date("omd"); ## annotAAAAMMDD
	}

	$genopar->abreBanco('infoAnnot');

	$n = $genopar->queryBanco("SELECT * FROM bancos WHERE banco='$dbName'");
	if ($n > 0){
		$res = $genopar->getArray();
		if ($res['data_criacao'] != NULL)
			$genopar->error("There is another annotation named <i>$dbName</i>.");
		$updateInfoAnnot=TRUE; ## THERE HAS BEEN AN ANNOTATION NAMED $dbName BUT IT HAS BEEN DELETED
	}

	$genopar->fechaBanco();

	$zipFile = $_FILES['zipFile']['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 * 5; // size = 5 MB;
	$path = "/var/projetos/HS/";
	
	$file = $genopar->upload($_FILES["zipFile"], $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("./gbk2fna.pl $file $outContigDir");
				system("./addAnnot.pl $file $dbName $outOrfDir");
			}
		}elseif ($list === 1){
			$genopar->error("The compressed file must contain a root directory.");
		}
	}else{
		$genopar->error("This type of file is not allowed.");
	}
	$ctgs = count($list);
	echo "<H2>Successfully added $ctgs contigs to <i>$dbName</i> annotation.</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");
}

function createDB($genopar, $dbName, $updateInfoAnnot, $DB_HOST, $DB_USER, $DB_PASS){
	$genopar->abreBanco();

	$date = date("o-m-d");

	$query['schema'] = "
CREATE DATABASE $dbName
";

	$query['contigs'] = "
CREATE TABLE  `$dbName`.`contigs` (
  `id` int(10) unsigned NOT NULL default '0',
  `length` int(10) unsigned default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
";

	$query['infoORF'] = "
CREATE TABLE  `$dbName`.`infoORF` (
  `contig_num` int(5) NOT NULL default '0',
  `frame` char(2) NOT NULL default '',
  `start` int(8) NOT NULL default '0',
  `end` int(8) NOT NULL default '0',
  `id` varchar(10) default NULL,
  `bases_a` int(11) default NULL,
  `bases_c` int(11) default NULL,
  `bases_g` int(11) default NULL,
  `bases_t` int(11) default NULL,
  KEY `id` (`id`),
  KEY `contig` (`contig_num`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
";

	$query['annot'] = "
CREATE TABLE  `$dbName`.`annot` (
  `id` varchar(10) NOT NULL default '',
  `contig_num` int(5) NOT NULL default '0',
  `orf_name` varchar(100) default '',
  `validation` varchar(100) NOT NULL default '',
  `product` varchar(255) default '',
  `synonym` varchar(100) default '',
  `EC_number` varchar(15) default '',
  `frameshift` varchar(100) default '',
  `category1` varchar(100) default '',
  `category2` varchar(100) default '',
  `note` varchar(255) default '',
  `orf_id_20030818` varchar(10) default '',
  `EC_number2` varchar(15) default '',
  `function` varchar(255) default '',
  `relatorio` varchar(255) default '',
  `anotador` varchar(50) default '',
  `revisor` varchar(50) default '',
  `functionCOG` tinyint(1) default '0',
  `cog_num` varchar(7) default '',
  KEY `valid` (`validation`),
  KEY `anotador` (`anotador`),
  KEY `synonym` (`synonym`),
  KEY `revisor` (`revisor`),
  KEY `orf_name` (`orf_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
";

//   `id` varchar(10) NOT NULL default '',
//   `contig_num` int(5) NOT NULL default '0',
//   `validation` varchar(100) NOT NULL default '',
//   `product` varchar(255) default '',
//   `frameshift` varchar(100) default '',
//   `function` varchar(255) default '',
//   KEY `valid` (`validation`),
//   KEY `id` (`id`),
//   KEY `contig` (`contig_num`)
// ) ENGINE=MyISAM DEFAULT CHARSET=latin1

	if($updateInfoAnnot)
		$query['infoAnnot'] = "
UPDATE `infoAnnot`.`bancos` SET data_criacao='$date', data_remocao=NULL WHERE banco='$dbName'
";
	else
		$query['infoAnnot'] = "
INSERT INTO `infoAnnot`.`bancos` VALUES ('$dbName', '$date', '')
";

	foreach ($query as $q){
		$genopar->queryBanco($q);
	}
}

?>
