<?php

// Este script debe ser colocado en una carpte protegida con usuario y clave
// usando la proteción provista por el servidor Apache.
// Los scripts que hagan lamadas a este script, deben ser configurados para
// que envien el usuario y clave corresponidente.

$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
error_reporting(E_ALL);
require "dbcon_cluster.php";

/*
$msg = "___POST___\n";
foreach ($_POST as $nombre_campo => $valor) {
    $msg .= $nombre_campo . "='" . $valor . "' \n";
}
$msg .= "___GET___\n";
foreach ($_GET as $nombre_campo => $valor) {
    $msg .= $nombre_campo . "='" . $valor . "' \n";
}
mail( 'usuariotest@midominio.com', 'rosx_msg', $msg  );
 */


$sql = varval('sql', '');

// pasar en $xo la orden a ejecutar.
$xo = varval('xo', '?');

$cmd = varval( 'cmd', '' );

// pasar como par�metro $sepline si queremos que las l�neas devueltas, adem�s
// tengan antes del \n la cadena pasada en $sepline. esto sirve para parsear
// las l�neas por el cliente cuando hacerlo con \n no resulta confiable.
$sepline = varval('sepline', '');


function varval($nombre, $def) {
    if (!isset($_POST[$nombre])) {
        if (!isset($_GET[$nombre])) {
            return $def;
        } else {
            return $_GET[$nombre];
        }
    } else {
        return $_POST[$nombre];
    }
}


function wrln_($s) {
    global $sepline;
    echo $s . $sepline . "\n";
}


function fin() {
    global $xo;
    wrln_('+fin_' . $xo);
    $modo = varval('modo', '_rbt_');
    if ($modo == '_usr_form_') {
        despliegue_usr_form($xo);
    }
    exit;
}


// escribe el inicio de la respuesta.
wrln_('+inicio_' . $xo);



if ($xo == 'next_nid') {
    $tabla = varval('tabla', '');
    clbr_($tabla);

    if ($tabla == '') {
        wrln_('+error');
        wrln_('No definio tabla');
        fin();
    }

    $db->dbg_on = false;
    set_time_limit(10 * 60); // segundos de espera m�xima

    if (!$nid = $db->nextval($tabla . '_nid_seq', 1)) {
        wrln_('+error');
        wrln_($db->error());
        fin();
    }

    wrln_('+ok');

    wrln_($nid);
    fin();
}


if ($xo == 'query') {

    $sql = varval('sql', '');
	$pass = varval('pass', '');
	$nid = varval('nid', '');
	$nid_version = varval('nid_v', '');
	
	if ($pass == '') {
		
		clbr_($sql);

		if ($sql == '') {
			wrln_('+error');
			wrln_('No definio sql');
			fin();
		}
	
	} else {
		if (($nid == '') or ($nid_version == '')) {
        wrln_('+error');
        wrln_('No definio nid o nid_version');
        fin();
		}
		if ($pass == '') {
        wrln_('+error');
        wrln_('No definio pass');
        fin();
		}
	}

	//aca hacer la lógica para armar el sql, si no $sql es vacio y en $pss <> vacio
	
    $db->dbg_on = false;
    set_time_limit(10 * 60); // segundos de espera m�xima

    if (!$res = $db->query($sql)) {
        wrln_('+error');
        wrln_('SQL:[' . $sql . ']: ' . $db->error());
        fin();
    }

	
	
    wrln_('+ok');

    // preguntamos la cantidad de filas del resultado
    $nrows = $res->nrows();

    // preguntamos la cantidad de columnas del resultado
    $ncols = $res->ncols();

    // empezamos a mandar de a un valor por rengl�n
    wrln_($nrows);
    wrln_($ncols);

    for ($kf = 0; $kf < $ncols; $kf++) {
        $ftype = $res->ftype($kf);
        wrln_($ftype);
    }

    for ($kf = 0; $kf < $ncols; $kf++) {
        $fname = $res->fname($kf);
        wrln_($fname);
    }

    for ($kr = 0; $kr < $nrows; $kr++) {
        $row = $res->next();
        for ($kf = 0; $kf < $ncols; $kf++) {
            $fval = rawurlencode($res->row[$kf]);
            wrln_($fval);
        }
    }
    fin();
}

if ($xo == 'exec') {
    $sql = varval('sql', '');
    clbr_($sql);
    if ($sql == '') {
        wrln_('+error');
        wrln_('No definio sql');
        fin();
    }

    $db->dbg_on = false;
    set_time_limit(10 * 60); // segundos de espera m�xima
    $res = $db->exec($sql);
    if ($res === false) {
        wrln_('+error');
        wrln_('SQL:[' . $sql . ']: ' . $db->error());
        fin();
    }

    wrln_('+ok');
    wrln_(0);
    wrln_(0);

    fin();
}

// si llegamos aqui no proces� antes la orden
wrln_('rso (c) ZonaExterior.net');
fin();
?>
