42 Commits
v2.0 ... v1.0

Author SHA1 Message Date
05107dae8f Cambios finales 2021-03-17 14:30:18 +01:00
b754c08b15 Cambios finales 2021-03-17 12:38:14 +01:00
24bfe4c0fc Improvements in the Responsive Layout 2021-03-17 11:01:05 +01:00
00cde61b10 Update index.html 2021-03-16 21:22:47 +01:00
2e897ed52d Add files via upload 2021-03-16 20:04:44 +01:00
35ab70f26a Delete old_index.html 2021-03-16 19:42:27 +01:00
74f77f0034 Cambios en bocetos 2021-03-16 19:41:58 +01:00
7e95cb209d Delete inicio.png 2021-03-16 18:48:57 +01:00
2c66e06b94 Add files via upload 2021-03-16 18:34:31 +01:00
299683874e Add files via upload 2021-03-16 18:33:47 +01:00
d2d96d53a8 Add files via upload 2021-03-16 10:56:28 +01:00
b6e5ebfd49 Add files via upload 2021-03-15 16:28:04 +01:00
b46b3f8e18 Rename to_do.html to old_index.html 2021-03-15 16:16:14 +01:00
fd8feb20bd Add files via upload 2021-03-15 16:15:55 +01:00
d7de4cd8b2 Delete plan.css 2021-03-15 12:14:11 +01:00
174cebf561 Delete Pagar.png 2021-03-15 12:13:44 +01:00
4b55c55e12 Add files via upload 2021-03-15 12:12:06 +01:00
22485e8647 Add files via upload 2021-03-15 12:11:51 +01:00
3de57fc285 Actualizado detalles en dos columnas
Hay un descuadre de como 2 pixeles entre el final de cada columna.
2021-03-13 13:11:19 +01:00
9c51b93d22 Add files via upload 2021-03-13 12:26:33 +01:00
13d54007ed Delete seleccion_de_horario.png 2021-03-13 12:19:56 +01:00
bca0c57a3b Add files via upload 2021-03-13 12:19:07 +01:00
373317643e Add files via upload 2021-03-11 10:52:26 +01:00
44b82a3e96 Optimizacion del codigo de main.css 2021-03-11 10:49:50 +01:00
a3504e426b Add files via upload
Hoja de estilos para planificacion
2021-03-11 10:47:41 +01:00
3f1a3ab4f5 Add files via upload
Planificación. Falta por incluir el reparto de trabajo a los integrantes.
2021-03-11 10:46:11 +01:00
96cd3271e7 Añadido la pagina de detalles 2021-03-11 10:46:05 +01:00
a40cb575f9 Cambio a h2
Añadido un estilo distinto para los titulos h2
2021-03-11 10:05:20 +01:00
f06badc539 Add files via upload 2021-03-11 09:53:32 +01:00
e4e8d4075f Add files via upload 2021-03-11 09:51:32 +01:00
bb9fad9192 Add files via upload 2021-03-11 09:45:13 +01:00
0bdc670cab Add files via upload 2021-03-11 09:44:55 +01:00
9ff8331917 Delete bocetos directory 2021-03-11 09:44:46 +01:00
5dce290617 Add files via upload
Añadiendo el boceto de contacto y el mapa de asientos
2021-03-11 09:33:29 +01:00
3b27a0549d Add files via upload 2021-03-09 18:27:22 +01:00
ed3e0a32d4 Add files via upload 2021-03-09 12:29:52 +01:00
1476ad23ed Add files via upload 2021-03-08 20:32:13 +01:00
2ec8d15cf4 Add files via upload 2021-03-08 19:26:51 +01:00
b818ed03cc Update .gitignore 2021-03-08 19:08:22 +01:00
abd310582b Delete pro.css 2021-03-08 19:04:28 +01:00
f40c8ef494 Práctica 1 2021-03-08 19:01:14 +01:00
0d91c6eaad Update README.md 2021-02-16 16:35:52 +01:00
95 changed files with 324 additions and 4849 deletions

1
.gitignore vendored
View File

@ -22,3 +22,4 @@ node_modules/
*.sql
*.sqlite
.vscode/
.vs/

Binary file not shown.

BIN
Practica1-Enunciado.pdf Normal file

Binary file not shown.

Binary file not shown.

View File

@ -1,7 +1,7 @@
# SW 💻
Repositorio para la asignatura de Sistemas Web de Ingeniería de Computadores
***
## Versión 2.0 (Segunda entrega)
## Versión 1.0 (Primera entrega)
***
## Licencia 📄
Educational Community License v2.0 (ECL-2.0).

View File

