Crear un Sistema de Inventario y Ventas http://evilnapsis.com MODULO DE USUARIOS PARTE 1 Voy a dividir el modulo de usuario en 2 partes, en esta primera parte habilitaremos el modulo de usuarios pero la creacion sera desde codigo SQL, en la segunda parte habilitaremos una vista intuitiva para que el usuario pueda administrar usuarios sin tocar codigo SQL. Vamos a empezar con el desarrollo de nuestro sistema de inventario, lo pimero que haremos sera habilitar a los usuarios. Habilitar sesiones Basta ir al archivo legobox/index.php y agregar la linea session_start(); en la segunda linea. Modelo Localizacion: inventario/core/modules/index/model/UserData.php [code language="php"] class UserData { public static $tablename = "user"; public function UserData(){ $this->name = ""; $this->lastname = ""; $this->username = ""; $this->password = ""; $this->is_active = "0"; $this->created_at = "NOW()"; } public function add(){ $sql = "insert into ".self::$tablename." (name,lastname,username,password,is_active,is_admin,created_at) "; $sql .= "value (\"$this->name\",\"$this->lastname\",\"$this->username\",\"$this>password\",$this->is_active,$this->is_admin,$this->created_at)"; 1 Crear un Sistema de Inventario y Ventas http://evilnapsis.com Executor::doit($sql); } public static function delById($id){ $sql = "delete from ".self::$tablename." where id=$id"; Executor::doit($sql); } public function del(){ $sql = "delete from ".self::$tablename." where id=$this->id"; Executor::doit($sql); } public function update(){ $sql = "update ".self::$tablename." set name=\"$this->name\",lastname=\"$this>lastname\",username=\"$this->username\",password=\"$this>password\",is_active=$this->is_active,is_admin=$this->is_admin where id=$this>id"; Executor::doit($sql); } public static function getById($id){ $sql = "select * from ".self::$tablename." where id=$id"; $query = Executor::doit($sql); return Model::one($query[0],new UserData()); } public static function getAll(){ $sql = "select * from ".self::$tablename." order by created_at desc"; $query = Executor::doit($sql); return Model::many($query[0],new UserData()); } } [/code] 2 Crear un Sistema de Inventario y Ventas http://evilnapsis.com El modelo de usuarios contiene las funciones para agregar, actualizar, eliminar, mostrar varios o un usuario. Layout Localizacion: inventario/core/modules/index/view/layout.php El layout contiene el codigo que incluye los archivos css, javascript y el menu principal, ademas dentro del layout se valida el usuario para mostrar el login o mostrar una vista especifica basandose en si el usuario inicio o no sesion. Codigo: [code language="php"] <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta charset="utf8"> <title>.: Inventario :.</title> <link rel="stylesheet" type="text/css" href="res/bootstrap/css/bootstrap.min.css"> <script src="res/jquery.min.js"></script> </head> <body > <?php if(Session::getUID()!=""):?> <header class="navbar navbar-default navbar-fixed-top" role="banner"> <div class="container"> <div class="navbar-header"> <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bsnavbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="index.php">Inventario </a> </div> 3 Crear un Sistema de Inventario y Ventas http://evilnapsis.com <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation"> <?php if(Session::getUID()!=""):?> <ul class="nav navbar-nav"> <li><a href="index.php?view=home"><i class="glyphicon glyphicon-home"></i> Inicio</a></li> <li><a href="index.php?view=sell"><i class="glyphicon glyphicon-usd"></i> Vender</a></li> <li><a href="index.php?view=products"><i class="glyphicon glyphicon-glass"></i> Productos</a></li> <li><a href="index.php?view=sells"><i class="glyphicon glyphicon-shoppingcart"></i> Ventas</a></li> <li><a href="index.php?view=inventary"><i class="glyphicon glyphicon-stats"></i> Inventario</a></li> </ul> <?php endif; ?> <?php if(Session::getUID()!=""):?> <?php $u=null; if(Session::getUID()!=""){ $u = UserData::getById(Session::getUID()); $user = $u->name." ".$u->lastname; }?> <ul class="nav navbar-nav navbar-right"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> <?php echo $user; ?> <b class="caret"></b> </a> <ul class="dropdown-menu"> <li><a href="index.php?view=configuration">Configuracion</a></li> <li><a href="index.php?action=processlogout">Salir</a></li> </ul> </li> </ul> 4 Crear un Sistema de Inventario y Ventas http://evilnapsis.com <?php else:?> <?php endif; ?> </nav> </div> </header><br><br><br> <div class='container'> <div class="row"> <div class="col-md-12"> <?php View::load("login"); ?> </div> </div> </div> <?php else: ?> <?php View::load("login"); ?> <?php endif; ?> <script src="res/bootstrap/js/bootstrap.min.js"></script> </body> </html> [/code] Vista de Login Localizacion: inventario/core/modules/index/view/login/widget-default.php A continuacion el formulario de login que se muestra para que el usuario se autentifique. 5 Crear un Sistema de Inventario y Ventas http://evilnapsis.com Codigo: [code language="php"] <br><br><br><br><br> <div class="row vertical-offset-100"> <div class="col-md-4 col-md-offset-4"> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">Iniciar Sesion</h3> </div> <div class="panel-body"> <form accept-charset="UTF-8" role="form" method="post" action="index.php?action=processlogin"> <fieldset> <div class="form-group"> <input class="form-control" placeholder="Usuario" name="username" type="text"> </div> <div class="form-group"> <input class="form-control" placeholder="Contraseña" name="password" 6 Crear un Sistema de Inventario y Ventas http://evilnapsis.com type="password" value=""> </div> <input class="btn btn-lg btn-primary btn-block" type="submit" value="Iniciar Sesion"> </fieldset> </form> </div> </div> </div> </div> <br><br><br><br><br><br><br><br><br><br><br><br> [/code] Utilizo un monton de brs para centrar el formulario, al hacer submit en el formulario se ejecutara el action process login. Action processlogin Localizacion: inventario/core/modules/index/action/processlogin/action-default.php El action process login obtiene los datos provenientes del formulario de login, username y password, y busca coincidencias en la base de datos, si hay una concidencia entonces se guarda el id del usuario es la variable de sesion $_SESSION["user_id"] y se redirige a la pagina del inicio del usuario, en caso contrario se redirige al formulario de login. Codigo: [code language="php"] <?php if(Session::getUID()=="") { $user = $_POST['username']; $pass = sha1(md5($_POST['password'])); $base = new Database(); $con = $base->connect(); $sql = "select * from user where username= \"".$user."\" and password= \"".$pass."\""; 7 Crear un Sistema de Inventario y Ventas http://evilnapsis.com $query = $con->query($sql); $found = false; $userid = null; while($r = $query->fetch_array()){ $found = true ; $userid = $r['id']; } if($found==true) { $_SESSION['user_id']=$userid ; print "Cargando ... $user"; print "<script>window.location='index.php?view=home';</script>"; }else { print "<script>window.location='./';</script>"; } }else{ print "<script>window.location='index.php?view=home';</script>"; } ?> [/code] Vista Home Localizacion: inventario/core/modules/index/view/home/widget-default.php Cuando el usuario acceda exitosamente con su usuario y password se dirijira a la vista Home, que estara reservada para lo que el usuario guste, por ahora estara vacia. 8 Crear un Sistema de Inventario y Ventas http://evilnapsis.com Podemos ver que en el menu del usuario administrador hay dos opciones, Configuracion y Salir, la configuracion la veremos en la segunda parte, salir sirve para cerrar la sesion actual y regregar al formulario de login. La opcion salir nos redirige al action processlogout. Action processlogout Localizacion: inventario/core/modules/index/action/processlogout/action-default.php El action processlogout destruye la sesion y redirije al formulario de login. Codigo: [code language="php"] if(isset($_SESSION['user_id'])){ unset($_SESSION['user_id']); } 9 Crear un Sistema de Inventario y Ventas http://evilnapsis.com session_destroy(); print "<script>window.location='./';</script>"; [/code] Conclusion Ya hemos habilitado el login y logout para el usuario, ahora solo debemos entrar con los valores: Username: admin Password: admin 10