223 Commits
v1.0 ... v3.0

Author SHA1 Message Date
b8e24fdd38 Update config.php 2021-07-02 18:03:20 +02:00
857b404eed Update template.php 2021-05-19 11:02:24 +02:00
62038f6f51 Add files via upload 2021-05-14 16:53:59 +02:00
fdf0a17edd Funcional y ademas sin notices 2021-05-13 23:58:18 +02:00
a6636ca786 Functional except file upload in formAddFilm.php 2021-05-13 20:25:42 +02:00
9851535a08 Debug 2021-05-13 20:24:00 +02:00
39a8ef2ff5 update 2021-05-13 20:06:05 +02:00
530d51a9c9 Debug 2021-05-13 20:05:20 +02:00
7a52e6a6a7 Debug 2021-05-13 17:37:09 +02:00
58e8f0a17f Delete manage_films.php 2021-05-13 17:06:26 +02:00
e52fa850d7 Todo funcional 2021-05-13 14:06:48 +02:00
965d1b5c55 Añadido un nuevo estilo de boton negro 2021-05-13 14:06:29 +02:00
d2c4fdd77f Add files via upload 2021-05-13 14:06:07 +02:00
2925084c7c debug 2021-05-13 12:51:29 +02:00
ce47b5b766 Update panelAdmin.php 2021-05-13 12:44:12 +02:00
31ba3ec858 Update formAddCinema.php 2021-05-13 12:39:12 +02:00
a5cac66b1d debug 2021-05-13 12:37:15 +02:00
2b99c192b7 delete 2021-05-13 12:31:06 +02:00
2a89128d0b Promotion 2021-05-13 12:29:47 +02:00
60d6bdbd36 debug 2021-05-13 11:51:09 +02:00
05e487e648 Delete formFilm.php 2021-05-13 11:48:57 +02:00
fd367c2a3d Delete formManager.php 2021-05-13 11:48:48 +02:00
e88092b3c3 Delete manage_managers.php 2021-05-13 11:48:34 +02:00
54d6e99c1d forms Manager 2021-05-13 11:48:20 +02:00
258829ae2e update 2021-05-13 11:47:47 +02:00
4dad0c48ee resubido panel admin pisado 2021-05-13 11:39:54 +02:00
40d1964d6a cinemas 2021-05-13 11:27:17 +02:00
b9383645fe Add files via upload 2021-05-13 11:00:18 +02:00
5758e4e7fc Add files via upload 2021-05-13 10:13:03 +02:00
9fd6c810e4 Add files via upload 2021-05-13 10:12:44 +02:00
29011f52ca Add files via upload 2021-05-13 10:12:09 +02:00
4228691615 Delete formFilm.php 2021-05-13 10:01:28 +02:00
e6af14e150 Delete manage_films.php 2021-05-13 10:01:09 +02:00
657d1cc0fe Forms restructuring 2021-05-13 10:00:47 +02:00
4c7c93d691 cambio del index al uso más reducido de código 2021-05-13 09:37:14 +02:00
517b374f5c Update formManager.php 2021-05-13 09:28:09 +02:00
df430bb6b6 Delete film.php 2021-05-13 09:22:56 +02:00
b278c82228 manager update 2021-05-13 09:20:25 +02:00
624778cd7a Update config.php 2021-05-13 00:11:42 +02:00
4d59424d02 Add files via upload 2021-05-13 00:10:19 +02:00
a6f37400e7 Update config.php 2021-05-12 22:30:28 +02:00
231e72f17a Add files via upload 2021-05-12 22:24:10 +02:00
da7bdacbaa Update config.php 2021-05-12 15:56:40 +02:00
4339a5db1e Add files via upload 2021-05-12 15:54:13 +02:00
1b64bce911 Add files via upload 2021-05-12 10:40:22 +02:00
b6ea25caa1 Add files via upload 2021-05-11 23:07:30 +02:00
3515a4a583 Cambio sesiones aña/edit/elim para uso del Form 2021-05-11 19:39:14 +02:00
b6025fc79c Cambio sesiones aña/edit/elim para uso del Form 2021-05-11 19:38:22 +02:00
0cf7615ed5 cambio en funciones, nada relevante 2021-05-11 19:36:50 +02:00
ce2a100e86 Update config.php 2021-05-11 17:39:52 +02:00
7f40b87a54 Add files via upload 2021-05-11 17:38:13 +02:00
6834851714 Add files via upload 2021-05-11 17:36:06 +02:00
d106e3c3d3 Add files via upload 2021-05-11 16:13:33 +02:00
2eab8ad868 Add files via upload 2021-05-11 15:07:30 +02:00
40da0f3ffe Delete img directory 2021-05-11 15:06:25 +02:00
709ac9f3d4 Add files via upload 2021-05-11 13:15:13 +02:00
1bf79d9093 Add files via upload 2021-05-11 13:14:55 +02:00
4449f48e83 Add files via upload 2021-05-11 13:14:28 +02:00
85cd4a8e27 Add files via upload 2021-05-11 11:06:27 +02:00
6d8a383a58 Add files via upload 2021-05-11 11:03:44 +02:00
c6ccc9aa59 Update config.php 2021-05-11 10:29:51 +02:00
99229e6d67 Add files via upload 2021-05-11 10:22:44 +02:00
b5a737fd1d Update config.php 2021-05-11 10:20:21 +02:00
2d14033940 Update config.php 2021-05-11 10:19:02 +02:00
ab5402b470 Add files via upload 2021-05-11 10:11:10 +02:00
93c556d390 Update config.php 2021-05-10 22:23:11 +02:00
805dffd5ba Add files via upload 2021-05-10 22:22:32 +02:00
c012b3b617 Update form.php 2021-05-10 21:25:14 +02:00
6c7555dcd7 Update config.php 2021-05-10 18:18:20 +02:00
63d18e5ba3 Add files via upload 2021-05-10 18:15:58 +02:00
9da5b9310b Add files via upload 2021-05-10 16:46:18 +02:00
a1d04a6eae fromHalls funciona con ->gestiona 2021-05-10 16:45:36 +02:00
57ef61e293 Update config.php 2021-05-10 12:47:57 +02:00
4fbf70a142 Add files via upload 2021-05-10 12:46:22 +02:00
ed8b795b52 Add files via upload 2021-05-10 12:45:32 +02:00
73faa928a6 Add files via upload 2021-05-10 12:30:15 +02:00
a4cd04f121 Add files via upload 2021-05-10 11:52:45 +02:00
43c39e67ed Update formChangeName.php 2021-05-09 23:51:24 +02:00
7e76797804 Add files via upload 2021-05-09 21:59:52 +02:00
50229ff233 Update config.php 2021-05-09 20:45:11 +02:00
b9a7f053dd Add files via upload 2021-05-09 20:44:13 +02:00
d075d04a2a Add files via upload 2021-05-09 20:31:54 +02:00
99e298e1eb Delete formChagePass.php 2021-05-09 19:01:36 +02:00
e207fe0155 Añadir/editar/borrar sesiones 100% funcional 2021-05-09 17:50:30 +02:00
871a7e1a7f Delete manager.css 2021-05-09 17:50:01 +02:00
f46f5c8af6 Add files via upload 2021-05-09 17:49:38 +02:00
22b468a949 Add files via upload 2021-05-09 17:48:58 +02:00
b3362d8a86 Update manager.php 2021-05-09 17:39:27 +02:00
67279ed25b Update print->films(manager) 2021-05-09 17:38:38 +02:00
b1bab61049 Delete user_dto.php 2021-05-09 16:58:46 +02:00
b68d618220 Delete users_dto_interface.php 2021-05-09 16:58:41 +02:00
696b256f83 Delete users_dto_interface.php 2021-05-09 16:58:29 +02:00
f50e8e91b8 Delete user_dto.php 2021-05-09 16:58:25 +02:00
70a0bd93c1 Delete user_dao.php 2021-05-09 16:58:21 +02:00
6d0619f5ec Add files via upload 2021-05-09 16:46:12 +02:00
bb94e30282 Add files via upload 2021-05-09 16:27:21 +02:00
40e74c9eff Add files via upload 2021-05-09 16:14:52 +02:00
1a67a7169a Add files via upload 2021-05-08 15:35:06 +02:00
8b4ed63f9f Add files via upload 2021-05-08 15:17:51 +02:00
3e48951b90 Add files via upload 2021-05-07 19:07:03 +02:00
59a89cff30 Add files via upload 2021-05-07 19:06:45 +02:00
b635ce70a0 Add files via upload 2021-05-07 19:06:12 +02:00
bed5c222ff Panel de Gerente films template 2021-05-07 13:49:45 +02:00
7be148840e Add files via upload 2021-05-07 13:48:50 +02:00
fe520f1495 Eliminadas las interaciones con film y film_dao 2021-05-07 13:48:20 +02:00
2b3a0e60fd Update panel_manager.php 2021-05-07 09:19:30 +02:00
d00c212e07 Esta comentado las opciones de sesion
Hay un fallo con film.php que esperamos arreglarlo mañana con el join en sesion y el template
2021-05-06 23:25:38 +02:00
8bb34474d6 Add files via upload 2021-05-06 23:23:34 +02:00
582cb35477 Update film_dao.php 2021-05-06 18:55:59 +02:00
0d7f34d1fa Add files via upload 2021-05-06 18:12:46 +02:00
bb2f0934dd Add files via upload 2021-05-06 18:12:26 +02:00
f439c925d8 Add files via upload 2021-05-06 18:11:55 +02:00
f3c318a34b Add files via upload 2021-05-06 18:11:12 +02:00
8139625507 Add files via upload 2021-05-06 18:10:19 +02:00
bc04b3ac76 update 2021-05-06 12:19:16 +02:00
64af5a6357 update 2021-05-06 12:18:45 +02:00
5ee09a12de updates 2021-05-06 12:18:20 +02:00
042333b96c Debud / new function in user_dao.php 2021-05-06 12:16:37 +02:00
4c0522b4a5 cambio en state de panel Manager 2021-05-06 11:06:58 +02:00
5231fd0320 Update config.php 2021-05-06 10:42:30 +02:00
89669ce53e Add files via upload 2021-05-06 10:40:56 +02:00
993f70a373 Editar/Eliminar sesiones 2021-05-06 10:33:54 +02:00
343a37d602 Editar/Eliminar sesiones 2021-05-06 10:33:12 +02:00
db298d1ea6 Editar/Eliminar sesiones 2021-05-06 10:32:11 +02:00
62fec4883d Update manage_promotions.php 2021-05-06 09:52:59 +02:00
8408636fa5 Update template
Comprobación antes de imprimir cines, al no haber cines da error en el xamp
2021-05-06 07:44:01 +02:00
8614c4b0ef Update film_dao.php 2021-05-06 07:33:27 +02:00
7993f02c27 remover film_dto 2021-05-06 07:32:24 +02:00
1447369a16 Add files via upload 2021-05-05 22:31:17 +02:00
cdb9b25754 Add files via upload 2021-05-05 21:11:27 +02:00
1c5e449cdb Estructura terminada
Sigue faltando edit/delete halls y sessions
2021-05-05 21:10:46 +02:00
fbd5227780 encryptpass 2021-05-05 19:46:10 +02:00
a3ce8a7313 Update manage_managers.php 2021-05-05 19:34:57 +02:00
1dba527f1e mg panelAdmin 2021-05-05 19:33:03 +02:00
c3371e41f1 Add/edit/del manager todavia incompleto
falta terminar y probar
2021-05-05 19:23:09 +02:00
13e0a508ff hall y hall_dao update 2021-05-05 16:55:00 +02:00
21276e226a Delete validateSession.php 2021-05-05 16:53:35 +02:00
d11d02b223 Delete manage_sessions.php 2021-05-05 16:53:28 +02:00
835c0c1fa8 Delete manage_rooms.php 2021-05-05 16:53:23 +02:00
7c1c2a7711 Delete manage_halls.php 2021-05-05 16:53:15 +02:00
0afd4b16f5 Delete hello_panel.php 2021-05-05 16:53:10 +02:00
9a8b3de844 Delete edit_sessions.php 2021-05-05 16:53:05 +02:00
8bf625e73c Delete edit_halls.php 2021-05-05 16:52:59 +02:00
f154863e36 Cambiada la toolbar de manager 2021-05-05 16:52:23 +02:00
b537db0a1b Nueva estructura
Solo funciona el añadir salas. Estoy arreglando las sesiones para que vayan igual
2021-05-05 16:52:04 +02:00
055973a459 new functionality 2021-05-05 11:57:42 +02:00
985f353216 new functionality 2021-05-05 11:57:13 +02:00
7ea975ded7 new functionality 2021-05-05 11:56:27 +02:00
17c64e04de Debug print_panelMenu 2021-05-05 11:55:41 +02:00
ebc132e205 Add files via upload 2021-05-04 22:26:24 +02:00
aacb6886bc Add files via upload 2021-05-04 21:15:53 +02:00
7c130693fe Add files via upload 2021-05-04 21:14:59 +02:00
62db2dcd23 Add files via upload 2021-05-04 21:14:38 +02:00
43219ccefa Add files via upload 2021-05-04 21:14:18 +02:00
ea3fc5f55a Delete validateSession.php 2021-05-04 21:14:01 +02:00
2cad32cecf Delete manage_rooms.php 2021-05-04 21:13:51 +02:00
b400df160f Delete manage_halls.php 2021-05-04 21:13:44 +02:00
94433c374d Delete edit_halls.php 2021-05-04 21:13:34 +02:00
ef7d231707 Delete hello_panel.php 2021-05-04 21:13:25 +02:00
04f9c8bf2a Add files via upload 2021-05-03 21:58:47 +02:00
ac2b2cfee0 Add files via upload 2021-05-03 16:51:08 +02:00
4c3fccca92 Add files via upload 2021-05-03 16:38:53 +02:00
1aa3d0d77a Add files via upload 2021-05-03 15:18:17 +02:00
0d394cf2f6 Update config.php 2021-05-03 15:12:57 +02:00
74b79fbff1 Add files via upload 2021-05-03 15:11:59 +02:00
fb7f5cb42b Add files via upload 2021-05-03 14:12:38 +02:00
d370d281f1 Restructuracion de las salas
La lista de salas se obtiene de forma distinta, por eso editar/crear sessiones ha dejado de funcionar, pero bueno, estamos a la espera de ver como deberiamos estructurarlo y eso hay que cambiarlo asi que tampoco es problema.

El html del formulario de crear salas esta guardado en formhalls, haciendo mas sencillo el codigo de la vista y la logica de edit_halls
2021-05-03 12:40:59 +02:00
02bb7938f0 Delete session_dto_interface.php 2021-05-03 12:38:40 +02:00
9d488f4c25 Delete session_dto.php 2021-05-03 12:38:35 +02:00
e260d94612 Delete session_dao.php 2021-05-03 12:38:29 +02:00
2a5087cbc2 Delete session.php 2021-05-03 12:38:24 +02:00
98b0d8156b Delete hall_dto_interface.php 2021-05-03 12:38:19 +02:00
d77eb135c1 Delete hall.php 2021-05-03 12:38:13 +02:00
e90cd9220d Delete hall_dto.php 2021-05-03 12:38:03 +02:00
52f5d9417f Delete hall_dao.php 2021-05-03 12:37:56 +02:00
83f4264ccb Re actualizado hall.php y session.php
por favor, no los volvais a sobrescribir y pongais de nuevo todos los dto y sus interfaces
2021-05-03 12:37:10 +02:00
c47c7fd50e Delete session_dto_interface.php 2021-05-03 12:36:31 +02:00
482d78ba6f Delete session_dto.php 2021-05-03 12:36:25 +02:00
c35a4ca0d9 Delete hall_dto_interface.php 2021-05-03 12:36:16 +02:00
f21e8d6c33 Delete hall_dto.php 2021-05-03 12:36:08 +02:00
d7cbedc524 Debug 2021-05-03 09:49:58 +02:00
9d1869023a Delete cinema.php 2021-05-03 01:19:26 +02:00
27d651223c Delete cinema_dao.php 2021-05-03 01:19:08 +02:00
1a1893f6fa Delete film_dto_interface.php 2021-05-03 01:18:53 +02:00
5acddf66b9 Delete film_dto.php 2021-05-03 01:18:43 +02:00
50e4cfbcff Delete film_dao.php 2021-05-03 01:18:36 +02:00
41000d9627 Add files via upload 2021-05-03 01:17:42 +02:00
015b2ffcf8 Debug 2021-05-02 17:57:23 +02:00
d0556cdafe cinema & cinema_dao 2021-05-02 17:27:46 +02:00
13b14d7758 add function print_cinemas 2021-05-02 17:27:20 +02:00
b74ea05d08 Delete update_film.php 2021-05-02 17:26:26 +02:00
1efa3487c3 Delete updateFilm.php 2021-05-02 17:26:18 +02:00
dfbe2877b5 restructuring and functionality cinemas 2021-05-02 17:25:58 +02:00
d85e933c73 Add files via upload 2021-05-02 16:01:05 +02:00
3d144738c8 Add files via upload 2021-05-01 09:34:03 +02:00
d5dbb1ddcc Add files via upload 2021-04-30 22:23:26 +02:00
779f11d8d0 Update template.php 2021-04-30 21:29:59 +02:00
ce80df9c55 Update template.php 2021-04-30 20:55:33 +02:00
1e99798482 Update template.php 2021-04-30 20:49:43 +02:00
22c329bb5b Add files via upload 2021-04-30 20:49:21 +02:00
a873ead5db Update film.php 2021-04-29 10:52:45 +02:00
ee9ac06a8b . 2021-04-29 10:51:43 +02:00
071bce7b71 delete 2021-04-29 10:46:33 +02:00
090f820453 . 2021-04-29 10:39:14 +02:00
4affecf524 DTO deleted 2021-04-29 10:23:10 +02:00
f97f4f8c94 Delete session_dto_interface.php 2021-04-29 10:22:41 +02:00
0811b17f34 Delete session_dto.php 2021-04-29 10:22:36 +02:00
5e4d7eb94b Delete session_dao.php 2021-04-29 10:22:31 +02:00
1a1f6ad12c Delete hall_dao.php 2021-04-29 10:22:24 +02:00
875cf8e04a Delete hall_dto_interface.php 2021-04-29 10:22:12 +02:00
8beecc7ce1 Delete hall_dto.php 2021-04-29 10:22:07 +02:00
49ab2fb2d1 Hall and Session dao updates 2021-04-29 10:21:44 +02:00
ceca74f8e9 Delete session_dto_interface.php 2021-04-29 10:21:12 +02:00
89b204fbbe Delete session_dto.php 2021-04-29 10:21:07 +02:00
981b141693 Delete hall_dto_interface.php 2021-04-29 10:20:59 +02:00
1e42bc8b36 Delete hall_dto.php 2021-04-29 10:20:49 +02:00
9756959978 Add files via upload 2021-04-28 21:46:10 +02:00
12a56f33bf Add files via upload 2021-04-28 21:07:54 +02:00
b3aa890b7e Add files via upload 2021-04-28 21:06:53 +02:00
9ee7889968 Add files via upload 2021-04-28 21:06:13 +02:00
1e9685ee9b Add files via upload 2021-04-26 22:40:34 +02:00
b033bdf328 Add files via upload 2021-04-26 22:36:16 +02:00
a63c0f9a46 Update README.md 2021-02-16 16:36:28 +01:00
125 changed files with 7939 additions and 590 deletions

