diff --git a/assets/css/highContrast.css b/assets/css/highContrast.css index d04ec78..7373fe8 100644 --- a/assets/css/highContrast.css +++ b/assets/css/highContrast.css @@ -336,14 +336,28 @@ text-align: center; height: 250px; } +.code.info img{ + width: 75px; + height: 75px; + margin-top: 5px; + border: 1px solid #d3ebff; + border-radius: 5px; + padding: 5px; + transition: .5s ease; + backface-visibility: hidden; + +} .code.showtimes{ - height: 500px; + height: 600px; } .code.showtimes p{ height: 5em; overflow-x: auto; overflow-y: auto; -} +} +.code.showtimes:hover { + filter: drop-shadow(5px 5px 10px #1f2c3d); +} /* BlockQuotes */ .blockquote { diff --git a/assets/css/main.css b/assets/css/main.css index a69c26f..f4896d2 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -335,14 +335,28 @@ main img { text-align: center; height: 250px; } +.code.info img{ + width: 75px; + height: 75px; + margin-top: 5px; + border: 1px solid #d3ebff; + border-radius: 5px; + padding: 5px; + transition: .5s ease; + backface-visibility: hidden; + +} .code.showtimes{ - height: 500px; + height: 600px; } .code.showtimes p{ height: 5em; overflow-x: auto; overflow-y: auto; } +.code.showtimes:hover { + filter: drop-shadow(5px 5px 10px #1f2c3d); +} /* BlockQuotes */ diff --git a/assets/php/common/formUploadFiles.php b/assets/php/common/formUploadFiles.php index 4716f20..59cd55b 100644 --- a/assets/php/common/formUploadFiles.php +++ b/assets/php/common/formUploadFiles.php @@ -22,9 +22,10 @@ class FormUploadFiles extends Form { // Se genera el HTML asociado a los campos del formulario y los mensajes de error. $html = ' -

'.$htmlErroresGlobales.'
-

'.$errorFile.'
- '.$dats.' +
+
'.$htmlErroresGlobales.'
+
+
'.$errorFile.'
'; return $html; @@ -64,7 +65,7 @@ class FormUploadFiles extends Form { } // 4. Si fuese necesario guardar en la base de datos la ruta relativa $nombre del archivo - return "index.php#img=".urlencode('img/'.$nombre); + //return "index.php#img=".urlencode('img/'.$nombre); } else { $result["errorFile"] = 'El archivo tiene un nombre o tipo no soportado'; } diff --git a/assets/php/config.php b/assets/php/config.php index a43a20f..1a41184 100644 --- a/assets/php/config.php +++ b/assets/php/config.php @@ -16,8 +16,9 @@ /** * Image files directory. */ - define('FILMS_DIR', dirname(RAIZ_APP).'/img/films/tmp'); - define('FILMS_DIR_PROTECTED', RAIZ_APP.'/img/films/tmp'); + define('FILMS_DIR', dirname(RAIZ_APP).'/img/films/tmp/'); + define('FILMS_DIR_PROTECTED', RAIZ_APP.'/img/films/tmp/'); + define('USER_PICS', dirname(ROUTE_APP).'img/users/'); /** * Allowed extensions for image files. diff --git a/assets/php/includes/film_dao.php b/assets/php/includes/film_dao.php index 646848c..0f39d79 100644 --- a/assets/php/includes/film_dao.php +++ b/assets/php/includes/film_dao.php @@ -26,12 +26,25 @@ return $resul; } - //Returns a query to get the film's data. + //Returns the film's data by ID. public function FilmData($id){ + $id = $this->mysqli->real_escape_string($id); + $sql = sprintf( "SELECT * FROM film WHERE id = '%d'", $id ); $resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database'); - return $resul; + $resul->data_seek(0); + $film = null; + while ($fila = $resul->fetch_assoc()) { + if($id === $fila['id']){ + $film = $this->loadFilm($fila["id"], $fila["tittle"], $fila["duration"], $fila["language"], $fila["description"], $fila["img"]); + } + } + + //mysqli_free_result($selectUser); + $resul->free(); + + return $film; } //Returns a query to get All the films. @@ -89,6 +102,24 @@ return $resul; } + + //Get cinemas associated with a movie. + public function getCinemas($id){ + include_once('cinema_dao.php'); + $cinema = new Cinema_DAO("complucine"); + + $sql = sprintf( " SELECT DISTINCT * FROM cinema WHERE cinema.id in + (SELECT session.idcinema FROM session JOIN film ON session.idfilm = film.id WHERE film.id = '%d'); ", $id); + $resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database'); + + //$cinemas[] = null; + while($fila = $resul->fetch_assoc()){ + $cinemas[] = $cinema->loadCinema($fila["id"], $fila["name"], $fila["direction"], $fila["phone"]); + } + $resul->free(); + + return $cinemas; + } //Create a new film Data Transfer Object. public function loadFilm($id, $tittle, $duration, $language,$description, $img){ diff --git a/assets/php/template.php b/assets/php/template.php index b2d2a4d..f0c2044 100644 --- a/assets/php/template.php +++ b/assets/php/template.php @@ -40,6 +40,7 @@ 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, 'purchase'): $this->page = 'Comprar Entrada'; break; case strpos($this->page, 'promotions'): $this->page = 'Promociones'; 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; @@ -223,11 +224,10 @@ "); break; - case "user": array_push($menus, "
  • Cuenta de usuario
  • "); - array_push($menus, "
  • Historial Compras
  • "); - array_push($menus, "
  • Datos Pago
  • "); - array_push($menus, "
  • Eliminar Usuario
  • "); - break; + case "user": array_push($menus, "
  • Historial Compras
  • "); + array_push($menus, "
  • Datos Pago
  • "); + array_push($menus, "
  • Eliminar Usuario
  • "); + break; default: $menus = array(); break; } @@ -303,6 +303,7 @@ } $reply .= "
    +
    ".$tittles[$i]."

    ".$tittle."

    @@ -313,6 +314,7 @@
  • Duración: ".$times[$i]." minutos
  • Lenguaje: ".$languages[$i]."
  • +
    "; diff --git a/contacto/includes/formContact.php b/contacto/includes/formContact.php index 04f3157..fe54658 100644 --- a/contacto/includes/formContact.php +++ b/contacto/includes/formContact.php @@ -1,5 +1,6 @@ getName().""; $emailValue = "value=".unserialize($_SESSION['user'])->getEmail().""; } + else { $nameValue = "placeholder='Nombre'"; $emailValue = "placeholder='Email'"; } // Se generan los mensajes de error si existen. $htmlErroresGlobales = self::generaListaErroresGlobales($errores); @@ -23,10 +26,10 @@ class FormContact extends Form {
    Datos personales
    ".$htmlErroresGlobales."
    -
    ".$errorNombre."
    +
    ".$errorNombre."
    -
    ".$errorEmail."
    +
    ".$errorEmail."
    @@ -65,8 +68,8 @@ class FormContact extends Form { $result = array(); $nombre = $this->test_input($datos['name']) ?? null; - if ( empty($nombre) || mb_strlen($nombre) < 3 || mb_strlen($nombre) > 8 ) { - $result['name'] = "El nombre tiene que tener\n una longitud de más de\n 3 caracteres\n y menos de 8 caracteres."; + if ( empty($nombre) || mb_strlen($nombre) < 3 || mb_strlen($nombre) > 15 ) { + $result['name'] = "El nombre tiene que tener\n una longitud de más de\n 3 caracteres\n y menos de 15 caracteres."; } $email = $this->test_input($datos['email']) ?? null; diff --git a/login/includes/formLogin.php b/login/includes/formLogin.php index cdc465d..0eeca40 100644 --- a/login/includes/formLogin.php +++ b/login/includes/formLogin.php @@ -43,8 +43,8 @@ class FormLogin extends Form { //$nombre = $this->test_input($datos['name']) ?? null; $nombre = $datos['name'] ?? null; $nombre = strtolower($nombre); - if ( empty($nombre) || mb_strlen($nombre) < 3 || mb_strlen($nombre) > 8 ) { - $result['name'] = "El nombre tiene que tener\n una longitud de al menos\n 3 caracteres\n y menos de 8 caracteres."; + if ( empty($nombre) || mb_strlen($nombre) < 3 || mb_strlen($nombre) > 15 ) { + $result['name'] = "El nombre tiene que tener\n una longitud de al menos\n 3 caracteres\n y menos de 15 caracteres."; } //$password = $this->test_input($datos['pass']) ?? null; diff --git a/panel_admin/includes/formAddFilm.php b/panel_admin/includes/formAddFilm.php index f0da80f..13f36bb 100644 --- a/panel_admin/includes/formAddFilm.php +++ b/panel_admin/includes/formAddFilm.php @@ -33,7 +33,7 @@ class formAddFilm extends Form{
    '.$errorDuration.'
    '.$errorLanguage.'
    '.$errorDescription.'
    -
    Imagen promocional:
    '.$errorImage.'

    +
    Imagen promocional:
    '.$errorImage.'
    diff --git a/panel_user/includes/formChangeName.php b/panel_user/includes/formChangeName.php index ce9b8d8..64102a5 100644 --- a/panel_user/includes/formChangeName.php +++ b/panel_user/includes/formChangeName.php @@ -41,8 +41,8 @@ class FormChangeName extends Form { $nombre = $this->test_input($datos['new_name']) ?? null; $nombre = strtolower($nombre); - if ( empty($nombre) || mb_strlen($nombre) < 3 || mb_strlen($nombre) > 8 ) { - $result['new_name'] = "El nombre tiene que tener\n una longitud de al menos\n 3 caracteres\n y menos de 8 caracteres."; + if ( empty($nombre) || mb_strlen($nombre) < 3 || mb_strlen($nombre) > 15 ) { + $result['new_name'] = "El nombre tiene que tener\n una longitud de al menos\n 3 caracteres\n y menos de 15 caracteres."; } $nombre2 = $this->test_input($datos['rename']) ?? null; diff --git a/panel_user/includes/formDeleteAccount.php b/panel_user/includes/formDeleteAccount.php index 077a583..8afc59c 100644 --- a/panel_user/includes/formDeleteAccount.php +++ b/panel_user/includes/formDeleteAccount.php @@ -13,7 +13,8 @@ class FormDeleteAccount extends Form { } protected function generaCamposFormulario($datos, $errores = array()){ - $nombre = $datos['username'] ?? ''; + $nameValue = "value=".unserialize($_SESSION['user'])->getName().""; + $emailValue = "value=".unserialize($_SESSION['user'])->getEmail().""; // Se generan los mensajes de error si existen. $htmlErroresGlobales = self::generaListaErroresGlobales($errores); @@ -25,8 +26,8 @@ class FormDeleteAccount extends Form { $html = "
    ".$htmlErroresGlobales."
    Datos de la cuenta -
    ".$errorNombre."
    -
    ".$errorEmail."
    +
    ".$errorNombre."
    +
    ".$errorEmail."
    ".$errorPassword."
    ".$errorPassword2."
    @@ -36,8 +37,7 @@ class FormDeleteAccount extends Form {
    - - +
    "; @@ -49,8 +49,8 @@ class FormDeleteAccount extends Form { $nombre = $this->test_input($datos['name']) ?? null; $nombre = strtolower($nombre); - if ( empty($nombre) || mb_strlen($nombre) < 3 || mb_strlen($nombre) > 8 ) { - $result['new_name'] = "El nombre tiene que tener\n una longitud de al menos\n 3 caracteres\n y menos de 8 caracteres."; + if ( empty($nombre) || mb_strlen($nombre) < 3 || mb_strlen($nombre) > 15 ) { + $result['new_name'] = "El nombre tiene que tener\n una longitud de al menos\n 3 caracteres\n y menos de 15 caracteres."; } $email = $this->test_input($datos['email']) ?? null; diff --git a/panel_user/includes/formUploadPic.php b/panel_user/includes/formUploadPic.php new file mode 100644 index 0000000..cf552ea --- /dev/null +++ b/panel_user/includes/formUploadPic.php @@ -0,0 +1,139 @@ + 'multipart/form-data'); + parent::__construct('formUploadFiles', $options); + } + + protected function generaCamposFormulario($datos, $errores = array()) { + + // Se generan los mensajes de error si existen. + $htmlErroresGlobales = self::generaListaErroresGlobales($errores); + $errorFile = self::createMensajeError($errores, 'archivo', 'span', array('class' => 'error')); + + foreach($datos as $key => $value){ + $dats = $key." ".$value." "; + } + + // Se genera el HTML asociado a los campos del formulario y los mensajes de error. + $html = ' +
    +
    '.$htmlErroresGlobales.'
    +
    +
    '.$errorFile.'
    + '; + + return $html; + } + + protected function procesaFormulario($datos) { + // Solo se pueden definir arrays como constantes en PHP >= 5.6 + global $ALLOWED_EXTENSIONS; + + $result = array(); + $ok = count($_FILES) == 1 && $_FILES['archivo']['error'] == UPLOAD_ERR_OK; + + if ( $ok ) { + $archivo = $_FILES['archivo']; + $nombre = $_FILES['archivo']['name']; + /* 1.a) Valida el nombre del archivo */ + $ok = $this->check_file_uploaded_name($nombre) && $this->check_file_uploaded_length($nombre) ; + /* 1.b) Sanitiza el nombre del archivo + $ok = sanitize_file_uploaded_name($nombre); + */ + /* 1.c) Utilizar un id de la base de datos como nombre de archivo */ + + /* 2. comprueba si la extensión está permitida*/ + $ok = $ok && in_array(pathinfo($nombre, PATHINFO_EXTENSION), $ALLOWED_EXTENSIONS); + + /* 3. comprueba el tipo mime del archivo correspode a una imagen image/* */ + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mimeType = finfo_file($finfo, $_FILES['archivo']['tmp_name']); + $ok = preg_match('/image\/*./', $mimeType); + finfo_close($finfo); + + if ( $ok ) { + $tmp_name = $_FILES['archivo']['tmp_name']; + //$tmp_name = unserialize(strtolower($_SESSION["user"])->getName()).".jpg"; + + if ( !move_uploaded_file($tmp_name, USER_PICS.$nombre) ) { + $result[] = 'Error al mover el archivo'; + } + + // 4. Si fuese necesario guardar en la base de datos la ruta relativa $nombre del archivo + //return "index.php#img=".urlencode('img/'.$nombre); + $_SESSION['message'] = "
    +
    +
    +
    +

    Operacion realizada con exito


    +

    Se ha modificado su imagen de usuario correctamente.

    + +
    +
    +
    +
    + "; + $result = "./?option=change_profile_pic"; + } else { + $result["errorFile"] = 'El archivo tiene un nombre o tipo no soportado'; + } + } else { + $result[] = 'Error al subir el archivo.'; + } + return $result; + } + + + /** + * Check $_FILES[][name] + * + * @param (string) $filename - Uploaded file name. + * @author Yousef Ismaeil Cliprz + * @See http://php.net/manual/es/function.move-uploaded-file.php#111412 + */ + protected function check_file_uploaded_name ($filename) { + return (bool) ((mb_ereg_match('/^[0-9A-Z-_\.]+$/i',$filename) === 1) ? true : false ); + } + + /** + * Sanitize $_FILES[][name]. Remove anything which isn't a word, whitespace, number + * or any of the following caracters -_~,;[](). + * + * If you don't need to handle multi-byte characters you can use preg_replace + * rather than mb_ereg_replace. + * + * @param (string) $filename - Uploaded file name. + * @author Sean Vieira + * @see http://stackoverflow.com/a/2021729 + */ + protected function sanitize_file_uploaded_name($filename) { + /* Remove anything which isn't a word, whitespace, number + * or any of the following caracters -_~,;[](). + * If you don't need to handle multi-byte characters + * you can use preg_replace rather than mb_ereg_replace + * Thanks @Łukasz Rysiak! + */ + $newName = mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $filename); + // Remove any runs of periods (thanks falstro!) + $newName = mb_ereg_replace("([\.]{2,})", '', $newName); + + return $newName; + } + + /** + * Check $_FILES[][name] length. + * + * @param (string) $filename - Uploaded file name. + * @author Yousef Ismaeil Cliprz. + * @See http://php.net/manual/es/function.move-uploaded-file.php#111412 + */ + protected function check_file_uploaded_length ($filename) { + return (bool) ((mb_strlen($filename,'UTF-8') < 250) ? true : false); + } +} +?> \ No newline at end of file diff --git a/panel_user/index.php b/panel_user/index.php index 5dcd749..9d61a2e 100644 --- a/panel_user/index.php +++ b/panel_user/index.php @@ -8,8 +8,8 @@ if($_SESSION["login"] && $_SESSION["rol"] === "user"){ if(!isset($_GET["option"])) $_GET["option"] = null; switch($_GET["option"]){ - case "manage_profile": - $reply = UserPanel::manage(); + case "change_profile_pic": + $reply = UserPanel::changeUserPic(); break; case "purchases": $reply = UserPanel::purchases(); diff --git a/panel_user/panelUser.php b/panel_user/panelUser.php index 3083f61..d6aceb8 100644 --- a/panel_user/panelUser.php +++ b/panel_user/panelUser.php @@ -13,14 +13,19 @@ static function panel(){ $name = strtoupper(unserialize($_SESSION['user'])->getName()); $email = unserialize($_SESSION['user'])->getEmail(); + $userPic = USER_PICS.strtolower($name).".jpg"; + + $forms = self::manage(); + return $reply = '

    Bienvenido '.$name.' a tu Panel de Usuario.


    + user_profile_picture

    '.strftime("%A %e de %B de %Y | %H:%M").'


    Usuario: '.$name.'

    Email: '.$email.'

    -
    '."\n"; + '."\n".$forms; } //Manage the user account. @@ -39,7 +44,10 @@ $formCE = new FormChangeEmail(); $htmlFormChangeEmail = $formCE->gestiona(); - return $reply = ' + return $reply = ' + +

    Cambiar información de la cuenta


    +

    Cambiar nombre de usuario

    '.$htmlFormChangeName.' @@ -56,6 +64,29 @@
    '."\n"; } + //User purchase history. + static function changeUserPic(){ + + require_once('./includes/formUploadPic.php'); + + $formCP = new FormUploadFiles(); + $htmlFormChangeUserPic = $formCP->gestiona(); + + $name = strtoupper(unserialize($_SESSION['user'])->getName()); + $userPic = USER_PICS.strtolower($name).".jpg"; + + return $reply = ' +
    +
    +
    +

    Cambiar imagen de perfil


    + user_profile_picture + '.$htmlFormChangeUserPic.' +
    +
    +
    '."\n"; + } + //User purchase history. static function purchases(){ return $reply = '
    diff --git a/purchase/index.php b/purchase/index.php new file mode 100644 index 0000000..52d534b --- /dev/null +++ b/purchase/index.php @@ -0,0 +1,56 @@ +FilmData($_GET["film"]); + $tittle = $film->getTittle(); + + $cinemas = $filmDAO->getCinemas($_GET["film"]); + $cinemasNames = array(); + foreach($cinemas as $key=>$value){ + $cinemasNames[$key] = $value->getName(); + } + foreach($cinemasNames as $value){ + $cinemasListHTML = ''; + } + } + + + //Reply: Depends on whether the purchase is to be made from a selected movie or a cinema. + $reply = '
    +

    Película seleccionada: '.str_replace('_', ' ', $tittle).'


    +
    '.$tittle.'
    +

    Duración: '.$film->getDuration().'

    +

    Idioma: '.$film->getLanguage().'

    +
    +
    +

    Seleccione un Cine y una Sesión


    + '.$cinemasListHTML.' +
    + '; + + //Page-specific content: + $section = ' +
    +
    +
    + '.$reply.' +
    +
    +
    + '; + + //General page content: + require RAIZ_APP.'/HTMLtemplate.php'; +?> diff --git a/register/includes/formRegister.php b/register/includes/formRegister.php index 092f6ed..c862421 100644 --- a/register/includes/formRegister.php +++ b/register/includes/formRegister.php @@ -58,8 +58,8 @@ class FormRegister extends Form { $nombre = $this->test_input($datos['new_name']) ?? null; $nombre = strtolower($nombre); - if ( empty($nombre) || mb_strlen($nombre) < 3 || mb_strlen($nombre) > 8 ) { - $result['new_name'] = "El nombre tiene que tener\n una longitud de al menos\n 3 caracteres\n y menos de 8 caracteres."; + if ( empty($nombre) || mb_strlen($nombre) < 3 || mb_strlen($nombre) > 15 ) { + $result['new_name'] = "El nombre tiene que tener\n una longitud de al menos\n 3 caracteres\n y menos de 15 caracteres."; } $email = $this->test_input($datos['new_email']) ?? null;