@ -1,7 +1,6 @@
/* Basic */
* {
box-sizing: border-box;
margin: 0px;
}
/* Headers */
@ -28,30 +27,6 @@ h4 {
font-size: 75%;
}
/* Buttons */
button, .button.large {
display: inline-block;
margin: 10px;
width: 150px;
height: 30px;
padding: 5px 10px;
background-color :#1f2c3d;
border: 1px solid #d3ebff;
text-align: center;
color :#d3ebff;
font-weight: bold;
position: relative;
}
.button.large {
width: 95%;
}
button:hover, .button:hover {
cursor: pointer;
background-color:#d3ebff;
color:#1f2c3d;
border-color: #1f2c3d;
}
/* Header */
.header {
background-color: #1f2c3d;
@ -63,58 +38,12 @@ button:hover, .button:hover {
.header img {
width: 11px;
}
/* Header Menu */
.menu {
margin-top: 10px;
text-align: right;
font-size: 15px;
background-color: #1f2c3d;
color: #dadada;
text-align: right;
font-size: 15px;
}
.menu nav a{
text-decoration: none;
color: inherit;
font-size: 15px;
}
.menu nav li{
display: inline-block;
width: 150px;
height: 30px;
padding: 5px 10px;
background-color :#1f2c3d;
border: 1px solid #d3ebff;
text-align: center;
color :#d3ebff;
position: relative;
}
.menu nav li:hover{
background-color:#d3ebff;
color:#1f2c3d;
border-color: #1f2c3d;
}
.menu nav li>ul{
display: none;
}
.menu nav li:hover>ul{
display: block;
position: absolute;
top: 29px;
right: -1px;
}
/* Sub Header */
.header.sub {
margin-bottom: 20px;
padding: 5px;
display: flex;
flex-direction: row;
text-align: center;
justify-content: center;
font-size: 20px;
}
.header.sub .menu {
margin-top: 0px;
text-align: center;
font-size: 15px;
}
/* Paragraphs */
p {
@ -166,29 +95,10 @@ table a{
font-weight: 600;
padding: 0 0.85em 0.85em 0.85em;
}
table thead, table tfoot {
table thead {
border-bottom: solid 2px #1f2c3d;
}
table.alt {
border-collapse: separate;
}
table.alt tbody tr td {
border: solid 1px #1f2c3d;
border-left-width: 0;
border-top-width: 0;
}
table.alt tbody tr td:first-child {
border-left-width: 1px;
}
table.alt tbody tr:first-child td {
border-top-width: 1px;
}
table.alt thead, table.alt tfoot {
border-top: 0;
}
/* Main */
@ -220,16 +130,6 @@ table a{
width: 33.33%;
}
.column.middle .image img, .column.side .image img{
border-radius: 4px;
border: 0;
position: relative;
border-radius: 4px;
display: block;
margin: 0 0 3rem 0;
width: 100%;
}
/* Left column */
.column.left {
width: 50%;
@ -287,7 +187,7 @@ table a{
.code a {
text-decoration: underline;
}
.code ul, .code ol {
.code ul {
color: #dadada;
}
.code img{
@ -311,26 +211,17 @@ table a{
.code.plan {
height: 1150px;
}
.code.info{
text-align: center;
height: 250px;
}
.code.showtimes{
height: 600px;
}
/* BlockQuotes */
.blockquote {
border-left: solid 4px #dadada;
margin: 0 0 2em 0;
margin-top: 10px;
padding: 0.5em 0 0.5em 2em;
}
.blockquote.bio {
height: 250px;
}
/* Sketches */
.sketches {
text-align: center;
@ -370,43 +261,6 @@ table a{
}
}
/* Text Box */
.textbox {
color: #d3ebff;
padding: 15px 15px 10px 15px;
margin: 10px 0 10px;
overflow: hidden;
border-radius: 25px 0px 25px 0px;
border: 2px solid #d3ebff;
}
.textbox h1, .textbox h2, .textbox h3 {
color: #d3ebff;
text-align: left;
}
/* Galery */
.galery {
box-sizing: border-box;
}
.galery .columna {
margin-top: 10px;
float: left;
width: 50%;
padding-right: 10px;
}
.galery .fila::after {
content: "";
clear: both;
display: table;
}
.galery .image img {
width: 100%;
}
.galery .image.main img {
width: 100%;
}
/* Percentage bar */
.bar {
height: 15px;
@ -414,7 +268,6 @@ table a{
font-size: 13px;
font-weight: bold;
width: 100%;
color: #00020f;
background-color: #d3ebff;
text-align: right;
}
@ -440,34 +293,6 @@ table a{
padding-right: 15px;
}
/* Sidebars */
.sidebar.left {
padding: 5px;
margin-top: 10px;
margin-bottom: 10px;
float: left;
width: 300px;
height: 370PX;
color: #d3ebff;
background-color: #1f2c3d;
}
.sidebar.left a {
color: #d3ebff;
font-weight: bold;
text-decoration: none;
}
.sidebar.left a:hover {
color: #d3ebff;
text-decoration: underline;
}
/* Responsibe sidebar */
@media (max-width: 1000px) {
.sidebar.left {
width: 100%;
height: 100%;
}
}
/* Form */
form {
@ -507,12 +332,6 @@ textarea {
.verify {
font-size: 11px;
}
.verify a {
color: #1f2c3d;
}
.verify a:hover {
color: rgb(138, 150, 32);
}
#submit {
width: 100%;
@ -550,21 +369,12 @@ textarea {
/* Footer */
footer {
text-align: left;
.footer {
background-color: #1f2c3d;
color: #dadada;
padding: 20px;
padding: 25px;
margin-top: 100px;
width: 100%;
height: 80px;
}
.footer {
text-align: right;
}
@media (max-width: 500px) {
footer {
width: 100%;
height: 100%;
}
}

View File

@ -1,3 +0,0 @@
<?php
header('Location: ../');
?>

View File

@ -1,9 +0,0 @@
<?php
//Start session:
session_start();
//HTML template:
require_once('template.php');
$template = new Template();
$prefix = $template->get_prefix();
?>

View File

@ -1,37 +0,0 @@
<?php
// TO-DO: Completar
class DAO {
//Constants:
private const _SERVERNAME = "";
private const _USERNAME = "";
private const _PASSWORD = "";
private const _BD = "";
//Atributes:
public $mysqli;
//Constructor:
public function __construct($bd_name){
if($bd_name == null) $bd_name = self::_BD;
try{
if (!$this->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:
}
?>

View File

@ -1,238 +0,0 @@
<?php
class Form {
/**
* Sufijo para el nombre del parámetro de la sesión del usuario donde se almacena el token CSRF.
*/
const CSRF_PARAM = 'csrf';
/**
* Cadena utilizada como valor del atributo "id" de la etiqueta &lt;form&gt; asociada al formulario y como parámetro a comprobar para verificar que el usuario ha enviado el formulario.
*/
private $formId;
private $ajax;
/**
* URL asociada al atributo "action" de la etiqueta &lt;form&gt; del fomrulario y que procesará el envío del formulario.
*/
private $action;
/**
* Valor del atributo "class" de la etiqueta &lt;form&gt; asociada al formulario. Si este parámetro incluye la cadena "nocsrf" no se generá el token CSRF para este formulario.
*/
private $classAtt;
/**
* Valor del parámetro enctype del formulario.
*/
private $enctype;
/**
* Se encarga de orquestar todo el proceso de creación y procesamiento de un formulario web.
*
* @param string $formId Cadena utilizada como valor del atributo "id" de la etiqueta &lt;form&gt; asociada al formulario y como parámetro a comprobar para verificar que el usuario ha enviado el formulario.
*
* @param string $action (opcional) URL asociada al atributo "action" de la etiqueta &lt;form&gt; del fomrulario y que procesará el envío del formulario. Por defecto la URL es $_SERVER['PHP_SELF']
*
* @param string $class (opcional) Valor del atributo "class" de la etiqueta &lt;form&gt; asociada al formulario. Si este parámetro incluye la cadena "nocsrf" no se generá el token CSRF para este formulario.
*
* @param string enctype (opcional) Valor del parámetro enctype del formulario.
*/
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 ) {
$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 <code>string</code> 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 <code$formId</code> (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 <code>$formId</code> en <code>$params</code>.
*
* @param array $params Array que contiene los datos recibidos en el envío formulario.
*
* @return boolean Devuelve <code>TRUE</code> si <code>$formId</code> existe como clave en <code>$params</code>
*/
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 .= '<form method="POST" action="'.$this->action.'" id="'.$this->formId.'"';
if ( $this->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 .= '<input type="hidden" name="CSRFToken" value="'.$tokenValue.'" />';
}
$html .= '<input type="hidden" name="action" value="'.$this->formId.'" />';
$html .= $this->generaCamposFormulario($datos);
$html .= '</form>';
return $html;
}
private function generaListaErrores($errores) {
$html='';
$numErrores = count($errores);
if ( $numErrores == 1 ) {
$html .= "<ul><li>".$errores[0]."</li></ul>";
} else if ( $numErrores > 1 ) {
$html .= "<ul><li>";
$html .= implode("</li><li>", $errores);
$html .= "</li></ul>";
}
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);
}
}
}
*/
?>

View File

@ -1,185 +0,0 @@
<?php
class Template {
//Attributes:
public $page; //Page Name.
public $prefix; //Page prefix.
public $session; //"Iniciar Sesión" (if user isn´t logged in), "Cerrar Sesión" (otherwise).
public $session_route; //"login/" (if user isn´t logged in), "logout/" (otherwise).
public $panel; //Button to access the user's dashboard (only displayed if logged in).
public $user_route; //Route of the panel (depends on the type of user).
//Constructor:
function __construct(){
$this->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, 'register'): $this->page = 'Registro de Usuario'; 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"<head>
<title>CompluCine | {$page}</title>
<meta charset='utf-8' />
<link id='estilo' rel='stylesheet' type='text/css' href='{$prefix}assets/css/main.css'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<link rel='icon' href='{$prefix}img/favicon.png' />
</head>\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 = "<a href='{$prefix}{$user_route}'><li>Mi Panel</li></a>";
$session = 'Cerrar Sesión';
$session_route = 'logout/';
}
echo"<div class='header'>
<a href='{$prefix}'><img src='{$prefix}img/favicon2.png' alt='favicon' /> CompluCine</a> | {$page}
<div class='menu'>
<nav>
<a href='{$prefix}{$session_route}'><li>{$session}</li></a>
{$panel}
<li>Menú
<ul>
<a href='{$prefix}'><li>Inicio</li></a>
<a href='{$prefix}showtimes/'><li>Cartelera</li></a>
<a href='{$prefix}cinemas/'><li>Nuestros Cines</li></a>
<a href='{$prefix}fdicines/miembros/'><li>Quiénes somos</li></a>
<a href='{$prefix}contacto/'><li>Contacto</li></a>
<ul>
</li>
</nav>
</div>
</div>\n";
}
//Print generic subHeader:
function print_subheader(){
//$page = $this->page;
$prefix = $this->prefix;
echo"<div class='header sub'>
<div class='menu'>
<nav>
<a href='{$prefix}fdicines/about_us/'><li>Sobre FDI-Cines</li></a>
<a href='{$prefix}fdicines/detalles/'><li>Detalles</li></a>
<a href='{$prefix}fdicines/bocetos/'><li>Bocetos</li></a>
<a href='{$prefix}fdicines/miembros/'><li>Miembros</li></a>
<a href='{$prefix}fdicines/planificacion/'><li>Planificación</li></a>
</nav>
</div>
</div>\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 = "<!-- Sub Header -->
<div class='header sub'>
<div class='menu'>
<nav>
<a href='{$prefix}fdicines/about_us/'><li>Sobre FDI-Cines</li></a>
<a href='{$prefix}fdicines/detalles/'><li>Detalles</li></a>
<a href='{$prefix}fdicines/bocetos/'><li>Bocetos</li></a>
<a href='{$prefix}fdicines/miembros/'><li>Miembros</li></a>
<a href='{$prefix}fdicines/planificacion/'><li>Planificación</li></a>
</nav>
</div>
</div>\n";
}
/* MAIN */
echo"<div class='main'>
<div class='image'><a href='{$prefix}'><img src='{$prefix}img/logo_trasparente.png' alt='logo_FDI-Cines' /></a></div>
{$sub_header}
<h1>{$page}</h1>
<hr />
</div>\n";
}
//Print session MSG:
function print_msg() {
if(isset($_SESSION['message'])){
echo "<div>".$_SESSION['message']."</div>";
unset($_SESSION['message']);
}
}
//Print generic Footer:
function print_footer(){
//$page = $this->page;
$prefix = $this->prefix;
echo"<footer>
<div class='footer'>
<p>© Práctica 2 | Sistemas Web 2021 </p>
</div>
<a href='{$prefix}fdicines/about_us/'>Sobre FDI-Cines</a> |
<a href='{$prefix}fdicines/terms_conditions/'>Términos y condiciones</a> |
<a href='{$prefix}cinemas/'>Nuestros cines</a> |
<a href='{$prefix}contacto/'>Contacto</a>
</footer>\n";
}
}
?>

View File

@ -1,83 +0,0 @@
<?php
require_once('dao.php');
include_once('user_dto.php');
class UserDAO extends DAO {
//Constants:
private const _USER = "user";
private const _MANAGER = "manager";
private const _ADMIN = "admin";
//Attributes:
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Encrypt password with SHA254.
private function encryptPass($password){
//$password = hash('sha256', $password);
$password = password_hash($password, PASSWORD_DEFAULT);
return $password;
}
//Returns true if the password and hash match, or false otherwise.
public function verifyPass($password, $passwd){
return password_verify($password, $passwd);
}
//Create a new User.
public function createUser($id, $username, $email, $password, $rol){
$password = $this->encryptPass($password);
$sql = sprintf( "INSERT INTO users( id, username, email, passwd, rol)
VALUES ( '%s', '%s', '%s', '%s', '%s')",
$id, $username, $email, $password, $rol );
return $sql;
}
//Returns a query to check if the user name exists.
public function selectUser($username){
$username = $this->mysqli->real_escape_string($username);
$sql = sprintf( "SELECT * FROM users WHERE username = '%s'", $username );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a query to check if the user pass matches.
public function selectPass($username, $password){
$username = $this->mysqli->real_escape_string($username);
$password = $this->mysqli->real_escape_string($password);
$password = $this->encryptPass($password);
$sql = sprintf( "SELECT * FROM users WHERE username = '%s' AND passwd = '%s'", $username, $password);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
//return $this->mysqli->query($sql);
return $resul;
}
//Returns a query to get the user's data.
public function userData($id){
$sql = sprintf( "SELECT * FROM users WHERE id = '%d'", $id );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Create a new User Data Transfer Object.
public function loadUser($id, $username, $email, $password, $rol){
return new UserDTO($id, $username, $email, $password, $rol);
}
}
?>

View File

@ -1,37 +0,0 @@
<?php
include_once('users_dto_interface.php');
class UserDTO implements UsersDTO {
//Attributes:
private $_id; //User Id.
private $_username; //User name.
private $_email; //User email.
private $_password; //User password.
private $_rol; //Type of user: user | manager | admin.
//Constructor:
function __construct($id, $username, $email, $password, $rol){
$this->_id = $id;
$this->_username = $username;
$this->_email = $email;
$this->_password = $password;
$this->_rol = $rol;
}
//Methods:
//Getters && Setters:
public function setId($id){ $this->_id = $id; }
public function getId(){ return $this->_id; }
public function setName($username){ $this->_username = $username; }
public function getName(){ return $this->_username; }
public function setEmail($email){ $this->_email = $email; }
public function getEmail(){ return $this->_email; }
public function setPass($passwd){ $this->_password = $passwd; }
public function getPass(){ return $this->_password; }
public function setRol($rol){ $this->_rol = $rol; }
public function getRol(){ return $this->_rol; }
}
?>

View File

@ -1,14 +0,0 @@
<?php
interface UsersDTO {
public function setId($id);
public function getId();
public function setName($username);
public function getName();
public function setEmail($email);
public function getEmail();
public function setPass($passwd);
public function getPass();
public function setRol($rol);
public function getRol();
}
?>

View File

@ -1,27 +1,36 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../../assets/php/config.php');
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
Práctica 1 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<head>
<title>CompluCine | Bocetos</title>
<meta charset="utf-8" />
<link id="estilo" rel="stylesheet" type="text/css" href="../assets/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="../img/favicon.png" />
</head>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<div class="header">
<a href="/"><img src="../img/favicon2.png" /> CompluCine</a> | Bocetos
<div class="menu">
<a href="/">Inicio |</a>
<a href="../detalles/">Detalles |</a>
<a href="#">Bocetos |</a>
<a href="../miembros/">Miembros |</a>
<a href="../planificacion/">Planificación |</a>
<a href="../contacto/">Contacto</a>
</div>
</div>
<!-- Main -->
<?php
$template->print_main();
?>
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
<h1>Bocetos</h1>
<hr />
</div>
<!-- Flow -->
<section id="flow">
@ -29,8 +38,8 @@
<h2>FLUJO DE NAVEGACIÓN</h2>
<hr>
<!-- User Flow -->
<div class="textbox">
<h2>Usuario</h2>
<fieldset>
<legend>Usuario</legend>
<p>
El Usuario puede tomar dos caminos a la hora de seleccionar la película, el cine, y la sesión a la que quiere asistir. La diferencia es puramente
de orden entre la elección de cine y de la película, a conveniencia del usuario; se procede a explicar ambos:
@ -58,38 +67,38 @@
<p>
Una vez elegidos película y cine, el flujo es idéntico al anterior.
</p>
</div>
</fieldset>
<!-- Manager Flow -->
<div class="textbox">
<h2>Gerente</h2>
<fieldset>
<legend>Gerente</legend>
<p>
El Gerente es el encargado de gestionar las sesiones y salas de cada cine. La forma de proceder es la misma que el administrador, con vistas equivalentes.
En el caso de la gestión de salas, se administrarán los asientos disponibles (por temas de Covid-19) y si está o no habilitada para su uso.
</p>
</div>
</fieldset>
<!-- Admin Flow -->
<div class="textbox">
<h2>Administrador</h2>
<fieldset>
<legend>Administrador</legend>
<p>El Administrador es el encargado de gestionar las: películas, cines, promociones, otros administradores y gerentes de cada cine.</p>
<p>Para cada categoría tiene un panel en el que puede seleccionar, a partir de una lista, el elemento que quiere modificar, también hay otro panel al lado, en donde
puede modificar los datos de un elemento ya existente o crear uno nuevo introduciendo datos que no existan en la BD. También hay una opción de Eliminar en caso de que
quiera eliminar un elemento.</p>
<p>También cuenta con un botón de "Vista de Usuario", con el que puede navegar por la página con la vista que tendrá el usuario final.</p>
</div>
</fieldset>
</div>
</section>
<!-- Sketches -->
<section id="sketches">
<hr />
<!-- template Sketches-->
<!-- Generic Sketches-->
<div class="code">
<h3>Pantallas Genéricas</h3>
</div>
<div class="row">
<div class="column left">
<div class="sketches">
<img src="../../img/inicio.png" />
<img src="../img/inicio.png" />
<div class="description">
<h3>Pantalla de inicio</h3>
<p>Pantalla de bienvenida al entrar en la web.</p>
@ -98,7 +107,7 @@
</div>
<div class="column right">
<div class="sketches">
<img src="../../img/registrarse_iniciar_sesion.png" />
<img src="../img/registrarse_iniciar_sesion.png" />
<div class="description">
<h3>Pantalla de Registro / Inicio de sesión</h3>
<p>Pantalla para que un usuario nuevo se registre o, en caso de ya tener una cuenta de usuario, inicie sesión.</p>
@ -109,7 +118,7 @@
<div class="row">
<div class="column left">
<div class="sketches">
<img src="../../img/menu_usuario.png" />
<img src="../img/menu_usuario.png" />
<div class="description">
<h3>Menú de usuario registrado</h3>
<p>Pantalla con todas las opciones disponibles, propias de un usuario registrado.</p>
@ -118,7 +127,7 @@
</div>
<div class="column right">
<div class="sketches">
<img src="../../img/peliculas.png" />
<img src="../img/peliculas.png" />
<div class="description">
<h3>Cartelera</h3>
<p>Pantalla con información sobre todas las películas disponibles en ese momento.</p>
@ -129,7 +138,7 @@
<div class="row">
<div class="column left">
<div class="sketches">
<img src="../../img/cine.png" />
<img src="../img/cine.png" />
<div class="description">
<h3>Cines</h3>
<p>Pantalla con un mapa que indica la geolocalización de todos los cines de FDI-Cines.</p>
@ -138,7 +147,7 @@
</div>
<div class="column right">
<div class="sketches">
<img src="../../img/selector_horario.png" />
<img src="../img/selector_horario.png" />
<div class="description">
<h3>Selección de Horario</h3>
<p>Pantalla que muestra los horarios disponibles por salas para un cine y película elegidos.</p>
@ -149,7 +158,7 @@
<div class="row">
<div class="column left">
<div class="sketches">
<img src="../../img/mapa_asientos.png" />
<img src="../img/mapa_asientos.png" />
<div class="description">
<h3>Mapa de los Asientos</h3>
<p>Pantalla con un mapa para selccionar los asientos que se quieren escoger. Los asientos ocupados no pondrán ser seleccionados.</p>
@ -158,7 +167,7 @@
</div>
<div class="column right">
<div class="sketches">
<img src="../../img/pagar.png" />
<img src="../img/pagar.png" />
<div class="description">
<h3>Pagar</h3>
<p>Pantalla para realizar el pago, después de haber selecionado película, cine, sala, horario y butacas.</p>
@ -169,7 +178,7 @@
<div class="row">
<div class="column left">
<div class="sketches">
<img src="../../img/compra_realizada.png" />
<img src="../img/compra_realizada.png" />
<div class="description">
<h3>Compra Realizada</h3>
<p>Pantalla de confirmación con los datos de compra.</p>
@ -178,7 +187,7 @@
</div>
<div class="column right">
<div class="sketches">
<img src="../../img/about_us.png" />
<img src="../img/about_us.png" />
<div class="description">
<h3>Sobre nosotros</h3>
<p>Pantalla con información sobre FDI-Cines.</p>
@ -189,7 +198,7 @@
<div class="row">
<div class="column left">
<div class="sketches">
<img src="../../img/contacto.png" />
<img src="../img/contacto.png" />
<div class="description">
<h3>Formulario de Contacto</h3>
<p>Pantalla con un formulario para realizar una consulta a los administradores.</p>
@ -198,7 +207,7 @@
</div>
<div class="column right">
<div class="sketches">
<img src="../../img/terminos_y_condiciones.png" />
<img src="../img/terminos_y_condiciones.png" />
<div class="description">
<h3>Términos y Condiciones</h3>
<p>Pantalla con todos los términos y condiciones de uso del servicio.</p>
@ -214,7 +223,7 @@
<div class="row">
<div class="column side">
<div class="sketches">
<img src="../../img/panel_inicio_gerente.png" />
<img src="../img/panel_inicio_gerente.png" />
<div class="description">
<h3>Panel de Incio Gerente</h3>
<p>Pantalla con las funciones exclusivas a las que puede acceder un Gerente.</p>
@ -223,7 +232,7 @@
</div>
<div class="column middle">
<div class="sketches">
<img src="../../img/gestionar_salas.png" />
<img src="../img/gestionar_salas.png" />
<div class="description">
<h3>Gestionar salas</h3>
<p>Pantalla en la que los Gerentes pueden interactuar para añadir, modificar o eliminar la sala de un cine.</p>
@ -232,7 +241,7 @@
</div>
<div class="column side">
<div class="sketches">
<img src="../../img/gestionar_sesiones.png" />
<img src="../img/gestionar_sesiones.png" />
<div class="description">
<h3>Gestionar Sesiones</h3>
<p>Pantalla en la que los Gerentes pueden interactuar para añadir, modificar o eliminar las sesiones de una película.</p>
@ -248,7 +257,7 @@
<div class="row">
<div class="column left">
<div class="sketches">
<img src="../../img/panel_inicio_admin.png" />
<img src="../img/panel_inicio_admin.png" />
<div class="description">
<h3>Panel Inicio Administrador</h3>
<p>Pantalla con las funciones exclusivas a las que puede acceder un Administrador.</p>
@ -257,7 +266,7 @@
</div>
<div class="column right">
<div class="sketches">
<img src="../../img/gestionar_peliculas.png" />
<img src="../img/gestionar_peliculas.png" />
<div class="description">
<h3>Gestionar Películas</h3>
<p>Pantalla en la que los Administradores pueden interactuar para añadir, modificar o eliminar las películas de la cartelera.</p>
@ -268,7 +277,7 @@
<div class="row">
<div class="column side">
<div class="sketches">
<img src="../../img/gestionar_cines.png" />
<img src="../img/gestionar_cines.png" />
<div class="description">
<h3>Gestionar Cines</h3>
<p>Pantalla en la que los Administradores pueden interactuar para añadir, modificar o eliminar los cines.</p>
@ -277,7 +286,7 @@
</div>
<div class="column middle">
<div class="sketches">
<img src="../../img/gestionar_promociones.png" />
<img src="../img/gestionar_promociones.png" />
<div class="description">
<h3>Gestionar Promociones</h3>
<p>Pantalla en la que los Administradores pueden interactuar para añadir, modificar o eliminar las promociones existentes.</p>
@ -286,7 +295,7 @@
</div>
<div class="column side">
<div class="sketches">
<img src="../../img/gestionar_admins_gerentes.png" />
<img src="../img/gestionar_admins_gerentes.png" />
<div class="description">
<h3>Gestionar Administradores y Gerentes</h3>
<p>Pantalla en la que los Administradores pueden interactuar para añadir, modificar o eliminar tanto otros Administradores como Gerentes.</p>
@ -297,9 +306,11 @@
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
<footer>
<div class="footer">
<p>© Práctica 1 | Sistemas Web 2021 </p>
</div>
</footer>
</body>

View File

@ -1,32 +0,0 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../assets/php/config.php');
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<?php
$template->print_main();
?>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,27 +1,36 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../assets/php/config.php');
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
Práctica 1 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<head>
<title>CompluCine | Contacto</title>
<meta charset="utf-8" />
<link id="estilo" rel="stylesheet" type="text/css" href="../assets/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="../img/favicon.png" />
</head>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<div class="header">
<a href="/"><img src="../img/favicon2.png" /> CompluCine</a> | Contacto
<div class="menu">
<a href="/">Inicio |</a>
<a href="../detalles/">Detalles |</a>
<a href="../bocetos/">Bocetos |</a>
<a href="../miembros/">Miembros |</a>
<a href="../planificacion/">Planificación |</a>
<a href="#">Contacto</a>
</div>
</div>
<!-- Main -->
<?php
$template->print_main();
?>
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
<h1>Contacto</h1>
<hr />
</div>
<!-- Form -->
<section id="formulario">
@ -31,10 +40,10 @@
<fieldset id="datos_personales">
<legend>Datos personales</legend>
<div class="_name">
<input type="text" name="name" id="name" value="" placeholder="Nombre" required/>
<input type="text" name="name" id="name" value="" placeholder="Nombre" />
</div>
<div class="_email">
<input type="email" name="email" id="email" value="" placeholder="Email" required/>
<input type="email" name="email" id="email" value="" placeholder="Email" />
</div>
</fieldset>
<fieldset id="motivo">
@ -56,7 +65,7 @@
<textarea name="message" id="message" placeholder="Escribe aquí tu mensaje..."></textarea> <!-- rows="5" -->
</div>
<div class="verify">
<input type="checkbox" id="checkbox" name="terms" required>
<input type="checkbox" id="checkbox" name="terms">
<label for="terms">Marque esta casilla para verificar que ha leído nuestros términos y condiciones del servicio.</label>
</div>
<div class="actions">
@ -68,9 +77,11 @@
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
<footer>
<div class="footer">
<p>© Práctica 1 | Sistemas Web 2021 </p>
</div>
</footer>
</body>

View File

@ -1,32 +1,34 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../../assets/php/config.php');
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
Práctica 1 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<head>
<title>CompluCine | Detalles</title>
<meta charset="utf-8" />
<link id="estilo" rel="stylesheet" type="text/css" href="../assets/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="../img/favicon.png" />
</head>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<div class="header">
<a href="/"><img src="../img/favicon2.png" /> CompluCine</a> | Detalles
<div class="menu">
<a href="/">Inicio |</a>
<a href="#">Detalles |</a>
<a href="../bocetos/">Bocetos |</a>
<a href="../miembros/">Miembros |</a>
<a href="../planificacion/">Planificación |</a>
<a href="../contacto/">Contacto</a>
</div>
</div>
<!-- Main -->
<div class="main">
<div class="image"><a href='../../'><img src="../../img/logo_trasparente.png" alt="logo_FDI-Cines" /></a></div>
<!-- Sub Header -->
<?php
$template->print_subheader();
?>
<div class="image"><img src="../img/logo_trasparente.png" /></div>
</div>
<!-- Details -->
<section id="details">
<div class = "code">
@ -51,37 +53,37 @@
<div class = "code details">
<h2>Tipos de usuario</h2>
<hr />
<div class="textbox">
<h2>Usuario No Registrado</h2>
<fieldset>
<legend>Usuario No Registrado</legend>
<p>
Este tipo de usuario, puede interactuar con la web sin necesidad de estar registrado. Podrá realizar compras, ver horarios y cartelera, sin necesidad de realizar ningún registro.
No podrá usar ninguna de las promociones, pues estas estarán únicamente destinadas a los usuarios registrados.
</p>
</div>
<div class="textbox">
<h2>Usuario Registrado</h2>
</fieldset>
<fieldset>
<legend>Usuario Registrado</legend>
<p>
Estos usuarios son aquellos que previamente han realizado un registro en la base de datos del sistema. Tendrán las mismas funcionalidades básicas
que un usuario no registrado y además, podrán acceder a ofertas y aplicar promociones y descuentos y ver el historial de sus compras.
Además, estos usuarios podrán cancelar una compra previamente hecha, pues estas se asociarían a su cuenta, algo que sería imposible
con un usuario no registrado.
</p>
</div>
<div class="textbox">
<h2>Gerente de Cine</h2>
</fieldset>
<fieldset>
<legend>Gerente de Cine</legend>
<p>
Un administrador de rango bajo capaz de acceder a la vista de administradores, puede ver las peliculas que hay en la base de datos.
Este usuario está asociado a un cine, sobre el cual puede añadir sesiones con peliculas existentes y modificar la disposicion de butacas.
</p>
</div>
<div class="textbox">
<h2>Administrador</h2>
</fieldset>
<fieldset>
<legend>Administrador</legend>
<p>
El administrador es capaz de ascender cuentas de usuario registradas a cuentas de gerente de cine. Ademas es el encargado de añadir nuevos cines y peliculas.
Para comprobar el correcto funcionamiento de la pagina podrá cambiar entre distintas vistas de usuario.
Las cuales le permitirán comprobar que cada usuario tiene acceso únicamente a sus funcionalidades y no a funcionalidades de otro rango superior.
</p>
</div>
</fieldset>
</div>
</div>
<div class="column right">
@ -112,9 +114,11 @@
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
<footer>
<div class="footer">
<p>© Práctica 1 | Sistemas Web 2021 </p>
</div>
</footer>
</body>
</html>

View File

@ -1,3 +0,0 @@
<?php
header('Location: ./about_us/');
?>

View File

@ -1,220 +0,0 @@
<!DOCTYPE HTML>
<?php
session_start();
//HTML template:
require_once('../../assets/php/template.php');
$template = new Template();
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<?php
$template->print_main();
?>
<!-- Section -->
<section id="terms_and_conditions">
<div class="code">
<p>
Todo usuario que desee acceder a la compra de entradas a través del servicio, primero debe leer y aceptar los Términos y Condiciones de compra que a continuación se detallan.
Una vez que inicie la navegación a través de esta web el internauta adquiere la condición de USUARIO, y una vez que cumplimente los pasos establecidos para la compra de
entradas de cine, tendrá la consideración de CLIENTE. En cumplimiento de lo dispuesto en el Real Decreto 1906/99 de diecisiete de diciembre, por la que se regula la
contratación electrónica con condiciones generales, y de la Ley de Ordenación del Comercio Minorista (Ley 7/1996 de 15 de Enero, modificada por la Ley 47/2002 de 19 de
Diciembre) en lo aplicable a lo dispuesto sobre las ventas a distancia en los artículos 38 y siguientes, FDI-Cines (en adelante la EMPRESA) informa:
</p><br />
<p>
Las presentes Condiciones Generales de Contratación suponen la regulación general de los servicios prestados por
la EMPRESA a través del portal complucine.sytes.net, constituyendo el marco jurídico que desarrolla la relación contractual. La EMPRESA ofrece como intermediario el
servicio de venta de entradas para cines, a través de la web https://complucine.sytes.net. Las presentes Condiciones Generales, están sujetas a lo dispuesto a la Ley 7/1988,
de 13 de abril, sobre Condiciones Generales de Contratación, a la Ley 26/1984, de 19 de julio, General para la Defensa de Consumidores y Usuarios, al Real Decreto 1906/1999,
de 17 de diciembre de 1999, por el que se regula la Contratación Telefónica o Electrónica con condiciones generales, la Ley Orgánica 15/1999, de 13 de diciembre, de Protección
de Datos de Carácter Personal, la Ley 7/1996, de 15 de enero de Ordenación del Comercio Minorista, y a la Ley 34/2002 de 11 de julio, de Servicios de la Sociedad de la
Información y de Comercio Electrónico. Los servicios ofrecidos por complucine.sytes.net podrán ser contratados por cualesquiera usuarios que residan en España o en otro
Estado miembro de la Unión Europea o del Espacio Económico Europeo y por aquellos usuarios que, residiendo en un Estado no perteneciente a la Unión Europea o al Espacio
Económico Europea, les sea de aplicación la legislación española. Este documento es accesible en todo momento en la web de la EMPRESA y puede ser impreso y almacenado
por el CLIENTE.
</p><br />
<!-- Lista de Condiciones -->
<ol>
<li>
OBJETO DEL CONTRATO El contrato tiene por objeto regular las condiciones generales de prestación de los servicios ofrecidos por la EMPRESA a través de
complucine.sytes.net. Los servicios que la EMPRESA presta actualmente y que son objeto de este contrato son por un lado,los servicios de información, de acceso gratuito,
y por otro el servicio de venta de entradas para salas de cine. El servicio de venta de entradas de cine es de carácter oneroso, y el precio de cada entrada está determinado
en cada momento en la web. El acceso a la información concerniente a los apartados cartelera, cines, estrenos y noticias es libre, no sujeto a pago alguno.
</li><br />
<li>
IDENTIFICACIÓN DE LAS PARTES CONTRATANTES. Las presentes condiciones generales de contratación del servicio ofrecido por la EMPRESA son suscritas, de una parte,
por la empresa identificada en este documento. Y, de otra parte, por el CLIENTE, cuyos datos introducidos para
realizar la compra de entradas o para realizar alguna sugerencia, a través del formulario establecido al efecto, son los que han sido consignados por él mismo.
Todos los datos incluidos en él han sido introducidos directamente por el cliente, por lo que la responsabilidad sobre la autenticidad de los mismos corresponde, directa
y exclusivamente, al CLIENTE. Para tener acceso al servicio de compra de entradas del portal, se requiere la cumplimentación de todos los datos no marcados como opcionales
solicitados para realizar la compra.
</li><br />
<li>
OBLIGACIONES RELATIVAS AL PROCEDIMIENTO DE COMPRA El CLIENTE es el único responsable de la veracidad de los datos introducidos por él mismo en el procedimiento
de compra, y acepta la obligación de facilitar datos veraces, exactos y completos. Si el CLIENTE incumple esta obligación, quedará bajo su responsabilidad el responder por
los posibles daños y perjuicios producidos a la EMPRESA o a un tercero. 4. CONDICIONES DEL SERVICIO Las presentes condiciones son de aplicación al servicio de venta de
entradas de cine ofrecido por la EMPRESA a través de la web complucine.sytes.net. Las condiciones comerciales de este servicio y las ofertas que eventualmente puedan
llevarse a cabo por la EMPRESA siempre aparecen en la mencionada página web por lo que pueden ser consultadas, archivadas o impresas. La EMPRESA se reserva el derecho de
modificar en cualquier momento las presentes Condiciones Generales de Uso así como cualesquiera otras condiciones generales o particulares, reglamentos de uso o avisos que
resulten de aplicación. La EMPRESA podrá modificar las Condiciones Generales notificándolo a los CLIENTES con antelación suficiente, con el fin de mejorar los servicios
y productos ofrecidos a través de complucine.sytes.net. Mediante la modificación de las Condiciones Generales expuestas en la página Web de www.compraentradas.com, se
entenderá por cumplido dicho deber de notificación. En todo caso, antes de utilizar los servicios o contratar productos, se pondrán consultar las Condiciones General es.
Asimismo se reserva el derecho a modificar en cualquier momento la presentación, configuración y localización del Sitio Web, así como los contenidos y las condiciones
requeridas para utilizar los mismos. El CLIENTE formalizará su compra de entradas de cine mediante el cumplimiento de todas las fases establecidas en el apartado COMPRA
DIRECTA y su envío telemático. 5. USO DEL SERVICIO Y RESPONSABILIDADES La EMPRESA no será responsable de los retrasos o fallos que se produjeran en el acceso,
funcionamiento y operatividad de la web, o en sus servicios y/o contenidos, así como tampoco de las interrupciones, suspensiones o el mal funcionamiento de la misma,
cuando tuvieren su origen en averías producidas por catástrofes naturales o situaciones de fuerza mayor , o de urgencia extrema, tales como huelgas, ataques o intrusiones
informáticas o cualquier otra situación de fuerza mayor o causa fortuita, así como por errores en las redes telemáticas de transferencia de datos. La EMPRESA no se hace
responsable de la fiabilidad, veracidad y exactitud de los contenidos ofrecidos en su web. El CLIENTE se compromete a cumplir con lo establecido en el AVISO LEGAL publicado
por la EMPRESA en la web complucine.sytes.net en cada momento. El CLIENTE reconoce y acepta que el acceso y uso del sitio web complucine.sytes.net y de los contenidos
incluidos en el mismo tiene lugar de forma libre y conscientemente, bajo su exclusiva responsabilidad. El CLIENTE se compromete a hacer un uso adecuado y lícito del Sitio
Web y de los contenidos, de conformidad con la legislación aplicable, las presentes Condiciones Generales de Uso, la moral y buenas costumbres generalmente aceptadas y
el orden público.
</li><br />
<li>
PROCEDIMIENTO DE COMPRA A través del apartado COMPRA DIRECTA el CLIENTE puede adquirir la/s entrada/s de cine telemáticamente. Los pasos a seguir son los
siguientes:
<ul>
<li>
OPCIONES PARA LA COMPRA Al pulsar sobre cualquier opción del sitio web, se cargarán las páginas que le permitirán, a través de una serie de menús,
seleccionar la película, cine, día y sesión a la que desea acudir. Cada menú se genera en función de la opción seleccionada en el menú anterior. Una vez completada la
selección podrá acceder al patio de butacas del cine y seleccionar las localidades que más le gusten.
</li>
<li>
SOLICITUD DE BUTACAS En el patio de butacas, las butacas en color verde representan los asientos que están disponibles. En las butacas ocupadas aparecerá el dibujo de una persona sentada. Para seleccionar
las localidades deseadas, pulse con el ratón sobre ellas; a medida que las pulse se pondrán de color blanco. Si se equivoca vuelva a pulsar sobre la butaca y volverá a
ponerse de color verde. Cuando termine de seleccionar las localidades pulse sobre el botón Solicitar y entrará en una página en la que se le pedirán los datos de la tarjeta
con la que desea pagar las entradas. NOTA: Las localidades han de seleccionarse juntas y en la misma fila. El máximo de localidades que se pueden solicitar es de 10.
</li>
<li>
ACEPTACIÓN DE LA PROPUESTA DEL CINE Una vez solicitadas las butacas, el cine respondera si aun siguen estando disponibles, en ese caso se procede al pago.
</li>
<li>
DATOS PARA EL PAGO En esta página debe introducirse un número de tarjeta y su caducidad; con la que abonar el importe de las entradas. Asimismo, también aparece un campo donde
opcionalmente-, se puede introducir un correo electrónico de contacto el cual es útil para informar al usuario en caso de que se suspendiera alguna sesión, se realizara
una reubicacion, etc. Tras introducir los datos para el pago, pulse sobre el botón Continuar.
</li>
<li>
CONFIRMACIÓN DE LA VENTA Si el proceso de compra se completa correctamente, le aparecerá una página de confirmación en la que se reflejan las características de las localidades adquiridas, así como un numero de referencia. El número de referencia
identifica su compra de forma única y será necesario en caso de que usted desee realizar alguna consulta. Dado que es un número de bastantes cifras si lo desea puede usted
sacar una copia en papel de dicha página pulsando sobre el botón imprimir o descargándolo en su ordenador.
</li>
<li>
DENEGACIÓN DE LA VENTA Por diversas razones como son: falta de comunicación con la entidad emisora de su tarjeta, pérdida temporal de la comunicación con el cine, etc.; puede que al sistema le resulte imposible realizar la compra.
En tal caso, le aparecerá una página indicándole tal circunstancia así como una referencia. Si desea realizar alguna consulta, utilice dicho número de referencia para que
podamos atenderle.
</li>
<li>
RECOGIDA DE ENTRADAS Cerca de las taquillas del cine, el CLIENTE encontrará un buzón instalado a tal efecto, en el que puede introducir la tarjeta
con la que realizó la compra y le emitirá sus entradas. Si tuviera alguna dificultad en localizar el buzón puede consultar al personal del cine. Si el CLIENTE tuviera algún
inconveniente a la hora de recoger las entradas, deberá asegurarse de haber introducido la tarjeta en la posición correcta, los buzones tienen un dibujo que muestra como.
Si por alguna razón el buzón no le dispensa las entradas, como por ejemplo que se haya quedado sin papel, deberá acudir a las taquillas con la tarjeta.
</li>
</ul>
</li><br />
<li>
IDIOMA La información y contenidos ofrecidos por la EMPRESA a través de la web complucine.sytes.net se ofrecen en idioma español. La EMPRESA no se hace
responsable de los daños o perjuicios que pudieran ocasionar al CLIENTE por la no comprensión de los mismos.
</li><br />
<li>
NORMAS RELATIVAS A LA FORMACIÓN Y VALIDEZ DEL CONTRATO EL CLIENTE entiende que la información contenida en la web, de información general sobre cartelera,
estrenos, cines, noticias, IVA, comisiones, así como las condiciones generales de contratación y perfeccionamiento del contrato, son bastantes y suficientes para la exclusión
de error en la formación del consentimiento. Las presentes condiciones generales de contratación, pasarán a formar parte del contrato en el momento de aceptación por parte
del CLIENTE, manifestada por medio de la cumplimentación y envío de los datos de compra introducidos en el apartado COMPRA DIRECTA. 9. VALIDEZ DEL PROCEDIMIENTO DE COMPRA
COMO PRUEBA DE ACEPTACIÓN Ambas partes declaran expresamente que la aceptación de la oferta de servicio de la EMPRESA por el CLIENTE se lleva a cabo a través del seguimiento
del procedimiento de compra descrito en el apartado COMPRA DIRECTA. El hecho de cumplimentar telemáticamente todos los pasos descritos para el proceso de compra de la/s
entrada/s por el CLIENTE supone la aceptación integra y expresa de las presentes condiciones generales. 10. PERFECCIÓN DEL CONTRATO El contrato quedará perfeccionado desde
la fecha en que el CLIENTE manifieste su conformidad con las presentes condiciones o, en su caso, las publicadas en el momento de realizar la compra, mediante la aportación
de los datos solicitados en el apartado DATOS PARA EL PAGO, de la sección COMPRA DIRECTA, y una vez que el CLIENTE confirme la compra efectuada.
</li><br />
<li>
PAGO La EMPRESA cobrará al CLIENTE por la prestación del servicio las tarifas vigentes en cada momento en la web y que aparecerán una vez seleccionada la película,
cine, día y sesión, apartado éste último, en el que aparecerá el precio correspondiente a la selección efectuada y los impuestos aplicables. Una vez seleccionada/s la/s
butaca/s, se abrirá la sección correspondiente al pago, con la petición de introducción de los datos de la tarjeta de crédito, en la cual se detallará el precio y la comisión
correspondiente a cada butaca.
</li><br />
<li>
DERECHO DE DESISTIMIENTO El CLIENTE debe asegurarse fehacientemente antes de tramitar la reserva de la exactitud y adecuación de los datos
introducidos, ya que no es posible la devolución de las entradas adquiridas una vez realizada la compra. No poder asistir al espectáculo o cometer un error al adquirir las
entradas no son motivos que permitan su devolución. Sólo podrán anularse entradas por posibles incidencias técnicas u operativas, imputables a la EMPRESA. El usuario no podrá
ejercitar el derecho de desistimiento o resolución previsto en el artículo 44 de la ley 47/2002 de 19 de diciembre de reforma de la Ley 7/1996, de 15 de enero, de Ordenación
del Comercio Minorista, al estar excluido en el artículo 45 b). Tampoco podrá ser ejercido por el usuario el derecho de Resolución previsto en el artículo 4 del R.D.
1906/19999, de 17 de diciembre, al estar excluido el ejercicio del mismo en el artículo 4.5. No obstante lo anterior, cuando el importe de una compra hubiese sido cargado
fraudulenta o indebidamente, utilizando el número de una tarjeta de pago, el titular de la misma podrá solicitar la anulación del cargo a la EMPRESA siempre y cuando se
acredite la previa presentación de denuncia por estos hechos. La devolución del importe de las mismas se realizará mediante reclamación por escrito, a la que deberán
acompañarse los documentos (denuncia) que acredite n la pérdida o robo de la tarjeta con la que se efectuó el pago. Sin embargo, si la compra hubiese sido efectivamente
realizada por el titular de la tarjeta y la exigencia de devolución no fuera consecuencia de haberse ejercido el derecho de desistimiento o de resolución reconocido en el
artículo 44 y, por tanto, hubiese exigido indebidamente la anulación del correspondiente cargo, aquel quedará obligado frente al vendedor al resarcimiento de los daños y
perjuicios ocasionados como consecuencia de dicha anulación. La EMPRESA pretende facilitar tanto a promotores como al público la adquisición de dichas entradas pero en ningún
momento la EMPRESA es la entidad promotora del espectáculo.
</li><br />
<li>
RECLAMACIONES Para cualquier aclaración sobre las presentes condición es generales o para realizar cualquier
reclamación relativa a su compra, el CLIENTE tiene a su disposición las direcciones especificadas al principio de este documento.
</li><br />
<li>
DURACIÓN Y TERMINACIÓN La prestación del servicio de la web complucine.sytes.net tiene una duración indefinida. No obstante,la EMPRESA está autorizada para
dar por terminada o suspender la prestación del servicio en cualquier momento, sin perjuicio de lo que se hubiere dispuesto al respecto en las correspondientes condiciones
generales. Cuando ello sea razonablemente posible, la EMPRESA advertirá previamente la terminación o suspensión de la prestación del servicio.
</li><br />
<li>
PROPIEDAD INTELECTUAL E INDUSTRIAL El CLIENTE acepta que todos los derechos de propiedad industrial e intelectual sobre los contenidos y cualesquiera otros
elementos insertados en la web complucine.sytes.net pertenecen a la EMPRESA. La EMPRESA es titular de los elementos que integran el diseño gráfico de su página web, los
menús, botones de navegación, el código HTML, los textos, imágenes, texturas, gráficos y cualquier otro contenido de la página web o, en cualquier caso, dispone de la
correspondiente autorización para la utilización de dichos elementos. El contenido de la web no podrá ser reproducido ni en todo ni en parte, ni transmitido, ni registrado
por ningún sistema de recuperación de información, en ninguna forma ni en ningún medio, a menos que se cuente con la autorización previa, por escrito, de la citada Entidad.
Asimismo queda prohibido suprimir, eludir o manipular el copyright y demás datos identificativos de los derechos de la EMPRESA, así como los dispositivos técnicos de
protección, o cualquiera mecanismos de información que pudieren contener los contenidos.
</li><br />
<li>
PROTECCIÓN DE DATOS DE CARÁCTER PERSONAL La EMPRESA ha adoptado las medidas y niveles de seguridad de protección de los datos personales exigidos por la Ley
Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal y sus reglamentos de desarrollo. Los datos personales recabados a través de
complucine.sytes.net son objeto de tratamiento automatizado y se incorporan a un fichero titularidad de la EMPRESA, que es a su vez la responsable del mencionado fichero.
La cumplimentación de los datos correspondientes a la compra de entradas o del formulario de sugerencias en el sitio web www.cinentradas.com implica el consentimiento expreso
del CLIENTE a la inclusión de sus datos de carácter personal en el referido fichero automatizado de la EMPRESA. El Cliente titular de los datos puede ejercitar gratuitamente
sus derechos de acceso, rectificación, cancelación y oposición con arreglo a lo previsto en la Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter
Personal y demás normativa aplicable al efecto, mediante el envio de un correo electrónico a la dirección MARKETING@complucine.sytes.net, o bien mediante carta dirigida a la
dirección de la EMPRESA especificada al inicio de este documento. Ya sea por correo electrónico o postal, debera constar claramente la
identidad del titular de los datos de forma que permita reconocer la identidad del CLIENTE que ejercita cualquiera de los anteriores derechos, debiendo indicar asimismo la
dirección a la que EMPRESA deberá hacer llegar la respuesta.El citado fichero figura inscrito en el Registro General de la Agencia Española de Protección de Datos. La
finalidad de la recogida de datos no es otra que la de poder ofrecer al CLIENTE los servicios de venta de entradas, así como la de atender las sugerencias realizadas por
los mismos.
</li><br />
<li>
NULIDAD PARCIAL Si cualquier parte de estas condiciones de servicio fuera contraria a Derecho y, por tanto, inválida, ello no afectará a las otras disposiciones
conformes a Derecho. Las partes se comprometen a renegociar aquellas partes de las condiciones de servicio que resultaran nulas y a incorporarlas al resto de las condiciones
de servicio.
</li><br />
<li>
LEY APLICABLE Y JURISDICCIÓN COMPETENTE. El CLIENTE se somete, con renuncia expresa a cualquier otro fuero, a los juzgados y tribunales de la ciudad de
Madrid (España). Estas Condiciones Generales se rigen por la ley española. Ambas partes reconocen que la legislación aplicable al presente contrato, y a todas las relaciones
jurídicas dimanantes del mismo, será la española, por expresa aplicación de lo dispuesto en el artículo 1.262 del Código Civil, en relación a lo dispuesto en el Capítulo IV,
del Título Preliminar del mismo cuerpo legal.
</li><br />
</ol>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

BIN
img/gestionarCines.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
img/gestionarPeliculas.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

View File

@ -1,3 +0,0 @@
<?php
header('Location: ../');
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

View File

@ -1,75 +1,79 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../../assets/php/config.php');
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<div class="main">
<div class="image"><a href='../../'><img src="../../img/logo_trasparente.png" alt="logo_FDI-Cines" /></a></div>
<!-- Sub Header -->
<?php
$template->print_subheader();
?>
</div>
<!-- Description -->
<section id="description">
<div class="code" id="resume">
<h1>Descripción</h1>
<hr />
<div class="blockquote">
<p>
CompluCine es un proyecto para la creación y desarrollo de una plataforma web que permita la compra de entradas
de cine, por fecha y hora, para cualquiera de los cines del grupo <a href="#FDI-Cines">FDI-Cines</a>
mostrar la cartelera disponible e incluya ofertas y promociones para los clientes.
</p>
<p>
Con este proyecto buscamos la creación de una aplicación web que
gestione la cartelera de un grupo de cines con una lista de películas variable,
unos horarios propios de cada cine por sesión y película, y con unos precios determinados.
</p>
<p>
Los usuarios podrán registrarse, comprar sus entradas para una
sesión, elegir asientos, precomprar sus snacks y ver ofertas y promociones.
</p>
</div>
</div>
<div class="code" id="FDI-Cines">
<h2>FDI-Cines</h2>
<hr />
<div class="blockquote">
<p>
Somos un <a href="../../miembros/">grupo de estudiantes</a> de la asignatura de Sistemas Web
de la Facultad de Informática de la Universidad Complutense de Madrid.
</p>
<p>
CompluCine es un proyecto web universitario y en ningún momento pretende ofrecer una funcionalidad real.
Para más información acerca del proyecto, haz click <a href="../../detalles/">aquí</a>.
</p>
</div>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>
<!DOCTYPE HTML>
<!--
Práctica 1 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<head>
<title>CompluCine | FDI-Cines</title>
<meta charset="utf-8" />
<link id="estilo" rel="stylesheet" type="text/css" href="assets/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="img/favicon.png" />
</head>
<body>
<!-- Header -->
<div class="header">
<a href="#"><img src="img/favicon2.png" /> CompluCine</a> | FDI-Cines
<div class="menu">
<a href="./detalles/">Detalles |</a>
<a href="./bocetos/">Bocetos |</a>
<a href="./miembros/">Miembros |</a>
<a href="./planificacion/">Planificación |</a>
<a href="./contacto/">Contacto</a>
</div>
</div>
<!-- Main -->
<div class="main">
<div class="image"><img src="img/logo_trasparente.png" /></div>
</div>
<!-- Description -->
<section id="description">
<div class="code" id="resume">
<h1>Descripción</h1>
<hr />
<div class="blockquote">
<p>
CompluCine es un proyecto para la creación y desarrollo de una plataforma web que permita la compra de entradas
de cine, por fecha y hora, para cualquiera de los cines del grupo <a href="#FDI-Cines">FDI-Cines</a>
mostrar la cartelera disponible e incluya ofertas y promociones para los clientes.
</p>
<p>
Con este proyecto buscamos la creación de una aplicación web que
gestione la cartelera de un grupo de cines con una lista de películas variable,
unos horarios propios de cada cine por sesión y película, y con unos precios determinados.
</p>
<p>
Los usuarios podrán registrarse, comprar sus entradas para una
sesión, elegir asientos, precomprar sus snacks y ver ofertas y promociones.
</p>
</div>
</div>
<div class="code" id="FDI-Cines">
<h2>FDI-Cines</h2>
<hr />
<div class="blockquote">
<p>
Somos un <a href="./miembros/">grupo de estudiantes</a> de la asignatura de Sistemas Web
de la Facultad de Informática de la Universidad Complutense de Madrid.
</p>
<p>
CompluCine es un proyecto web universitario y en ningún momento pretende ofrecer una funcionalidad real.
Para más información acerca del proyecto, haz click <a href="./detalles/">aquí</a>.
</p>
</div>
</div>
</section>
<!-- Footer -->
<footer>
<div class="footer">
<p>© Práctica 1 | Sistemas Web 2021 </p>
</div>
</footer>
</body>
</html>

View File

@ -1,95 +0,0 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('./assets/php/config.php');
//List of the tittles of the movies:
require_once($prefix.'panel_admin/includes/film_dao.php');
$films = new Film_DAO("complucine");
$films_array = $films->allFilmData();
$tittles = array();
foreach($films_array as $key => $value){
$tittles[$key] = $value->getTittle();
}
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<div class="main">
<div class="image"><a href='./'><img src="./img/logo_trasparente.png" alt="logo_FDI-Cines" /></a></div>
<?php
if(isset($_SESSION["nombre"])){
echo "<h1>Bienvenido {$_SESSION["nombre"]}</h1>\n";
}
else{
echo "<h1>Bienvenido a CompluCine</h1>\n";
}
?>
<hr />
</div>
<!-- Undercard -->
<section id="cartelera">
<div class="row">
<div class="code">
<div class="column left">
<div class="galery">
<h1>Últimos Estrenos</h1><hr />
<?php
$count = 0;
for($i = count($tittles)-4; $i < count($tittles); $i++){
if($count%2===0){
if($count != 0) echo "</div>
";
echo "<div class='fila'>
";
}
echo "<div class='zoom'>
<div class='columna'>
<a href='".$prefix."showtimes/#".$tittles[$i]."'><div class='image'><img src='img/".$tittles[$i].".jpg' alt='".$tittles[$i]."' /></div></a>
</div>
</div>
";
$count++;
}
echo "</div>\n";
?>
</div>
</div>
<div class="column right">
<div class="galery">
<?php
$count = rand(0, count($tittles)-1);
$title = str_replace('_', ' ', $tittles[$count]);
echo "<h1>{$title}</h1><hr />
<div class='zoom'>
<a href='".$prefix."showtimes/#".$tittles[$count]."'><div class='image main'><img src='img/".$tittles[$count].".jpg' alt='".$tittles[$count]."' /></div></a>
</div>\n";
?>
</div>
</div>
</div>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,238 +0,0 @@
<?php
class Form {
/**
* Sufijo para el nombre del parámetro de la sesión del usuario donde se almacena el token CSRF.
*/
const CSRF_PARAM = 'csrf';
/**
* Cadena utilizada como valor del atributo "id" de la etiqueta &lt;form&gt; asociada al formulario y como parámetro a comprobar para verificar que el usuario ha enviado el formulario.
*/
private $formId;
private $ajax;
/**
* URL asociada al atributo "action" de la etiqueta &lt;form&gt; del fomrulario y que procesará el envío del formulario.
*/
private $action;
/**
* Valor del atributo "class" de la etiqueta &lt;form&gt; asociada al formulario. Si este parámetro incluye la cadena "nocsrf" no se generá el token CSRF para este formulario.
*/
private $classAtt;
/**
* Valor del parámetro enctype del formulario.
*/
private $enctype;
/**
* Se encarga de orquestar todo el proceso de creación y procesamiento de un formulario web.
*
* @param string $formId Cadena utilizada como valor del atributo "id" de la etiqueta &lt;form&gt; asociada al formulario y como parámetro a comprobar para verificar que el usuario ha enviado el formulario.
*
* @param string $action (opcional) URL asociada al atributo "action" de la etiqueta &lt;form&gt; del fomrulario y que procesará el envío del formulario. Por defecto la URL es $_SERVER['PHP_SELF']
*
* @param string $class (opcional) Valor del atributo "class" de la etiqueta &lt;form&gt; asociada al formulario. Si este parámetro incluye la cadena "nocsrf" no se generá el token CSRF para este formulario.
*
* @param string enctype (opcional) Valor del parámetro enctype del formulario.
*/
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 ) {
$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 <code>string</code> 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 <code$formId</code> (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 <code>$formId</code> en <code>$params</code>.
*
* @param array $params Array que contiene los datos recibidos en el envío formulario.
*
* @return boolean Devuelve <code>TRUE</code> si <code>$formId</code> existe como clave en <code>$params</code>
*/
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 .= '<form method="POST" action="'.$this->action.'" id="'.$this->formId.'"';
if ( $this->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 .= '<input type="hidden" name="CSRFToken" value="'.$tokenValue.'" />';
}
$html .= '<input type="hidden" name="action" value="'.$this->formId.'" />';
$html .= $this->generaCamposFormulario($datos);
$html .= '</form>';
return $html;
}
private function generaListaErrores($errores) {
$html='';
$numErrores = count($errores);
if ( $numErrores == 1 ) {
$html .= "<ul><li>".$errores[0]."</li></ul>";
} else if ( $numErrores > 1 ) {
$html .= "<ul><li>";
$html .= implode("</li><li>", $errores);
$html .= "</li></ul>";
}
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);
}
}
}
*/
?>

View File

@ -1,94 +0,0 @@
<?php
include_once('user_dao.php');
include_once($prefix.'assets/php/form.php');
class FormLogin extends Form {
//Constants:
const HTML5_EMAIL_REGEXP = '^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$';
//Atributes:
private $user; // User who is going to log-in.
private $reply; // Validation response
//Constructor:
public function __construct() {
parent::__construct('formLogin');
$this->reply = array();
}
//Methods:
//Returns validation response:
public function getReply() {
if(isset($_SESSION["login"])){
$name = strtoupper($_SESSION['nombre']);
$this->reply = "<h1>Bienvenido {$_SESSION['nombre']}</h1><hr />
<p>{$name}, has iniciado sesión correctamente.</p>
<p>Usa los botones para navegar</p>
<a href='../'><button>Inicio</button></a>
<a href='../../panel_{$_SESSION["rol"]}'><button>Mi Panel</button></a>\n";
}
else if(!isset($_SESSION["login"])){
$this->reply = "<h1>ERROR</h1><hr />".
"<p>El usuario o contraseña no son válidos.</p>
<p>Vuelve a intetarlo o regístrate si no lo habías hecho previamente.</p>
<a href='./'><button>Iniciar Sesión</button></a>
<form method='post' action='./'><button name='register' id='register'>Registro</button></form>\n";
}
return $this->reply;
}
//Process form:
public function processesForm($name, $pass) {
$login = true;
$name = $this->test_input($name);
$pass = $this->test_input($pass);
$username = isset($name) ? $name : null ;
if (!$username) {
$login = false;
}
/*
$email = isset($mail) ? $mail : null ;
if (!$email || !mb_ereg_match(self::HTML5_EMAIL_REGEXP, $email)) {
$login = false;
}
*/
$password = isset($pass) ? $pass : null ;
if (!$password || mb_strlen($password) < 4) {
$login = false;
}
if ($login) {
$bd = new UserDAO('complucine');
if($bd){
$this->user = $bd->selectUser($username, $password);
try{
if ($this->user) {
//$_SESSION["user"] = $this->user; //¿? No funcionan los getters con el objeto.
$_SESSION["nombre"] = $this->user->getName();
$_SESSION["rol"] = $this->user->getRol();
$_SESSION["login"] = $login;
}
}
catch (Exception $e){
$_SESSION["login"] = $login;
}
}
}
}
protected function test_input($input){
return htmlspecialchars(trim(strip_tags($input)));
}
}
?>

View File

@ -1,95 +0,0 @@
<?php
require_once('../assets/php/dao.php');
include_once('user_dto.php');
class UserDAO extends DAO {
//Constants:
private const _USER = "user";
private const _MANAGER = "manager";
private const _ADMIN = "admin";
//Attributes:
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Encrypt password with SHA254.
private function encryptPass($password){
//$password = hash('sha256', $password);
$password = password_hash($password, PASSWORD_DEFAULT);
return $password;
}
//Returns true if the password and hash match, or false otherwise.
public function verifyPass($password, $passwd){
return password_verify($password, $passwd);
}
//Create a new User.
public function createUser($id, $username, $email, $password, $rol){
$password = $this->encryptPass($password);
$sql = sprintf( "INSERT INTO users( id, username, email, passwd, rol)
VALUES ( '%s', '%s', '%s', '%s', '%s')",
$id, $username, $email, $password, $rol );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a query to check if the user name exists.
public function selectUser($username, $password){
$username = $this->mysqli->real_escape_string($username);
$sql = sprintf( "SELECT * FROM users WHERE username = '%s'", $username );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
$resul->data_seek(0);
while ($fila = $resul->fetch_assoc()) {
if($username === $fila['username'] && $this->verifyPass($password, $fila['passwd'])){
$user = $this->loadUser($fila['id'], $fila['username'], $fila['email'], $fila['passwd'], $fila['rol']);
}
}
//mysqli_free_result($selectUser);
$resul->free();
return $user;
}
//Returns a query to check if the user pass matches.
public function selectPass($username, $password){
$username = $this->mysqli->real_escape_string($username);
$password = $this->mysqli->real_escape_string($password);
$password = $this->encryptPass($password);
$sql = sprintf( "SELECT * FROM users WHERE username = '%s' AND passwd = '%s'", $username, $password);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
//return $this->mysqli->query($sql);
return $resul;
}
//Returns a query to get the user's data.
public function userData($id){
$sql = sprintf( "SELECT * FROM users WHERE id = '%d'", $id );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Create a new User Data Transfer Object.
public function loadUser($id, $username, $email, $password, $rol){
return new UserDTO($id, $username, $email, $password, $rol);
}
}
?>

View File

@ -1,37 +0,0 @@
<?php
include_once('users_dto_interface.php');
class UserDTO implements UsersInterface {
//Attributes:
private $_id; //User Id.
private $_username; //User name.
private $_email; //User email.
private $_password; //User password.
private $_rol; //Type of user: user | manager | admin. --> Será eliminado en la siguiente práctica para usar el modelo relacional de nuestra BD.
//Constructor:
function __construct($id, $username, $email, $password, $rol){
$this->_id = $id;
$this->_username = $username;
$this->_email = $email;
$this->_password = $password;
$this->_rol = $rol;
}
//Methods:
//Getters && Setters:
public function setId($id){ $this->_id = $id; }
public function getId(){ return $this->_id; }
public function setName($username){ $this->_username = $username; }
public function getName(){ return $this->_username; }
public function setEmail($email){ $this->_email = $email; }
public function getEmail(){ return $this->_email; }
public function setPass($passwd){ $this->_password = $passwd; }
public function getPass(){ return $this->_password; }
public function setRol($rol){ $this->_rol = $rol; }
public function getRol(){ return $this->_rol; }
}
?>

View File

@ -1,14 +0,0 @@
<?php
interface UsersInterface {
public function setId($id);
public function getId();
public function setName($username);
public function getName();
public function setEmail($email);
public function getEmail();
public function setPass($passwd);
public function getPass();
public function setRol($rol);
public function getRol();
}
?>

View File

@ -1,55 +0,0 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../assets/php/config.php');
//Change the view of the "Login page" to "Registration page":
require('login_register_view.php');
$view = new LoginRegisterView();
$isLogin = $view->getIsLogin();
$login = $view->getLogin();
$register = $view->getRegister();
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
<h1>Acceso</h1>
<hr />
</div>
<!-- Login / Register -->
<section id="login_register">
<div class ="row">
<?php
if($isLogin){
echo $login;
} else {
echo $register;
}
?>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,96 +0,0 @@
<?php
$isLogin = setLogin(true);
if(array_key_exists('register',$_POST)){
$isLogin = setLogin(false);
}
else if(array_key_exists('login',$_POST)){
$isLogin = setLogin(true);
}
function setLogin($set){
return $set;
}
$register = '<!-- Register -->
<div class="column left">
<h2>Registro</h2>
<form method="post" action="">
<div class="row">
<fieldset id="datos_personales">
<legend>Datos personales</legend>
<div class="_name">
<input type="text" name="name" id="name" value="" placeholder="Nombre" required/>
</div>
<div class="_email">
<input type="email" name="email" id="email" value="" placeholder="Email" required/>
</div>
<div class="_passwd">
<input type="password" name="pass" id="pass" value="" placeholder="Contraseña" required/>
</div>
<div class="_passwd">
<input type="password" name="repass" id="repass" value="" placeholder="Repita la contraseña" required/>
</div>
</fieldset>
<div class="verify">
<input type="checkbox" id="checkbox" name="terms" required>
<label for="terms">Marque esta casilla para verificar que ha leído nuestros términos y condiciones del servicio.</label>
</div>
<div class="actions">
<input type="submit" id="submit" value="Registrarse" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
</form>
</div>
<div class="column right">
<div class="code info">
<h2>¿Ya estás registrado?</h2>
<hr />
<p>Si dispones de una cuenta de usuario, no es necesario que rellenes este formulario nuevamente</p>
<p>Haz click en el botón para iniciar sesión.</p>
<form method="post">
<button type="submit" name="login" id="login">Inicia Sesión</button>
</form>
</div>
</div>'."\n";
$login = '<!-- Login -->
<div class="column left">
<div class="code info">
<h2>¿No tienes una cuenta?</h2>
<hr />
<p>Para crear una cuenta de usuario es necesario haber rellenado el formulario de registro previamente</p>
<p>Haz click en el botón para registrate.</p>
<form method="post">
<button type="submit" name="register" id="register">Registrate</button>
</form>
</div>
</div>
<div class="column right">
<h2>Iniciar Sesión</h2>
<form method="post" action="validate.php">
<div class="row">
<fieldset id="datos_personales">
<legend>Datos personales</legend>
<div class="_name">
<input type="text" name="name" id="name" value="" placeholder="Nombre" required/>
</div>
<!--
<div class="_email">
<input type="email" name="email" id="email" value="" placeholder="Email" required/>
</div>
-->
<div class="_passwd">
<input type="password" name="pass" id="pass" value="" placeholder="Contraseña" required/>
</div>
</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Iniciar Sesión" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
</form>
</div>'."\n";
?>

View File

@ -1,125 +0,0 @@
<?php
class LoginRegisterView {
//Atributes:
private $isLogin;
private $login;
private $register;
//Constructor:
public function __construct() {
$this->setIsLogin(true);
if(array_key_exists('register', $_POST)){
$this->setIsLogin(false);
}
else if(array_key_exists('login', $_POST)){
$this->setIsLogin(true);
}
$this->initLoginRegister();
}
//Methods:
private function setIsLogin($set){
return $this->isLogin = $set;
}
public function getIsLogin(){
return $this->isLogin;
}
public function getLogin(){
return $this->login;
}
public function getRegister(){
return $this->register;
}
private function initLoginRegister(){
$this->register = '<!-- Register -->
<div class="column left">
<h2>Registro</h2>
<form method="post" action="../register/register.php">
<div class="row">
<fieldset id="datos_personales">
<legend>Datos personales</legend>
<div class="_name">
<input type="text" name="name" id="name" value="" placeholder="Nombre" required/>
</div>
<div class="_email">
<input type="email" name="email" id="email" value="" placeholder="Email" required/>
</div>
<div class="_passwd">
<input type="password" name="pass" id="pass" value="" placeholder="Contraseña" required/>
</div>
<div class="_passwd">
<input type="password" name="repass" id="repass" value="" placeholder="Repita la contraseña" required/>
</div>
</fieldset>
<div class="verify">
<input type="checkbox" id="checkbox" name="terms" required>
<label for="terms"><a href ="../fdicines/terms_conditions/">Marque esta casilla para verificar que ha leído nuestros términos y condiciones del servicio.</a></label>
</div>
<div class="actions">
<input type="submit" id="submit" value="Registrarse" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
</form>
</div>
<div class="column right">
<div class="code info">
<h2>¿Ya estás registrado?</h2>
<hr />
<p>Si dispones de una cuenta de usuario, no es necesario que rellenes este formulario nuevamente</p>
<p>Haz click en el botón para iniciar sesión.</p>
<form method="post">
<button type="submit" name="login" id="login">Inicia Sesión</button>
</form>
</div>
</div>'."\n";
$this->login = '<!-- Login -->
<div class="column left">
<div class="code info">
<h2>¿No tienes una cuenta?</h2>
<hr />
<p>Para crear una cuenta de usuario es necesario haber rellenado el formulario de registro previamente</p>
<p>Haz click en el botón para registrate.</p>
<form method="post">
<button type="submit" name="register" id="register">Registrate</button>
</form>
</div>
</div>
<div class="column right">
<h2>Iniciar Sesión</h2>
<form method="post" action="validate.php">
<div class="row">
<fieldset id="datos_personales">
<legend>Datos personales</legend>
<div class="_name">
<input type="text" name="name" id="name" value="" placeholder="Nombre" required/>
</div>
<!--
<div class="_email">
<input type="email" name="email" id="email" value="" placeholder="Email" required/>
</div>
-->
<div class="_passwd">
<input type="password" name="pass" id="pass" value="" placeholder="Contraseña" required/>
</div>
</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Iniciar Sesión" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
</form>
</div>'."\n";
}
}
?>

View File

@ -1,59 +0,0 @@
<?php
session_start();
//HTML template:
require_once('../assets/php/template.php');
$template = new Template();
$prefix = $template->get_prefix();
//Login form validate:
require_once('./includes/formLogin.php');
$login = new FormLogin();
$login->processesForm($_POST["name"], $_POST["pass"]);
$reply = $login->getReply();
?>
<!DOCTYPE HTML>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
</div>
<!-- Reply -->
<section class="reply">
<div class ="row">
<div class="column side"></div>
<div class="column middle">
<div class="code info">
<?php
echo $reply;
?>
</div>
</div>
<div class="column side"></div>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,67 +0,0 @@
<?php
header("refresh:4;url=../");
//General Config File:
require_once('../assets/php/config.php');
//Session:
//session_start(); /* Inicializada en config.php */
unset($_SESSION);
session_destroy();
if(!isset($_SESSION["nombre"])){
$reply = "<h1>Se ha cerrado la sesión</h1><hr />".
"<p>Serás redirigido al inicio en unos segundos.<br />
Haz clic <a href='{$prefix}'>aquí</a> si tu navegador no te redirige automáticamente.</p>\n";
}
else{
$reply = "<h1>Ha ocurrido un problema y no hemos podido finalizar la sesión</h1>".
"<p>Serás redirigido al inicio en unos segundos.<br />
Haz clic <a href='{$prefix}'>aquí</a> si tu navegador no te redirige automáticamente.</p>\n";
}
?>
<!DOCTYPE HTML>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
</div>
<!-- Reply -->
<section class="reply">
<div class ="row">
<div class="column side"></div>
<div class="column middle">
<div class="code info">
<?php
echo $reply;
?>
</div>
</div>
<div class="column side"></div>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,30 +1,33 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../../assets/php/config.php');
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
Práctica 1 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<head>
<title>CompluCine | Miembros</title>
<meta charset="utf-8" />
<link id="estilo" rel="stylesheet" type="text/css" href="../assets/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="../img/favicon.png" />
</head>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<div class="header">
<a href="/"><img src="../img/favicon2.png" /> CompluCine</a> | Miembros
<div class="menu">
<a href="/">Inicio |</a>
<a href="../detalles/">Detalles |</a>
<a href="../bocetos/">Bocetos |</a>
<a href="#">Miembros |</a>
<a href="../planificacion/">Planificación |</a>
<a href="../contacto/">Contacto</a>
</div>
</div>
<!-- Main -->
<div class="main">
<div class="image"><img src="../../img/logo_trasparente.png" /></div>
<!-- Sub Header -->
<?php
$template->print_subheader();
?>
<div class="image"><img src="../img/logo_trasparente.png" /></div>
<section id="members_table">
<h1>Miembros</h1>
<hr />
@ -73,7 +76,7 @@
<section id="MEP">
<div class="zoom">
<div class="code">
<img src="../../img/mep.jpg" />
<img src="../img/mep.jpg" />
<p>~ Marco Expósito Pérez (marcoexp@ucm.es)</p>
<div class="blockquote bio">
<p>Aficionado a todo tipo de videojuegos, principalmente la saga Zelda. Tambien me gusta leer tanto literatura fantastica como mangas y veo anime asiduamente.</p>
@ -88,7 +91,7 @@
<section id="FMT">
<div class="zoom">
<div class="code">
<img src="../../img/fmt.jpg" />
<img src="../img/fmt.jpg" />
<p>~ Fernando Méndez (fernmend@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante de Ingeniería de Computadores en la Universidad Complutense de Madrid.</p>
@ -103,7 +106,7 @@
<section id="DMG">
<div class="zoom">
<div class="code">
<img src="../../img/dmg.jpg" />
<img src="../img/dmg.jpg" />
<p>~ Daniel Muñoz García (danimu03@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante del grado en ingeniería informática en la Universidad Complutense de Madrid. Aficionado a la ciberseguridad y las nuevas tecnologías.</p>
@ -120,7 +123,7 @@
<section id="IMT">
<div class="zoom">
<div class="code">
<img src="../../img/imt.jpg" />
<img src="../img/imt.jpg" />
<p>~ Ioan Marian Tulai (ioantula@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante con mucha ilusion y ganas de trabajar especialista en hardware.</p>
@ -135,7 +138,7 @@
<section id="ORP">
<div class="zoom">
<div class="code">
<img src="../../img/orp.jpg" />
<img src="../img/orp.jpg" />
<p>~ Óscar Ruiz de Pedro (oscarrui@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante de ingeniería de computadores en la Universidad Complutense de Madrid.</p>
@ -151,7 +154,7 @@
<section id="ARN">
<div class="zoom">
<div class="code">
<img src="../../img/arn.jpg" />
<img src="../img/arn.jpg" />
<p>~ Adrian Real del Noval (adrireal@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante de 3er año de Ingeniería de Computadores en la Universidad Complutense de Madrid.</p>
@ -166,9 +169,11 @@
<!-- Footer -->
<?php
$template->print_footer();
?>
<footer>
<div class="footer">
<p>© Práctica 1 | Sistemas Web 2021 </p>
</div>
</footer>
</body>

View File

@ -1,13 +0,0 @@
<?php
session_start();
include_once('./includes/film_dto.php');
include_once('./includes/formFilm.php');
if($_REQUEST['add_film']) {
$film = new FormFilm();
$film->processesForm(null, $_REQUEST['tittle'], $_REQUEST['duration'], $_REQUEST['language'], $_REQUEST['description'], "new");
$_SESSION['message'] = $film->getReply();
header("Location: ../panel_admin/index.php?state=mf");
}
?>

View File

@ -1,30 +0,0 @@
<?php
include_once('./includes/film_dto.php');
include_once('./includes/formFilm.php');
if($_REQUEST['delete_film']) {
echo'<div class="column size">
<h2>Editar pelicula</h2>
<form method="post" action="delete_film.php">
<div class="row">
<fieldset id="film_form">
<legend>¿Estás seguro de que quieres eliminar esta pelicula?</legend>
<input type="hidden" name="id" value='.$_REQUEST['id'].'/>
<p>Id: '.$_REQUEST['id'].' </p>
<p>Título: '.$_REQUEST['tittle'].' </p>
<p>Duración: '.$_REQUEST['duration'].' </p>
<p>Idioma: '.$_REQUEST['language'].' </p>
<p>Descripción: '.$_REQUEST['description'].' </p>
</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Eliminar" name="confirm_delete_film" class="primary" />
<input type="submit" id="submit" value="Cancelar" name="cancel_delete_film" class="primary" />
</div>
</div>
</form>
</div>';
}
?>

View File

@ -1,12 +0,0 @@
<?php
session_start();
include_once('./includes/film_dto.php');
include_once('./includes/formFilm.php');
if($_REQUEST['confirm_delete_film']) {
$film = new FormFilm();
$film->processesForm($_REQUEST['id'],null,null,null,null,"del");
$_SESSION['message'] = $film->getReply();
}
header("Location: ../panel_admin/index.php?state=mf");
?>

View File

@ -1,37 +0,0 @@
<?php
include_once('./includes/film_dto.php');
include_once('./includes/formFilm.php');
if($_REQUEST['edit_film']) {
echo'<div class="column size">
<h2>Editar pelicula</h2>
<form method="post" action="edit_film.php">
<div class="row">
<fieldset id="film_form">
<legend>Datos de pelicula</legend>
<input type="hidden" name="id" value='.$_REQUEST['id'].'/>
<div>
<input type="text" name="tittle" value='.$_REQUEST['tittle'].' />
</div>
<div>
<input type="number" name="duration" id="duration" value='.$_REQUEST['duration'].' />
</div>
<div>
<input type="text" name="language" id="language" value='.$_REQUEST['language'].' />
</div>
<div>
<input type="text" name="description" id="description" value='.$_REQUEST['description'].'/>
</div>
</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Editar" name="confirm_edit_film" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
</form>
</div>';
}
?>

View File

@ -1,11 +0,0 @@
<?php
session_start();
include_once('./includes/film_dto.php');
include_once('./includes/formFilm.php');
if($_REQUEST['confirm_edit_film']) {
$film = new FormFilm();
$film->processesForm($_REQUEST['id'], $_REQUEST['tittle'], $_REQUEST['duration'], $_REQUEST['language'], $_REQUEST['description'], "edit");
$_SESSION['message'] = $film->getReply();
header("Location: ../panel_admin/index.php?state=mf");
}
?>

View File

@ -1,103 +0,0 @@
<?php
include_once('film_dto.php');
$template = new Template();
$prefix = $template->get_prefix();
include_once($prefix.'assets/php/dao.php');
class Film_DAO extends DAO {
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Create a new Session.
public function createFilm($id, $tittle, $duration, $language,$description){
$sql = sprintf( "INSERT INTO `film`( `id`, `tittle`, `duration`, `language`,`description`)
VALUES ( '%d', '%s', '%d', '%s','%s')",
$id, $tittle, $duration, $language,$description);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a film data .
public function GetFilm($tittle,$language){
$sql = sprintf( "SELECT * FROM film WHERE film.tittle = '%s'AND film.language='%s'", $tittle,$language );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a query to get the film's data.
public function FilmData($id){
$sql = sprintf( "SELECT * FROM film WHERE id = '%d'", $id );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a query to get All the films.
public function allFilmData(){
$sql = sprintf( "SELECT * FROM film ");
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
while($fila=$resul->fetch_assoc()){
$films[] = $this->loadFilm($fila["id"], $fila["tittle"], $fila["duration"], $fila["language"], $fila["description"]);
}
$resul->free();
return $films;
}
//Returns a query to get all films tittles.
public function tittleFilmData(){
$sql = sprintf( "SELECT DISTINCT tittle FROM film ");
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a query to get all films descriptions.
public function descriptionFilmData(){
$sql = sprintf( "SELECT description FROM film ");
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
/*
public function addFilm($films) {
$resul = mysqli_query($this->mysqli, $this->createFilm($film.getId(), $film.getTittle(), $film.getDuration(), $film.getLanguage(), $film.getDescription())) or die ('Error into query database');
return $resul;
}
*/
//Deleted film by "id".
public function deleteFilm($id){
$sql = sprintf( "DELETE FROM film WHERE film.id = '%d' ;",$id);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Edit a film.
public function editFilm($id, $tittle, $duration, $language,$description){
$sql = sprintf( "UPDATE film SET tittle = '%s' , duration = '%d', language ='%s' , description ='%s'
WHERE film.id = '%d';",
$tittle, $duration, $language, $description, $id);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Create a new film Data Transfer Object.
public function loadFilm($id, $tittle, $duration, $language,$description){
return new Film_DTO( $id, $tittle, $duration, $language,$description);
}
}
?>

View File

@ -1,37 +0,0 @@
<?php
include_once('film_dto_interface.php');
class Film_DTO implements FilmDTO {
//Attributes:
private $_id; //Film ID.
private $_tittle; //Film tittle.
private $_duration; //Film duration.
private $_language; //Film language.
private $_description; //Film description.
//Constructor:
function __construct($id, $tittle, $duration, $language, $description){
$this->_id = $id;
$this->_tittle = $tittle;
$this->_duration = $duration;
$this->_language = $language;
$this->_description = $description;
}
//Methods:
//Getters && Setters:
public function setId($id){ $this->_id = $id; }
public function getId(){ return $this->_id; }
public function setTittle($tittle) {$this->_tittle = $tittle; }
public function getTittle(){return $this->_tittle;}
public function setDuration($duration){$this->_duration = $duration; }
public function getDuration() {return $this->_duration;}
public function setLanguage($language) {$this->_language = $language; }
public function getLanguage(){return $this->_language;}
public function setDescription($description){ $this->_description = $description;}
public function getDescription(){return $this->_description;}
}
?>

View File

@ -1,14 +0,0 @@
<?php
interface FilmDTO {
public function setId($id);
public function getId();
public function setTittle($tittle);
public function getTittle();
public function setDuration($duration);
public function getDuration();
public function setLanguage($language);
public function getLanguage();
public function setDescription($description);
public function getDescription();
}
?>

View File

@ -1,121 +0,0 @@
<?php
include_once('../assets/php/config.php');
include_once('film_dao.php');
include_once('film_dto.php');
include_once('../assets/php/form.php');
class FormFilm extends Form {
//Atributes:
private $correct; // Indicates if the session is correct.
private $reply; // Validation response
private $option;
private $array;
//Constructor:
public function __construct() {
parent::__construct('formFilm');
$this->reply = array();
}
public function getReply() {
if($this->correct){
if($this->option == "new"){
$this->reply = "<h1> Operacion realizada con exito </h1><hr />
<p> Se ha añadido la pelicula correctamente en la base de datos.</p>
<a href='../panel_admin/index.php?state=mf'><button>Cerrar Mensaje</button></a>";
}else if($this->option == "edit"){
$this->reply = "<h1> Operacion realizada con exito </h1><hr />
<p> Se ha editado la pelicula correctamente en la base de datos.</p>
<a href='../panel_admin/index.php?state=mf'><button>Cerrar Mensaje</button></a>";
}else if($this->option == "del"){
$this->reply = "<h1> Operacion realizada con exito </h1><hr />
<p> Se ha eliminado la pelicula correctamente en la base de datos.</p>
<a href='../panel_admin/index.php?state=mf'><button>Cerrar Mensaje</button></a>";
} else if($this->option == "show"){
$this->reply= $this->array;
}
} else {
$this->reply = "<h1> ERROR </h1><hr />
<p> Ha habido un error en la operacion. Revisa los datos introducidos</p>
<a href='../panel_admin/index.php?state=mf'><button>Panel Admin</button></a>";
}
return $this->reply;
}
//Process form:
public function processesForm($_id,$_tittle,$_duration,$_language,$_description, $_option) {
$this->correct = true;
$this->option = $_option;
$id= $this->test_input($_id);
$tittle=$this->test_input($_tittle);
$duration=$this->test_input($_duration);
$language=$this->test_input($_language);
$description=$this->test_input($_description);
//Habria que validar todo para que encaje en la base de datos
$bd = new Film_DAO('complucine');
if($bd){
if($this->option == "new"){
//Primero comprobar si los campos no son vacios y la duracion es mayor que 0
if(!empty($tittle)&&$duration>0&&!empty($language)&&!empty($description)){
// comprobar si existe una pelicula con el mismo titulo e idioma
$exist = $bd-> GetFilm($tittle,$language);
if( mysqli_num_rows($exist) != 0){
$this->correct =false;
}
else{
$bd->createFilm(null, $tittle,$duration,$language,$description);
}
$exist->free();
}
else{
$this->correct =false;
}
} else if ($this->option == "del"){
//Primero comprobar si existe una pelicula con el mismo id
$exist = $bd-> FilmData($id);
if( mysqli_num_rows($exist) == 1){
$bd->deleteFilm($id);
}
else{
$this->correct =false;
}
} else if ($this->option == "edit"){
//Primero comprobar si los campos no son vacios y la duracion es mayor que 0
if(!empty($tittle)&&$duration>0&&!empty($language)&&!empty($description)){
//comprobar si existe una pelicula con el mismo id
$exist = $bd-> FilmData($id);
if( mysqli_num_rows($exist) == 1){
$bd->editFilm($id,$tittle,$duration,$language,$description);
}
else{
$this->correct =false;
}
$exist->free();
}
else{
$this->correct =false;
}
} else if($this->option == "show") {
$this->array = $bd->allFilmData();
}
else {$this->correct = false;}
}
}
protected function test_input($input){
return htmlspecialchars(trim(strip_tags($input)));
}
}
?>

View File

@ -1,79 +0,0 @@
<!DOCTYPE HTML>
<?php
//General Config File:
include_once('../assets/php/config.php');
require_once('../panel_admin/panelAdmin.php');
$login=false;
if(isset($_SESSION["login"]) && $_SESSION["rol"] == "admin") $login = true;
if(isset($_GET['state'])) {
$panel = new Panel($_GET['state'], $login);
}
else {
$panel = new Panel('', $login);
}
// IMPORTANTE:
// VERIFICAR QUE ES ADMIN, SI NO, MOSTRAR MENSAJE DE "ERROR"
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<?php
$template->print_main();
?>
<!-- Panel -->
<div class="row">
<!-- Left Sidebar -->
<div class="sidebar left">
<ul>
<li>Ver como:</li>
<ul>
<li><a href="index.php?state=un">Usuario no registrado</a></li>
<li><a href="index.php?state=ur">Usuario registrado</a></li>
<li><a href="index.php?state=ag">Gerente</a></li>
</ul><br />
<li>Añadir/Editar/Eliminar:</li>
<ul>
<li><a href="index.php?state=mc">Cines</a></li>
<li><a href="index.php?state=mf">Películas</a></li>
<li><a href="index.php?state=md">Promociones</a></li>
<li><a href="index.php?state=mg">Gerente</a></li>
</ul>
</ul>
</div>
<!-- Contents -->
<div class="row">
<div class="column side"></div>
<div class="column middle">
<?php
$template->print_msg();
$panel->showPanel();
?>
</div>
<div class="column side"></div>
</div>
</div>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,67 +0,0 @@
<?php
$cinema = array(
"idCine" => "1234",
"name" => "cineJuan",
"address"=> "calle..",
"phone_number"=>"660099000",
);
$delete_cinemas='<!-- delete_cinemas -->
<div class="column left">
<h2>Lista de cines</h2>
<br></br>
<div class="row">
<table>
<tr>
<th>idCine</th>
<th>nombre</th>
<th>Dirección</th>
<th>Teléfono</th>
</tr>
<tr>
<td> '. $cinema['idCine'] .' </td>
<td> '. $cinema['name'] .' </td>
<td> '. $cinema['address'] .' </td>
<td> '. $cinema['phone_number'] .' </td>
</tr>
<tr>
</tr>
<tr>
</tr>
<tr>
</tr>
</table>
</div>
</div>'."\n";
$add_cinemas='<!-- Add_cinemas -->
<div class="column side">
<h2>Añadir o modificar cine</h2>
<form method="post" action="add_cinema.php">
<div class="row">
<fieldset id="datos_cine">
<legend>Datos del cine</legend>
<div class="_idCine">
<input type="text" name="idCine" id="idCine" value="" placeholder="IdCine" />
</div>
<div class="_name">
<input type="text" name="name" id="name" value="" placeholder="Nombre" />
</div>
<div class="_address">
<input type="text" name="address" id="address" value="" placeholder="Direccion" />
</div>
<div class="_phone_number">
<input type="number" name="phone_number" id="phone_number" value="" placeholder="Teléfono" />
</div>
</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Añadir cine" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
</form>
</div>'."\n";
?>

View File

@ -1,92 +0,0 @@
<?php
include_once('./includes/film_dto.php');
include_once('./includes/formFilm.php');
/*$f1 = new FilmDTO(1000,"Los vengadores",183,"español","");
$f2 = new FilmDTO(2001,"Mecernarios",140,"español","");
$f3 = new FilmDTO(3022,"Monster hunter",104,"español","");
$f4 = new FilmDTO(4560,"Godzilla vs kong",113,"inglés","");
$f5 = new FilmDTO(4260,"Tom y Jerry",131,"inglés","");
$f6 = new FilmDTO(4606,"Pequeños Detalles",127,"inglés","");
$film= array($f1, $f2, $f3, $f4,$f5,$f6); */
$film = new FormFilm();
$film->processesForm(null, null, null, null, null, "show");
function drawFilms($films){
echo "
<table class='alt'>
<thead>
<tr>
<th>Id</th>
<th>Título</th>
<th>Duracion</th>
<th>Idioma</th>
<th>Descripcion</th>
</tr>
</thead>
<tbody>";
foreach($films as $f){
echo '
<tr>
<td>'. $f->getId() .'</td>
<td>'. $f->getTittle() .'</td>
<td>'. $f->getDuration() .'</td>
<td>'. $f->getLanguage() .'</td>
<td>'. $f->getDescription().'</td>
<td>
<form method="post" action="./index.php?state=uf">
<input name="id" type="hidden" value="'.$f->getId().'">
<input name="tittle" type="hidden" value="'.$f->getTittle().'">
<input name="duration" type="hidden" value="'.$f->getDuration().'">
<input name="language" type="hidden" value="'.$f->getLanguage().'">
<input name="description" type="hidden" value="'.$f->getDescription().'">
<input type="submit" id="submit" value="Editar" name="edit_film" class="primary" />
</form>
</td>
<td>
<form method="post" action="./index.php?state=uf">
<input name="id" type="hidden" value="'.$f->getId().'">
<input name="tittle" type="hidden" value="'.$f->getTittle().'">
<input name="duration" type="hidden" value="'.$f->getDuration().'">
<input name="language" type="hidden" value="'.$f->getLanguage().'">
<input name="description" type="hidden" value="'.$f->getDescription().'">
<input type="submit" id="submit" value="Eliminar" name="delete_film" class="primary" />
</form>
</td>
</tr>';
}
echo'<tbody>
</table>';
}
function addFilm(){
echo'<div class="column size">
<h2>Añadir pelicula</h2>
<form method="post" action="update_film.php">
<div class="row">
<fieldset id="film_form">
<legend>Datos de pelicula</legend>
<div>
<input type="text" name="tittle" id="tittle" placeholder="Título" />
</div>
<div>
<input type="number" name="duration" id="duration" placeholder="Duración" />
</div>
<div>
<input type="text" name="language" id="language" placeholder="Idioma" />
</div>
<div>
<input type="text" name="description" id="description" placeholder="Descripción" />
</div>
</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Añadir pelicula" name="add_film" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
</form>
</div>';
}
drawFilms($film->getReply());
addFilm();
?>

View File

@ -1,30 +0,0 @@
<?php
class Panel {
public $state;
public $login;
function __construct($panel, $login){
$this->state = $panel;
$this->login= $login;
}
function showPanel() {
if($this->login){
switch($this->state) {
case 'uf': require_once('updateFilm.php');break;
case 'mc': /*require_once('manage_cinemas.php')*/;echo"<h1>En construcción</h1>"; break;
case 'mf': require_once('manage_films.php'); break;
case 'md': /*require_once('manage_discounts.php')*/;echo"<h1>En construcción</h1>"; break;
case 'mm': /*require_once('manage_managers.php')*/;echo"<h1>En construcción</h1>"; break;
case 'un': echo"<h1>En construcción</h1>"; break;
case 'ur': echo"<h1>En construcción</h1>";; break;
case 'ag': echo"<h1>En construcción</h1>";; break;
default: echo "<h1>BIENVENIDO AL PANEL DE ADMINISTRADOR</h1>"; break;
}
}
else {
echo "<h1>NO TIENES PERMISOS DE ADMINISTRADOR</h1>";
}
}
}
?>

View File

@ -1,76 +0,0 @@
<!DOCTYPE HTML>
// TO DO: Delete
<?php
session_start();
require_once('../assets/php/template.php');
$template = new Template();
// IMPORTANTE:
// VERIFICAR QUE ES ADMIN, SI NO, MOSTRAR MENSAJE DE "ERROR"
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<?php
$template->print_main();
?>
<!-- Panel -->
<div class="row">
<!-- Left Sidebar -->
<div class="sidebar left">
<ul>
<li>Funcionalidad:</li>
<ul>
<li>Subfuncionalidad</li>
<li>Subfuncionalidad</li>
</ul><br />
<li>Ver como:</li>
<ul>
<li>Usuario no registrado</li>
<li>Usuario registrado</li>
<li>Gerente</li>
</ul><br />
<li>Añadir/Editar/Eliminar:</li>
<ul>
<li>Cines</li>
<li>Películas</li>
<li>Promociones</li>
<li>Gerente</li>
</ul>
</ul>
</div>
<!-- Contents -->
<div class="row">
<div class="column side"></div>
<div class="column middle">
<h2>AQUÍ EL CONTENIDO DE CADA FUNCIONALIDAD.</h2>
<p>Debe variar dinámicamente según el botón del panel izquierdo que se pulse (sin cargar una página diferente, aunque tendrá que recargar el contido, eso sí).</p>
<p>Tendréis que rehacer todo el "PANEL" con PHP.</p>
</div>
<div class="column side"></div>
</div>
</div>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,59 +0,0 @@
<?php
require_once('../assets/php/dao.php');
include_once('./includes/formFilm.php');
if(isset($_POST['edit_film'])) {
echo'<div class="column size">
<h2>Editar pelicula</h2>
<form method="post" action="update_film.php">
<div class="row">
<fieldset id="film_form">
<legend>Datos de pelicula</legend>
<input type="hidden" name="id" value='.$_POST['id'].'/>
<div>
<input type="text" name="tittle" value="'.$_POST['tittle'].'" />
</div>
<div>
<input type="number" name="duration" id="duration" value='.$_POST['duration'].' />
</div>
<div>
<input type="text" name="language" id="language" value="'.$_POST['language'].'" />
</div>
<div>
<input type="text" name="description" id="description" value="'.$_POST['description'].'"/>
</div>
</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Editar" name="confirm_edit_film" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
</form>
</div>';
}
else if(isset($_POST['delete_film'])) {
echo'<div class="column size">
<h2>Editar pelicula</h2>
<form method="post" action="update_film.php">
<div class="row">
<fieldset id="film_form">
<legend>¿Estás seguro de que quieres eliminar esta pelicula?</legend>
<input type="hidden" name="id" value='.$_POST['id'].'/>
<p>Id: '.$_POST['id'].' </p>
<p>Título: '.$_POST['tittle'].' </p>
<p>Duración: '.$_POST['duration'].' </p>
<p>Idioma: '.$_POST['language'].' </p>
<p>Descripción: '.$_POST['description'].' </p>
</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Eliminar" name="confirm_delete_film" class="primary" />
<input type="submit" id="submit" value="Cancelar" name="cancel_delete_film" class="primary" />
</div>
</div>
</form>
</div>';
}
?>

View File

@ -1,22 +0,0 @@
<?php
include_once('./includes/film_dto.php');
include_once('./includes/formFilm.php');
if(isset($_POST['add_film'])) {
$film = new FormFilm();
$film->processesForm(null, $_POST['tittle'], $_POST['duration'], $_POST['language'], $_POST['description'], "new");
$_SESSION['message'] = $film->getReply();
}
else if(isset($_POST['confirm_delete_film'])) {
$film = new FormFilm();
$film->processesForm($_POST['id'],null,null,null,null,"del");
$_SESSION['message'] = $film->getReply();
}
else if(isset($_POST['confirm_edit_film'])) {
$film = new FormFilm();
$film->processesForm($_POST['id'], $_POST['tittle'], $_POST['duration'], $_POST['language'], $_POST['description'], "edit");
$_SESSION['message']= $film->getReply();
}
header('Location: ../panel_admin/index.php?state=mf');
?>

View File

@ -1,66 +0,0 @@
<?php
session_start();
require_once('../assets/php/template.php');
$template = new Template();
$action ="";
$id = null;
if(isset($_POST['new'])){
$action = "new";
} else if (isset($_POST['edit'])){
$action = "edit";
$id = $_POST["id"];
} else if (isset($_POST['del'])){
$action = "del";
$id = $_POST["id"];
}
//Login form validate:
require_once('./includes/formFilm.php');
$session = new FormFilm();
$session->processesForm($id, $_POST["title"], $_POST["duration"], $_POST["languaje"],$_POST["description"], $action);
$reply = $session->getReply();
?>
<!DOCTYPE HTML>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
</div>
<!-- Reply -->
<section class="reply">
<div class ="row">
<div class="column side"></div>
<div class="column middle">
<div class="code info">
<?php
echo $reply;
?>
</div>
</div>
<div class="column side"></div>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,139 +0,0 @@
<?php
//General Config File:
require_once('../assets/php/config.php');
include_once('./includes/formHall.php');
require_once('./includes/hall_dto.php');
require_once('./includes/session_dto.php');
include_once('./includes/session_dao.php');
require_once('../panel_admin/includes/film_dto.php');
include_once('../panel_admin/includes/film_dao.php');
$formHall = new FormHall();
$formHall->processesForm(null, $_SESSION["cinema"], null, null, "list");
$filmList = new Film_DAO('complucine');
if($filmList){
$films = $filmList->allFilmData();
}else {
$films = null;
}
if(isset($_REQUEST['option']) && $_REQUEST['option'] == 'edit') {
$_SESSION["hall"] = $_POST['hall'];
$_SESSION["date"] = $_POST['date'];
$_SESSION["start"] = $_POST['start'];
echo " <div class = \"column middle\">
<h2>Editar/Eliminar Sesion</h2>
<form method=\"post\" id=\"edit_ses\" action=\"validateSession.php\">
<div class=\"row\">
<fieldset id=\"datos\">
<legend>Datos</legend>
<div class=\"_price\">
<input type=\"number\" name=\"price\" id=\"price\" value=\"". $_POST['price'] ."\"min=\"0\" placeholder=\"Precio de la entrada\" required/>
</div>
<select name=\"hall\" class=\"button large\">";
foreach($formHall->getReply() as $r){
if($r->getNumber() == $_POST['hall']){
echo "<option value=\"". $r->getNumber() ." \"selected> Sala ". $r->getNumber() . "</option>";
}else{
echo "<option value=\"". $r->getNumber() ." \"> Sala ". $r->getNumber() . "</option>";
}
}
echo "
<div class=\"_format\">
<input type=\"text\" name=\"format\" id=\"format\" value=\"". $_POST['format'] ."\" placeholder=\"Formato\" required/>
</div>
</fieldset>
<fieldset id=\"Horario\">
<legend>Horario</legend>
<div class=\"_start_time\">
<input type=\"time\" name=\"start\" id=\"start_time\" value=\"". $_POST['start'] ."\" placeholder=\"Hora de inicio\" required/>
</div>
<div class=\"_date\">
<input type=\"date\" name=\"date\" id=\"date\" value=\"". $_POST['date'] ."\"Fecha de inicio\" required/>
</div>
</fieldset>
<div class=\"actions\">
<input type=\"submit\" name=\"edit\" value=\"Editar\" class=\"button\" />
<input type=\"reset\" id=\"reset\" value=\"Limpiar\" />
<input type=\"submit\" name=\"del\" value=\"Eliminar\" class=\"button\" />
</div>
</div>
</form>
<div>
<div class=\"column side\">
<select name=\"film\" form=\"edit_ses\" class=\"button large\">\n";
foreach($films as $f){
if($f->getId() == $_POST['idfilm']){
echo " <option value=\"". $f->getId() ." \"selected> " . $f->getId() . "|" . $f->getTittle() ." Idioma: " . $f->getLanguage() . "</option>\n";
}else{
echo " <option value=\"". $f->getId() ." \"> " . $f->getId() . "|" . $f->getTittle() ." Idioma: " . $f->getLanguage() . "</option>\n";
}
}
echo " </div>";
}
else{
echo " <div class = \"column middle\">
<h2>Crear Sesion</h2>
<form method=\"post\" id=\"new_ses\" action=\"validateSession.php\">
<div class=\"row\">
<fieldset id=\"datos\">
<legend>Datos</legend>
<input type=\"hidden\" name=\"cinema\" value =\"1\" />
<div class=\"_price\">
<input type=\"number\" name=\"price\" id=\"price\" min=\"0\" placeholder=\"Precio de la entrada\" required/>
</div>
<select name=\"hall\" class=\"button large\">";
foreach($formHall->getReply() as $r){
if($r->getNumber() == $_POST['hall']){
echo "
<option value=\"". $r->getNumber() ." \"selected> Sala ". $r->getNumber() . "</option>";
}else{
echo "
<option value=\"". $r->getNumber() ." \"> Sala ". $r->getNumber() . "</option>";
}
}
echo "
<div class=\"_format\">
<input type=\"text\" name=\"format\" id=\"format\" value=\"\" placeholder=\"Formato\" required/>
</div>
</fieldset>
<fieldset id=\"Horario\">
<legend>Horario</legend>
<div class=\"_start_time\">
<input type=\"time\" name=\"start\" id=\"start_time\" value=\"\" placeholder=\"Hora de inicio\" required/>
</div>
<div class=\"_date\">
<input type=\"date\" name=\"date\" id=\"date\" value=\"". $_POST['date'] . "\"Fecha de inicio\" required/>
</div>
<div class=\"_repeat\">
<br> Introducir un numero para añadir esta sesion a los futuros X dias
<input type=\"number\" name=\"repeat\" id=\"repeat\" title=\"Repetir esta sesion durante X dias\" min=\"0\" max=\"31\" placeholder=\"Repetir X dias\"/>
</div>
</fieldset>
<div class=\"actions\">
<input type=\"submit\" name=\"new\" value=\"Añadir\" class=\"primary\" />
<input type=\"reset\" id=\"reset\" value=\"Limpiar\" />
</div>
</div>
</form>
<div>
<div class=\"column side\">
<select name=\"film\" form=\"new_ses\" class=\"button large\">\n";
foreach($films as $f){
echo " <option value=\"". $f->getId() ." \"> " . $f->getId() . "|" . $f->getTittle() ." Idioma: " . $f->getLanguage() . "</option>\n";
}
echo " </div>";
}
?>

View File

@ -1,5 +0,0 @@
<div class="column middle">
<h1> Bienvenido al panel de Gerente </h1>
<br>
<p> Espero que este pasando un buen dia <p>
</div>

View File

@ -1,93 +0,0 @@
<?php
include_once('hall_dao.php');
include_once('../assets/php/form.php');
class FormHall extends Form {
//Atributes:
private $correct;
private $reply;
private $option;
private $halls;
//Constructor:
public function __construct() {
parent::__construct('formSession');
$this->reply = array();
}
//Methods:
//Returns validation response:
public function getReply() {
if($this->correct){
if($this->option == "new"){
$this->reply = "<h1> Operacion realizada con exito </h1><hr />
<p> Se ha añadido la sala correctamente en la base de datos.</p>
<a href='../panel_manager/index.php'><button>Panel Gerente</button></a>";
}else if($this->option == "edit"){
$this->reply = "<h1> Operacion realizada con exito </h1><hr />
<p> Se ha editado la sala correctamente en la base de datos.</p>
<a href='../panel_manager/index.php'><button>Panel Gerente</button></a>";
}else if($this->option == "del"){
$this->reply = "<h1> Operacion realizada con exito </h1><hr />
<p> Se ha eliminado la sala correctamente en la base de datos.</p>
<a href='../panel_manager/index.php'><button>Panel Gerente</button></a>";
}else if($this->option == "list"){
$this->reply = $this->halls;
}
} else {
$this->reply = "<h1> ERROR </h1><hr />
<p> Ha habido un error en la operacion. Revisa los datos introducidos o ponte en contacto con el administrador de la base de datos.</p>
<a href='../panel_manager/index.php'><button>Panel Gerente</button></a>";
}
return $this->reply;
}
//Process form:
public function processesForm($number, $cinema, $rows, $cols, $option) {
$this->option = $option;
$this->correct = true;
$bd = new HallDAO('complucine');
if($bd ){
if($option == "list"){
$this->halls = $bd->getAllHalls($cinema);
}else {
/* TODO
$start = date('H:i:s', strtotime( $start ) );
if($option == "new"){
$selectSession = $bd->selectSession($cinema, $hall, $start, $date);
if($selectSession && $selectSession->num_rows >= 1) {
$this->correct = false;
} else{
$bd->createSession(null, $film, $hall,$cinema, $date, $start, $price, $format);
}
mysqli_free_result($selectSession);
} else if ($option == "del"){
$bd->deleteSession($id);
} else if ($option == "edit"){
$bd->editSession($id, $film, $hall, $cinema, $date, $start, $price, $format);
}
if($repeat > "0"){
$repeat--;
$date = date('Y-m-d', strtotime( $date. ' +1 day') );
$this->processesForm($film, $hall, $cinema, $date, $start, $price, $format, $repeat);
}
*/
}
} else {$this->correct = false;}
}
}
?>

View File

@ -1,83 +0,0 @@
<?php
include_once('session_dao.php');
include_once('../assets/php/form.php');
//Receive data from froms and prepare the correct response
class FormSession extends Form {
//Atributes
private $correct;
private $reply;
private $option;
private $sessions;
//Constructor:
public function __construct() {
parent::__construct('formSession');
$this->reply = array();
}
//Methods:
public function getReply() {
if($this->correct){
if($this->option == "new"){
$this->reply = "<h1> Operacion realizada con exito </h1><hr />
<p> Se ha añadido la sesion correctamente en la base de datos.</p>
<a href='../panel_manager/index.php'><button>Panel Gerente</button></a>";
}else if($this->option == "edit"){
$this->reply = "<h1> Operacion realizada con exito </h1><hr />
<p> Se ha editado la sesion correctamente en la base de datos.</p>
<a href='../panel_manager/index.php'><button>Panel Gerente</button></a>";
}else if($this->option == "del"){
$this->reply = "<h1> Operacion realizada con exito </h1><hr />
<p> Se ha eliminado la sesion correctamente en la base de datos.</p>
<a href='../panel_manager/index.php'><button>Panel Gerente</button></a>";
}else if($this->option == "list"){
$this->reply = $this->sessions;
}
} else if($this->correct == false) {
$this->reply = "<h1> ERROR </h1><hr />
<p> Ha habido un error en la operacion. Revisa los datos introducidos o ponte en contacto con el administrador de la base de datos.</p>
<a href='../panel_manager/index.php'><button>Panel Gerente</button></a>";
}
return $this->reply;
}
public function processesForm($film, $hall, $cinema, $date, $start, $price, $format, $repeat, $option) {
$this->option = $option;
$this->correct = true;
$bd = new sessionDAO('complucine');
if($bd ){
if($option == "list"){
$this->sessions = $bd->getAllSessionsFromACinemaHallDate($cinema, $hall, $date);
}else {
if($option == "new"){
$searchSession = $bd->searchSession($cinema, $hall, $start, $date);
if($searchSession) {
$this->correct = false;
} else{
$bd->createSession(null,$film, $hall,$cinema, $date, $start, $price, $format);
}
} else if ($option == "del"){
$bd->deleteSession($hall, $cinema, $date, $start);
} else if ($option == "edit"){
$bd->editSession($film, $hall, $cinema, $date, $start, $price, $format);
}
if($repeat > "0"){
$repeat--;
$date = date('Y-m-d', strtotime( $date. ' +1 day') );
$this->processesForm($film, $hall, $cinema, $date, $start, $price, $format, $repeat, $option);
}
}
} else {$this->correct = false;}
}
}
?>

View File

@ -1,73 +0,0 @@
<?php
require_once('../assets/php/dao.php');
include_once('hall_dto.php');
class HallDAO extends DAO {
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Create a new Hall.
public function createHall($number, $idcinema, $numCol, $numRows){
$sql = sprintf( "INSERT INTO `hall`( `number`, `idcinema`, `numrows`, `numcolumns`)
VALUES ( '%d', '%d', '%i', '%i')",
$number, $idcinema, $numRows, $numCol );
return $sql;
}
//Returns a query to get the halls data.
public function getAllHalls($cinema){
$sql = sprintf( "SELECT * FROM hall WHERE
idcinema = '%s'",
$cinema);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
$hall = null;
while($fila=mysqli_fetch_array($resul)){
$hall[] = $this->loadHall($fila["number"], $fila["idcinema"], $fila["numrows"], $fila["numcolumns"]);
}
mysqli_free_result($resul);
return $hall;
}
//Create a new Hall Data Transfer Object.
public function loadHall($number, $idcinema, $numrows, $numcolumns){
return new HallDTO($number, $idcinema, $numrows, $numcolumns);
}
//Edit Hall.
public function editHall($id, $idcinema, $numCol, $numRows){
$sql = sprintf( "UPDATE `hall`
SET `numrows` = '%i' , `numcolumns` = '%i'
WHERE `hall`.`number` = '%d' AND `hall`.`idcinema` = '%d';",
$numRows,$numCol,$id, $idcinema );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Delete Hall.
public function deleteHall($id, $idcinema){
$sql = sprintf( "DELETE FROM `hall` WHERE `hall`.`number` = '%d' AND `hall`.`idcinema` = '%d';",$id,$idcinema);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
}
?>

View File

@ -1,38 +0,0 @@
<?php
include_once('hall_dto_interface.php');
class HallDTO implements HallsDTO {
//Attributes:
private $_number; //Room number.
private $_idcinema; //Cinema Id
private $_numRows; //Num rows.
private $_numCol; //Num columns.
//Constructor:
function __construct($number, $idcinema, $numRows, $numCol){
$this->_number = $number;
$this->_idcinema = $idcinema;
$this->_numRows = $numRows;
$this->_numCol = $numCol;
}
//Methods:
//Getters && Setters:
public function setNumber($number){ $this->_number = $number; }
public function getNumber(){ return $this->_number; }
public function setIdcinema($idcinema){ $this->_idcinema = $idcinema; }
public function getIdcinema(){ return $this->_idcinema; }
public function setNumRows($numRows){ $this->_numRows = $numRows; }
public function getNumRows(){ return $this->_numRows; }
public function setNumCol($numCol){ $this->_numCol = $numCol; }
public function getNumCol(){ return $this->_numCol; }
}
?>

View File

@ -1,12 +0,0 @@
<?php
interface HallsDTO {
public function setNumber($number);
public function getNumber();
public function setIdcinema($idcinema);
public function getIdcinema();
public function setNumCol($numCol);
public function getNumCol();
public function setNumRows($numRows);
public function getNumRows();
}
?>

View File

@ -1,53 +0,0 @@
<?php
require('../panel_admin/includes/film_dao.php');
class ListFilms{
//Atributes:
private $array;
private $size;
//Constructor:
public function __construct() {
$this->array = array();
$this->updateArray();
}
//Methods:
//Returns the whole session array
public function getArray() {
return $this->array;
}
//Returns the value i from the array
public function getiArray($i) {
if($i < $size){
return $this->array($i);
} else {
return null;
}
}
//Update the array with new values
public function updateArray() {
$bd = new Film_DAO('complucine');
if($bd){
$selectFilms = $bd->allFilmData();
$selectFilms->data_seek(0);
$this->size = 0;
while ($fila = $selectFilms->fetch_assoc()) {
$this->array[]= new Film_DTO($fila['id'], $fila['tittle'], $fila['duration'], $fila['language'], "no hay descripcion en la base de datos");
$this->size++;
}
mysqli_free_result($selectFilms);
}
}
}
?>

View File

@ -1,55 +0,0 @@
<?php
include_once('session_dao.php');
class ListSessions{
//Atributes:
private $array;
private $size;
//Constructor:
public function __construct() {
$this->array = array();
}
//Methods:
//Returns the whole session array
public function getArray() {
return $this->array;
}
//Returns the value i from the array
public function getiArray($i) {
if($i < $size){
return $this->array($i);
} else {
return null;
}
}
//Update the array with new values
public function filterList($cinema, $hall, $date) {
$date = date('Y-m-d', strtotime( $date ) );
$bd = new sessionDAO('complucine');
if($bd){
$selectSession = $bd->selectSession($cinema, $hall, null, $date);
$selectSession->data_seek(0);
$this->size = 0;
while ($fila = $selectSession->fetch_assoc()) {
$this->array[]= new SessionDTO($fila['id'], $fila['idfilm'], $fila['idhall'], $fila['idcinema'], $fila['date'], date('H:i', strtotime( $fila['start_time'])) , $fila['seat_price'], $fila['format']);
$this->size++;
}
mysqli_free_result($selectSession);
}
}
}
?>

View File

@ -1,39 +0,0 @@
<?php
require_once('../assets/php/dao.php');
include_once('room_dto.php');
class RoomDAO extends DAO {
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Create a new Room.
public function createRoom($id, $idcinema, $numCol, $numRows){
$sql = sprintf( "INSERT INTO rooms( id, idcinema, numCol, numRows)
VALUES ( '%s', '%s', '%i', '%i')",
$id, $idcinema, $numCol, $numRows );
return $sql;
}
//Returns a query to get the room's data.
public function roomData($id){
$sql = sprintf( "SELECT * FROM rooms WHERE id = '%d'", $id );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Create a new Room Data Transfer Object.
public function loadRoom($id, $idcinema, $numCol, $numRows){
return new RoomDTO($id, $idcinema, $numCol, $numRows);
}
}
?>

View File

@ -1,37 +0,0 @@
<?php
include_once('room_dto_interface.php');
class RoomDTO implements RoomsDTO {
//Attributes:
private $_id; //Room Id.
private $_idcinema; //Cinema Id
private $_numCol; //Num columns.
private $_numRows; //Num rows.
//Constructor:
function __construct($id, $idcinema, $numCol, $numRows){
$this->_id = $id;
$this->_idcinema = $idcinema;
$this->_numCol = $numCol;
$this->_numRows = $numRows;
}
//Methods:
//Getters && Setters:
public function setId($id){ $this->_id = $id; }
public function getId(){ return $this->_id; }
public function setIdcinema($idcinema){ $this->_idcinema = $idcinema; }
public function getIdcinema(){ return $this->_idcinema; }
public function setNumCol($numCol){ $this->_numCol = $numCol; }
public function getNumCol(){ return $this->_numCol; }
public function setNumRows($numRows){ $this->_numRows = $numRows; }
public function getNumRows(){ return $this->_numRows; }
}
?>

View File

@ -1,12 +0,0 @@
<?php
interface RoomsDTO {
public function setId($id);
public function getId();
public function setIdcinema($idcinema);
public function getIdcinema();
public function setNumCol($numCol);
public function getNumCol();
public function setNumRows($numRows);
public function getNumRows();
}
?>

View File

@ -1,106 +0,0 @@
<?php
require_once('../assets/php/dao.php');
include_once('session_dto.php');
class SessionDAO extends DAO {
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
public function createSession($id, $idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format){
$format = $this->mysqli->real_escape_string($format);
$date = date('Y-m-d', strtotime( $date ) );
$startTime = date('H:i:s', strtotime( $startTime ) );
$sql = sprintf( "INSERT INTO `session` (`id`, `idfilm`, `idhall`, `idcinema`, `date`, `start_time`, `seat_price`, `format`)
VALUES ('%d', '%d', '%d', '%d', '%s', '%s', '%d', '%s')",
$id, $idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $sql;
}
//Returns a query to get the session's data.
public function sessionData($id){
$sql = sprintf( "SELECT * FROM `session` WHERE id = '%d'", $id );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database en sessionData con la id '. $id);
return $resul;
}
//Returns the count of the session searched
public function searchSession($cinema, $hall, $startTime, $date){
$date = date('Y-m-d', strtotime( $date ) );
$startTime = date('H:i:s', strtotime( $startTime ) );
$sql = sprintf( "SELECT COUNT(*) FROM session WHERE
idcinema = '%s' AND idhall = '%s' AND date = '%s' AND start_time = '%s'",
$cinema, $hall, $date, $startTime);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
$session = null;
$session = mysqli_fetch_array($resul);
mysqli_free_result($resul);
return $session[0];
}
//Returns a query to get all the session's data.
public function getAllSessionsFromACinemaHallDate($cinema, $hall, $date){
$date = date('Y-m-d', strtotime( $date ) );
$sql = sprintf( "SELECT * FROM session WHERE
idcinema = '%s' AND idhall = '%s' AND date = '%s'",
$cinema, $hall, $date);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
$sessions = null;
while($fila=mysqli_fetch_array($resul)){
$sessions[] = $this->loadSession($fila["id"], $fila["idfilm"], $fila["idhall"], $fila["idcinema"], $fila["date"], $fila["start_time"], $fila["seat_price"], $fila["format"]);
}
mysqli_free_result($resul);
return $sessions;
}
public function editSession($idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format){
$format = $this->mysqli->real_escape_string($format);
$date = date('Y-m-d', strtotime( $date ) );
$startTime = date('H:i:s', strtotime( $startTime ) );
$sql = sprintf( "UPDATE `session`
SET `idfilm` = '%d' , `idhall` = '%d', `idcinema` = '%d', `date` = '%s',
`start_time` = '%s', `seat_price` = '%d', `format` = '%s'
WHERE
idcinema = '%s' AND idhall = '%s' AND date = '%s' AND start_time = '%s'",
$idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format, $_SESSION["cinema"],$_SESSION["hall"],$_SESSION["date"],$_SESSION["start"]);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
public function deleteSession($hall, $cinema, $date, $startTime){
$sql = sprintf( "DELETE FROM `session` WHERE
idcinema = '%s' AND idhall = '%s' AND date = '%s' AND start_time = '%s'",
$cinema, $hall, $date, $startTime);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Create a new Session Data Transfer Object.
public function loadSession( $id, $idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format){
return new SessionDTO( $id, $idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format);
}
}
?>

View File

@ -1,56 +0,0 @@
<?php
include_once('session_dto_interface.php');
class SessionDTO implements SessionsDTO {
//Attributes:
private $_id;
private $_idfilm;
private $_idhall;
private $_idcinema;
private $_date;
private $_startTime;
private $_seatPrice;
private $_format;
//Constructor:
function __construct($id, $idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format){
$this->_id = $id;
$this->_idfilm = $idfilm;
$this->_idhall = $idhall;
$this->_idcinema = $idcinema;
$this->_date = $date;
$this->_startTime = $startTime;
$this->_seatPrice = $seatPrice;
$this->_format = $format;
}
//Methods:
//Getters && Setters:
public function setId($id){ $this->_id = $id; }
public function getId(){ return $this->_id; }
public function setIdfilm($idfilm){ $this->_idfilm = $idfilm; }
public function getIdfilm(){ return $this->_idfilm; }
public function setIdhall($idhall){ $this->_idhall = $idhall; }
public function getIdhall(){ return $this->_idhall; }
public function setIdcinema($cinema){ $this->_idcinema = $idcinema; }
public function getIdcinema(){ return $this->_idcinema; }
public function setDate($date){ $this->_date = $date; }
public function getDate(){ return $this->_date; }
public function setStartTime($startTime){ $this->_startTime = $startTime; }
public function getStartTime(){ return $this->_startTime; }
public function setSeatPrice($seatPrice){ $this->_seatPrice = $seatPrice; }
public function getSeatPrice(){ return $this->_seatPrice; }
public function setFormat($format){ $this->_format = $format; }
public function getFormat(){ return $this->_format; }
}
?>

View File

@ -1,20 +0,0 @@
<?php
interface SessionsDTO {
public function setId($id);
public function getId();
public function setIdfilm($idfilm);
public function getIdfilm();
public function setIdhall($film);
public function getIdhall();
public function setIdcinema($cinema);
public function getIdcinema();
public function setDate($date);
public function getDate();
public function setStartTime($startTime);
public function getStartTime();
public function setSeatPrice($seatPrice);
public function getSeatPrice();
public function setFormat($format);
public function getFormat();
}
?>

View File

@ -1,68 +0,0 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../assets/php/config.php');
include_once('panel_manager.php');
$login = false;
if(isset($_SESSION["login"]) && $_SESSION["rol"] == "manager") $login = true;
if(isset($_REQUEST['state'])) {
$panel = new Panel($_REQUEST['state'],$login);
}
else {
$panel = new Panel('',$login);
}
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<?php
$template->print_main();
?>
<!-- Panel -->
<div class="row">
<!--Left Sidebar -->
<div class="sidebar left">
<ul>
<li>Ver como:</li>
<ul>
<li><a href='./?state=us_u'>Usuario no registrado</a></li>
<li><a href='./?state=us_r'>Usuario registrado</a></li>
</ul><br />
<li>Añadir/Editar/Eliminar:</li>
<ul>
<li><a href='./?state=rooms'>Salas</a></li>
<li><a href='./?state=sessions'>Sesiones</a></li>
</ul>
</ul>
</div>
<!--Contents -->
<div class="row">
<?php $panel->showPanel(); ?>
</div>
</div>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,35 +0,0 @@
<?php
require('./includes/hall_dto.php');
$r1 = new HallDTO(0,20,20,30);
$r2 = new HallDTO(1,10,30,30);
$r3 = new HallDTO(2,30,10,30);
$r4 = new HallDTO(3,15,15,30);
$rooms = array($r1, $r2, $r3, $r4);
function drawHalls($ros){
echo " <p> Esta vista esta en desarrollo <p>
<div class=\"column middle\">
<table class='alt'>
<thead>
<tr>
<th>Sala</th>
<th>Opción</th>
</tr>
</thead>
<tbody>";
foreach($ros as $r){
echo "
<tr>
<td><a href=\"\" class='button'>Sala". $r->getNumber() ."</a></td>
<td><a href=\"index.php?state=rooms\" class='button'>Editar</a></td>
</tr>";
}
echo "<tbody>
</table>\n";
echo "<a href=\"index.php?state=rooms\" class='button large'>Añadir</a>
</div>";
}
drawHalls($rooms);
?>

View File

@ -1,110 +0,0 @@
<?php
//General Config File:
require_once('../assets/php/config.php');
include_once('./includes/hall_dto.php');
include_once('./includes/formHall.php');
include_once('./includes/session_dto.php');
include_once('./includes/formSession.php');
include_once('../panel_admin/includes/film_dto.php');
include_once('../panel_admin/includes/film_dao.php');
$formSession = new FormSession();
$formHall = new FormHall();
$placeholder_date = date("Y-m-d");
$placeholder_hall = "1";
$_SESSION["cinema"] = "1";
if(isset($_POST['filter'])) {
$placeholder_date = $_POST["date"];
$placeholder_hall = $_POST["hall"];
}
$formHall->processesForm(null, $_SESSION["cinema"], null, null, "list");
$formSession->processesForm(null, $placeholder_hall, $_SESSION["cinema"], $placeholder_date, null, null, null, null, "list");
echo"
<!--Session Filter -->
<div class = \"column middle\">
<form method=\"post\" id=\"addfilter\">
<input type=\"date\" name=\"date\" value=\"". $placeholder_date . "\" min=\"2021-01-01\" max=\"2031-12-31\">
<select name=\"hall\" class=\"button large\">";
foreach($formHall->getReply() as $r){
if($r->getNumber() == $placeholder_hall){
echo "
<option value=\"". $r->getNumber() ." \"selected> Sala ". $r->getNumber() . "</option>";
}else{
echo "
<option value=\"". $r->getNumber() ." \"> Sala ". $r->getNumber() . "</option>";
}
}
echo "
</select>
<input type=\"submit\" name=\"filter\" value=\"Filtrar\" class=\"button large\" />
</form>
</div>";
function drawSessions($sessions,$bd){
echo "
<!--Session List -->
<div class=\"column side\">
<table class='alt'>
<thead>
<tr>
<th>Hora</th>
<th>Pelicula</th>
<th>Formato</th>
<th>Precio</th>
</tr>
</thead>
<tbody>";
foreach($sessions as $s){
$film = mysqli_fetch_array($bd->FilmData($s->getIdfilm()));
echo "
<tr>
<td> " . date('H:i', strtotime( $s->getStartTime())) . "</a></td>
<td> " . str_replace('_', ' ', $film["tittle"]) . "</a></td>
<td> " . $s->getFormat() . "</a></td>
<td> " . $s->getSeatPrice() . "</a></td>
<form method=\"post\" action=\"./?state=edit_session&option=edit\">
<input name=\"idfilm\" type=\"hidden\" value=\"".$s->getIdfilm()."\">
<input name=\"hall\" type=\"hidden\" value=\"".$s->getIdhall()."\">
<input name=\"date\" type=\"hidden\" value=\"".$s->getDate()."\">
<input name=\"start\" type=\"hidden\" value=\"".$s->getStartTime()."\">
<input name=\"price\" type=\"hidden\" value=\"".$s->getSeatPrice()."\">
<input name=\"format\" type=\"hidden\" value=\"".$s->getFormat()."\">
<td> <input type=\"submit\" id=\"submit\" value=\"Editar\" class=\"button\" > </td>
</form>
</tr>";
}
echo "
<tbody>
</table>
<input type=\"submit\" name=\"submit\" form=\"addfilter\" value=\"Añadir\" class=\"button large\" formaction=\"./?state=edit_session&option=new\">
</div>\n";
}
if($formSession->getReply()){
$bd = new Film_DAO('complucine');
if($bd){
drawSessions($formSession->getReply(), $bd);
} else {
echo "<div class=\"column side\">
<p> Hay un error en la conexion </p>
</div>";
}
} else {
echo "
<div class=\"column side\">
<p> No hay ninguna session en la sala ". $placeholder_hall . " el dia ". $placeholder_date . "</p>
<input type=\"submit\" name=\"submit\" form=\"addfilter\" value=\"Añadir\" class=\"button large\" formaction=\"./?state=edit_session&option=new\">
</div>\n";
}
?>

View File

@ -1,28 +0,0 @@
<?php
class Panel {
public $state;
public $login;
function __construct($panel,$log){
$this->state = $panel;
$this->login = $log;
}
function showPanel() {
if($this->login){
switch($this->state) {
case 'us_u': echo "<p> Esta vista no esta implementada </p>"; break;
case 'us_r': echo "<p> Esta vista no esta implementada </p>"; break;
case 'rooms': require_once('manage_rooms.php'); break;
case 'sessions': require_once('manage_sessions.php'); break;
case 'edit_session': require_once('edit_sessions.php'); break;
default: require('hello_panel.php'); break;
}
}
else{
echo "<h1> Error no tienes los permisos necesarios de gerente</h1>";
}
}
}
?>

View File

@ -1,30 +0,0 @@
<?php
class RoomDTO {
//Attributes:
private $_id; //Room Id.
private $_numCol; //Num columns.
private $_numRows; //Num rows.
//Constructor:
function __construct($id, $numCol, $numRows){
$this->_id = $id;
$this->_numCol = $numCol;
$this->_numRows = $numRows;
}
//Methods:
//Getters && Setters:
public function setId($id){ $this->_id = $id; }
public function getId(){ return $this->_id; }
public function setNumCol($numCol){ $this->_numCol = $numCol; }
public function getNumCol(){ return $this->_numCol; }
public function setNumRows($numRows){ $this->_numRows = $numRows; }
public function getNumRows(){ return $this->_numRows; }
}
?>

View File

@ -1,44 +0,0 @@
<?php
class SessionDTO {
//Attributes:
private $_id; //Session Id.
private $_date; //Session date.
private $_startTime; //Session start time.
private $_seatPrice; //Seat price.
private $_format; //Type of film: 3D | 4D | normal | subtitle | mute.
private $_film; //Object film, ESTO HAY QUE CAMBIARLO? POR UN OBJETO TIPO PELICULA
//Constructor:
function __construct($id, $date, $startTime, $seatPrice, $format, $film){
$this->_id = $id;
$this->_date = $date;
$this->_startTime = $startTime;
$this->_seatPrice = $seatPrice;
$this->_format = $format;
$this->_film = $film;
}
//Methods:
//Getters && Setters:
public function setId($id){ $this->_id = $id; }
public function getId(){ return $this->_id; }
public function setDate($date){ $this->_date = $date; }
public function getDate(){ return $this->_date; }
public function setStartTime($startTime){ $this->_startTime = $startTime; }
public function getStartTime(){ return $this->_startTime; }
public function setSeatPrice($seatPrice){ $this->_seatPrice = $seatPrice; }
public function getSeatPrice(){ return $this->_seatPrice; }
public function setFormat($format){ $this->_format = $format; }
public function getFormat(){ return $this->_format; }
public function setFilm($film){ $this->_film = $film; }
public function getFilm(){ return $this->_film; }
}
?>

View File

@ -1,4 +0,0 @@
<h1> Vista de usuario registrado </h1>
<br>
<p> Esta vista aun no esta implementada </p>

View File

@ -1,3 +0,0 @@
<h1> Vista de usuario no registrado </h1>
<br>
<p> Esta vista aun no esta implementada </p>

View File

@ -1,74 +0,0 @@
<?php
session_start();
//Depuración (BORRAR):
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
//HTML template:
require_once('../assets/php/template.php');
$template = new Template();
$action ="";
$id = null;
if(isset($_POST['new'])){
$action = "new";
} else if (isset($_POST['edit'])){
$action = "edit";
$id = $_POST["id"];
} else if (isset($_POST['del'])){
$action = "del";
$id = $_POST["id"];
}
//Login form validate:
require_once('./includes/formSession.php');
$session = new FormSession();
$session->processesForm($id, $_POST["film"], $_POST["hall"], $_POST["cinema"],$_POST["date"],$_POST["start"],$_POST["price"],$_POST["format"],$_POST["repeat"], $action);
$reply = $session->getReply();
?>
<!DOCTYPE HTML>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
</div>
<!-- Reply -->
<section class="reply">
<div class ="row">
<div class="column side"></div>
<div class="column middle">
<div class="code info">
<?php
echo $reply;
?>
</div>
</div>
<div class="column side"></div>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,77 +0,0 @@
<?php
//General Config File:
require_once('../assets/php/config.php');
require_once('./includes/formSession.php');
$session = new FormSession();
$reply = "<p> ERROR DE ACCESO </p>" ;
if(isset($_POST['new'])){
$session->processesForm($_POST["film"], $_POST["hall"], $_SESSION["cinema"],$_POST["date"],$_POST["start"],$_POST["price"],$_POST["format"],$_POST["repeat"], "new");
$reply = $session->getReply();
$_SESSION["cinema"] = "";
$_SESSION["hall"] = "";
$_SESSION["date"] = "";
$_SESSION["start"] = "";
} else if (isset($_POST['edit'])){
$session->processesForm($_POST["film"], $_POST["hall"], $_SESSION["cinema"],$_POST["date"],$_POST["start"],$_POST["price"],$_POST["format"],"0", "edit");
$reply = $session->getReply();
$_SESSION["cinema"] = "";
$_SESSION["hall"] = "";
$_SESSION["date"] = "";
$_SESSION["start"] = "";
} else if (isset($_POST['del'])){
$session->processesForm($_POST["film"], $_POST["hall"], $_SESSION["cinema"],$_POST["date"],$_POST["start"],$_POST["price"],$_POST["format"],"0", "del");
$reply = $session->getReply();
$_SESSION["cinema"] = "";
$_SESSION["hall"] = "";
$_SESSION["date"] = "";
$_SESSION["start"] = "";
}
?>
<!DOCTYPE HTML>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
</div>
<!-- Reply -->
<section class="reply">
<div class ="row">
<div class="column side"></div>
<div class="column middle">
<div class="code info">
<?php
echo $reply;
?>
</div>
</div>
<div class="column side"></div>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,73 +0,0 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../assets/php/config.php');
// IMPORTANTE:
// VERIFICAR QUE EL USUARIO HA INICIADO SESIÓN, SI NO, MOSTRAR MENSAJE DE "ERROR"
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<?php
$template->print_main();
?>
<!-- Panel -->
<div class="row">
<!-- Left Sidebar -->
<div class="sidebar left">
<ul>
<li>Funcionalidad:</li>
<ul>
<li>Subfuncionalidad</li>
<li>Subfuncionalidad</li>
</ul><br />
<li>Ver como:</li>
<ul>
<li>Usuario no registrado</li>
<li>Usuario registrado</li>
<li>Gerente</li>
</ul><br />
<li>Añadir/Editar/Eliminar:</li>
<ul>
<li>Cines</li>
<li>Películas</li>
<li>Promociones</li>
<li>Gerente</li>
</ul>
</ul>
</div>
<!-- Contents -->
<div class="row">
<div class="column side"></div>
<div class="column middle">
<h2>AQUÍ EL CONTENIDO DE CADA FUNCIONALIDAD.</h2>
<p>Debe variar dinámicamente según el botón del panel izquierdo que se pulse (sin cargar una página diferente, aunque tendrá que recargar el contido, eso sí).</p>
<p>Tendréis que rehacer todo el "PANEL" con PHP.</p>
</div>
<div class="column side"></div>
</div>
</div>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,27 +1,36 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../../assets/php/config.php');
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
Práctica 1 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<head>
<title>CompluCine | Planificación</title>
<meta charset="utf-8" />
<link id="estilo" rel="stylesheet" type="text/css" href="../assets/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="../img/favicon.png" />
</head>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<div class="header">
<a href="/"><img src="../img/favicon2.png" /> CompluCine</a> | Planificación
<div class="menu">
<a href="/">Inicio |</a>
<a href="../detalles/">Detalles |</a>
<a href="../bocetos/">Bocetos |</a>
<a href="../miembros/">Miembros |</a>
<a href="#">Planificación |</a>
<a href="../contacto/">Contacto</a>
</div>
</div>
<!-- Main -->
<?php
$template->print_main();
?>
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
<h1>Planificación*</h1>
<hr />
</div>
<!-- Planning -->
<section class="planning">
@ -30,8 +39,8 @@
<div class="code plan">
<h2>Tareas</h2>
<hr />
<div class="textbox">
<h2>Implementaciones Generales de la Web</h2>
<fieldset>
<legend>Implementaciones Generales de la Web</legend>
<ul>
<li>Pantalla de Inicio (incluye promociones y estrenos) [Fer && Adrián]</li>
<li>Cartelera Dinámica [Fer --> Marian && Daniel]</li>
@ -43,25 +52,25 @@
<li>Formulario de Contacto [Fer]</li>
<li>Términos y Condiciones [Fer && Adrián]</li>
</ul>
</div>
<div class="textbox">
<h2>Paneles de Usuario Registrado</h2>
</fieldset>
<fieldset>
<legend>Paneles de Usuario Registrado</legend>
<ul>
<li>Registrarse e Iniciar sesión [Adrián]</li>
<li>Menú y panel de Usuario (Historial compras, cambiar contraseña, datos de pago y eliminar usuario) [Adrián]</li>
</ul>
</div>
<div class="textbox">
<h2>Paneles de Gerente</h2>
</fieldset>
<fieldset>
<legend>Paneles de Gerente</legend>
<ul>
<li>Pantalla de inicio de gerente [Marco && Óscar]</li>
<li>Eliminar sesión de una película [Marco && Óscar]</li>
<li>Deshabilitar salas [Marco && Óscar]</li>
<li>Deshabilitar asientos en una sala [Marco && Óscar]</li>
</ul>
</div>
<div class="textbox">
<h2>Paneles de Administrador</h2>
</fieldset>
<fieldset>
<legend>Paneles de Administrador</legend>
<ul>
<li>Panel de inicio administrador (ver todas la funcionalidades de admin de un vistazo) [Daniel && Marian]</li>
<li>Ver como >> Usuario no registrado || Usuario registrado || (Gerente: Añadir si vamos bien de tiempo) [Daniel && Marian]</li>
@ -70,15 +79,15 @@
<li>Panel añadir/editar/eliminar promociones [Marian && Daniel]</li>
<li>Panel añadir/editar/eliminar gerentes [Marian && Daniel]</li>
</ul>
</div>
</fieldset>
</div>
</div>
<div class="column middle">
<div class="code plan">
<h2>Divisón del trabajo</h2>
<hr />
<div class="textbox">
<h2>Marco Expósito Pérez</h2>
<fieldset>
<legend>Marco Expósito Pérez</legend>
<ul>
<li>Pantalla de inicio de gerente [Gerente]</li>
<li>Eliminar sesión de una película [Gerente]</li>
@ -86,9 +95,9 @@
<li>Deshabilitar asientos en una sala [Gerente]</li>
<li>Selección de butacas [General (de apoyo)]</li>
</ul>
</div>
<div class="textbox">
<h2>Fernando Méndez Torrubiano</h2>
</fieldset>
<fieldset>
<legend>Fernando Méndez Torrubiano</legend>
<ul>
<li>Pantalla de Inicio (incluye promociones y estrenos) [General]</li>
<li>Cartelera Dinámica [General]</li>
@ -100,9 +109,9 @@
<li>Formulario de Contacto [General]</li>
<li>Términos y Condiciones [General (de apoyo)]</li>
</ul>
</div>
<div class="textbox">
<h2>Daniel Muñoz García</h2>
</fieldset>
<fieldset>
<legend>Daniel Muñoz García</legend>
<ul>
<li>Panel de inicio administrador (ver todas la funcionalidades de admin de un vistazo) [Administrador]</li>
<li>Ver como >> Usuario no registrado || Usuario registrado || (Gerente: Añadir si vamos bien de tiempo) [Administrador]</li>
@ -111,9 +120,9 @@
<li>Panel añadir/editar/eliminar promociones [Administrador]</li>
<li>Panel añadir/editar/eliminar gerentes [Administrador]</li>
</ul>
</div>
<div class="textbox">
<h2>Ioan Marian Tulai</h2>
</fieldset>
<fieldset>
<legend>Ioan Marian Tulai</legend>
<ul>
<li>Panel de inicio administrador (ver todas la funcionalidades de admin de un vistazo) [Administrador]</li>
<li>Ver como >> Usuario no registrado | Usuario registrado | (Gerente: Añadir si vamos bien de tiempo) [Administrador]</li>
@ -122,9 +131,9 @@
<li>Panel añadir/editar/eliminar promociones [Administrador]</li>
<li>Panel añadir/editar/eliminar gerentes [Administrador]</li>
</ul>
</div>
<div class="textbox">
<h2>Óscar Ruiz de Pedro</h2>
</fieldset>
<fieldset>
<legend>Óscar Ruiz de Pedro</legend>
<ul>
<li>Pantalla de inicio de gerente [Gerente]</li>
<li>Eliminar sesión de una película [Gerente]</li>
@ -132,9 +141,9 @@
<li>Deshabilitar asientos en una sala [Gerente]</li>
<li>Selección de butacas [General (de apoyo)]</li>
</ul>
</div>
<div class="textbox">
<h2>Adrian Real del Noval</h2>
</fieldset>
<fieldset>
<legend>Adrian Real del Noval</legend>
<ul>
<li>Registrarse e Iniciar sesión [Usuario Registrado]</li>
<li>Menú y panel de Usuario (Historial compras, cambiar contraseña, datos de pago y eliminar usuario) [Usuario Registrado]</li>
@ -142,15 +151,15 @@
<li>Términos y Condiciones [General]</li>
<li>Pantalla de Inicio (incluye promociones y estrenos) [General (de apoyo)]</li>
</ul>
</div>
</fieldset>
</div>
</div>
<div class="column side">
<div class="code plan">
<h2>Plazos</h2>
<hr />
<div class="textbox">
<h2>Práctica 1 [HTML]</h2>
<fieldset>
<legend>Práctica 1 [HTML]</legend>
<div class="bar">100%</div>
<ul>
<li>Inicio</li>
@ -160,9 +169,9 @@
<li>Planificación</li>
<li>Contacto</li>
</ul>
</div>
<div class="textbox">
<h2>Práctica 2 [HTML + PHP]</h2>
</fieldset>
<fieldset>
<legend>Práctica 2 [HTML + PHP]</legend>
<div class="bar">100%</div>
<ul>
<li>Sobre FDI-Cines (About us) [Fer && Adrián]</li>
@ -192,9 +201,9 @@
<li>Panel añadir/editar/eliminar promociones [Marian && Dani]</li>
<li>Panel añadir/editar/eliminar gerentes [Marian && Dani]</li>
</ul>
</div>
<div class="textbox">
<h2>Práctica 3 [HTML + PHP + CSS]</h2>
</fieldset>
<fieldset>
<legend>Práctica 3 [HTML + PHP + CSS]</legend>
<div class="bar">100%</div>
<ul>
<li>Eliminar sesión de una película [Marco && Óscar]</li>
@ -215,14 +224,14 @@
<li>Panel añadir/editar/eliminar promociones [Marian && Dani]</li>
<li>Panel añadir/editar/eliminar gerentes [Marian && Dani]</li>
</ul>
</div>
<div class="textbox">
<h2>Entrega Final [HTML + PHP + CSS + JS]</h2>
</fieldset>
<fieldset>
<legend>Entrega Final [HTML + PHP + CSS + JS]</legend>
<div class="bar">100%</div>
<ul>
<li>Todo el trabajo restante.</li>
</ul>
</div>
</fieldset>
</div>
</div>
</div>
@ -232,7 +241,7 @@
<section id="timeline" class="timeline">
<h2>Línea Temporal</h2>
<hr />
<div class="image"><img src="../../img/linea_temporal.png" /></div>
<div class="image"><img src="../img/linea_temporal.png" /></div>
</section>
<!-- Timeline Table -->
@ -256,12 +265,12 @@
<tr>
<td>Práctica 1</td>
<td>18 de Marzo de 2021</td>
<td>ENTREGADO</td>
<td>EN PROCESO</td>
</tr>
<tr>
<td>Práctica 2</td>
<td>15 de Abril de 2021</td>
<td>EN PROCESO</td>
<td>PENDIENTE</td>
</tr>
<tr>
<td>Práctica 3</td>
@ -286,9 +295,11 @@
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
<footer>
<div class="footer">
<p>© Práctica 1 | Sistemas Web 2021 </p>
</div>
</footer>
</body>

View File

@ -1,100 +0,0 @@
<?php
include_once($prefix.'login/includes/user_dao.php');
include_once($prefix.'assets/php/form.php');
class FormRegister extends Form {
//Constants:
const HTML5_EMAIL_REGEXP = '^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$';
//Atributes:
private $user; // User who is going to log-in.
private $reply; // Validation response
//Constructor:
public function __construct() {
parent::__construct('formRegister');
$this->reply = array();
}
//Methods:
//Returns validation response:
public function getReply() {
if(isset($_SESSION["login"])){
$name = strtoupper($_SESSION['nombre']);
$this->reply = "<h1>Bienvenido {$_SESSION['nombre']}</h1><hr />
<p>{$name}, has creado tu cuenta de usuario correctamente.</p>
<p>Usa los botones para navegar</p>
<a href='../'><button>Inicio</button></a>
<a href='../../panel_{$_SESSION["rol"]}'><button>Mi Panel</button></a>\n";
}
else if(!isset($_SESSION["login"])){
$this->reply = "<h1>ERROR</h1><hr />".
"<p>Ha ocurrido un problema y no hemos podido completar el registro.</p>
<p>Vuelve a intetarlo o inicia sesión si tienesuna cuenta de usuario.</p>
<a href='../login/'><button>Iniciar Sesión</button></a>
<form method='post' action='../login/'><button name='register' id='register'>Registro</button></form>\n";
}
return $this->reply;
}
//Process form:
public function processesForm($name, $mail, $pass, $repass) {
$register = true;
$name = $this->test_input($name);
$mail = $this->test_input($mail);
$pass = $this->test_input($pass);
$repass = $this->test_input($repass);
$username = isset($name) ? $name : null ;
if (!$username) {
$register = false;
}
$email = isset($mail) ? $mail : null ;
if (!$email || !mb_ereg_match(self::HTML5_EMAIL_REGEXP, $email)) {
$register = false;
}
$password = isset($pass) ? $pass : null ;
$repassword = isset($repass) ? $repass : null ;
if($password != $repassword){
if (!$password || mb_strlen($password) < 4) {
$register = false;
}
if(!$repassword || mb_strlen($repassword) < 4){
$register = false;
}
}
if ($register) {
$bd = new UserDAO('complucine');
if($bd){
$this->user = $bd->selectUser($username, $password);
try{
if (!$this->user) {
$bd->createUser("", $username, $email, $password, "user");
$this->user = $bd->selectUser($username, $password);
if ($this->user) {
$_SESSION["nombre"] = $this->user->getName();
$_SESSION["rol"] = $this->user->getRol();
$_SESSION["login"] = $register;
}
}
}
catch (Exception $e){
$_SESSION["login"] = $register;
}
}
}
}
protected function test_input($input){
return htmlspecialchars(trim(strip_tags($input)));
}
}
?>

View File

@ -1,55 +0,0 @@
<?php
//General Config File:
require_once('../assets/php/config.php');
//Login form validate:
require_once('./includes/formRegister.php');
$register = new FormRegister();
$register->processesForm($_POST["name"], $_POST["email"], $_POST["pass"], $_POST["repass"]);
$reply = $register->getReply();
?>
<!DOCTYPE HTML>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
</div>
<!-- Reply -->
<section class="reply">
<div class ="row">
<div class="column side"></div>
<div class="column middle">
<div class="code info">
<?php
echo $reply;
?>
</div>
</div>
<div class="column side"></div>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

View File

@ -1,68 +0,0 @@
<?php
require_once($prefix.'panel_admin/includes/film_dao.php');
// ESTA CLASE SE HA CREADO PARA PODER INSTANCIAR ATRIBUTOS DE LA TABLA PELÍCULAS,
// SEGÚN VAYAN SIENDO RELEVANTES PARA MOSTRAR EN FUNCIÓN DE LA PÁGINA QUE LLAME A ESTA CLASE.
// NO TODAS LAS PÁGINAS DEL CINE NECESITAN CARGAR TODOS LOS ATRIBUTOS POR COMPLETO DE LA TABLA PELÍCULAS
// Y HEMOS CREIDO, QUE EN ESE CASO, MÁS EFICIENTE HACERLO A PETICIÓN.
class loadFilms {
//Atributes:
private $films; //Array of movie titles.
private $descriptions; //Array of movie descriptions.
//Constructor:
public function __construct() {
$this->load();
}
//Methods:
//Returns an array with the titles of the available movies.
public function getFilms(){
return $this->films;
}
//Returns an array with the descriptions of the available movies.
public function getDescription(){
$this->loadDescriptions();
return $this->descriptions;
}
//Load the list of tittles of the movies.
private function load(){
$this->films = array();
$tittles = new Film_DAO("complucine");
$reply = $tittles->tittleFilmData();
if($reply && $reply->num_rows>0){
$i = 0;
while ($row = $reply->fetch_assoc()){
foreach($row as $key => $value){
$this->films[$i] = $value;
}
$i++;
}
}
$reply->free();
}
private function loadDescriptions(){
$this->descriptions = array();
$desc = new Film_DAO("complucine");
$reply = $desc->descriptionFilmData();
if($reply && $reply->num_rows>0){
$i = 0;
while ($row = $reply->fetch_assoc()){
foreach($row as $key => $value){
$this->descriptions[$i] = $value;
}
$i++;
}
}
$reply->free();
}
}
?>

View File

@ -1,84 +0,0 @@
<!DOCTYPE HTML>
<?php
//General Config File:
require_once('../assets/php/config.php');
//List of the tittles and descriptions of the movies:
require_once($prefix.'panel_admin/includes/film_dao.php');
$loadFilms = new Film_DAO("complucine");
$films = $loadFilms->allFilmData();
$titles = array();
$descriptions = array();
$times = array();
foreach($films as $key => $value){
$titles[$key] = $value->getTittle();
$descriptions[$key] = $value->getDescription();
$times[$key] = $value->getDuration();
}
?>
<!--
Práctica 2 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<?php
$template->print_main();
?>
<!-- Films -->
<section id="films_billboard">
<div class='row'>
<?php
for($i = 0; $i < count($films); $i++){
$title = str_replace('_', ' ', $titles[$i]);
if($i%2 === 0){
if($i != 0) echo "</div>
";
echo "<div class='column side'>
";
}
else{
if($i != 0) echo "</div>
";
echo "<div class='column middle'>
";
}
echo "<section id='".$titles[$i]."'>
<div class='zoom'>
<div class='code showtimes'>
<div class='image'><img src='".$prefix."img/".$titles[$i].".jpg' alt='".$titles[$i]."' /></div>
<h2>".$title."</h2>
<hr />
<div class='blockquote'>
<p>".$descriptions[$i]."</p>
</div>
<p>Duración: ".$times[$i]." minutos</p>
</div>
</div>
</section>
";
}
echo "</div>\n";
?>
</div>
</section>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>