<?php

if (!isset($GENOPAR_LIB_LOADED))
{
session_start();

#### Incluindo arquivos localizados na pasta lib/include ###
$dir = dirname(__FILE__);
ini_set("include_path", "$dir/include");

require_once 'DB.php';
require_once 'Auth/Auth.php';
require_once 'HTTP.php';
#############################################################

include 'config.php';


global $GENOPAR_LIB_LOADED;
$GENOPAR_LIB_LOADED = 1;

$NoLogPages= array("Autenticação de Usuário");

/*=============================================================================
================================================ Funcoes de AUTENTICACAO
==============================================================================*/

function loginFunction ()
{
	$genopar = new Genopar(__FILE__);
	$genopar->abrePagina("Autenticação de Usuário");

	$getVar="?";
	foreach ($_GET as $key => $value)
		$getVar .= "&$key=$value";
	$getVar = str_replace("?&", "?", $getVar);

	$url=$_SERVER['PHP_SELF'].$getVar;

	echo "<br>Please, type your login and password:
		<form method='post' action='" . $url . "'>
		<table cellspace=0 cellpadding=0 border=0>
		<tr><td align='right'>Usuário:</td><td><input type='text' name='username'></td></tr>
		<tr><td align='right'>Senha:</td><td><input type='password' name='password'></td></tr>
		<tr><td align='center' colspan=2><input type='submit'></td></tr>
		</table>
		</form>";

	$genopar->fechaPagina();
}

define('LVLMNG',1);
define('LVLDEV',2);
define('LVLNFN',3);
define('LVLGEN',4);
define('LVLNOB',5);

define('LVLADM',1);
define('LVLANT',2);
define('LVLPES',3);
define('LVLVIS',4);

$UserAuth_params= array("dsn" => "mysql://".$DB_USER.":".$DB_PASS."@$DB_HOST/".$DB_NAME,"table" => "users", "usernamecol" => "username", "passwordcol" => "password");
$UserAuth_username= $UserAuth_level= $UserAuth_group= $UserAuth_prefname= '';
$UserAuth= new Auth("DB", $UserAuth_params, "loginFunction");
$UserAuth->setIdle(300); # 5min

/*=============================================================================
================================================ Function doAuth
===============================================================================
== Função:      Verifica Permissões de Acesso
=============================================================================*/
function doAuth ($ReqLevel=LVLMNG, $AllGroups=array('Admin'))
{

	if (!in_array('Admin', $AllGroups)){
		array_push($AllGroups, 'Admin');
	}
	global $UserAuth, $UserAuth_params, $UserAuth_username;
	global $UserAuth_level, $UserAuth_group, $UserAuth_prefname;

	$UserAuth->start();
	$status=FALSE;
// 	print_r($UserAuth);


	$genopar = new Genopar;
	$genopar->abreBanco();

	if ($UserAuth->getAuth())
	{
		if($UserAuth->username!='')
			$UserAuth_username= $UserAuth->username;
		elseif (isset($_SESSION['_authsession']['username']))
			$UserAuth_username= $_SESSION['_authsession']['username'];
		else
			$UserAuth_username= 'Nobody';
		
		$db= DB::connect($UserAuth_params['dsn']);
		list($UserAuth_level, $UserAuth_group, $UserAuth_prefname) = 
			$db->getRow("SELECT users.level, users.group, users.prefname FROM users 
						WHERE username= '$UserAuth_username'");
		if ($UserAuth_level != '' and $UserAuth_level <= $ReqLevel)
		{
			$values = array('UserAuth_username' => $UserAuth_username, 
					'UserAuth_level'=> $UserAuth_level, 
					'UserAuth_group' => $UserAuth_group, 
					'UserAuth_prefname' => $UserAuth_prefname);
			setSession($values);		
			$status=TRUE;			
		}
		else
		{	$UserAuth->logout();
			$db->disconnect();
			$genopar->abrePagina("Access denied");
			echo '
			<style type="text/css">
			#texto {
				position:justify;
				margin:0 0 16px 15px;
				left:700px;
				width:60%;
				padding:2px;
			}
			</style>';
			echo '<div id=texto>Sorry! You do not have permission to access this page.</div>';
			$genopar->fechaPagina();
		}
	}

	return($status);
}

function setSession($result)
{
	global $UserAuth;
	foreach($result  as $c => $v)
	{	$UserAuth->setAuthData($c,$v);}

}

function AuthLogout ()
{
	require "config.php";
	global $UserAuth;
	$UserAuth->logout();
	session_destroy();
	HTTP::redirect($URL_PADRAO);
	
}
if (isset($_GET['DOlogout']) or isset($_POST['DOlogout']))
	AuthLogout();

/*=============================================================================
================================================ CLASSE contaTempo
===============================================================================
== Função:      Calcula o tempo de execução de um processo

para utilizar:
    inserir na linha anterior ao codigo a ser medido
        $var_classe = new execTime();

    inserir após a ultima linha do codigo a ser medido
        $var_classe->stop();

    para saber o tempo, buscar da variavel "$var_classe->duracao"
=============================================================================*/
class contaTempo
{
  var $inico;
  var $fim;
  var $duracao;

function contaTempo () { $this->start(); }
function start () { $this->inicio= $this->markTime(); }
function stop ()
{
  $this->fim= $this->markTime();
  $this->count();
}

function count ()
{
  $this->duracao= number_format($this->fim - $this->inicio,4,',','.');
  return $this->duracao;
}

function markTime ()
{
  $mtime= explode(" ", microtime());
  $msec= (double)$mtime[0];
  $sec= (double)$mtime[1];

  return ($sec + $msec);

}

}// Fim CLASSE contaTempo

/*=============================================================================
================================================ arrumaData
===============================================================================
== Função:
------------------------------------------------------------------------------
== Argumentos:
------------------------------------------------------------------------------
== Retornos: Data no Formato DD-MM-AAAA
=============================================================================*/
function arrumaData ($data, $mask= "AAAAMMDD")
{
  if ($mask == "AAAAMMDD") return substr($data,6,2).'/'.substr($data,4,2).'/'.substr($data,0,4);
  if ($mask == "AAAA-MM-DD") return substr($data,8,2).'/'.substr($data,5,2).'/'.substr($data,0,4);
}



/*=============================================================================
================================================ verGetPost
===============================================================================
== Função:      Verificar variavel recebida via GET ou POST ou COOKIE
------------------------------------------------------------------------------
== Argumentos:
------------------------------------------------------------------------------
== Retornos:
=============================================================================*/
function verGetPost ($vars)
{
  global $_POST;
  global $_GET;
  global $_COOKIE;
  $var= "";

  if (!is_array($vars))
    $vars = array($vars);

  foreach($vars as $var)
  {
    #echo "<br> $vars $var";
    if (isset($_POST[$var]))
    {
      global $$var;
      $$var= addslashes(trim(strip_tags(decodeCampo($_POST[$var]))));
      #echo "<br>   POST: $var";
    }
    elseif (isset($_GET[$var]))
    {
      global $$var;
      $$var= addslashes(trim(strip_tags(decodeCampo($_GET[$var]))));
      #echo "<br>   GET: $var";
    }
    elseif (isset($_COOKIE[$var]))
    {
      global $$var;
      $$var= addslashes(trim(strip_tags(decodeCampo($_COOKIE[$var]))));
      #echo "<br>   GET: $var";
    }
  }
}

function verCampos ($vars)
{
  if (!is_array($vars))
    $vars = array($vars);

  foreach($vars as $key => $value)
  {
    $vars[$key]= addslashes(trim(strip_tags($value)));
  }
}

function decodeCampo($str){
	if (is_utf8($str))
		return utf8_decode($str);
	return $str;
}

function is_utf8($str) {
    $c=0; $b=0;
    $bits=0;
    $len=strlen($str);
    for($i=0; $i<$len; $i++){
        $c=ord($str[$i]);
        if($c > 128){
            if(($c >= 254)) return false;
            elseif($c >= 252) $bits=6;
            elseif($c >= 248) $bits=5;
            elseif($c >= 240) $bits=4;
            elseif($c >= 224) $bits=3;
            elseif($c >= 192) $bits=2;
            else return false;
            if(($i+$bits) > $len) return false;
            while($bits > 1){
                $i++;
                $b=ord($str[$i]);
                if($b < 128 || $b > 191) return false;
                $bits--;
            }
        }
    }
    return true;
}


###############################################################################

/*
###############################################################################

CLASSE Genopar

 Desenvolvida em:     15-Ago-2002 - Augusto Favetti
 Ultima atualização:  07-Apr-2008 - Felipe Pisa

Função:
    Acesso e pesquisa no banco de dados GENOMA
    Manter o padrão nas páginas desenvolvidas

###############################################################################
TO DO:




###############################################################################
*/

class Genopar
{
  //variaveis relativas ao Organismo e aos diretorios
  var $org;
  var $dir = array();
  var $data_montagens;  // data da ultima execução do phredPhrap

  //variaveis diversas
  var $url_padrao;
  var $rede_seq;
  var $basedir;
  var $dir_padrao;
  var $url_pagina;
  var $url;
  var $data_alteracao;
  var $basename;
  var $dirname;
  var $proj_nome;


  // variaveis para acesso ao MySQL
  var $MySQL_DBusername;
  var $MySQL_DBpassword;
  var $MySQL_DBhost;
  var $MySQL_DBdatabase;
  var $link;
  var $connected;
  var $result;
  var $last_query;
  var $current_table;
  var $Nrows;
  var $Nfields;
  var $fields;

/*=============================================================================
================================================ Genopar - Construtor
===============================================================================
== Função:      Incicializa as variaveis padrao
------------------------------------------------------------------------------
== Argumentos:
------------------------------------------------------------------------------
== Retornos:
=============================================================================*/
function Genopar ($arquivo= __FILE__, $database="_nao-informado_")
{
  require 'config.php';
  global $_GET, $_POST;

  $this->url_padrao= $URL_PADRAO;
  $this->dir_padrao= $DIR_PADRAO;
  $this->basedir= $BASEDIR;
  $this->rede_seq= $REDE_SEQ;
  $this->proj_nome = $PROJ_NOME;

  $this->MySQL_DBhost= $DB_HOST;
  $this->MySQL_DBusername= $DB_USER;
  $this->MySQL_DBpassword= $DB_PASS;
  $this->MySQL_Default_DBname = $DB_NAME;

  if ($database != "_nao-informado_"){
     $this->MySQL_DBdatabase= $database;
  }else{
     $this->MySQL_DBdatabase = $DB_NAME;
  }
	if (isset($_GET['db']) or isset($_POST['db']))
		if ($_GET['db']=='teste' or $_POST['db']=='teste')
			$this->MySQL_DBdatabase= 'teste';
			
  $this->org= $PROJ_SIGLA;

  $this->data_alteracao= date('d-M-Y', filemtime($arquivo));
  $this->basename= basename($arquivo);
  $this->dirname= dirname($arquivo)."/";

  $this->url_pagina= $this->url_padrao.str_replace($this->dir_padrao, "", $this->dirname);
  $this->url= $this->url_pagina.$this->basename;
  
  return(TRUE);
}

/*=============================================================================
================================================ funcoes de retorno
===============================================================================
== Função:    Retornam principais variaveis da classe
=============================================================================*/
function getNRows ()      { return ($this->Nrows); }

function getNFields ()    { return ($this->Nfields); }

function getResult ()     { return $this->result; }

function getRow ()        { return (mysql_fetch_row($this->result)); }

function getArray ($tipo = MYSQL_BOTH)      { return (mysql_fetch_array($this->result, $tipo)); }

function getLastQuery ()  { return $this->last_query; }

function getUrlPadrao ()  { return $this->url_padrao; }

function getUrl ()  { return $this->url; }

/*=============================================================================
================================================ funcao criaLabDir
===============================================================================
== Função:    cria os diretorios referentes ao laboratorio recem adicionado
== eh chamada em cadlab.php

-----------------------------------------
TO DO:

=============================================================================*/
function criaLabDir($idLab = "_nao-informado_"){
	require 'config.php';
	if ($idLab == "_nao-informado_"){
		die ("Informe o laboratorio ao chamar a funcao criaLabDir.");
	}

	$diretorios = array();

	$dirData = $BASEDIR."/data";
	$sigla = $PROJ_SIGLA;

	$dirAssembly = $dirData."/assembly/".$sigla;
	$this->addLibDir($diretorios, $dirAssembly, $idLab);

	$dirProcessed = $dirData."/processed/".$sigla;
	$this->addLibDir($diretorios, $dirProcessed, $idLab);

	$dirReceived = $dirData."/received/".$sigla;
	$this->addLibDir($diretorios, $dirReceived, $idLab);

	foreach($diretorios as $dir){
		mkdir($dir);
		chmod($dir, 0775);
	}

}

function addLibDir(&$arrayDir, $baseDir, $idLab){
	require 'config.php';
	$sigla = $PROJ_SIGLA;
	for($i=1; $i<=$NUM_LIBS; $i++)
		if (strlen($i) == 1)
			array_push($arrayDir, $baseDir."/".$sigla.'0'.$i."/".$idLab);
		else
			array_push($arrayDir, $baseDir."/".$sigla.$i."/".$idLab);
}


/*=============================================================================
================================================ abrePagina
================================================ fechaPagina
===============================================================================
== Função:      Cria cabeçalho e cores de pagina padrao
== Função:      Fecha conexao ao banco e tags html
------------------------------------------------------------------------------
== Argumentos:  $titulo1 - Titulo da Janela           - padrao "Nome da Rede"
                $titulo2 - Titulo principal da Pagina - padrao "Nome do Projeto"
                $titulo3 - Sub-Titulo da Pagina
------------------------------------------------------------------------------
== Retornos:
=============================================================================*/
function abrePagina ($titulo3= "_nao-informado_",
                     $titulo2= "_nao-informado_",
                     $titulo1= "_nao-informado_")
{
  require 'config.php';

  global $UserAuth;
  global $NoLogPages, $UserAuth_username, $UserAuth_prefname, $UserAuth_group, $UserAuth_level;

  $UserAuth->setShowLogin(FALSE);

  doAuth(LVLNOB);


  if (isset($_SESSION['_authsession'])){	
	$this->UserAuth_username = $_SESSION['_authsession']['data']['UserAuth_username'];
	$this->UserAuth_prefname = $_SESSION['_authsession']['data']['UserAuth_prefname'];
	$this->UserAuth_group = $_SESSION['_authsession']['data']['UserAuth_group'];
	$this->UserAuth_level = $_SESSION['_authsession']['data']['UserAuth_level'];
  }

  echo '<html>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
';

  if ($titulo1 == "_nao-informado_"){
     $titulo1 = $REDE_SEQ;
  }
  if ($titulo2 == "_nao-informado_"){
     $titulo2 = "$PROJ_NOME";
  }
  if ($titulo3 != "_nao-informado_")
    {
     echo "<title>$titulo1 - $titulo2";
	if (!preg_match("/^Projeto/",$titulo3))
	   echo " :: ".strip_tags($titulo3);
	echo " </title>";
    }
  else
    {
	$titulo3="";
     echo "<title>$titulo1</title>";
    }


  $this->showLayout($titulo1,$titulo2,$titulo3);

  $this->conta_tempo= new contaTempo();  // inicia contagem de tempo

}

function showLayout ($titulo1,$titulo2,$titulo3)
{
	echo '
<head>
<style type="text/css">
@import "'.$this->url_padrao.'/css/layout.css";
@import "'.$this->url_padrao.'/css/ddown.css";
</style>
<script type="text/javascript" src="'.$this->url_padrao.'/css/ddown.js"></script>
</head>
<body>

<div id="topo"> 
	<h1>'.$titulo1.' - <i>'.$titulo2.'</i></h1>
</div>

	<div id="menu">';
	
	$this->showDDM();

	if ($this->UserAuth_prefname){
    		echo '
		<h3>'.$this->UserAuth_prefname.'</b> - '.$this->UserAuth_group.' -
		<a href="'.$_SERVER['PHP_SELF'].'?DOlogout">[log-off]</a></h3>
		';
	}else{
		$getVar="?";
		foreach ($_GET as $key => $value)
			$getVar .= "&$key=$value";
		$getVar = str_replace("?&", "?", $getVar);

		$url=$_SERVER['PHP_SELF'].$getVar;
		echo '
		<center><form method="post" action="'.$url.'">
		Usu&aacute;rio<br>
		<input type="text" size="10" name="username"><br>
		Senha<br>
		<input type="password" size="10" name="password"><br>
		<input type="submit" value="Enviar">
		</form></center>
		';
	}

	echo '
		<p align=center>
		<a href="http://jigsaw.w3.org/css-validator/">
		<img style="border:0;width:88px;height:31px"
			src="http://jigsaw.w3.org/css-validator/images/vcss-blue"
			title= "Valid CSS!" alt="Valid CSS!" />
		</a>
		<br>
		<!-- Inicio do botao do Firefox -->
		<a href="http://br.mozdev.org/" target="_blank"><img src="http://sfx-images.mozilla.org/affiliates/Buttons/firefox3/FF3_88x31_b.png" width="88" height="31" style="border-style:none;" title="Mozilla Firefox" alt="Firefox"></a>
		<!-- Fim do botao do Firefox -->
		</p>
	</div>

	<div id="conteudo">
		';
		echo '<h1>'.$titulo3.'</h1>
';
}

function showDDM($level = "_na_")
{
if ($level != "_na_"){
	$this->UserAuth_level=$level;
}
	echo '
<ul id="primary-nav">
	<li><a href="'.$this->url_padrao.'/index.php">Home</a></li>';

	if (isset($this->UserAuth_level)){
		echo '
		
		<li><a href="'.$this->url_padrao.'/laboratorios.php">Laboratories</a> 
		</li>
		';
	
		if ($this->UserAuth_level <= LVLPES){
			echo '
		<li class="menuparent"><a href="#">Assembly</a>
			<ul>
			<li><a href="'.$this->url_padrao.'/submeterMontagem.php">Submeter</a></li>
			<li><a href="#">Atualizar</a></li>
			<li><a href="'.$this->url_padrao.'/deletarMontagem.php">Deletar</a></li>
			<li><a href="'.$this->url_padrao.'/moduloAnotacao/exportarGbkMontagem.php">Exportar</a></li>
		</ul>
		</li>

		<li class="menuparent"><a href="#">Annotation</a>
		<ul>
			<li><a href="'.$this->url_padrao.'/moduloAnotacao/">Version</a></li>

			<li class="menuparent"><a href="#">Graphics</a>
			<ul>
				<li><a href="'.$this->url_padrao.'/pieGraph.php?&tipo=c">COG</a</li>
				<li><a href="'.$this->url_padrao.'/pieGraph.php?&tipo=g">Status de ORF\'s</a</li>
			</ul>

			<li><a href="'.$this->url_padrao.'/moduloAnotacao/ECNumbersTable.php">Tabela de EC Numbers</a></li>
			
			<li><a href="'.$this->url_padrao.'/moduloAnotacao/busca_ORF.php">Search</a</li>
		</ul>';
			if ($this->UserAuth_level <= LVLADM){
				echo '
			<li class="menuparent"><a href="#">Tools</a> 
				<ul>';
	
					echo '
					<li class="menuparent"><a href="#">Administration</a> 
					<ul>
						<li><a href="'.$this->url_padrao.'/moduloAnotacao/ECNumbersTable.php?action=atualizar">Atualizar Tabela EC</a></li>
						<li><a href="#">BLAST databases</a></li>
						<li><a href="'.$this->url_padrao.'/mng/cadlab.php?processa=new">Laboratories</a></li>
						<li><a href="'.$this->url_padrao.'/editAcc.php">Edit account</a></li>
					</ul>';
			}
			echo '
			</ul>
		</li>';
		}
	}

echo '</ul>';
}

function fechaPagina ($mostra_tempo= 1, $exit = TRUE)
{
	require 'config.php';
// 	global $HTTP_SERVER_VARS;
	
	$this->fechaBanco();
	
	if (isset($this->conta_tempo))
		$this->conta_tempo->stop();  // finaliza contador de tempo de execucao
	else
		$mostra_tempo=0;
// 	print_r($_SESSION);	
	echo '
	</div>
			
	<div id="rodape">
		<p><b><a target= "_blank" href="'.$URL_PADRAO.'">'.$REDE_SEQ.'</a></b> - ';
	
	if ($mostra_tempo)
		echo 'Page loaded in '.$this->conta_tempo->duracao.' seconds';

	echo '</p>
	</div>';

	echo '</body>';
	echo '</html>';

	if ($exit) exit;
}

/*=============================================================================
	Metodos referentes a codigos HTML
=============================================================================*/

function abreForm($submit = "return true;", $nome = "main_form", $action = "", $tipo = "POST"){
	echo "<form method=\"$tipo\" enctype=\"multipart/form-data\" name=\"$nome\" action=\"$action\" onSubmit=\"$submit\">\n";
}

function fechaForm(){
	echo "</form>\n";
}

function select($nome = "select", $options = "", $selected = "", $onChange = "", $showEmpty = FALSE){
	echo "<select name=\"$nome\" onChange=\"$onChange\">\n";

	if ($showEmpty)
		echo "<option value=\"\"></option>\n";

	foreach ($options as $opt){
		echo "<option value=\"$opt\"";
		if ($opt == $selected)
			echo " SELECTED ";
		echo ">$opt</option>\n";
	}
	echo "</select>\n";
}

function input($nome = "text", $tipo = "text", $value = "", $option = "", $size = "", $max = ""){
	echo "<input $option type=\"$tipo\" name=\"$nome\" value=\"$value\" size=\"$size\" maxlength=\"$max\"/>";
}

function submit($value = "Submit", $nome="submit"){
	echo "<input type=\"submit\" name=\"$nome\" value=\"$value\"/>\n";
}

function upload($FILE = "_na_", $mvDir = "./", $size = 0, $allowedTypes = array()){
	if ($FILE == "_na_"){
		echo "No file to be uploaded.";
		return FALSE;
	}

	if ($size == 0)
		$size = 100*(2 << 10); 	// Default size = 100KB

	if ($size > 0 && $FILE['size'] > $size){
		echo "The file size must be less than $size bytes";
		return FALSE;
	}

	if (count($allowedTypes) > 0){
		$ok = 0;
		foreach ($allowedTypes as $type){
			if ($FILE['type'] == $type){
				$ok = 1;
				break;
			}
// 			echo "FILE = ".$FILE['type']." - TYPE = $type<br>";
		}
		if ($ok == 0){
			return FALSE;
		}
	}

	$target = $mvDir . basename( $FILE['name']);

	if(!move_uploaded_file($FILE['tmp_name'], $target)) {
		echo "There was an error uploading the file, please try again!";
		return FALSE;
	}

	return realpath($target);
}


###################################################
##
##	METODO PARA IMPRESSAO DE MENSAGENS DE ERRO
##
###################################################

function error($erro = "", $exit = TRUE){
	if ($exit){
		echo "<font color='red'><h2>ERROR</h2></font>\n<h3>$erro</h3>\n";
		$this->fechaPagina();
		exit;
	}else{
		echo "<i><b>Error: </b></i>$erro<br>";
	}
}

/*=============================================================================
================================================ abreBanco
================================================ fechaBanco
===============================================================================
== Função:  Abre conexao com banco de dados GENOMA
==          Limpa os resultados e fecha conexao com banco
-------------------------------------------------------------------------------
== Argumentos:
-------------------------------------------------------------------------------
== Retornos:
=============================================================================*/
function abreBanco ($database= '_nao-informado_', $quiet = FALSE)
{
  if (!$this->connected)
  {
    if ($database=='_nao-informado_')
        $database= $this->MySQL_DBdatabase;

    $this->link = mysql_connect($this->MySQL_DBhost, $this->MySQL_DBusername, $this->MySQL_DBpassword);
    if (!$this->link && !$quiet)
	die("Internal ERROR: could not connect to database at: <b>".$this->MySQL_DBhost."</b>. (genopar.class)");
    elseif (!$this->link && $quiet) return 1;

    $select = mysql_select_db($database);
    if (!$select && !$quiet)
  	die("Internal ERROR: could not connedt to database at: <b>$database</b>. (genopar.class)");
    elseif (!$select && $quiet) return 2;
    else
        $this->connected=1;
    return 0;
   }
}

function fechaBanco ()
{
  if ($this->connected)
  {
    if (is_array($this->result))
      $this->clearResult();
    $this->connected=0;
    mysql_close($this->link);
  }
}


/*=============================================================================
================================================ queryBanco
===============================================================================
== Função:      Pesquisa o banco de dados GENOMA
-------------------------------------------------------------------------------
== Argumentos:  $query  - string a ser enviada ao banco
-------------------------------------------------------------------------------
== Retornos:    $Nrows - qtd de linhas afetadas pela query
=============================================================================*/
function queryBanco ($query)
{
  //   $query = preg_replace ("/;.*/", "", $query);   // remover caracteres especiais
  rtrim($query, "\r\n") . PHP_EOL;
  $this->last_query= $query;
  $resultid= mysql_query($query, $this->link) or $this->error("Internal ERROR: could not list from database.<br>(\n$query)<br>Error:\n<i>".mysql_error()."</i>");
  $this->result= $resultid;

  if (preg_match('/^\s*select/i', $query))
  {
    $this->Nrows= mysql_num_rows($resultid);
    $this->Nfields= mysql_num_fields ($resultid);
    //$this->getFields();
  }
  else
  {
    $this->Nrows= mysql_affected_rows();
    $this->Nfields= 0;
  }
  //echo "<br>$query";
  return ($this->Nrows);
}

/*=============================================================================
================================================ printResult
===============================================================================
== Função:      Imprime Tabela com resultados
-------------------------------------------------------------------------------
== Argumentos:
-------------------------------------------------------------------------------
== Retornos:
=============================================================================*/
function printResult ()
{
  if ($this->result != false)
  {
       echo '<table cellspacing="0" cellpadding="1" border="1">';
       $primeiro=0;
       while ($lin= $this->getArray())
       {
            echo '<tr>';
            if (!$primeiro++)
            {
                foreach($lin as $key => $value)
                        echo "<td align='center'>$key&nbsp;</td>";
                echo '</tr><tr>';
            }
            foreach($lin as $key => $value)
            {
                        echo "<td align='center'>$value&nbsp;</td>";
            }
            echo '</tr>';
       }
       echo "</table>";
    }
  else
      echo "<b>No results found!</b><br />\n";
}


/*=============================================================================
================================================ getFields
===============================================================================
== Função:      atribui nomes dos campos selecionados para array FIELDS
-------------------------------------------------------------------------------
== Argumentos:
-------------------------------------------------------------------------------
== Retornos:
=============================================================================*/
/*
function getFields()
{
  if ($this->Nfields >= 1)
  {
    mysql_data_seek($this->result, 0);
    for ($i=0; $i < $this->getNfields(); $i++)
    {
      $currField = mysql_fetch_field($this->result, $i);
      $this->fields[$i] = $currField->name;
    }
    mysql_data_seek($this->result, 0);
  }
}
*/

/*=============================================================================
================================================ clearResult
===============================================================================
== Função:      Limpa resultados da query
-------------------------------------------------------------------------------
== Argumentos:
-------------------------------------------------------------------------------
== Retornos:
=============================================================================*/
function clearResult (){
   if ($this->result){
	mysql_free_result($this->result);
	$this->result = false;
   }
}


###############################################################################
###############                                                 ###############
###############                 FIM CLASSE Genopar              ###############
###############                                                 ###############
###############################################################################
} //fecha classe GENOPAR
} //fim IF para evitar duplo carregamento

###############################################################################
#  !!!!  ATENCAO - nao deixar linhas em branco ao final deste arquivo !!!!!   #
###############################################################################
?>
