diff --git a/assets/php/dao.php b/assets/php/dao.php new file mode 100644 index 0000000..840c91a --- /dev/null +++ b/assets/php/dao.php @@ -0,0 +1,36 @@ +mysqli) { + $this->mysqli = new mysqli(self::_SERVERNAME, self::_USERNAME, + self::_PASSWORD, $bd_name); + } + // echo "Conexión a la BD, satisfactoria."; + } catch (Exception $e){ + echo "Error de conexión a la BD: ". mysqli_connect_error(); + exit(); + } + + /* ... */ + } + + //Destructor: + public function __destruct(){ + $this->mysqli->close(); + } + + //Methods: + } +?> \ No newline at end of file diff --git a/assets/php/form.php b/assets/php/form.php new file mode 100644 index 0000000..28e615f --- /dev/null +++ b/assets/php/form.php @@ -0,0 +1,238 @@ +formId = $formId; + + $opcionesPorDefecto = array( 'ajax' => false, 'action' => null, 'class' => null, 'enctype' => null ); + $opciones = array_merge($opcionesPorDefecto, $opciones); + + $this->ajax = $opciones['ajax']; + $this->action = $opciones['action']; + $this->classAtt = $opciones['class']; + $this->enctype = $opciones['enctype']; + + if ( !$this->action ) { + $this->action = $_SERVER['PHP_SELF']; + } + } + + public function gestiona() { + + if ( ! $this->formularioEnviado($_POST) ) { + echo $this->generaFormulario(); + } else { + // Valida el token CSRF si es necesario (hay un token en la sesión asociada al formulario) + $tokenRecibido = isset($_POST['CSRFToken']) ? $_POST['CSRFToken'] : FALSE; + + if ( ($errores = $this->csrfguard_ValidateToken($this->formId, $tokenRecibido)) !== TRUE ) { + if ( ! $this->ajax ) { + echo $this->generaFormulario($errores, $_POST); + } else { + echo $this->generaHtmlErrores($errores); + } + } else { + $result = $this->procesaFormulario($_POST); + if ( is_array($result) ) { + // Error al procesar el formulario, volvemos a mostrarlo + if ( ! $this->ajax ) { + echo $this->generaFormulario($result, $_POST); + } else { + echo $this->generaHtmlErrores($result); + } + } else { + if ( ! $this->ajax ) { + header('Location: '.$result); + } else { + echo $result; + } + } + } + } + } + + /** + * Devuelve un string con el HTML necesario para presentar los campos del formulario. Es necesario asegurarse que como parte del envío se envía un parámetro con nombre (i.e. utilizado como valor del atributo name del botón de envío del formulario). + */ + protected function generaCamposFormulario ($datos) { + return ''; + } + + /** + * Procesa los datos del formulario. + */ + protected function procesaFormulario($datos) { + + } + + /** + * Función que verifica si el usuario ha enviado el formulario. Comprueba si existe el parámetro $formId en $params. + * + * @param array $params Array que contiene los datos recibidos en el envío formulario. + * + * @return boolean Devuelve TRUE si $formId existe como clave en $params + */ + private function formularioEnviado(&$params) { + return isset($params['action']) && $params['action'] == $this->formId; + } + + /** + * Función que genera el HTML necesario para el formulario. + * + * + * @param array $errores (opcional) Array con los mensajes de error de validación y/o procesamiento del formulario. + * + * @param array $datos (opcional) Array con los valores por defecto de los campos del formulario. + */ + private function generaFormulario($errores = array(), &$datos = array()) { + + $html= $this->generaListaErrores($errores); + + $html .= '
classAtt ) { + $html .= ' class="'.$this->classAtt.'"'; + } + if ( $this->enctype ) { + $html .= ' enctype="'.$this->enctype.'"'; + } + $html .=' >'; + + // Se genera el token CSRF si el usuario no solicita explícitamente lo contrario. + if ( ! $this->classAtt || strpos($this->classAtt, 'nocsrf') === false ) { + $tokenValue = $this->csrfguard_GenerateToken($this->formId); + $html .= ''; + } + + $html .= ''; + + $html .= $this->generaCamposFormulario($datos); + $html .= '
'; + return $html; + } + + private function generaListaErrores($errores) { + $html=''; + $numErrores = count($errores); + if ( $numErrores == 1 ) { + $html .= ""; + } else if ( $numErrores > 1 ) { + $html .= ""; + } + return $html; + } + + private function csrfguard_GenerateToken($formId) { + if ( ! isset($_SESSION) ) { + throw new Exception('La sesión del usuario no está definida.'); + } + + if ( function_exists('hash_algos') && in_array('sha512', hash_algos()) ) { + $token = hash('sha512', mt_rand(0, mt_getrandmax())); + } else { + $token=' '; + for ($i=0;$i<128;++$i) { + $r=mt_rand(0,35); + if ($r<26){ + $c=chr(ord('a')+$r); + } else{ + $c=chr(ord('0')+$r-26); + } + $token.=$c; + } + } + + $_SESSION[$formId.'_'.self::CSRF_PARAM]=$token; + + return $token; + } + + private function csrfguard_ValidateToken($formId, $tokenRecibido) { + if ( ! isset($_SESSION) ) { + throw new Exception('La sesión del usuario no está definida.'); + } + + $result = TRUE; + + if ( isset($_SESSION[$formId.'_'.self::CSRF_PARAM]) ) { + if ( $_SESSION[$formId.'_'.self::CSRF_PARAM] !== $tokenRecibido ) { + $result = array(); + $result[] = 'Has enviado el formulario dos veces'; + } + $_SESSION[$formId.'_'.self::CSRF_PARAM] = ' '; + unset($_SESSION[$formId.'_'.self::CSRF_PARAM]); + } else { + $result = array(); + $result[] = 'Formulario no válido'; + } + return $result; + } +} + +/* +class Formulario { + + private $formId; + private $action; + private $classAtt; + private $enctype; + + public function __construct($formId, $opciones = array() ) { + $this->formId = $formId; + $opcionesPorDefecto = array( 'ajax' => false, 'action' => null, 'class' => null, + 'enctype' => null ); + $opciones = array_merge($opcionesPorDefecto, $opciones); + + $this->ajax = $opciones['ajax']; + $this->action = $opciones['action']; + $this->classAtt = $opciones['class']; + $this->enctype = $opciones['enctype']; + + if (!$this->action) { + $app = Aplicacion::getSingleton(); + $this->action = htmlspecialchars($_SERVER['REQUEST_URI']); + $this->action = $app->resuelve($this->action); + } + } +} +*/ +?> \ No newline at end of file diff --git a/assets/php/template.php b/assets/php/template.php new file mode 100644 index 0000000..5801e38 --- /dev/null +++ b/assets/php/template.php @@ -0,0 +1,176 @@ +page = $_SERVER['PHP_SELF']; //Page that instantiates the template. + $this->prefix = '../'; //Default prefix. + + $this->set_page_prefix(); //Assigns the name and prefix of the page. + + $this->session = 'Iniciar Sesión'; //Default, the session has not started. + $this->session_route = 'login/'; //Default, the session has not started. + $this->panel = ''; //Default, the session has not started. + $this->user_route = 'panel_user/'; //Default, the type of client is user. + } + + //Methods: + + //Assigns the name and prefix of the page: + private function set_page_prefix() { + switch(true){ + case strpos($this->page, 'panel_user'): $this->page = 'Panel de Usuario'; break; + case strpos($this->page, 'panel_manager'): $this->page = 'Panel de Gerente'; break; + case strpos($this->page, 'panel_admin'): $this->page = 'Panel de Administrador'; break; + case strpos($this->page, 'login'): $this->page = 'Acceso'; break; + case strpos($this->page, 'logout'): $this->page = 'Cerrar Sesión'; break; + case strpos($this->page, 'showtimes'): $this->page = 'Cartelera'; break; + case strpos($this->page, 'cinemas'): $this->page = 'Nuestros Cines'; break; + case strpos($this->page, 'about_us'): $this->page = 'Sobre FDI-Cines'; $this->prefix = '../../'; break; + case strpos($this->page, 'terms'): $this->page = 'Términos y Condiciones'; $this->prefix = '../../'; break; + case strpos($this->page, 'detalles'): $this->page = 'Detalles'; $this->prefix = '../../'; break; + case strpos($this->page, 'bocetos'): $this->page = 'Bocetos'; $this->prefix = '../../'; break; + case strpos($this->page, 'miembros'): $this->page = 'Miembros'; $this->prefix = '../../'; break; + case strpos($this->page, 'planificacion'): $this->page = 'Planificación'; $this->prefix = '../../'; break; + case strpos($this->page, 'contacto'): $this->page = 'Contacto'; break; + default: $this->page = 'FDI-Cines'; $this->prefix = './'; break; + } + } + + //Returns page name: + function get_page(){ + return $this->page; + } + + //Returns page prefix: + function get_prefix(){ + return $this->prefix; + } + + //Print generic Head: + function print_head(){ + $page = $this->page; + $prefix = $this->prefix; + + echo" + CompluCine | {$page} + + + + + \n"; + } + + //Print generic Header: + function print_header(){ + $page = $this->page; + $prefix = $this->prefix; + $session = $this->session; + $session_route =$this->session_route; + $user_route = $this->user_route; + $panel =$this->panel; + + if(isset($_SESSION["nombre"])){ + if($_SESSION["rol"] == "admin") $user_route = 'panel_admin/'; + else if($_SESSION["rol"] == "manager") $user_route = 'panel_manager/'; + $panel = "
  • Mi Panel
  • "; + $session = 'Cerrar Sesión'; + $session_route = 'logout/'; + } + + echo"
    + favicon CompluCine | {$page} + +
    \n"; + } + + //Print generic subHeader: + function print_subheader(){ + //$page = $this->page; + $prefix = $this->prefix; + + echo"
    + +
    \n"; + } + + //Print generic Main: + function print_main(){ + $page = $this->page; + $prefix = $this->prefix; + + /* SubHeader on Main */ + $sub_header = ''; + if(strpos($_SERVER['PHP_SELF'], 'fdicines')){ + $sub_header = " +
    + +
    \n"; + } + + /* MAIN */ + echo"
    +
    logo_FDI-Cines
    + {$sub_header} +

    {$page}

    +
    +
    \n"; + } + + //Print generic Footer: + function print_footer(){ + //$page = $this->page; + $prefix = $this->prefix; + + echo"\n"; + } + + } +?> \ No newline at end of file