<repo_name>jorge9797/inventario<file_sep>/js/dashboard/login.js
$(document).ready(function(){

   $('#frm-login').submit(function(event){

        let usuario=$('#usuario').val();
        let contrasena=$('#contrasena').val();

        $.ajax({
                method:'POST',
                url:'./index.php?c=login&a=login',
                data:{usuario:usuario,contrasena:contrasena},
                dataType:'json',

        }).done(function(data,textStatus,jqXHR){


                if(parseInt(data.estado)===1){                        
                        
                        const toast = swal.mixin({
                                toast: true,
                                position: 'top-end',
                                showConfirmButton: false,
                                timer: 3000
                              });
                              
                              toast({
                                type: 'success',
                                title: 'Bienvenido '+data.nombre+' '+data.apellido
                              }).then(()=>{
                                
                                location.href ="./index.php?c=usuarios&a=index";                                
                                
                              });
                              
                        
                }
                else if(data.estado===3){

                        const toast = swal.mixin({
                                toast: true,
                                position: 'top-end',
                                showConfirmButton: false,
                                timer: 3000
                              });
                              
                              toast({
                                type: 'error',
                                title: 'Usuario o contraseña invalidas'
                              })
                }
                else{

                        const toast = swal.mixin({
                                toast: true,
                                position: 'top-end',
                                showConfirmButton: false,
                                timer: 3000
                              });
                              
                              toast({
                                type: 'error',
                                title: 'Usuario actualmente inactivo'
                              })

                }

                

        }).fail(function(jqXHR,textStatus){

            console.log(textStatus);

        })



        event.preventDefault();
   });

});<file_sep>/controllers/usuarios.controller.php


<?php

//Requerir las entidades para el mapeo
//Requerir el modelo cuando este echo
//Requerir el archvio de la bd
require_once('bd/conexion.php');

class UsuariosController{
	
	//Variable que generara la instamcia  del modelo para ser utilizada
	private $model;
	
	
	public function __CONSTRUCT(){
		
		//Inicializar modelo
	}
	
	public function index(){
		
		require_once('views/usuarios/usuarios.view.php');
	}
	
	
	public function ingresarUsuario(){
		
		
	}
	public function actualizarUsuario(){
		
		
	}
	
	public function eliminarUsuario(){
				
		
	}
	
}


?><file_sep>/controllers/login.controller.php
<?php

require_once('models/entities/usuarios.entity.php');
require_once('models/models/usuarios.model.php');

class LoginController{
	
	private $model;
	
	public function __CONSTRUCT(){

			$model=new UsuariosModel();
	}
	
	//Retorna la vista de login
	public function index(){		
		require_once('views/usuarios/login.view.php');	
	}
	
	//Metodo para ingresar
	public function login(){
	
		session_start();

		
		$usuario=new Usuario();
		$usuario->__SET('usuario',$_REQUEST['usuario']);
		$usuario->__SET('contrasena',$_REQUEST['contrasena']);


		$model=new UsuariosModel();

		$user=$model->login($usuario);


		if($user==null){

			$objeto = new stdClass();
			$objeto->estado=3;

			echo json_encode($objeto);


		}
		else{

			echo $user->toJSON();;						

		}		

	}
	
	//Metodo para cerrar session
	public function logout(){
		
		
	}
	
}

?><file_sep>/bd/parametros.php
<?php
define('DB_HOST','localhost');
define ('DB_USER','root');
define ('DB_PASS','');
define ('DB_NAME','inventario');
define('DB_CHARSET','utf-8');
?>
<file_sep>/views/usuarios/login.view.php
<!DOCTYPE html>
<html lang="en">

<head>
 <?php include('views/modules/headers.php'); ?>
</head>

<body class="bg-dark">
  <div class="container">
  
    <div class="card card-login mx-auto mt-5">
      <div class="card-header">Login</div>
      <div class="card-body">
        <form method="POST" id="frm-login" >
          <div class="form-group">
            <label for="usuario">Usuario</label>
            <input class="form-control" id="usuario" type="text" aria-describedby="emailHelp" placeholder="Usuario" autocomplete="off"  required>
          </div>
          <div class="form-group">
            <label for="contrasena">Contraseña</label>
            <input class="form-control" id="contrasena" type="password" placeholder="<PASSWORD>" autocomplete="off" required>
          </div>
          <div class="form-group">
            <div class="form-check">
              <label class="form-check-label">
                <input class="form-check-input" type="checkbox"> Recordarme</label>
            </div>
          </div>
          <button type="submit" class="btn btn-primary btn-block" href="index.php">Login</button>
        </form>
        <div class="text-center">          
          <a class="d-block small mt-3" href="forgot-password.html">Forgot Password?</a>
        </div>
      </div>
    </div>
  </div>
    	

	<?php include('views/modules/scroll_button.php')?>
	<?php include('views/modules/logout_modal.php')?>  
	<?php require('views/modules/scripts.php')?>
  
