<?php
	//---------------------------------------------------------------------------------------------------------
	// 30/Septiembre/2014
	// Versión 1.0 Recibimos los datos del cliente y hacemos login si es necesario
	//---------------------------------------------------------------------------------------------------------
	// 26/Enero/2017
	// Versión 1.1 Añadimos el login de  vendedor
	//---------------------------------------------------------------------------------------------------------

	

	include("comunes/globals.php");
	//Vamos a tener en cuenta los pasos que hemos dado desde el último intento de login (Si no estamos logueados, claro) para que sólo aparezcan los avisos de error
	//cuando llevemos menos de 1 paso
	//Haremos los mismo en la confirmación de registro y en el registro en sí. En estos últimos 2 casos utsamos las mismas variables porque no se pueden producir ambos casos simultaneamente
	//Antes de nada, tenemos que asignar al url a la que redirigiremos al usuario
    //$url_para_redireccion = getUrl_sin_parametros();	
	//Si tenemos un cliente asignado nos olvidamos del login
	$cod_cliente_web = Sesion::get("cod_cliente_web");
	$vendedorActual = Sesion::get("vendedorActual");
	
	$datos_usuario_sin_registro = Sesion::get("datos_usuario_sin_registro", true);
	$cerrar_sesion = 0;
	$cerrar_sesion_vendedor = 0;
	$usuario = "";
	$vendedor = "";
	$password = "";
	//Antes de hacer el control de login, vamos a controlar el login del vendedor
	//Proceso de control de login
	if ( ($vendedorActual == 0) || ($vendedorActual == NULL) ){
		$vendedor = dame_valor_variable_global("vendedor");
		$password = $password_modificado = dame_valor_variable_global("password", "");
		//Hay que convertir el password en una cadena sha1
		if (Shop::$configuracion->password_encriptado){
			$passwordJustificado = str_pad($password, 10, '.');
			$password_modificado = sha1($passwordJustificado);
		}
		if ( ($vendedor != "") && ($password_modificado != "") ){
			//Tenemos un posible login de vendedor, vamos a ver si esta bien
			$sentencia_sql = 'SELECT codigo FROM vendedor WHERE email = "' . $vendedor . '" AND password = "' . $password_modificado . '"';
			//echo("$sentencia_sql<br />\n");
			if ($resultado = mysqli_query($conexionBD, $sentencia_sql)){
				//echo "Antes del merge de la fila";
				$fila = mysqli_fetch_array($resultado);
				if (!empty($fila)){	
					//Tenemos vendedor
					Sesion::set("vendedorActual", $fila['codigo']);
				}
			}
		}
	}else{
		//Tenemos un vendedor logueado, vamos a ver si ha iniciado la sesión
		$cerrar_sesion_vendedor = dame_valor_variable_global("cerrar_sesion_vendedor", 0);
		$loginAsistido = dame_valor_variable_global("loginAsistido", "");
		if ( $cerrar_sesion_vendedor == 1){
			$cerrar_sesion = 1;
			//Hay que limpiar los valores de sesión
			Sesion::set("cerrar_sesion", 1);
			$cod_cliente_web = '';
			Sesion::set("vendedorActual", 0);
			$vendedorActual = 0;
		}else if ($loginAsistido != ""){
			//Vamos a comprobar si ha logueado a un usuario
			$usuario = $cod_cliente_web = dame_valor_variable_global("codigo_usuario", '');
		}
	}
	if ( ($cod_cliente_web == '') || ($cod_cliente_web == NULL) ){
		//Controlamos que hayamos hecho login en la web mediante un metodo GET o POST
		//$usuario = dame_valor_variable_global("usuario", "");
		$usuario = Getter::get('usuario', '');
		//El email SIEMPRE en minúsculas
		$usuario = strtolower($usuario);
		//$password_mod = $password = dame_valor_variable_global("password", "");
		$password_mod = $password = Getter::get('password', '');
		//Hay que convertir el password en una cadena sha1
		if (Shop::$configuracion->password_encriptado){
			$password_mod = sha1(str_pad($password, 10));
		}
		/*echo("<!--");
		echo("Recibido usuario: $usuario\n");
		echo("Recibido password: $password\n");
		echo("Recibido password_mod: $password_mod\n");
		echo("-->");*/
		if ( ($usuario != "") && ($password_mod != "") ){
			//Como ha habido un intento de login, ponemos los pasos a 0
			$sentencia_sql = 'SELECT codigo FROM cliente WHERE email = \'' . $usuario . '\' AND password = \'' . $password_mod . '\' AND (codigo_confirmacion = \'0\' OR codigo_confirmacion = \'\');';
			//echo("$sentencia_sql<br />\n");
			if ($resultado = mysqli_query($conexionBD, $sentencia_sql)){
				//echo "Antes del merge de la fila";
				$fila = mysqli_fetch_array($resultado);
				if (!empty($fila)){	
					//Tenemos usuario
					$cod_cliente_web = $fila[0];
					//echo ("EL código es: ".$cod_cliente_web."<br/>\n");
				}
			}
			//Llegados a este punto, si no tenemos cliente, entonces es que algo falla
			if ( ($cod_cliente_web == '') || ($cod_cliente_web == NULL) ){
				$error_login = "";
				//Vamos a ver si es el usuario:
				$sentencia_sql = "SELECT codigo FROM cliente WHERE email = '$usuario'";
				if ($resultado = mysqli_query($conexionBD, $sentencia_sql)){
					if ($fila = mysqli_fetch_array($resultado)){
						//El error del login es el password
						$clase_error_login = "password";
						$error_login = traducir("El password introducido no es válido");
					}
				}
				//Si no hay error en el login, entonces el problema está en el email
				if ($error_login == ""){
					$clase_error_login = "email";
					$error_login = traducir("El email introducido no está registrado en nuestro sistema");
				}
				//Si ha ocurrido algún error con el login, tenemos que meterlo en la sesión
				if ($error_login != ""){
					//Vamos a guardar en la sesión el error del login
					//Sesion::set("error_login", $error_login);
                    $listaSysMsg->addElement("widget_usuario", $error_login, $clase_error_login, "login");
					$listaSysMsg->addElement("widget_usuario", $error_login, $clase_error_login, "loginV2");
					Sesion::set("email_login", $usuario);
				}
			}
		}
	}else{
		//Vamos a comprobar si hay que cerrar la sesión
		$cerrar_sesion = dame_valor_variable_global("cerrar_sesion", 0);
		if ( $cerrar_sesion == 1){
			Sesion::clean();	// ==> Antes se pasaba un 'false' para que no se eliminara la sesión de la BD, pero es necesario que esto se haga
			$cod_cliente_web = '';
		}else{
			//Aquí es dónde comprobamos si el cliente ha modificado sus datos
			include("comunes/mod_datos.php");
		}
	}

	//Aquí va el registro
	$accion = dame_valor_variable_global("accion", "");
	//Ahora vamos con el registro
	/*
	if ($accion == "registro"){
		//Este flag indica si hay que continuar o no el registro
		$continuar_registro = true;
		//Nos envían los datos para registrarnos. Los datos que nos envían empiezan por "campo_registro"
		$array_campos = array();
		$email_newsletter = "";
		$campo_nombre = "";
		$campo_apellidos = "";
		$usa_catpcha = false;
		$respuesta_captcha = "";
		foreach($_POST as $clave => $valor){
			//echo("$clave -- $valor<br />\n");
			$valor_clave = "campo_registro_";
			$posicion = strpos($clave, $valor_clave);
			if ($posicion !== false) {
				//echo("$clave -- $valor<br />\n");
				//Si es un campo nombre_solo o apellidos_solo, entonces lo añadimos a campo nombre
				//Y si es un campo nombre o un campo apellidos, lo asignamos directamente.
				if ($clave == "campo_registro_nombre"){
					$campo_nombre = $valor;
				}else if ($clave == "campo_registro_apellidos"){
					$campo_apellidos = $valor;
				}else if ($clave == "campo_registro_nombre_solo"){
					$campo_nombre .= $valor;
				}else if ($clave == "campo_registro_apellidos_solo"){
					$campo_apellidos .= $valor;
				}else{
					$array_campos[substr($clave, strlen($valor_clave))] = $valor;
				}
			}
			//Vamos a trabajar con el recaptcha
			if ($clave == "verificado"){
				$usa_catpcha = true;
			}
			if ($clave == "tokenGoogle"){
				$respuesta_captcha = $valor;
			}
		}

		//Vamos a cotrolar que sea necesario usar el captcha:
		if ($usa_catpcha){
			$continuar_registro = false;
			//Comprobación captcha
			$claveSecreta = Shop::$configuracion->captchaClaveSecreta;
			//$ip = $_SERVER['REMOTE_ADDR'];
			$url = "https://www.google.com/recaptcha/api/siteverify?secret=" . $claveSecreta . "&response=" . $respuesta_captcha;// . "&remoteip=" . $ip;
			//echo("la ruta es: $url<br />\n");
			$respuesta = file_get_contents($url);
			$respuesta = json_decode($respuesta, true);
			if ($respuesta["success"]) {
				$continuar_registro = true;
			}
			//var_dump($respuesta["success"]);
		}

		if ($continuar_registro){
			if ( ($campo_nombre != "") || ($campo_apellidos != "") ){
				$array_campos["nombre_legal"] = $campo_nombre . " " . $campo_apellidos;
			}
			$email_newsletter = $array_campos["email"];
			if (count($array_campos) > 0){
				//Se comprueba  el tipo de registro
				if(!Shop::$configuracion->registro_supervisado){
					// 
					// Pasa cuando es False osease cuando se requeire un registro clasico.
					// tenemos un array con campos, vamos a crear el cliente, teniendo en cuenta si es un registro 
					// o se están proporcionando datos de usuario
					//
					
					$cliente_creado = crea_cliente($array_campos, true, ($accion == "datos_usuario") ? false : true, ($accion == "datos_usuario") ? true : false, Shop::$configuracion->registro_con_confirmacion);
					
					//Anadimos el email a la tabla newsletter
					if (isset($_POST["aceptar_boletin"])){
						if($_POST["aceptar_boletin"] === "true"){
								agregar_cliente_boletin($email_newsletter);
						}
					}
					if ($accion == "datos_usuario"){
						//En este caso tenemos un cliente creado, hay que confirmarlo
						$cod_cliente_web = $cliente_creado;
						confirmar_cliente("", $cod_cliente_web);
					}
					//Si el registro no requiere confirmación, el mensaje es otro:
					if (Shop::$configuracion->registro_con_confirmacion){
						//Añadimos un mensaje en el que indicamos que el registro ha sido correcto
						$listaSysMsg->addElement("widget_usuario", traducir("Registro realizado con éxito. Le hemos enviado un email a la dirección de correo electrónico que nos ha facilitado. Antes de continuar compruebe que lo ha recibido y siga los pasos indicados para confirmar su registro en nuestra página web. Es importante que realice ésta verificación para validar que su email es correcto por si necesitamos ponernos en contacto con usted."), "correcto", "registro");
					}else{
						$listaSysMsg->addElement("widget_usuario", traducir("Registro realizado con éxito. Le hemos enviado un email con sus datos de usuario. Ahora puede identificarse en nuestra web."), "correcto", "registro");
					}
				}else{
					//pasa cuando es TRUE es decir cuando se quiere supervisar el registro
					creaClienteSupervisado($array_campos);
				}
	
			}
		
		}else{
			//Informemos de que hay un error:
			$listaSysMsg->addElement("widget_usuario", traducir("No se ha rellenado correctamente el catpcha de Google. Inténtelo de nuevo"), "error", "registro");
		}
	}*/
	if ($accion == "datos_usuario"){
		//Hemos recibido los datos de usuario, vamos a crear un objeto del tipo "UsuarioSinRegistro" con los datos recibidos
		$datos_usuario_sin_registro = crea_cliente_tmp($_POST);
		Sesion::set("datos_usuario_sin_registro", $datos_usuario_sin_registro);
	}

	//Vamos a controlar aquí la confirmación del registro
	if ($accion == "confirmacion_registro"){
		//Lo primero es confirmar al cliente
		$codigo_confirmacion = dame_valor_variable_global("codigo_confirmacion", 0);
		$codigo_cliente = dame_valor_variable_global("codigo_cliente", 0);
		$texto_a_mostrar = "";
		$correcto = "";
		if (confirmar_cliente($codigo_confirmacion, $codigo_cliente)){
			$texto_a_mostrar = traducir("Gracias por registrarse en nuestra página web. Le acabamos de enviar un email con sus datos de acceso. Guárdelo en lugar seguro. Puede cerrar esta ventana y seguir navegando por nuestra web.");
			$correcto = "correcto";
		}else{
			$texto_a_mostrar = traducir("Ha ocurrido un error al confirmar su registro. Es posible que ya esté confirmado. Intente acceder a la web con su email y contraseña. Si el problema persiste, póngase en contacto con nosotros. Disculpe las molestias");
			$correcto = "error";
		}
		//Nos están confirmando el registro. vamos a redirigir al cliente al apartado en el que estaba
		//$url_para_redireccion = getBackUrl();
		//Añadimos un mensaje con el error del registro. Ojo, este widget empieza con el contador ya a 1 para que se pueda buscar en los resultados
        $listaSysMsg->addElement("widget_usuario", $texto_a_mostrar, $correcto, "confirmacion_registro", 1);
		//echo("widget_usuario " .  $texto_a_mostrar . " " . $correcto .  " confirmacion_registro");
	}
	//Si ahora tenemos un cliente web, es el momento de cargar sus datos en un objeto "cliente"
	$datos_usuario = new Usuario($cod_cliente_web);
	//var_dump($datos_usuario);
	if (intval($datos_usuario->codigo) > 0){
		//Vamos a asignar los datos a la sesión y a las cookies
		Sesion::set("cod_cliente_web", (int)$datos_usuario->codigo);
		Sesion::set("cod_cliente_sinlib", (int)$datos_usuario->codigo_sinlib);
		//Inicializamos el error del login y del registro
		//Sesion::set("error_login", "");
		//Sesion::set("error_registro", "");
		//Inicializamos los pasos que se han dado desde el último login
		if(Shop::$configuracion->guardar_pedidos_bd &&  ($usuario != "" || $password != "")) {
			//cargar_cesta_bd();		
		}
	}else{
		//Hay que indicar a la sesión que no hay usuario
		Sesion::remove("cod_cliente_web", 0);
		Sesion::remove("cod_cliente_sinlib", 0);
		//Aumentamos los pasos del login
	}
	//echo("La traza es: $cadena_traza<br />\n");
	//Por último, si tenemos password o email, tenemos que controlar el envío de variables para el tema el botón"Atrás" en el navegador
	//if ( ($usuario != "") || ($password != "") || ($cerrar_sesion == 1) || ($accion == "registro") ||( $accion == "confirmacion_registro" ) ){ 
	//echo("Usuario = $usuario, password = $password, vendedor = $vendedor, cerrar_sesion = $cerrar_sesion, accion = $accion");
	if ( ($usuario != "") || ($password != "") || ($vendedor != '') || ($cerrar_sesion_vendedor == 1)  || ($cerrar_sesion == 1) || ($accion == "registro") || ($accion == "datos_usuario") ){//Quito la confirmación de registro porque lleva su sección a parte
		//echo("recargamos web desde login");
		//Sesion::setReloadPage(Sesion::getReloadPage() | true);
	}
?>
