Black - White -

Web de ranking de videojuegos

Javier Oltra - Diego Rodríguez - Sergio Serrano

Índice

1-Introducción
3-Interfaces
4-Cliente

¿Qué es

es...

Web de ranking simple de videojuegos.

¿Por qué?

Existen otras webs con densos análisis, detallados y con valoraciones complejas.

Nosotros ofrecemos sencillez.

Objetivo

Primero

Responder de manera simple una pregunta simple.

¿Es divertido?

¿Merece la pena?

Segundo

Crear un medio de opinion pública lejos de los "lobbys" influyentes del periodismo de videojuegos.

¿Qué me ofrece?

Información básica acerca de un videojuego

Contribuir con tu opinión.

¿Qué puedo hacer?

  • Navegar sin compromiso
  • Resgistrarme y participar
  • Personalizar mi perfil
  • Administración
Usuarios anónimos
  • Navegar
  • Consultar información
  • Registrarse
Usuarios registrados
  • Votar
  • Cambiar avatar
Usuarios administradores
  • Acciones CRUD

Muestras

Pastillas

Perfil de juego

Perfil de usuario

Panel de administración

Modal

Estructura de la Base de Datos

Entidades

Juegos Plataformas
Sagas Usuarios

Diagrama Entidad-Relación

Diagrama ER

Esquema de la Base de Datos

Esquema BD

Arquitectura

MVC

Modelo - Vista - Controlador

Esquema MVC
UML MVc

Configuración


$config = array();
...
$config['db_server'] = 'localhost';
...
$config['t_games'] = 'games';
...
$config['server_root'] = '/';
					

Estructura de directorios


.
├── ...
├── classes
├── controllers
│   ├── controller1.php
│   ├── ...
│   └── controllerN.php
├── ...
├── functions
├── ...
└── templates
     └── controller1
         ├── template1.html
         └── ...
...
                        

Construcción y ejecución del script

Autoinclude

index.php


//Include all needed files
include_once './autoinclude.php';
                        

autoinclude.php


//Include all the controllers
foreach (glob("./controllers/*.php") as $filename)
{
    include_once $filename;
}
                        

Enrutamiento

Cómo funciona

URL

Original

http://isthisgamefun.com/games/top/page/2

Resuelta

http://isthisgamefun.com/index.php?section=games&action=top&args=page/2

URL

.htaccess


RewriteRule ^(\w+)/(\w+)/((\w+/?)+)/?$ index.php?section=$1&action=$2&args=$3 [L]
                        

index.php


$_GET["section"] //string - P.E. "games"
$_GET["action"] //string - P.E. "top"
$_GET["args"] //string - P.E. "page/2"
                        

//Set the router
$router = new Router($section, $action, $args);
                        
UML MVC

Ejecución


//If the class exist
if (class_exists($this->controller)) {
    //Invoke the new class
    $c = new $this->controller();
    //If the class has the action method
    if (method_exists($c, $this->action)) {
        //Invoke the method
        return $c->{$this->action}($this->args);
    } else {
        //Manage "Method doesn't exists"
    }
} else {
    //Manage "Class doesn't exists"
}
                        
UML Enrutación

Seguridad

¿Cómo se evita la ejecución de clases y funciones sensibles?

Utilizando el constructor


public function __construct() {
        global $config;
        parent::__construct();
        if (!$this->isAdmin()) {
            //Manage "not allowed"
        }
    }
                        

Utilizando visibilidad


protected function isAdmin() {...}

private function build() {...}
                        

Generan excepciones controladas


Interfaz

Bootstrap

¿Qué es?

Motivos

  • Agiliza el desarrollo
  • Es un "estandar"

Colores

Secciones

Página principal

Pastillas

Detalles

Perfil usuario

Panel de administación

Modal

Cliente

jQuery

Qué es jQuery

Descripción

Cómo incluir jQuery



Usos

Votación

  1. El usuario hace clic
  2. El script recaba la información y la envía al servidor
  3. Se mantiene a la espera de respuesta
  4. Actua en función de la respuesta del servidor

Cargar mas juegos

  1. El usuario solicita mas juegos
  2. El script envia una petición al servidor
  3. Procesa el JSON con los datos
  4. Añade nuevos nodos al DOM

Validaciones

Utilizamos jQuery para validar los campos del formulario de registro.

Impedimos el envio del formulario mientras haya campos erroneos.

Además gestionamos alertas visuales de las validaciones.

Comprobar Nick

Hacemos consultas AJAX al servidor para comprobar la disponibilidad de un Nick.

Si no esta disponible, el campo no es valido.

Varios

  • Menú de navegacion pegajoso
  • Despliegue de paneles
  • Checkboxes personalizados

Planificación

Establecimos una estimación de tiempo de 30 horas por miembro (90h).

Esa estimación no se cumplió.

Diagrama de Grantt Estimado

90h

Diagrama de Grantt inicial

Diagrama de Grantt Final

110h

Diagrama de Grantt final

Recursos utilizados

Servidor

Base
  • PHP 5.5
  • MySQL 5.6
  • Apache 2.2
Frameworks
  • Medoo
  • Kint
  • XDebug

Interfaces

Base
  • HTML 5
  • CSS 3
Frameworks
  • Bootstrap 3
  •  

Cliente

Base
  • Javascript
Frameworks
  • jQuery

Funcionalidades descartadas

  • Voto a sagas
  • Juegos con multiples sagas
  • Thumbnails con PHP
  • Perfil usuario con mas datos
  • Amigos
  • Proponer juegos

Mejoras futuras

  • Implementar las funcionalidades descartadas
  • Extender la aplicación a otros ámbitos

Conclusiones

Hemos aprendido lo importante que son

  • Metodología
  • Organización
  • Colaboración
  • Investigación
  • Dedicación

Fin