
<?php
	
	use PHPMailer\PHPMailer\PHPMailer;

	require_once "PHPMailer/PHPMailer.php";
	require_once "PHPMailer/SMTP.php";
	require_once "PHPMailer/Exception.php";

	if(isset($_POST['username'])){

		require_once "./modelo/administrador.modelo.php";

	}else if(isset($_POST['reset_c'])){

		require_once "../../modelo/administrador.modelo.php";

	}else{

		require_once "../../modelo/administrador.modelo.php";
	
	}

class ControladorAdministrador extends ModeloAdministrador{
	
	/*========================================================================
	CONSULTA ADMINISTRADOR
	==========================================================================*/
	public function ctrConsultaAdministrador(){
		
		$usuario    = $_POST['username'];
		$contrasena = $_POST['password'];
		$fecha_hora_actual = date('Y-m-d H:i:s'); 

		// Verifico que el usuario y contraseña recibidos mediante post no esten vacíos.
		if(trim($usuario) != "" &&  trim($contrasena) != ""){

			// Condicional para validar formato de correo. 
			if (!filter_var($usuario, FILTER_VALIDATE_EMAIL)) {

				$mensaje = "<div class='alert alert-danger'>El correo ".$usuario." es invalido. Ejemplo de formato: example@xxx.xx</div>";

			}else{

				$resultado_administrador = ModeloAdministrador::mdlConsultaAdministrador($usuario);
				$administrador = $resultado_administrador->fetch();

				// var_dump($administrador);
				if($administrador['correo'] == $usuario && $administrador['contrasena'] == md5($contrasena) && $administrador['estado'] == 1){
					
					// Registra fecha hora del inicio de sesión.
					$registraEstadoSesion = ModeloAdministrador::mdlRegistraEstadoSesion($administrador['correo'], $fecha_hora_actual);

					// Consulta proceso al que pertenece el usuario.
					$resultadoProceso = ModeloAdministrador::mdlConsultaProcesos($administrador['id_proceso']);
					$proceso = $resultadoProceso->fetch();

					// session_start();

					$_SESSION['verificaSesion'] = true;	
					$_SESSION['id_usuario']     = $administrador['id'];
					$_SESSION['nombres']        = $administrador['nombres'];
					$_SESSION['apellidos']      = $administrador['apellidos'];
					$_SESSION['correo']         = $administrador['correo'];
					$_SESSION['celular']        = $administrador['celular'];
					$_SESSION['direccion']      = $administrador['direccion'];
					$_SESSION['proceso']        = $proceso['descripcion'];
					$_SESSION['foto']           = $administrador['imagen'];
					$_SESSION['id_proceso']     = $administrador['id_proceso'];
					$_SESSION['id_perfil']      = $administrador['id_perfil'];

					return "<script> window.location='http://alejoposada.info/sie/vista/plantilla.php' </script>";

				}else if($administrador['correo'] != $usuario){

					$mensaje = "<div class='alert alert-danger'>El usuario no se encuentra registrado en el sistema</div>";				

				}else if($administrador['contrasena'] != md5($contrasena)){

					$mensaje = "<div class='alert alert-danger'>La contraseña es incorrecta</div>";

				}else if($administrador['estado'] != 1){

					$mensaje = "<div class='alert alert-danger'>Usuario inactivo</div>";

				}	

			}	

		}else{

			$mensaje = "<div class='alert alert-danger'>Datos insuficientes</div>";
		
		}

		echo $mensaje;

	}

