<?php
//===================================================================================================================
//============================================LIBRERIAS Y VARIABLES==================================================
//===================================================================================================================
session_start();
//CONEXION-----------------------------------------------------------------------------------------------------------
require_once '../conexion/conexion.php';
$bd = new connexion();
$bd->query("SET NAMES 'utf8'");
//VARIABLES----------------------------------------------------------------------------------------------------------
$id_esq = $_POST['id_esq'];
$txt_odbc2 = trim($_POST['txt_odbc']);
$txt_odbc = utf8_decode($txt_odbc2);
$id_campo_base = $_POST['id_campo_base'];
$id_campos_odbc = $_POST['id_campos_odbc'];
//===================================================================================================================
//============================================ACCIONES===============================================================
//===================================================================================================================
//CONSULTAR LA CONEXION ODBC DEL CAMPO BASE--------------------------------------------------------------------------
$conex_base = claveConexBase($bd, $id_esq, $id_campo_base);
//CONSULTO LA CONEXION DEL CAMPO A ACTUALIZAR A VER SI ES LA MISMA Y PROCEDER A LA ACTUALIZACION---------------------
$conex_campo_odbc = claveConexBase($bd, $id_esq, $id_campos_odbc);
//EVALUAR SI PERTENECEN A LAS MISMAS CONEXIONES PARA ACTUALIZAR------------------------------------------------------
if ($conex_base["CONEX_ODBC"] == $conex_campo_odbc["CONEX_ODBC"]) {
  //SON IGUALES Y PROCEDO A ACTUALIZAR===============================================================================
  //VARIABLE DEL CODIGO DE LA CONEXION EXTERNA---------------------------------------------------------------------
  $cod_odbc = conexODBC($bd, $id_esq, $conex_base["CONEX_ODBC"]);
  //CONSULTO LOS DATOS DE LA CONEXION EXTERNA A REALIZAR-----------------------------------------------------------
  $datos_conn = datosConexExterna($bd, $conex_base["CONEX_ODBC"], $id_esq, $id_campos_odbc);
  //CONSULTO EL DRIVER O TIPO DE BBDD A CONSULTAR------------------------------------------------------------------
  if ($datos_conn["DRIVER"] == "MYSQL") {
    //SE CONSULTARA UNA MYSQL O MARIADB--------------------------------------------------------------------------
    //VARIAVLE DE LA CADE DE CONEXION----------------------------------------------------------------------------
    $driver_conn = $datos_conn["CONEXION"];
    //HAGO UN EXPLODE PARA OBTENER LA CADENA DE CONEXION---------------------------------------------------------
    $cadena_1 = explode("{",$driver_conn);
    $cadena = explode("}",$cadena_1[1]);
    //HAGO EL EXPLODE PARA OBTENER EL SERVIDOR-------------------------------------------------------------------
    $server_1 = explode("Server=",$driver_conn);
    $server = explode(";",$server_1[1]);
    //HAGO EL EXPLODE DEL NOMBRE DE LA BASE DE DATOS-------------------------------------------------------------
    $bbdd_1 = explode("Database=",$driver_conn);
    $bbdd = explode(";",$bbdd_1[1]);
    //HAGO EL EXPLODE DEL USUARIO DE LA BASE DE DATOS-------------------------------------------------------------
    $user_1 = explode("User=",$driver_conn);
    $user_bbdd = explode(";",$user_1[1]);
    //HAGO EL EXPLODE DEL PASSW DE LA BASE DE DATOS---------------------------------------------------------------
    $pw_1 = explode("Password=",$driver_conn);
    $pw_bbdd = explode(";",$pw_1[1]);
    //EVALUO SI EN LA CADENA DE CONEXION VIENE EXPRESADA LA VARIABLE PORT----------------------------------------
    $find = "Port";
    $has_port = strrpos($driver_conn, $find);
    //EVALUO CUAL CADENA DE CONEXION DEBO UTILIZAR--------------------------------------------------------------
    if ($has_port === false) {
        //CADENA DE CONEXION------------------------------------------------------------------------------------
        //DEBO UTILIZAR LA $conn SIN PORT
        $conn = odbc_connect("DRIVER={".$cadena[0]."};Server=".$server[0].";Database=".$bbdd[0]."", $user_bbdd[0], $pw_bbdd[0]);
    } else {      
        //HAGO EL EXPLODE DEL PASSW DE LA BASE DE DATOS---------------------------------------------------------
        $port_1 = explode("Port=",$driver_conn);
        $port_bbdd = explode(";",$port_1[1]);
        //CADENA DE CONEXION------------------------------------------------------------------------------------
        //DEBO UTILIZAR LA $conn CON PORT
        $conn = odbc_connect("DRIVER={".$cadena[0]."};Server=".$server[0].";Port=".$port_bbdd[0].";Database=".$bbdd[0]."", $user_bbdd[0], $pw_bbdd[0]);
    }
    //EVALUO QUE LA CONEXION SE REALIZA CORRECTAMENTE------------------------------------------------------------
    if (!($conn)) { 
        echo "<p>Connection to DB via ODBC FALLO: ";
        echo odbc_errormsg ($conn );
        echo "</p>";
    }
    //===========================================================================================================
    //ARMO LA OPCION SELECCIONADA================================================================================
    //VARIABLE DE LA DESCRIPCION DE LA CONEX ODBC
    $desc_obdc = $conex_base["DESCRIP_ODBC"];
    //NOMBRE D ELA TABLA
    $tabla = $datos_conn["TABLA"];
    //CAMPO CLAVE A CONSULTAR
    $camp_clave = $conex_campo_odbc["DESCRIP_ODBC"];
    //ARMO EL SELECT DE LA TABLA--------------------------------------------------------------------------------------
    $sql = " SELECT $camp_clave FROM $tabla WHERE $desc_obdc = '$txt_odbc' ";
    //ABRO LA CONEXION-------------------------------------------------------------------------------------------
    $rs = odbc_exec($conn,$sql);
    //RECORRO Y ARMO EL LISTADO----------------------------------------------------------------------------------
    while (odbc_fetch_row($rs)){
        //VALIDO EL VALOR DEL CAMPO A TOMAR----------------------------------------------------------------------
        $seleccion = odbc_result($rs,$camp_clave);
        //ESCRIBO LOS VALORES DEL LSITADO------------------------------------------------------------------------
        echo "<option>".utf8_encode($seleccion)."</option>";         
    }
    //===========================================================================================================
    //ARMO LAS DEMAS OPCION =====================================================================================
    //ARMO EL SELECT DE LA TABLA---------------------------------------------------------------------------------
    $sql = "SELECT * FROM ".$datos_conn["TABLA"]." ";
    //ABRO LA CONEXION-------------------------------------------------------------------------------------------
    $rs = odbc_exec($conn,$sql);
    //RECORRO Y ARMO EL LISTADO----------------------------------------------------------------------------------
    while (odbc_fetch_row($rs)){
        //VALIDO EL VALOR DEL CAMPO A TOMAR----------------------------------------------------------------------
        $result = odbc_result($rs,$datos_conn["DESCRIP_ODBC"]);
        //VALIDO PARA NO REESCRIBIR LA OPCION SELECCIONADA-------------------------------------------------------
        if ($result != $seleccion) {
            //ESCRIBO LOS VALORES DEL LSITADO--------------------------------------------------------------------
            echo "<option>".utf8_encode($result)."</option>";         
        }
      }
      //CIERRO LA CONEXION---------------------------------------------------------------------------------------
      odbc_close($conn);
  }
}
//===================================================================================================================
//============================================HTML===================================================================
//===================================================================================================================
//===================================================================================================================
//============================================FUNCIONES==============================================================
//===================================================================================================================
//FUNCION PARA CARGAR EL CODIGO DE LA CONEXION BASE DEL ODBC---------------------------------------------------------
function claveConexBase($bd, $id_esq, $id_campo_base)
{
  $sql =  " SELECT E.CONEX_ODBC, E.CAMPOCLAVE, E.DESCRIP_ODBC
            FROM ESQUEMAS_ESTRUCTURA E
            WHERE E.ESQUEMA = $id_esq AND E.CODIGO = $id_campo_base LIMIT 1";
  $base = $bd->query($sql);
  $row = mysqli_fetch_array($base);
  $base->close();
  return $row;
}
//funcion para obtener los datos de la conecion externa--------------------------------------------------------------
function datosConexExterna($bd, $cod_odbc, $id_esq, $cod_campo)
{
  $sql =  " SELECT E.CODIGO, E.DESCRIPCION, E.CONEXION, E.TABLA, E.CAMPOCLAVE, E.TIPOCLAVE, E.DRIVER, EE.DESCRIP_ODBC
            FROM CONEXIONES_EXTERNAS E
            INNER JOIN ESQUEMAS_ESTRUCTURA EE
            ON EE.CONEX_ODBC = E.CODIGO
            WHERE E.CODIGO = $cod_odbc AND EE.CODIGO = $cod_campo AND EE.ESQUEMA = $id_esq";
  $base = $bd->query($sql);
  $result = mysqli_fetch_array($base);
  $base->close();
  return $result;
 }
 //FUNCION PARA OBTENER LA DESCRIPCION DE LA CONEXION ODBC------------------------------------------------------------
 function conexODBC($bd, $id_esq, $cod_esq)
 {
  $sql =  " SELECT E.CONEX_ODBC
            FROM ESQUEMAS_ESTRUCTURA E
            WHERE E.ESQUEMA = $id_esq AND E.CODIGO = $cod_esq AND ACTIVO = 1 LIMIT 1";
  $base = $bd->query($sql);
  $row = mysqli_fetch_array($base);
  $result = $row['CONEX_ODBC'];
  $base->close();
  return $result;
 } 


?>