<?php

/*****************************************************************************
 .::. PostgreClass .::.
@Autor:   Aldrin Echeverry Higgins -- @Modificado por: Federico A. Ocampo
@Email:   aldrin@adanetwork.net    -- federico@mcanet.com.ar
@Empresa: Ada Network              -- MCAnet
@Descripcion: Una Clase diseniada con los conceptos de POO en PHP.
@Version: 1.1
*****************************************************************************/
class MysqlClass
{
  //Atributos Basicos de la clase
  var $servidor; //Nombre de la maquina donde se encuentra la BD generalmente es localhost
  var $nombreBD; //Nombre de la Base de Datos
  var $nombreDeUsuario; //Nombre del usuario autorizado para entrar a la Base de Datos
  var $contrasena; //ContraseƱa del Usuario

  //Atributos Modificados
  var $enlace;//Almacena el enlace con la Base de Datos una vez establecido
  var $resultado;//Almacena el resultado obtenido por la consulta a la BD
  var $consulta;//Almacena la consulta realizada con el metodo consultaBD();
  var $procesoCorrecto;

  //Constructor de la Clase - Inicializa algunos atributos basicos
  function MysqlClass($servidor,$nombreBD,$nombreDeUsuario,$contrasena)
  {
    $this->servidor = $servidor;
    $this->nombreBD = $nombreBD;
    $this->nombreDeUsuario = $nombreDeUsuario;
    $this->contrasena = $contrasena;
  }

  //---------------Metodos y Procedimientos----------------
  //conectarBD(); Te permite conectar y enlazar la BD, el enlace a
  //la BD es almacenado modificando el atributo $enlace
  function conectarBD()
  {
    $retConexionExitosa = true;
                             
    $this->enlace=mysql_connect( $this->servidor , $this->nombreDeUsuario, $this->contrasena);

                             
    mysql_select_db($this->nombreBD, $this->enlace);
    //Si la conexion fue exitosa
    if(!$this->enlace)
    {
      $retConexionExitosa = false;
    }

    return $retConexionExitosa;
  }

  //consultarBD() permite realizar consultas en la BD enlazada
  function consultarBD($sentenciaSQL)
  {
    $retConsultaExitosa = true;

    if(!function_exists("mysql_query")){
      $this->consulta = mysql_db_query($sentenciaSQL, $this->enlace);
    }
    else{
      $this->consulta = mysql_query($sentenciaSQL, $this->enlace);
    }
    if(!$this->consulta){
        $retConsultaExitosa = false;
    }

    return $retConsultaExitosa;
  }

  //Devuelve los resultados de una fila dada en forma de arreglo asociativo
  function obtenerFilaArray($fila)
  {
    $this->resultado = mysql_fetch_array($this->consulta, MYSQL_BOTH);
    return $this->resultado;
  }

  //Devuelve todas las filas del resultados en un arreglo asociativo
  function obtenerTotalFilasArray()
  {
    //Antes hacia la atriz de una, ahora hacer la matriz a mano:
    $this->my_fetch_all_Aux($this->consulta,"assoc");

    
    
    return $this->resultado;
  }
  

  function my_fetch_all_Aux($res, $kind="assoc")
  {
    $i = 0; // this is needed for the row integer in the looped pg_fetch_array
    $array_out = NULL;
    if ($kind == "assoc")
    {
      while ($row = mysql_fetch_array($res, MYSQL_ASSOC))
      {
          $array_out[] = $row;
      }
    }
    else
    {
      while ($row = mysql_fetch_array($res))
      {
          $array_out[] = $row;
      }
    }

    $this->resultado = $array_out;
    return $this->resultado;
  }

  function obtenerConsulta()
  {
    return $this->consulta;
  }

  function insertarRegistro($sentenciaSQL)
  {
    mysql_query($this->enlace,$sentenciaSQL);
  }

  function cantidadFilasResultado()
  {
    return mysql_num_rows($this->consulta);
  }

  function cantidadCamposResultado()
  {
    return mysql_num_fields($this->consulta);
  }


  //libera el contenido del atributo que almacena las consultas
  function liberarConsulta()
  {
    mysql_free_result($this->consulta);
  }

  function desconectarBD()
  {
    mysql_close($this->enlace);
  }

  
  function Begin_Transaction()
{
	$SQL_BEGIN = 'BEGIN;';
	
	$this->procesoCorrecto  = true;
	$procesoCorrect=$this->conectarBD();
	if($procesoCorrect)
	{
		$procesoCorrect = $this->consultarBD($SQL_BEGIN);
		if($procesoCorrect)
		{
			$ret_datos = $this->obtenerTotalFilasArray();
			$this->procesoCorrecto  = true;
		}
		else
			$this->procesoCorrecto  = false;
	
		$this->liberarConsulta();
		$this->desconectarBD();
	}
	else
		$this->procesoCorrecto  = false;
		
	return $ret_datos;
}

  /**
  * Termina un bloque de transaccion
  * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  */
  function End_Transaction()
  {
	$SQL_END = 'COMMIT;';
	
	$this->procesoCorrecto  = true;
	$procesoCorrect=$this->conectarBD();
	if($procesoCorrect)
	{
		$procesoCorrect = $this->consultarBD($SQL_BEGIN);
		if($procesoCorrect)
		{
			$ret_datos = $this->obtenerTotalFilasArray();
			$this->procesoCorrecto  = true;
		}
		else
			$this->procesoCorrecto  = false;
	
		$this->liberarConsulta();
		$this->desconectarBD();
	}
	else
		$this->procesoCorrecto  = false;
		
	return $ret_datos;
  }

  /**
  * Vuelve atras las operaciones de un bloque de transaccion
  * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  */
  function Rollback_Transaction()
  {
	$SQL_END = 'ROLLBACK;';
	
	$this->procesoCorrecto  = true;
	$procesoCorrect=$this->conectarBD();
	if($procesoCorrect)
	{
		$procesoCorrect = $this->consultarBD($SQL_BEGIN);
		if($procesoCorrect)
		{
			$ret_datos = $this->obtenerTotalFilasArray();
			$this->procesoCorrecto  = true;
		}
		else
			$this->procesoCorrecto  = false;
	
		$this->liberarConsulta();
		$this->desconectarBD();
	}
	else
		$this->procesoCorrecto  = false;
		
	return $ret_datos;
  }
  
  
}//Fin de la Clase PostgreClass
?>