	/*===========================================================================
	ENVÍA CORREO PARA RESTABLECER CONTRASEÑA
	===========================================================================*/
	public function ctrEnvioCorreoRestableceContrasena(){
		
			

		$email    = $_POST['email'];

		// Verifico que el email y contraseña recibidos mediante post no esten vacíos.
		if(trim($email) != ""){

			// Condicional para validar formato de correo. 
			if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {

				echo "<div class='alert alert-danger p-3 mt-1'>El correo ".$email." es invalido. Ejemplo de formato: example@xxx.xx</div>";

			}else{

				$resultado_administrador = ModeloAdministrador::mdlConsultaAdministrador($email);
				$administrador = $resultado_administrador->fetch();

				// var_dump($administrador);
				// echo $administrador['email'];
				if($administrador['correo'] == $email){

					if($administrador['estado'] == 1){
					
						// Generar código aleatorio
						$codigos = ModeloAdministrador::mdlConsultaCodigos();
						$numero_codigos = $codigos->rowcount();
											
						for ($i=0; $i < 5; $i++) { 
												
							$numero .= rand(0,9);

						}

						$codigo = "C".$numero.$numero_codigos;
						$numero = 0;

						// Registrar código
						$codigos = ModeloAdministrador::mdlRegistraCodigo(md5($codigo), md5($administrador['correo']));

						$correo = md5($administrador['correo']);
						$codigo = md5($codigo);


						// Para
						$to  = $administrador['correo'];

						// subject
						$subject = 'RESTABLECER CONTRASEÑA SIE';

						// message
						$message = '
						<html>
						<head>
						  <title>RESTABLECER CONTRASEÑA SIE</title>
						  <style>
						  	#btn{
						  		background: #28A745; 
						  		padding: 20px;
						  		border-radius: 8px;
						  		text-decoration: none;
						  		color: #fff;
							}
							#btn:hover{
								border: solid 1px #000;
							}	
						  </style>
						</head>
						<body>
						  <p>Restablecimiento de contraseña.</p>
						  <p>Para restablecer su contraseña por favor haga clic en el botón <b>Restablecer contraseña</b></p>
						  <p>En caso de que no pueda leer este correo adecuadamente por favor copie este enlace y péguelo en el navegador: http://alejoposada.info/sie/vista/modulos/nuevaclave.php?c='.$correo.'&codigo='.$codigo.'</p>
						  <br>
						  <br>
						  <a id="btn" href="http://alejoposada.info/sie/vista/modulos/nuevaclave.php?c='.$correo.'&codigo='.$codigo.'">Restablecer contraseña.</a>
						  <br>
						  <br>
						</body>
						</html>
						';

						// To send HTML mail, the Content-type header must be set
						$headers  = 'MIME-Version: 1.0' . "\r\n";
						$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

						// // Additional headers
						// $headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
						$headers .= 'From: SIE Gomez Plata <gomezplata@alejoposada.info>' . "\r\n";
						// $headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
						// $headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

						// Mail it
						mail($to, $subject, $message, $headers);

					    echo "<div class='aler alert-success p-3 mt-1'>Se envió un correo a ".$to." con un enlace para restablecer su contraseña.</div>";

					}else{

						echo "<div class='aler alert-danger p-3 mt-1'>El usuario no esta activo, por favor contacte a su administrador.</div>";	

					}
				}else{

					echo "<div class='aler alert-danger p-3 mt-1'>Usuario no creado en el sistema, por favor contacte a su administrador.</div>";

				}

			}	

		}
	}

	/*===========================================================================
	RESTABLECE CONTRASEÑA
	===========================================================================*/
	public function ctrRestableceContrasena(){
		
		$correo = $_POST['correo'];
		$codigo = $_POST['codigo'];
		$clave1 = $_POST['clave1'];
		$clave2 = $_POST['clave2'];

		// Verifico que el clave1 y clave2 recibidos mediante post no esten vacíos.
		if(trim($clave1) != "" && trim($clave2) != ""){

			// Condicional para validar que las claves coincidan
			if(trim($clave1) == trim($clave2)){

				// Condicional para validar la cantidad de caracteres ingresados
				if(strlen(trim($clave1)) >= 6){

					$numeros = preg_match_all("/[0-9]/",$clave1, $matches);

					$mayusculas = preg_match_all("/[A-Z]/",$clave1, $matches);
					
					$minusculas = preg_match_all("/[a-z]/",$clave1, $matches);

					// echo $numeros;
					// echo $minusculas;
					// echo $mayusculas;

					// exit();

					if($numeros >= 1 && $minusculas >= 1 && $mayusculas >= 1){

						// Consulta enlaces para validar el correo y código recibidos mediante POST.
									$resultadoEnlace = ModeloAdministrador::mdlConsultaCodigo($codigo, $correo);
									$enlace = $resultadoEnlace->fetch();
									
									// Consulta administrador para validar correo.
									$resultado_administrador = ModeloAdministrador::mdlConsultaAdministradorHash();
									$administrador = $resultado_administrador->fetchAll();
									

									$correoRegistrado = false; 
									$correoRegistrado = '';
									foreach ($administrador as $value) {
										
										// Condicional para comparar el correo iterado con el recibido mediante el método POST. 
										if(md5($value['correo']) == $correo){

											$correoRegistrado = true; 
											$correoRegistrado = $value['correo'];
											
										}

									}

									// Condiconal para validar que el correo se encuentra registrado en el sistema.
									if($correoRegistrado == true && $enlace['estado'] == 1){

										$resultado_contrasena = ModeloAdministrador::mdlRestableceContrasena(md5($clave1), $correoRegistrado);

										if($resultado_contrasena->rowcount() >= 1){

											$mensaje = "<div class='alert alert-success p-3'>Contraseña restablecida correctamente.</div>";

											// Cambiando el estado del enlace para que este no pueda ser utilizado nuevamente.
											$actualizaEnlace = ModeloAdministrador::mdlActualizaEnlace($codigo);
											if($actualizaEnlace->rowcount() == 1){
												
												$mensaje .= "<div class='alert alert-info p-3'>Este enlace solo puede ser utilizado para restablecer la contraseña una única vez.</div>";

											}

										}else{
											
											$mensaje = "<div class='alert alert-danger p-3'>Ocurrió un error al intentar restablecer la contraseña.</div>";

										}

									}else if($correoRegistrado == false){
										
										$mensaje = "<div class='alert alert-danger p-3'>Correo incorrecto.</div>";

									}else if($enlace['estado'] != 1){

										$mensaje = "<div class='alert alert-danger p-3'>Este enlace ya fue utilizado, debe iniciar el proceso de nuevo haciendo click en: <a href='http://alejoposada.info/sie/vista/modulos/restablecerclave.php'>¿olvidó su contraseña?</a></div>";

									}

					}else{

						$mensaje = "<div class='alert alert-danger p-3'>La contraseña debe contener como mínimo 6 caracteres, debe contener letras mayúsculas y números.</div>";
						
					}

				}else{

					$mensaje = "<div class='alert alert-danger p-3'>La contraseña debe contener como mínimo 6 caracteres, debe contener letras mayúsculas y números.</div>";

				}

			}else{

				$mensaje = "<div class='alert alert-danger p-3'>Las contraseñas no coinciden</div>";

			}

			echo $mensaje;

		}

	}

	/*===========================================================================
	DESTRUIR VARIABLES DE SESIÒN
	===========================================================================*/
	public function ctrLogout(){
		session_start();
		session_destroy();
	 	
		echo "<script> window.location='http://alejoposada.info/sie' </script>";

	}

}


if(isset($_GET['logout'])){

	// echo "sssss";
	if($_GET['logout'] == "salir"){

		$administradorControlador = new ControladorAdministrador();

		$administradorControlador->ctrLogout();
	}
}
?>