1
.gitignore vendored
View File

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

Binary file not shown.

BIN
Practica3-Enunciado.pdf Normal file

Binary file not shown.

View File

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

613
assets/css/highContrast.css Normal file
View File

@ -0,0 +1,613 @@
/* Basic */
* {
box-sizing: border-box;
margin: 0px;
}
/* Headers */
h1, h2, h3, h4 {
color: #d3ebff;
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 #dadada;
text-align: center;
color :#dadada;
font-weight: bold;
position: relative;
}
.button.large {
width: 95%;
}
button:hover, .button:hover {
cursor: pointer;
background-color:#dadada;
color:#1f2c3d;
border-color: #1f2c3d;
}
/* Header */
.header {
background-color: #1f2c3d;
color: #dadada;
padding: 15px;
text-align: left;
font-size: 18px;
}
.header img {
width: 13px;
}
/* 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 #dadada;
text-align: center;
color :#dadada;
position: relative;
}
.menu nav li:hover{
background-color:#dadada;
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;
}
/* Responsive layout */
@media (max-width: 850px) {
.header.sub .menu nav li:hover>ul{
display: block;
position: relative;
top: 5px;
left: -51px;
}
}
/* 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: #00020f;
color: #dadada;
}
/* Table */
table {
border-collapse: collapse;
border-spacing: 0;
margin: 0 0 2em 0;
width: 100%;
text-align: left;
font-size: 15px;
}
table a{
color: #dadada;
}
table tbody tr {
color: #dadada;
border: solid 1px #dadada;
border-left: 0;
border-right: 0;
}
table tbody tr:nth-child(2n + 1) {
background-color: rgba(255, 255, 255, 0.25);
}
table td {
padding: 0.75em 0.75em;
}
table th {
color: #dadada;
font-size: 0.9em;
font-weight: 600;
padding: 0.85em 0.85em 0.85em 0.85em;
}
table thead, table tfoot {
border-bottom: solid 2px #dadada;
}
table.alt {
border-collapse: separate;
}
table.alt tbody tr td {
border: solid 1px #dadada;
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: #dadada;
}
main img {
width: 40%;
}
/* 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, .code li{
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 label{
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: #00020f;
}
/* 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: #dadada;
background-color: #00020f;
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: #00020f;
background-color: #1f2c3d;
}
.sidebar.left a {
color: #00020f;
font-weight: bold;
text-decoration: none;
}
.sidebar.left a:hover {
color: #00020f;
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: #dadada;
}
label {
color: #dadada;
text-align: center;
font-weight: bold;
}
input, textarea {
width: 100%;
height: 27px;
border: 1px solid #dadada;
padding: 10px;
margin-top: 5px;
font-size: 15px;
}
textarea {
width: 100%;
height: 150px;
}
legend {
color: #dadada;
}
#radio, #checkbox {
width: auto;
height: 15px;
cursor: pointer;
}
.verify {
font-size: 11px;
}
.verify a {
color: #dadada;
}
.verify a:hover {
color: rgb(138, 150, 32);
}
#submit, #register {
width: 100%;
height: 35px;
border: 1px solid #dadada;
padding: 5px;
margin-top: 5px;
font-size: 15px;
font-weight: bold;
box-shadow: 2px 2px #1f2c3d;
filter: brightness(105%);
cursor: pointer;
}
#submit:hover, #register:hover {
color: #dadada;
background-color: #1f2c3d;
}
#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;
}
.file{
margin-top: 10px;
}
.file input{
height: 110%;
}
/* Preformatted Text */
pre {
font-weight: bold;
}
fieldset pre {
color: red;
}
/* Footer */
footer {
text-align: left;
background-color: #1f2c3d;
color: #dadada;
padding: 20px;
margin-top: 100px;
width: 100%;
height: 80px;
}
.footer {
text-align: right;
}
footer button {
display: inline-block;
margin: 1px;
width: 115px;
height: 25px;
padding: 0px 0px;
text-align: center;
font-weight: bold;
position: relative;
}
@media (max-width: 500px) {
footer {
width: 100%;
height: 100%;
}
}

View File

