diff --git a/assets/css/main.css b/assets/css/main.css new file mode 100644 index 0000000..7229ec2 --- /dev/null +++ b/assets/css/main.css @@ -0,0 +1,570 @@ +/* Basic */ +* { + box-sizing: border-box; + margin: 0px; +} + +/* Headers */ +h1, h2, h3, h4 { + color: #363636; + text-transform: uppercase; + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + vertical-align: baseline; + text-align: center; +} + +h2 { + font-size: 95%; +} + +h3 { + font-size: 85%; +} + +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; + color: #dadada; + padding: 15px; + text-align: left; + font-size: 18px; +} +.header img { + width: 11px; +} +/* Header Menu */ +.menu { + margin-top: 10px; + 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 { + padding: 0; + border: 0; +} + +a { + color: #dadada; + text-decoration: none; +} +a:hover{ + color:rgb(138, 150, 32); +} + +/* Body */ +body { + font-family: Arial, Helvetica, sans-serif; + background-color: #d3ebff; + color: #000000 +} + +/* Table */ +table { + border-collapse: collapse; + border-spacing: 0; + margin: 0 0 2em 0; + width: 100%; + text-align: left; + font-size: 15px; +} +table a{ + color: #1f2c3d; +} + table tbody tr { + border: solid 1px #1f2c3d; + border-left: 0; + border-right: 0; + } + table tbody tr:nth-child(2n + 1) { + background-color: rgba(144, 144, 144, 0.25); + } + table td { + padding: 0.75em 0.75em; + } + table th { + color: #1f2c3d; + font-size: 0.9em; + font-weight: 600; + padding: 0 0.85em 0.85em 0.85em; + } + table thead, table tfoot { + 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 */ +.main { + padding: 30px; + text-align: center; + font-size: 35px; +} +.main h1, h2, h3, h4 { + color: #363636; +} +.main img { + width: 50%; +} + +/* Create three unequal columns that floats next to each other */ +.column { + float: left; + padding: 10px; +} + +/* Left and right column */ +.column.side { + width: 33.33%; +} + +/* Middle column */ +.column.middle { + 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%; +} + +/* Right column */ +.column.right { + float: right; + width: 50%; +} + +/* Clear floats after the columns */ +.row:after { + content: ""; + display: table; + clear: both; +} + +/* Responsive layout: makes the three columns stack on top of each other instead of next to each other */ +@media (max-width: 1000px) { + .column.side, .column.middle, .column.left, .column.right{ + width: 100%; + } +} + +/* Zoom */ +.zoom { + transition: transform .2s; +} +.zoom:hover { + transform: scale(1.05); +} + +/* Code & Blockquote */ +.code { + background: #1f2c3d; + border-radius: 3px; + font-size: 0.9em; + margin: 10px; + display: block; + line-height: 1.75em; + padding: 1em 1.5em; + overflow-x: auto; + overflow-y: auto; +} +.code h1, .code h2{ + color: #dadada; +} +.code h3, .code h4 { + color: #d3ebff; +} +.code p { + color: #dadada; +} +.code a { + text-decoration: underline; +} +.code ul, .code ol { + color: #dadada; +} +.code img{ + /* width: 80px; height: 80px; */ + width: 25%; +} +.code fieldset{ + margin: 1px; + border-color: #dadada; + border-style: groove; +} +.code fieldset legend { + text-transform: uppercase; + font-weight: bold; + font-size: 90%; + color: #d3ebff; +} +.code.details{ + height: 750px; +} +.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; + display: block; + line-height: 1.25em; + padding: 1em 1em; + overflow-x: auto; + background: #1f2c3d; + border-radius: 3px; + height: 680px; +} +.sketches h1, .sketches h2, .sketches h3, .sketches h4, .sketches p { + color: #dadada; +} +.sketches img { + width: 550px; + height: 550px; +} +.sketches .description { + color: #d3ebff; +} +/* Responsive layout */ +@media (max-width: 1500px) { + .column.side .sketches, .column.middle .sketches { + width: 100%; + height: 500px; + } + .column.side .sketches img, .column.middle .sketches img { + width: 100%; + height: 75%; + } +} +@media (max-width: 1150px) { + .sketches img { + width: 100%; + height: 75%; + } +} + +/* 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; + line-height: 15px; + font-size: 13px; + font-weight: bold; + width: 100%; + color: #00020f; + background-color: #d3ebff; + text-align: right; +} +.bar.seventyfive { + width: 75%; +} +.bar.fifty { + width: 50%; +} +.bar.twentyfive { + width: 25%; +} + +/* Timeline Image */ +.timeline h2 { + padding-top: 50px; +} +.timeline img{ + width: 100%; + text-align: center; + padding-bottom: 50px; + padding-left: 15px; + 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 { + margin: auto; + width: 65%; +} + +form h1, h2, h3, h4 { + color: #363636; +} + +label { + text-align: center; + font-weight: bold; +} + +input, textarea { + width: 100%; + height: 27px; + border: 1px solid #000000; + padding: 10px; + margin-top: 5px; + font-size: 15px; +} + +textarea { + width: 100%; + height: 150px; +} + +#radio, #checkbox { + width: auto; + height: 15px; + cursor: pointer; +} + +.verify { + font-size: 11px; +} +.verify a { + color: #1f2c3d; +} +.verify a:hover { + color: rgb(138, 150, 32); +} + +#submit { + width: 100%; + height: 35px; + border: 1px solid #000000; + padding: 5px; + margin-top: 5px; + font-size: 15px; + font-weight: bold; + box-shadow: 2px 2px #1f2c3d; + filter: brightness(105%); + cursor: pointer; +} +#submit:hover { + background-color: #d3ebff; +} + +#reset { + width: 100%; + height: 30px; + border: 1px solid #dadada; + background-color: #00020f; + color: #dadada; + padding: 5px; + margin-top: 5px; + font-size: 12px; + font-weight: bold; + box-shadow: 2px 2px #1f2c3d; + cursor: pointer; +} +#reset:hover { + border:#000000; + background-color: #791515; +} + + +/* Footer */ +footer { + text-align: left; + background-color: #1f2c3d; + color: #dadada; + padding: 20px; + margin-top: 100px; + width: 100%; + height: 80px; +} +.footer { + text-align: right; +} +@media (max-width: 500px) { + footer { + width: 100%; + height: 100%; + } +} \ No newline at end of file diff --git a/assets/index.php b/assets/index.php new file mode 100644 index 0000000..1d63e66 --- /dev/null +++ b/assets/index.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/assets/php/config.php b/assets/php/config.php new file mode 100644 index 0000000..8409c11 --- /dev/null +++ b/assets/php/config.php @@ -0,0 +1,9 @@ +get_prefix(); +?> \ No newline at end of file diff --git a/assets/php/dao.php b/assets/php/dao.php new file mode 100644 index 0000000..bbee497 --- /dev/null +++ b/assets/php/dao.php @@ -0,0 +1,37 @@ +mysqli) { + $this->mysqli = new mysqli(self::_SERVERNAME, self::_USERNAME, + self::_PASSWORD, $bd_name); + } + // echo "Conexión a la BD, satisfactoria."; + } catch (Exception $e){ + echo "Error de conexión a la BD: ". mysqli_connect_error(); + exit(); + } + + /* ... */ + } + + //Destructor: + public function __destruct(){ + $this->mysqli->close(); + } + + //Methods: + } +?> \ No newline at end of file diff --git a/assets/php/form.php b/assets/php/form.php new file mode 100644 index 0000000..28e615f --- /dev/null +++ b/assets/php/form.php @@ -0,0 +1,238 @@ +formId = $formId; + + $opcionesPorDefecto = array( 'ajax' => false, 'action' => null, 'class' => null, 'enctype' => null ); + $opciones = array_merge($opcionesPorDefecto, $opciones); + + $this->ajax = $opciones['ajax']; + $this->action = $opciones['action']; + $this->classAtt = $opciones['class']; + $this->enctype = $opciones['enctype']; + + if ( !$this->action ) { + $this->action = $_SERVER['PHP_SELF']; + } + } + + public function gestiona() { + + if ( ! $this->formularioEnviado($_POST) ) { + echo $this->generaFormulario(); + } else { + // Valida el token CSRF si es necesario (hay un token en la sesión asociada al formulario) + $tokenRecibido = isset($_POST['CSRFToken']) ? $_POST['CSRFToken'] : FALSE; + + if ( ($errores = $this->csrfguard_ValidateToken($this->formId, $tokenRecibido)) !== TRUE ) { + if ( ! $this->ajax ) { + echo $this->generaFormulario($errores, $_POST); + } else { + echo $this->generaHtmlErrores($errores); + } + } else { + $result = $this->procesaFormulario($_POST); + if ( is_array($result) ) { + // Error al procesar el formulario, volvemos a mostrarlo + if ( ! $this->ajax ) { + echo $this->generaFormulario($result, $_POST); + } else { + echo $this->generaHtmlErrores($result); + } + } else { + if ( ! $this->ajax ) { + header('Location: '.$result); + } else { + echo $result; + } + } + } + } + } + + /** + * Devuelve un string con el HTML necesario para presentar los campos del formulario. Es necesario asegurarse que como parte del envío se envía un parámetro con nombre (i.e. utilizado como valor del atributo name del botón de envío del formulario). + */ + protected function generaCamposFormulario ($datos) { + return ''; + } + + /** + * Procesa los datos del formulario. + */ + protected function procesaFormulario($datos) { + + } + + /** + * Función que verifica si el usuario ha enviado el formulario. Comprueba si existe el parámetro $formId en $params. + * + * @param array $params Array que contiene los datos recibidos en el envío formulario. + * + * @return boolean Devuelve TRUE si $formId existe como clave en $params + */ + private function formularioEnviado(&$params) { + return isset($params['action']) && $params['action'] == $this->formId; + } + + /** + * Función que genera el HTML necesario para el formulario. + * + * + * @param array $errores (opcional) Array con los mensajes de error de validación y/o procesamiento del formulario. + * + * @param array $datos (opcional) Array con los valores por defecto de los campos del formulario. + */ + private function generaFormulario($errores = array(), &$datos = array()) { + + $html= $this->generaListaErrores($errores); + + $html .= '
classAtt ) { + $html .= ' class="'.$this->classAtt.'"'; + } + if ( $this->enctype ) { + $html .= ' enctype="'.$this->enctype.'"'; + } + $html .=' >'; + + // Se genera el token CSRF si el usuario no solicita explícitamente lo contrario. + if ( ! $this->classAtt || strpos($this->classAtt, 'nocsrf') === false ) { + $tokenValue = $this->csrfguard_GenerateToken($this->formId); + $html .= ''; + } + + $html .= ''; + + $html .= $this->generaCamposFormulario($datos); + $html .= '
'; + return $html; + } + + private function generaListaErrores($errores) { + $html=''; + $numErrores = count($errores); + if ( $numErrores == 1 ) { + $html .= ""; + } else if ( $numErrores > 1 ) { + $html .= ""; + } + return $html; + } + + private function csrfguard_GenerateToken($formId) { + if ( ! isset($_SESSION) ) { + throw new Exception('La sesión del usuario no está definida.'); + } + + if ( function_exists('hash_algos') && in_array('sha512', hash_algos()) ) { + $token = hash('sha512', mt_rand(0, mt_getrandmax())); + } else { + $token=' '; + for ($i=0;$i<128;++$i) { + $r=mt_rand(0,35); + if ($r<26){ + $c=chr(ord('a')+$r); + } else{ + $c=chr(ord('0')+$r-26); + } + $token.=$c; + } + } + + $_SESSION[$formId.'_'.self::CSRF_PARAM]=$token; + + return $token; + } + + private function csrfguard_ValidateToken($formId, $tokenRecibido) { + if ( ! isset($_SESSION) ) { + throw new Exception('La sesión del usuario no está definida.'); + } + + $result = TRUE; + + if ( isset($_SESSION[$formId.'_'.self::CSRF_PARAM]) ) { + if ( $_SESSION[$formId.'_'.self::CSRF_PARAM] !== $tokenRecibido ) { + $result = array(); + $result[] = 'Has enviado el formulario dos veces'; + } + $_SESSION[$formId.'_'.self::CSRF_PARAM] = ' '; + unset($_SESSION[$formId.'_'.self::CSRF_PARAM]); + } else { + $result = array(); + $result[] = 'Formulario no válido'; + } + return $result; + } +} + +/* +class Formulario { + + private $formId; + private $action; + private $classAtt; + private $enctype; + + public function __construct($formId, $opciones = array() ) { + $this->formId = $formId; + $opcionesPorDefecto = array( 'ajax' => false, 'action' => null, 'class' => null, + 'enctype' => null ); + $opciones = array_merge($opcionesPorDefecto, $opciones); + + $this->ajax = $opciones['ajax']; + $this->action = $opciones['action']; + $this->classAtt = $opciones['class']; + $this->enctype = $opciones['enctype']; + + if (!$this->action) { + $app = Aplicacion::getSingleton(); + $this->action = htmlspecialchars($_SERVER['REQUEST_URI']); + $this->action = $app->resuelve($this->action); + } + } +} +*/ +?> \ No newline at end of file diff --git a/assets/php/template.php b/assets/php/template.php new file mode 100644 index 0000000..cd0a7b4 --- /dev/null +++ b/assets/php/template.php @@ -0,0 +1,185 @@ +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" + CompluCine | {$page} + + + + + \n"; + } + + //Print generic Header: + function print_header(){ + $page = $this->page; + $prefix = $this->prefix; + $session = $this->session; + $session_route =$this->session_route; + $user_route = $this->user_route; + $panel =$this->panel; + + if(isset($_SESSION["nombre"])){ + if($_SESSION["rol"] == "admin") $user_route = 'panel_admin/'; + else if($_SESSION["rol"] == "manager") $user_route = 'panel_manager/'; + $panel = "
  • Mi Panel
  • "; + $session = 'Cerrar Sesión'; + $session_route = 'logout/'; + } + + echo"
    + favicon CompluCine | {$page} + +
    \n"; + } + + //Print generic subHeader: + function print_subheader(){ + //$page = $this->page; + $prefix = $this->prefix; + + echo"
    + +
    \n"; + } + + //Print generic Main: + function print_main(){ + $page = $this->page; + $prefix = $this->prefix; + + /* SubHeader on Main */ + $sub_header = ''; + if(strpos($_SERVER['PHP_SELF'], 'fdicines')){ + $sub_header = " +
    + +
    \n"; + } + + /* MAIN */ + echo"
    +
    logo_FDI-Cines
    + {$sub_header} +

    {$page}

    +
    +
    \n"; + } + + //Print session MSG: + function print_msg() { + if(isset($_SESSION['message'])){ + echo "
    ".$_SESSION['message']."
    "; + unset($_SESSION['message']); + } + } + + //Print generic Footer: + function print_footer(){ + //$page = $this->page; + $prefix = $this->prefix; + + echo"\n"; + } + + } +?> \ No newline at end of file diff --git a/cinemas/index.php b/cinemas/index.php new file mode 100644 index 0000000..bbbd8f0 --- /dev/null +++ b/cinemas/index.php @@ -0,0 +1,32 @@ + + + + + + print_head(); + ?> + + + print_header(); + ?> + + + print_main(); + ?> + + + print_footer(); + ?> + + + \ No newline at end of file diff --git a/contacto/index.php b/contacto/index.php new file mode 100644 index 0000000..adc2676 --- /dev/null +++ b/contacto/index.php @@ -0,0 +1,77 @@ + + + + + + print_head(); + ?> + + + print_header(); + ?> + + + print_main(); + ?> + + +
    +

    Formulario

    +
    +
    +
    + Datos personales +
    + +
    +
    + +
    +
    +
    + Motivo de la consulta +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + + + print_footer(); + ?> + + + + diff --git a/fdicines/about_us/index.php b/fdicines/about_us/index.php new file mode 100644 index 0000000..07a3dd4 --- /dev/null +++ b/fdicines/about_us/index.php @@ -0,0 +1,75 @@ + + + + + + print_head(); + ?> + + + print_header(); + ?> + + +
    +
    logo_FDI-Cines
    + + print_subheader(); + ?> +
    + + +
    +
    +

    Descripción

    +
    +
    +

    + 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 FDI-Cines + mostrar la cartelera disponible e incluya ofertas y promociones para los clientes. +

    +

    + 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. +

    +

    + Los usuarios podrán registrarse, comprar sus entradas para una + sesión, elegir asientos, precomprar sus snacks y ver ofertas y promociones. +

    +
    +
    +
    +

    FDI-Cines

    +
    +
    +

    + Somos un grupo de estudiantes de la asignatura de Sistemas Web + de la Facultad de Informática de la Universidad Complutense de Madrid. +

    +

    + 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 aquí. +

    +
    +
    +
    + + + print_footer(); + ?> + + + + diff --git a/fdicines/bocetos/index.php b/fdicines/bocetos/index.php new file mode 100644 index 0000000..c08b4b0 --- /dev/null +++ b/fdicines/bocetos/index.php @@ -0,0 +1,306 @@ + + + + + + print_head(); + ?> + + + print_header(); + ?> + + + print_main(); + ?> + + +
    +
    +

    FLUJO DE NAVEGACIÓN

    +
    + +
    +

    Usuario

    +

    + 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: +

    +

    + 1. Selección de Cine -> Selección de Película -> Selección de Sesión -> Reserva de Butacas -> Checkout: Primero se selecciona el cine en la vista de selección + de cines en la que se encuentra un mapa y una lista con los cines de la cadena. Una vez seleccionado el cine se redirigirá al usuario a la vista de selección + de película, con el filtro del cine correspondiente activado, de forma que solo se muestren las películas disponibles en el cine seleccionado. En esa vista se + eligirá la película y la versión a ver (VO, 3D, 4DX, etc). +

    +

    + Una vez elegida la película, se redirigirá al usuario a la elección de sesión. Se mostrarán todas las sesiones disponibles y el usuario podrá elegir la sesión y + el número de entradas que quiere reservar, pudiendo ver el precio final de las mismas. Se le llevará a la vista de butacas en donde podrá elegir qué butacas reservar. +

    +

    + Una vez elegidas las butacas, el usuario procede a la página de pago, en donde rellenará los datos necesarios para pagar online. Terminada la compra con éxito, se + mostrará una pantalla de "Compra Realizada", dando al usuario la seguridad de que su reserva se ha registrado correctamente. Luego se le redirigirá a la pantalla de + inicio. +

    +

    + 2. Selección de Película -> Selección de Cine -> Selección de Sesión -> Reserva de Butacas -> Checkout: Es idéntico al flujo anterior pero el usuario empieza eligiendo + la película, de forma que se le redirige a la vista de selección de cine, esta vez con un filtro, de forma que solo se muestran los cines que tengan sesiones activas + con la película seleccionada. +

    +

    + Una vez elegidos película y cine, el flujo es idéntico al anterior. +

    +
    + +
    +

    Gerente

    +

    + 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. +

    +
    + +
    +

    Administrador

    +

    El Administrador es el encargado de gestionar las: películas, cines, promociones, otros administradores y gerentes de cada cine.

    +

    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.

    +

    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.

    +
    +
    +
    + + +
    +
    + +
    +

    Pantallas Genéricas

    +
    +
    +
    +
    + +
    +

    Pantalla de inicio

    +

    Pantalla de bienvenida al entrar en la web.

    +
    +
    +
    +
    +
    + +
    +

    Pantalla de Registro / Inicio de sesión

    +

    Pantalla para que un usuario nuevo se registre o, en caso de ya tener una cuenta de usuario, inicie sesión.

    +
    +
    +
    +
    +
    +
    +
    + +
    +

    Menú de usuario registrado

    +

    Pantalla con todas las opciones disponibles, propias de un usuario registrado.

    +
    +
    +
    +
    +
    + +
    +

    Cartelera

    +

    Pantalla con información sobre todas las películas disponibles en ese momento.

    +
    +
    +
    +
    +
    +
    +
    + +
    +

    Cines

    +

    Pantalla con un mapa que indica la geolocalización de todos los cines de FDI-Cines.

    +
    +
    +
    +
    +
    + +
    +

    Selección de Horario

    +

    Pantalla que muestra los horarios disponibles por salas para un cine y película elegidos.

    +
    +
    +
    +
    +
    +
    +
    + +
    +

    Mapa de los Asientos

    +

    Pantalla con un mapa para selccionar los asientos que se quieren escoger. Los asientos ocupados no pondrán ser seleccionados.

    +
    +
    +
    +
    +
    + +
    +

    Pagar

    +

    Pantalla para realizar el pago, después de haber selecionado película, cine, sala, horario y butacas.

    +
    +
    +
    +
    +
    +
    +
    + +
    +

    Compra Realizada

    +

    Pantalla de confirmación con los datos de compra.

    +
    +
    +
    +
    +
    + +
    +

    Sobre nosotros

    +

    Pantalla con información sobre FDI-Cines.

    +
    +
    +
    +
    +
    +
    +
    + +
    +

    Formulario de Contacto

    +

    Pantalla con un formulario para realizar una consulta a los administradores.

    +
    +
    +
    +
    +
    + +
    +

    Términos y Condiciones

    +

    Pantalla con todos los términos y condiciones de uso del servicio.

    +
    +
    +
    +
    + + +
    +

    Pantallas de Gerentes

    +
    +
    +
    +
    + +
    +

    Panel de Incio Gerente

    +

    Pantalla con las funciones exclusivas a las que puede acceder un Gerente.

    +
    +
    +
    +
    +
    + +
    +

    Gestionar salas

    +

    Pantalla en la que los Gerentes pueden interactuar para añadir, modificar o eliminar la sala de un cine.

    +
    +
    +
    +
    +
    + +
    +

    Gestionar Sesiones

    +

    Pantalla en la que los Gerentes pueden interactuar para añadir, modificar o eliminar las sesiones de una película.

    +
    +
    +
    +
    + + +
    +

    Pantallas de Administradores

    +
    +
    +
    +
    + +
    +

    Panel Inicio Administrador

    +

    Pantalla con las funciones exclusivas a las que puede acceder un Administrador.

    +
    +
    +
    +
    +
    + +
    +

    Gestionar Películas

    +

    Pantalla en la que los Administradores pueden interactuar para añadir, modificar o eliminar las películas de la cartelera.

    +
    +
    +
    +
    +
    +
    +
    + +
    +

    Gestionar Cines

    +

    Pantalla en la que los Administradores pueden interactuar para añadir, modificar o eliminar los cines.

    +
    +
    +
    +
    +
    + +
    +

    Gestionar Promociones

    +

    Pantalla en la que los Administradores pueden interactuar para añadir, modificar o eliminar las promociones existentes.

    +
    +
    +
    +
    +
    + +
    +

    Gestionar Administradores y Gerentes

    +

    Pantalla en la que los Administradores pueden interactuar para añadir, modificar o eliminar tanto otros Administradores como Gerentes.

    +
    +
    +
    +
    +
    + + + print_footer(); + ?> + + + + diff --git a/fdicines/detalles/index.php b/fdicines/detalles/index.php new file mode 100644 index 0000000..d45df64 --- /dev/null +++ b/fdicines/detalles/index.php @@ -0,0 +1,120 @@ + + + + + + print_head(); + ?> + + + print_header(); + ?> + + +
    +
    logo_FDI-Cines
    + + print_subheader(); + ?> +
    + + +
    +
    +

    Detalles

    +
    +
    +

    + Con este proyecto buscamos la creación de una aplicación web que + gestione la cartelera de un grupo de cines con una cartelera de películas variable, unos horarios propios de cada cine por sesión y película + y unos precios determinados. +
    + Los usuarios podrán registrarse, comprar sus entradas para una + sesión, elegir asientos, precomprar sus snacks y ver ofertas y promociones. +

    +
    +
    +
    + +
    +
    +
    +
    +

    Tipos de usuario

    +
    +
    +

    Usuario No Registrado

    +

    + 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. +

    +
    +
    +

    Usuario Registrado

    +

    + 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. +

    +
    +
    +

    Gerente de Cine

    +

    + 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. +

    +
    +
    +

    Administrador

    +

    + 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. +

    +
    +
    +
    +
    +
    +

    Funcionalidad

    +
    +

    + La aplicación debe permitir la compra online de entradas para sesiones de cine, mostrando los cines y + horarios en los que se encuentra disponible la película seleccionada por el usuario dentro del catálogo disponible en ese momento (la cartelera). + Los usuarios podrán acceder a la compra de entradas buscando la película que desean ver y luego escogiendo un cine y horario determinado. + Además de una búsqueda específica, también se ofrecerá la posibilidad de visionar toda la cartelera, y escoger una película, horario y cine, de entre todas las posibilidades. +

    + Una vez escogido todo, se mostrará una página en la que el usuario decidirá la o las butacas en las que se sentará. Se mostrarán butacas disponibles y butacas ocupadas (en caso de que las haya). + Antes de realizar la compra, los usuarios podrán aplicar promociones especificas que le permitan obtener algun snack en el cine o descuentos disponibles en la aplicación. +

    +

    + Por otro lado la aplicacion debe permitir a los gerentes y administradores visionar la lista y contenido de todas las peliculas que hay en cartelera, + siendo los administradores los encargados de modificarlas y añadir nuevas. + De igual forma, ambos podran ver todos los cines activos de la aplicacion, pero solo los administradores serán capaces de añadir o modificar cines existentes. +

    + Cada cine tiene una cantidad de salas y sesiones con horarios específicos pora cada una de las películas. + Aunque ambos roles (administrador y gerente) pueden ver estas salas y horarios, es el gerente de cine el encargado de modificar las salas, + su disposición de butacas, modificar el horario de las sesiones y añadir nuevas sesiones, y crear promociones específicas para una sesión concreta o para el cine completo. + Todo esto unicamente para el cine con el cual esta relacionado. +

    +
    +
    +
    +
    + + print_footer(); + ?> + + + diff --git a/fdicines/index.php b/fdicines/index.php new file mode 100644 index 0000000..10f3c9f --- /dev/null +++ b/fdicines/index.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/fdicines/miembros/index.php b/fdicines/miembros/index.php new file mode 100644 index 0000000..3e08109 --- /dev/null +++ b/fdicines/miembros/index.php @@ -0,0 +1,177 @@ + + + + + + print_head(); + ?> + + + print_header(); + ?> + + +
    +
    + + print_subheader(); + ?> +
    +

    Miembros

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NombreEmail
    Marco Expósito Pérezmarcoexp@ucm.es
    Fernando Méndez Torrubianofernmend@ucm.es
    Daniel Muñoz Garcíadanimu03@ucm.es
    Ioan Marian Tulaiioantula@ucm.es
    Óscar Ruiz de Pedrooscarrui@ucm.es
    Adrian Real del Novaladrireal@ucm.es
    +
    +
    + + +
    +
    +
    + +
    +
    +
    + +

    ~ Marco Expósito Pérez (marcoexp@ucm.es)

    +
    +

    Aficionado a todo tipo de videojuegos, principalmente la saga Zelda. Tambien me gusta leer tanto literatura fantastica como mangas y veo anime asiduamente.

    +

    En verano suelo participar en campeonatos de pesca subacuatica y tambien me gusta bastante jugar al futbol federado, aunque hace un tiempillo ya que no hago.

    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +

    ~ Fernando Méndez (fernmend@ucm.es)

    +
    +

    Estudiante de Ingeniería de Computadores en la Universidad Complutense de Madrid.

    +

    Presidente de la asociación Diskobolo. Colaborador de la Oficina de Sotfware Libre de la UCM y coordinador del grupo de Hacking Ético de la FDI.

    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +

    ~ Daniel Muñoz García (danimu03@ucm.es)

    +
    +

    Estudiante del grado en ingeniería informática en la Universidad Complutense de Madrid. Aficionado a la ciberseguridad y las nuevas tecnologías.

    +

    Especializado en el diseño y gestión de bases de datos, tanto SQL como noSQL, y su desarrollo con distintos lenguajes como MongoDB o MySQL.

    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +

    ~ Ioan Marian Tulai (ioantula@ucm.es)

    +
    +

    Estudiante con mucha ilusion y ganas de trabajar especialista en hardware.

    +

    Alta experiencia programando en C, gran interés en aprender nuevos lenguajes de programación y aficionado a dibujar.

    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +

    ~ Óscar Ruiz de Pedro (oscarrui@ucm.es)

    +
    +

    Estudiante de ingeniería de computadores en la Universidad Complutense de Madrid.

    +

    Altas capacidades de programación en bajo nivel, me gustaría aprender más sobre el ámbito de la robótica.

    +

    Aficionado a todo tipo de videojuegos, impresión 3D, teatro y airsoft.

    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +

    ~ Adrian Real del Noval (adrireal@ucm.es)

    +
    +

    Estudiante de 3er año de Ingeniería de Computadores en la Universidad Complutense de Madrid.

    +

    Las áreas en las que tiene mayor interés son la electrónica, las GPUs, y los sistemas empotrados.

    +
    +
    +
    +
    +
    +
    +
    + + + + print_footer(); + ?> + + + + + + diff --git a/fdicines/planificacion/index.php b/fdicines/planificacion/index.php new file mode 100644 index 0000000..c680e6e --- /dev/null +++ b/fdicines/planificacion/index.php @@ -0,0 +1,295 @@ + + + + + + print_head(); + ?> + + + print_header(); + ?> + + + print_main(); + ?> + + +
    +
    +
    +
    +

    Tareas

    +
    +
    +

    Implementaciones Generales de la Web

    +
      +
    • Pantalla de Inicio (incluye promociones y estrenos) [Fer && Adrián]
    • +
    • Cartelera Dinámica [Fer --> Marian && Daniel]
    • +
    • Selección Cines (mapa) [Fer]
    • +
    • Listado de Horarios [Fer]
    • +
    • Selección de butacas [Fer --> Marco && Óscar]
    • +
    • Pagar + opción para código promocional [Fer]
    • +
    • Sobre FDI-Cines (About us) [Fer && Adrián]
    • +
    • Formulario de Contacto [Fer]
    • +
    • Términos y Condiciones [Fer && Adrián]
    • +
    +
    +
    +

    Paneles de Usuario Registrado

    +
      +
    • Registrarse e Iniciar sesión [Adrián]
    • +
    • Menú y panel de Usuario (Historial compras, cambiar contraseña, datos de pago y eliminar usuario) [Adrián]
    • +
    +
    +
    +

    Paneles de Gerente

    +
      +
    • Pantalla de inicio de gerente [Marco && Óscar]
    • +
    • Eliminar sesión de una película [Marco && Óscar]
    • +
    • Deshabilitar salas [Marco && Óscar]
    • +
    • Deshabilitar asientos en una sala [Marco && Óscar]
    • +
    +
    +
    +

    Paneles de Administrador

    +
      +
    • Panel de inicio administrador (ver todas la funcionalidades de admin de un vistazo) [Daniel && Marian]
    • +
    • Ver como >> Usuario no registrado || Usuario registrado || (Gerente: Añadir si vamos bien de tiempo) [Daniel && Marian]
    • +
    • Panel añadir/editar/eliminar cine [Marian && Daniel]
    • +
    • Panel añadir/editar/eliminar películas a la cartelera [Marian && Daniel]
    • +
    • Panel añadir/editar/eliminar promociones [Marian && Daniel]
    • +
    • Panel añadir/editar/eliminar gerentes [Marian && Daniel]
    • +
    +
    +
    +
    +
    +
    +

    Divisón del trabajo

    +
    +
    +

    Marco Expósito Pérez

    +
      +
    • Pantalla de inicio de gerente [Gerente]
    • +
    • Eliminar sesión de una película [Gerente]
    • +
    • Deshabilitar salas [Gerente]
    • +
    • Deshabilitar asientos en una sala [Gerente]
    • +
    • Selección de butacas [General (de apoyo)]
    • +
    +
    +
    +

    Fernando Méndez Torrubiano

    +
      +
    • Pantalla de Inicio (incluye promociones y estrenos) [General]
    • +
    • Cartelera Dinámica [General]
    • +
    • Selección Cines (mapa) [General]
    • +
    • Listado de Horarios [General]
    • +
    • Selección de butacas [General]
    • +
    • Pagar + opción para código promocional [General]
    • +
    • Sobre FDI-Cines (About us) [General (de apoyo)]
    • +
    • Formulario de Contacto [General]
    • +
    • Términos y Condiciones [General (de apoyo)]
    • +
    +
    +
    +

    Daniel Muñoz García

    +
      +
    • Panel de inicio administrador (ver todas la funcionalidades de admin de un vistazo) [Administrador]
    • +
    • Ver como >> Usuario no registrado || Usuario registrado || (Gerente: Añadir si vamos bien de tiempo) [Administrador]
    • +
    • Panel añadir/editar/eliminar cine [Administrador]
    • +
    • Panel añadir/editar/eliminar películas a la cartelera [Administrador]
    • +
    • Panel añadir/editar/eliminar promociones [Administrador]
    • +
    • Panel añadir/editar/eliminar gerentes [Administrador]
    • +
    +
    +
    +

    Ioan Marian Tulai

    +
      +
    • Panel de inicio administrador (ver todas la funcionalidades de admin de un vistazo) [Administrador]
    • +
    • Ver como >> Usuario no registrado | Usuario registrado | (Gerente: Añadir si vamos bien de tiempo) [Administrador]
    • +
    • Panel añadir/editar/eliminar cine [Administrador]
    • +
    • Panel añadir/editar/eliminar películas a la cartelera [Administrador]
    • +
    • Panel añadir/editar/eliminar promociones [Administrador]
    • +
    • Panel añadir/editar/eliminar gerentes [Administrador]
    • +
    +
    +
    +

    Óscar Ruiz de Pedro

    +
      +
    • Pantalla de inicio de gerente [Gerente]
    • +
    • Eliminar sesión de una película [Gerente]
    • +
    • Deshabilitar salas [Gerente]
    • +
    • Deshabilitar asientos en una sala [Gerente]
    • +
    • Selección de butacas [General (de apoyo)]
    • +
    +
    +
    +

    Adrian Real del Noval

    +
      +
    • Registrarse e Iniciar sesión [Usuario Registrado]
    • +
    • Menú y panel de Usuario (Historial compras, cambiar contraseña, datos de pago y eliminar usuario) [Usuario Registrado]
    • +
    • Sobre FDI-Cines (About us) [General]
    • +
    • Términos y Condiciones [General]
    • +
    • Pantalla de Inicio (incluye promociones y estrenos) [General (de apoyo)]
    • +
    +
    +
    +
    +
    +
    +

    Plazos

    +
    +
    +

    Práctica 1 [HTML]

    +
    100%
    +
      +
    • Inicio
    • +
    • Detalles
    • +
    • Bocetos
    • +
    • Miembros
    • +
    • Planificación
    • +
    • Contacto
    • +
    +
    +
    +

    Práctica 2 [HTML + PHP]

    +
    100%
    +
      +
    • Sobre FDI-Cines (About us) [Fer && Adrián]
    • +
    • Formulario de Contacto [Fer]
    • +
    • Términos y Condiciones [Fer && Adrián]
    • +
    • Pantalla de inicio de gerente [Marco && Óscar]
    • +
    +
    75%
    +
      +
    • Pantalla de Inicio (incluye promociones y estrenos) [Fer && Adrián]
    • +
    • Listado de Horarios [Fer]
    • +
    +
    50%
    +
      +
    • Menú y panel de Usuario (Historial compras, cambiar contraseña, datos de pago y eliminar usuario) [Adrián]
    • +
    • Eliminar sesión de una película [Marco && Óscar]
    • +
    • Deshabilitar salas [Marco && Óscar]
    • +
    • Panel de inicio administrador (ver todas la funcionalidades de admin de un vistazo) [Daniel && Marian]
    • +
    • Panel añadir/editar/eliminar cine [Marian && Dani]
    • +
    • Panel añadir/editar/eliminar películas a la cartelera [Marian && Dani]
    • +
    +
    25%
    +
      +
    • Registrarse && Iniciar sesión [Adrián]
    • +
    • Deshabilitar asientos en una sala [Marco && Óscar]
    • +
    • Ver como >> Usuario no registrado | Usuario registrado | (Gerente: Añadir si vamos bien de tiempo) [Daniel && Marian]
    • +
    • Panel añadir/editar/eliminar promociones [Marian && Dani]
    • +
    • Panel añadir/editar/eliminar gerentes [Marian && Dani]
    • +
    +
    +
    +

    Práctica 3 [HTML + PHP + CSS]

    +
    100%
    +
      +
    • Eliminar sesión de una película [Marco && Óscar]
    • +
    • Deshabilitar salas [Marco && Óscar]
    • +
    +
    75%
    +
      +
    • Registrarse && Iniciar sesión [Adrián]
    • +
    • Menú y panel de Usuario (Historial compras, cambiar contraseña, datos de pago y eliminar usuario) [Adrián]
    • +
    • Panel de inicio administrador (ver todas la funcionalidades de admin de un vistazo) [Daniel && Marian]
    • +
    • Panel añadir/editar/eliminar cine [Marian && Dani]
    • +
    • Panel añadir/editar/eliminar películas a la cartelera [Marian && Dani]
    • +
    +
    50%
    +
      +
    • Deshabilitar asientos en una sala [Marco && Óscar]
    • +
    • Ver como >> Usuario no registrado | Usuario registrado | (Gerente: Añadir si vamos bien de tiempo) [Daniel && Marian]
    • +
    • Panel añadir/editar/eliminar promociones [Marian && Dani]
    • +
    • Panel añadir/editar/eliminar gerentes [Marian && Dani]
    • +
    +
    +
    +

    Entrega Final [HTML + PHP + CSS + JS]

    +
    100%
    +
      +
    • Todo el trabajo restante.
    • +
    +
    +
    +
    +
    +
    + + +
    +

    Línea Temporal

    +
    +
    +
    + + +
    +

    Hitos

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    HitoFecha estimadaEstado
    Práctica 04 de Marzo de 2021ENTREGADO
    Práctica 118 de Marzo de 2021ENTREGADO
    Práctica 215 de Abril de 2021EN PROCESO
    Práctica 37 de Mayo de 2021PENDIENTE
    Entrega Final28 de Mayo de 2021PENDIENTE
    +
    + + +
    +

    + *Esta planificación es orientativa y puede ir cambiando a lo largo del tiempo + en función de los requisitos de las prácticas y nuestra carga de trabajo. +

    +
    + + + print_footer(); + ?> + + + + \ No newline at end of file diff --git a/fdicines/terms_conditions/index.php b/fdicines/terms_conditions/index.php new file mode 100644 index 0000000..94ce066 --- /dev/null +++ b/fdicines/terms_conditions/index.php @@ -0,0 +1,220 @@ + + + + + + print_head(); + ?> + + + print_header(); + ?> + + + print_main(); + ?> + + +
    +
    +

    + 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: +


    +

    + 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. +


    + +
      +
    1. + 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. +

    2. +
    3. + 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. +

    4. +
    5. + 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. +

    6. +
    7. + 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: +
        +
      • + 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. +
      • +
      • + 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. +
      • +
      • + 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. +
      • +
      • + 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. +
      • +
      • + 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. +
      • +
      • + 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. +
      • +
      • + 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. +
      • +
      +

    8. +
    9. + 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. +

    10. +
    11. + 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. +

    12. +
    13. + 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. +

    14. +
    15. + 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. +

    16. +
    17. + 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. +

    18. +
    19. + 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. +

    20. +
    21. + 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. +

    22. +
    23. + 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. +

    24. +
    25. + 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. +

    26. +
    27. + 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. +

    28. +
    +
    +
    + + + print_footer(); + ?> + + + + diff --git a/img/about_us.png b/img/about_us.png new file mode 100644 index 0000000..a5d24b4 Binary files /dev/null and b/img/about_us.png differ diff --git a/img/arn.jpg b/img/arn.jpg new file mode 100644 index 0000000..380ea99 Binary files /dev/null and b/img/arn.jpg differ diff --git a/img/avengers_age_of_ultron.jpg b/img/avengers_age_of_ultron.jpg new file mode 100644 index 0000000..f2a97d1 Binary files /dev/null and b/img/avengers_age_of_ultron.jpg differ diff --git a/img/avengers_end_game.jpg b/img/avengers_end_game.jpg new file mode 100644 index 0000000..2663768 Binary files /dev/null and b/img/avengers_end_game.jpg differ diff --git a/img/avengers_inifinity_war.jpg b/img/avengers_inifinity_war.jpg new file mode 100644 index 0000000..e7f2ef8 Binary files /dev/null and b/img/avengers_inifinity_war.jpg differ diff --git a/img/capitan_america_civil_war.jpg b/img/capitan_america_civil_war.jpg new file mode 100644 index 0000000..006a486 Binary files /dev/null and b/img/capitan_america_civil_war.jpg differ diff --git a/img/capitan_america_el_primer_vengador.jpg b/img/capitan_america_el_primer_vengador.jpg new file mode 100644 index 0000000..efe8da8 Binary files /dev/null and b/img/capitan_america_el_primer_vengador.jpg differ diff --git a/img/capitan_america_el_soldado_de_invierno.jpg b/img/capitan_america_el_soldado_de_invierno.jpg new file mode 100644 index 0000000..b9f3d67 Binary files /dev/null and b/img/capitan_america_el_soldado_de_invierno.jpg differ diff --git a/img/cine.png b/img/cine.png new file mode 100644 index 0000000..47a66b1 Binary files /dev/null and b/img/cine.png differ diff --git a/img/compra_realizada.png b/img/compra_realizada.png new file mode 100644 index 0000000..831c2bc Binary files /dev/null and b/img/compra_realizada.png differ diff --git a/img/contacto.png b/img/contacto.png new file mode 100644 index 0000000..bb2b56e Binary files /dev/null and b/img/contacto.png differ diff --git a/img/dmg.jpg b/img/dmg.jpg new file mode 100644 index 0000000..c76d85c Binary files /dev/null and b/img/dmg.jpg differ diff --git a/img/favicon.png b/img/favicon.png new file mode 100644 index 0000000..002676a Binary files /dev/null and b/img/favicon.png differ diff --git a/img/favicon2.png b/img/favicon2.png new file mode 100644 index 0000000..cce04d6 Binary files /dev/null and b/img/favicon2.png differ diff --git a/img/fmt.jpg b/img/fmt.jpg new file mode 100644 index 0000000..18f0137 Binary files /dev/null and b/img/fmt.jpg differ diff --git a/img/gestionar_admins_gerentes.png b/img/gestionar_admins_gerentes.png new file mode 100644 index 0000000..8f39c3c Binary files /dev/null and b/img/gestionar_admins_gerentes.png differ diff --git a/img/gestionar_cines.png b/img/gestionar_cines.png new file mode 100644 index 0000000..d83a9c6 Binary files /dev/null and b/img/gestionar_cines.png differ diff --git a/img/gestionar_peliculas.png b/img/gestionar_peliculas.png new file mode 100644 index 0000000..5983e7f Binary files /dev/null and b/img/gestionar_peliculas.png differ diff --git a/img/gestionar_promociones.png b/img/gestionar_promociones.png new file mode 100644 index 0000000..852d802 Binary files /dev/null and b/img/gestionar_promociones.png differ diff --git a/img/gestionar_salas.png b/img/gestionar_salas.png new file mode 100644 index 0000000..8f97f01 Binary files /dev/null and b/img/gestionar_salas.png differ diff --git a/img/gestionar_sesiones.png b/img/gestionar_sesiones.png new file mode 100644 index 0000000..8aebe9d Binary files /dev/null and b/img/gestionar_sesiones.png differ diff --git a/img/imt.jpg b/img/imt.jpg new file mode 100644 index 0000000..355d3a7 Binary files /dev/null and b/img/imt.jpg differ diff --git a/img/index.php b/img/index.php new file mode 100644 index 0000000..1d63e66 --- /dev/null +++ b/img/index.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/img/inicio.png b/img/inicio.png new file mode 100644 index 0000000..b76b60f Binary files /dev/null and b/img/inicio.png differ diff --git a/img/iron_man.jpg b/img/iron_man.jpg new file mode 100644 index 0000000..f70600e Binary files /dev/null and b/img/iron_man.jpg differ diff --git a/img/iron_man_2.jpg b/img/iron_man_2.jpg new file mode 100644 index 0000000..e8eab6e Binary files /dev/null and b/img/iron_man_2.jpg differ diff --git a/img/iron_man_3.jpg b/img/iron_man_3.jpg new file mode 100644 index 0000000..1cc0092 Binary files /dev/null and b/img/iron_man_3.jpg differ diff --git a/img/linea_temporal.png b/img/linea_temporal.png new file mode 100644 index 0000000..7d475c3 Binary files /dev/null and b/img/linea_temporal.png differ diff --git a/img/logo.png b/img/logo.png new file mode 100644 index 0000000..72ffd51 Binary files /dev/null and b/img/logo.png differ diff --git a/img/logo_trasparente.png b/img/logo_trasparente.png new file mode 100644 index 0000000..418e6f0 Binary files /dev/null and b/img/logo_trasparente.png differ diff --git a/img/mapa_asientos .png b/img/mapa_asientos .png new file mode 100644 index 0000000..3db5ab6 Binary files /dev/null and b/img/mapa_asientos .png differ diff --git a/img/mapa_asientos.png b/img/mapa_asientos.png new file mode 100644 index 0000000..3db5ab6 Binary files /dev/null and b/img/mapa_asientos.png differ diff --git a/img/marvel_avengers.jpg b/img/marvel_avengers.jpg new file mode 100644 index 0000000..7150fd8 Binary files /dev/null and b/img/marvel_avengers.jpg differ diff --git a/img/menu_usuario.png b/img/menu_usuario.png new file mode 100644 index 0000000..944c58d Binary files /dev/null and b/img/menu_usuario.png differ diff --git a/img/mep.jpg b/img/mep.jpg new file mode 100644 index 0000000..adcbef6 Binary files /dev/null and b/img/mep.jpg differ diff --git a/img/orp.jpg b/img/orp.jpg new file mode 100644 index 0000000..9baf98d Binary files /dev/null and b/img/orp.jpg differ diff --git a/img/pagar.png b/img/pagar.png new file mode 100644 index 0000000..7087d2e Binary files /dev/null and b/img/pagar.png differ diff --git a/img/panel_inicio_admin.png b/img/panel_inicio_admin.png new file mode 100644 index 0000000..ed53e68 Binary files /dev/null and b/img/panel_inicio_admin.png differ diff --git a/img/panel_inicio_gerente.png b/img/panel_inicio_gerente.png new file mode 100644 index 0000000..b55939e Binary files /dev/null and b/img/panel_inicio_gerente.png differ diff --git a/img/peliculas.png b/img/peliculas.png new file mode 100644 index 0000000..e5e0949 Binary files /dev/null and b/img/peliculas.png differ diff --git a/img/plantilla.png b/img/plantilla.png new file mode 100644 index 0000000..78f5fc8 Binary files /dev/null and b/img/plantilla.png differ diff --git a/img/registrarse_iniciar_sesion.png b/img/registrarse_iniciar_sesion.png new file mode 100644 index 0000000..f29d7b6 Binary files /dev/null and b/img/registrarse_iniciar_sesion.png differ diff --git a/img/sala1.jpg b/img/sala1.jpg new file mode 100644 index 0000000..019bd36 Binary files /dev/null and b/img/sala1.jpg differ diff --git a/img/selector_horario.png b/img/selector_horario.png new file mode 100644 index 0000000..e0d3886 Binary files /dev/null and b/img/selector_horario.png differ diff --git a/img/terminos_y_condiciones.png b/img/terminos_y_condiciones.png new file mode 100644 index 0000000..3da4927 Binary files /dev/null and b/img/terminos_y_condiciones.png differ diff --git a/img/terminosyCondiciones.png b/img/terminosyCondiciones.png new file mode 100644 index 0000000..3da4927 Binary files /dev/null and b/img/terminosyCondiciones.png differ diff --git a/index.php b/index.php new file mode 100644 index 0000000..c72a724 --- /dev/null +++ b/index.php @@ -0,0 +1,95 @@ + +allFilmData(); + $tittles = array(); + foreach($films_array as $key => $value){ + $tittles[$key] = $value->getTittle(); + } +?> + + + + print_head(); + ?> + + + print_header(); + ?> + + +
    +
    logo_FDI-Cines
    + Bienvenido {$_SESSION["nombre"]}\n"; + } + else{ + echo "

    Bienvenido a CompluCine

    \n"; + } + ?> +
    +
    + + +
    +
    +
    +
    +
    +

    Últimos Estrenos


    + + "; + echo "
    + "; + } + echo "
    +
    +
    ".$tittles[$i]."
    +
    +
    + "; + $count++; + } + echo "
    \n"; + ?> +
    +
    +
    +
    + {$title}
    +
    +
    ".$tittles[$count]."
    +
    \n"; + ?> +
    +
    +
    +
    +
    + + + + print_footer(); + ?> + + + diff --git a/login/includes/formLogin.php b/login/includes/formLogin.php new file mode 100644 index 0000000..01be373 --- /dev/null +++ b/login/includes/formLogin.php @@ -0,0 +1,94 @@ +reply = array(); + } + + //Methods: + + //Returns validation response: + public function getReply() { + + if(isset($_SESSION["login"])){ + $name = strtoupper($_SESSION['nombre']); + $this->reply = "

    Bienvenido {$_SESSION['nombre']}


    +

    {$name}, has iniciado sesión correctamente.

    +

    Usa los botones para navegar

    + + \n"; + } + else if(!isset($_SESSION["login"])){ + $this->reply = "

    ERROR


    ". + "

    El usuario o contraseña no son válidos.

    +

    Vuelve a intetarlo o regístrate si no lo habías hecho previamente.

    + +
    \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))); + } + +} +?> \ No newline at end of file diff --git a/login/includes/user_dao.php b/login/includes/user_dao.php new file mode 100644 index 0000000..3c8f7e3 --- /dev/null +++ b/login/includes/user_dao.php @@ -0,0 +1,95 @@ +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); + } + + } + +?> \ No newline at end of file diff --git a/login/includes/user_dto.php b/login/includes/user_dto.php new file mode 100644 index 0000000..342eac7 --- /dev/null +++ b/login/includes/user_dto.php @@ -0,0 +1,37 @@ + 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; } + + } +?> \ No newline at end of file diff --git a/login/includes/users_dto_interface.php b/login/includes/users_dto_interface.php new file mode 100644 index 0000000..4705352 --- /dev/null +++ b/login/includes/users_dto_interface.php @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/login/index.php b/login/index.php new file mode 100644 index 0000000..444ffbc --- /dev/null +++ b/login/index.php @@ -0,0 +1,55 @@ + +getIsLogin(); + $login = $view->getLogin(); + $register = $view->getRegister(); +?> + + + + print_head(); + ?> + + + print_header(); + ?> + + +
    +
    +

    Acceso

    +
    +
    + + +
    +
    + +
    +
    + + + print_footer(); + ?> + + + + diff --git a/login/login_register_view.php b/login/login_register_view.php new file mode 100644 index 0000000..3cd02b5 --- /dev/null +++ b/login/login_register_view.php @@ -0,0 +1,125 @@ +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 = ' +
    +

    Registro

    +
    +
    +
    + Datos personales +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    + + +
    +
    +
    +
    +
    +
    +

    ¿Ya estás registrado?

    +
    +

    Si dispones de una cuenta de usuario, no es necesario que rellenes este formulario nuevamente

    +

    Haz click en el botón para iniciar sesión.

    +
    + +
    +
    +
    '."\n"; + + $this->login = ' +
    +
    +

    ¿No tienes una cuenta?

    +
    +

    Para crear una cuenta de usuario es necesario haber rellenado el formulario de registro previamente

    +

    Haz click en el botón para registrate.

    +
    + +
    +
    +
    +
    +

    Iniciar Sesión

    +
    +
    +
    + Datos personales +
    + +
    + +
    + +
    +
    +
    + + +
    +
    +
    +
    '."\n"; + } + } +?> \ No newline at end of file diff --git a/login/validate.php b/login/validate.php new file mode 100644 index 0000000..0c9453a --- /dev/null +++ b/login/validate.php @@ -0,0 +1,55 @@ +processesForm($_POST["name"], $_POST["pass"]); + $reply = $login->getReply(); + +?> + + + + + print_head(); + ?> + + + print_header(); + ?> + + +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + print_footer(); + ?> + + + + \ No newline at end of file diff --git a/logout/index.php b/logout/index.php new file mode 100644 index 0000000..4ac706a --- /dev/null +++ b/logout/index.php @@ -0,0 +1,67 @@ +Se ha cerrado la sesión
    ". + "

    Serás redirigido al inicio en unos segundos.
    + Haz clic aquí si tu navegador no te redirige automáticamente.

    \n"; + } + else{ + $reply = "

    Ha ocurrido un problema y no hemos podido finalizar la sesión

    ". + "

    Serás redirigido al inicio en unos segundos.
    + Haz clic aquí si tu navegador no te redirige automáticamente.

    \n"; + } + + +?> + + + + + print_head(); + ?> + + + print_header(); + ?> + + +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + print_footer(); + ?> + + + + \ No newline at end of file diff --git a/panel_admin/includes/film_dao.php b/panel_admin/includes/film_dao.php new file mode 100644 index 0000000..1bb9682 --- /dev/null +++ b/panel_admin/includes/film_dao.php @@ -0,0 +1,103 @@ +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); + } + + } + +?> diff --git a/panel_admin/includes/film_dto.php b/panel_admin/includes/film_dto.php new file mode 100644 index 0000000..3b24897 --- /dev/null +++ b/panel_admin/includes/film_dto.php @@ -0,0 +1,37 @@ +_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;} + } +?> \ No newline at end of file diff --git a/panel_admin/includes/film_dto_interface.php b/panel_admin/includes/film_dto_interface.php new file mode 100644 index 0000000..23931f3 --- /dev/null +++ b/panel_admin/includes/film_dto_interface.php @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/panel_admin/includes/formFilm.php b/panel_admin/includes/formFilm.php new file mode 100644 index 0000000..429e404 --- /dev/null +++ b/panel_admin/includes/formFilm.php @@ -0,0 +1,121 @@ +reply = array(); + } + + + + public function getReply() { + if($this->correct){ + if($this->option == "new"){ + $this->reply = "

    Operacion realizada con exito


    +

    Se ha añadido la pelicula correctamente en la base de datos.

    + "; + }else if($this->option == "edit"){ + $this->reply = "

    Operacion realizada con exito


    +

    Se ha editado la pelicula correctamente en la base de datos.

    + "; + }else if($this->option == "del"){ + $this->reply = "

    Operacion realizada con exito


    +

    Se ha eliminado la pelicula correctamente en la base de datos.

    + "; + } else if($this->option == "show"){ + $this->reply= $this->array; + } + + } else { + $this->reply = "

    ERROR


    +

    Ha habido un error en la operacion. Revisa los datos introducidos

    + "; + + } + 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))); + } +} + + +?> \ No newline at end of file diff --git a/panel_admin/index.php b/panel_admin/index.php new file mode 100644 index 0000000..6ccb11c --- /dev/null +++ b/panel_admin/index.php @@ -0,0 +1,79 @@ + + + + + + print_head(); + ?> + + + print_header(); + ?> + + + print_main(); + ?> + + +
    + + + +
    +
    +
    + print_msg(); + $panel->showPanel(); + ?> +
    +
    +
    +
    + + + print_footer(); + ?> + + + diff --git a/panel_admin/manage_cinemas.php b/panel_admin/manage_cinemas.php new file mode 100644 index 0000000..50f1c28 --- /dev/null +++ b/panel_admin/manage_cinemas.php @@ -0,0 +1,67 @@ + "1234", + "name" => "cineJuan", + "address"=> "calle..", + "phone_number"=>"660099000", +); + +$delete_cinemas=' +
    +

    Lista de cines

    +

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    idCinenombreDirecciónTeléfono
    '. $cinema['idCine'] .' '. $cinema['name'] .' '. $cinema['address'] .' '. $cinema['phone_number'] .'
    +
    +
    '."\n"; +$add_cinemas=' +
    +

    Añadir o modificar cine

    +
    +
    +
    + Datos del cine +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    '."\n"; +?> diff --git a/panel_admin/manage_films.php b/panel_admin/manage_films.php new file mode 100644 index 0000000..3fd8a87 --- /dev/null +++ b/panel_admin/manage_films.php @@ -0,0 +1,92 @@ +processesForm(null, null, null, null, null, "show"); + + function drawFilms($films){ + echo " + + + + + + + + + + + "; + foreach($films as $f){ + echo ' + + + + + + + + + '; + } + echo' +
    IdTítuloDuracionIdiomaDescripcion
    '. $f->getId() .''. $f->getTittle() .''. $f->getDuration() .''. $f->getLanguage() .''. $f->getDescription().' +
    + + + + + + +
    +
    +
    + + + + + + +
    +
    '; + } + function addFilm(){ + echo'
    +

    Añadir pelicula

    +
    +
    +
    + Datos de pelicula +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    '; + } + drawFilms($film->getReply()); + addFilm(); + +?> \ No newline at end of file diff --git a/panel_admin/panelAdmin.php b/panel_admin/panelAdmin.php new file mode 100644 index 0000000..397b830 --- /dev/null +++ b/panel_admin/panelAdmin.php @@ -0,0 +1,30 @@ +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"

    En construcción

    "; break; + case 'mf': require_once('manage_films.php'); break; + case 'md': /*require_once('manage_discounts.php')*/;echo"

    En construcción

    "; break; + case 'mm': /*require_once('manage_managers.php')*/;echo"

    En construcción

    "; break; + case 'un': echo"

    En construcción

    "; break; + case 'ur': echo"

    En construcción

    ";; break; + case 'ag': echo"

    En construcción

    ";; break; + default: echo "

    BIENVENIDO AL PANEL DE ADMINISTRADOR

    "; break; + } + } + else { + echo "

    NO TIENES PERMISOS DE ADMINISTRADOR

    "; + } + } + } +?> + diff --git a/panel_admin/updateFilm.php b/panel_admin/updateFilm.php new file mode 100644 index 0000000..5eee9df --- /dev/null +++ b/panel_admin/updateFilm.php @@ -0,0 +1,59 @@ + +

    Editar pelicula

    +
    +
    +
    + Datos de pelicula + +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + +
    +
    +
    + '; + } + else if(isset($_POST['delete_film'])) { + echo'
    +

    Editar pelicula

    +
    +
    +
    + ¿Estás seguro de que quieres eliminar esta pelicula? + +

    Id: '.$_POST['id'].'

    +

    Título: '.$_POST['tittle'].'

    +

    Duración: '.$_POST['duration'].'

    +

    Idioma: '.$_POST['language'].'

    +

    Descripción: '.$_POST['description'].'

    +
    +
    + + +
    +
    +
    +
    '; + + } + + +?> \ No newline at end of file diff --git a/panel_admin/update_film.php b/panel_admin/update_film.php new file mode 100644 index 0000000..839f8cb --- /dev/null +++ b/panel_admin/update_film.php @@ -0,0 +1,22 @@ +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'); + +?> \ No newline at end of file diff --git a/panel_manager/edit_sessions.php b/panel_manager/edit_sessions.php new file mode 100644 index 0000000..da6e69f --- /dev/null +++ b/panel_manager/edit_sessions.php @@ -0,0 +1,139 @@ +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 "
    +

    Editar/Eliminar Sesion

    +
    +
    +
    + Datos +
    + +
    + +
    + +
    + Horario +
    + +
    +
    + +
    +
    +
    + + + +
    +
    + +
    +
    + +
    + +
    + +
    + +
    + Horario +
    + +
    +
    + +
    +
    +
    Introducir un numero para añadir esta sesion a los futuros X dias + +
    +
    +
    + + +
    +
    + +
    +
    + + + + +
    "; + + function drawSessions($sessions,$bd){ + echo " + +
    + + + + + + + + + + "; + foreach($sessions as $s){ + $film = mysqli_fetch_array($bd->FilmData($s->getIdfilm())); + echo " + + + + + + + getIdfilm()."\"> + getIdhall()."\"> + getDate()."\"> + getStartTime()."\"> + getSeatPrice()."\"> + getFormat()."\"> + + + "; + } + echo " + +
    HoraPeliculaFormatoPrecio
    " . date('H:i', strtotime( $s->getStartTime())) . " " . str_replace('_', ' ', $film["tittle"]) . " " . $s->getFormat() . " " . $s->getSeatPrice() . "
    + +
    \n"; + + } + if($formSession->getReply()){ + $bd = new Film_DAO('complucine'); + if($bd){ + drawSessions($formSession->getReply(), $bd); + } else { + echo "
    +

    Hay un error en la conexion

    +
    "; + } + } else { + echo " + +
    +

    No hay ninguna session en la sala ". $placeholder_hall . " el dia ". $placeholder_date . "

    + +
    \n"; + } +?> \ No newline at end of file diff --git a/panel_manager/panel_manager.php b/panel_manager/panel_manager.php new file mode 100644 index 0000000..c242059 --- /dev/null +++ b/panel_manager/panel_manager.php @@ -0,0 +1,28 @@ +state = $panel; + $this->login = $log; + + } + + function showPanel() { + if($this->login){ + switch($this->state) { + case 'us_u': echo "

    Esta vista no esta implementada

    "; break; + case 'us_r': echo "

    Esta vista no esta implementada

    "; 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 "

    Error no tienes los permisos necesarios de gerente

    "; + } + } + } +?> \ No newline at end of file diff --git a/panel_manager/validateSession.php b/panel_manager/validateSession.php new file mode 100644 index 0000000..d97aedd --- /dev/null +++ b/panel_manager/validateSession.php @@ -0,0 +1,77 @@ + ERROR DE ACCESO

    " ; + + 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"] = ""; + } + +?> + + + + + print_head(); + ?> + + + print_header(); + ?> + + +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + print_footer(); + ?> + + + + \ No newline at end of file diff --git a/panel_user/index.php b/panel_user/index.php new file mode 100644 index 0000000..9170c85 --- /dev/null +++ b/panel_user/index.php @@ -0,0 +1,73 @@ + + + + + + print_head(); + ?> + + + print_header(); + ?> + + + print_main(); + ?> + + +
    + + + +
    +
    +
    +

    AQUÍ EL CONTENIDO DE CADA FUNCIONALIDAD.

    +

    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í).

    +

    Tendréis que rehacer todo el "PANEL" con PHP.

    +
    +
    +
    +
    + + + print_footer(); + ?> + + + + diff --git a/register/includes/formRegister.php b/register/includes/formRegister.php new file mode 100644 index 0000000..5af1e51 --- /dev/null +++ b/register/includes/formRegister.php @@ -0,0 +1,104 @@ +reply = array(); + } + + //Methods: + + //Returns validation response: + public function getReply() { + + if(isset($_SESSION["login"])){ + $name = strtoupper($_SESSION['nombre']); + $this->reply = "

    Bienvenido {$_SESSION['nombre']}


    +

    {$name}, has creado tu cuenta de usuario correctamente.

    +

    Usa los botones para navegar

    + + \n"; + } + else if(!isset($_SESSION["login"])){ + $this->reply = "

    ERROR


    ". + "

    Ha ocurrido un problema y no hemos podido completar el registro.

    +

    Vuelve a intetarlo o inicia sesión si tienes una cuenta de usuario.

    + +
    \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 || mb_strlen($password) < 4) { + $register = false; + } + if(!$repassword || mb_strlen($repassword) < 4){ + $register = false; + } + if($password != $repassword){ + $register = false; + } + + if ($register) { + $bd = new UserDAO('complucine'); + if($bd){ + try{ + $this->user = $bd->selectUser($username, $password); + 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; + } + } + else{ + $_SESSION["login"] = false; + } + } + catch (Exception $e){ + $_SESSION["login"] = $register; + } + } + } + } + + protected function test_input($input){ + return htmlspecialchars(trim(strip_tags($input))); + } + +} +?> \ No newline at end of file diff --git a/register/register.php b/register/register.php new file mode 100644 index 0000000..786961d --- /dev/null +++ b/register/register.php @@ -0,0 +1,55 @@ +processesForm($_POST["name"], $_POST["email"], $_POST["pass"], $_POST["repass"]); + $reply = $register->getReply(); + +?> + + + + + print_head(); + ?> + + + print_header(); + ?> + + +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + print_footer(); + ?> + + + + \ No newline at end of file diff --git a/showtimes/index.php b/showtimes/index.php new file mode 100644 index 0000000..0c20517 --- /dev/null +++ b/showtimes/index.php @@ -0,0 +1,84 @@ + +allFilmData(); + $titles = array(); + $descriptions = array(); + $times = array(); + foreach($films as $key => $value){ + $titles[$key] = $value->getTittle(); + $descriptions[$key] = $value->getDescription(); + $times[$key] = $value->getDuration(); + } +?> + + + + print_head(); + ?> + + + print_header(); + ?> + + + print_main(); + ?> + + +
    +
    + + "; + echo "
    + "; + } + else{ + if($i != 0) echo "
    + "; + echo "
    + "; + } + echo "
    +
    +
    +
    ".$titles[$i]."
    +

    ".$title."

    +
    +
    +

    ".$descriptions[$i]."

    +
    +

    Duración: ".$times[$i]." minutos

    +
    +
    +
    + "; + } + echo "
    \n"; + ?> +
    +
    + + + print_footer(); + ?> + + + +