</body>

</html><file_sep>/models/models/usuarios.model.php
<?php


	require_once('bd/conexion.php');
	require_once('models/entities/usuarios.entity.php');
	
	class UsuariosModel{
		
		private $db;
		
		public function __CONSTRUCT(){

			
		}
		
		public function listarUsuarios(){
			
			$db=new Conexion_db();
			
			$result=array();
					
			//Llamada al procedimiento almacenado
			$sql="call listar_usuarios();";
			
			$stmt=$db->__GET('_db')->prepare($sql);
			
			if($stmt->execute()){

				foreach($stmt->fetchAll(PDO::FETCH_OBJ) as $fila){

					$user=new Usuario();			
					
					$user->__SET('id_usuario', $fila->id_usuario);
					$user->__SET('nombre', $fila->nombre);
					$user->__SET('apellido', $fila->apellido);
					$user->__SET('id_tipo_usuario', $fila->id_tipo_usuario);
					$user->__SET('usuario', $fila->usuario);
					$user->__SET('estado', $fila->estado);
					$user->__SET('contrasena', $fila->contrasena);
														
					$result[]=$user;
				}            
			}        
			
			return $result;
			
			
		}
		//Resive un objeto de tipo usuario 
		public function login($usuario){
			
			

			
			$db=new Conexion_db();
			
			$usr=null;
			
			//Los objetos nos se pueden pasar por referencia
			$contrasena=$usuario->__GET('contrasena');
			$usuario=$usuario->__GET('usuario');
			
				
			
			$sql="call login(:usuario,:contrasena)";
			
			$stmt=$db->__GET('_db')->prepare($sql);
			$stmt->bindParam('usuario',$usuario);
			$stmt->bindParam('contrasena',$contrasena);
			
			
			if($stmt->execute()){
			
				foreach($stmt->fetchAll(PDO::FETCH_OBJ) as $fila){
			
					$usr=new Usuario();
	
					$usr->__SET('id_usuario', $fila->id_usuario);
					$usr->__SET('nombre', $fila->nombre);
					$usr->__SET('apellido', $fila->apellido);
					$usr->__SET('estado', $fila->estado);
					$usr->__SET('usuario',$fila->usuario);
					$usr->__SET('contrasena',$fila->contrasena);
					$usr->__SET('id_tipo_usuario', $fila->id_tipo_usuario);
										
				}            
			}
			
			

			return $usr;
		
		}
		
		public function agregarUsuario(){
			
			
			
		}
		
		public function eliminarUsuario($usuario){
			
			
		}
		
		public function editarUsuario($usuario){
			
			
			
		}
		
	}
	

?><file_sep>/bd/conexion.php
<?php
require("parametros.php");
class Conexion_db
{
	private $_db;

	public function __GET($k){ return $this->$k; }
	
    public function __CONSTRUCT()
	{
		
		$dsn = "mysql:dbname=".DB_NAME.";host=".DB_HOST;
		$usuario = DB_USER;
		$contraseña = <PASSWORD>;

			try {
				$this->_db = new PDO($dsn, $usuario, $contraseña);
			
			}
			catch (PDOException $e) {
				
				echo 'Falló la conexión: ' . $e->getMessage();
			}				
	}
	
}


?>
<file_sep>/models/entities/usuarios.entity.php
<?php

	class Usuario{
		
		private $id_usuario;
		private $id_tipo_usuario;
		private $nombre;
		private $apellido;
		private $usuario;
		private $contrasena;
		private $estado;
				
		public function __GET($k){ return $this->$k; }
		public function __SET($k, $v){ return $this->$k = $v; }
		
		//Funcion para retornar json con las propiedades (por problema de la visibilidad no se puede usar 
		//directamente json_encode()
		public function toJSON(){
			$json = array(
				'id_usuario'=>$this->__GET('id_usuario'),
				'usuario' => $this->__GET('usuario'),
				'contrasena' => $this->__GET('contrasena'),
				'estado' => $this->__GET('estado'),
				'nombre' => $this->__GET('nombre'),
				'apellido' => $this->__GET('apellido'),
				'id_tipo_usuario'=>$this->__GET('id_tipo_usuario')
			);
		
			return json_encode($json);
		}
				
	}


?>