@ -1,6 +1,7 @@
/* Basic */
* {
box-sizing: border-box;
margin: 0px;
}
/* Headers */
@ -27,6 +28,30 @@ 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;
@ -36,14 +61,69 @@ h4 {
font-size: 18px;
}
.header img {
width: 11px;
width: 13px;
}
/* Header Menu */
.menu {
background-color: #1f2c3d;
color: #dadada;
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;
}
/* Responsive layout */
@media (max-width: 850px) {
.header.sub .menu nav li:hover>ul{
display: block;
position: relative;
top: 5px;
left: -51px;
}
}
/* Paragraphs */
p {
@ -63,7 +143,7 @@ a:hover{
body {
font-family: Arial, Helvetica, sans-serif;
background-color: #d3ebff;
color: #000000
color: #000000;
}
/* Table */
@ -93,25 +173,44 @@ table a{
color: #1f2c3d;
font-size: 0.9em;
font-weight: 600;
padding: 0 0.85em 0.85em 0.85em;
padding: 0.85em 0.85em 0.85em 0.85em;
}
table thead {
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 {
main {
padding: 30px;
text-align: center;
font-size: 35px;
}
.main h1, h2, h3, h4 {
main h1, h2, h3, h4 {
color: #363636;
}
.main img {
width: 50%;
main img {
width: 40%;
}
/* Create three unequal columns that floats next to each other */
@ -130,6 +229,16 @@ table a{
width: 33.33%;
}
.column.middle .image img, .column.side .image img{
border-radius: 4px;
border: 0;
position: relative;
border-radius: 4px;
display: block;
margin: 0 0 3rem 0;
width: 100%;
}
/* Left column */
.column.left {
width: 50%;
@ -187,7 +296,7 @@ table a{
.code a {
text-decoration: underline;
}
.code ul {
.code ul, .code ol, .code li {
color: #dadada;
}
.code img{
@ -205,23 +314,35 @@ table a{
font-size: 90%;
color: #d3ebff;
}
.code label{
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;
@ -261,6 +382,43 @@ table a{
}
}
/* Text Box */
.textbox {
color: #d3ebff;
padding: 15px 15px 10px 15px;
margin: 10px 0 10px;
overflow: hidden;
border-radius: 25px 0px 25px 0px;
border: 2px solid #d3ebff;
}
.textbox h1, .textbox h2, .textbox h3 {
color: #d3ebff;
text-align: left;
}
/* Galery */
.galery {
box-sizing: border-box;
}
.galery .columna {
margin-top: 10px;
float: left;
width: 50%;
padding-right: 10px;
}
.galery .fila::after {
content: "";
clear: both;
display: table;
}
.galery .image img {
width: 100%;
}
.galery .image.main img {
width: 100%;
}
/* Percentage bar */
.bar {
height: 15px;
@ -268,6 +426,7 @@ table a{
font-size: 13px;
font-weight: bold;
width: 100%;
color: #00020f;
background-color: #d3ebff;
text-align: right;
}
@ -293,6 +452,34 @@ table a{
padding-right: 15px;
}
/* Sidebars */
.sidebar.left {
padding: 5px;
margin-top: 10px;
margin-bottom: 10px;
float: left;
width: 300px;
height: 370PX;
color: #d3ebff;
background-color: #1f2c3d;
}
.sidebar.left a {
color: #d3ebff;
font-weight: bold;
text-decoration: none;
}
.sidebar.left a:hover {
color: #d3ebff;
text-decoration: underline;
}
/* Responsibe sidebar */
@media (max-width: 1000px) {
.sidebar.left {
width: 100%;
height: 100%;
}
}
/* Form */
form {
@ -332,8 +519,14 @@ textarea {
.verify {
font-size: 11px;
}
.verify a {
color: #1f2c3d;
}
.verify a:hover {
color: rgb(138, 150, 32);
}
#submit {
#submit, #register {
width: 100%;
height: 35px;
border: 1px solid #000000;
@ -345,7 +538,7 @@ textarea {
filter: brightness(105%);
cursor: pointer;
}
#submit:hover {
#submit:hover, #register:hover {
background-color: #d3ebff;
}
@ -366,15 +559,48 @@ textarea {
border:#000000;
background-color: #791515;
}
.file{
margin-top: 10px;
}
.file input{
height: 110%;
}
/* Preformatted Text */
pre {
font-weight: bold;
}
fieldset pre {
color: red;
}
/* Footer */
.footer {
footer {
text-align: left;
background-color: #1f2c3d;
color: #dadada;
padding: 25px;
padding: 20px;
margin-top: 100px;
width: 100%;
height: 80px;
}
.footer {
text-align: right;
}
footer button {
display: inline-block;
margin: 1px;
width: 115px;
height: 25px;
padding: 0px 0px;
text-align: center;
font-weight: bold;
position: relative;
}
@media (max-width: 500px) {
footer {
width: 100%;
height: 100%;
}
}

68
assets/css/manager.css Normal file
View File

@ -0,0 +1,68 @@
h3.table_title{
text-align: center;
margin-bottom: 1em;
}
table.seat {
border: solid 10px #1f2c3d;
text-align: center;
background-color: rgba(215, 215, 215, 1);
}
table.seat tbody tr:nth-child(2n + 1) {
background-color: rgba(204, 255, 204, 0);
}
table.seat th{
font-size: 0.9em;
padding: 0.30em 0.30em 0.30em 0.30em;
border-bottom: solid 2px #1f2c3d;
}
table.seat th:first-child {
border-right: solid 2px #1f2c3d;
}
table.seat td {
padding: 0.35em 0.35em;
}
table.seat td:first-child {
font-size: 0.9em;
padding: 0.30em 0.30em 0.30em 0.30em;
font-weight: 600;
border-right: solid 2px #1f2c3d;
}
.check_box {
display:none;
}
.check_box+label{
background:url('../../img/seat_red.png') no-repeat;
height: 16px;
width: 16px;
display:inline-block;
}
.check_box:checked+label{
background:url('../../img/seat_green.png') no-repeat;
}
.black.button {
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;
}
.black.button:hover {
border:#000000;
background-color: #791515;
}

3
assets/index.php Normal file
View File

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

3
assets/js/cambiarCSS.js Normal file
View File

@ -0,0 +1,3 @@
function cambiarCSS(nuevo){
document.getElementById('estilo').setAttribute('href', nuevo);
}

598
assets/mysql/complucine.sql Normal file
View File

@ -0,0 +1,598 @@
-- phpMyAdmin SQL Dump
-- version 4.6.6deb5
-- https://www.phpmyadmin.net/
--
-- Servidor: localhost:3306
-- Tiempo de generación: 14-05-2021 a las 11:28:23
-- Versión del servidor: 10.0.28-MariaDB-2+b1
-- Versión de PHP: 7.3.27-1~deb10u1
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de datos: `complucine`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `admin`
--
CREATE TABLE `admin` (
`id` int(15) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `cinema`
--
CREATE TABLE `cinema` (
`id` int(15) UNSIGNED NOT NULL,
`name` varchar(10) NOT NULL,
`direction` varchar(120) NOT NULL,
`phone` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Volcado de datos para la tabla `cinema`
--
INSERT INTO `cinema` (`id`, `name`, `direction`, `phone`) VALUES
(1, 'Cinema 1st', 'Calle de ejemplo 111', '77777777'),
(3, 'Cinema 2st', 'Calle falsa 123', '123456789');
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `film`
--
CREATE TABLE `film` (
`id` int(15) UNSIGNED NOT NULL,
`tittle` varchar(60) NOT NULL,
`duration` int(3) UNSIGNED NOT NULL,
`language` varchar(30) NOT NULL,
`description` text NOT NULL,
`img` varchar(60) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Volcado de datos para la tabla `film`
--
INSERT INTO `film` (`id`, `tittle`, `duration`, `language`, `description`, `img`) VALUES
(1, 'iron_man', 120, 'spanish', 'Un empresario millonario construye un traje blindado y lo usa para combatir el crimen y el terrorismo.', ''),
(2, 'iron_man_2', 120, 'spanish', 'Con el mundo ahora consciente de que él es Iron Man, el millonario inventor Tony Stark debe forjar nuevas alianzas y confrontar a un enemigo nuevo y poderoso.', ''),
(3, 'iron_man_3', 120, 'spanish', 'El descarado y brillante Tony Stark, tras ver destruido todo su universo personal, debe encontrar y enfrentarse a un enemigo cuyo poder no conoce límites. Este viaje pondrá a prueba su entereza una y otra vez, y le obligará a confiar en su ingenio.', ''),
(4, 'capitan_america_el_primer_vengador', 120, 'spanish', 'Tras tres meses de someterse a un programa de entrenamiento físico y táctico, encomiendan a Steve Rogers su primera misión como Capitán América. Armado con un escudo indestructible, emprende la guerra contra la perversa organización HYDRA.', ''),
(5, 'capitan_america_el_soldado_de_invierno', 120, 'spanish', 'Capitán América, Viuda Negra y un nuevo aliado, Falcon, se enfrentan a un enemigo inesperado mientras intentan exponer una conspiración que pone en riesgo al mundo.', ''),
(6, 'capitan_america_civil_war', 180, 'spanish', 'Después de que otro incidente internacional, en el que se ven envueltos los Vengadores, produzca daños colaterales, la presión política obliga a poner en marcha un sistema para depurar responsabilidades.', ''),
(7, 'marvel_avengers', 120, 'spanish', 'El director de la Agencia SHIELD decide reclutar a un equipo para salvar al mundo de un desastre casi seguro cuando un enemigo inesperado surge como una gran amenaza para la seguridad mundial.', ''),
(8, 'avengers_age_of_ultron', 120, 'spanish', 'Los Vengadores se reúnen de nuevo y juntan sus fuerzas con las de los recién llegados Quicksilver y Bruja Escarlata para luchar contra un robot maquiavélico llamado Ultrón, el cual Tony Stark creó con el fin de defender la paz, pero resultó defectuoso y ahora pretende exterminar a toda la humanidad.', ''),
(9, 'avengers_inifinity_war', 180, 'spanish', 'Los superhéroes se alían para vencer al poderoso Thanos, el peor enemigo al que se han enfrentado. Si Thanos logra reunir las seis gemas del infinito: poder, tiempo, alma, realidad, mente y espacio, nadie podrá detenerlo.', ''),
(10, 'avengers_end_game', 180, 'spanish', 'Los Vengadores restantes deben encontrar una manera de recuperar a sus aliados para un enfrentamiento épico con Thanos, el malvado que diezmó el planeta y el universo.', '');
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `hall`
--
CREATE TABLE `hall` (
`number` int(15) UNSIGNED NOT NULL,
`idcinema` int(15) UNSIGNED NOT NULL,
`numrows` int(3) NOT NULL,
`numcolumns` int(3) NOT NULL,
`total_seats` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Volcado de datos para la tabla `hall`
--
INSERT INTO `hall` (`number`, `idcinema`, `numrows`, `numcolumns`, `total_seats`) VALUES
(1, 1, 12, 8, 60),
(2, 1, 14, 8, 97);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `manager`
--
CREATE TABLE `manager` (
`id` int(15) UNSIGNED NOT NULL,
`idcinema` int(15) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Volcado de datos para la tabla `manager`
--
INSERT INTO `manager` (`id`, `idcinema`) VALUES
(1, 1);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `promotion`
--
CREATE TABLE `promotion` (
`id` int(15) UNSIGNED NOT NULL,
`tittle` varchar(30) NOT NULL,
`description` text NOT NULL,
`code` varchar(15) NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Volcado de datos para la tabla `promotion`
--
INSERT INTO `promotion` (`id`, `tittle`, `description`, `code`, `active`) VALUES
(1, '3x2', 'en entradas', '000001A', 0),
(2, 'Promocion de ejemplo', 'Esto es un ejemplo', '1234', 0);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `purchase`
--
CREATE TABLE `purchase` (
`iduser` int(15) UNSIGNED NOT NULL,
`idsession` int(15) UNSIGNED NOT NULL,
`idhall` int(15) UNSIGNED NOT NULL,
`idcinema` int(15) UNSIGNED NOT NULL,
`numrow` int(3) UNSIGNED NOT NULL,
`numcolum` int(3) UNSIGNED NOT NULL,
`time_purchase` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `seat`
--
CREATE TABLE `seat` (
`idhall` int(15) UNSIGNED NOT NULL,
`idcinema` int(15) UNSIGNED NOT NULL,
`numrow` int(3) UNSIGNED NOT NULL,
`numcolum` int(3) UNSIGNED NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Volcado de datos para la tabla `seat`
--
INSERT INTO `seat` (`idhall`, `idcinema`, `numrow`, `numcolum`, `active`) VALUES
(1, 1, 1, 1, 0),
(1, 1, 1, 2, 0),
(1, 1, 1, 3, 0),
(1, 1, 1, 4, -1),
(1, 1, 1, 5, -1),
(1, 1, 1, 6, 0),
(1, 1, 1, 7, 0),
(1, 1, 1, 8, 0),
(1, 1, 2, 1, 0),
(1, 1, 2, 2, 0),
(1, 1, 2, 3, 0),
(1, 1, 2, 4, -1),
(1, 1, 2, 5, -1),
(1, 1, 2, 6, 0),
(1, 1, 2, 7, 0),
(1, 1, 2, 8, 0),
(1, 1, 3, 1, 0),
(1, 1, 3, 2, 0),
(1, 1, 3, 3, 0),
(1, 1, 3, 4, -1),
(1, 1, 3, 5, -1),
(1, 1, 3, 6, 0),
(1, 1, 3, 7, 0),
(1, 1, 3, 8, 0),
(1, 1, 4, 1, -1),
(1, 1, 4, 2, -1),
(1, 1, 4, 3, -1),
(1, 1, 4, 4, -1),
(1, 1, 4, 5, -1),
(1, 1, 4, 6, -1),
(1, 1, 4, 7, -1),
(1, 1, 4, 8, -1),
(1, 1, 5, 1, -1),
(1, 1, 5, 2, -1),
(1, 1, 5, 3, -1),
(1, 1, 5, 4, -1),
(1, 1, 5, 5, -1),
(1, 1, 5, 6, -1),
(1, 1, 5, 7, -1),
(1, 1, 5, 8, -1),
(1, 1, 6, 1, 0),
(1, 1, 6, 2, 0),
(1, 1, 6, 3, 0),
(1, 1, 6, 4, -1),
(1, 1, 6, 5, -1),
(1, 1, 6, 6, 0),
(1, 1, 6, 7, 0),
(1, 1, 6, 8, 0),
(1, 1, 7, 1, 0),
(1, 1, 7, 2, 0),
(1, 1, 7, 3, 0),
(1, 1, 7, 4, -1),
(1, 1, 7, 5, -1),
(1, 1, 7, 6, 0),
(1, 1, 7, 7, 0),
(1, 1, 7, 8, 0),
(1, 1, 8, 1, 0),
(1, 1, 8, 2, 0),
(1, 1, 8, 3, 0),
(1, 1, 8, 4, -1),
(1, 1, 8, 5, -1),
(1, 1, 8, 6, 0),
(1, 1, 8, 7, 0),
(1, 1, 8, 8, 0),
(1, 1, 9, 1, 0),
(1, 1, 9, 2, 0),
(1, 1, 9, 3, 0),
(1, 1, 9, 4, -1),
(1, 1, 9, 5, -1),
(1, 1, 9, 6, 0),
(1, 1, 9, 7, 0),
(1, 1, 9, 8, 0),
(1, 1, 10, 1, 0),
(1, 1, 10, 2, 0),
(1, 1, 10, 3, 0),
(1, 1, 10, 4, -1),
(1, 1, 10, 5, -1),
(1, 1, 10, 6, 0),
(1, 1, 10, 7, 0),
(1, 1, 10, 8, 0),
(1, 1, 11, 1, 0),
(1, 1, 11, 2, 0),
(1, 1, 11, 3, 0),
(1, 1, 11, 4, -1),
(1, 1, 11, 5, -1),
(1, 1, 11, 6, 0),
(1, 1, 11, 7, 0),
(1, 1, 11, 8, 0),
(1, 1, 12, 1, 0),
(1, 1, 12, 2, 0),
(1, 1, 12, 3, 0),
(1, 1, 12, 4, -1),
(1, 1, 12, 5, -1),
(1, 1, 12, 6, 0),
(1, 1, 12, 7, 0),
(1, 1, 12, 8, 0),
(2, 1, 1, 1, 1),
(2, 1, 1, 2, 1),
(2, 1, 1, 3, 1),
(2, 1, 1, 4, 1),
(2, 1, 1, 5, 1),
(2, 1, 1, 6, 1),
(2, 1, 1, 7, 1),
(2, 1, 1, 8, 1),
(2, 1, 2, 1, 1),
(2, 1, 2, 2, 1),
(2, 1, 2, 3, 1),
(2, 1, 2, 4, 1),
(2, 1, 2, 5, 1),
(2, 1, 2, 6, 1),
(2, 1, 2, 7, 1),
(2, 1, 2, 8, 1),
(2, 1, 3, 1, 1),
(2, 1, 3, 2, -1),
(2, 1, 3, 3, -1),
(2, 1, 3, 4, -1),
(2, 1, 3, 5, 1),
(2, 1, 3, 6, 1),
(2, 1, 3, 7, 1),
(2, 1, 3, 8, 1),
(2, 1, 4, 1, 1),
(2, 1, 4, 2, -1),
(2, 1, 4, 3, -1),
(2, 1, 4, 4, -1),
(2, 1, 4, 5, 1),
(2, 1, 4, 6, 1),
(2, 1, 4, 7, 1),
(2, 1, 4, 8, 1),
(2, 1, 5, 1, 1),
(2, 1, 5, 2, -1),
(2, 1, 5, 3, -1),
(2, 1, 5, 4, -1),
(2, 1, 5, 5, 1),
(2, 1, 5, 6, 1),
(2, 1, 5, 7, 1),
(2, 1, 5, 8, 1),
(2, 1, 6, 1, 1),
(2, 1, 6, 2, 1),
(2, 1, 6, 3, 1),
(2, 1, 6, 4, 1),
(2, 1, 6, 5, 1),
(2, 1, 6, 6, 1),
(2, 1, 6, 7, 1),
(2, 1, 6, 8, 1),
(2, 1, 7, 1, 1),
(2, 1, 7, 2, 1),
(2, 1, 7, 3, 1),
(2, 1, 7, 4, 1),
(2, 1, 7, 5, -1),
(2, 1, 7, 6, -1),
(2, 1, 7, 7, 1),
(2, 1, 7, 8, 1),
(2, 1, 8, 1, 1),
(2, 1, 8, 2, 1),
(2, 1, 8, 3, 1),
(2, 1, 8, 4, 1),
(2, 1, 8, 5, -1),
(2, 1, 8, 6, -1),
(2, 1, 8, 7, 1),
(2, 1, 8, 8, 1),
(2, 1, 9, 1, 1),
(2, 1, 9, 2, 1),
(2, 1, 9, 3, 1),
(2, 1, 9, 4, 1),
(2, 1, 9, 5, -1),
(2, 1, 9, 6, -1),
(2, 1, 9, 7, 1),
(2, 1, 9, 8, 1),
(2, 1, 10, 1, 1),
(2, 1, 10, 2, 1),
(2, 1, 10, 3, 1),
(2, 1, 10, 4, 1),
(2, 1, 10, 5, 1),
(2, 1, 10, 6, 1),
(2, 1, 10, 7, 1),
(2, 1, 10, 8, 1),
(2, 1, 11, 1, 1),
(2, 1, 11, 2, 1),
(2, 1, 11, 3, 1),
(2, 1, 11, 4, 1),
(2, 1, 11, 5, 1),
(2, 1, 11, 6, 1),
(2, 1, 11, 7, 1),
(2, 1, 11, 8, 1),
(2, 1, 12, 1, 1),
(2, 1, 12, 2, 1),
(2, 1, 12, 3, 1),
(2, 1, 12, 4, 1),
(2, 1, 12, 5, 1),
(2, 1, 12, 6, 1),
(2, 1, 12, 7, 1),
(2, 1, 12, 8, 1),
(2, 1, 13, 1, 1),
(2, 1, 13, 2, 1),
(2, 1, 13, 3, 1),
(2, 1, 13, 4, 1),
(2, 1, 13, 5, 1),
(2, 1, 13, 6, 1),
(2, 1, 13, 7, 1),
(2, 1, 13, 8, 1),
(2, 1, 14, 1, 1),
(2, 1, 14, 2, 1),
(2, 1, 14, 3, 1),
(2, 1, 14, 4, 1),
(2, 1, 14, 5, 1),
(2, 1, 14, 6, 1),
(2, 1, 14, 7, 1),
(2, 1, 14, 8, 1);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `session`
--
CREATE TABLE `session` (
`id` int(15) UNSIGNED NOT NULL,
`idfilm` int(15) UNSIGNED NOT NULL,
`idhall` int(15) UNSIGNED NOT NULL,
`idcinema` int(15) UNSIGNED NOT NULL,
`date` date NOT NULL,
`start_time` time NOT NULL,
`seat_price` float NOT NULL,
`format` varchar(20) NOT NULL,
`seats_full` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Volcado de datos para la tabla `session`
--
INSERT INTO `session` (`id`, `idfilm`, `idhall`, `idcinema`, `date`, `start_time`, `seat_price`, `format`, `seats_full`) VALUES
(19, 1, 2, 1, '2021-05-14', '19:00:00', 12, '2d', 0),
(20, 1, 2, 1, '2021-05-15', '19:00:00', 12, '2d', 0);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `users`
--
CREATE TABLE `users` (
`id` int(15) UNSIGNED NOT NULL,
`username` varchar(10) NOT NULL,
`email` varchar(30) NOT NULL,
`passwd` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`rol` varchar(7) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Usuarios';
--
-- Volcado de datos para la tabla `users`
--
INSERT INTO `users` (`id`, `username`, `email`, `passwd`, `rol`) VALUES
(0, 'admin', 'admin@complucine.sytes.net', 'shDBCKnEbWZFc', 'admin'),
(1, 'manager', 'manager@complucine.sytes.net', 'shTS9RK/eJPoQ', 'manager'),
(2, 'user', 'user@complucine.sytes.net', 'shO5etd.DYKWg', 'user'),
(7, 'fernando', 'fer@complucine.sytes.net', '$2y$10$/3yjEh4d7AOY3RyNjXIIkO5H2hg7/kiHiToJa92tCBPd7s3UPtB.G', 'user'),
(63, 'user2', 'user2@ucm.es', '$2y$10$Alopov4Z1HPW9i9PqQ/APedPoU.N/zc3XlRfIfSkwPCQCKI.qTp5u', 'user');
--
-- Índices para tablas volcadas
--
--
-- Indices de la tabla `admin`
--
ALTER TABLE `admin`
ADD KEY `PK_A_USER` (`id`);
--
-- Indices de la tabla `cinema`
--
ALTER TABLE `cinema`
ADD PRIMARY KEY (`id`);
--
-- Indices de la tabla `film`
--
ALTER TABLE `film`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `U_TITTLE_LANGUAGE` (`tittle`,`language`);
--
-- Indices de la tabla `hall`
--
ALTER TABLE `hall`
ADD PRIMARY KEY (`number`,`idcinema`),
ADD KEY `FK_CINEMA` (`idcinema`);
--
-- Indices de la tabla `manager`
--
ALTER TABLE `manager`
ADD KEY `PK_M_USER` (`id`),
ADD KEY `PK_M_CINEMA` (`idcinema`);
--
-- Indices de la tabla `promotion`
--
ALTER TABLE `promotion`
ADD PRIMARY KEY (`id`);
--
-- Indices de la tabla `purchase`
--
ALTER TABLE `purchase`
ADD KEY `PK_P_SEAT` (`idhall`,`numrow`,`numcolum`),
ADD KEY `FK_P_SESSION` (`idsession`),
ADD KEY `FK_P_USER` (`iduser`),
ADD KEY `FK_P_SEAT` (`idhall`,`idcinema`,`numrow`,`numcolum`);
--
-- Indices de la tabla `seat`
--
ALTER TABLE `seat`
ADD PRIMARY KEY (`idhall`,`numrow`,`numcolum`),
ADD KEY `FK_HALL` (`idhall`,`idcinema`);
--
-- Indices de la tabla `session`
--
ALTER TABLE `session`
ADD PRIMARY KEY (`id`),
ADD KEY `FK_FILM` (`idfilm`),
ADD KEY `FK_HALL_` (`idhall`,`idcinema`);
--
-- Indices de la tabla `users`
--
ALTER TABLE `users`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `email` (`email`),
ADD UNIQUE KEY `username_2` (`username`),
ADD KEY `username` (`username`);
--
-- AUTO_INCREMENT de las tablas volcadas
--
--
-- AUTO_INCREMENT de la tabla `cinema`
--
ALTER TABLE `cinema`
MODIFY `id` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT de la tabla `film`
--
ALTER TABLE `film`
MODIFY `id` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;
--
-- AUTO_INCREMENT de la tabla `hall`
--
ALTER TABLE `hall`
MODIFY `number` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
--
-- AUTO_INCREMENT de la tabla `promotion`
--
ALTER TABLE `promotion`
MODIFY `id` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT de la tabla `session`
--
ALTER TABLE `session`
MODIFY `id` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
--
-- AUTO_INCREMENT de la tabla `users`
--
ALTER TABLE `users`
MODIFY `id` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=65;
--
-- Restricciones para tablas volcadas
--
--
-- Filtros para la tabla `admin`
--
ALTER TABLE `admin`
ADD CONSTRAINT `PK_A_USER` FOREIGN KEY (`id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Filtros para la tabla `hall`
--
ALTER TABLE `hall`
ADD CONSTRAINT `FK_CINEMA` FOREIGN KEY (`idcinema`) REFERENCES `cinema` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Filtros para la tabla `manager`
--
ALTER TABLE `manager`
ADD CONSTRAINT `PK_M_CINEMA` FOREIGN KEY (`idcinema`) REFERENCES `cinema` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `PK_M_USER` FOREIGN KEY (`id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Filtros para la tabla `purchase`
--
ALTER TABLE `purchase`
ADD CONSTRAINT `FK_P_SEAT` FOREIGN KEY (`idhall`,`idcinema`,`numrow`,`numcolum`) REFERENCES `seat` (`idhall`, `idcinema`, `numrow`, `numcolum`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `FK_P_SESSION` FOREIGN KEY (`idsession`) REFERENCES `session` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `FK_P_USER` FOREIGN KEY (`iduser`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Filtros para la tabla `seat`
--
ALTER TABLE `seat`
ADD CONSTRAINT `FK_HALL` FOREIGN KEY (`idhall`,`idcinema`) REFERENCES `hall` (`number`, `idcinema`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Filtros para la tabla `session`
--
ALTER TABLE `session`
ADD CONSTRAINT `FK_FILM` FOREIGN KEY (`idfilm`) REFERENCES `film` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `FK_HALL_` FOREIGN KEY (`idhall`,`idcinema`) REFERENCES `hall` (`number`, `idcinema`) ON DELETE CASCADE ON UPDATE CASCADE;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@ -0,0 +1,34 @@
<!--
Práctica - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<!DOCTYPE HTML>
<html lang="es">
<!-- Head -->
<?php
$template->print_head();
?>
<body>
<!-- Header -->
<?php
$template->print_header();
?>
<!-- Main -->
<?php
if(!isset($content)) $content = "";
$template->print_main($content);
?>
<!-- Section -->
<?php
$template->print_section($section);
?>
<!-- Footer -->
<?php
$template->print_footer();
?>
</body>
</html>

138
assets/php/aplication.php Normal file
View File

@ -0,0 +1,138 @@
<?php
require_once('config.php');
/**
* Clase que mantiene el estado global de la aplicación.
*/
class Aplicacion {
private static $instancia;
/**
* Permite obtener una instancia de <code>Aplicacion</code>.
*
* @return Applicacion Obtiene la única instancia de la <code>Aplicacion</code>
*/
public static function getSingleton() {
if ( !self::$instancia instanceof self) {
self::$instancia = new self;
}
return self::$instancia;
}
/**
* @var array Almacena los datos de configuración de la BD
*/
private $bdDatosConexion;
/**
* Almacena si la Aplicacion ya ha sido inicializada.
*
* @var boolean
*/
private $inicializada = false;
/**
* @var \mysqli Conexión de BD.
*/
private $conn;
/**
* Evita que se pueda instanciar la clase directamente.
*/
private function __construct() {}
/**
* Evita que se pueda utilizar el operador clone.
*/
public function __clone() {
throw new \Exception('No tiene sentido el clonado.');
}
/**
* Evita que se pueda utilizar serialize().
*/
public function __sleep() {
throw new \Exception('No tiene sentido el serializar el objeto.');
}
/**
* Evita que se pueda utilizar unserialize().
*/
public function __wakeup() {
throw new \Exception('No tiene sentido el deserializar el objeto.');
}
/**
* Inicializa la aplicación.
*
* @param array $bdDatosConexion datos de configuración de la BD
*/
public function init($bdDatosConexion) {
if ( ! $this->inicializada ) {
$this->bdDatosConexion = $bdDatosConexion;
if ( $this->is_session_started() === FALSE ) session_start();
$this->inicializada = true;
}
}
/**
* Inicia la sesión, si esta no se había iniciado.
*/
protected function is_session_started(){
if ( php_sapi_name() !== 'cli' ) {
if ( version_compare(phpversion(), '5.4.0', '>=') ) {
return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
} else {
return session_id() === '' ? FALSE : TRUE;
}
}
return FALSE;
}
/**
* Cierre de la aplicación.
*/
public function shutdown() {
$this->compruebaInstanciaInicializada();
if ($this->conn !== null) {
$this->conn->close();
}
}
/**
* Comprueba si la aplicación está inicializada. Si no lo está muestra un mensaje y termina la ejecución.
*/
private function compruebaInstanciaInicializada() {
if (! $this->inicializada ) {
echo "ERROR 403: app_not_configured.";
exit();
}
}
/**
* Devuelve una conexión a la BD. Se encarga de que exista como mucho una conexión a la BD por petición.
*
* @return \mysqli Conexión a MySQL.
*/
public function conexionBd() {
$this->compruebaInstanciaInicializada();
if (! $this->conn ) {
$bdHost = $this->bdDatosConexion['host'];
$bdUser = $this->bdDatosConexion['user'];
$bdPass = $this->bdDatosConexion['pass'];
$bd = $this->bdDatosConexion['bd'];
$this->conn = new \mysqli($bdHost, $bdUser, $bdPass, $bd);
if ( $this->conn->connect_errno ) {
echo "Error de conexión a la BD: (" . $this->conn->connect_errno . ") " . utf8_encode($this->conn->connect_error);
exit();
}
if ( ! $this->conn->set_charset("utf8mb4")) {
echo "Error al configurar la codificación de la BD: (" . $this->conn->errno . ") " . utf8_encode($this->conn->error);
exit();
}
}
return $this->conn;
}
}

View File

@ -0,0 +1,32 @@
<?php
class Cinema{
//Attributes:
private $_id; //Cinema ID.
private $_name; //Cinema name.
private $_direction; //Cinema direction.
private $_phone; //Cinema phone.
//Constructor:
function __construct($id, $name, $direction, $phone){
$this->_id = $id;
$this->_name = $name;
$this->_direction = $direction;
$this->_phone = $phone;
}
//Methods:
//Getters && Setters:
public function setId($id){ $this->_id = $id; }
public function getId(){ return $this->_id; }
public function setName($name){ $this->_name = $name; }
public function getName(){ return $this->_name; }
public function setDirection($direction){ $this->_direction = $direction; }
public function getDirection(){ return $this->_direction; }
public function setPhone($phone){$this->_phone = $phone; }
public function getPhone(){ return $this->_phone; }
}
?>

View File

@ -0,0 +1,77 @@
<?php
include_once('cinema.php');
class Cinema_DAO extends DAO {
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Create a new Session.
public function createCinema($id, $name, $direction, $phone){
$sql = sprintf( "INSERT INTO `cinema`( `id`, `name`, `direction`, `phone`)
VALUES ( '%d', '%s', '%s', '%s')",
$id, $name, $direction, $phone);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a query to get All the films.
public function allCinemaData(){
$sql = sprintf( "SELECT * FROM cinema ");
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
while($fila=$resul->fetch_assoc()){
$films[] = $this->loadCinema($fila["id"], $fila["name"], $fila["direction"], $fila["phone"]);
}
$resul->free();
return $films;
}
//Returns a film data .
public function GetCinema($name,$direction){
$sql = sprintf( "SELECT * FROM cinema WHERE cinema.name = '%s'AND cinema.direction='%s'", $name,$direction );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a film data .
public function cinemaData($id){
$sql = sprintf( "SELECT * FROM cinema WHERE cinema.id = '%d'", $id);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Deleted film by "id".
public function deleteCinema($id){
$sql = sprintf( "DELETE FROM cinema WHERE cinema.id = '%d' ;",$id);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Edit a film.
public function editCinema($id, $name, $direction, $phone){
$sql = sprintf( "UPDATE cinema SET name = '%s' , direction = '%s', phone ='%s'
WHERE cinema.id = '%d';",
$name, $direction, $phone, $id);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Create a new film Data Transfer Object.
public function loadCinema($id, $name, $direction, $phone){
return new Cinema($id, $name, $direction, $phone);
}
}
?>

View File

@ -0,0 +1,39 @@
<?php
class Film{
//Attributes:
private $_id; //Film ID.
private $_tittle; //Film tittle.
private $_duration; //Film duration.
private $_language; //Film language.
private $_description; //Film description.
private $_img;
//Constructor:
function __construct($id, $tittle, $duration, $language, $description, $img){
$this->_id = $id;
$this->_tittle = $tittle;
$this->_duration = $duration;
$this->_language = $language;
$this->_description = $description;
$this->_img = $img;
}
//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;}
public function setImg($img){ $this->_img = $img;}
public function getImg(){return $this->_img;}
}
?>

View File

@ -0,0 +1,100 @@
<?php
include_once('film.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, $img){
$sql = sprintf( "INSERT INTO `film`( `id`, `tittle`, `duration`, `language`,`description`, `img`)
VALUES ( '%d', '%s', '%d', '%s','%s', '%s')",
$id, $tittle, $duration, $language, $description, $img);
$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"], $fila["img"]);
}
$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,$img){
$sql = sprintf( "UPDATE film SET tittle = '%s' , duration = '%d', language ='%s' , description ='%s', img ='%s'
WHERE film.id = '%d';",
$tittle, $duration, $language, $description, $img, $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, $img){
return new Film( $id, $tittle, $duration, $language,$description, $img);
}
}
?>

103
assets/php/common/hall.php Normal file
View File

@ -0,0 +1,103 @@
<?php
include_once($prefix.'assets/php/common/hall_dao.php');
include_once('seat_dao.php');
class Hall{
//Attributes:
private $_number; //Room number.
private $_idcinema; //Cinema Id
private $_numRows; //Num rows.
private $_numCol; //Num columns.
private $_total_seats;
private $_seats_map;
//Constructor:
function __construct($number, $idcinema, $numRows, $numCol, $total_seats, $seats_map){
$this->_number = $number;
$this->_idcinema = $idcinema;
$this->_numRows = $numRows;
$this->_numCol = $numCol;
$this->_total_seats = $total_seats;
$_seats_map = array();
$_seats_map = $seats_map;
}
//Methods:
public static function getListHalls($cinema){
$bd = new HallDAO('complucine');
if($bd )
return $bd->getAllHalls($cinema);
}
public static function create_hall($number, $cinema, $rows, $cols, $seats, $seats_map){
$bd = new HallDAO('complucine');
if($bd ){
if(!$bd->searchHall($number, $cinema)){
$bd->createHall($number, $cinema, $rows, $cols, $seats, $seats_map);
Seat::createSeats($number, $cinema, $rows, $cols, $seats_map);
return "Se ha creado la sala con exito";
} else {
return "Esta sala ya existe";
}
} else { return "Error al conectarse a la base de datos"; }
}
public static function edit_hall($number, $cinema, $rows, $cols, $seats, $seats_map, $og_number){
$bd = new HallDAO('complucine');
if($bd ){
if($bd->searchHall($og_number, $cinema)){
if($og_number == $number){
Seat::deleteAllSeats($number, $cinema);
$bd->editHall($number, $cinema, $rows, $cols, $seats, $og_number);
Seat::createSeats($number, $cinema, $rows, $cols, $seats_map);
return "Se ha editado la sala con exito";
}else{
if(!$bd->searchHall($number, $cinema)){
Seat::deleteAllSeats($og_number, $cinema);
$bd->editHall($number, $cinema, $rows, $cols, $seats, $og_number);
Seat::createSeats($number, $cinema, $rows, $cols, $seats_map);
return "Se ha editado la sala con exito";
}else
return "El nuevo numero de sala ya existe en otra sala";
}
} else {
return "La sala a editar no existe";
}
} else { return "Error al conectarse a la base de datos"; }
}
public static function delete_hall($number, $cinema, $rows, $cols, $seats, $seats_map, $og_number){
$bd = new HallDAO('complucine');
if($bd ){
if($bd->searchHall($og_number, $cinema)){
$bd->deleteHall($og_number, $cinema);
Seat::deleteAllSeats($og_number, $cinema);
return "La sala se ha eliminado correctamente";
} else {
return "La sala a borrar no existe";
}
} else { return "Error al conectarse a la base de datos"; }
}
//Getters && Setters:
public function setNumber($number){ $this->_number = $number; }
public function getNumber(){ return $this->_number; }
public function setIdcinema($idcinema){ $this->_idcinema = $idcinema; }
public function getIdcinema(){ return $this->_idcinema; }
public function setNumRows($numRows){ $this->_numRows = $numRows; }
public function getNumRows(){ return $this->_numRows; }
public function setNumCol($numCol){ $this->_numCol = $numCol; }
public function getNumCol(){ return $this->_numCol; }
public function setTotalSeats($totalSeat){ $this->_total_seats = $totalSeat; }
public function getTotalSeats(){ return $this->_total_seats; }
public function setSeatsmap($seats_map){ $this->_seats_map = $seats_map; }
public function getSeatsmap(){ return $this->_seats_map; }
}
?>

View File

@ -0,0 +1,96 @@
<?php
include_once('hall.php');
class HallDAO extends DAO {
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Create a new Hall.
public function createHall($number, $cinema, $rows, $cols, $seats, $seats_map){
$sql = sprintf( "INSERT INTO `hall`( `number`, `idcinema`, `numrows`, `numcolumns`, `total_seats`)
VALUES ( '%d', '%d', '%d', '%d', '%d')",
$number, $cinema, $rows, $cols, $seats );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error BD createhall');
return $sql;
}
//Returns a query to get the halls data.
public function getAllHalls($cinema){
$sql = sprintf( "SELECT * FROM hall WHERE
idcinema = '%s'",
$cinema);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
$hall = null;
while($fila=mysqli_fetch_array($resul)){
$hall[] = $this->loadHall($fila["number"], $fila["idcinema"], $fila["numrows"], $fila["numcolumns"], $fila["total_seats"], null);
}
mysqli_free_result($resul);
return $hall;
}
public function searchHall($number, $cinema){
$sql = sprintf( "SELECT * FROM hall WHERE
number = '%s' AND idcinema = '%s'",
$number, $cinema);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
$hall = false;
if($resul){
if($resul->num_rows == 1){
$fila = $resul->fetch_assoc();
$hall = $this->loadHall($fila["number"], $fila["idcinema"], $fila["numrows"], $fila["numcolumns"], $fila["total_seats"], null);
}
$resul->free();
}
return $hall;
}
//Create a new Hall Data Transfer Object.
public function loadHall($number, $idcinema, $numrows, $numcolumns, $total_seats, $seats_map){
return new Hall($number, $idcinema, $numrows, $numcolumns, $total_seats, $seats_map);
}
//Edit Hall.
public function editHall($number, $cinema, $rows, $cols, $seats, $og_number){
$sql = sprintf( "UPDATE `hall`
SET `number` = '%d' ,`numrows` = '%d' , `numcolumns` = '%d' , `total_seats` = %d
WHERE `hall`.`number` = '%d' AND `hall`.`idcinema` = '%d';",
$number, $rows, $cols, $seats, $og_number, $cinema );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Delete Hall.
public function deleteHall($number, $cinema){
$sql = sprintf( "DELETE FROM `hall` WHERE `hall`.`number` = '%d' AND `hall`.`idcinema` = '%d';",$number, $cinema);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
}
?>

View File

@ -0,0 +1,35 @@
<?php
class Manager{
//Attributes:
private $_id; //Manager ID.
private $_username; //Manager username.
private $_email; //Email.
private $_roll; //Roll
//Constructor:
function __construct($id, $idcinema, $username, $email, $roll){
$this->_id = $id;
$this->_idcinema = $idcinema;
$this->_username = $username;
$this->_email = $email;
$this->_roll = $roll;
}
//Methods:
//Getters && Setters:
public function setId($id){ $this->_id = $id; }
public function getId(){ return $this->_id; }
public function setIdcinema($idcinema){ $this->_idcinema = $idcinema; }
public function getIdcinema(){ return $this->_idcinema; }
public function setUsername($username){$this->_username = $username; }
public function getUsername(){ return $this->_username;}
public function setEmail($email){$this->_email = $email;}
public function getEmail(){return $this->_email;}
public function setRoll($roll){$this->_roll = $roll;}
public function getRoll(){return $this->_roll;}
}
?>

View File

@ -0,0 +1,77 @@
<?php
include_once('manager.php');
class Manager_DAO extends DAO {
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Returns a query to get All the managers.
public function allManagersData(){
$sql = sprintf( "SELECT * FROM `users` JOIN `manager` ON manager.id = users.id");
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
while($fila=$resul->fetch_assoc()){
$managers[] = $this->loadManager($fila["id"], $fila["idcinema"], $fila["username"], $fila["email"], $fila["rol"]);
}
$resul->free();
return $managers;
}
//Returns a manager data .
public function GetManager($id){
$sql = sprintf( "SELECT * FROM `manager` WHERE manager.id = '%d'", $id );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a manager data .
public function GetManagerCinema($id, $idcinema){
$sql = sprintf( "SELECT * FROM `manager` WHERE manager.id = '%d' AND manager.idcinema ='%d'", $id, $idcinema );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Create a new Session.
public function createManager($id, $idcinema){
$sql = sprintf( "INSERT INTO `manager`( `id`, `idcinema`)
VALUES ( '%d', '%d')",
$id, $idcinema);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Deleted manager by "id".
public function deleteManager($id){
$sql = sprintf( "DELETE FROM `manager` WHERE manager.id = '%d' ;",$id);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Edit manager.
public function editManager($id, $idcinema){
$sql = sprintf( "UPDATE `manager` SET manager.idcinema = '%d'
WHERE manager.id = '%d';",
$idcinema, $id);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Create a new Manager Data Transfer Object.
public function loadManager($id, $idcinema, $username, $email, $rol){
return new Manager($id, $idcinema, $username, $email, $rol);
}
}
?>

View File

@ -0,0 +1,36 @@
<?php
class Promotion{
//Attributes:
private $_id; //Cinema ID.
private $_tittle; //Cinema name.
private $_description; //Cinema direction.
private $_code; //Cinema phone.
private $_active;
//Constructor:
function __construct($id, $tittle, $description, $code, $active){
$this->_id = $id;
$this->_tittle = $tittle;
$this->_description = $description;
$this->_code = $code;
$this->_active = $active;
}
//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 setDescription($description){ $this->_description = $description;}
public function getDescription(){return $this->_description;}
public function setCode($code){ $this->_code = $code;}
public function getCode(){return $this->_code;}
public function setActive($active){ $this->_active = $active;}
public function getActive(){return $this->_active;}
}
?>

View File

@ -0,0 +1,77 @@
<?php
include_once('promotion.php');
class Promotion_DAO extends DAO {
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Create a new Session.
public function createPromotion($id, $tittle, $description, $code, $active){
$sql = sprintf( "INSERT INTO `promotion`( `id`, `tittle`, `description`, `code`, `active`)
VALUES ( '%d', '%s', '%s', '%s', '%s')",
$id, $tittle, $description, $code, $active);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a query to get All the films.
public function allPromotionData(){
$sql = sprintf( "SELECT * FROM promotion ");
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
while($fila=$resul->fetch_assoc()){
$promotions[] = $this->loadPromotion($fila["id"], $fila["tittle"], $fila["description"], $fila["code"], $fila["active"]);
}
$resul->free();
return $promotions;
}
//Returns a film data .
public function GetPromotion($code){
$sql = sprintf( "SELECT * FROM promotion WHERE promotion.code = '%s'", $code );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Returns a film data .
public function promotionData($id){
$sql = sprintf( "SELECT * FROM promotion WHERE promotion.id = '%d'", $id);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Deleted film by "id".
public function deletePromotion($id){
$sql = sprintf( "DELETE FROM promotion WHERE promotion.id = '%d' ;",$id);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Edit a film.
public function editPromotion($id, $tittle, $description, $code, $active){
$sql = sprintf( "UPDATE promotion SET tittle = '%s' , description = '%s', code ='%s' , active ='%s'
WHERE promotion.id = '%d';",
$tittle, $description, $code, $active, $id);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Create a new film Data Transfer Object.
public function loadPromotion($id, $tittle, $description, $code, $active){
return new Promotion($id, $tittle, $description, $code, $active);
}
}
?>

View File

@ -0,0 +1,63 @@
<?php
include_once($prefix.'assets/php/common/seat_dao.php');
class Seat{
//Attributes:
private $_idhall;
private $_idcinema;
private $_numRow;
private $_numCol;
private $_state;
//Constructor:
function __construct($idhall, $idcinema, $numRow, $numCol, $state){
$this->_number = $idhall;
$this->_idcinema = $idcinema;
$this->_numRow = $numRow;
$this->_numCol = $numCol;
$this->_state = $state;
}
static public function createSeats($hall, $cinema, $rows, $cols, $seats_map){
$bd = new SeatDAO('complucine');
for($i = 1;$i <= $rows;$i++){
for($j = 1; $j <= $cols;$j++){
$bd->createSeat($hall, $cinema, $i, $j, $seats_map[$i][$j]);
}
}
}
static public function getSeatsMap($number, $cinema){
$bd = new SeatDAO('complucine');
if($bd )
return $bd->getAllSeats($number, $cinema);
}
static public function deleteAllSeats($number, $cinema){
$bd = new SeatDAO('complucine');
if($bd)
return $bd->deletemapSeats($number, $cinema);
}
//Getters && Setters:
public function setNumber($number){ $this->_number = $number; }
public function getNumber(){ return $this->_number; }
public function setIdcinema($idcinema){ $this->_idcinema = $idcinema; }
public function getIdcinema(){ return $this->_idcinema; }
public function setNumRows($numRow){ $this->_numRow = $numRow; }
public function getNumRows(){ return $this->_numRow; }
public function setNumCol($numCol){ $this->_numCol = $numCol; }
public function getNumCol(){ return $this->_numCol; }
public function setState($state){ $this->_state = $state; }
public function getState(){ return $this->_state; }
}
?>

View File

@ -0,0 +1,58 @@
<?php
include_once('seat.php');
class SeatDAO extends DAO {
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Create a new Hall.
public function createSeat($hall, $cinema, $row, $col, $state){
$sql = sprintf( "INSERT INTO `seat`( `idhall`, `idcinema`, `numrow`, `numcolum`, `active`)
VALUES ( '%d', '%d', '%d', '%d', '%d')",
$hall, $cinema, $row, $col, $state);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error BD createSeat');
return $sql;
}
public function getAllSeats($number, $cinema){
$sql = sprintf( "SELECT * FROM seat WHERE
idhall = '%s' AND idcinema = '%s'",
$number, $cinema);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
$seat_map = null;
while($fila=mysqli_fetch_array($resul)){
$seat_map[] = $this->loadSeat($fila["idhall"], $fila["idcinema"], $fila["numrow"], $fila["numcolum"], $fila["active"]);
}
mysqli_free_result($resul);
return $seat_map;
}
public function deletemapSeats($hall, $cinema){
$sql = sprintf( "DELETE FROM `seat` WHERE
idcinema = '%s' AND idhall = '%s'",
$cinema, $hall);
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
public function loadSeat($idhall, $idcinema, $numRow, $numCol, $state){
return new Seat($idhall, $idcinema, $numRow, $numCol, $state);
}
}
?>

View File

@ -0,0 +1,118 @@
<?php
include_once($prefix.'assets/php/common/session_dao.php');
class Session{
private $_id;
private $_idfilm;
private $_idhall;
private $_idcinema;
private $_date;
private $_startTime;
private $_seatPrice;
private $_format;
private $_seats_full;
function __construct($id, $idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format, $seats_full){
$this->_id = $id;
$this->_idfilm = $idfilm;
$this->_idhall = $idhall;
$this->_idcinema = $idcinema;
$this->_date = $date;
$this->_startTime = $startTime;
$this->_seatPrice = $seatPrice;
$this->_format = $format;
$this->_seats_full = $seats_full;
}
public static function getListSessions($hall,$cinema,$date){
$bd = new SessionDAO('complucine');
if($bd ) {
return $bd->getAllSessions($hall, $cinema, $date);
}
}
public static function create_session($cinema, $hall, $start, $date, $film, $price, $format,$repeat){
$bd = new SessionDAO('complucine');
if($bd ){
if(!$bd->searchSession($cinema, $hall, $start, $date)){
$bd->createSession(null,$film, $hall, $cinema, $date, $start, $price, $format);
if($repeat > "0") {
$repeats = $repeat;
$repeat = $repeat - 1;
$date = date('Y-m-d', strtotime( $date . ' +1 day') );
self::create_session($cinema, $hall, $start, $date, $film, $price, $format,$repeat);
return "Se han creado las ".$repeat ." sesiones con exito";
}
else
return "Se ha creado la session con exito";
} else
return "Esta session ya existe";
} else return "Error al conectarse a la base de datos";
}
public static function edit_session($cinema, $or_hall, $or_date, $or_start, $hall, $start, $date, $film, $price, $format){
$bd = new SessionDAO('complucine');
if($bd ){
if($bd->searchSession($cinema, $or_hall, $or_start, $or_date)){
if(!$bd->searchSession($cinema,$hall,$start,$date)){
$origin = array("cinema" => $cinema,"hall" => $or_hall,"start" => $or_start,"date" => $or_date);
$bd->editSession($film, $hall, $cinema, $date, $start, $price, $format,$origin);
return "Se ha editado la session con exito";
}else
return "Ya existe una sesion con los parametros nuevos";
} else
return "Esta session no existe";
} else return "Error al conectarse a la base de datos";
}
public static function delete_session($cinema, $hall, $start, $date){
$bd = new SessionDAO('complucine');
if($bd ){
if($bd->searchSession($cinema, $hall, $start, $date)){
$bd->deleteSession($hall, $cinema, $date, $start);
return "Se ha eliminado la session con exito";
} else
return "Esta session no existe";
} else return "Error al conectarse a la base de datos";
}
//Esto deberia estar en film.php? seguramente
public static function getThisSessionFilm($idfilm){
$bd = new SessionDAO('complucine');
if($bd ) {
return $bd->filmTittle($idfilm);
}
}
public function setId($id){ $this->_id = $id; }
public function getId(){ return $this->_id; }
public function setIdfilm($idfilm){ $this->_idfilm = $idfilm; }
public function getIdfilm(){ return $this->_idfilm; }
public function setIdhall($idhall){ $this->_idhall = $idhall; }
public function getIdhall(){ return $this->_idhall; }
public function setIdcinema($cinema){ $this->_idcinema = $idcinema; }
public function getIdcinema(){ return $this->_idcinema; }
public function setDate($date){ $this->_date = $date; }
public function getDate(){ return $this->_date; }
public function setStartTime($startTime){ $this->_startTime = $startTime; }
public function getStartTime(){ return $this->_startTime; }
public function setSeatPrice($seatPrice){ $this->_seatPrice = $seatPrice; }
public function getSeatPrice(){ return $this->_seatPrice; }
public function setFormat($format){ $this->_format = $format; }
public function getFormat(){ return $this->_format; }
}
?>

View File

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

View File

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

View File

@ -0,0 +1,155 @@
<?php
include_once('user.php');
class UserDAO extends DAO {
//Constants:
private const _USER = "user";
private const _MANAGER = "manager";
private const _ADMIN = "admin";
//Attributes:
//Constructor:
function __construct($bd_name){
parent::__construct($bd_name);
}
//Methods:
//Encrypt password with SHA254.
private function encryptPass($password){
//$password = hash('sha256', $password);
$password = password_hash($password, PASSWORD_DEFAULT);
return $password;
}
//Returns true if the password and hash match, or false otherwise.
public function verifyPass($password, $passwd){
return password_verify($password, $passwd);
}
//All users
public function allUsersNotM(){
$sql = sprintf( "SELECT * FROM `users` WHERE users.id NOT IN (SELECT id FROM `manager`)");
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
while($fila=$resul->fetch_assoc()){
$users[] = $this->loadUser($fila['id'], $fila['username'], $fila['email'], $fila['passwd'], $fila['rol']);
}
$resul->free();
return $users;
}
//Create a new User.
public function createUser($id, $username, $email, $password, $rol){
$password = $this->encryptPass($password);
$sql = sprintf( "INSERT INTO users( id, username, email, passwd, rol)
VALUES ( '%s', '%s', '%s', '%s', '%s')",
$id, $username, $email, $password, $rol );
$resul = mysqli_query($this->mysqli, $sql);
return $resul;
}
//Returns a query to check if the user name exists.
public function selectUser($username, $password){
$username = $this->mysqli->real_escape_string($username);
$password = $this->mysqli->real_escape_string($password);
$sql = sprintf( "SELECT * FROM users WHERE username = '%s'", $username );
$resul = mysqli_query($this->mysqli, $sql);
$resul->data_seek(0);
$user = null;
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 get the user's data.
public function userData($id){
$id = $this->mysqli->real_escape_string($id);
$sql = sprintf( "SELECT * FROM users WHERE id = '%d'", $id );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Search a user by name.
public function selectUserName($username){
$username = $this->mysqli->real_escape_string($username);
$sql = sprintf( "SELECT * FROM users WHERE username = '%s'", $username );
$resul = mysqli_query($this->mysqli, $sql);
return $resul;
}
//Change username by id.
public function changeUserName($id, $username){
$id = $this->mysqli->real_escape_string($id);
$username = $this->mysqli->real_escape_string($username);
$sql = sprintf( "UPDATE users SET username = '%s' WHERE id = '%d'", $username, $id );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Change userpass by id.
public function changeUserPass($id, $password){
$id = $this->mysqli->real_escape_string($id);
$password = $this->mysqli->real_escape_string($password);
$password = $this->encryptPass($password);
$sql = sprintf( "UPDATE users SET passwd = '%s' WHERE id = '%d'", $password, $id );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Change user email by id.
public function changeUserEmail($id, $email){
$id = $this->mysqli->real_escape_string($id);
$email = $this->mysqli->real_escape_string($email);
$sql = sprintf( "UPDATE users SET email = '%s' WHERE id = '%d'", $email, $id );
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
return $resul;
}
//Delete user account by id.
public function deleteUserAccount($id){
$id = $this->mysqli->real_escape_string($id);
$sql = sprintf( "DELETE 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 User($id, $username, $email, $password, $rol);
}
}
?>

55
assets/php/config.php Normal file
View File

@ -0,0 +1,55 @@
<?php
/**
* Connection parameters to the DB.
*/
define('BD_HOST', '');
define('BD_NAME', '');
define('BD_USER', '');
define('BD_PASS', '');
/*
* Configuration parameters used to generate URLs and file paths in the application
*/
define('ROUTE_APP', '/'); //Change if it´s necessary.
define('RAIZ_APP', __DIR__);
/**
* Image files directory.
*/
define('FILMS_DIR', dirname(RAIZ_APP).'img/films/tmp');
define('FILMS_DIR_PROTECTED', RAIZ_APP.'img/films/tmp');
/**
* Utf-8 support settings, location (language and country) and time zone.
*/
ini_set('default_charset', 'UTF-8');
setLocale(LC_ALL, 'es_ES.UTF.8');
date_default_timezone_set('Europe/Madrid');
//Start session:
session_start();
//HTML template:
require_once('template.php');
$template = new Template();
$prefix = $template->get_prefix();
/**
* Initialize the application:
*/
include_once($prefix.'assets/php/dao.php');
require_once('aplication.php');
$app = Aplicacion::getSingleton();
$app->init(array('host'=>BD_HOST, 'bd'=>BD_NAME, 'user'=>BD_USER, 'pass'=>BD_PASS));
/**
* @see http://php.net/manual/en/function.register-shutdown-function.php
* @see http://php.net/manual/en/language.types.callable.php
*/
register_shutdown_function(array($app, 'shutdown'));
//Depuración (BORRAR):
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>

24
assets/php/dao.php Normal file
View File

@ -0,0 +1,24 @@
<?php
class DAO {
//Atributes:
public $mysqli;
//Constructor:
public function __construct($bd_name){
if($bd_name != BD_NAME) {
echo "Está intentando acceder a una base de datos que no existe, puede que la aplicación no funcione correctamente";
}
$app = Aplicacion::getSingleton();
$this->mysqli = $app->conexionBd();
}
//Destructor (Ya no es necesdario):
/*
public function __destruct(){
$this->mysqli->close();
}
*/
}
?>

343
assets/php/form.php Normal file
View File

@ -0,0 +1,343 @@
<?php
/**
* Clase base para la gestión de formularios.
*
* Gestión de token CSRF está basada en: https://www.owasp.org/index.php/PHP_CSRF_Guard
*/
abstract class Form {
/**
* @var string Sufijo para el nombre del parámetro de la sesión del usuario donde se almacena el token CSRF.
*/
const CSRF_PARAM = 'csrf';
/**
* @var string Identificador utilizado para construir el atributo "id" de la etiqueta &lt;form&gt; como <code>$tipoFormulario.$formId</code>.
*/
private $formId;
/**
* @var string Valor del parámetro enctype del formulario.
*/
private $enctype;
/**
* @var string Valor del atributo "class" de la etiqueta &lt;form&gt; asociada al formulario. Si este parámetro incluye la cadena "nocsrf" no se generá el token CSRF para este formulario.
*/
private $classAtt;
/**
* @var string Parámetro de la petición utilizado para comprobar que el usuario ha enviado el formulario..
*/
private $tipoFormulario;
/**
* @var string URL asociada al atributo "action" de la etiqueta &lt;form&gt; del fomrulario y que procesará el
* envío del formulario.
*/
private $action;
private $printed;
/**
* Crea un nuevo formulario.
*
* Posibles opciones:
* <table>
* <thead>
* <tr>
* <th>Opción</th>
* <th>Valor por defecto</th>
* <th>Descripción</th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td>action</td>
* <td><code>$_SERVER['PHP_SELF']</code></td>
* <td>URL asociada al atributo "action" de la etiqueta &lt;form&gt; del fomrulario y que procesará el envío del formulario.</td>
* </tr>
* <tr>
* <td>class</td>
* <td>""</td>
* <td>Valor del atributo "class" de la etiqueta &lt;form&gt; asociada al formulario. Si este parámetro incluye la cadena
* "nocsrf" no se generá el token CSRF para este formulario.</td>
* </tr>
* <tr>
* <td>enctype</td>
* <td>""</td>
* <td>Valor del parámetro enctype del formulario.</td>
* </tr>
* </tbody>
* </table>
* @param string $tipoFormulario Parámetro de la petición utilizado para comprobar que el usuario ha enviado el formulario.
* @param string $formId (opcional) Identificador utilizado para construir el atributo "id" de la etiqueta &lt;form&gt; como <code>$tipoFormulario.$formId</code>.
*
* @param array $opciones (ver más arriba).
*/
public function __construct($tipoFormulario, $opciones = array(), $formId = 1)
{
$this->tipoFormulario = $tipoFormulario;
$this->formId = $tipoFormulario.$formId;
$opcionesPorDefecto = array( 'action' => null, 'class' => null, 'enctype' => null );
$opciones = array_merge($opcionesPorDefecto, $opciones);
$this->action = $opciones['action'];
$this->classAtt = $opciones['class'];
$this->enctype = $opciones['enctype'];
if ( !$this->action ) {
$this->action = htmlentities($_SERVER['PHP_SELF']);
}
}
/**
* Se encarga de orquestar todo el proceso de gestión de un formulario.
*
* El proceso es el siguiente:
* <ul>
* <li>O bien se quiere mostrar el formulario (petición GET)</li>
* <li>O bien hay que procesar el formulario (petición POST) y hay dos situaciones:
* <ul>
* <li>El formulario se ha procesado correctamente y se devuelve un <code>string</code> en {@see Form::procesaFormulario()}
* que será la URL a la que se rederigirá al usuario. Se redirige al usuario y se termina la ejecución del script.</li>
* <li>El formulario NO se ha procesado correctamente (errores en los datos, datos incorrectos, etc.) y se devuelve
* un <code>array</code> con entradas (campo, mensaje) con errores específicos para un campo o (entero, mensaje) si el mensaje
* es un mensaje que afecta globalmente al formulario. Se vuelve a generar el formulario pasándole el array de errores.</li>
* </ul>
* </li>
* </ul>
*/
public function gestiona()
{
if ( ! $this->formularioEnviado($_POST) ) {
return $this->generaFormulario();
} else {
// Valida el token CSRF si es necesario (hay un token en la sesión asociada al formulario)
$tokenRecibido = $_POST['CSRFToken'] ?? FALSE;
$errores = $this->csrfguard_ValidateToken($this->tipoFormulario, $tokenRecibido);
// limpia los tokens CSRF que no han sido utilizados en esta petición
self::limpiaCsrfTokens();
$result = $this->procesaFormulario($_POST);
if ( is_array($result) ) {
return $this->generaFormulario($_POST, $result);
} else {
header('Location: '.$result);
exit();
}
}
}
/**
* Genera el HTML necesario para presentar los campos del formulario.
*
* Si el formulario ya ha sido enviado y hay errores en {@see Form::procesaFormulario()} se llama a este método
* nuevamente con los datos que ha introducido el usuario en <code>$datosIniciales</code> y los errores al procesar
* el formulario en <code>$errores</code>
*
* @param string[] $datosIniciales Datos iniciales para los campos del formulario (normalmente <code>$_POST</code>).
*
* @param string[] $errores (opcional)Lista / Tabla asociativa de errores asociados al formulario.
*
* @return string HTML asociado a los campos del formulario.
*/
protected function generaCamposFormulario($datosIniciales, $errores = array())
{
return '';
}
/**
* Procesa los datos del formulario.
*
* @param string[] $datos Datos enviado por el usuario (normalmente <code>$_POST</code>).
*
* @return string|string[] Devuelve el resultado del procesamiento del formulario, normalmente una URL a la que
* se desea que se redirija al usuario, o un array con los errores que ha habido durante el procesamiento del formulario.
*/
protected function procesaFormulario($datos)
{
return array();
}
/**
* Función que verifica si el usuario ha enviado el formulario.
*
* Comprueba si existe el parámetro <code>$formId</code> en <code>$params</code>.
*
* @param string[] $params Array que contiene los datos recibidos en el envío formulario.
*
* @return boolean Devuelve <code>true</code> si <code>$formId</code> existe como clave en <code>$params</code>
*/
private function formularioEnviado(&$params)
{
return isset($params['action']) && $params['action'] == $this->tipoFormulario;
}
/**
* Función que genera el HTML necesario para el formulario.
*
* @param string[] $datos (opcional) Array con los valores por defecto de los campos del formulario.
*
* @param string[] $errores (opcional) Array con los mensajes de error de validación y/o procesamiento del formulario.
*
* @return string HTML asociado al formulario.
*/
private function generaFormulario(&$datos = array(), &$errores = array())
{
$htmlCamposFormularios = $this->generaCamposFormulario($datos, $errores);
$classAtt='';
if ( $this->classAtt ) {
$classAtt = " class=\"{$this->classAtt}\"";
}
$enctypeAtt='';
if ( $this->enctype ) {
$enctypeAtt = " enctype=\"{$this->enctype}\"";
}
// Se genera el token CSRF si el usuario no solicita explícitamente lo contrario.
$tokenCSRF = '';
if ( ! $this->classAtt || strpos($this->classAtt, 'nocsrf') === false ) {
$tokenValue = $this->csrfguard_GenerateToken($this->tipoFormulario);
$tokenCSRF = "<input type='hidden' name='CSRFToken' value='$tokenValue' />";
}
/* <<< Permite definir cadena en múltiples líneas.
* Revisa https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
*/
$htmlForm = "<form method='POST' action='{$this->action}' id='{$this->formId}{$classAtt}{$enctypeAtt}' >
<input type='hidden' name='action' value='{$this->tipoFormulario}' />
".$tokenCSRF.$htmlCamposFormularios."
</form>";
return $htmlForm;
}
/**
* Genera la lista de mensajes de errores globales (no asociada a un campo) a incluir en el formulario.
*
* @param string[] $errores (opcional) Array con los mensajes de error de validación y/o procesamiento del formulario.
*
* @param string $classAtt (opcional) Valor del atributo class de la lista de errores.
*
* @return string El HTML asociado a los mensajes de error.
*/
protected static function generaListaErroresGlobales($errores = array(), $classAtt='')
{
$html='';
$clavesErroresGenerales = array_filter(array_keys($errores), function ($elem) {
return is_numeric($elem);
});
$numErrores = count($clavesErroresGenerales);
if ($numErrores > 0) {
$html = "<ul class=\"$classAtt\">";
if ( $numErrores == 1 ) {
$html .= "<li>$errores[0]</li>";
} else {
foreach($clavesErroresGenerales as $clave) {
$html .= "<li>$errores[$clave]</li>";
}
$html .= "</li>";
}
$html .= '</ul>';
}
return $html;
}
/**
* Crea una etiqueta para mostrar un mensaje de error. Sólo creará el mensaje de error
* si existe una clave <code>$idError</code> dentro del array <code>$errores</code>.
*
* @param string[] $errores (opcional) Array con los mensajes de error de validación y/o procesamiento del formulario.
* @param string $idError (opcional) Clave dentro de <code>$errores</code> del error a mostrar.
* @param string $htmlElement (opcional) Etiqueta HTML a crear para mostrar el error.
* @param array $atts (opcional) Tabla asociativa con los atributos a añadir a la etiqueta que mostrará el error.
*/
protected static function createMensajeError($errores=array(), $idError='', $htmlElement='span', $atts = array())
{
$html = '';
if (isset($errores[$idError])) {
$att = '';
foreach($atts as $key => $value) {
$att .= "$key=$value";
}
$html = " <$htmlElement $att>{$errores[$idError]}</$htmlElement>";
}
return $html;
}
/**
* Método para eliminar los tokens CSRF almecenados en la petición anterior que no hayan sido utilizados en la actual.
*/
public static function limpiaCsrfTokens()
{
foreach(array_keys($_SESSION) as $key) {
if (strpos($key, self::CSRF_PARAM) === 0) {
unset($_SESSION[$key]);
}
}
}
private function csrfguard_GenerateToken($formParameter)
{
if ( ! session_id() ) {
throw new \Exception('La sesión del usuario no está definida.');
}
$paramSession = self::CSRF_PARAM.'_'.$formParameter;
if (isset($_SESSION[$paramSession])) {
$token = $_SESSION[$paramSession];
} else {
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[$paramSession]=$token;
}
return $token;
}
private function csrfguard_ValidateToken($formParameter, $tokenRecibido)
{
if ( ! session_id() ) {
throw new \Exception('La sesión del usuario no está definida.');
}
$result = TRUE;
$paramSession = self::CSRF_PARAM.'_'.$formParameter;
if ( isset($_SESSION[$paramSession]) ) {
if ( $_SESSION[$paramSession] !== $tokenRecibido ) {
$result = array();
$result[] = 'Has enviado el formulario dos veces';
}
$_SESSION[$paramSession] = ' ';
unset($_SESSION[$paramSession]);
} else {
$result = array();
$result[] = 'Formulario no válido';
}
return $result;
}
//Test some form input.
protected function test_input($input){
return htmlspecialchars(trim(strip_tags($input)));
}
}

516
assets/php/template.php Normal file
View File

@ -0,0 +1,516 @@
<?php
class Template {
//Constants:
//private const _NUMPAGES = 10; //Constant to page results.
//Attributes:
private $page; //Page Name.
private $prefix; //Page prefix.
private $session; //"Iniciar Sesión" (if user isn´t logged in), "Cerrar Sesión" (otherwise).
private $session_route; //"login/" (if user isn´t logged in), "logout/" (otherwise).
private $panel; //Button to access the user's dashboard (only displayed if logged in).
private $user_route; //Route of the panel (depends on the type of user).
//Constructor:
function __construct(){
$this->page = $_SERVER['PHP_SELF']; //Page that instantiates the template.
$this->prefix = '../'; //Default prefix.
$this->set_page_prefix(); //Assigns the name and prefix of the page.
$this->session = 'Iniciar Sesión'; //Default, the session has not started.
$this->session_route = 'login/'; //Default, the session has not started.
$this->panel = ''; //Default, the session has not started.
$this->user_route = 'panel_user/'; //Default, the type of client is user.
}
//Methods:
//Assigns the name and prefix of the page:
private function set_page_prefix() {
switch(true){
case strpos($this->page, 'panel_user'): $this->page = 'Panel de Usuario'; break;
case strpos($this->page, 'panel_manager'): $this->page = 'Panel de Gerente'; break;
case strpos($this->page, 'panel_admin'): $this->page = 'Panel de Administrador'; break;
case strpos($this->page, 'login'): $this->page = 'Acceso'; break;
case strpos($this->page, 'logout'): $this->page = 'Cerrar Sesión'; break;
case strpos($this->page, 'register'): $this->page = 'Registro de Usuario'; break;
case strpos($this->page, 'showtimes'): $this->page = 'Cartelera'; break;
case strpos($this->page, 'cinemas'): $this->page = 'Nuestros Cines'; break;
case strpos($this->page, 'about_us'): $this->page = 'Sobre FDI-Cines'; $this->prefix = '../../'; break;
case strpos($this->page, 'terms'): $this->page = 'Términos y Condiciones'; $this->prefix = '../../'; break;
case strpos($this->page, 'detalles'): $this->page = 'Detalles'; $this->prefix = '../../'; break;
case strpos($this->page, 'bocetos'): $this->page = 'Bocetos'; $this->prefix = '../../'; break;
case strpos($this->page, 'miembros'): $this->page = 'Miembros'; $this->prefix = '../../'; break;
case strpos($this->page, 'planificacion'): $this->page = 'Planificación'; $this->prefix = '../../'; break;
case strpos($this->page, 'contacto'): $this->page = 'Contacto'; break;
default: $this->page = 'FDI-Cines'; $this->prefix = './'; break;
}
}
//Returns page name:
function get_page(){
return $this->page;
}
//Returns page prefix:
function get_prefix(){
return $this->prefix;
}
//Print generic Head:
function print_head(){
$page = $this->page;
$prefix = $this->prefix;
echo"<head>
<title>CompluCine | {$page}</title>
<meta charset='utf-8' />
<link id='estilo' rel='stylesheet' type='text/css' href='{$prefix}assets/css/main.css'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<link rel='icon' href='{$prefix}img/favicon.png' />
</head>\n";
}
//Print generic Header:
function print_header(){
$page = $this->page;
$prefix = $this->prefix;
$session = $this->session;
$session_route =$this->session_route;
$user_route = $this->user_route;
$panel =$this->panel;
if(isset($_SESSION["nombre"])){
if($_SESSION["rol"] == "admin") $user_route = 'panel_admin/';
else if($_SESSION["rol"] == "manager") $user_route = 'panel_manager/';
$panel = "<a href='{$prefix}{$user_route}'><li>Mi Panel</li></a>";
$session = 'Cerrar Sesión';
$session_route = 'logout/';
}
echo"<div class='header'>
<a href='{$prefix}'><img src='{$prefix}img/favicon2.png' alt='favicon' /> CompluCine</a> | {$page}
<div class='menu'>
<nav>
<a href='{$prefix}{$session_route}'><li>{$session}</li></a>
{$panel}
<li>Menú
<ul>
<a href='{$prefix}'><li>Inicio</li></a>
<a href='{$prefix}showtimes/'><li>Cartelera</li></a>
<a href='{$prefix}cinemas/'><li>Nuestros Cines</li></a>
<a href='{$prefix}fdicines/miembros/'><li>Quiénes somos</li></a>
<a href='{$prefix}contacto/'><li>Contacto</li></a>
</ul>
</li>
</nav>
</div>
</div>\n";
}
//Print generic subHeader:
function print_subheader(){
//$page = $this->page;
$prefix = $this->prefix;
echo"<div class='header sub'>
<div class='menu'>
<nav>
<a href='{$prefix}fdicines/about_us/'><li>Sobre FDI-Cines</li></a>
<a href='{$prefix}fdicines/detalles/'><li>Detalles</li></a>
<a href='{$prefix}fdicines/bocetos/'><li>Bocetos</li></a>
<a href='{$prefix}fdicines/miembros/'><li>Miembros</li></a>
<a href='{$prefix}fdicines/planificacion/'><li>Planificación</li></a>
</nav>
</div>
</div>\n";
}
//Print generic Main:
function print_main($content = ""){
$page = $this->page;
$prefix = $this->prefix;
/* SubHeader on Main */
$sub_header = '';
if(strpos($_SERVER['PHP_SELF'], 'fdicines')){
$sub_header = "<!-- Sub Header -->
<div class='header sub'>
<div class='menu'>
<nav>
<a href='{$prefix}fdicines/about_us/'><li>Sobre FDI-Cines</li></a>
<a href='{$prefix}fdicines/detalles/'><li>Detalles</li></a>
<a href='{$prefix}fdicines/bocetos/'><li>Bocetos</li></a>
<a href='{$prefix}fdicines/miembros/'><li>Miembros</li></a>
<a href='{$prefix}fdicines/planificacion/'><li>Planificación</li></a>
</nav>
</div>
</div>\n";
}
/* MAIN */
if($prefix === "./"){
if(isset($_SESSION["nombre"])){
$tittle = "<h1>Bienvenido {$_SESSION["nombre"]}</h1>\n";
} else {
$tittle = "<h1>Bienvenido a CompluCine</h1>\n";
}
} else {
$tittle = "<h1>{$page}</h1>\n";
}
echo"<main>
<div class='image'><a href='{$prefix}'><img src='{$prefix}img/logo_trasparente.png' alt='logo_FDI-Cines' /></a></div>
{$sub_header}
{$tittle}{$content}
<hr />
</main>\n";
}
//Print panel menu:
function print_panelMenu($panel){
if($_SESSION["login"]){
$prefix = $this->prefix;
$menus = array("<a href='./'><li>Panel Principal</li></a>");
switch($panel){
case "admin": array_push($menus, "<li>Ver como...
<ul>
<a href='./?state=un'><li>Usuario</li></a>
<a href='./?state=ur'><li>Usuario registrado</li></a>
<a href='./?state=ag'><li>Gerente</li></a>
</ul>
</li>");
array_push($menus, "<li>Modificar
<ul>
<a href='./?state=mc'><li>Cines</li></a>
<a href='./?state=mf'><li>Películas</li></a>
<a href='./?state=mp'><li>Promociones</li></a>
<a href='./?state=mg'><li>Gerentes</li></a>
</ul>
</li>");
break;
case "manager": array_push($menus, "<li>Ver como...
<ul>
<a href='./?state=view_user'><li>Usuario</li></a>
<a href='./?state=view_ruser'><li>Usuario registrado</li></a>
</ul>
</li>");
array_push($menus, "<li>Modificar
<ul>
<a href='./?state=manage_halls'><li>Salas</li></a>
<a href='./?state=manage_sessions'><li>Sesiones</li></a>
</ul>
</li>");
break;
case "user": array_push($menus, "<a href='./?option=manage_profile'><li>Cuenta de usuario</li></a>");
array_push($menus, "<a href='./?option=purchases'><li>Historial Compras</li></a>");
array_push($menus, "<a href='./?option=payment'><li>Datos Pago</li></a>");
array_push($menus, "<a href='./?option=delete_user'><li>Eliminar Usuario</li></a>");
break;
default: $menus = array(); break;
}
if($_SESSION["rol"] === $panel){
echo"<div class='header sub'>
<div class='menu'>
<nav>";
foreach($menus as $value){
echo $value;
}
echo"</nav>
</div>
</div>
";
}
}
}
//Print specific page content:
function print_section($section){
/* Panel menu */
$sub_header = '';
if(strpos($_SERVER['PHP_SELF'], 'panel')){
echo "<!-- Panel Menu -->
";
$this->print_panelMenu($_SESSION["rol"]);
$this->print_msg();
}
echo $section;
}
//Print Films Cards:
function print_fimls(){
$reply = "";
//List of the movies:
require_once(__DIR__.'/common/film_dao.php');
$prefix= $this->get_prefix();
$films = new Film_DAO("complucine");
$films_array = $films->allFilmData();
$ids = array();
$tittles = array();
$descriptions = array();
$times = array();
$languages = array();
foreach($films_array as $key => $value){
$ids[$key] = $value->getId();
$tittles[$key] = $value->getTittle();
$descriptions[$key] = $value->getDescription();
$times[$key] = $value->getDuration();
$languages[$key] = $value->getLanguage();
}
switch($this->page){
case "Cartelera":
for($i = 0; $i < count($films_array); $i++){
$tittle = str_replace('_', ' ', $tittles[$i]);
if($i%2 === 0){
if($i != 0) $reply .= "</div>
";
$reply .= "<div class='column side'>
";
}
else{
if($i != 0) $reply .= "</div>
";
$reply .= "<div class='column middle'>
";
}
$reply .= "<section id='".$tittles[$i]."'>
<div class='zoom'>
<div class='code showtimes'>
<div class='image'><img src='".$prefix."img/films/".$tittles[$i].".jpg' alt='".$tittles[$i]."' /></div>
<h2>".$tittle."</h2>
<hr />
<div class='blockquote'>
<p>".$descriptions[$i]."</p>
</div>
<li>Duración: ".$times[$i]." minutos</li>
<li>Lenguaje: ".$languages[$i]."</li>
</div>
</div>
</section>
";
}
$reply .= "</div>\n";
break;
case "Panel de Administrador":
$reply .= "<div class='column'>";
for($i = 0; $i < count($films_array); $i++){
$tittle = str_replace('_', ' ', $tittles[$i]);
if($i%2 === 0){
if($i != 0) $reply .= "</div>
";
$reply .= "<div class='column side'>
";
}
else{
if($i != 0) $reply .= "</div>
";
$reply .= "<div class='column middle'>
";
}
$reply .= "<section id='".$tittles[$i]."'>
<div class='zoom'>
<div class='code showtimes'>
<div class='image'><img src='".$prefix."img/films/".$tittles[$i].".jpg' alt='".$tittles[$i]."' /></div>
<h2>".$tittle."</h2>
<hr />
<form method='post' action='./index.php?state=mf'>
<input name='id' type='hidden' value='".$ids[$i]."'>
<input name='tittle' type='hidden' value='".$tittles[$i]."'>
<input name='duration' type='hidden' value='".$times[$i]."'>
<input name='language' type='hidden' value='".$languages[$i]."'>
<input name='description' type='hidden' value='".$descriptions[$i]."'>
<input type='submit' id='submit' value='Editar' name='edit_film' class='primary' />
</form>
<form method='post' action='./index.php?state=mf'>
<input name='id' type='hidden' value='".$ids[$i]."'>
<input name='tittle' type='hidden' value='".$tittles[$i]."'>
<input name='duration' type='hidden' value='".$times[$i]."'>
<input name='language' type='hidden' value='".$languages[$i]."'>
<input name='description' type='hidden' value='".$descriptions[$i]."'>
<input type='submit' id='submit' value='Eliminar' name='delete_film' class='primary' />
</form>
</div>
</div>
</section>
";
}
$reply .= "</div>\n";
break;
case "Panel de Gerente":
break;
default:
$reply .='<div class="column left">
<div class="galery">
<h1>Últimos Estrenos</h1><hr />';
$count = 0;
for($i = count($tittles)-4; $i < count($tittles); $i++){
if($count%2===0){
if($count != 0) $reply .= "
</div>";
$reply .= "
<div class='fila'>";
}
$reply .= "
<div class='zoom'>
<div class='columna'>
<a href='".$prefix."showtimes/#".$tittles[$i]."'><div class='image'><img src='img/films/".$tittles[$i].".jpg' alt='".$tittles[$i]."' /></div></a>
</div>
</div>";
$count++;
}
$reply .= "
</div>
</div>
</div>
<div class='column right'>
<div class='galery'>";
$count = rand(0, count($tittles)-1);
$title = str_replace('_', ' ', $tittles[$count]);
$reply .= "
<h1>{$title}</h1><hr />
<div class='zoom'>
<a href='".$prefix."showtimes/#".$tittles[$count]."'><div class='image main'><img src='img/films/".$tittles[$count].".jpg' alt='".$tittles[$count]."' /></div></a>
</div>
</div>
</div>\n";
break;
}
return $reply;
}
//Print Cinemas info:
function print_cinemas(){
$reply = "";
//List of the cinemas:
require_once(__DIR__.'/common/cinema_dao.php');
$cine = new Cinema_DAO("complucine");
$cinemas = $cine->allCinemaData();
$ids = array();
$names = array();
$directions = array();
$phones = array();
if(is_array($cinemas)){
foreach($cinemas as $key => $value){
$ids[$key] = $value->getId();
$names[$key] = $value->getName();
$directions[$key] = $value->getDirection();
$phones[$key] = $value->getPhone();
}
}
switch($this->page){
case "Panel de Administrador":
$reply .= "<div class='row'>
<div class='column side'></div>
<div class='column middle'>
<table class='alt'>
<thead>
<tr>
<th>Id</th>
<th>Nombre</th>
<th>Direccion</th>
<th>Telefono</th>
</tr>
</thead>
<tbody>
";
if(is_array($cinemas)){
for($i = 0; $i < count($cinemas); $i++){
$reply .= '<tr>
<td>'. $ids[$i] .'</td>
<td>'. $names[$i] .'</td>
<td>'. $directions[$i] .'</td>
<td>'. $phones[$i] .'</td>
<td>
<form method="post" action="index.php?state=mc">
<input name="id" type="hidden" value="'.$ids[$i].'">
<input name="name" type="hidden" value="'.$names[$i].'">
<input name="direction" type="hidden" value="'.$directions[$i].'">
<input name="phone" type="hidden" value="'.$phones[$i].'">
<input type="submit" id="submit" value="Editar" name="edit_cinema" class="primary" />
</form>
</td>
<td>
<form method="post" action="index.php?state=mc">
<input name="id" type="hidden" value="'.$ids[$i].'">
<input name="name" type="hidden" value="'.$names[$i].'">
<input name="direction" type="hidden" value="'.$directions[$i].'">
<input name="phone" type="hidden" value="'.$phones[$i].'">
<input type="submit" id="submit" value="Eliminar" name="delete_cinema" class="primary" />
</form>
</td>
</tr>
';
}
}
$reply .='</tbody>
</table>
</div>
<div class="column side"></div>
';
break;
default:
break;
}
return $reply;
}
//Print session MSG:
function print_msg() {
if(isset($_SESSION['message'])){
echo "<div>".$_SESSION['message']."</div>";
unset($_SESSION['message']);
}
}
//Print generic Footer:
function print_footer(){
$prefix = $this->prefix;
/* TODO */
$css = "{$prefix}assets/css/highContrast.css";
$nameCSS = "Alto Contraste";
//$css = "{$prefix}assets/css/main.css";
//$nameCSS = "Contraste Normal";
echo"<footer>
<div class='footer'>
<p>© Práctica 3 | Sistemas Web 2021 </p>
</div>
<a href='{$prefix}fdicines/about_us/'>Sobre FDI-Cines</a> |
<a href='{$prefix}fdicines/terms_conditions/'>Términos de uso</a> |
<a href='{$prefix}cinemas/'>Nuestros cines</a> |
<a href='{$prefix}contacto/'>Contacto</a> |
<button onclick=\"cambiarCSS('$css');\">$nameCSS</button>
</footer>\n";
echo"
<!-- Scripts -->
<script src='{$prefix}assets/js/cambiarCSS.js'></script>\n";
}
}
?>

10
cinemas/index.php Normal file
View File

@ -0,0 +1,10 @@
<?php
//General Config File:
require_once('../assets/php/config.php');
//Specific page content:
$section = '';
//General page content:
require RAIZ_APP.'/HTMLtemplate.php';
?>

View File

@ -0,0 +1,88 @@
<?php
require_once($prefix.'assets/php/form.php');
class FormContact extends Form {
//Constants:
const HTML5_EMAIL_REGEXP = '^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$';
public function __construct() {
$options = array("action" => "");
parent::__construct('formContact', $options);
}
protected function generaCamposFormulario($datos, $errores = array()) {
// Se generan los mensajes de error si existen.
$htmlErroresGlobales = self::generaListaErroresGlobales($errores);
$errorNombre = self::createMensajeError($errores, 'name', 'span', array('class' => 'error'));
$errorEmail = self::createMensajeError($errores, 'email', 'span', array('class' => 'error'));
$errorMessage = self::createMensajeError($errores, 'message', 'span', array('class' => 'error'));
// Se genera el HTML asociado a los campos del formulario y los mensajes de error.
$html = "<div class='row'>
<fieldset id='datos_personales'>
<legend>Datos personales</legend><pre>".$htmlErroresGlobales."</pre>
<div class='_name'>
<input type='text' name='name' id='name' value='' placeholder='Nombre' required/><pre>".$errorNombre."</pre>
</div>
<div class='_email'>
<input type='email' name='email' id='email' value='' placeholder='Email' required/><pre>".$errorEmail."</pre>
</div>
</fieldset>
<fieldset id='motivo'>
<legend>Motivo de la consulta</legend>
<div class='reason'>
<input type='radio' id='radio' name='reason' value='evaluation' checked>
<label for='evaluation'>Evaluación</label>
</div>
<div class='reason'>
<input type='radio' id='radio' name='reason' value='sugestions'>
<label for='sugestions'>Sugerencias</label>
</div>
<div class='reason'>
<input type='radio' id='radio' name='reason' value='critics'>
<label for='critics'>Críticas</label>
</div>
</fieldset>
<div class='message'><pre>".$errorMessage."</pre>
<textarea name='message' id='message' placeholder='Escribe aquí tu mensaje...'></textarea>
</div>
<div class='verify'>
<input type='checkbox' id='checkbox' name='terms' required>
<label for='terms'>Marque esta casilla para verificar que ha leído nuestros términos y condiciones del servicio.</label>
</div>
<div class='actions'>
<input type='submit' id='submit' value='Enviar mensaje' class='primary' />
<input type='reset' id='reset' value='Borrar' />
</div>
</div>";
return $html;
}
protected function procesaFormulario($datos) {
$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.";
}
$email = $this->test_input($datos['email']) ?? null;
if ( empty($email) || !mb_ereg_match(self::HTML5_EMAIL_REGEXP, $email) ) {
$result['email'] = "El email no es válido.";
}
$message = $this->test_input($datos['message']) ?? null;
if ( empty($message) || mb_strlen($message) < 1 || mb_strlen($message) > 250 ) {
$result['message'] = "El mensaje no puede estar vacío\ny no puede contener más de\n250 caracteres.";
}
if (count($result) === 0) {
$result = ROUTE_APP;
}
return $result;
}
}

View File

@ -1,88 +0,0 @@
<!DOCTYPE HTML>
<!--
Práctica 1 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<head>
<title>CompluCine | Contacto</title>
<meta charset="utf-8" />
<link id="estilo" rel="stylesheet" type="text/css" href="../assets/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="../img/favicon.png" />
</head>
<body>
<!-- Header -->
<div class="header">
<a href="/"><img src="../img/favicon2.png" /> CompluCine</a> | Contacto
<div class="menu">
<a href="/">Inicio |</a>
<a href="../detalles/">Detalles |</a>
<a href="../bocetos/">Bocetos |</a>
<a href="../miembros/">Miembros |</a>
<a href="../planificacion/">Planificación |</a>
<a href="#">Contacto</a>
</div>
</div>
<!-- Main -->
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
<h1>Contacto</h1>
<hr />
</div>
<!-- Form -->
<section id="formulario">
<h4>Formulario</h4>
<form method="post" action="mailto:fernmend@ucm.es">
<div class="row">
<fieldset id="datos_personales">
<legend>Datos personales</legend>
<div class="_name">
<input type="text" name="name" id="name" value="" placeholder="Nombre" />
</div>
<div class="_email">
<input type="email" name="email" id="email" value="" placeholder="Email" />
</div>
</fieldset>
<fieldset id="motivo">
<legend>Motivo de la consulta</legend>
<div class="reason">
<input type="radio" id="radio" name="reason" value="evaluation" checked>
<label for="evaluation">Evaluación</label>
</div>
<div class="reason">
<input type="radio" id="radio" name="reason" value="sugestions">
<label for="sugestions">Sugerencias</label>
</div>
<div class="reason">
<input type="radio" id="radio" name="reason" value="critics">
<label for="critics">Críticas</label>
</div>
</fieldset>
<div class="message">
<textarea name="message" id="message" placeholder="Escribe aquí tu mensaje..."></textarea> <!-- rows="5" -->
</div>
<div class="verify">
<input type="checkbox" id="checkbox" name="terms">
<label for="terms">Marque esta casilla para verificar que ha leído nuestros términos y condiciones del servicio.</label>
</div>
<div class="actions">
<input type="submit" id="submit" value="Enviar mensaje" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
</form>
</section>
<!-- Footer -->
<footer>
<div class="footer">
<p>© Práctica 1 | Sistemas Web 2021 </p>
</div>
</footer>
</body>
</html>

20
contacto/index.php Normal file
View File

@ -0,0 +1,20 @@
<?php
//General Config File:
require_once('../assets/php/config.php');
//Contact form:
require_once('includes/formContact.php');
$form = new FormContact();
$htmlForm = $form->gestiona();
//Specific page content:
$section = '<!-- Contact Form -->
<section id="formulario">
<h4>Formulario (EN DESARROLLO)</h4>
'.$htmlForm.'
</section>
';
//General page content:
require RAIZ_APP.'/HTMLtemplate.php';
?>

View File

@ -1,35 +1,9 @@
<!DOCTYPE HTML>
<!--
Práctica 1 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<head>
<title>CompluCine | FDI-Cines</title>
<meta charset="utf-8" />
<link id="estilo" rel="stylesheet" type="text/css" href="assets/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="img/favicon.png" />
</head>
<body>
<!-- Header -->
<div class="header">
<a href="#"><img src="img/favicon2.png" /> CompluCine</a> | FDI-Cines
<div class="menu">
<a href="./detalles/">Detalles |</a>
<a href="./bocetos/">Bocetos |</a>
<a href="./miembros/">Miembros |</a>
<a href="./planificacion/">Planificación |</a>
<a href="./contacto/">Contacto</a>
</div>
</div>
<?php
//General Config File:
require_once('../../assets/php/config.php');
<!-- Main -->
<div class="main">
<div class="image"><img src="img/logo_trasparente.png" /></div>
</div>
<!-- Description -->
//Specific page content:
$section = '<!-- Description -->
<section id="description">
<div class="code" id="resume">
<h1>Descripción</h1>
@ -56,24 +30,18 @@
<hr />
<div class="blockquote">
<p>
Somos un <a href="./miembros/">grupo de estudiantes</a> de la asignatura de Sistemas Web
Somos un <a href="../miembros/">grupo de estudiantes</a> de la asignatura de Sistemas Web
de la Facultad de Informática de la Universidad Complutense de Madrid.
</p>
<p>
CompluCine es un proyecto web universitario y en ningún momento pretende ofrecer una funcionalidad real.
Para más información acerca del proyecto, haz click <a href="./detalles/">aquí</a>.
Para más información acerca del proyecto, haz click <a href="../detalles/">aquí</a>.
</p>
</div>
</div>
</section>
';
<!-- Footer -->
<footer>
<div class="footer">
<p>© Práctica 1 | Sistemas Web 2021 </p>
</div>
</footer>
</body>
</html>
//General page content:
require RAIZ_APP.'/HTMLtemplate.php';
?>

View File

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

View File

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

3
fdicines/index.php Normal file
View File

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

145
fdicines/miembros/index.php Normal file
View File

@ -0,0 +1,145 @@
<?php
//General Config File:
require_once('../../assets/php/config.php');
$content = '<hr />
<section id="members_table">
<table>
<thead>
<tr>
<th>Nombre</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="#MEP">Marco Expósito Pérez</a></td>
<td><a href="mailto:marcoexp@ucm.es">marcoexp@ucm.es</a></td>
</tr>
<tr>
<td><a href="#FMT">Fernando Méndez Torrubiano</a></td>
<td><a href="mailto:fernmend@ucm.es">fernmend@ucm.es</a></td>
</tr>
<tr>
<td><a href="#DMG">Daniel Muñoz García</a></td>
<td><a href="mailto:danimu03@ucm.es">danimu03@ucm.es</a></td>
</tr>
<tr>
<td><a href="#IMT">Ioan Marian Tulai</a></td>
<td><a href="mailto:ioantula@ucm.es">ioantula@ucm.es</a></td>
</tr>
<tr>
<td><a href="#ORP">Óscar Ruiz de Pedro</a></td>
<td><a href="mailto:oscarrui@ucm.es">oscarrui@ucm.es</a></td>
</tr>
<tr>
<td><a href="#ARN">Adrian Real del Noval</a></td>
<td><a href="mailto:adrireal@ucm.es">adrireal@ucm.es</td>
</tr>
</tbody>
</table>
</section>';
//Specific page content:
$section = '<!-- Members -->
<section id="members">
<div class="row">
<div class="column side">
<!-- Marco Esposito -->
<section id="MEP">
<div class="zoom">
<div class="code">
<img src="../../img/us/mep.jpg" />
<p>~ Marco Expósito Pérez (marcoexp@ucm.es)</p>
<div class="blockquote bio">
<p>Aficionado a todo tipo de videojuegos, principalmente la saga Zelda. Tambien me gusta leer tanto literatura fantastica como mangas y veo anime asiduamente.</p>
<p>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.</p>
</div>
</div>
</div>
</section>
</div>
<div class="column middle">
<!-- Fernando Méndez -->
<section id="FMT">
<div class="zoom">
<div class="code">
<img src="../../img/us/fmt.jpg" />
<p>~ Fernando Méndez (fernmend@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante de Ingeniería de Computadores en la Universidad Complutense de Madrid.</p>
<p>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.</p>
</div>
</div>
</div>
</section>
</div>
<div class="column side">
<!-- Daniel Muñoz -->
<section id="DMG">
<div class="zoom">
<div class="code">
<img src="../../img/us/dmg.jpg" />
<p>~ Daniel Muñoz García (danimu03@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante del grado en ingeniería informática en la Universidad Complutense de Madrid. Aficionado a la ciberseguridad y las nuevas tecnologías.</p>
<p>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.</p>
</div>
</div>
</div>
</section>
</div>
</div>
<div class="row">
<div class="column side">
<!-- Ioan Marian -->
<section id="IMT">
<div class="zoom">
<div class="code">
<img src="../../img/us/imt.jpg" />
<p>~ Ioan Marian Tulai (ioantula@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante con mucha ilusion y ganas de trabajar especialista en hardware.</p>
<p>Alta experiencia programando en C, gran interés en aprender nuevos lenguajes de programación y aficionado a dibujar.</p>
</div>
</div>
</div>
</section>
</div>
<div class="column middle">
<!-- Óscar Ruiz -->
<section id="ORP">
<div class="zoom">
<div class="code">
<img src="../../img/us/orp.jpg" />
<p>~ Óscar Ruiz de Pedro (oscarrui@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante de ingeniería de computadores en la Universidad Complutense de Madrid.</p>
<p>Altas capacidades de programación en bajo nivel, me gustaría aprender más sobre el ámbito de la robótica.</p>
<p>Aficionado a todo tipo de videojuegos, impresión 3D, teatro y airsoft.</p>
</div>
</div>
</div>
</section>
</div>
<div class="column side">
<!-- Adrian Real -->
<section id="ARN">
<div class="zoom">
<div class="code">
<img src="../../img/us/arn.jpg" />
<p>~ Adrian Real del Noval (adrireal@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante de 3er año de Ingeniería de Computadores en la Universidad Complutense de Madrid.</p>
<p>Las áreas en las que tiene mayor interés son la electrónica, las GPUs, y los sistemas empotrados.</p>
</div>
</div>
</div>
</section>
</div>
</div>
</section>';
//General page content:
require RAIZ_APP.'/HTMLtemplate.php';
?>

View File

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

View File

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

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

View File

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

View File

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

View File

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
img/films/iron_man.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
img/films/iron_man_2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
img/films/iron_man_3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

3
img/index.php Normal file
View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

BIN
img/seat_green.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 B

BIN
img/seat_grey.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

BIN
img/seat_red.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 B

BIN
img/tmp/cm.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 79 KiB

View File

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

18
index.php Normal file
View File

@ -0,0 +1,18 @@
<?php
//General Config File:
require_once(__DIR__.'/assets/php/config.php');
//Page-specific content:
$section = '<!-- Undercard -->
<section id="cartelera">
<div class="row">
<div class="code">
'.$template->print_fimls().'
</div>
</div>
</section>
';
//General page content:
require RAIZ_APP.'/HTMLtemplate.php';
?>

View File

@ -0,0 +1,100 @@
<?php
include_once($prefix.'assets/php/common/user_dao.php');
include_once($prefix.'assets/php/form.php');
class FormLogin extends Form {
//Constants:
const HTML5_EMAIL_REGEXP = '^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$';
//Atributes:
private $user; // User who is going to log-in.
public function __construct() {
parent::__construct('formLogin');
}
protected function generaCamposFormulario($datos, $errores = array()){
$nombre = $datos['name'] ?? '';
// Se generan los mensajes de error si existen.
$htmlErroresGlobales = self::generaListaErroresGlobales($errores);
$errorNombre = self::createMensajeError($errores, 'name', 'span', array('class' => 'error'));
$errorPassword = self::createMensajeError($errores, 'pass', 'span', array('class' => 'error'));
$html = "<div class='row'>
<fieldset id='nombre_usuario'><pre>".$htmlErroresGlobales."</pre>
<legend>Datos Personales</legend>
<input type='text' name='name' id='name' value='' placeholder='Nombre' required/><pre>".$errorNombre."</pre>
<input type='password' name='pass' id='pass' value='' placeholder='Contraseña' required/><pre>".$errorPassword."</pre>
</fieldset>
<div class='actions'>
<input type='submit' id='submit' value='Iniciar Sesión' class='primary' />
<input type='reset' id='reset' value='Borrar' />
</div>
</div>";
return $html;
}
protected function procesaFormulario($datos){
$result = array();
//$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.";
}
//$password = $this->test_input($datos['pass']) ?? null;
$password = $datos['pass'] ?? null;
if ( empty($password) || mb_strlen($password) < 4 ) {
$result['pass'] = "El password tiene que tener\n una longitud de al menos\n 4 caracteres.";
}
if (count($result) === 0) {
$bd = new UserDAO('complucine');
if($bd){
$this->user = $bd->selectUser($nombre, $password);
if ($this->user) {
$this->user->setPass(null);
$_SESSION["user"] = serialize($this->user);
$_SESSION["nombre"] = $this->user->getName();
$_SESSION["rol"] = $this->user->getRol();
$_SESSION["login"] = true;
$result = 'validate.php';
} else {
$result[] = "El usuario o el password\nno coinciden.";
}
} else {
$result[] = "Error al conectar con la BD.";
}
}
return $result;
}
//Returns validation response:
static public function getReply() {
if(isset($_SESSION["login"])){
$name = strtoupper($_SESSION['nombre']);
$reply = "<h1>Bienvenido {$name}</h1><hr />
<p>{$name}, has iniciado sesión correctamente.</p>
<p>Usa los botones para navegar</p>
<a href='../'><button>Inicio</button></a>
<a href='../panel_{$_SESSION["rol"]}'><button>Mi Panel</button></a>\n";
}
else if(!isset($_SESSION["login"])){
$reply = "<h1>ERROR</h1><hr />".
"<p>El usuario o contraseña no son válidos.</p>
<p>Vuelve a intetarlo o regístrate si no lo habías hecho previamente.</p>
<a href='./'><button>Iniciar Sesión</button></a>
<form method='post' action='./'><button name='register' id='register'>Registro</button></form>\n";
}
return $reply;
}
}
?>

73
login/index.php Normal file
View File

@ -0,0 +1,73 @@
<?php
/**
* USUARIOS DE PRUEBAS:
* user | userpass
* fernando | ferpass
* manager | managerpass
* admin | adminpass
*/
//General Config File:
require_once('../assets/php/config.php');
//Change the view of the "Login page" to "Registration page":
require('login_register_view.php');
$view = new LoginRegisterView();
$isLogin = $view->getIsLogin();
//Forms:
require('includes/formLogin.php');
require($prefix.'register/includes/formRegister.php');
$formLogin = new FormLogin();
$htmlFormLogin = $formLogin->gestiona();
$formRegister = new FormRegister();
$htmlFormRegister = $formRegister->gestiona();
if($isLogin){
$form = "<!-- Login -->
<div class='column left'>
<div class='code info'>
<h2>¿No tienes una cuenta?</h2>
<hr />
<p>Para crear una cuenta de usuario es necesario haber rellenado el formulario de registro previamente</p>
<p>Haz click en el botón para registrate.</p>
<form method='post'>
<button type='submit' name='register' id='_register'>Registrate</button>
</form>
</div>
</div>
<div class='column right'>
<h2>Iniciar Sesión</h2>
".$htmlFormLogin."
</div>"."\n";
} else {
$form = "<!-- Register -->
<div class='column left'>
<h2>Registro</h2>
".$htmlFormRegister."
</div>
<div class='column right'>
<div class='code info'>
<h2>¿Ya estás registrado?</h2>
<hr />
<p>Si dispones de una cuenta de usuario, no es necesario que rellenes este formulario nuevamente</p>
<p>Haz click en el botón para iniciar sesión.</p>
<form method='post'>
<button type='submit' name='login' id='_login'>Inicia Sesión</button>
</form>
</div>
</div>"."\n";
}
//Specific page content:
$section = '<!-- Login / Register -->
<section id="login_register">
<div class ="row">
'.$form.'
</div>
</section>
';
//General page content:
require RAIZ_APP.'/HTMLtemplate.php';
?>

View File

@ -0,0 +1,38 @@
<?php
class LoginRegisterView {
//Atributes:
private $isLogin;
private $login;
private $register;
//Constructor:
public function __construct() {
$this->setIsLogin(true);
if(array_key_exists('register', $_POST)){
$this->setIsLogin(false);
}
else if(array_key_exists('login', $_POST)){
$this->setIsLogin(true);
}
}
//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;
}
}
?>

27
login/validate.php Normal file
View File

@ -0,0 +1,27 @@
<?php
//General Config File:
require_once('../assets/php/config.php');
//Login form validate:
require_once('./includes/formLogin.php');
$reply = FormLogin::getReply();
//Specific page content:
$section = '<!-- Reply -->
<section class="reply">
<div class ="row">
<div class="column side"></div>
<div class="column middle">
<div class="code info">
'.$reply.'
</div>
</div>
<div class="column side"></div>
</div>
</section>
';
//General page content:
require RAIZ_APP.'/HTMLtemplate.php';
?>

40
logout/index.php Normal file
View File

@ -0,0 +1,40 @@
<?php
header("refresh:4;url=../");
//General Config File:
require_once('../assets/php/config.php');
//Session:
//session_start(); /* Inicializada en config.php */
unset($_SESSION);
session_destroy();
if(!isset($_SESSION["nombre"])){
$reply = "<h1>Se ha cerrado la sesión</h1><hr />".
"<p>Serás redirigido al inicio en unos segundos.<br />
Haz clic <a href='{$prefix}'>aquí</a> si tu navegador no te redirige automáticamente.</p>\n";
}
else{
$reply = "<h1>Ha ocurrido un problema y no hemos podido finalizar la sesión</h1>".
"<p>Serás redirigido al inicio en unos segundos.<br />
Haz clic <a href='{$prefix}'>aquí</a> si tu navegador no te redirige automáticamente.</p>\n";
}
//Specific page content:
$section = '<!-- Reply -->
<section id="reply">
<div class ="row">
<div class="column side"></div>
<div class="column middle">
<div class="code info">
'.$reply.'
</div>
</div>
<div class="column side"></div>
</div>
</section>
';
//General page content:
require RAIZ_APP.'/HTMLtemplate.php';
?>

View File

@ -1,182 +0,0 @@
<!DOCTYPE HTML>
<!--
Práctica 1 - Sistemas Web | Grupo D
CompluCine - FDI-cines
-->
<html lang="es">
<head>
<title>CompluCine | Miembros</title>
<meta charset="utf-8" />
<link id="estilo" rel="stylesheet" type="text/css" href="../assets/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="../img/favicon.png" />
</head>
<body>
<!-- Header -->
<div class="header">
<a href="/"><img src="../img/favicon2.png" /> CompluCine</a> | Miembros
<div class="menu">
<a href="/">Inicio |</a>
<a href="../detalles/">Detalles |</a>
<a href="../bocetos/">Bocetos |</a>
<a href="#">Miembros |</a>
<a href="../planificacion/">Planificación |</a>
<a href="../contacto/">Contacto</a>
</div>
</div>
<!-- Main -->
<div class="main">
<div class="image"><img src="../img/logo_trasparente.png" /></div>
<section id="members_table">
<h1>Miembros</h1>
<hr />
<table>
<thead>
<tr>
<th>Nombre</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="#MEP">Marco Expósito Pérez</a></td>
<td><a href="mailto:marcoexp@ucm.es">marcoexp@ucm.es</a></td>
</tr>
<tr>
<td><a href="#FMT">Fernando Méndez Torrubiano</a></td>
<td><a href="mailto:fernmend@ucm.es">fernmend@ucm.es</a></td>
</tr>
<tr>
<td><a href="#DMG">Daniel Muñoz García</a></td>
<td><a href="mailto:danimu03@ucm.es">danimu03@ucm.es</a></td>
</tr>
<tr>
<td><a href="#IMT">Ioan Marian Tulai</a></td>
<td><a href="mailto:ioantula@ucm.es">ioantula@ucm.es</a></td>
</tr>
<tr>
<td><a href="#ORP">Óscar Ruiz de Pedro</a></td>
<td><a href="mailto:oscarrui@ucm.es">oscarrui@ucm.es</a></td>
</tr>
<tr>
<td><a href="#ARN">Adrian Real del Noval</a></td>
<td><a href="mailto:adrireal@ucm.es">adrireal@ucm.es</td>
</tr>
</tbody>
</table>
</section>
</div>
<!-- Members -->
<section id="members">
<div class="row">
<div class="column side">
<!-- Marco Esposito -->
<section id="MEP">
<div class="zoom">
<div class="code">
<img src="../img/mep.jpg" />
<p>~ Marco Expósito Pérez (marcoexp@ucm.es)</p>
<div class="blockquote bio">
<p>Aficionado a todo tipo de videojuegos, principalmente la saga Zelda. Tambien me gusta leer tanto literatura fantastica como mangas y veo anime asiduamente.</p>
<p>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.</p>
</div>
</div>
</div>
</section>
</div>
<div class="column middle">
<!-- Fernando Méndez -->
<section id="FMT">
<div class="zoom">
<div class="code">
<img src="../img/fmt.jpg" />
<p>~ Fernando Méndez (fernmend@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante de Ingeniería de Computadores en la Universidad Complutense de Madrid.</p>
<p>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.</p>
</div>
</div>
</div>
</section>
</div>
<div class="column side">
<!-- Daniel Muñoz -->
<section id="DMG">
<div class="zoom">
<div class="code">
<img src="../img/dmg.jpg" />
<p>~ Daniel Muñoz García (danimu03@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante del grado en ingeniería informática en la Universidad Complutense de Madrid. Aficionado a la ciberseguridad y las nuevas tecnologías.</p>
<p>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.</p>
</div>
</div>
</div>
</section>
</div>
</div>
<div class="row">
<div class="column side">
<!-- Ioan Marian -->
<section id="IMT">
<div class="zoom">
<div class="code">
<img src="../img/imt.jpg" />
<p>~ Ioan Marian Tulai (ioantula@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante con mucha ilusion y ganas de trabajar especialista en hardware.</p>
<p>Alta experiencia programando en C, gran interés en aprender nuevos lenguajes de programación y aficionado a dibujar.</p>
</div>
</div>
</div>
</section>
</div>
<div class="column middle">
<!-- Óscar Ruiz -->
<section id="ORP">
<div class="zoom">
<div class="code">
<img src="../img/orp.jpg" />
<p>~ Óscar Ruiz de Pedro (oscarrui@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante de ingeniería de computadores en la Universidad Complutense de Madrid.</p>
<p>Altas capacidades de programación en bajo nivel, me gustaría aprender más sobre el ámbito de la robótica.</p>
<p>Aficionado a todo tipo de videojuegos, impresión 3D, teatro y airsoft.</p>
</div>
</div>
</div>
</section>
</div>
<div class="column side">
<!-- Adrian Real -->
<section id="ARN">
<div class="zoom">
<div class="code">
<img src="../img/arn.jpg" />
<p>~ Adrian Real del Noval (adrireal@ucm.es)</p>
<div class="blockquote bio">
<p>Estudiante de 3er año de Ingeniería de Computadores en la Universidad Complutense de Madrid.</p>
<p>Las áreas en las que tiene mayor interés son la electrónica, las GPUs, y los sistemas empotrados.</p>
</div>
</div>
</div>
</section>
</div>
</div>
</section>
<!-- Footer -->
<footer>
<div class="footer">
<p>© Práctica 1 | Sistemas Web 2021 </p>
</div>
</footer>
</body>
</html>
</html>

View File

@ -0,0 +1,89 @@
<?php
//General Config File:
include_once('../assets/php/config.php');
include_once('../assets/php/common/cinema_dao.php');
include_once('../assets/php/common/cinema.php');
include_once('../assets/php/form.php');
class formAddCinema extends Form{
public function __construct(){
$op = array("action"=>"./?state=mc");
parent::__construct('formAddCinema',$op);
}
protected function generaCamposFormulario($datos,$errores=array()){
$htmlErroresGlobales = self::generaListaErroresGlobales($errores);
$errorName = self::createMensajeError($errores,'name','span',array('class'=>'error'));
$errorDirection = self::createMensajeError($errores,'direction','span',array('class'=>'error'));
$errrorPhone = self ::createMensajeError($errores,'phone',array('class'=>'error'));
$html = '<div class="row"></div>
<fieldset id = "cinema_form">'.$htmlErroresGlobales.'</pre>
<legend>Añadir cine</legend>
<input type="text" name="name" id="name" placeholder="Nombre" required/><pre>'.$errorName.'</pre>
<input type="text" name="direction" id="direction" placeholder="Direccion" required/><pre>'.$errorDirection.'</pre>
<input type="text" name="phone" id="phone" placeholder="Teléfono" required/><pre>'.$errrorPhone.'</pre>
</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Añadir cine" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div> ';
return $html;
}
//Process form:
public function procesaFormulario($datos) {
$result =array();
$name = $this->test_input($datos['name'])??null;
if(empty($name)){
$result['name']= "El nombre no es válido";
}
$direction = $this -> test_input($datos['direction']) ?? null;
if(empty($direction)){
$result['direction'] = "La dirección no es valida";
}
$phone = $this -> test_input($datos['phone']) ?? null;
if(empty($phone)){
$result['phone'] = "El teléfono no es valido";
}
if(count($result)===0){
$bd = new Cinema_DAO('complucine');
$exist = $bd -> GetCinema($name,$direction);
if(mysqli_num_rows($exist)!=0){
$result[] = "Ya existe un cine con ese nombre o dirección";
}
else{
$bd->createCinema(null,$name,$direction,$phone);
$_SESSION['message'] = "<div class='row'>
<div class='column side'></div>
<div class='column middle'>
<div class='code info'>
<h1> Operacion realizada con exito </h1><hr />
<p> Se ha añadido el cine correctamente en la base de datos.</p>
<a href='../panel_admin/index.php?state=mc'><button>Cerrar Mensaje</button></a>
</div>
</div>
<div class='column side'></div>
</div>
";
$result = './?state=mc';
}
$exist->free();
}
return $result;
}
}
?>

View File

@ -0,0 +1,167 @@
<?php
//General Config File:
include_once('../assets/php/config.php');
include_once('../assets/php/common/film_dao.php');
include_once('../assets/php/common/film.php');
include_once('../assets/php/form.php');
class formAddFilm extends Form{
//Constants:
const HTML5_EMAIL_REGEXP = '^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$';
const EXTENSIONS = array('gif','jpg','jpe','jpeg','png');
public function __construct() {
$options = array("action" => "./?state=mf", 'enctype' => 'multipart/form-data');
parent::__construct('formAddFilm', $options);
}
protected function generaCamposFormulario($datos, $errores = array()){
// Se generan los mensajes de error si existen.
$htmlErroresGlobales = self::generaListaErroresGlobales($errores);
$errorTittle = self::createMensajeError($errores, 'tittle', 'span', array('class' => 'error'));
$errorDuration = self::createMensajeError($errores, 'duration', 'span', array('class' => 'error'));
$errorLanguage = self::createMensajeError($errores, 'language', 'span', array('class' => 'error'));
$errorDescription = self::createMensajeError($errores, 'description', 'span', array('class' => 'error'));
$errorImage = self::createMensajeError($errores, 'img', 'span', array('class' => 'error'));
$html = '<div class="row">
<fieldset id="film_form"><pre>'.$htmlErroresGlobales.'</pre>
<legend>AÑADIR PELÍCULA</legend>
<input type="text" name="tittle" id="tittle" placeholder="Título" required/><pre>'.$errorTittle.'</pre>
<input type="number" name="duration" id="duration" placeholder="Duración" required/><pre>'.$errorDuration.'</pre>
<input type="text" name="language" id="language" placeholder="Idioma" required/><pre>'.$errorLanguage.'</pre>
<input type="text" name="description" id="description" placeholder="Descripción" required/><pre>'.$errorDescription.'</pre>
<div class="file">Imagen promocional:<input type="file" name="file" id="file" placeholder="Imagen promocional" /></div><pre>'.$errorImage.'</pre></p>
</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Añadir pelicula" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
</div>';
return $html;
}
protected function procesaFormulario($datos){
$result = array();
/* PROCESAR LA SUBIDA DE IMAGEN
$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 = $this->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), self::EXTENSIONS);
// 3. comprueba el tipo mime del archivo correspode a una imagen image
$finfo = new \finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->file($_FILES['archivo']['tmp_name']);
$ok = preg_match('/image\/*./', $mimeType);
if ( $ok ) {
$tmp_name = $_FILES['archivo']['tmp_name'];
if ( !move_uploaded_file($tmp_name, "../img/films/{$nombre}") ) {
$result['img'] = 'Error al mover el archivo';
}
//if ( !copy("../img/tmp/{$nombre}", "/{$nombre}") ) {
// $result['img'] = 'Error al mover el archivo';
//}
}else {
$result['img'] = 'El archivo tiene un nombre o tipo no soportado';
}
} else {
$result['img'] = 'Error al subir el archivo.';
}
*/
$tittle = $this->test_input($datos['tittle']) ?? null;
//|| !mb_ereg_match(self::HTML5_EMAIL_REGEXP, $tittle)
if ( empty($tittle) ) {
$result['tittle'] = "El título no es válido";
}
$duration = $this->test_input($datos['duration']) ?? null;
//||!mb_ereg_match(self::HTML5_EMAIL_REGEXP, $duration)
if ( empty($duration) || $duration <0) {
$result['duration'] = "La duración no es válida";
}
$language = $this->test_input($datos['language']) ?? null;
//|| !mb_ereg_match(self::HTML5_EMAIL_REGEXP, $language)
if ( empty($language) ) {
$result['language'] = "El idioma no es válido";
}
$description = $this->test_input($datos['description']) ?? null;
//|| !mb_ereg_match(self::HTML5_EMAIL_REGEXP, $description)
if ( empty($language)) {
$result['language'] = "La descripcion no es válida";
}
if (count($result) === 0) {
$bd = new Film_DAO("complucine");
//FALTARIA SUBIR LA IMAGEN
$exist = $bd-> GetFilm($tittle,$language);
if(mysqli_num_rows($exist) != 0){
$result[] = "Ya existe una nueva pelicula con el mismo titulo e idioma.";
}
else{
/* PROCESAR SUBIDA DE IMAGEN
$tmp_name = $_FILES['img']['tmp_name'];
if ( !move_uploaded_file($tmp_name, "../img/films/{$nombre}") ) {
$result[] = 'Error al mover el archivo';
}
//else if ( !copy(DIR_ALMACEN. "/{$nombre}", DIR_ALMACEN_PROTEGIDO. "/{$nombre}") ) {
// $result[] = 'Error al mover el archivo';
//}
*/
//else {
$bd->createFilm(null, $tittle,$duration,$language,$description, null); //Null hasta tener $nombre
$_SESSION['message'] = "<div class='row'>
<div class='column side'></div>
<div class='column middle'>
<div class='code info'>
<h1> Operacion realizada con exito </h1><hr />
<p> Se ha añadido la pelicula correctamente en la base de datos.</p>
<a href='../panel_admin/index.php?state=mf'><button>Cerrar Mensaje</button></a>
</div>
</div>
<div class='column side'></div>
</div>
";
$result = './?state=mf';
//}
}
$exist->free();
}
return $result;
}
private function check_file_uploaded_name ($filename) {
return (bool) ((mb_ereg_match('/^[0-9A-Z-_\.]+$/i',$filename) === 1) ? true : false );
}
private function check_file_uploaded_length ($filename) {
return (bool) ((mb_strlen($filename,'UTF-8') < 250) ? true : false);
}
}
?>

View File

@ -0,0 +1,142 @@
<?php
//General Config File:
include_once('../assets/php/config.php');
include_once('../assets/php/common/manager_dao.php');
include_once('../assets/php/common/manager.php');
include_once('../assets/php/common/cinema_dao.php');
include_once('../assets/php/common/user_dao.php');
include_once('../assets/php/form.php');
class formAddManager extends Form{
//Constants:
const HTML5_EMAIL_REGEXP = '^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$';
public function __construct() {
$options = array("action" => "./?state=mg");
parent::__construct('formAddManager', $options);
}
protected function generaCamposFormulario($datos, $errores = array()){
// Se generan los mensajes de error si existen.
$htmlErroresGlobales = self::generaListaErroresGlobales($errores);
$errorId = self::createMensajeError($errores, 'id', 'span', array('class' => 'error'));
$errorIdCinema = self::createMensajeError($errores, 'idcinema', 'span', array('class' => 'error'));
$html = '<fieldset id="film_form"><pre>'.$htmlErroresGlobales.'</pre>
<legend>Selecciona usuario.</legend><pre>'.$errorId.'</pre>'
.$this->showUsers().
'</fieldset>
<fieldset>
<legend>Selecciona cine.</legend><pre>'.$errorIdCinema.'</pre>'
.$this->showCinemas().
'</fieldset>
<div class="actions">
<input type="submit" id="submit" value="Seleccionar" name="add_manager" class="primary" />
<input type="reset" id="reset" value="Borrar" />
</div>
</div>
';
return $html;
}
protected function procesaFormulario($datos){
$result = array();
$id = $this->test_input($datos['id']) ?? null;
if (is_null($id) ) {
$result['id'] = "ERROR. No existe un usuario con ese ID";
}
$idcinema = $this->test_input($datos['idcinema']) ?? null;
//||!mb_ereg_match(self::HTML5_EMAIL_REGEXP, $duration)
if (empty($idcinema)) {
$result['idcinema'] = "ERROR. No existe un cine con ese ID";
}
if (count($result) === 0) {
$bd = new Manager_DAO("complucine");
// check if already exist a manager with same name
$exist = $bd->GetManagerCinema($id, $idcinema);
if( mysqli_num_rows($exist) != 0){
$result[] = "Ya existe un manager asociado a este usuario y cine";
}
else{
$bd->createManager($id, $idcinema);
$_SESSION['message'] = "<div class='row'>
<div class='column side'></div>
<div class='column middle'>
<div class='code info'>
<h1> Operacion realizada con exito </h1><hr />
<p> Se ha añadido el gerente correctamente en la base de datos.</p>
<a href='../panel_admin/index.php?state=mg'><button>Cerrar Mensaje</button></a>
</div>
<div class='column side'></div>
</div>
";
$result = './?state=mg';
}
$exist->free();
}
return $result;
}
private function showUsers() {
$user = new UserDAO("complucine");
$users = $user->allUsersNotM();
$ids = array();
$usernames = array();
$emails = array();
$roles = array();
foreach($users as $key => $value){
$ids[$key] = $value->getId();
$usernames[$key] = $value->getName();
$emails[$key] = $value->getEmail();
$roles[$key] = $value->getRol();
}
$html='';
for($i = 0; $i < count($users); $i++){
$html .= '
<input type="radio" name="id" value='.$ids[$i].' > <label> '.$ids[$i].', '.$usernames[$i].', '.$usernames[$key].'
</label>
';
}
return $html;
}
private function showCinemas() {
$cine = new Cinema_DAO("complucine");
$cinemas = $cine->allCinemaData();
$ids = array();
$names = array();
$directions = array();
$phones = array();
foreach($cinemas as $key => $value){
$ids[$key] = $value->getId();
$names[$key] = $value->getName();
$directions[$key] = $value->getDirection();
$phones[$key] = $value->getPhone();
}
$html = '';
for($i = 0; $i < count($cinemas); $i++){
$html.= '
<input type="radio" name="idcinema" value='.$ids[$i].' > <label> '.$ids[$i].', '.$names[$i].'
</label>
';
}
return $html;
}
}
?>

Some files were not shown because too many files have changed in this diff Show More