<?php

//putproduct.php – Webservice que permite volcar un array a una tabla concreta en una la base de datos Oracle.
//Version: 1.0

//Incluye seguridad http básica mediante el envío del usuario y contraseña en la cabecera
//de la petición. Si el usuario y contraseña no coincide con el local. Se deniega la operación.
//Deshabilitada.

//(C) 2021 - Eduardo Arana para UveDiez Supply Chain, S.L. - earana@grupov10.com

//Historico de cambios:
//19/04/2021 Adaptación de Json a XML EAG. 

require('ac_db.inc.php');
require('vd_phplog.php');

// Debug! 
// Capturar errores de formato en JSON.
//    switch (json_last_error()) {
//    case JSON_ERROR_NONE:
//        echo 'Debug - No errors';
//    break;
//    case JSON_ERROR_DEPTH:
//        echo 'Debug - Maximum stack depth exceeded';
//    break;
//    case JSON_ERROR_STATE_MISMATCH:
//        echo 'Debug - Underflow or the modes mismatch';
//    break;
//    case JSON_ERROR_CTRL_CHAR:
//        echo 'Debug - Unexpected control character found';
//    break;
//    case JSON_ERROR_SYNTAX:
//        echo 'Debug - Syntax error, malformed JSON';
//    break;
//    case JSON_ERROR_UTF8:
//        echo 'Debug - Malformed UTF-8 characters, possibly incorrectly encoded';
//    break;
//    default:
//        echo 'Debug - Unknown error';
//    break;
//}
// end of switch

//Tratamiento de errores PHP

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// permite peticiones desde cualquier origen
header('Access-Control-Allow-Origin: *');
// permite peticiones con métodos GET, PUT, POST, DELETE y OPTIONS
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
// permite los headers Content-Type y Authorization
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
header("Access-Control-Max-Age: 3600");

//Definicion del usuario y contraseña para la autenticación.

$usuario = "V10";
$password = "362liSia2";

//Requiere un header del tipo Autorization: Basic 
$passwords_validos = array ($usuario => $password);
$usuarios_validos = array_keys($passwords_validos);

$user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] :'';
$pass = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] :'';

//Para interfaces de desarrollo se comenta la autenticación.

//$validar = (in_array($user, $usuarios_validos)) && ($pass == $passwords_validos[$user]);
//
//if (!$validar) {
//  header('WWW-Authenticate: Basic realm="Mi Realm"');
//  header('HTTP/1.0 401 Unauthorized');
//  die ("No autorizado a utilizar el recurso.");
//}

//solo permitimos operaciones POST.

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

$entrada = file_get_contents('php://input');

//si la petición viene vacía mostramos el error 40X. 24-02-2020 EAG
if (!file_get_contents('php://input')) {
	        
			http_response_code(400);
            echo "Empty request or without content. Petición vacía o sin contenido";
			exit(); 
}

//$json = json_decode($entrada);

//establecemos la conexión con la bbdd
$db = new \Oracle\Db("V10SENDING", "TRATARARTICULO");

$clob = oci_new_descriptor($db->conn, OCI_D_LOB);
							
$sql = 'begin
        hlinterfazinbound.tratarorden(HLWEBSERVICE.clob_to_blob(:xmlorden),:resultado,:descresultado);
        end;';  
$sqlexec = oci_parse($db->conn,$sql);
oci_bind_by_name($sqlexec, ":xmlorden",$clob, -1, OCI_B_CLOB);
oci_bind_by_name($sqlexec, ":resultado",$resultado,5,SQLT_CHR);
oci_bind_by_name($sqlexec, ":descresultado",$descresultado,100,SQLT_CHR);
$clob->writeTemporary($entrada);
oci_execute($sqlexec, OCI_DEFAULT);
oci_commit($db->conn);
$clob->free();
oci_free_statement($sqlexec);


	
   vdlog("TRATARORDEN", "Fichero entrada: " . $entrada . ' ');
   if($resultado == 200){                
		//si ha ido bien retornamos OK o 200.
        http_response_code($resultado);
        echo "Resultado: " . $resultado;
        echo "\n\n";
        echo "Descripción: ".$descresultado;
		vdlog("TRATARORDEN", "Resultado: " . $resultado . ' ' . "Descripción: ".$descresultado);
   }
   else {
        //si existe algún error mostramos el error 40X.
		http_response_code($resultado);
        echo "Resultado: " . $resultado;
        echo "\n\n";
        echo "Descripción: ".$descresultado;
		vdlog("TRATARORDEN", "Resultado: " . $resultado . ' ' . "Descripción: ".$descresultado);
		exit(); 
   }
}
else{
	http_response_code(400);
    echo "Method ".$_SERVER['REQUEST_METHOD']." not accepted.";
	exit(); 	
}

?>