Compare commits
278 Commits
Author | SHA1 | Date | |
---|---|---|---|
c4f537c433 | |||
632cc52b99 | |||
af885e9302 | |||
a22130ac67 | |||
357465a383 | |||
81a6296f01 | |||
03e54d0f7d | |||
f947d40543 | |||
c607dbcf27 | |||
485a696067 | |||
0368df8bbd | |||
f6d8bbb05e | |||
39424ff5e2 | |||
204dac6c78 | |||
b71f54db46 | |||
b5d3ee539f | |||
1a5013ca99 | |||
ac477d7aad | |||
902d93f971 | |||
ae72878c5a | |||
2ccfc90926 | |||
55d72047de | |||
3811fa2f17 | |||
2b06f5758e | |||
0e56e727bc | |||
7a4594d099 | |||
724f28f6b9 | |||
57a0ec644b | |||
8a3d41d2d5 | |||
842366141c | |||
897244542c | |||
2d7aaf132d | |||
0ffda6f698 | |||
e01c135238 | |||
c657675b6c | |||
e1fe17d695 | |||
f1895fd4f6 | |||
b08cccf23e | |||
5f78baded2 | |||
bd86ecdf28 | |||
35203afd0c | |||
abadfa99a2 | |||
be2cb4c8aa | |||
d9ca15a065 | |||
49ba6554f9 | |||
1756b1d1c0 | |||
d51253975c | |||
6b6aab5a61 | |||
125f922844 | |||
9ce0a4045f | |||
9db0c0ce6f | |||
8ba8939137 | |||
5921fe6c11 | |||
a53006592c | |||
ff7c9d103d | |||
880a74379f | |||
db3cf15098 | |||
60170ca731 | |||
db34538d41 | |||
5dcb995390 | |||
914d2a9325 | |||
ec0a391745 | |||
b989468601 | |||
4f9cd0b581 | |||
8f2d3db7ad | |||
97d271bbee | |||
5f1b02a3b3 | |||
84fa1c230c | |||
d770c474bd | |||
f8bee910e0 | |||
17b31a9f04 | |||
9ffe2917de | |||
9fba95b2f4 | |||
f1d674a3f1 | |||
70ae0cb19e | |||
8162f84100 | |||
d78ef81c3e | |||
3ee19f4c5f | |||
0b6faa00eb | |||
a43b6281fc | |||
f852fb292c | |||
3e5e670e30 | |||
6bad506670 | |||
69b5ec6534 | |||
c10b90997e | |||
98156e685c | |||
efa3c6e31d | |||
df9f8176d4 | |||
b90cbcd074 | |||
cd7c2ccf38 | |||
119733a174 | |||
0e91d0fc30 | |||
a01cfec117 | |||
c6d7a98a85 | |||
a57751e699 | |||
bb6355fdc1 | |||
7252a1b9e0 | |||
489d9af2df | |||
4194b6fef2 | |||
d3490d7536 | |||
2f5fc9cadc | |||
8aabcf7482 | |||
c1e88a651f | |||
16e0019231 | |||
162f7c1a8d | |||
6a27caf834 | |||
0820e9476e | |||
8638073f7a | |||
bef1bb8038 | |||
db5c5d79ad | |||
1a16619158 | |||
d0fe499ee3 | |||
a067b8c8b9 | |||
642e8036d8 | |||
3b71865eaa | |||
d8e08b7c3c | |||
31cb6b3212 | |||
214e5df673 | |||
fd712e5563 | |||
accb27c682 | |||
505fc87698 | |||
c0cbc85ff9 | |||
63d9c9a61d | |||
1475817c6e | |||
2d5cf09b61 | |||
0b2bf81d0a | |||
57f63a2dc3 | |||
13489a0925 | |||
d13c731297 | |||
f9a0a3c5ba | |||
786d28f70c | |||
8dafa546b6 | |||
22977e8091 | |||
a45a525e67 | |||
50ea9b5a67 | |||
a71a7b0df8 | |||
1f6cd81724 | |||
dad530edb4 | |||
5dfd0e8895 | |||
3593f13c59 | |||
28bce68335 | |||
7a28aed626 | |||
91177751b4 | |||
7ffb4662bf | |||
ffb94809b5 | |||
5c460bf06f | |||
6326ff3e1e | |||
0d084df6a7 | |||
ade555d392 | |||
90f3ce3bd6 | |||
1fac908cd5 | |||
3dc56e4618 | |||
8a65fdb574 | |||
d56c04f076 | |||
7d56763384 | |||
1ffac90068 | |||
68c117d9dc | |||
0494c611b6 | |||
b65220dee8 | |||
616bf85934 | |||
987fc1a641 | |||
85a0ff411d | |||
6efe3fc241 | |||
a211264aa6 | |||
a67e7b9c23 | |||
85c8313c1a | |||
2f60b8f6e5 | |||
ebc7d4708c | |||
59368957ff | |||
3087940f70 | |||
51032e2630 | |||
10e060d4c8 | |||
019872acfb | |||
668598fef9 | |||
b412c47c8e | |||
b171b76ce5 | |||
fb1cbe2a1c | |||
629cad58e1 | |||
687e7b4672 | |||
b655543224 | |||
3b159ee6f4 | |||
0bafdb106a | |||
91d001f29d | |||
72b1bab936 | |||
258a7bfd05 | |||
c849f31681 | |||
2a5a9a9d12 | |||
7166b91e83 | |||
425af67eb5 | |||
af0d9ccd25 | |||
4692af8ddd | |||
4a7f89bdbe | |||
8d21c86642 | |||
1a88b8d861 | |||
6ebea1c1ae | |||
f5ede5cb15 | |||
e12c79d493 | |||
e9ef536815 | |||
b80a9ae1db | |||
12c61a4683 | |||
f9963bbca4 | |||
9b168a97df | |||
79a9b04421 | |||
4addd2c35f | |||
53dbcbe6a6 | |||
157201c2f8 | |||
cfd65e645a | |||
6e18e93fc2 | |||
d9992fde93 | |||
4e2aa0ee6b | |||
d108b66468 | |||
c90c450f1c | |||
c5ee1bd4c7 | |||
faec3af6f7 | |||
bb784490e5 | |||
05ae838f03 | |||
f22ddcff66 | |||
fff6f2c6fd | |||
e8f4b88426 | |||
b80f870ca8 | |||
571d28fc19 | |||
77781827bc | |||
cb82c3eb15 | |||
90f233fca9 | |||
113a6413a8 | |||
11e4339a04 | |||
4d1eb61a1e | |||
cf3f36c9d4 | |||
a5c8dd4ff8 | |||
4ed406793a | |||
6955e99e7e | |||
2c1f8da1c7 | |||
9dd93498e4 | |||
bebd7da242 | |||
360920fcd0 | |||
5899b9f983 | |||
5d4eb4390a | |||
a304065e05 | |||
b4f2d17d0e | |||
4e1cdc6522 | |||
bf0bb38838 | |||
045e93198e | |||
ffce51748a | |||
895526114a | |||
7587548296 | |||
6625d9787a | |||
5732adfec9 | |||
7e29154220 | |||
8b86f15a68 | |||
1ad88d42a2 | |||
27c3ee739c | |||
ae8ac3c07a | |||
0b38e804f5 | |||
038de91627 | |||
fa4769d77b | |||
62d0602d70 | |||
52cc4cb49b | |||
a77196d731 | |||
7ff0fc7d3d | |||
e799376cbd | |||
e93b191100 | |||
4dbefa6860 | |||
a41f1a86ab | |||
fd587dcf22 | |||
4a3631cf09 | |||
3b3bf220c0 | |||
8de7a1d0cb | |||
17cb21683e | |||
94f76e7a82 | |||
0398094c5a | |||
4a8f384ef7 | |||
23ed01c8d9 | |||
1b39920abd | |||
a9e866ac88 | |||
a7f24b2772 | |||
78c32a854d | |||
6a9b6cd8a4 | |||
4e92236fab |
BIN
BDfdicines.pdf
BIN
Proyecto-01-Presentacion.pdf
Normal file
BIN
Proyecto-02-Sales pitch.pdf
Normal file
BIN
Proyecto-03-Entrega.pdf
Normal file
BIN
Proyecto-04-Criterios.pdf
Normal file
@ -1,7 +1,5 @@
|
||||
# SW 💻
|
||||
Repositorio para la asignatura de Sistemas Web de Ingeniería de Computadores
|
||||
***
|
||||
## Versión 2.0 (Segunda entrega)
|
||||
***
|
||||
## Licencia 📄
|
||||
Educational Community License v2.0 (ECL-2.0).
|
||||
|
164
assets/css/admin.css
Normal file
@ -0,0 +1,164 @@
|
||||
.tablelist{
|
||||
display: grid;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.tablelist li {
|
||||
border-bottom: 1px solid black;
|
||||
padding: 10px;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
.tablelist a {
|
||||
color: #1f2c3d;
|
||||
}
|
||||
|
||||
.tablelist a:hover li{
|
||||
color: rgb(211, 235, 255);
|
||||
background: rgba(31, 44, 61, 1);
|
||||
}
|
||||
|
||||
.tablelist li.title{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.col7{
|
||||
grid-template-columns: repeat(7,1fr);
|
||||
}
|
||||
|
||||
.col7 .odd{
|
||||
background: rgba(144, 144, 144, 0.25);;
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 8;
|
||||
grid-template-columns: repeat(7,1fr);
|
||||
}
|
||||
|
||||
.col7 .even{
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 8;
|
||||
grid-template-columns: repeat(7,1fr);
|
||||
}
|
||||
|
||||
.tablelist.col7 a.h4long
|
||||
{
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 7;
|
||||
grid-template-columns: repeat(4,auto);
|
||||
}
|
||||
|
||||
.tablelist.col7 a
|
||||
{
|
||||
display: grid;
|
||||
grid-column-start: 5;
|
||||
grid-column-end: 8;
|
||||
grid-template-columns: auto;
|
||||
}
|
||||
|
||||
.tablelist.col6{
|
||||
grid-template-columns: repeat(6,1fr);
|
||||
}
|
||||
|
||||
/*.col6 .odd{
|
||||
background: green;
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 7;
|
||||
grid-template-columns: repeat(5,auto);
|
||||
}
|
||||
|
||||
.col6 .even{
|
||||
background: pink;
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 7;
|
||||
grid-template-columns: repeat(5,auto);
|
||||
}*/
|
||||
|
||||
|
||||
.col6 .odd{
|
||||
background: rgba(144, 144, 144, 0.25);
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 7;
|
||||
grid-template-columns: repeat(6,1fr);
|
||||
}
|
||||
|
||||
.col6 .even{
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 7;
|
||||
grid-template-columns: repeat(6,1fr);
|
||||
}
|
||||
|
||||
.tablelist.col6 a.h2long{
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 5;
|
||||
grid-template-columns: repeat(4,1fr);
|
||||
}
|
||||
|
||||
|
||||
.tablelist.col6 a{
|
||||
display: grid;
|
||||
grid-column-start: 5;
|
||||
grid-column-end: 7;
|
||||
grid-template-columns: repeat(2,1fr);
|
||||
}
|
||||
|
||||
|
||||
.tablelist.col3{
|
||||
grid-template-columns: repeat(3,1fr);
|
||||
}
|
||||
|
||||
|
||||
.col2 .odd{
|
||||
background: rgba(144, 144, 144, 0.25);
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 4;
|
||||
grid-template-columns: repeat(3,1fr);
|
||||
}
|
||||
|
||||
.col2 .even{
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 4;
|
||||
grid-template-columns: repeat(3,1fr);
|
||||
}
|
||||
|
||||
|
||||
.tablelist.col2 a.h2long{
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 3;
|
||||
grid-template-columns: repeat(2,1fr);
|
||||
}
|
||||
|
||||
.tablelist.col2 {
|
||||
display: grid;
|
||||
grid-column-start: 3;
|
||||
grid-column-end: 4;
|
||||
grid-template-columns: repeat(1,1fr);
|
||||
}
|
||||
|
||||
.content-input {
|
||||
width: 15%;
|
||||
height: 20px;
|
||||
border: 1px solid #000000;
|
||||
margin-top: 10px;
|
||||
font-size: 15px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.efe {
|
||||
width: 85%;
|
||||
height: 20px;
|
||||
margin-bottom: 20px;
|
||||
text-align: left;
|
||||
font-size: 22px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
815
assets/css/highContrast.css
Normal file
@ -0,0 +1,815 @@
|
||||
/* Imports */
|
||||
@import url('manager.css');
|
||||
@import url('admin.css');
|
||||
|
||||
/* 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, button.danger {
|
||||
width: 95%;
|
||||
}
|
||||
button:hover, .button:hover {
|
||||
cursor: pointer;
|
||||
background-color:#dadada;
|
||||
color:#1f2c3d;
|
||||
border-color: #1f2c3d;
|
||||
}
|
||||
button.danger{
|
||||
background-color:#2c0000;
|
||||
border: 2px solid #d3ebff;
|
||||
}
|
||||
button.danger:hover{
|
||||
background-color:#00020f;
|
||||
border: 2px solid #791515;
|
||||
color: #791515;
|
||||
}
|
||||
|
||||
|
||||
/* 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.danger{
|
||||
background-color: #791515;
|
||||
}
|
||||
.menu nav li:hover{
|
||||
background-color:#dadada;
|
||||
color:#1f2c3d;
|
||||
border-color: #1f2c3d;
|
||||
}
|
||||
.menu nav li.danger:hover{
|
||||
color: #d3ebff;
|
||||
background-color: #2c0000;
|
||||
border-color: #d3ebff;
|
||||
}
|
||||
.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: #1f2c3d;
|
||||
border: solid 1px #1f2c3d;
|
||||
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: #1f2c3d;
|
||||
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;
|
||||
}
|
||||
.tablelist a {
|
||||
color: #dadada;
|
||||
}
|
||||
|
||||
|
||||
/* 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.info img{
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
margin-top: 5px;
|
||||
border: 1px solid #d3ebff;
|
||||
border-radius: 5px;
|
||||
padding: 5px;
|
||||
transition: .5s ease;
|
||||
backface-visibility: hidden;
|
||||
|
||||
}
|
||||
.code.showtimes{
|
||||
height: 600px;
|
||||
}
|
||||
.code.showtimes p{
|
||||
height: 5em;
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.code.showtimes:hover {
|
||||
filter: drop-shadow(5px 5px 10px #1f2c3d);
|
||||
}
|
||||
.code.cinemas {
|
||||
height: 230px;
|
||||
}
|
||||
.code.cinemas img {
|
||||
margin: 0.7em 0 0.2em 0;
|
||||
width: 15em;
|
||||
height: 121px;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
box-shadow: 0 4px 8px 0 #00020f, 0 6px 20px 0 #00020f;
|
||||
}
|
||||
.code.promo img {
|
||||
margin: 0.1em 0 0.8em 0;
|
||||
width: 30%;
|
||||
height: 10%;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
box-shadow: 0 4px 8px 0 #00020f, 0 6px 20px 0 #00020f;
|
||||
}
|
||||
.code.purchase, .code.resume {
|
||||
text-align: center;
|
||||
}
|
||||
.code.purchase h3 {
|
||||
margin-top: 2em;
|
||||
}
|
||||
.code.purchase img {
|
||||
margin: 0.1em 0 0.8em 0;
|
||||
width: 100%;
|
||||
box-shadow: 0 4px 8px 0 #d3ebff, 0 6px 20px 0 #d3ebff;
|
||||
}
|
||||
.code.purchase select, .code.purchase select option {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
margin: 0.1em 0.5em 1em 0.5em;
|
||||
font-weight: bold !important;
|
||||
color: #1f2c3d !important;
|
||||
background-color: #d3ebff;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
|
||||
/* 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%;
|
||||
}
|
||||
}
|
||||
|
||||
/* Promotions */
|
||||
.promotions {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
display: flex;
|
||||
}
|
||||
.promotions a {
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
background-size: cover;
|
||||
border-radius: 10px;
|
||||
border-style: dashed;
|
||||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(255, 255, 255, 0.19);
|
||||
}
|
||||
.promotions button {
|
||||
margin: 4em 1em 0 1em;
|
||||
background-repeat: no-repeat;
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
background-position: center;
|
||||
text-indent: 0px;
|
||||
}
|
||||
.controls {
|
||||
text-align: center;
|
||||
}
|
||||
.controls #play {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
border-radius: 25px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
text-indent: -1px;
|
||||
}
|
||||
.controls #stop {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
border-radius: 25px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
text-indent: -5px;
|
||||
}
|
||||
/* Responsive layout */
|
||||
@media (max-width: 750px) {
|
||||
.promotions button {
|
||||
width: 10%;
|
||||
margin: 0.5em 1em 0 1em;
|
||||
}
|
||||
.promotions .imagen {
|
||||
margin-top: 0.2em;
|
||||
width: 100%;
|
||||
height: 45px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 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%;
|
||||
}
|
||||
|
||||
.card-holder {
|
||||
width: 75%;
|
||||
display: inline-block;
|
||||
}
|
||||
.input-cart-number, .fieldset-cvv, .select {
|
||||
width: 70px;
|
||||
max-width: 100%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
form select {
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
font-weight: 400px;
|
||||
color: #1f2c3d;
|
||||
line-height: 1.3;
|
||||
padding: 0.2em 0.2em 0.2em 0.2em;
|
||||
width: 75px;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
margin: 10px auto;
|
||||
border: 1px solid #d3ebff;
|
||||
box-shadow: 0 1px 0 1px #1f2c3d;
|
||||
border-radius: .3em;
|
||||
-moz-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
background-color: #fff;
|
||||
}
|
||||
form select::-ms-expand {
|
||||
display: none;
|
||||
}
|
||||
form select:hover {
|
||||
border-color: #d3ebff;
|
||||
}
|
||||
form select:focus {
|
||||
border-color: #d3ebff;
|
||||
box-shadow: 0 0 1px 3px #1f2c3d;
|
||||
box-shadow: 0 0 0 3px -moz-mac-focusring;
|
||||
color: #1f2c3d;
|
||||
outline: none;
|
||||
}
|
||||
form select option {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
/* Preformatted Text */
|
||||
pre {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
fieldset pre {
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* Go Up button */
|
||||
.go-up {
|
||||
display: none;
|
||||
padding: 5px;
|
||||
background:#1f2c3d;
|
||||
font-size: 20px;
|
||||
color:#d3ebff;
|
||||
cursor: pointer;
|
||||
position: fixed;
|
||||
bottom: 5px;
|
||||
right: 20px;
|
||||
}
|
||||
|
||||
/* 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: 120px;
|
||||
height: 25px;
|
||||
padding: 0px 0px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
position: relative;
|
||||
}
|
||||
@media (max-width: 500px) {
|
||||
footer {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
@ -1,3 +1,7 @@
|
||||
/* Imports */
|
||||
@import url('manager.css');
|
||||
@import url('admin.css');
|
||||
|
||||
/* Basic */
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
@ -29,20 +33,20 @@ h4 {
|
||||
}
|
||||
|
||||
/* Buttons */
|
||||
button, .button.large {
|
||||
button, .button.large{
|
||||
display: inline-block;
|
||||
margin: 10px;
|
||||
width: 150px;
|
||||
height: 30px;
|
||||
padding: 5px 10px;
|
||||
background-color :#1f2c3d;
|
||||
background-color:#1f2c3d;
|
||||
border: 1px solid #d3ebff;
|
||||
text-align: center;
|
||||
color :#d3ebff;
|
||||
color:#d3ebff;
|
||||
font-weight: bold;
|
||||
position: relative;
|
||||
}
|
||||
.button.large {
|
||||
.button.large, button.danger {
|
||||
width: 95%;
|
||||
}
|
||||
button:hover, .button:hover {
|
||||
@ -50,7 +54,17 @@ button:hover, .button:hover {
|
||||
background-color:#d3ebff;
|
||||
color:#1f2c3d;
|
||||
border-color: #1f2c3d;
|
||||
}
|
||||
}
|
||||
button.danger{
|
||||
background-color:#2c0000;
|
||||
border: 2px solid #d3ebff;
|
||||
}
|
||||
button.danger:hover{
|
||||
background-color:#d3ebff;
|
||||
border: 2px solid #791515;
|
||||
color: #791515;
|
||||
}
|
||||
|
||||
|
||||
/* Header */
|
||||
.header {
|
||||
@ -61,7 +75,7 @@ button:hover, .button:hover {
|
||||
font-size: 18px;
|
||||
}
|
||||
.header img {
|
||||
width: 11px;
|
||||
width: 13px;
|
||||
}
|
||||
/* Header Menu */
|
||||
.menu {
|
||||
@ -69,11 +83,11 @@ button:hover, .button:hover {
|
||||
text-align: right;
|
||||
font-size: 15px;
|
||||
}
|
||||
.menu nav a{
|
||||
.menu nav a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
font-size: 15px;
|
||||
}
|
||||
}
|
||||
.menu nav li{
|
||||
display: inline-block;
|
||||
width: 150px;
|
||||
@ -84,12 +98,20 @@ button:hover, .button:hover {
|
||||
text-align: center;
|
||||
color :#d3ebff;
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
.menu nav li.danger{
|
||||
background-color: #791515;
|
||||
}
|
||||
.menu nav li:hover{
|
||||
background-color:#d3ebff;
|
||||
color:#1f2c3d;
|
||||
border-color: #1f2c3d;
|
||||
}
|
||||
.menu nav li.danger:hover{
|
||||
color: #d3ebff;
|
||||
background-color: #2c0000;
|
||||
border-color: #d3ebff;
|
||||
}
|
||||
.menu nav li>ul{
|
||||
display: none;
|
||||
}
|
||||
@ -109,11 +131,20 @@ button:hover, .button:hover {
|
||||
justify-content: center;
|
||||
font-size: 20px;
|
||||
}
|
||||
.header.sub .menu {
|
||||
.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 */
|
||||
@ -134,7 +165,7 @@ a:hover{
|
||||
body {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
background-color: #d3ebff;
|
||||
color: #000000
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/* Table */
|
||||
@ -164,7 +195,7 @@ 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 tfoot {
|
||||
border-bottom: solid 2px #1f2c3d;
|
||||
@ -192,16 +223,16 @@ table a{
|
||||
|
||||
|
||||
/* 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 */
|
||||
@ -287,7 +318,7 @@ table a{
|
||||
.code a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.code ul, .code ol {
|
||||
.code ul, .code ol, .code li {
|
||||
color: #dadada;
|
||||
}
|
||||
.code img{
|
||||
@ -305,19 +336,82 @@ table a{
|
||||
font-size: 90%;
|
||||
color: #d3ebff;
|
||||
}
|
||||
.code label{
|
||||
color: #d3ebff;
|
||||
}
|
||||
.code.details{
|
||||
height: 750px;
|
||||
}
|
||||
.code.plan {
|
||||
height: 1150px;
|
||||
}
|
||||
.code.info{
|
||||
.code.info {
|
||||
text-align: center;
|
||||
height: 250px;
|
||||
}
|
||||
.code.showtimes{
|
||||
.code.info img {
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
margin-top: 5px;
|
||||
border: 1px solid #d3ebff;
|
||||
border-radius: 5px;
|
||||
padding: 5px;
|
||||
transition: .5s ease;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
.code.showtimes {
|
||||
height: 600px;
|
||||
}
|
||||
.code.showtimes p {
|
||||
height: 5em;
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.code.showtimes:hover {
|
||||
filter: drop-shadow(5px 5px 10px #1f2c3d);
|
||||
}
|
||||
.code.cinemas {
|
||||
height: 230px;
|
||||
}
|
||||
.code.cinemas img {
|
||||
margin: 0.7em 0 0.2em 0;
|
||||
width: 15em;
|
||||
height: 121px;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
box-shadow: 0 4px 8px 0 #00020f, 0 6px 20px 0 #00020f;
|
||||
}
|
||||
.code.promo img {
|
||||
margin: 0.1em 0 0.8em 0;
|
||||
width: 30%;
|
||||
height: 10%;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
box-shadow: 0 4px 8px 0 #00020f, 0 6px 20px 0 #00020f;
|
||||
}
|
||||
.code.purchase, .code.resume {
|
||||
text-align: center;
|
||||
}
|
||||
.code.purchase h3 {
|
||||
margin-top: 2em;
|
||||
}
|
||||
.code.purchase img {
|
||||
margin: 0.1em 0 0.8em 0;
|
||||
width: 100%;
|
||||
box-shadow: 0 4px 8px 0 #d3ebff, 0 6px 20px 0 #d3ebff;
|
||||
}
|
||||
.code.purchase select, .code.purchase select option {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
margin: 0.1em 0.5em 1em 0.5em;
|
||||
font-weight: bold !important;
|
||||
color: #1f2c3d !important;
|
||||
background-color: #d3ebff;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
|
||||
/* BlockQuotes */
|
||||
@ -406,6 +500,63 @@ table a{
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Promotions */
|
||||
.promotions {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
display: flex;
|
||||
}
|
||||
.promotions a {
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
background-size: cover;
|
||||
border-radius: 10px;
|
||||
border-style: dashed;
|
||||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(255, 255, 255, 0.19);
|
||||
}
|
||||
.promotions button {
|
||||
margin: 4em 1em 0 1em;
|
||||
background-repeat: no-repeat;
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
background-position: center;
|
||||
text-indent: 0px;
|
||||
}
|
||||
.controls {
|
||||
text-align: center;
|
||||
}
|
||||
.controls #play {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
border-radius: 25px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
text-indent: -1px;
|
||||
}
|
||||
.controls #stop {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
border-radius: 25px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
text-indent: -5px;
|
||||
}
|
||||
/* Responsive layout */
|
||||
@media (max-width: 750px) {
|
||||
.promotions button {
|
||||
width: 10%;
|
||||
margin: 0.5em 1em 0 1em;
|
||||
}
|
||||
.promotions .imagen {
|
||||
margin-top: 0.2em;
|
||||
width: 100%;
|
||||
height: 45px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Percentage bar */
|
||||
.bar {
|
||||
@ -514,7 +665,7 @@ textarea {
|
||||
color: rgb(138, 150, 32);
|
||||
}
|
||||
|
||||
#submit {
|
||||
#submit, #register {
|
||||
width: 100%;
|
||||
height: 35px;
|
||||
border: 1px solid #000000;
|
||||
@ -526,7 +677,7 @@ textarea {
|
||||
filter: brightness(105%);
|
||||
cursor: pointer;
|
||||
}
|
||||
#submit:hover {
|
||||
#submit:hover, #register:hover {
|
||||
background-color: #d3ebff;
|
||||
}
|
||||
|
||||
@ -548,6 +699,82 @@ textarea {
|
||||
background-color: #791515;
|
||||
}
|
||||
|
||||
.file{
|
||||
margin-top: 10px;
|
||||
}
|
||||
.file input{
|
||||
height: 110%;
|
||||
}
|
||||
|
||||
.card-holder {
|
||||
width: 75%;
|
||||
display: inline-block;
|
||||
}
|
||||
.input-cart-number, .fieldset-cvv, .select {
|
||||
width: 70px;
|
||||
max-width: 100%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
form select {
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
font-weight: 400px;
|
||||
color: #1f2c3d;
|
||||
line-height: 1.3;
|
||||
padding: 0.2em 0.2em 0.2em 0.2em;
|
||||
width: 75px;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
margin: 10px auto;
|
||||
border: 1px solid #d3ebff;
|
||||
box-shadow: 0 1px 0 1px #1f2c3d;
|
||||
border-radius: .3em;
|
||||
-moz-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
background-color: #fff;
|
||||
}
|
||||
form select::-ms-expand {
|
||||
display: none;
|
||||
}
|
||||
form select:hover {
|
||||
border-color: #d3ebff;
|
||||
}
|
||||
form select:focus {
|
||||
border-color: #d3ebff;
|
||||
box-shadow: 0 0 1px 3px #1f2c3d;
|
||||
box-shadow: 0 0 0 3px -moz-mac-focusring;
|
||||
color: #1f2c3d;
|
||||
outline: none;
|
||||
}
|
||||
form select option {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
|
||||
/* Preformatted Text */
|
||||
pre {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
fieldset pre {
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* Go Up button */
|
||||
.go-up {
|
||||
display: none;
|
||||
padding: 5px;
|
||||
background:#1f2c3d;
|
||||
font-size: 20px;
|
||||
color:#d3ebff;
|
||||
cursor: pointer;
|
||||
position: fixed;
|
||||
bottom: 5px;
|
||||
right: 20px;
|
||||
}
|
||||
|
||||
|
||||
/* Footer */
|
||||
footer {
|
||||
@ -562,6 +789,16 @@ footer {
|
||||
.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%;
|
||||
|
466
assets/css/manager.css
Normal file
@ -0,0 +1,466 @@
|
||||
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;
|
||||
}
|
||||
|
||||
.has_error,
|
||||
.help_block{
|
||||
color: #a94442;
|
||||
display: block;
|
||||
margin-top: 3px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.has_error input{
|
||||
border-color: #a94442;
|
||||
box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%);
|
||||
}
|
||||
.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: 35px;
|
||||
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;
|
||||
}
|
||||
|
||||
.modal .submit:hover
|
||||
{
|
||||
background-color: #d3ebff;
|
||||
}
|
||||
|
||||
.modal .sumbit{
|
||||
width: 100%;
|
||||
height: 35px;
|
||||
border: 1px solid #000000;
|
||||
padding: 5px;
|
||||
margin-top: 5px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
box-shadow: 2px 2px #1f2c3d;
|
||||
filter: brightness(105%);
|
||||
cursor: pointer
|
||||
}
|
||||
|
||||
.code.welcome {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.code.welcome img {
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
margin-top: 5px;
|
||||
border: 1px solid #d3ebff;
|
||||
border-radius: 5px;
|
||||
padding: 5px;
|
||||
transition: .5s ease;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
|
||||
/*Change inputs*/
|
||||
.two-inputs-line{
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2,auto);
|
||||
}
|
||||
|
||||
.two-inputs-line input,
|
||||
.two-inputs-line label{
|
||||
width:90%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.one-input-line{
|
||||
display: grid;
|
||||
grid-template-columns: repeat(1,auto);
|
||||
margin-top: 1em;
|
||||
}
|
||||
.one-input-line input
|
||||
{
|
||||
width:50%;
|
||||
margin:auto;
|
||||
}
|
||||
|
||||
/* pop up window */
|
||||
|
||||
.modal {
|
||||
display: none; /* Hidden by default */
|
||||
position: fixed; /* Stay in place */
|
||||
z-index: 1; /* Sit on top */
|
||||
padding-top: 100px; /* Location of the box */
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%; /* Full width */
|
||||
height: 100%; /* Full height */
|
||||
overflow: auto; /* Enable scroll if needed */
|
||||
background-color: rgb(0,0,0); /* Fallback color */
|
||||
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
|
||||
}
|
||||
.modal-content {
|
||||
background-color: #fefefe;
|
||||
margin: auto;
|
||||
padding: 20px;
|
||||
border: 1px solid #888;
|
||||
width: 40%;
|
||||
height: 95%;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.modal form{
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.modal .image{
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
padding-top: 1em;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
.modal .code img{
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
max-height: 9em;
|
||||
margin: auto;
|
||||
}
|
||||
.modal .code.showtimes{
|
||||
height:100%;
|
||||
}
|
||||
|
||||
.modal .code.showtimes p{
|
||||
height: 100%;
|
||||
max-height: 9em;
|
||||
}
|
||||
|
||||
/* The Close Button */
|
||||
.close {
|
||||
color: #aaaaaa;
|
||||
float: right;
|
||||
font-size: 28px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.close:hover,
|
||||
.close:focus {
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.alert_success {
|
||||
color: #3c763d;
|
||||
background-color: #dff0d8;
|
||||
border-color: #d6e9c6;
|
||||
}
|
||||
|
||||
.alert {
|
||||
padding: 15px;
|
||||
margin-bottom: 20px;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 4px;
|
||||
text-align: center;
|
||||
border-radius: 1.75em;
|
||||
}
|
||||
|
||||
.alert_danger {
|
||||
color: #ab2828;
|
||||
background-color: #f0d8d8;
|
||||
border-color: #f70000;
|
||||
}
|
||||
|
||||
/*lil film list*/
|
||||
.film_list{
|
||||
height: 20em;
|
||||
overflow-y: scroll;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.film_list button{
|
||||
margin:auto;
|
||||
|
||||
}
|
||||
|
||||
.img_desc{
|
||||
display: grid;
|
||||
list-style-type: none;
|
||||
grid-template-columns: repeat(2,1fr);
|
||||
}
|
||||
|
||||
|
||||
/*Full calendar*/
|
||||
|
||||
|
||||
.fc-container{
|
||||
padding-left: 5%;
|
||||
padding-right: 5%;
|
||||
padding-top: 3em;
|
||||
}
|
||||
|
||||
.fc-container .fc-unthemed th,
|
||||
.fc-container .fc-unthemed td,
|
||||
.fc-container .fc-unthemed thead,
|
||||
.fc-container .fc-unthemed tbody,
|
||||
.fc-container .fc-unthemed .fc-divider,
|
||||
.fc-container .fc-unthemed .fc-row,
|
||||
.fc-container .fc-unthemed .fc-content, /* for gutter border */
|
||||
.fc-container .fc-unthemed .fc-popover,
|
||||
.fc-container .fc-unthemed .fc-list-view,
|
||||
.fc-container .fc-unthemed .fc-list-heading td {
|
||||
border-color: #1f2c3d;
|
||||
}
|
||||
|
||||
.fc-container .fc-unthemed td.fc-today {
|
||||
background: #ffd446;
|
||||
}
|
||||
|
||||
.fc-container .fc-event {
|
||||
position: relative; /* for resize handle and other inner positioning */
|
||||
display: block; /* make the <a> tag block */
|
||||
font-size: .85em;
|
||||
line-height: 1.3;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #000000; /* default BORDER color */
|
||||
font-weight: bold; /* undo jqui's ui-widget-header bold */
|
||||
}
|
||||
|
||||
.fc-container .fc-event,
|
||||
.fc-container .fc-event-dot {
|
||||
background-color: #1f2c3d; /* default BACKGROUND color */
|
||||
}
|
||||
|
||||
/* overpower some of bootstrap's and jqui's styles on <a> tags */
|
||||
.fc-container .fc-event,
|
||||
.fc-container .fc-event:hover,
|
||||
.fc-container .ui-widget .fc-event {
|
||||
color: #d3ebff; /* default TEXT color */
|
||||
text-decoration: none; /* if <a> has an href */
|
||||
}
|
||||
.fc-container .fc-state-default {
|
||||
background-color: #1f2c3d;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #1f2c3d, #1f2c3d);
|
||||
background-repeat: repeat-x;
|
||||
border-color: rgb(211 235 255) rgb(211 235 255) rgb(211 235 255);
|
||||
padding: 5px 10px ;
|
||||
display: inline-block;
|
||||
border-radius: 0px;
|
||||
color: #d3ebff;
|
||||
text-shadow: 0 1px 1px rgb(255 255 255 / 75%);
|
||||
box-shadow: inset 0 1px 0 rgb(255 255 255 / 20%), 0 1px 2px rgb(0 0 0 / 5%);
|
||||
}
|
||||
|
||||
.fc-container .fc-toolbar {
|
||||
text-align: center;
|
||||
background-color: #1f2c3d;
|
||||
}
|
||||
|
||||
.fc-container .fc-toolbar h2 {
|
||||
margin: 0;
|
||||
margin-top: 0px;
|
||||
margin-right: 0px;
|
||||
margin-bottom: 0px;
|
||||
margin-left: 0px;
|
||||
color: #d3ebff;
|
||||
}
|
||||
|
||||
.fc-container .fc-view-container *, .fc-view-container *:before, .fc-view-container *:after {
|
||||
-webkit-box-sizing: content-box;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
/*td.fc-day.fc-widget-content.fc-mon.fc-other-month.fc-past*/
|
||||
|
||||
.fc-container .fc-other-month {
|
||||
color: #1f2c3d;
|
||||
background-color: #d3ebff;
|
||||
}
|
||||
|
||||
.fc-container #myModal .modal-content{
|
||||
border-radius: 1.75em;
|
||||
background-color: #d3ebff;
|
||||
}
|
||||
|
||||
.fc-container .fc-toolbar .fc-state-active, .fc-toolbar .ui-state-active {
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
lists like tables
|
||||
|
||||
Example col3 tablelist
|
||||
<ul class="tablelist col3">
|
||||
<li class="title"> Tittle1 </li>
|
||||
<li class="title"> Tittle2 </li>
|
||||
<li class="title"> Tittle3 </li>
|
||||
<li> cell 1,1 <li>
|
||||
<li> cell 1,2 <li>
|
||||
<li> cell 1,3 <li>
|
||||
<a class="h2long" href="">
|
||||
<li> cell 2,1 this one and the next one share the same link <li>
|
||||
<li> cell 2,2 <li>
|
||||
</a>
|
||||
<a href="">
|
||||
<li> cell 2,3 this one is a link alone </li>
|
||||
</a>
|
||||
</ul>
|
||||
|
||||
General configuration
|
||||
*/
|
||||
.tablelist{
|
||||
display: grid;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.tablelist li {
|
||||
border-bottom: 1px solid black;
|
||||
padding: 10px;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
.tablelist a {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.tablelist a:hover li{
|
||||
color: rgb(211, 235, 255);
|
||||
background: rgba(31, 44, 61, 1);
|
||||
}
|
||||
|
||||
.tablelist li.title{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/*3columns*/
|
||||
.col3{
|
||||
grid-template-columns: repeat(3,1fr);
|
||||
|
||||
}
|
||||
|
||||
.col3 .odd{
|
||||
background: rgba(144, 144, 144, 0.25);
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 4;
|
||||
grid-template-columns: repeat(3,1fr);
|
||||
}
|
||||
|
||||
.col3 .even{
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 4;
|
||||
grid-template-columns: repeat(3,1fr);
|
||||
}
|
||||
|
||||
.tablelist.col3 a.h2long
|
||||
{
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 3;
|
||||
grid-template-columns: repeat(2,1fr);
|
||||
}
|
||||
|
||||
.tablelist.col3 a
|
||||
{
|
||||
display: grid;
|
||||
grid-column-start: 3;
|
||||
grid-column-end: 4;
|
||||
grid-template-columns: repeat(1,1fr);
|
||||
}
|
||||
|
||||
/*5 columns*/
|
||||
|
||||
.col5{
|
||||
grid-template-columns: repeat(5,1fr);
|
||||
}
|
||||
|
||||
.col5 .odd{
|
||||
background: green;
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 6;
|
||||
grid-template-columns: repeat(5,auto);
|
||||
}
|
||||
|
||||
.col5 .even{
|
||||
background: pink;
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 6;
|
||||
grid-template-columns: repeat(5,auto);
|
||||
}
|
||||
|
||||
.tablelist.col5 a.h4long
|
||||
{
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 5;
|
||||
grid-template-columns: repeat(4,auto);
|
||||
}
|
||||
|
||||
.tablelist.col5 a
|
||||
{
|
||||
display: grid;
|
||||
grid-column-start: 5;
|
||||
grid-column-end: 6;
|
||||
grid-template-columns: auto;
|
||||
}
|
14
assets/css/seat.css
Normal file
@ -0,0 +1,14 @@
|
||||
.check_box+label{
|
||||
background:url('../../img/seat_green.png') no-repeat;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
.check_box:checked+label{
|
||||
background:url('../../img/seat_grey.png') no-repeat;
|
||||
}
|
||||
|
||||
.check_box:disabled+label{
|
||||
background:url('../../img/seat_red.png') no-repeat;
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
<?php
|
||||
header('Location: ../');
|
||||
header("Location: ../");
|
||||
?>
|
22
assets/js/cambiarCSS.js
Normal file
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Práctica - Sistemas Web | Grupo D
|
||||
* CompluCine - FDI-cines
|
||||
*/
|
||||
|
||||
function cambiarCSS(nuevo){
|
||||
if(nuevo.includes("main.css")){
|
||||
var css = "main.css";
|
||||
} else {
|
||||
var css = "highContrast.css";
|
||||
}
|
||||
|
||||
var url = "../assets/php/common/changeCSS.php?css=" + css;
|
||||
$.get(url);
|
||||
|
||||
/* La idea era que cambiase todo dinámicamente sin refrescar la página */
|
||||
document.getElementById('estilo').setAttribute('href', nuevo);
|
||||
//document.getElementById('cssChange').innerHTML = oldName;
|
||||
//document.getElementById('cssChange').setAttribute('onClick', 'cambiarCSS('+viejo+')');
|
||||
|
||||
location.reload();
|
||||
}
|
153
assets/js/checkForms.js
Normal file
@ -0,0 +1,153 @@
|
||||
/**
|
||||
* Práctica - Sistemas Web | Grupo D
|
||||
* CompluCine - FDI-cines
|
||||
*/
|
||||
|
||||
//Expresión regular para comprobar que la contraseña tiene al menos 1 mayúscula y 1 número:
|
||||
const regExprPass = /^(?=\w*\d)(?=\w*[A-Z])(?=\w*[a-z])\S{4,16}$/;
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
//Iconos para validar el usuario:
|
||||
$("#userValid").hide();
|
||||
$("#userInvalid").hide();
|
||||
$("#userWarning").hide();
|
||||
|
||||
//Iconos para validar el email:
|
||||
$("#emailValid").hide();
|
||||
$("#emailInvalid").hide();
|
||||
|
||||
//Iconos para validar el password:
|
||||
$("#passValid").hide();
|
||||
$("#passInvalid").hide();
|
||||
$("#passWarning").hide();
|
||||
|
||||
//Iconos para validar que las contraseñas coindicen:
|
||||
$("#repassValid").hide();
|
||||
$("#repassInvalid").hide();
|
||||
|
||||
//Comprueba que el nombre de usuario introducido para el login, exista.
|
||||
$("#name").change(function(){
|
||||
var url = "../assets/php/common/checkUser.php?user=" + $("#name").val();
|
||||
$.get(url, userLoginCheck);
|
||||
});
|
||||
|
||||
//Comprueba que el nombre de usuario no esté registrado en la aplicación.
|
||||
$("#new_name").change(function(){
|
||||
var url = "../assets/php/common/checkUser.php?user=" + $("#new_name").val();
|
||||
$.get(url, userCheck);
|
||||
});
|
||||
|
||||
//Comprueba que el email introducido no esté registrado en la aplicación.
|
||||
$("#new_email").change(function(){
|
||||
var url = "../assets/php/common/checkEmail.php?email=" + $("#new_email").val();
|
||||
$.get(url, emailCheck);
|
||||
});
|
||||
|
||||
//Comprueba que la contraseña sea válida en base a los criterios de la aplicación.
|
||||
$("#new_pass").change(function(){
|
||||
const fieldPass = $("#new_pass");
|
||||
fieldPass[0].setCustomValidity("");
|
||||
const isPassValid = fieldPass[0].checkValidity();
|
||||
|
||||
if(fieldPass.val().length < 4){
|
||||
$("#passValid").hide();
|
||||
$("#passInvalid").hide();
|
||||
$("#passWarning").show();
|
||||
fieldPass[0].setCustomValidity("La contraseña debe contener almenos 4 caracteres.");
|
||||
}
|
||||
else if (isPassValid && passCheck(fieldPass.val())) {
|
||||
$("#passValid").show();
|
||||
$("#passInvalid").hide();
|
||||
$("#passWarning").hide();
|
||||
fieldPass[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#passValid").hide();
|
||||
$("#passInvalid").show();
|
||||
$("#passWarning").hide();
|
||||
fieldPass[0].setCustomValidity("La contraseña debe contener al menos 1 mayúscula y 1 número.");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//Comprueba que las contraseñas sean iguales.
|
||||
$("#repass").change(function(){
|
||||
const fieldPass = $("#new_pass");
|
||||
const fieldRepass = $("#repass");
|
||||
fieldRepass[0].setCustomValidity("");
|
||||
|
||||
if (Object.is(fieldPass.val(), fieldRepass.val())) {
|
||||
$("#repassValid").show();
|
||||
$("#repassInvalid").hide();
|
||||
fieldRepass[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#repassValid").hide();
|
||||
$("#repassInvalid").show();
|
||||
fieldRepass[0].setCustomValidity("Las contraseñas deben coincidir.");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//Muestra si el nombre de usuario introducido para el login existe o no.
|
||||
function userLoginCheck(data, status) {
|
||||
const fieldLogin = $("#name");
|
||||
fieldLogin[0].setCustomValidity("");
|
||||
|
||||
if(data === "!avaliable") {
|
||||
fieldLogin[0].setCustomValidity("");
|
||||
} else {
|
||||
fieldLogin[0].setCustomValidity("El nombre de usuario no está registrado.");
|
||||
}
|
||||
}
|
||||
|
||||
//Muestra si el nombre de usuario introducido es válido o no.
|
||||
function userCheck(data, status) {
|
||||
const fieldUser = $("#new_name");
|
||||
fieldUser[0].setCustomValidity("");
|
||||
|
||||
if(fieldUser.val().length < 3){
|
||||
$("#userValid").hide();
|
||||
$("#userInvalid").hide();
|
||||
$("#userWarning").show();
|
||||
fieldUser[0].setCustomValidity("El nombre de usuario debe tener almenos 3 caracteres.");
|
||||
}
|
||||
else if(data === "avaliable") {
|
||||
$("#userValid").show();
|
||||
$("#userInvalid").hide();
|
||||
$("#userWarning").hide();
|
||||
fieldUser[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#userValid").hide();
|
||||
$("#userInvalid").show();
|
||||
$("#userWarning").hide();
|
||||
fieldUser[0].setCustomValidity("El nombre de usuario ya está registrado.");
|
||||
}
|
||||
}
|
||||
|
||||
//Muestra si el email introducido es válido o no.
|
||||
function emailCheck(data, status) {
|
||||
const fieldEmail = $("#new_email");
|
||||
fieldEmail[0].setCustomValidity("");
|
||||
const isEmailValid = fieldEmail[0].checkValidity();
|
||||
|
||||
if(!isEmailValid){
|
||||
$("#emailValid").hide();
|
||||
$("#emailInvalid").show();
|
||||
}
|
||||
else if (data === "avaliable") {
|
||||
$("#emailValid").show();
|
||||
$("#emailInvalid").hide();
|
||||
fieldEmail[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#emailValid").hide();
|
||||
$("#emailInvalid").show();
|
||||
fieldEmail[0].setCustomValidity("El email ya está registrado.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Devuelve true si la contraseña cumple los reuqisitos de seguridad, false en caso contrario.
|
||||
function passCheck(pass) {
|
||||
return regExprPass.test(pass) ? true : false;
|
||||
}
|
||||
})
|
196
assets/js/checkPay.js
Normal file
@ -0,0 +1,196 @@
|
||||
/**
|
||||
* Práctica - Sistemas Web | Grupo D
|
||||
* CompluCine - FDI-cines
|
||||
*/
|
||||
|
||||
//Expresión regular para validar nombre y apellidos:
|
||||
const regExpr = /^([A-Za-zÁÉÍÓÚñáéíóúÑ]{0}?[A-Za-zÁÉÍÓÚñáéíóúÑ\']+[\s])+([A-Za-zÁÉÍÓÚñáéíóúÑ]{0}?[A-Za-zÁÉÍÓÚñáéíóúÑ\'])+[\s]?([A-Za-zÁÉÍÓÚñáéíóúÑ]{0}?[A-Za-zÁÉÍÓÚñáéíóúÑ\'])?$/g;
|
||||
|
||||
//Expresión regular para validar un código promocional:
|
||||
const regExprCode = /^0?[xX]?[0-9a-fA-F]*$/;
|
||||
|
||||
//Fecha acutal:
|
||||
const fecha = new Date();
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
//Iconos para validar el titular de la tarjeta:
|
||||
$("#cardNameValid").hide();
|
||||
$("#cardNameInvalid").hide();
|
||||
|
||||
//Iconos para validar el número de tarjeta:
|
||||
$("#carNumberValid").hide();
|
||||
$("#cardNumerInvalid").hide();
|
||||
|
||||
//Iconos para validar el CVV:
|
||||
$("#cvvValid").hide();
|
||||
$("#cvvInvalid").hide();
|
||||
|
||||
//Iconos para validar el código promocional:
|
||||
$("#codeValid").hide();
|
||||
$("#codeInvalid").hide();
|
||||
|
||||
//Iconos para validar el mes y año de expiración de la tarjeta:
|
||||
$("#dateValid").hide();
|
||||
$("#dateInvalid").hide();
|
||||
|
||||
|
||||
//Comprueba que el titular de la tarjeta es válido.
|
||||
$("#card-holder").change(function(){
|
||||
const cardHolder = $("#card-holder");
|
||||
cardHolder[0].setCustomValidity("");
|
||||
|
||||
if(cardHolder.val().length > 5 && !holderCheck(cardHolder.val())){
|
||||
$("#cardNameValid").show();
|
||||
$("#cardNameInvalid").hide();
|
||||
cardHolder[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#cardNameValid").hide();
|
||||
$("#cardNameInvalid").show();
|
||||
cardHolder[0].setCustomValidity("El titular de la tarjeta no es válido.");
|
||||
}
|
||||
});
|
||||
|
||||
//Comprueba que el NÚMERO de la tarjeta es válido.
|
||||
$("#card-number-0").change(function(){
|
||||
const cardNumber0 = $("#card-number-0");
|
||||
cardNumber0[0].setCustomValidity("");
|
||||
|
||||
if(cardNumber0.val().length === 4){
|
||||
$("#carNumberValid").show();
|
||||
$("#cardNumerInvalid").hide();
|
||||
cardNumber0[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#carNumberValid").hide();
|
||||
$("#cardNumerInvalid").show();
|
||||
cardNumber0[0].setCustomValidity("El número de tarjeta debe tener 16 dígitos.");
|
||||
}
|
||||
});
|
||||
$("#card-number-1").change(function(){
|
||||
const cardNumber1 = $("#card-number-1");
|
||||
cardNumber1[0].setCustomValidity("");
|
||||
|
||||
if(cardNumber1.val().length === 4){
|
||||
$("#carNumberValid").show();
|
||||
$("#cardNumerInvalid").hide();
|
||||
cardNumber1[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#carNumberValid").hide();
|
||||
$("#cardNumerInvalid").show();
|
||||
cardNumber1[0].setCustomValidity("El número de tarjeta debe tener 16 dígitos.");
|
||||
}
|
||||
});
|
||||
$("#card-number-2").change(function(){
|
||||
const cardNumber2 = $("#card-number-2");
|
||||
cardNumber2[0].setCustomValidity("");
|
||||
|
||||
if(cardNumber2.val().length === 4){
|
||||
$("#carNumberValid").show();
|
||||
$("#cardNumerInvalid").hide();
|
||||
cardNumber2[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#carNumberValid").hide();
|
||||
$("#cardNumerInvalid").show();
|
||||
cardNumber2[0].setCustomValidity("El número de tarjeta debe tener 16 dígitos.");
|
||||
}
|
||||
});
|
||||
$("#card-number-3").change(function(){
|
||||
const cardNumber3 = $("#card-number-3");
|
||||
cardNumber3[0].setCustomValidity("");
|
||||
|
||||
if(cardNumber3.val().length === 4){
|
||||
$("#carNumberValid").show();
|
||||
$("#cardNumerInvalid").hide();
|
||||
cardNumber3[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#carNumberValid").hide();
|
||||
$("#cardNumerInvalid").show();
|
||||
cardNumber3[0].setCustomValidity("El número de tarjeta debe tener 16 dígitos.");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//Comprueba que el CVV de la tarjeta es válido.
|
||||
$("#card-cvv").change(function(){
|
||||
const cvv = $("#card-cvv");
|
||||
cvv[0].setCustomValidity("");
|
||||
|
||||
if(cvv.val().length === 3){
|
||||
$("#cvvValid").show();
|
||||
$("#cvvInvalid").hide();
|
||||
cvv[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#cvvValid").hide();
|
||||
$("#cvvInvalid").show();
|
||||
cvv[0].setCustomValidity("El CVV debe tener 3 dígitos.");
|
||||
}
|
||||
});
|
||||
|
||||
//Comprueba que el mes de expiración de la tarjeta es válido.
|
||||
$("#card-expiration-month").change(function(){
|
||||
const month = $("#card-expiration-month");
|
||||
month[0].setCustomValidity("");
|
||||
|
||||
if(parseInt(month.val()) > parseInt(fecha.getMonth())){
|
||||
$("#dateValid").show();
|
||||
$("#dateInvalid").hide();
|
||||
month[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#dateValid").hide();
|
||||
$("#dateInvalid").show();
|
||||
month[0].setCustomValidity("El mes de expiración no es válido.");
|
||||
}
|
||||
});
|
||||
//Comprueba que el mes de expiración de la tarjeta es válido.
|
||||
$("#card-expiration-year").change(function(){
|
||||
const year = $("#card-expiration-year");
|
||||
year[0].setCustomValidity("");
|
||||
|
||||
if(parseInt(year.val()) >= parseInt(fecha.getFullYear())){
|
||||
$("#dateValid").show();
|
||||
$("#dateInvalid").hide();
|
||||
year[0].setCustomValidity("");
|
||||
} else {
|
||||
$("#dateValid").hide();
|
||||
$("#dateInvalid").show();
|
||||
year[0].setCustomValidity("El año de expiración no es válido.");
|
||||
}
|
||||
});
|
||||
|
||||
//Comprueba el código promocional introducido:
|
||||
$("#code").change(function(){
|
||||
var url = "../assets/php/common/checkPromo.php?code=" + $("#code").val();
|
||||
$.get(url, codeCheck);
|
||||
});
|
||||
|
||||
|
||||
//Devuelve true si el nombre y apellidos del titular son válidos, false en caso contrario.
|
||||
function holderCheck(name) {
|
||||
return regExpr.test(name) ? true : false;
|
||||
}
|
||||
|
||||
//Devuelve true si el código promocional es válido, false en caso contrario.
|
||||
function holderCheck(code) {
|
||||
return regExprCode.test(code) ? true : false;
|
||||
}
|
||||
|
||||
//Muestra si el código promocional introducido existe o no.
|
||||
function codeCheck(data, status) {
|
||||
const code = $("#code");
|
||||
code[0].setCustomValidity("");
|
||||
|
||||
if(code.val().length === 8 && data === "avaliable"){
|
||||
$("#codeValid").show();
|
||||
$("#codeInvalid").hide();
|
||||
code[0].setCustomValidity("");
|
||||
} else if(code.val().length > 0 && data === "!avaliable" ){
|
||||
$("#codeValid").hide();
|
||||
$("#codeInvalid").show();
|
||||
code[0].setCustomValidity("El código promocional no es válido.");
|
||||
} else if(code.val().length === 0 ){
|
||||
$("#codeValid").hide();
|
||||
$("#codeInvalid").hide();
|
||||
code[0].setCustomValidity("");
|
||||
}
|
||||
}
|
||||
});
|
13
assets/js/deleteConfirm.js
Normal file
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Práctica - Sistemas Web | Grupo D
|
||||
* CompluCine - FDI-cines
|
||||
*/
|
||||
|
||||
function confirmDelete(e) {
|
||||
if(confirm("¿Está seguro de que desea eliminar su cuenta de usuario?\nEsta acción no se puede deshacer.")){
|
||||
document.getElementById("formDeleteAccount1").submit();
|
||||
} else {
|
||||
//location.href = "./";
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
7
assets/js/goBack.js
Normal file
@ -0,0 +1,7 @@
|
||||
$(document).ready(function(){
|
||||
document.getElementById('go-back').addEventListener('click', function(event){
|
||||
event.preventDefault();
|
||||
history.back();
|
||||
//window.history.go(-1);
|
||||
});
|
||||
});
|
17
assets/js/goUp.js
Normal file
@ -0,0 +1,17 @@
|
||||
$(document).ready(function(){
|
||||
|
||||
$('.go-up').click(function(){
|
||||
$('body, html').animate({
|
||||
scrollTop: '0px'
|
||||
}, 300);
|
||||
});
|
||||
|
||||
$(window).scroll(function(){
|
||||
if( $(this).scrollTop() > 0 ){
|
||||
$('.go-up').slideDown(300);
|
||||
} else {
|
||||
$('.go-up').slideUp(300);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
4
assets/js/jquery-3.2.1.min.js
vendored
Normal file
87
assets/js/promotions.js
Normal file
@ -0,0 +1,87 @@
|
||||
/**
|
||||
* Práctica - Sistemas Web | Grupo D
|
||||
* CompluCine - FDI-cines
|
||||
*/
|
||||
|
||||
window.onload = function () {
|
||||
//Promociones:
|
||||
var promos = document.getElementById("promotions").value;
|
||||
const prefix = "../img/promos/";
|
||||
const IMAGENES = JSON.parse(promos);
|
||||
|
||||
const TIEMPO_INTERVALO_MILESIMAS_SEG = 3500;
|
||||
let posicionActual = 0;
|
||||
let $botonRetroceder = document.querySelector('#retroceder');
|
||||
let $botonAvanzar = document.querySelector('#avanzar');
|
||||
let $imagen = document.querySelector('.imagen');
|
||||
let $botonPlay = document.querySelector('#play');
|
||||
let $botonStop = document.querySelector('#stop');
|
||||
let intervalo;
|
||||
|
||||
// Funciones
|
||||
|
||||
/**
|
||||
* Funcion que cambia la foto en la siguiente posicion
|
||||
*/
|
||||
function pasarFoto() {
|
||||
if(posicionActual >= IMAGENES.length - 1) {
|
||||
posicionActual = 0;
|
||||
} else {
|
||||
posicionActual++;
|
||||
}
|
||||
renderizarImagen();
|
||||
}
|
||||
|
||||
/**
|
||||
* Funcion que cambia la foto en la anterior posicion
|
||||
*/
|
||||
function retrocederFoto() {
|
||||
if(posicionActual <= 0) {
|
||||
posicionActual = IMAGENES.length - 1;
|
||||
} else {
|
||||
posicionActual--;
|
||||
}
|
||||
renderizarImagen();
|
||||
}
|
||||
|
||||
/**
|
||||
* Funcion que actualiza la imagen de imagen dependiendo de posicionActual
|
||||
*/
|
||||
function renderizarImagen () {
|
||||
$imagen.style.backgroundImage = `url(${prefix+IMAGENES[posicionActual]})`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Activa el autoplay de la imagen
|
||||
*/
|
||||
function playIntervalo() {
|
||||
intervalo = setInterval(pasarFoto, TIEMPO_INTERVALO_MILESIMAS_SEG);
|
||||
// Desactivamos los botones de control
|
||||
//$botonAvanzar.setAttribute('disabled', true);
|
||||
//$botonRetroceder.setAttribute('disabled', true);
|
||||
$botonPlay.setAttribute('disabled', true);
|
||||
$botonStop.removeAttribute('disabled');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Para el autoplay de la imagen
|
||||
*/
|
||||
function stopIntervalo() {
|
||||
clearInterval(intervalo);
|
||||
// Activamos los botones de control
|
||||
$botonAvanzar.removeAttribute('disabled');
|
||||
$botonRetroceder.removeAttribute('disabled');
|
||||
$botonPlay.removeAttribute('disabled');
|
||||
$botonStop.setAttribute('disabled', true);
|
||||
}
|
||||
|
||||
// Eventos
|
||||
$botonAvanzar.addEventListener('click', pasarFoto);
|
||||
$botonRetroceder.addEventListener('click', retrocederFoto);
|
||||
$botonPlay.addEventListener('click', playIntervalo);
|
||||
$botonStop.addEventListener('click', stopIntervalo);
|
||||
// Iniciar
|
||||
renderizarImagen();
|
||||
playIntervalo();
|
||||
}
|
54
assets/js/selectTicket.js
Normal file
@ -0,0 +1,54 @@
|
||||
/**
|
||||
* Práctica - Sistemas Web | Grupo D
|
||||
* CompluCine - FDI-cines
|
||||
*/
|
||||
|
||||
// Método 1: recargar la página y enviar un GET.
|
||||
window.onload = function(){
|
||||
if(!select_cinema()) select_film();
|
||||
}
|
||||
|
||||
function select_cinema(){
|
||||
var select = document.getElementById("select_cinema");
|
||||
|
||||
if(select != undefined){
|
||||
select.onchange = function(){
|
||||
location.href += "&cinema=" + $('select[id=cinemas]').val();
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function select_film(){
|
||||
var select_ = document.getElementById("select_film");
|
||||
select_.onchange = function(){
|
||||
location.href += "&film=" + $('select[id=films]').val();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Método 2: enviar una petición AJAX con POST. ==> (NO FUNCIONA, PERO LA IDEA ERA HACERLO ASÍ PARA EVITAR REFRESCAR LA PÁGINA Y LLENAR LA URL)
|
||||
/*
|
||||
$(document).ready(function(){
|
||||
$("#select_cinema").change(function(){
|
||||
var cinema = $('select[id=cinemas]').val();
|
||||
//console.log($('select[id=cinemas]').val());
|
||||
|
||||
$.ajax({
|
||||
url : "index.php",
|
||||
type : "post",
|
||||
dataType : "html",
|
||||
data : "",
|
||||
success: function(response){
|
||||
$("#cinemas > option[value="+ cinema +"]").attr("selected", true);
|
||||
console.log(cinema);
|
||||
},
|
||||
error: function(response){
|
||||
console.log(response + ' ==> Error al seleccionar el cine')
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
*/
|
140
assets/js/sessionCalendar.js
Normal file
@ -0,0 +1,140 @@
|
||||
$(document).ready(function(){
|
||||
//Get the data that is going to be used as a filter for events
|
||||
var selectedFeed = $('#hall_selector').find(':selected').data('feed');
|
||||
|
||||
var modal = document.getElementById("myModal");
|
||||
var btn = document.getElementById("myBtn");
|
||||
var span = document.getElementsByClassName("close")[0];
|
||||
|
||||
var calendar = $('#calendar').fullCalendar({
|
||||
|
||||
header:{
|
||||
left:'prev,next,today',
|
||||
center:'title',
|
||||
right:'month,agendaWeek,agendaDay'
|
||||
},
|
||||
firstDay: 1,
|
||||
editable:true,
|
||||
fixedWeekCount: false,
|
||||
eventSources: [ selectedFeed ],
|
||||
selectable:true,
|
||||
selectHelper:true,
|
||||
timeFormat: 'H:mm',
|
||||
slotLabelFormat: 'H:mm',
|
||||
nowIndicator: true,
|
||||
allDaySlot: false,
|
||||
eventDurationEditable: false,
|
||||
|
||||
eventOverlap: function(stillEvent, movingEvent) {
|
||||
return (stillEvent.start_time > movingEvent.start_time && stillEvent.end < movingEvent.start_time)
|
||||
},
|
||||
//Add event/session function when u click in any non-event date. Prepares the form to be seen as such
|
||||
select: function(start, end, allDay)
|
||||
{
|
||||
$(modal).fadeIn();
|
||||
|
||||
var x = document.getElementById("film_group");
|
||||
x.style.display = "none";
|
||||
x = document.getElementById("film_list");
|
||||
x.style.display = "block";
|
||||
|
||||
document.getElementById("hall").value = document.getElementById("hall_selector").value;
|
||||
document.getElementById("startDate").value = $.fullCalendar.formatDate( start, "Y-MM-DD" );
|
||||
document.getElementById("endDate").value = $.fullCalendar.formatDate( end, "Y-MM-DD" );
|
||||
|
||||
document.getElementById("sumbit_new").style.display = "block";
|
||||
document.getElementById("edit_inputs").style.display = "none";
|
||||
},
|
||||
//Edit only the date/hour start of an event/session when u click,drag and drop an event.
|
||||
eventDrop:function(event)
|
||||
{
|
||||
var e = {
|
||||
"newDate" : $.fullCalendar.formatDate(event.start, "Y-MM-DD HH:mm:ss"),
|
||||
"idhall": document.getElementById("hall").value,
|
||||
"startHour":event.start_time,
|
||||
"startDate":event.date,
|
||||
"price": event.seat_price,
|
||||
"idfilm": event.film_id,
|
||||
"format": event.format,
|
||||
};
|
||||
console.log(event);
|
||||
$.ajax({
|
||||
url:"eventsProcess.php?drop=true",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
dataType: "json",
|
||||
type:"PUT",
|
||||
data:JSON.stringify(e),
|
||||
success: function(data) {
|
||||
alert("El evento se ha desplazado correctamente");
|
||||
calendar.fullCalendar('refetchEvents');
|
||||
},
|
||||
error: function(data) {
|
||||
alert("Ha habido un error al desplazar el evento");
|
||||
},
|
||||
});
|
||||
},
|
||||
//Edit event/session function when u click an event. Prepares the form to be seen as such
|
||||
eventClick:function(event)
|
||||
{
|
||||
$(modal).fadeIn();
|
||||
console.log(event);
|
||||
var x = document.getElementById("film_group");
|
||||
x.style.display = "block";
|
||||
|
||||
x = document.getElementById("film_list");
|
||||
x.style.display = "none";
|
||||
|
||||
document.getElementById("hall").value = document.getElementById("hall_selector").value;
|
||||
document.getElementById("startDate").value = $.fullCalendar.formatDate( event.start, "Y-MM-DD" );
|
||||
document.getElementById("endDate").value = $.fullCalendar.formatDate( event.end, "Y-MM-DD" );
|
||||
document.getElementById("price").value = event.seat_price;
|
||||
document.getElementById("format").value = event.format;
|
||||
document.getElementById("startHour").value = event.start_time;
|
||||
|
||||
document.getElementById("original_hall").value = document.getElementById("hall_selector").value;
|
||||
document.getElementById("original_start_time").value = event.start_time;
|
||||
document.getElementById("original_date").value = $.fullCalendar.formatDate( event.start, "Y-MM-DD" );
|
||||
|
||||
document.getElementById("film_title").innerHTML = event.title;
|
||||
document.getElementById("film_lan").innerHTML = event.film_lan;
|
||||
document.getElementById("film_dur").innerHTML = event.film_dur+" min";
|
||||
document.getElementById("film_img").src = "../img/films/"+event.film_img;
|
||||
document.getElementById("film_id").value = event.film_id;
|
||||
document.getElementById("sumbit_new").style.display = "none";
|
||||
document.getElementById("edit_inputs").style.display = "grid";
|
||||
|
||||
},
|
||||
|
||||
});
|
||||
//Once the filter changes, do the changes needed so full calendar research the events with the new hall
|
||||
$('#hall_selector').change(onSelectChangeFeed);
|
||||
|
||||
function onSelectChangeFeed() {
|
||||
var feed = $(this).find(':selected').data('feed');
|
||||
$('#calendar').fullCalendar('removeEventSource', selectedFeed);
|
||||
$('#calendar').fullCalendar('addEventSource', feed);
|
||||
selectedFeed = feed;
|
||||
};
|
||||
|
||||
//When u click on the X the form closes. If the user close it because the operation has been complete. Restart the form correctly
|
||||
span.onclick = function() {
|
||||
formout();
|
||||
}
|
||||
|
||||
function formout(){
|
||||
$(modal).fadeOut(100,function(){
|
||||
var success = document.getElementById("success");
|
||||
if(success){
|
||||
calendar.fullCalendar('refetchEvents');
|
||||
$(".alert").remove();
|
||||
document.getElementById("session_form").style.display = "block";
|
||||
document.getElementById("price").value = "";
|
||||
document.getElementById("format").value = "";
|
||||
document.getElementById("film_id").value = "";
|
||||
document.getElementById("startHour").value ="";
|
||||
}
|
||||
$(".form_group").removeClass("has_error");
|
||||
$(".help_block").remove();
|
||||
});
|
||||
}
|
||||
});
|
207
assets/js/sessionFormProcess.js
Normal file
@ -0,0 +1,207 @@
|
||||
$(document).ready(function () {
|
||||
|
||||
//New session
|
||||
$('#sumbit_new').click( function(e) {
|
||||
$(".form_group").removeClass("has_error");
|
||||
$(".help_block").remove();
|
||||
|
||||
var formData = {
|
||||
price: $("#price").val(),
|
||||
format: $("#format").val(),
|
||||
hall: $("#hall").val(),
|
||||
startDate: $("#startDate").val(),
|
||||
endDate: $("#endDate").val(),
|
||||
startHour: $("#startHour").val(),
|
||||
idFilm: $("#film_id").val(),
|
||||
};
|
||||
console.log(formData);
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url:"eventsProcess.php",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
dataType: "json",
|
||||
data:JSON.stringify(formData),
|
||||
encode: true,
|
||||
}).done(function (data) {
|
||||
checkErrors(data,"session_form");
|
||||
})
|
||||
.fail(function (jqXHR, textStatus) {
|
||||
$("form#session_form").html(
|
||||
'<div class="alert alert_danger">Could not reach server, please try again later. '+textStatus+'</div>'
|
||||
);
|
||||
});
|
||||
e.preventDefault();
|
||||
});
|
||||
//Edit session
|
||||
$('#sumbit_edit').click( function(e) {
|
||||
$(".form_group").removeClass("has_error");
|
||||
$(".help_block").remove();
|
||||
|
||||
|
||||
var formData = {
|
||||
price: $("#price").val(),
|
||||
format: $("#format").val(),
|
||||
hall: $("#hall").val(),
|
||||
startDate: $("#startDate").val(),
|
||||
endDate: $("#endDate").val(),
|
||||
startHour: $("#startHour").val(),
|
||||
idFilm: $("#film_id").val(),
|
||||
og_hall: $("#original_hall").val(),
|
||||
og_date: $("#original_date").val(),
|
||||
og_start: $("#original_start_time").val(),
|
||||
};
|
||||
console.log(formData);
|
||||
|
||||
$.ajax({
|
||||
type: "PUT",
|
||||
url:"eventsProcess.php",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
dataType: "json",
|
||||
data:JSON.stringify(formData),
|
||||
encode: true,
|
||||
}).done(function (data) {
|
||||
checkErrors(data,"session_form");
|
||||
})
|
||||
.fail(function (jqXHR, textStatus) {
|
||||
$("form#session_form").html(
|
||||
'<div class="alert alert_danger">Could not reach server, please try again later. '+textStatus+'</div>'
|
||||
);
|
||||
});
|
||||
e.preventDefault();
|
||||
});
|
||||
//Delete Session
|
||||
$('#submit_del').click( function(e) {
|
||||
$(".form_group").removeClass("has_error");
|
||||
$(".help_block").remove();
|
||||
|
||||
if(confirm("¿Seguro que quieres eliminar esta sesión?")){
|
||||
var formData = {
|
||||
og_hall: $("#original_hall").val(),
|
||||
og_date: $("#original_date").val(),
|
||||
og_start: $("#original_start_time").val(),
|
||||
};
|
||||
console.log(formData);
|
||||
|
||||
$.ajax({
|
||||
type: "DELETE",
|
||||
url:"eventsProcess.php",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
dataType: "json",
|
||||
data:JSON.stringify(formData),
|
||||
encode: true,
|
||||
}).done(function (data) {
|
||||
checkErrors(data,"session_form")
|
||||
})
|
||||
.fail(function (jqXHR, textStatus) {
|
||||
$("form#session_form").html(
|
||||
'<div class="alert alert_danger">Could not reach server, please try again later. '+textStatus+'</div>'
|
||||
);
|
||||
});
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
function checkErrors(data,formname) {
|
||||
if (!data.success) {
|
||||
if (data.errors.price) {
|
||||
$("#price_group").addClass("has_error");
|
||||
$("#price_group").append(
|
||||
'<div class="help_block">' + data.errors.price + "</div>"
|
||||
);
|
||||
}
|
||||
if (data.errors.format) {
|
||||
$("#format_group").addClass("has_error");
|
||||
$("#format_group").append(
|
||||
'<div class="help_block">' + data.errors.format + "</div>"
|
||||
);
|
||||
}
|
||||
if (data.errors.hall) {
|
||||
$("#hall_group").addClass("has_error");
|
||||
$("#hall_group").append(
|
||||
'<div class="help_block">' + data.errors.hall + "</div>"
|
||||
);
|
||||
}
|
||||
if (data.errors.startDate) {
|
||||
$("#date_group").addClass("has_error");
|
||||
$("#date_group").append(
|
||||
'<div class="help_block">' + data.errors.startDate + "</div>"
|
||||
);
|
||||
}
|
||||
if (data.errors.startDate) {
|
||||
$("#date_group").addClass("has_error");
|
||||
$("#date_group").append(
|
||||
'<div class="help_block">' + data.errors.endDate + "</div>"
|
||||
);
|
||||
}
|
||||
if (data.errors.date) {
|
||||
$("#date_group").addClass("has_error");
|
||||
$("#date_group").append(
|
||||
'<div class="help_block">' + data.errors.date + "</div>"
|
||||
);
|
||||
}
|
||||
if (data.errors.startHour) {
|
||||
$("#hour_group").addClass("has_error");
|
||||
$("#hour_group").append(
|
||||
'<div class="help_block">' + data.errors.startHour + "</div>"
|
||||
);
|
||||
}
|
||||
if (data.errors.idfilm) {
|
||||
$("#film_msg_group").addClass("has_error");
|
||||
$("#film_msg_group").append(
|
||||
'<div class="help_block">' + data.errors.idfilm + "</div>"
|
||||
);
|
||||
}
|
||||
if (data.errors.global) {
|
||||
$("#global_group").addClass("has_error");
|
||||
$("#global_group").append(
|
||||
'<div class="help_block">' + data.errors.global + "</div>"
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$("#operation_msg").addClass("has_no_error");
|
||||
$("#operation_msg").append(
|
||||
'<div class="alert alert_success" id="success">' + data.message + "</div>"
|
||||
);
|
||||
document.getElementById("session_form").style.display = "none";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Change the view from the film list to a concrete film with some data about it
|
||||
$('.film_button').bind('click', function(e) {
|
||||
var id = $(this).attr('id');
|
||||
|
||||
var x = document.getElementById("film_group");
|
||||
x.style.display = "block";
|
||||
|
||||
var tittle = document.getElementById("title"+id);
|
||||
document.getElementById("film_title").innerHTML = tittle.innerHTML;
|
||||
|
||||
var lan = document.getElementById("lan"+id);
|
||||
document.getElementById("film_lan").innerHTML = lan.value;
|
||||
|
||||
var dur = document.getElementById("dur"+id);
|
||||
document.getElementById("film_dur").innerHTML = dur.innerHTML;
|
||||
|
||||
var img = document.getElementById("img"+id);
|
||||
document.getElementById("film_img").src = "../img/films/"+img.value;
|
||||
|
||||
var idf = document.getElementById("id"+id);
|
||||
document.getElementById("film_id").value = idf.value;
|
||||
|
||||
x = document.getElementById("film_list")
|
||||
x.style.display = "none";
|
||||
|
||||
|
||||
});
|
||||
//Change the view from the concrete film data to a film list with all available films
|
||||
$('#return').click( function() {
|
||||
var x = document.getElementById("film_group");
|
||||
x.style.display = "none";
|
||||
|
||||
x = document.getElementById("film_list");
|
||||
x.style.display = "block";
|
||||
});
|
||||
|
||||
});
|
1057
assets/mysql/complucine.sql
Normal file
319
assets/mysql/complucineEmpty.sql
Normal file
@ -0,0 +1,319 @@
|
||||
-- phpMyAdmin SQL Dump
|
||||
-- version 4.6.6deb5
|
||||
-- https://www.phpmyadmin.net/
|
||||
--
|
||||
-- Servidor: localhost:3306
|
||||
-- Tiempo de generación: 02-06-2021 a las 21:03:55
|
||||
-- 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;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- 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;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- 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;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- 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;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- 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',
|
||||
`img` varchar(60) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- 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;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- 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;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- 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';
|
||||
|
||||
--
|
||||
-- Í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`,`idcinema`) USING BTREE,
|
||||
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=8;
|
||||
--
|
||||
-- AUTO_INCREMENT de la tabla `film`
|
||||
--
|
||||
ALTER TABLE `film`
|
||||
MODIFY `id` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;
|
||||
--
|
||||
-- AUTO_INCREMENT de la tabla `hall`
|
||||
--
|
||||
ALTER TABLE `hall`
|
||||
MODIFY `number` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
|
||||
--
|
||||
-- AUTO_INCREMENT de la tabla `promotion`
|
||||
--
|
||||
ALTER TABLE `promotion`
|
||||
MODIFY `id` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
|
||||
--
|
||||
-- AUTO_INCREMENT de la tabla `session`
|
||||
--
|
||||
ALTER TABLE `session`
|
||||
MODIFY `id` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=191;
|
||||
--
|
||||
-- AUTO_INCREMENT de la tabla `users`
|
||||
--
|
||||
ALTER TABLE `users`
|
||||
MODIFY `id` int(15) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=114;
|
||||
--
|
||||
-- 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 */;
|
1
assets/mysql/createComplucine.sql
Normal file
@ -0,0 +1 @@
|
||||
CREATE DATABASE IF NOT EXISTS complucine DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
|
39
assets/php/HTMLtemplate.php
Normal file
@ -0,0 +1,39 @@
|
||||
<!--
|
||||
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();
|
||||
?>
|
||||
|
||||
<!-- Scripts -->
|
||||
<?php
|
||||
$template->print_scripts();
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
138
assets/php/aplication.php
Normal 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;
|
||||
}
|
||||
}
|
6
assets/php/common/changeCSS.php
Normal file
@ -0,0 +1,6 @@
|
||||
<?php
|
||||
include('../../../assets/php/config.php');
|
||||
|
||||
if($_GET["css"] === "main.css") $_SESSION["css"] = "main.css";
|
||||
else if($_GET["css"] === "highContrast.css") $_SESSION["css"] = "highContrast.css";
|
||||
?>
|
15
assets/php/common/checkEmail.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
include('../../../assets/php/config.php');
|
||||
include('../includes/user_dao.php');
|
||||
|
||||
$bd = new UserDAO('complucine');
|
||||
if($bd){
|
||||
$user = $bd->selectUserEmail(strtolower($_GET["email"]));
|
||||
if ($user->data_seek(0)) {
|
||||
echo "!avaliable";
|
||||
}
|
||||
else{
|
||||
echo "avaliable";
|
||||
}
|
||||
}
|
||||
?>
|
15
assets/php/common/checkPromo.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
include('../../../assets/php/config.php');
|
||||
include('../includes/promotion_dao.php');
|
||||
|
||||
$bd = new Promotion_DAO('complucine');
|
||||
if($bd){
|
||||
$promo = $bd->GetPromotionObj($_GET["code"]);
|
||||
if ($promo && $promo->getActive()) {
|
||||
echo "avaliable";
|
||||
}
|
||||
else{
|
||||
echo "!avaliable";
|
||||
}
|
||||
}
|
||||
?>
|
15
assets/php/common/checkUser.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
include('../../../assets/php/config.php');
|
||||
include('../includes/user_dao.php');
|
||||
|
||||
$bd = new UserDAO('complucine');
|
||||
if($bd){
|
||||
$user = $bd->selectUserName(strtolower($_GET["user"]));
|
||||
if ($user->data_seek(0)) {
|
||||
echo "!avaliable";
|
||||
}
|
||||
else{
|
||||
echo "avaliable";
|
||||
}
|
||||
}
|
||||
?>
|
32
assets/php/common/cinema.php
Normal 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; }
|
||||
}
|
||||
?>
|
77
assets/php/common/cinema_dao.php
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,37 +1,39 @@
|
||||
<?php
|
||||
include_once('film_dto_interface.php');
|
||||
|
||||
class Film_DTO implements FilmDTO {
|
||||
|
||||
//Attributes:
|
||||
private $_id; //Film ID.
|
||||
private $_tittle; //Film tittle.
|
||||
private $_duration; //Film duration.
|
||||
private $_language; //Film language.
|
||||
private $_description; //Film description.
|
||||
|
||||
|
||||
//Constructor:
|
||||
function __construct($id, $tittle, $duration, $language, $description){
|
||||
$this->_id = $id;
|
||||
$this->_tittle = $tittle;
|
||||
$this->_duration = $duration;
|
||||
$this->_language = $language;
|
||||
$this->_description = $description;
|
||||
}
|
||||
|
||||
//Methods:
|
||||
|
||||
//Getters && Setters:
|
||||
public function setId($id){ $this->_id = $id; }
|
||||
public function getId(){ return $this->_id; }
|
||||
public function setTittle($tittle) {$this->_tittle = $tittle; }
|
||||
public function getTittle(){return $this->_tittle;}
|
||||
public function setDuration($duration){$this->_duration = $duration; }
|
||||
public function getDuration() {return $this->_duration;}
|
||||
public function setLanguage($language) {$this->_language = $language; }
|
||||
public function getLanguage(){return $this->_language;}
|
||||
public function setDescription($description){ $this->_description = $description;}
|
||||
public function getDescription(){return $this->_description;}
|
||||
}
|
||||
<?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;}
|
||||
}
|
||||
?>
|
@ -1,8 +1,5 @@
|
||||
<?php
|
||||
include_once('film_dto.php');
|
||||
$template = new Template();
|
||||
$prefix = $template->get_prefix();
|
||||
include_once($prefix.'assets/php/dao.php');
|
||||
include_once('film.php');
|
||||
|
||||
class Film_DAO extends DAO {
|
||||
|
||||
@ -14,10 +11,10 @@
|
||||
//Methods:
|
||||
|
||||
//Create a new Session.
|
||||
public function createFilm($id, $tittle, $duration, $language,$description){
|
||||
$sql = sprintf( "INSERT INTO `film`( `id`, `tittle`, `duration`, `language`,`description`)
|
||||
VALUES ( '%d', '%s', '%d', '%s','%s')",
|
||||
$id, $tittle, $duration, $language,$description);
|
||||
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;
|
||||
@ -43,7 +40,7 @@
|
||||
$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"]);
|
||||
$films[] = $this->loadFilm($fila["id"], $fila["tittle"], $fila["duration"], $fila["language"], $fila["description"], $fila["img"]);
|
||||
}
|
||||
$resul->free();
|
||||
return $films;
|
||||
@ -83,10 +80,10 @@
|
||||
}
|
||||
|
||||
//Edit a film.
|
||||
public function editFilm($id, $tittle, $duration, $language,$description){
|
||||
$sql = sprintf( "UPDATE film SET tittle = '%s' , duration = '%d', language ='%s' , description ='%s'
|
||||
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, $id);
|
||||
$tittle, $duration, $language, $description, $img, $id);
|
||||
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
@ -94,8 +91,8 @@
|
||||
}
|
||||
|
||||
//Create a new film Data Transfer Object.
|
||||
public function loadFilm($id, $tittle, $duration, $language,$description){
|
||||
return new Film_DTO( $id, $tittle, $duration, $language,$description);
|
||||
public function loadFilm($id, $tittle, $duration, $language,$description, $img){
|
||||
return new Film( $id, $tittle, $duration, $language,$description, $img);
|
||||
}
|
||||
|
||||
}
|
126
assets/php/common/formUploadFiles.php
Normal file
@ -0,0 +1,126 @@
|
||||
<?php
|
||||
require_once('../assets/php/form.php');
|
||||
|
||||
class FormUploadFiles 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('enctype' => 'multipart/form-data');
|
||||
parent::__construct('formUploadFiles', $options);
|
||||
}
|
||||
|
||||
protected function generaCamposFormulario($datos, $errores = array()) {
|
||||
|
||||
// Se generan los mensajes de error si existen.
|
||||
$htmlErroresGlobales = self::generaListaErroresGlobales($errores);
|
||||
$errorFile = self::createMensajeError($errores, 'archivo', 'span', array('class' => 'error'));
|
||||
|
||||
foreach($datos as $key => $value){
|
||||
$dats = $key." ".$value." ";
|
||||
}
|
||||
|
||||
// Se genera el HTML asociado a los campos del formulario y los mensajes de error.
|
||||
$html = '
|
||||
<div class="file">
|
||||
<label for="file">Imagen:</label><input type="file" name="file" id="file" /><pre>'.$htmlErroresGlobales.'</pre>
|
||||
</div>
|
||||
<input type="submit" id="submit" value="Subir" class="primary" /><pre>'.$errorFile.'</pre>
|
||||
';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
protected function procesaFormulario($datos) {
|
||||
// Solo se pueden definir arrays como constantes en PHP >= 5.6
|
||||
global $ALLOWED_EXTENSIONS;
|
||||
|
||||
$result = array();
|
||||
$ok = count($_FILES) == 1 && $_FILES['archivo']['error'] == UPLOAD_ERR_OK;
|
||||
|
||||
if ( $ok ) {
|
||||
$archivo = $_FILES['archivo'];
|
||||
$nombre = $_FILES['archivo']['name'];
|
||||
/* 1.a) Valida el nombre del archivo */
|
||||
$ok = $this->check_file_uploaded_name($nombre) && $this->check_file_uploaded_length($nombre) ;
|
||||
/* 1.b) Sanitiza el nombre del archivo
|
||||
$ok = sanitize_file_uploaded_name($nombre);
|
||||
*/
|
||||
/* 1.c) Utilizar un id de la base de datos como nombre de archivo */
|
||||
|
||||
/* 2. comprueba si la extensión está permitida*/
|
||||
$ok = $ok && in_array(pathinfo($nombre, PATHINFO_EXTENSION), $ALLOWED_EXTENSIONS);
|
||||
|
||||
/* 3. comprueba el tipo mime del archivo correspode a una imagen image/* */
|
||||
$finfo = finfo_open(FILEINFO_MIME_TYPE);
|
||||
$mimeType = finfo_file($finfo, $_FILES['archivo']['tmp_name']);
|
||||
$ok = preg_match('/image\/*./', $mimeType);
|
||||
finfo_close($finfo);
|
||||
|
||||
if ( $ok ) {
|
||||
$tmp_name = $_FILES['archivo']['tmp_name'];
|
||||
|
||||
if ( !move_uploaded_file($tmp_name, FILMS_DIR.$nombre) ) {
|
||||
$result[] = 'Error al mover el archivo';
|
||||
}
|
||||
|
||||
// 4. Si fuese necesario guardar en la base de datos la ruta relativa $nombre del archivo
|
||||
//return "index.php#img=".urlencode('img/'.$nombre);
|
||||
} else {
|
||||
$result["errorFile"] = 'El archivo tiene un nombre o tipo no soportado';
|
||||
}
|
||||
} else {
|
||||
$result[] = 'Error al subir el archivo.';
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check $_FILES[][name]
|
||||
*
|
||||
* @param (string) $filename - Uploaded file name.
|
||||
* @author Yousef Ismaeil Cliprz
|
||||
* @See http://php.net/manual/es/function.move-uploaded-file.php#111412
|
||||
*/
|
||||
protected function check_file_uploaded_name ($filename) {
|
||||
return (bool) ((mb_ereg_match('/^[0-9A-Z-_\.]+$/i',$filename) === 1) ? true : false );
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanitize $_FILES[][name]. Remove anything which isn't a word, whitespace, number
|
||||
* or any of the following caracters -_~,;[]().
|
||||
*
|
||||
* If you don't need to handle multi-byte characters you can use preg_replace
|
||||
* rather than mb_ereg_replace.
|
||||
*
|
||||
* @param (string) $filename - Uploaded file name.
|
||||
* @author Sean Vieira
|
||||
* @see http://stackoverflow.com/a/2021729
|
||||
*/
|
||||
protected function sanitize_file_uploaded_name($filename) {
|
||||
/* Remove anything which isn't a word, whitespace, number
|
||||
* or any of the following caracters -_~,;[]().
|
||||
* If you don't need to handle multi-byte characters
|
||||
* you can use preg_replace rather than mb_ereg_replace
|
||||
* Thanks @Łukasz Rysiak!
|
||||
*/
|
||||
$newName = mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $filename);
|
||||
// Remove any runs of periods (thanks falstro!)
|
||||
$newName = mb_ereg_replace("([\.]{2,})", '', $newName);
|
||||
|
||||
return $newName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check $_FILES[][name] length.
|
||||
*
|
||||
* @param (string) $filename - Uploaded file name.
|
||||
* @author Yousef Ismaeil Cliprz.
|
||||
* @See http://php.net/manual/es/function.move-uploaded-file.php#111412
|
||||
*/
|
||||
protected function check_file_uploaded_length ($filename) {
|
||||
return (bool) ((mb_strlen($filename,'UTF-8') < 250) ? true : false);
|
||||
}
|
||||
}
|
||||
?>
|
103
assets/php/common/hall.php
Normal 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; }
|
||||
|
||||
}
|
||||
?>
|
96
assets/php/common/hall_dao.php
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
35
assets/php/common/manager.php
Normal 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;}
|
||||
|
||||
}
|
||||
?>
|
77
assets/php/common/manager_dao.php
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
36
assets/php/common/promotion.php
Normal 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;}
|
||||
|
||||
}
|
||||
?>
|
77
assets/php/common/promotion_dao.php
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
11
assets/php/common/reRol.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
include('../config.php');
|
||||
function reRol(){
|
||||
if(isset($_SESSION["lastRol"])){
|
||||
$_SESSION["rol"] = $_SESSION["lastRol"];
|
||||
unset($_SESSION["lastRol"]);
|
||||
}
|
||||
}
|
||||
reRol();
|
||||
header("Location: /");
|
||||
?>
|
13
assets/php/common/resetRol.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
include('../config.php');
|
||||
function reRol(){
|
||||
if(isset($_SESSION["lastRol"])){
|
||||
$_SESSION["rol"] = $_SESSION["lastRol"];
|
||||
unset($_SESSION["lastRol"]);
|
||||
unset($_SESSION["cinema"]);
|
||||
}
|
||||
}
|
||||
reRol();
|
||||
$redirect = ROUTE_APP.'panel_'.$_SESSION['rol'];
|
||||
header("Location: {$redirect}");
|
||||
?>
|
63
assets/php/common/seat.php
Normal 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; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
?>
|
58
assets/php/common/seat_dao.php
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
118
assets/php/common/session.php
Normal 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; }
|
||||
|
||||
}
|
||||
?>
|
@ -1,6 +1,5 @@
|
||||
<?php
|
||||
require_once('../assets/php/dao.php');
|
||||
include_once('session_dto.php');
|
||||
include_once('session.php');
|
||||
|
||||
class SessionDAO extends DAO {
|
||||
//Constructor:
|
||||
@ -14,9 +13,9 @@
|
||||
$date = date('Y-m-d', strtotime( $date ) );
|
||||
$startTime = date('H:i:s', strtotime( $startTime ) );
|
||||
|
||||
$sql = sprintf( "INSERT INTO `session` (`id`, `idfilm`, `idhall`, `idcinema`, `date`, `start_time`, `seat_price`, `format`)
|
||||
VALUES ('%d', '%d', '%d', '%d', '%s', '%s', '%d', '%s')",
|
||||
$id, $idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format);
|
||||
$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');
|
||||
|
||||
@ -28,47 +27,56 @@
|
||||
$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;
|
||||
}
|
||||
|
||||
//Returns the count of the session searched
|
||||
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 COUNT(*) FROM session WHERE
|
||||
$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 = null;
|
||||
$session = mysqli_fetch_array($resul);
|
||||
|
||||
mysqli_free_result($resul);
|
||||
|
||||
return $session[0];
|
||||
return $session;
|
||||
}
|
||||
|
||||
//Returns a query to get all the session's data.
|
||||
public function getAllSessionsFromACinemaHallDate($cinema, $hall, $date){
|
||||
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'",
|
||||
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"]);
|
||||
$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){
|
||||
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 ) );
|
||||
@ -78,7 +86,7 @@
|
||||
`start_time` = '%s', `seat_price` = '%d', `format` = '%s'
|
||||
WHERE
|
||||
idcinema = '%s' AND idhall = '%s' AND date = '%s' AND start_time = '%s'",
|
||||
$idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format, $_SESSION["cinema"],$_SESSION["hall"],$_SESSION["date"],$_SESSION["start"]);
|
||||
$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');
|
||||
|
||||
@ -97,8 +105,8 @@
|
||||
}
|
||||
|
||||
//Create a new Session Data Transfer Object.
|
||||
public function loadSession( $id, $idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format){
|
||||
return new SessionDTO( $id, $idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format);
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
<?php
|
||||
include_once('users_dto_interface.php');
|
||||
|
||||
class UserDTO implements UsersInterface {
|
||||
class User {
|
||||
|
||||
//Attributes:
|
||||
private $_id; //User Id.
|
@ -1,6 +1,5 @@
|
||||
<?php
|
||||
require_once('../assets/php/dao.php');
|
||||
include_once('user_dto.php');
|
||||
include_once('user.php');
|
||||
|
||||
class UserDAO extends DAO {
|
||||
|
||||
@ -31,6 +30,19 @@
|
||||
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);
|
||||
@ -39,7 +51,7 @@
|
||||
VALUES ( '%s', '%s', '%s', '%s', '%s')",
|
||||
$id, $username, $email, $password, $rol );
|
||||
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
$resul = mysqli_query($this->mysqli, $sql);
|
||||
|
||||
return $resul;
|
||||
}
|
||||
@ -47,11 +59,13 @@
|
||||
//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) or die ('Error into query database');
|
||||
$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']);
|
||||
@ -64,22 +78,78 @@
|
||||
return $user;
|
||||
}
|
||||
|
||||
//Returns a query to check if the user pass matches.
|
||||
public function selectPass($username, $password){
|
||||
$username = $this->mysqli->real_escape_string($username);
|
||||
$password = $this->mysqli->real_escape_string($password);
|
||||
$password = $this->encryptPass($password);
|
||||
|
||||
$sql = sprintf( "SELECT * FROM users WHERE username = '%s' AND passwd = '%s'", $username, $password);
|
||||
//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 $this->mysqli->query($sql);
|
||||
return $resul;
|
||||
}
|
||||
|
||||
//Returns a query to get the user's data.
|
||||
public function userData($id){
|
||||
$sql = sprintf( "SELECT * FROM users WHERE id = '%d'", $id );
|
||||
//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;
|
||||
}
|
||||
|
||||
//Search a user by email.
|
||||
public function selectUserEmail($email){
|
||||
$email = $this->mysqli->real_escape_string($email);
|
||||
|
||||
$sql = sprintf( "SELECT * FROM users WHERE email = '%s'", $email );
|
||||
$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;
|
||||
@ -87,7 +157,7 @@
|
||||
|
||||
//Create a new User Data Transfer Object.
|
||||
public function loadUser($id, $username, $email, $password, $rol){
|
||||
return new UserDTO($id, $username, $email, $password, $rol);
|
||||
return new User($id, $username, $email, $password, $rol);
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,37 @@
|
||||
<?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', RAIZ_APP.'/img/films/');
|
||||
define('FILMS_DIR_PROTECTED', dirname(RAIZ_APP).'/img/films/tmp/');
|
||||
define('USER_PICS', ROUTE_APP.'img/users/');
|
||||
|
||||
/**
|
||||
* Allowed extensions for image files.
|
||||
*/
|
||||
$ALLOWED_EXTENSIONS = array('gif','jpg','jpe','jpeg','png');
|
||||
|
||||
/**
|
||||
* 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();
|
||||
|
||||
@ -6,4 +39,18 @@
|
||||
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'));
|
||||
?>
|
||||
|
@ -1,37 +1,23 @@
|
||||
<?php
|
||||
// TO-DO: Completar
|
||||
class DAO {
|
||||
//Constants:
|
||||
private const _SERVERNAME = "";
|
||||
private const _USERNAME = "";
|
||||
private const _PASSWORD = "";
|
||||
private const _BD = "";
|
||||
|
||||
//Atributes:
|
||||
public $mysqli;
|
||||
|
||||
//Constructor:
|
||||
public function __construct($bd_name){
|
||||
if($bd_name == null) $bd_name = self::_BD;
|
||||
try{
|
||||
if (!$this->mysqli) {
|
||||
$this->mysqli = new mysqli(self::_SERVERNAME, self::_USERNAME,
|
||||
self::_PASSWORD, $bd_name);
|
||||
}
|
||||
// echo "Conexión a la BD, satisfactoria.";
|
||||
} catch (Exception $e){
|
||||
echo "Error de conexión a la BD: ". mysqli_connect_error();
|
||||
exit();
|
||||
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:
|
||||
//Destructor (Ya no es necesdario):
|
||||
/*
|
||||
public function __destruct(){
|
||||
$this->mysqli->close();
|
||||
}
|
||||
*/
|
||||
|
||||
//Methods:
|
||||
}
|
||||
?>
|
||||
?>
|
@ -1,225 +1,97 @@
|
||||
<?php
|
||||
|
||||
class Form {
|
||||
/**
|
||||
* Sufijo para el nombre del parámetro de la sesión del usuario donde se almacena el token CSRF.
|
||||
*/
|
||||
const CSRF_PARAM = 'csrf';
|
||||
* 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 {
|
||||
|
||||
/**
|
||||
* Cadena utilizada como valor del atributo "id" de la etiqueta <form> asociada al formulario y como parámetro a comprobar para verificar que el usuario ha enviado el formulario.
|
||||
*/
|
||||
private $formId;
|
||||
|
||||
private $ajax;
|
||||
|
||||
/**
|
||||
* URL asociada al atributo "action" de la etiqueta <form> del fomrulario y que procesará el envío del formulario.
|
||||
*/
|
||||
private $action;
|
||||
|
||||
/**
|
||||
* Valor del atributo "class" de la etiqueta <form> asociada al formulario. Si este parámetro incluye la cadena "nocsrf" no se generá el token CSRF para este formulario.
|
||||
*/
|
||||
private $classAtt;
|
||||
|
||||
/**
|
||||
* Valor del parámetro enctype del formulario.
|
||||
*/
|
||||
private $enctype;
|
||||
|
||||
/**
|
||||
* Se encarga de orquestar todo el proceso de creación y procesamiento de un formulario web.
|
||||
*
|
||||
* @param string $formId Cadena utilizada como valor del atributo "id" de la etiqueta <form> asociada al formulario y como parámetro a comprobar para verificar que el usuario ha enviado el formulario.
|
||||
*
|
||||
* @param string $action (opcional) URL asociada al atributo "action" de la etiqueta <form> del fomrulario y que procesará el envío del formulario. Por defecto la URL es $_SERVER['PHP_SELF']
|
||||
*
|
||||
* @param string $class (opcional) Valor del atributo "class" de la etiqueta <form> asociada al formulario. Si este parámetro incluye la cadena "nocsrf" no se generá el token CSRF para este formulario.
|
||||
*
|
||||
* @param string enctype (opcional) Valor del parámetro enctype del formulario.
|
||||
*/
|
||||
public function __construct($formId, $opciones = array() ) {
|
||||
$this->formId = $formId;
|
||||
|
||||
$opcionesPorDefecto = array( 'ajax' => false, 'action' => null, 'class' => null, 'enctype' => null );
|
||||
$opciones = array_merge($opcionesPorDefecto, $opciones);
|
||||
|
||||
$this->ajax = $opciones['ajax'];
|
||||
$this->action = $opciones['action'];
|
||||
$this->classAtt = $opciones['class'];
|
||||
$this->enctype = $opciones['enctype'];
|
||||
|
||||
if ( !$this->action ) {
|
||||
$this->action = $_SERVER['PHP_SELF'];
|
||||
}
|
||||
}
|
||||
|
||||
public function gestiona() {
|
||||
|
||||
if ( ! $this->formularioEnviado($_POST) ) {
|
||||
echo $this->generaFormulario();
|
||||
} else {
|
||||
// Valida el token CSRF si es necesario (hay un token en la sesión asociada al formulario)
|
||||
$tokenRecibido = isset($_POST['CSRFToken']) ? $_POST['CSRFToken'] : FALSE;
|
||||
|
||||
if ( ($errores = $this->csrfguard_ValidateToken($this->formId, $tokenRecibido)) !== TRUE ) {
|
||||
if ( ! $this->ajax ) {
|
||||
echo $this->generaFormulario($errores, $_POST);
|
||||
} else {
|
||||
echo $this->generaHtmlErrores($errores);
|
||||
}
|
||||
} else {
|
||||
$result = $this->procesaFormulario($_POST);
|
||||
if ( is_array($result) ) {
|
||||
// Error al procesar el formulario, volvemos a mostrarlo
|
||||
if ( ! $this->ajax ) {
|
||||
echo $this->generaFormulario($result, $_POST);
|
||||
} else {
|
||||
echo $this->generaHtmlErrores($result);
|
||||
}
|
||||
} else {
|
||||
if ( ! $this->ajax ) {
|
||||
header('Location: '.$result);
|
||||
} else {
|
||||
echo $result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Devuelve un <code>string</code> con el HTML necesario para presentar los campos del formulario. Es necesario asegurarse que como parte del envío se envía un parámetro con nombre <code$formId</code> (i.e. utilizado como valor del atributo name del botón de envío del formulario).
|
||||
*/
|
||||
protected function generaCamposFormulario ($datos) {
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Procesa los datos del formulario.
|
||||
*/
|
||||
protected function procesaFormulario($datos) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Función que verifica si el usuario ha enviado el formulario. Comprueba si existe el parámetro <code>$formId</code> en <code>$params</code>.
|
||||
*
|
||||
* @param array $params Array que contiene los datos recibidos en el envío formulario.
|
||||
*
|
||||
* @return boolean Devuelve <code>TRUE</code> si <code>$formId</code> existe como clave en <code>$params</code>
|
||||
*/
|
||||
private function formularioEnviado(&$params) {
|
||||
return isset($params['action']) && $params['action'] == $this->formId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Función que genera el HTML necesario para el formulario.
|
||||
*
|
||||
*
|
||||
* @param array $errores (opcional) Array con los mensajes de error de validación y/o procesamiento del formulario.
|
||||
*
|
||||
* @param array $datos (opcional) Array con los valores por defecto de los campos del formulario.
|
||||
*/
|
||||
private function generaFormulario($errores = array(), &$datos = array()) {
|
||||
|
||||
$html= $this->generaListaErrores($errores);
|
||||
|
||||
$html .= '<form method="POST" action="'.$this->action.'" id="'.$this->formId.'"';
|
||||
if ( $this->classAtt ) {
|
||||
$html .= ' class="'.$this->classAtt.'"';
|
||||
}
|
||||
if ( $this->enctype ) {
|
||||
$html .= ' enctype="'.$this->enctype.'"';
|
||||
}
|
||||
$html .=' >';
|
||||
|
||||
// Se genera el token CSRF si el usuario no solicita explícitamente lo contrario.
|
||||
if ( ! $this->classAtt || strpos($this->classAtt, 'nocsrf') === false ) {
|
||||
$tokenValue = $this->csrfguard_GenerateToken($this->formId);
|
||||
$html .= '<input type="hidden" name="CSRFToken" value="'.$tokenValue.'" />';
|
||||
}
|
||||
|
||||
$html .= '<input type="hidden" name="action" value="'.$this->formId.'" />';
|
||||
|
||||
$html .= $this->generaCamposFormulario($datos);
|
||||
$html .= '</form>';
|
||||
return $html;
|
||||
}
|
||||
|
||||
private function generaListaErrores($errores) {
|
||||
$html='';
|
||||
$numErrores = count($errores);
|
||||
if ( $numErrores == 1 ) {
|
||||
$html .= "<ul><li>".$errores[0]."</li></ul>";
|
||||
} else if ( $numErrores > 1 ) {
|
||||
$html .= "<ul><li>";
|
||||
$html .= implode("</li><li>", $errores);
|
||||
$html .= "</li></ul>";
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
|
||||
private function csrfguard_GenerateToken($formId) {
|
||||
if ( ! isset($_SESSION) ) {
|
||||
throw new Exception('La sesión del usuario no está definida.');
|
||||
}
|
||||
|
||||
if ( function_exists('hash_algos') && in_array('sha512', hash_algos()) ) {
|
||||
$token = hash('sha512', mt_rand(0, mt_getrandmax()));
|
||||
} else {
|
||||
$token=' ';
|
||||
for ($i=0;$i<128;++$i) {
|
||||
$r=mt_rand(0,35);
|
||||
if ($r<26){
|
||||
$c=chr(ord('a')+$r);
|
||||
} else{
|
||||
$c=chr(ord('0')+$r-26);
|
||||
}
|
||||
$token.=$c;
|
||||
}
|
||||
}
|
||||
|
||||
$_SESSION[$formId.'_'.self::CSRF_PARAM]=$token;
|
||||
|
||||
return $token;
|
||||
}
|
||||
|
||||
private function csrfguard_ValidateToken($formId, $tokenRecibido) {
|
||||
if ( ! isset($_SESSION) ) {
|
||||
throw new Exception('La sesión del usuario no está definida.');
|
||||
}
|
||||
|
||||
$result = TRUE;
|
||||
|
||||
if ( isset($_SESSION[$formId.'_'.self::CSRF_PARAM]) ) {
|
||||
if ( $_SESSION[$formId.'_'.self::CSRF_PARAM] !== $tokenRecibido ) {
|
||||
$result = array();
|
||||
$result[] = 'Has enviado el formulario dos veces';
|
||||
}
|
||||
$_SESSION[$formId.'_'.self::CSRF_PARAM] = ' ';
|
||||
unset($_SESSION[$formId.'_'.self::CSRF_PARAM]);
|
||||
} else {
|
||||
$result = array();
|
||||
$result[] = 'Formulario no válido';
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
class Formulario {
|
||||
/**
|
||||
* @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 <form> como <code>$tipoFormulario.$formId</code>.
|
||||
*/
|
||||
private $formId;
|
||||
private $action;
|
||||
private $classAtt;
|
||||
|
||||
/**
|
||||
* @var string Valor del parámetro enctype del formulario.
|
||||
*/
|
||||
private $enctype;
|
||||
|
||||
public function __construct($formId, $opciones = array() ) {
|
||||
$this->formId = $formId;
|
||||
$opcionesPorDefecto = array( 'ajax' => false, 'action' => null, 'class' => null,
|
||||
'enctype' => null );
|
||||
/**
|
||||
* @var string Valor del atributo "class" de la etiqueta <form> 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 <form> del fomrulario y que procesará el
|
||||
* envío del formulario.
|
||||
*/
|
||||
private $action;
|
||||
private $printed;
|
||||
|
||||
/**
|
||||
* @var bool Almacena si la interacción con el formulario va a realizarse a través de AJAX <code>true</code> o
|
||||
* <code>false</code> en otro caso.
|
||||
*/
|
||||
private $ajax;
|
||||
|
||||
/**
|
||||
* 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 <form> 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 <form> 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>
|
||||
* <tr>
|
||||
* <td>ajax</td>
|
||||
* <td><code>false</code></td>
|
||||
* <td>Configura si el formulario se gestionará a través de AJAX.</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 <form> 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( 'ajax' => false, 'action' => null, 'class' => null, 'enctype' => null );
|
||||
$opciones = array_merge($opcionesPorDefecto, $opciones);
|
||||
|
||||
$this->ajax = $opciones['ajax'];
|
||||
@ -227,12 +99,289 @@ class Formulario {
|
||||
$this->classAtt = $opciones['class'];
|
||||
$this->enctype = $opciones['enctype'];
|
||||
|
||||
if (!$this->action) {
|
||||
$app = Aplicacion::getSingleton();
|
||||
$this->action = htmlspecialchars($_SERVER['REQUEST_URI']);
|
||||
$this->action = $app->resuelve($this->action);
|
||||
if ( !$this->action ) {
|
||||
// Cambiar por << $this->action = htmlentities($_SERVER['REQUEST_URI']); >> para mantener los parámetros de la URL.
|
||||
$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();
|
||||
|
||||
// Sin AJAX.
|
||||
/**
|
||||
* $result = $this->procesaFormulario($_POST);
|
||||
* if ( is_array($result) ) {
|
||||
* return $this->generaFormulario($_POST, $result);
|
||||
* } else {
|
||||
* header('Location: '.$result);
|
||||
* exit();
|
||||
* }
|
||||
*/
|
||||
|
||||
// Con AJAX.
|
||||
if ( $errores !== TRUE ) {
|
||||
if ( ! $this->ajax ) {
|
||||
return $this->generaFormulario($_POST, $errores);
|
||||
} else {
|
||||
return $this->generaHtmlErrores($errores);
|
||||
}
|
||||
} else {
|
||||
$result = $this->procesaFormulario($_POST);
|
||||
if ( is_array($result) ) {
|
||||
// Error al procesar el formulario, volvemos a mostrarlo
|
||||
if ( ! $this->ajax ) {
|
||||
return $this->generaFormulario($_POST, $result);
|
||||
} else {
|
||||
return $this->generaHtmlErrores($result);
|
||||
}
|
||||
} else {
|
||||
if ( ! $this->ajax ) {
|
||||
header('Location: '.$result);
|
||||
exit();
|
||||
} else {
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)));
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
?>
|
32
assets/php/includes/cinema.php
Normal 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; }
|
||||
}
|
||||
?>
|
132
assets/php/includes/cinema_dao.php
Normal file
@ -0,0 +1,132 @@
|
||||
<?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){
|
||||
$id = $this->mysqli->real_escape_string($id);
|
||||
|
||||
$sql = sprintf( "SELECT * FROM cinema WHERE id = '%d'", $id );
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
$resul->data_seek(0);
|
||||
$film = null;
|
||||
while($fila=$resul->fetch_assoc()){
|
||||
$cinema = $this->loadCinema($fila["id"], $fila["name"], $fila["direction"], $fila["phone"]);
|
||||
}
|
||||
$resul->free();
|
||||
|
||||
return $cinema;
|
||||
}
|
||||
|
||||
//Returns if exist a cinema with that id
|
||||
public function existCinema($id){
|
||||
$id = $this->mysqli->real_escape_string($id);
|
||||
|
||||
$sql = sprintf( "SELECT * FROM cinema WHERE 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;
|
||||
}
|
||||
|
||||
//Get sessions associated with a cinema.
|
||||
public function getSessions($id){
|
||||
include_once('session_dao.php');
|
||||
$session = new SessionDAO("complucine");
|
||||
|
||||
$sql = sprintf( " SELECT DISTINCT * FROM session WHERE session.id in
|
||||
(SELECT session.id FROM session JOIN cinema ON session.idcinema = cinema.id WHERE cinema.id = '%d'); ", $id);
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
$sessions = null;
|
||||
while($fila = $resul->fetch_assoc()){
|
||||
$sessions[] = $session->loadSession($fila["id"], $fila["idfilm"], $fila["idhall"], $fila["idcinema"], $fila["date"], $fila["start_time"], $fila["seat_price"], $fila["format"], $fila["seats_full"]);
|
||||
}
|
||||
$resul->free();
|
||||
|
||||
return $sessions;
|
||||
}
|
||||
|
||||
//Get films associated with a cinema.
|
||||
public function getFilms($id){
|
||||
include_once('film_dao.php');
|
||||
$film = new Film_DAO("complucine");
|
||||
|
||||
$sql = sprintf( " SELECT DISTINCT * FROM film WHERE film.id in
|
||||
(SELECT session.idfilm FROM session JOIN cinema ON session.idcinema = cinema.id WHERE cinema.id = '%d'); ", $id);
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
$films = null;
|
||||
while($fila = $resul->fetch_assoc()){
|
||||
$films[] = $film->loadFilm($fila["id"], $fila["tittle"], $fila["duration"], $fila["language"], $fila["description"], $fila["img"]);
|
||||
}
|
||||
$resul->free();
|
||||
|
||||
return $films;
|
||||
}
|
||||
|
||||
//Create a new film Data Transfer Object.
|
||||
public function loadCinema($id, $name, $direction, $phone){
|
||||
return new Cinema($id, $name, $direction, $phone);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
185
assets/php/includes/event.php
Normal file
@ -0,0 +1,185 @@
|
||||
<?php
|
||||
|
||||
include_once($prefix.'assets/php/includes/session.php');
|
||||
|
||||
//Full calendar only accepts Events objects
|
||||
class Event implements \JsonSerializable
|
||||
{
|
||||
public static function searchAllEvents($idhall, $cinema)
|
||||
{
|
||||
$result = [];
|
||||
$sessions = Session::getListSessions($idhall,$cinema,null);
|
||||
|
||||
foreach($sessions as $s){
|
||||
$e = new Event();
|
||||
$diccionario = self::session2dictionary($s);
|
||||
$e = $e->dictionary2event($diccionario);
|
||||
$result[] = $e;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public static function searchEventsBetween2dates(string $start, string $end = null, $idhall, $cinema)
|
||||
{
|
||||
|
||||
$result = [];
|
||||
$sessions = Session::getListSessionsBetween2Dates($idhall,$cinema,$start,$end);
|
||||
if($sessions){
|
||||
foreach($sessions as $s){
|
||||
$e = new Event();
|
||||
$dictionary = self::session2dictionary($s);
|
||||
$e = $e->dictionary2event($dictionary);
|
||||
$result[] = $e;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
private $id;
|
||||
private $title;
|
||||
private $start;
|
||||
private $end;
|
||||
|
||||
private $idfilm;
|
||||
private $start_time;
|
||||
private $seat_price;
|
||||
private $format;
|
||||
private $seats_full;
|
||||
|
||||
|
||||
private function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
public function getId()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getIdfilm()
|
||||
{
|
||||
return $this->idfilm;
|
||||
}
|
||||
|
||||
//Return an object that allows Event object to be serialized as json because private atributes cant be serialized
|
||||
public function jsonSerialize()
|
||||
{
|
||||
$film = Session::getThisSessionFilm($this->idfilm);
|
||||
|
||||
$undesirable = array(
|
||||
'á','À','Á','Â','Ã','Ä','Å',
|
||||
'ß','Ç',
|
||||
'È','É','Ê','Ë',
|
||||
'Ì','Í','Î','Ï','Ñ',
|
||||
'Ò','Ó','Ô','Õ','Ö',
|
||||
'Ù','Ú','Û','Ü',
|
||||
'ñ'
|
||||
);
|
||||
$good = array(
|
||||
'a','A','A','A','A','A','A',
|
||||
'B','C',
|
||||
'E','E','E','E',
|
||||
'I','I','I','I','N',
|
||||
'O','O','O','O','O',
|
||||
'U','U','U','U',
|
||||
'n'
|
||||
);
|
||||
|
||||
$lan = str_replace($undesirable, $good, $film["language"]);
|
||||
|
||||
|
||||
$o = new \stdClass();
|
||||
$o->id = $this->id;
|
||||
$o->title = $this->title;
|
||||
$o->start = $this->start;
|
||||
$o->end = $this->end;
|
||||
$o->start_time = $this->start_time;
|
||||
$o->seat_price = $this->seat_price;
|
||||
$o->format = $this->format;
|
||||
$o->film_dur = $film["duration"];
|
||||
$o->film_id = $film["idfilm"];
|
||||
$o->film_lan = $lan;
|
||||
$o->film_img = $film["img"];
|
||||
$o->date = $this->start;
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
||||
public static function session2dictionary($session){
|
||||
$extraDurationBetweenFilms = 10;
|
||||
|
||||
$film = Session::getThisSessionFilm($session->getIdfilm());
|
||||
$dur = $film["duration"]+$extraDurationBetweenFilms;
|
||||
|
||||
$tittle = \str_replace('_', ' ', $film["tittle"]) ;
|
||||
$start = $session->getDate()." ".$session->getStartTime();
|
||||
$end = \date('Y-m-d H:i:s', \strtotime( $start . ' +'.$dur.' minute'));
|
||||
|
||||
$dictionary = array(
|
||||
"id" => $session->getId(),
|
||||
"title" => $tittle,
|
||||
"start" => $start,
|
||||
"end" => $end,
|
||||
"idfilm" => $session->getIdfilm(),
|
||||
"start_time" => $session->getStartTime(),
|
||||
"seat_price" => $session->getSeatPrice(),
|
||||
"format" => $session->getFormat(),
|
||||
"seats_full" => $session->getSeatsFull(),
|
||||
);
|
||||
|
||||
return $dictionary;
|
||||
}
|
||||
|
||||
protected function dictionary2event(array $dictionary)
|
||||
{
|
||||
if (array_key_exists('id', $dictionary)) {
|
||||
$id = $dictionary['id'];
|
||||
$this->id =(int)$id;
|
||||
}
|
||||
|
||||
if (array_key_exists('title', $dictionary)) {
|
||||
$title = $dictionary['title'];
|
||||
$this->title = $title;
|
||||
}
|
||||
|
||||
if (array_key_exists('start', $dictionary)) {
|
||||
$start = $dictionary['start'];
|
||||
//$start = DateTime::createFromFormat("y-m-d H:i:s", $start);
|
||||
$this->start = $start;
|
||||
}
|
||||
|
||||
if (array_key_exists('end', $dictionary)) {
|
||||
$end = $dictionary['end'] ?? null;
|
||||
$this->end = $end;
|
||||
}
|
||||
|
||||
|
||||
if (array_key_exists('idfilm', $dictionary)) {
|
||||
$idfilm = $dictionary['idfilm'] ?? null;
|
||||
$this->idfilm = $idfilm;
|
||||
}
|
||||
|
||||
if (array_key_exists('start_time', $dictionary)) {
|
||||
$start_time = $dictionary['start_time'] ?? null;
|
||||
$this->start_time = $start_time;
|
||||
}
|
||||
|
||||
if (array_key_exists('seat_price', $dictionary)) {
|
||||
$seat_price = $dictionary['seat_price'] ?? null;
|
||||
$this->seat_price = $seat_price;
|
||||
}
|
||||
|
||||
if (array_key_exists('format', $dictionary)) {
|
||||
$format = $dictionary['format'] ?? null;
|
||||
$this->format = $format;
|
||||
}
|
||||
|
||||
if (array_key_exists('seats_full', $dictionary)) {
|
||||
$seats_full = $dictionary['seats_full'] ?? null;
|
||||
$this->seats_full = $seats_full;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
39
assets/php/includes/film.php
Normal 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; //Film image.
|
||||
|
||||
//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;}
|
||||
}
|
||||
?>
|
151
assets/php/includes/film_dao.php
Normal file
@ -0,0 +1,151 @@
|
||||
<?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 the film's data by ID.
|
||||
public function FilmData($id){
|
||||
$id = $this->mysqli->real_escape_string($id);
|
||||
|
||||
$sql = sprintf( "SELECT * FROM film WHERE id = '%d'", $id );
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
$resul->data_seek(0);
|
||||
$film = null;
|
||||
while ($fila = $resul->fetch_assoc()) {
|
||||
if($id === $fila['id']){
|
||||
$film = $this->loadFilm($fila["id"], $fila["tittle"], $fila["duration"], $fila["language"], $fila["description"], $fila["img"]);
|
||||
}
|
||||
}
|
||||
|
||||
//mysqli_free_result($selectUser);
|
||||
$resul->free();
|
||||
|
||||
return $film;
|
||||
}
|
||||
|
||||
//Returns if exist a Film with this id
|
||||
public function existFilm($id){
|
||||
$id = $this->mysqli->real_escape_string($id);
|
||||
|
||||
$sql = sprintf( "SELECT * FROM film WHERE id = '%d'", $id );
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
return $resul;
|
||||
}
|
||||
|
||||
//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;
|
||||
}
|
||||
|
||||
//Edit a film.
|
||||
public function editFilmNoImg($id, $tittle, $duration, $language,$description){
|
||||
$sql = sprintf( "UPDATE film SET tittle = '%s' , duration = '%d', language ='%s' , description ='%s'
|
||||
WHERE film.id = '%d';",
|
||||
$tittle, $duration, $language, $description, $id);
|
||||
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
return $resul;
|
||||
}
|
||||
|
||||
//Get cinemas associated with a movie.
|
||||
public function getCinemas($id){
|
||||
include_once('cinema_dao.php');
|
||||
$cinema = new Cinema_DAO("complucine");
|
||||
|
||||
$sql = sprintf( " SELECT DISTINCT * FROM cinema WHERE cinema.id in
|
||||
(SELECT session.idcinema FROM session JOIN film ON session.idfilm = film.id WHERE film.id = '%d'); ", $id);
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
$cinemas = null;
|
||||
while($fila = $resul->fetch_assoc()){
|
||||
$cinemas[] = $cinema->loadCinema($fila["id"], $fila["name"], $fila["direction"], $fila["phone"]);
|
||||
}
|
||||
$resul->free();
|
||||
|
||||
return $cinemas;
|
||||
}
|
||||
|
||||
//Create a new film Data Transfer Object.
|
||||
public function loadFilm($id, $tittle, $duration, $language,$description, $img){
|
||||
return new Film( $id, $tittle, $duration, $language,$description, $img);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
109
assets/php/includes/hall.php
Normal file
@ -0,0 +1,109 @@
|
||||
<?php
|
||||
include_once('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; //Toal seats.
|
||||
private $_seats_map; //Seat 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"; }
|
||||
}
|
||||
|
||||
public static function search_hall($number,$cinema){
|
||||
$bd = new HallDAO('complucine');
|
||||
if($bd )
|
||||
return $bd->searchHall($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($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; }
|
||||
|
||||
}
|
||||
?>
|
116
assets/php/includes/hall_dao.php
Normal file
@ -0,0 +1,116 @@
|
||||
<?php
|
||||
include_once('hall.php');
|
||||
|
||||
|
||||
class HallDAO extends DAO {
|
||||
|
||||
//Constructor:
|
||||
function __construct($bd_name){
|
||||
parent::__construct($bd_name);
|
||||
}
|
||||
|
||||
//Methods:
|
||||
|
||||
//Create a new hall taking the new number,cinema, rows, cols, seats and seats map saving in the database
|
||||
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 the hall's data by ID.
|
||||
public function HallData($id){
|
||||
$id = $this->mysqli->real_escape_string($id);
|
||||
|
||||
$sql = sprintf( "SELECT * FROM hall WHERE number = '%d'", $id );
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
$resul->data_seek(0);
|
||||
$hall = null;
|
||||
while ($fila = $resul->fetch_assoc()) {
|
||||
$hall = $this->loadHall($fila["number"], $fila["idcinema"], $fila["numrows"], $fila["numcolumns"], $fila["total_seats"], null);
|
||||
}
|
||||
|
||||
//mysqli_free_result($selectUser);
|
||||
$resul->free();
|
||||
|
||||
return $hall;
|
||||
}
|
||||
|
||||
//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;
|
||||
}
|
||||
|
||||
//Returns a hall data taking the number and cinema
|
||||
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 a hall taking the new number, rows, cols ans seats with respect to its origin parameter
|
||||
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 a hall whit the primary key
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
35
assets/php/includes/manager.php
Normal 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;}
|
||||
|
||||
}
|
||||
?>
|
77
assets/php/includes/manager_dao.php
Normal 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 manager's data.
|
||||
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 taking the id
|
||||
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 Manager with a new id and id cinema
|
||||
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 by "id" and "idcinema"
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
40
assets/php/includes/promotion.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
class Promotion{
|
||||
|
||||
//Attributes:
|
||||
private $_id; //Promotion ID.
|
||||
private $_tittle; //Promotions name.
|
||||
private $_description; //Promotion description.
|
||||
private $_code; //Promotion code.
|
||||
private $_active; //Promotion is active?
|
||||
private $_img;
|
||||
|
||||
//Constructor:
|
||||
function __construct($id, $tittle, $description, $code, $active, $img){
|
||||
$this->_id = $id;
|
||||
$this->_tittle = $tittle;
|
||||
$this->_description = $description;
|
||||
$this->_code = $code;
|
||||
$this->_active = $active;
|
||||
$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 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;}
|
||||
public function setImg($img){ $this->_img = $img;}
|
||||
public function getImg(){return $this->_img;}
|
||||
|
||||
}
|
||||
?>
|
102
assets/php/includes/promotion_dao.php
Normal file
@ -0,0 +1,102 @@
|
||||
<?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, $img){
|
||||
$sql = sprintf( "INSERT INTO `promotion`( `id`, `tittle`, `description`, `code`, `active`, `img`)
|
||||
VALUES ( '%d', '%s', '%s', '%s', '%s', '%s')",
|
||||
$id, $tittle, $description, $code, $active, $img);
|
||||
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
return $resul;
|
||||
}
|
||||
|
||||
|
||||
//Returns a query to get All the promotion.
|
||||
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"], $fila["img"]);
|
||||
}
|
||||
$resul->free();
|
||||
return $promotions;
|
||||
}
|
||||
|
||||
//Returns a promotion data by code.
|
||||
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 promotion data by id.
|
||||
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 promotion 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 promotion with new img.
|
||||
public function editPromotion($id, $tittle, $description, $code, $active, $img){
|
||||
$sql = sprintf( "UPDATE promotion SET tittle = '%s' , description = '%s', code ='%s' , active ='%s', img = '%s'
|
||||
WHERE promotion.id = '%d';",
|
||||
$tittle, $description, $code, $active, $img, $id);
|
||||
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
return $resul;
|
||||
}
|
||||
|
||||
//Edit a promotion without new img.
|
||||
public function editPromotionNoImg($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;
|
||||
}
|
||||
|
||||
//Returns a promotion data as object.
|
||||
public function GetPromotionObj($code){
|
||||
$sql = sprintf( "SELECT * FROM promotion WHERE promotion.code = '%s'", $code );
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
$promo = null;
|
||||
while($fila = $resul->fetch_assoc()){
|
||||
$promo = $this->loadPromotion($fila["id"], $fila["tittle"], $fila["description"], $fila["code"], $fila["active"], $fila["img"]);
|
||||
}
|
||||
$resul->free();
|
||||
|
||||
return $promo;
|
||||
}
|
||||
|
||||
//Create a new film Data Transfer Object.
|
||||
public function loadPromotion($id, $tittle, $description, $code, $active, $img){
|
||||
return new Promotion($id, $tittle, $description, $code, $active, $img);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
43
assets/php/includes/purchase.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
class Purchase {
|
||||
|
||||
//Attributes:
|
||||
private $_idUser; //User Id.
|
||||
private $_idSession; //Session Id.
|
||||
private $_idHall; //Hall Id.
|
||||
private $_idCinema; //Cinema Id.
|
||||
private $_numRow; //Number of row seat.
|
||||
private $_numColumn; //Number of column seat.
|
||||
private $_timePurchase; //Time of purchase.
|
||||
|
||||
//Constructor:
|
||||
function __construct($idUser, $idSession, $idHall, $idCinema, $row, $column, $time){
|
||||
$this->_idUser = $idUser;
|
||||
$this->_idSession = $idSession;
|
||||
$this->_idHall = $idHall;
|
||||
$this->_idCinema = $idCinema;
|
||||
$this->_numRow = $row;
|
||||
$this->_numColumn = $column;
|
||||
$this->_timePurchase = $time;
|
||||
}
|
||||
|
||||
//Methods:
|
||||
|
||||
//Getters && Setters:
|
||||
public function setUserId($idUser){ $this->_idUser = $id; }
|
||||
public function getUserId(){ return $this->_idUser; }
|
||||
public function setSessionId($idSession){ $this->_idSession = $idSession; }
|
||||
public function getSessionId(){ return $this->_idSession; }
|
||||
public function setHallId($idHall){ $this->_idHall = $idHall; }
|
||||
public function getHallId(){ return $this->_idHall; }
|
||||
public function setCinemaId($idCinema){ $this->_idCinema = $idCinema; }
|
||||
public function getCinemaId(){ return $this->_idCinema; }
|
||||
public function setRow($row){ $this->_numRow = $row; }
|
||||
public function getRow(){ return $this->_numRow; }
|
||||
public function setColumn($column){ $this->_numColumn = $column; }
|
||||
public function getColumn(){ return $this->_numColumn; }
|
||||
public function setTime($time){ $this->_timePurchase = $time; }
|
||||
public function getTime(){ return $this->_timePurchase; }
|
||||
|
||||
}
|
||||
?>
|
46
assets/php/includes/purchase_dao.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
include_once('purchase.php');
|
||||
|
||||
class PurchaseDAO extends DAO {
|
||||
|
||||
//Attributes:
|
||||
|
||||
//Constructor:
|
||||
function __construct($bd_name){
|
||||
parent::__construct($bd_name);
|
||||
}
|
||||
|
||||
//Methods:
|
||||
|
||||
//Create a new Purchase.
|
||||
public function createPurchase($idUser, $idSession, $idHall, $idCinema, $row, $column, $time){
|
||||
$sql = sprintf( "INSERT INTO purchase( iduser, idsession, idhall, idcinema, numrow, numcolum, time_purchase )
|
||||
VALUES ( '%d', '%d', '%d', '%d', '%d', '%d', '%s' )",
|
||||
$idUser, $idSession, $idHall, $idCinema, $row, $column, $time );
|
||||
|
||||
$resul = mysqli_query($this->mysqli, $sql);
|
||||
|
||||
return $resul;
|
||||
}
|
||||
|
||||
//All purchases of one user.
|
||||
public function allPurchasesData($idUser){
|
||||
$sql = sprintf( "SELECT * FROM purchase WHERE iduser = '%d' ", $idUser);
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
$purchases = null;
|
||||
while($fila=$resul->fetch_assoc()){
|
||||
$purchases[] = $this->loadPurchase($fila["iduser"], $fila["idsession"], $fila["idhall"], $fila["idcinema"], $fila["numrow"], $fila["numcolum"], $fila["time_purchase"]);
|
||||
}
|
||||
$resul->free();
|
||||
return $purchases;
|
||||
}
|
||||
|
||||
//Create a new User Data Transfer Object.
|
||||
public function loadPurchase($idUser, $idSession, $idHall, $idCinema, $row, $column, $time){
|
||||
return new Purchase($idUser, $idSession, $idHall, $idCinema, $row, $column, $time);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
63
assets/php/includes/seat.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
include_once('seat_dao.php');
|
||||
|
||||
class Seat{
|
||||
|
||||
//Attributes:
|
||||
private $_idhall; //Hall id.
|
||||
private $_idcinema; //Cinema id.
|
||||
private $_numRow; //Number of row.
|
||||
private $_numCol; //Number of column.
|
||||
private $_state; //State of the seat-
|
||||
|
||||
//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; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
?>
|
76
assets/php/includes/seat_dao.php
Normal file
@ -0,0 +1,76 @@
|
||||
<?php
|
||||
include_once('seat.php');
|
||||
|
||||
class SeatDAO extends DAO {
|
||||
|
||||
//Constructor:
|
||||
function __construct($bd_name){
|
||||
parent::__construct($bd_name);
|
||||
}
|
||||
|
||||
//Methods:
|
||||
|
||||
//Create a new Seat taking the new hall,cinema,row,col and state saving in the database
|
||||
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;
|
||||
}
|
||||
|
||||
//Returns a query to get all the seat's data.
|
||||
public function getAllSeats($number, $cinema){
|
||||
|
||||
$sql = sprintf( "SELECT * FROM seat WHERE
|
||||
idhall = '%d' AND idcinema = '%d'",
|
||||
$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;
|
||||
}
|
||||
|
||||
//Delete a Seat whit the primary key
|
||||
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;
|
||||
}
|
||||
|
||||
//Change state of the seat.
|
||||
/*
|
||||
public function changeSeatState($hall, $cinema, $row, $col, $state){
|
||||
$id = $this->mysqli->real_escape_string($idHall);
|
||||
$state = $this->mysqli->real_escape_string($state);
|
||||
|
||||
$sql = sprintf( "UPDATE seat SET active = '%d' WHERE idhall = '%d' AND idcinema = '%d' AND numrow = '%d' AND numcolum = '%d'",
|
||||
$state, $hall, $cinema, $row, $col );
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
return $resul;
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
//Create a new Seat Data Transfer Object.
|
||||
public function loadSeat($idhall, $idcinema, $numRow, $numCol, $state){
|
||||
return new Seat($idhall, $idcinema, $numRow, $numCol, $state);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
129
assets/php/includes/session.php
Normal file
@ -0,0 +1,129 @@
|
||||
<?php
|
||||
include_once('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 ) {
|
||||
if($date)
|
||||
return $bd->getAllSessions($hall, $cinema, $date, null);
|
||||
else
|
||||
return $bd->getAllSessions($hall, $cinema, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
public static function getListSessionsBetween2Dates($hall,$cinema,$start,$end){
|
||||
$bd = new SessionDAO('complucine');
|
||||
if($bd ) {
|
||||
return $bd->getAllSessions($hall, $cinema, $start, $end);
|
||||
}
|
||||
}
|
||||
|
||||
public static function create_session($cinema, $hall, $start, $date, $film, $price, $format){
|
||||
$bd = new SessionDAO('complucine');
|
||||
if($bd ){
|
||||
if(!$bd->searchSessionActivesAtStartTimeAndFilmDuration($cinema, $hall, $start, $date, $film)){
|
||||
$bd->createSession(null,$film, $hall, $cinema, $date, $start, $price, $format);
|
||||
return 'Operación completada';
|
||||
} else
|
||||
return 'La session del dia '.$date.' coincide con otra';
|
||||
|
||||
} 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 if($or_hall == $hall && $or_start == $start && $or_date == $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 "La session a editar 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 ) {
|
||||
$film = $bd->filmTittle($idfilm);
|
||||
$film["tittle"] = str_replace('_', ' ',$film["tittle"]);
|
||||
return $film;
|
||||
}
|
||||
}
|
||||
|
||||
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; }
|
||||
|
||||
public function setSeatsFull($bool){ $this->_seats_full = $bool; }
|
||||
public function getSeatsFull(){ return $this->_seats_full; }
|
||||
|
||||
}
|
||||
?>
|
175
assets/php/includes/session_dao.php
Normal file
@ -0,0 +1,175 @@
|
||||
<?php
|
||||
include_once('session.php');
|
||||
|
||||
class SessionDAO extends DAO {
|
||||
//Constructor:
|
||||
function __construct($bd_name){
|
||||
parent::__construct($bd_name);
|
||||
}
|
||||
|
||||
//Create a new Session taking the new id,film, hall, cinema, date, start time, seat price and format saving in the database
|
||||
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 createSession');
|
||||
|
||||
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 accessing to the session with id '. $id);
|
||||
|
||||
while($fila=$resul->fetch_assoc()){
|
||||
$session = $this->loadSession($fila["id"], $fila["idfilm"], $fila["idhall"], $fila["idcinema"], $fila["date"], $fila["start_time"], $fila["seat_price"], $fila["format"], $fila["seats_full"]);
|
||||
}
|
||||
$resul->free();
|
||||
|
||||
return $session;
|
||||
}
|
||||
|
||||
//Look for a film with the id film
|
||||
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 accessing to the film with id '. $idfilm);
|
||||
|
||||
$resul = mysqli_fetch_array($resul);
|
||||
|
||||
return $resul;
|
||||
}
|
||||
|
||||
//Look for a session with the primary key
|
||||
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 searching for a session');
|
||||
|
||||
$session = mysqli_fetch_array($resul);
|
||||
|
||||
mysqli_free_result($resul);
|
||||
|
||||
return $session;
|
||||
}
|
||||
|
||||
public function searchSessionActivesAtStartTimeAndFilmDuration($cinema, $hall, $startTime, $date, $idfilm){
|
||||
$date = date('Y-m-d', strtotime( $date ) );
|
||||
$startTime = date('H:i:s', strtotime( $startTime ) );
|
||||
$sessions = [];
|
||||
|
||||
$sql = sprintf("SELECT duration FROM film WHERE id='%s'", $idfilm );
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error looking for the film duration of id '. $idfilm);
|
||||
|
||||
$duration = ($resul->fetch_assoc())["duration"]+10;
|
||||
$endHour = date('H:i:s', strtotime( $startTime . ' +'.$duration.' minute'));
|
||||
|
||||
$sql = sprintf( "SELECT * FROM session WHERE
|
||||
idcinema = '%s' AND idhall = '%s' AND date = '%s' AND start_time BETWEEN '%s' AND '%s' ORDER BY start_time ASC;",
|
||||
$cinema, $hall, $date, $startTime, $endHour);
|
||||
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error looking for sessions between start time and start time + film duration');
|
||||
|
||||
while($fila=$resul->fetch_assoc()){
|
||||
$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;
|
||||
}
|
||||
|
||||
|
||||
//Returns a query to get all the session's data.
|
||||
public function getAllSessions($hall, $cinema, $date, $end){
|
||||
if($end){
|
||||
|
||||
$sql = sprintf( "SELECT * FROM session WHERE
|
||||
idcinema = '%s' AND idhall = '%s' AND date BETWEEN '%s' AND '%s' ORDER BY start_time ASC;",
|
||||
$cinema, $hall, $date, $end);
|
||||
}else if($date && !$end){
|
||||
$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);
|
||||
}else{
|
||||
$sql = sprintf( "SELECT * FROM session WHERE
|
||||
idcinema = '%s' AND idhall = '%s' ORDER BY start_time ASC;",
|
||||
$cinema, $hall);
|
||||
}
|
||||
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error geting all sessions');
|
||||
|
||||
$sessions = null;
|
||||
while($fila=$resul->fetch_assoc()){
|
||||
$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;
|
||||
}
|
||||
|
||||
//Look for a title and cinema
|
||||
public function getSessions_Film_Cinema($idFiml, $idCinema){
|
||||
$sql = sprintf( "SELECT * FROM session WHERE session.idfilm = '%d' AND session.idcinema = '%d' ", $idFiml, $idCinema);
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error geting sessions with a idfilm and cinema');
|
||||
|
||||
$sessions = null;
|
||||
while($fila = $resul->fetch_assoc()){
|
||||
$sessions[] = $this->loadSession($fila["id"], $fila["idfilm"], $fila["idhall"], $fila["idcinema"], $fila["date"], $fila["start_time"], $fila["seat_price"], $fila["format"], $fila["seats_full"]);
|
||||
}
|
||||
$resul->free();
|
||||
|
||||
return $sessions;
|
||||
}
|
||||
|
||||
//Edit a session taking the new film, hall, date, start time, seat price and format with respect to its origin parameter
|
||||
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 ) );
|
||||
$origin["date"] = date('Y-m-d', strtotime( $origin["date"] ) );
|
||||
$startTime = date('H:i:s', strtotime( $startTime ) );
|
||||
$origin["start"] = date('H:i:s', strtotime( $origin["start"] ) );
|
||||
|
||||
$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 session.date = '%s' AND start_time = '%s'",
|
||||
$idfilm, $idhall, $idcinema, $date, $startTime, $seatPrice, $format, $origin["cinema"],$origin["hall"],$origin["date"],$origin["start"]);
|
||||
|
||||
|
||||
mysqli_query($this->mysqli, $sql) or die ('Error editing a session');
|
||||
|
||||
}
|
||||
|
||||
//Delete a session whit the primary key
|
||||
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 deleting a session');
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,7 +1,5 @@
|
||||
<?php
|
||||
include_once('users_dto_interface.php');
|
||||
|
||||
class UserDTO implements UsersDTO {
|
||||
<?php
|
||||
class User {
|
||||
|
||||
//Attributes:
|
||||
private $_id; //User Id.
|
||||
@ -18,7 +16,7 @@
|
||||
$this->_password = $password;
|
||||
$this->_rol = $rol;
|
||||
}
|
||||
|
||||
|
||||
//Methods:
|
||||
|
||||
//Getters && Setters:
|
176
assets/php/includes/user_dao.php
Normal file
@ -0,0 +1,176 @@
|
||||
<?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){
|
||||
/**
|
||||
* Por defecto, la función password_hash(), ya genera una contraseña con "SAL",
|
||||
* aunque este sería un ejemplo de cómo crear unas opciones mejores que las que vienen por defecto,
|
||||
* aumentando el coste.
|
||||
* Más info: https://www.php.net/manual/es/faq.passwords.php#faq.passwords.salt
|
||||
* */
|
||||
/*
|
||||
$SALAD = [
|
||||
'cost' => 11, //Por defecto password_hash lo pone a 10.
|
||||
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), //Hay que tener activado el módulo mcrypt para usar esta función.
|
||||
];
|
||||
*/
|
||||
|
||||
$password = password_hash($password, PASSWORD_DEFAULT); //Actualmente en PHP PASSWORD_DEFAULT equivale a PASSWORD_BCRYPT.
|
||||
|
||||
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 ( '%d', '%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);
|
||||
|
||||
$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($resul);
|
||||
//$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;
|
||||
}
|
||||
|
||||
//Search a user by email.
|
||||
public function selectUserEmail($email){
|
||||
$email = $this->mysqli->real_escape_string($email);
|
||||
|
||||
$sql = sprintf( "SELECT * FROM users WHERE email = '%s'", $email );
|
||||
$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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,14 +1,18 @@
|
||||
<?php
|
||||
class Template {
|
||||
|
||||
//Attributes:
|
||||
public $page; //Page Name.
|
||||
public $prefix; //Page prefix.
|
||||
//Constants:
|
||||
//private const _NUMPAGES = 10; //Constant to page results.
|
||||
|
||||
public $session; //"Iniciar Sesión" (if user isn´t logged in), "Cerrar Sesión" (otherwise).
|
||||
public $session_route; //"login/" (if user isn´t logged in), "logout/" (otherwise).
|
||||
public $panel; //Button to access the user's dashboard (only displayed if logged in).
|
||||
public $user_route; //Route of the panel (depends on the type of user).
|
||||
//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).
|
||||
private $sessionButtonClass; //Type of button to login or logout.
|
||||
|
||||
//Constructor:
|
||||
function __construct(){
|
||||
@ -21,6 +25,7 @@
|
||||
$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.
|
||||
$this->sessionButtonClass = ''; //Default, normal button.
|
||||
}
|
||||
|
||||
//Methods:
|
||||
@ -35,6 +40,8 @@
|
||||
case strpos($this->page, 'logout'): $this->page = 'Cerrar Sesión'; break;
|
||||
case strpos($this->page, 'register'): $this->page = 'Registro de Usuario'; break;
|
||||
case strpos($this->page, 'showtimes'): $this->page = 'Cartelera'; break;
|
||||
case strpos($this->page, 'purchase'): $this->page = 'Comprar Entrada'; break;
|
||||
case strpos($this->page, 'promotions'): $this->page = 'Promociones'; break;
|
||||
case strpos($this->page, 'cinemas'): $this->page = 'Nuestros Cines'; break;
|
||||
case strpos($this->page, 'about_us'): $this->page = 'Sobre FDI-Cines'; $this->prefix = '../../'; break;
|
||||
case strpos($this->page, 'terms'): $this->page = 'Términos y Condiciones'; $this->prefix = '../../'; break;
|
||||
@ -43,6 +50,7 @@
|
||||
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;
|
||||
case strpos($this->page, 'assets'): $this->prefix = '../../../'; break;
|
||||
default: $this->page = 'FDI-Cines'; $this->prefix = './'; break;
|
||||
}
|
||||
}
|
||||
@ -62,10 +70,18 @@
|
||||
$page = $this->page;
|
||||
$prefix = $this->prefix;
|
||||
|
||||
if(!isset($_SESSION["css"])) $_SESSION["css"] = "main.css";
|
||||
|
||||
$extraCSS = "";
|
||||
if($page === "Comprar Entrada") $extraCSS = "\n<link id='estilo' rel='stylesheet' type='text/css' href='{$prefix}assets/css/seat.css'>";
|
||||
if($page === "Panel de Gerente") $extraCSS = "<link rel='stylesheet' href='//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.4.0/fullcalendar.css' />";
|
||||
|
||||
echo"<head>
|
||||
<title>CompluCine | {$page}</title>
|
||||
<meta charset='utf-8' />
|
||||
<link id='estilo' rel='stylesheet' type='text/css' href='{$prefix}assets/css/main.css'>
|
||||
<link id='estilo' rel='stylesheet' type='text/css' href='{$prefix}assets/css/{$_SESSION['css']}'>{$extraCSS}
|
||||
<noscript><h1>Esta página requiere JavaScript para su correcto funcionamiento.
|
||||
Compruebe si JavaScript está deshabilitado en su navegador.</h1></noscript>
|
||||
<meta name='viewport' content='width=device-width, initial-scale=1'>
|
||||
<link rel='icon' href='{$prefix}img/favicon.png' />
|
||||
</head>\n";
|
||||
@ -76,32 +92,41 @@
|
||||
$page = $this->page;
|
||||
$prefix = $this->prefix;
|
||||
$session = $this->session;
|
||||
$session_route =$this->session_route;
|
||||
$sessionButtonClass = $this->sessionButtonClass;
|
||||
$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/';
|
||||
if(isset($_SESSION["rol"])){
|
||||
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';
|
||||
$sessionButtonClass = 'danger';
|
||||
$session_route = 'logout/';
|
||||
}
|
||||
|
||||
if(isset($_SESSION["lastRol"]) && ($_SESSION["lastRol"] === "admin" || $_SESSION["lastRol"] === "manager" )){
|
||||
$changeRol = "<a href='{$prefix}assets/php/common/resetRol.php'><li class='danger'>Volver a {$_SESSION["lastRol"]}</li></a>";
|
||||
} else {
|
||||
$changeRol = null;
|
||||
}
|
||||
|
||||
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>
|
||||
<nav>{$changeRol}
|
||||
<a href='{$prefix}{$session_route}'><li class={$sessionButtonClass}>{$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}promotions/'><li>Promociones</li></a>
|
||||
<a href='{$prefix}fdicines/miembros/'><li>Quiénes somos</li></a>
|
||||
<a href='{$prefix}contacto/'><li>Contacto</li></a>
|
||||
<ul>
|
||||
</ul>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -127,7 +152,7 @@
|
||||
}
|
||||
|
||||
//Print generic Main:
|
||||
function print_main(){
|
||||
function print_main($content = ""){
|
||||
$page = $this->page;
|
||||
$prefix = $this->prefix;
|
||||
|
||||
@ -149,12 +174,492 @@
|
||||
}
|
||||
|
||||
/* MAIN */
|
||||
echo"<div class='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}
|
||||
<h1>{$page}</h1>
|
||||
{$tittle}{$content}
|
||||
<hr />
|
||||
</div>\n";
|
||||
</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=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__.'/includes/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();
|
||||
$images = array();
|
||||
if(is_array($films_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();
|
||||
$images[$key] = $value->getImg();
|
||||
}
|
||||
}
|
||||
switch($this->page){
|
||||
case "Cartelera":
|
||||
if(is_array($films_array)){
|
||||
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'>
|
||||
<a href='".$prefix."purchase?film=".$ids[$i]."'>
|
||||
<div class='code showtimes'>
|
||||
<div class='image'><img src='".$prefix."img/films/".$images[$i]."' 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>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
";
|
||||
}
|
||||
}
|
||||
$reply .= "</div>\n";
|
||||
break;
|
||||
|
||||
case "Panel de Administrador":
|
||||
$reply .= "<div class='column'>";
|
||||
if(is_array($films_array)){
|
||||
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/".$images[$i]."' 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":
|
||||
$reply .= "<div class='column'>";
|
||||
if(is_array($films_array)){
|
||||
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/".$images[$i]."' alt='".$tittles[$i]."' /></div>
|
||||
<h2>".$tittle."</h2>
|
||||
<hr />
|
||||
<li>Duración: ".$times[$i]." minutos</li>
|
||||
<li>Lenguaje: ".$languages[$i]."</li>
|
||||
|
||||
<form method='post' action='./?state=".$_SESSION["option"]."'>
|
||||
<input name='film' 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 name='hall' type='hidden' value='".$_POST["hall"]."'>
|
||||
<input name='date' type='hidden' value='".$_POST["date"]."'>
|
||||
<input name='start' type='hidden' value='".$_POST["start"]."'>
|
||||
<input name='price' type='hidden' value='".$_POST["price"]."'>
|
||||
<input name='format' type='hidden' value='".$_POST["format"]."'>
|
||||
<input name='or_hall' type='hidden' value='".$_POST["or_hall"]."'>
|
||||
<input name='or_date' type='hidden' value='".$_POST["or_date"]."'>
|
||||
<input name='or_start' type='hidden' value='".$_POST["or_start"]."'>
|
||||
<input type='submit' id='submit' value='Seleccionar' name='select_film' class='primary' />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
";
|
||||
}
|
||||
}
|
||||
$reply .= "</div>\n";
|
||||
break;
|
||||
|
||||
default:
|
||||
if(is_array($films_array)){
|
||||
$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/".$images[$i]."' 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/".$images[$count]."' 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__.'/includes/cinema_dao.php');
|
||||
|
||||
$prefix= $this->get_prefix();
|
||||
|
||||
$cine = new Cinema_DAO("complucine");
|
||||
$cinemas = $cine->allCinemaData();
|
||||
$ids = array();
|
||||
$names = array();
|
||||
$directions = array();
|
||||
$phones = array();
|
||||
|
||||
if(!is_array($cinemas)){
|
||||
$reply = "<h2>No hay cines actualmente</h2>";
|
||||
}
|
||||
else{
|
||||
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 "Nuestros Cines":
|
||||
|
||||
for($i = 0; $i < count($cinemas); $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='".$names[$i]."'>
|
||||
<div class='zoom'>
|
||||
<a href='".$prefix."purchase?cinema=".$ids[$i]."'>
|
||||
<div class='code cinemas'>
|
||||
<h2>".$names[$i]."</h2>
|
||||
<hr />
|
||||
<section class='column left'>
|
||||
<img src='../img/sala1.jpg' alt='".$names[$i]."' />
|
||||
</section>
|
||||
<section class='column right'>
|
||||
<section class='blockquote'>
|
||||
<li>Dirección: ".$directions[$i]."</li>
|
||||
<li>Teléfono: ".$phones[$i]."</li>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
";
|
||||
}
|
||||
$reply .= "</div>\n";
|
||||
break;
|
||||
case "Panel de Administrador":
|
||||
$reply .= "<div class='row'>
|
||||
<ul class='tablelist col6'>
|
||||
<li class='title'>Id</li>
|
||||
<li class='title'>Nombre</li>
|
||||
<li class='title'>Dirección</li>
|
||||
<li class='title'>Teléfono</li>
|
||||
<li class='title'>Editar</li>
|
||||
<li class='title'>Eliminar</li>
|
||||
";
|
||||
$parity = "odd";
|
||||
for($i = 0; $i < count($cinemas); $i++){
|
||||
$reply .= '
|
||||
<div class="'.$parity.'">
|
||||
<a class="h2long" href="index.php?state=mc&cinema='.$ids[$i].'">
|
||||
<li>'. $ids[$i] .'</li>
|
||||
<li>'. $names[$i] .'</li>
|
||||
<li>'. $directions[$i] .'</li>
|
||||
<li>'. $phones[$i] .'</li>
|
||||
</a>
|
||||
<li>
|
||||
<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>
|
||||
</li>
|
||||
<li>
|
||||
<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>
|
||||
</li>
|
||||
</div>
|
||||
';
|
||||
$parity = ($parity == "odd") ? "even" : "odd";
|
||||
}
|
||||
$reply .=' </div>';
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $reply;
|
||||
}
|
||||
|
||||
function print_promotions(){
|
||||
$reply = "";
|
||||
|
||||
//List of the cinemas:
|
||||
require_once(__DIR__.'/includes/promotion_dao.php');
|
||||
|
||||
$prefix= $this->get_prefix();
|
||||
|
||||
$promotion = new Promotion_DAO("complucine");
|
||||
$promotions = $promotion->allPromotionData();
|
||||
$ids = array();
|
||||
$tittles = array();
|
||||
$descriptions = array();
|
||||
$codes = array();
|
||||
$isActive = array();
|
||||
|
||||
if(is_array($promotions)){
|
||||
foreach($promotions as $key => $value){
|
||||
$ids[$key] = $value->getId();
|
||||
$tittles[$key] = $value->getTittle();
|
||||
$descriptions[$key] = $value->getDescription();
|
||||
$codes[$key] = $value->getCode();
|
||||
if($value->getActive()){
|
||||
$isActives[$key] = "ACTIVA";
|
||||
} else {
|
||||
$isActives[$key] = "CADUCADA";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch($this->page){
|
||||
case "Promociones":
|
||||
for($i = 0; $i < count($promotions); $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 promo'>
|
||||
<div class='image'><img src='".$prefix."img/promos/".str_replace(' ', '_', strtolower($tittles[$i])).".jpg' alt='".$tittles[$i]."' /></div>
|
||||
<h2>".$tittles[$i]."</h2>
|
||||
<hr />
|
||||
<div class='blockquote'>
|
||||
<p>".$descriptions[$i]."</p>
|
||||
</div>
|
||||
<li>Código: ".$codes[$i]."</li>
|
||||
<li>Estado: ".$isActives[$i]."</li>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
";
|
||||
}
|
||||
$reply .= "</div>\n";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return $reply;
|
||||
}
|
||||
|
||||
//Print session MSG:
|
||||
@ -167,19 +672,52 @@
|
||||
|
||||
//Print generic Footer:
|
||||
function print_footer(){
|
||||
//$page = $this->page;
|
||||
$prefix = $this->prefix;
|
||||
$page = $this->page;
|
||||
|
||||
if(!isset($_SESSION["css"]) || $_SESSION["css"] === "main.css"){
|
||||
$css = "{$prefix}assets/css/highContrast.css";
|
||||
$nameCSS = "Alto Contraste";
|
||||
} else {
|
||||
$css = "{$prefix}assets/css/main.css";
|
||||
$nameCSS = "Contraste Normal";
|
||||
}
|
||||
|
||||
|
||||
echo"<footer>
|
||||
<div class='footer'>
|
||||
<p>© Práctica 2 | Sistemas Web 2021 </p>
|
||||
<p>© Práctica Final | Sistemas Web 2021 </p>
|
||||
</div>
|
||||
<span class='go-up'>🔝</span>
|
||||
<a href='{$prefix}fdicines/about_us/'>Sobre FDI-Cines</a> |
|
||||
<a href='{$prefix}fdicines/terms_conditions/'>Términos y condiciones</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>
|
||||
<a href='{$prefix}contacto/'>Contacto</a> |
|
||||
<button id='cssChange' onclick=\"cambiarCSS('$css');\">$nameCSS</button>
|
||||
</footer>\n";
|
||||
}
|
||||
|
||||
//Print JS scripts:
|
||||
function print_scripts(){
|
||||
$prefix = $this->prefix;
|
||||
$page = $this->page;
|
||||
|
||||
echo"<script type='text/javascript' src='{$prefix}assets/js/jquery-3.2.1.min.js'></script>
|
||||
<script type='text/javascript' src='{$prefix}assets/js/cambiarCSS.js'></script>
|
||||
<script type='text/javascript' src='{$prefix}assets/js/checkForms.js'></script>
|
||||
<script type='text/javascript' src='{$prefix}assets/js/goUp.js'></script>
|
||||
";
|
||||
if($page === "FDI-Cines") echo"<script type='text/javascript' src='{$prefix}assets/js/promotions.js'></script>\n";
|
||||
if($page === "Panel de Usuario") echo"<script type='text/javascript' src='{$prefix}assets/js/deleteConfirm.js'></script>\n";
|
||||
if($page === "Comprar Entrada") echo"<script type='text/javascript' src='{$prefix}assets/js/selectTicket.js'></script>
|
||||
<script type='text/javascript' src='{$prefix}assets/js/checkPay.js'></script>
|
||||
<script type='text/javascript' src='{$prefix}assets/js/goBack.js'></script>\n";
|
||||
if($page === "Panel de Gerente") echo"<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js'></script>
|
||||
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js'></script>
|
||||
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.4.0/fullcalendar.min.js'></script>
|
||||
<script type='text/javascript' src='{$prefix}assets/js/sessionCalendar.js'></script>
|
||||
<script type='text/javascript' src='{$prefix}assets/js/sessionFormProcess.js'></script>\n";
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
@ -1,83 +0,0 @@
|
||||
<?php
|
||||
require_once('dao.php');
|
||||
include_once('user_dto.php');
|
||||
|
||||
class UserDAO extends DAO {
|
||||
|
||||
//Constants:
|
||||
private const _USER = "user";
|
||||
private const _MANAGER = "manager";
|
||||
private const _ADMIN = "admin";
|
||||
|
||||
//Attributes:
|
||||
|
||||
//Constructor:
|
||||
function __construct($bd_name){
|
||||
parent::__construct($bd_name);
|
||||
}
|
||||
|
||||
//Methods:
|
||||
|
||||
//Encrypt password with SHA254.
|
||||
private function encryptPass($password){
|
||||
//$password = hash('sha256', $password);
|
||||
$password = password_hash($password, PASSWORD_DEFAULT);
|
||||
|
||||
return $password;
|
||||
}
|
||||
|
||||
//Returns true if the password and hash match, or false otherwise.
|
||||
public function verifyPass($password, $passwd){
|
||||
return password_verify($password, $passwd);
|
||||
}
|
||||
|
||||
//Create a new User.
|
||||
public function createUser($id, $username, $email, $password, $rol){
|
||||
$password = $this->encryptPass($password);
|
||||
|
||||
$sql = sprintf( "INSERT INTO users( id, username, email, passwd, rol)
|
||||
VALUES ( '%s', '%s', '%s', '%s', '%s')",
|
||||
$id, $username, $email, $password, $rol );
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
//Returns a query to check if the user name exists.
|
||||
public function selectUser($username){
|
||||
$username = $this->mysqli->real_escape_string($username);
|
||||
|
||||
$sql = sprintf( "SELECT * FROM users WHERE username = '%s'", $username );
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
return $resul;
|
||||
}
|
||||
|
||||
//Returns a query to check if the user pass matches.
|
||||
public function selectPass($username, $password){
|
||||
$username = $this->mysqli->real_escape_string($username);
|
||||
$password = $this->mysqli->real_escape_string($password);
|
||||
$password = $this->encryptPass($password);
|
||||
|
||||
$sql = sprintf( "SELECT * FROM users WHERE username = '%s' AND passwd = '%s'", $username, $password);
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
//return $this->mysqli->query($sql);
|
||||
return $resul;
|
||||
}
|
||||
|
||||
//Returns a query to get the user's data.
|
||||
public function userData($id){
|
||||
$sql = sprintf( "SELECT * FROM users WHERE id = '%d'", $id );
|
||||
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
||||
|
||||
return $resul;
|
||||
}
|
||||
|
||||
//Create a new User Data Transfer Object.
|
||||
public function loadUser($id, $username, $email, $password, $rol){
|
||||
return new UserDTO($id, $username, $email, $password, $rol);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,14 +0,0 @@
|
||||
<?php
|
||||
interface UsersDTO {
|
||||
public function setId($id);
|
||||
public function getId();
|
||||
public function setName($username);
|
||||
public function getName();
|
||||
public function setEmail($email);
|
||||
public function getEmail();
|
||||
public function setPass($passwd);
|
||||
public function getPass();
|
||||
public function setRol($rol);
|
||||
public function getRol();
|
||||
}
|
||||
?>
|
@ -1,32 +1,16 @@
|
||||
<!DOCTYPE HTML>
|
||||
<?php
|
||||
//General Config File:
|
||||
require_once('../assets/php/config.php');
|
||||
?>
|
||||
<!--
|
||||
Práctica 2 - Sistemas Web | Grupo D
|
||||
CompluCine - FDI-cines
|
||||
-->
|
||||
<html lang="es">
|
||||
<!-- Head -->
|
||||
<?php
|
||||
$template->print_head();
|
||||
?>
|
||||
<body>
|
||||
<!-- Header -->
|
||||
<?php
|
||||
$template->print_header();
|
||||
?>
|
||||
|
||||
<!-- Main -->
|
||||
<?php
|
||||
$template->print_main();
|
||||
?>
|
||||
//Page-specific content:
|
||||
$section = '<!-- Cinemas -->
|
||||
<section id="cinemas">
|
||||
<div class="row">
|
||||
'.$template->print_cinemas().'
|
||||
</div>
|
||||
</section>
|
||||
';
|
||||
|
||||
<!-- Footer -->
|
||||
<?php
|
||||
$template->print_footer();
|
||||
?>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
//General page content:
|
||||
require RAIZ_APP.'/HTMLtemplate.php';
|
||||
?>
|
92
contacto/includes/formContact.php
Normal file
@ -0,0 +1,92 @@
|
||||
<?php
|
||||
require_once($prefix.'assets/php/form.php');
|
||||
require_once($prefix.'assets/php/includes/user.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()) {
|
||||
if(isset($_SESSION["user"])){ $nameValue = "value=".unserialize($_SESSION['user'])->getName().""; $emailValue = "value=".unserialize($_SESSION['user'])->getEmail().""; }
|
||||
else { $nameValue = "placeholder='Nombre'"; $emailValue = "placeholder='Email'"; }
|
||||
|
||||
// Se generan los mensajes de error si existen.
|
||||
$htmlErroresGlobales = self::generaListaErroresGlobales($errores);
|
||||
$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' ".$nameValue." required/><pre>".$errorNombre."</pre>
|
||||
</div>
|
||||
<div class='_email'>
|
||||
<input type='email' name='email' id='email' ".$emailValue." 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) > 15 ) {
|
||||
$result['name'] = "El nombre tiene que tener\n una longitud de más de\n 3 caracteres\n y menos de 15 caracteres.";
|
||||
}
|
||||
|
||||
$email = $this->test_input($datos['email']) ?? null;
|
||||
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; // DE MOMENTO, NO HACE NADA :)
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
?>
|
@ -1,77 +1,20 @@
|
||||
<!DOCTYPE HTML>
|
||||
<?php
|
||||
//General Config File:
|
||||
require_once('../assets/php/config.php');
|
||||
?>
|
||||
<!--
|
||||
Práctica 2 - Sistemas Web | Grupo D
|
||||
CompluCine - FDI-cines
|
||||
-->
|
||||
<html lang="es">
|
||||
<!-- Head -->
|
||||
<?php
|
||||
$template->print_head();
|
||||
?>
|
||||
<body>
|
||||
<!-- Header -->
|
||||
<?php
|
||||
$template->print_header();
|
||||
?>
|
||||
|
||||
<!-- Main -->
|
||||
<?php
|
||||
$template->print_main();
|
||||
?>
|
||||
|
||||
<!-- Form -->
|
||||
//Contact form:
|
||||
require_once('includes/formContact.php');
|
||||
$form = new FormContact();
|
||||
$htmlForm = $form->gestiona();
|
||||
|
||||
//Specific page content:
|
||||
$section = '<!-- Contact 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" required/>
|
||||
</div>
|
||||
<div class="_email">
|
||||
<input type="email" name="email" id="email" value="" placeholder="Email" required/>
|
||||
</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" 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>
|
||||
</form>
|
||||
'.$htmlForm.'
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<?php
|
||||
$template->print_footer();
|
||||
?>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
';
|
||||
|
||||
//General page content:
|
||||
require RAIZ_APP.'/HTMLtemplate.php';
|
||||
?>
|
||||
|
@ -1,33 +1,9 @@
|
||||
<!DOCTYPE HTML>
|
||||
<?php
|
||||
//General Config File:
|
||||
require_once('../../assets/php/config.php');
|
||||
?>
|
||||
<!--
|
||||
Práctica 2 - Sistemas Web | Grupo D
|
||||
CompluCine - FDI-cines
|
||||
-->
|
||||
<html lang="es">
|
||||
<!-- Head -->
|
||||
<?php
|
||||
$template->print_head();
|
||||
?>
|
||||
<body>
|
||||
<!-- Header -->
|
||||
<?php
|
||||
$template->print_header();
|
||||
?>
|
||||
|
||||
<!-- Main -->
|
||||
<div class="main">
|
||||
<div class="image"><a href='../../'><img src="../../img/logo_trasparente.png" alt="logo_FDI-Cines" /></a></div>
|
||||
<!-- Sub Header -->
|
||||
<?php
|
||||
$template->print_subheader();
|
||||
?>
|
||||
</div>
|
||||
|
||||
<!-- Description -->
|
||||
|
||||
//Specific page content:
|
||||
$section = '<!-- Description -->
|
||||
<section id="description">
|
||||
<div class="code" id="resume">
|
||||
<h1>Descripción</h1>
|
||||
@ -54,22 +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 -->
|
||||
<?php
|
||||
$template->print_footer();
|
||||
?>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
//General page content:
|
||||
require RAIZ_APP.'/HTMLtemplate.php';
|
||||
?>
|
||||
|
@ -1,29 +1,9 @@
|
||||
<!DOCTYPE HTML>
|
||||
<?php
|
||||
//General Config File:
|
||||
require_once('../../assets/php/config.php');
|
||||
?>
|
||||
<!--
|
||||
Práctica 2 - Sistemas Web | Grupo D
|
||||
CompluCine - FDI-cines
|
||||
-->
|
||||
<html lang="es">
|
||||
<!-- Head -->
|
||||
<?php
|
||||
$template->print_head();
|
||||
?>
|
||||
<body>
|
||||
<!-- Header -->
|
||||
<?php
|
||||
$template->print_header();
|
||||
?>
|
||||
|
||||
<!-- Main -->
|
||||
<?php
|
||||
$template->print_main();
|
||||
?>
|
||||
require_once('../../assets/php/config.php');
|
||||
|
||||
<!-- Flow -->
|
||||
//Specific page content:
|
||||
$section = '<!-- Flow -->
|
||||
<section id="flow">
|
||||
<div class="code">
|
||||
<h2>FLUJO DE NAVEGACIÓN</h2>
|
||||
@ -89,7 +69,7 @@
|
||||
<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>
|
||||
@ -98,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>
|
||||
@ -109,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>
|
||||
@ -118,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>
|
||||
@ -129,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>
|
||||
@ -138,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>
|
||||
@ -149,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>
|
||||
@ -158,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>
|
||||
@ -169,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>
|
||||
@ -178,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>
|
||||
@ -189,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>
|
||||
@ -198,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>
|
||||
@ -214,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>
|
||||
@ -223,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>
|
||||
@ -232,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>
|
||||
@ -248,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>
|
||||
@ -257,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>
|
||||
@ -268,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>
|
||||
@ -277,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>
|
||||
@ -286,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>
|
||||
@ -295,12 +275,8 @@
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<?php
|
||||
$template->print_footer();
|
||||
?>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
';
|
||||
|
||||
//General page content:
|
||||
require RAIZ_APP.'/HTMLtemplate.php';
|
||||
?>
|
||||
|
@ -1,33 +1,9 @@
|
||||
<!DOCTYPE HTML>
|
||||
<?php
|
||||
//General Config File:
|
||||
require_once('../../assets/php/config.php');
|
||||
?>
|
||||
<!--
|
||||
Práctica 2 - Sistemas Web | Grupo D
|
||||
CompluCine - FDI-cines
|
||||
-->
|
||||
<html lang="es">
|
||||
<!-- Head -->
|
||||
<?php
|
||||
$template->print_head();
|
||||
?>
|
||||
<body>
|
||||
<!-- Header -->
|
||||
<?php
|
||||
$template->print_header();
|
||||
?>
|
||||
|
||||
<!-- Main -->
|
||||
<div class="main">
|
||||
<div class="image"><a href='../../'><img src="../../img/logo_trasparente.png" alt="logo_FDI-Cines" /></a></div>
|
||||
<!-- Sub Header -->
|
||||
<?php
|
||||
$template->print_subheader();
|
||||
?>
|
||||
</div>
|
||||
|
||||
<!-- Details -->
|
||||
require_once('../../assets/php/config.php');
|
||||
|
||||
//Specific page content:
|
||||
$section = '<!-- Details -->
|
||||
<section id="details">
|
||||
<div class = "code">
|
||||
<h1>Detalles</h1>
|
||||
@ -111,10 +87,8 @@
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Footer -->
|
||||
<?php
|
||||
$template->print_footer();
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
';
|
||||
|
||||
//General page content:
|
||||
require RAIZ_APP.'/HTMLtemplate.php';
|
||||
?>
|
||||
|
@ -1,177 +1,144 @@
|
||||
<!DOCTYPE HTML>
|
||||
<?php
|
||||
//General Config File:
|
||||
require_once('../../assets/php/config.php');
|
||||
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="#UND">Undefined</a></td>
|
||||
<td><a href="">undefined@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">
|
||||
<!-- Undefined -->
|
||||
<section id="UND">
|
||||
<div class="zoom">
|
||||
<div class="code">
|
||||
<img src="../../img/seat_grey.png" />
|
||||
<p>~ Undefined (undefined@ucm.es)</p>
|
||||
<div class="blockquote bio">
|
||||
<p>Este miembro ha abandonado el grupo.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</section>';
|
||||
|
||||
//General page content:
|
||||
require RAIZ_APP.'/HTMLtemplate.php';
|
||||
?>
|
||||
<!--
|
||||
Práctica 2 - Sistemas Web | Grupo D
|
||||
CompluCine - FDI-cines
|
||||
-->
|
||||
<html lang="es">
|
||||
<!-- Head -->
|
||||
<?php
|
||||
$template->print_head();
|
||||
?>
|
||||
<body>
|
||||
<!-- Header -->
|
||||
<?php
|
||||
$template->print_header();
|
||||
?>
|
||||
|
||||
<!-- Main -->
|
||||
<div class="main">
|
||||
<div class="image"><img src="../../img/logo_trasparente.png" /></div>
|
||||
<!-- Sub Header -->
|
||||
<?php
|
||||
$template->print_subheader();
|
||||
?>
|
||||
<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 -->
|
||||
<?php
|
||||
$template->print_footer();
|
||||
?>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
</html>
|
||||
|
@ -1,29 +1,9 @@
|
||||
<!DOCTYPE HTML>
|
||||
<?php
|
||||
//General Config File:
|
||||
require_once('../../assets/php/config.php');
|
||||
?>
|
||||
<!--
|
||||
Práctica 2 - Sistemas Web | Grupo D
|
||||
CompluCine - FDI-cines
|
||||
-->
|
||||
<html lang="es">
|
||||
<!-- Head -->
|
||||
<?php
|
||||
$template->print_head();
|
||||
?>
|
||||
<body>
|
||||
<!-- Header -->
|
||||
<?php
|
||||
$template->print_header();
|
||||
?>
|
||||
|
||||
<!-- Main -->
|
||||
<?php
|
||||
$template->print_main();
|
||||
?>
|
||||
|
||||
<!-- Planning -->
|
||||
require_once('../../assets/php/config.php');
|
||||
|
||||
//Specific page content:
|
||||
$section = '<!-- Planning -->
|
||||
<section class="planning">
|
||||
<div class="row">
|
||||
<div class="column side">
|
||||
@ -33,22 +13,22 @@
|
||||
<div class="textbox">
|
||||
<h2>Implementaciones Generales de la Web</h2>
|
||||
<ul>
|
||||
<li>Pantalla de Inicio (incluye promociones y estrenos) [Fer && Adrián]</li>
|
||||
<li>Pantalla de Inicio (incluye promociones y estrenos) [Fer]</li>
|
||||
<li>Cartelera Dinámica [Fer --> Marian && Daniel]</li>
|
||||
<li>Selección Cines (mapa) [Fer]</li>
|
||||
<li>Listado de Horarios [Fer]</li>
|
||||
<li>Selección de butacas [Fer --> Marco && Óscar]</li>
|
||||
<li>Pagar + opción para código promocional [Fer]</li>
|
||||
<li>Sobre FDI-Cines (About us) [Fer && Adrián]</li>
|
||||
<li>Sobre FDI-Cines (About us) [Fer ]</li>
|
||||
<li>Formulario de Contacto [Fer]</li>
|
||||
<li>Términos y Condiciones [Fer && Adrián]</li>
|
||||
<li>Términos y Condiciones [Fer]</li>
|
||||
</ul>
|
||||
</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>
|
||||
<li>Registrarse e Iniciar sesión [Fer]</li>
|
||||
<li>Menú y panel de Usuario (Historial compras, cambiar contraseña, datos de pago y eliminar usuario) [Fer]</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="textbox">
|
||||
@ -96,9 +76,11 @@
|
||||
<li>Listado de Horarios [General]</li>
|
||||
<li>Selección de butacas [General]</li>
|
||||
<li>Pagar + opción para código promocional [General]</li>
|
||||
<li>Sobre FDI-Cines (About us) [General (de apoyo)]</li>
|
||||
<li>Formulario de Contacto [General]</li>
|
||||
<li>Términos y Condiciones [General (de apoyo)]</li>
|
||||
<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>
|
||||
<li>Sobre FDI-Cines (About us) [General]</li>
|
||||
<li>Términos y Condiciones [General]</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="textbox">
|
||||
@ -133,16 +115,6 @@
|
||||
<li>Selección de butacas [General (de apoyo)]</li>
|
||||
</ul>
|
||||
</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>
|
||||
<li>Sobre FDI-Cines (About us) [General]</li>
|
||||
<li>Términos y Condiciones [General]</li>
|
||||
<li>Pantalla de Inicio (incluye promociones y estrenos) [General (de apoyo)]</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column side">
|
||||
@ -165,19 +137,19 @@
|
||||
<h2>Práctica 2 [HTML + PHP]</h2>
|
||||
<div class="bar">100%</div>
|
||||
<ul>
|
||||
<li>Sobre FDI-Cines (About us) [Fer && Adrián]</li>
|
||||
<li>Sobre FDI-Cines (About us) [Fer]</li>
|
||||
<li>Formulario de Contacto [Fer]</li>
|
||||
<li>Términos y Condiciones [Fer && Adrián]</li>
|
||||
<li>Términos y Condiciones [Fer ]</li>
|
||||
<li>Pantalla de inicio de gerente [Marco && Óscar]</li>
|
||||
</ul>
|
||||
<div class="bar seventyfive">75%</div>
|
||||
<ul>
|
||||
<li>Pantalla de Inicio (incluye promociones y estrenos) [Fer && Adrián]</li>
|
||||
<li>Pantalla de Inicio (incluye promociones y estrenos) [Fer]</li>
|
||||
<li>Listado de Horarios [Fer]</li>
|
||||
</ul>
|
||||
<div class="bar fifty">50%</div>
|
||||
<ul>
|
||||
<li>Menú y panel de Usuario (Historial compras, cambiar contraseña, datos de pago y eliminar usuario) [Adrián]</li>
|
||||
<li>Menú y panel de Usuario (Historial compras, cambiar contraseña, datos de pago y eliminar usuario) [Fer]</li>
|
||||
<li>Eliminar sesión de una película [Marco && Óscar]</li>
|
||||
<li>Deshabilitar salas [Marco && Óscar]</li>
|
||||
<li>Panel de inicio administrador (ver todas la funcionalidades de admin de un vistazo) [Daniel && Marian]</li>
|
||||
@ -186,7 +158,7 @@
|
||||
</ul>
|
||||
<div class="bar twentyfive">25%</div>
|
||||
<ul>
|
||||
<li>Registrarse && Iniciar sesión [Adrián]</li>
|
||||
<li>Registrarse && Iniciar sesión [Fer]</li>
|
||||
<li>Deshabilitar asientos en una sala [Marco && Óscar]</li>
|
||||
<li>Ver como >> Usuario no registrado | Usuario registrado | (Gerente: Añadir si vamos bien de tiempo) [Daniel && Marian]</li>
|
||||
<li>Panel añadir/editar/eliminar promociones [Marian && Dani]</li>
|
||||
@ -202,8 +174,8 @@
|
||||
</ul>
|
||||
<div class="bar seventyfive">75%</div>
|
||||
<ul>
|
||||
<li>Registrarse && 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>
|
||||
<li>Registrarse && Iniciar sesión [Fer]</li>
|
||||
<li>Menú y panel de Usuario (Historial compras, cambiar contraseña, datos de pago y eliminar usuario) [Fer]</li>
|
||||
<li>Panel de inicio administrador (ver todas la funcionalidades de admin de un vistazo) [Daniel && Marian]</li>
|
||||
<li>Panel añadir/editar/eliminar cine [Marian && Dani]</li>
|
||||
<li>Panel añadir/editar/eliminar películas a la cartelera [Marian && Dani]</li>
|
||||
@ -261,19 +233,25 @@
|
||||
<tr>
|
||||
<td>Práctica 2</td>
|
||||
<td>15 de Abril de 2021</td>
|
||||
<td>EN PROCESO</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>ENTREGADO</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Entrega Final</td>
|
||||
<td>28 de Mayo de 2021</td>
|
||||
<td>PENDIENTE</td>
|
||||
<td>9 de Junio de 2021</td>
|
||||
<td>ENTREGADO</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="2"></td>
|
||||
<td>100%</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</section>
|
||||
|
||||
@ -284,12 +262,9 @@
|
||||
en función de los requisitos de las prácticas y nuestra carga de trabajo.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<?php
|
||||
$template->print_footer();
|
||||
?>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
';
|
||||
|
||||
//General page content:
|
||||
require RAIZ_APP.'/HTMLtemplate.php';
|
||||
?>
|
||||
<!DOCTYPE HTML>
|
@ -1,220 +1,193 @@
|
||||
<!DOCTYPE HTML>
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
//HTML template:
|
||||
require_once('../../assets/php/template.php');
|
||||
$template = new Template();
|
||||
?>
|
||||
<!--
|
||||
Práctica 2 - Sistemas Web | Grupo D
|
||||
CompluCine - FDI-cines
|
||||
-->
|
||||
<html lang="es">
|
||||
<!-- Head -->
|
||||
<?php
|
||||
$template->print_head();
|
||||
?>
|
||||
<body>
|
||||
<!-- Header -->
|
||||
<?php
|
||||
$template->print_header();
|
||||
?>
|
||||
|
||||
<!-- Main -->
|
||||
<?php
|
||||
$template->print_main();
|
||||
?>
|
||||
|
||||
<!-- Section -->
|
||||
//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>
|
||||
<div class="code">
|
||||
<p>
|
||||
Todo usuario que desee acceder a la compra de entradas a través del servicio, primero debe leer y aceptar los Términos y Condiciones de compra que a continuación se detallan.
|
||||
Una vez que inicie la navegación a través de esta web el internauta adquiere la condición de USUARIO, y una vez que cumplimente los pasos establecidos para la compra de
|
||||
entradas de cine, tendrá la consideración de CLIENTE. En cumplimiento de lo dispuesto en el Real Decreto 1906/99 de diecisiete de diciembre, por la que se regula la
|
||||
contratación electrónica con condiciones generales, y de la Ley de Ordenación del Comercio Minorista (Ley 7/1996 de 15 de Enero, modificada por la Ley 47/2002 de 19 de
|
||||
Diciembre) en lo aplicable a lo dispuesto sobre las ventas a distancia en los artículos 38 y siguientes, FDI-Cines (en adelante la EMPRESA) informa:
|
||||
</p><br />
|
||||
<p>
|
||||
Las presentes Condiciones Generales de Contratación suponen la regulación general de los servicios prestados por
|
||||
la EMPRESA a través del portal complucine.sytes.net, constituyendo el marco jurídico que desarrolla la relación contractual. La EMPRESA ofrece como intermediario el
|
||||
servicio de venta de entradas para cines, a través de la web https://complucine.sytes.net. Las presentes Condiciones Generales, están sujetas a lo dispuesto a la Ley 7/1988,
|
||||
de 13 de abril, sobre Condiciones Generales de Contratación, a la Ley 26/1984, de 19 de julio, General para la Defensa de Consumidores y Usuarios, al Real Decreto 1906/1999,
|
||||
de 17 de diciembre de 1999, por el que se regula la Contratación Telefónica o Electrónica con condiciones generales, la Ley Orgánica 15/1999, de 13 de diciembre, de Protección
|
||||
de Datos de Carácter Personal, la Ley 7/1996, de 15 de enero de Ordenación del Comercio Minorista, y a la Ley 34/2002 de 11 de julio, de Servicios de la Sociedad de la
|
||||
Información y de Comercio Electrónico. Los servicios ofrecidos por complucine.sytes.net podrán ser contratados por cualesquiera usuarios que residan en España o en otro
|
||||
Estado miembro de la Unión Europea o del Espacio Económico Europeo y por aquellos usuarios que, residiendo en un Estado no perteneciente a la Unión Europea o al Espacio
|
||||
Económico Europea, les sea de aplicación la legislación española. Este documento es accesible en todo momento en la web de la EMPRESA y puede ser impreso y almacenado
|
||||
por el CLIENTE.
|
||||
</p><br />
|
||||
<!-- Lista de Condiciones -->
|
||||
<ol>
|
||||
<li>
|
||||
OBJETO DEL CONTRATO El contrato tiene por objeto regular las condiciones generales de prestación de los servicios ofrecidos por la EMPRESA a través de
|
||||
complucine.sytes.net. Los servicios que la EMPRESA presta actualmente y que son objeto de este contrato son por un lado,los servicios de información, de acceso gratuito,
|
||||
y por otro el servicio de venta de entradas para salas de cine. El servicio de venta de entradas de cine es de carácter oneroso, y el precio de cada entrada está determinado
|
||||
en cada momento en la web. El acceso a la información concerniente a los apartados cartelera, cines, estrenos y noticias es libre, no sujeto a pago alguno.
|
||||
</li><br />
|
||||
<li>
|
||||
IDENTIFICACIÓN DE LAS PARTES CONTRATANTES. Las presentes condiciones generales de contratación del servicio ofrecido por la EMPRESA son suscritas, de una parte,
|
||||
por la empresa identificada en este documento. Y, de otra parte, por el CLIENTE, cuyos datos introducidos para
|
||||
realizar la compra de entradas o para realizar alguna sugerencia, a través del formulario establecido al efecto, son los que han sido consignados por él mismo.
|
||||
Todos los datos incluidos en él han sido introducidos directamente por el cliente, por lo que la responsabilidad sobre la autenticidad de los mismos corresponde, directa
|
||||
y exclusivamente, al CLIENTE. Para tener acceso al servicio de compra de entradas del portal, se requiere la cumplimentación de todos los datos no marcados como opcionales
|
||||
solicitados para realizar la compra.
|
||||
</li><br />
|
||||
<li>
|
||||
OBLIGACIONES RELATIVAS AL PROCEDIMIENTO DE COMPRA El CLIENTE es el único responsable de la veracidad de los datos introducidos por él mismo en el procedimiento
|
||||
de compra, y acepta la obligación de facilitar datos veraces, exactos y completos. Si el CLIENTE incumple esta obligación, quedará bajo su responsabilidad el responder por
|
||||
los posibles daños y perjuicios producidos a la EMPRESA o a un tercero. 4. CONDICIONES DEL SERVICIO Las presentes condiciones son de aplicación al servicio de venta de
|
||||
entradas de cine ofrecido por la EMPRESA a través de la web complucine.sytes.net. Las condiciones comerciales de este servicio y las ofertas que eventualmente puedan
|
||||
llevarse a cabo por la EMPRESA siempre aparecen en la mencionada página web por lo que pueden ser consultadas, archivadas o impresas. La EMPRESA se reserva el derecho de
|
||||
modificar en cualquier momento las presentes Condiciones Generales de Uso así como cualesquiera otras condiciones generales o particulares, reglamentos de uso o avisos que
|
||||
resulten de aplicación. La EMPRESA podrá modificar las Condiciones Generales notificándolo a los CLIENTES con antelación suficiente, con el fin de mejorar los servicios
|
||||
y productos ofrecidos a través de complucine.sytes.net. Mediante la modificación de las Condiciones Generales expuestas en la página Web de www.compraentradas.com, se
|
||||
entenderá por cumplido dicho deber de notificación. En todo caso, antes de utilizar los servicios o contratar productos, se pondrán consultar las Condiciones General es.
|
||||
Asimismo se reserva el derecho a modificar en cualquier momento la presentación, configuración y localización del Sitio Web, así como los contenidos y las condiciones
|
||||
requeridas para utilizar los mismos. El CLIENTE formalizará su compra de entradas de cine mediante el cumplimiento de todas las fases establecidas en el apartado COMPRA
|
||||
DIRECTA y su envío telemático. 5. USO DEL SERVICIO Y RESPONSABILIDADES La EMPRESA no será responsable de los retrasos o fallos que se produjeran en el acceso,
|
||||
funcionamiento y operatividad de la web, o en sus servicios y/o contenidos, así como tampoco de las interrupciones, suspensiones o el mal funcionamiento de la misma,
|
||||
cuando tuvieren su origen en averías producidas por catástrofes naturales o situaciones de fuerza mayor , o de urgencia extrema, tales como huelgas, ataques o intrusiones
|
||||
informáticas o cualquier otra situación de fuerza mayor o causa fortuita, así como por errores en las redes telemáticas de transferencia de datos. La EMPRESA no se hace
|
||||
responsable de la fiabilidad, veracidad y exactitud de los contenidos ofrecidos en su web. El CLIENTE se compromete a cumplir con lo establecido en el AVISO LEGAL publicado
|
||||
por la EMPRESA en la web complucine.sytes.net en cada momento. El CLIENTE reconoce y acepta que el acceso y uso del sitio web complucine.sytes.net y de los contenidos
|
||||
incluidos en el mismo tiene lugar de forma libre y conscientemente, bajo su exclusiva responsabilidad. El CLIENTE se compromete a hacer un uso adecuado y lícito del Sitio
|
||||
Web y de los contenidos, de conformidad con la legislación aplicable, las presentes Condiciones Generales de Uso, la moral y buenas costumbres generalmente aceptadas y
|
||||
el orden público.
|
||||
</li><br />
|
||||
<li>
|
||||
PROCEDIMIENTO DE COMPRA A través del apartado COMPRA DIRECTA el CLIENTE puede adquirir la/s entrada/s de cine telemáticamente. Los pasos a seguir son los
|
||||
siguientes:
|
||||
<ul>
|
||||
<li>
|
||||
OPCIONES PARA LA COMPRA Al pulsar sobre cualquier opción del sitio web, se cargarán las páginas que le permitirán, a través de una serie de menús,
|
||||
seleccionar la película, cine, día y sesión a la que desea acudir. Cada menú se genera en función de la opción seleccionada en el menú anterior. Una vez completada la
|
||||
selección podrá acceder al patio de butacas del cine y seleccionar las localidades que más le gusten.
|
||||
</li>
|
||||
<li>
|
||||
SOLICITUD DE BUTACAS En el patio de butacas, las butacas en color verde representan los asientos que están disponibles. En las butacas ocupadas aparecerá el dibujo de una persona sentada. Para seleccionar
|
||||
las localidades deseadas, pulse con el ratón sobre ellas; a medida que las pulse se pondrán de color blanco. Si se equivoca vuelva a pulsar sobre la butaca y volverá a
|
||||
ponerse de color verde. Cuando termine de seleccionar las localidades pulse sobre el botón Solicitar y entrará en una página en la que se le pedirán los datos de la tarjeta
|
||||
con la que desea pagar las entradas. NOTA: Las localidades han de seleccionarse juntas y en la misma fila. El máximo de localidades que se pueden solicitar es de 10.
|
||||
</li>
|
||||
<li>
|
||||
ACEPTACIÓN DE LA PROPUESTA DEL CINE Una vez solicitadas las butacas, el cine respondera si aun siguen estando disponibles, en ese caso se procede al pago.
|
||||
</li>
|
||||
<li>
|
||||
DATOS PARA EL PAGO En esta página debe introducirse un número de tarjeta y su caducidad; con la que abonar el importe de las entradas. Asimismo, también aparece un campo donde
|
||||
opcionalmente-, se puede introducir un correo electrónico de contacto el cual es útil para informar al usuario en caso de que se suspendiera alguna sesión, se realizara
|
||||
una reubicacion, etc. Tras introducir los datos para el pago, pulse sobre el botón Continuar.
|
||||
</li>
|
||||
<li>
|
||||
CONFIRMACIÓN DE LA VENTA Si el proceso de compra se completa correctamente, le aparecerá una página de confirmación en la que se reflejan las características de las localidades adquiridas, así como un numero de referencia. El número de referencia
|
||||
identifica su compra de forma única y será necesario en caso de que usted desee realizar alguna consulta. Dado que es un número de bastantes cifras si lo desea puede usted
|
||||
sacar una copia en papel de dicha página pulsando sobre el botón imprimir o descargándolo en su ordenador.
|
||||
</li>
|
||||
<li>
|
||||
DENEGACIÓN DE LA VENTA Por diversas razones como son: falta de comunicación con la entidad emisora de su tarjeta, pérdida temporal de la comunicación con el cine, etc.; puede que al sistema le resulte imposible realizar la compra.
|
||||
En tal caso, le aparecerá una página indicándole tal circunstancia así como una referencia. Si desea realizar alguna consulta, utilice dicho número de referencia para que
|
||||
podamos atenderle.
|
||||
</li>
|
||||
<li>
|
||||
RECOGIDA DE ENTRADAS Cerca de las taquillas del cine, el CLIENTE encontrará un buzón instalado a tal efecto, en el que puede introducir la tarjeta
|
||||
con la que realizó la compra y le emitirá sus entradas. Si tuviera alguna dificultad en localizar el buzón puede consultar al personal del cine. Si el CLIENTE tuviera algún
|
||||
inconveniente a la hora de recoger las entradas, deberá asegurarse de haber introducido la tarjeta en la posición correcta, los buzones tienen un dibujo que muestra como.
|
||||
Si por alguna razón el buzón no le dispensa las entradas, como por ejemplo que se haya quedado sin papel, deberá acudir a las taquillas con la tarjeta.
|
||||
</li>
|
||||
</ul>
|
||||
</li><br />
|
||||
<li>
|
||||
IDIOMA La información y contenidos ofrecidos por la EMPRESA a través de la web complucine.sytes.net se ofrecen en idioma español. La EMPRESA no se hace
|
||||
responsable de los daños o perjuicios que pudieran ocasionar al CLIENTE por la no comprensión de los mismos.
|
||||
</li><br />
|
||||
<li>
|
||||
NORMAS RELATIVAS A LA FORMACIÓN Y VALIDEZ DEL CONTRATO EL CLIENTE entiende que la información contenida en la web, de información general sobre cartelera,
|
||||
estrenos, cines, noticias, IVA, comisiones, así como las condiciones generales de contratación y perfeccionamiento del contrato, son bastantes y suficientes para la exclusión
|
||||
de error en la formación del consentimiento. Las presentes condiciones generales de contratación, pasarán a formar parte del contrato en el momento de aceptación por parte
|
||||
del CLIENTE, manifestada por medio de la cumplimentación y envío de los datos de compra introducidos en el apartado COMPRA DIRECTA. 9. VALIDEZ DEL PROCEDIMIENTO DE COMPRA
|
||||
COMO PRUEBA DE ACEPTACIÓN Ambas partes declaran expresamente que la aceptación de la oferta de servicio de la EMPRESA por el CLIENTE se lleva a cabo a través del seguimiento
|
||||
del procedimiento de compra descrito en el apartado COMPRA DIRECTA. El hecho de cumplimentar telemáticamente todos los pasos descritos para el proceso de compra de la/s
|
||||
entrada/s por el CLIENTE supone la aceptación integra y expresa de las presentes condiciones generales. 10. PERFECCIÓN DEL CONTRATO El contrato quedará perfeccionado desde
|
||||
la fecha en que el CLIENTE manifieste su conformidad con las presentes condiciones o, en su caso, las publicadas en el momento de realizar la compra, mediante la aportación
|
||||
de los datos solicitados en el apartado DATOS PARA EL PAGO, de la sección COMPRA DIRECTA, y una vez que el CLIENTE confirme la compra efectuada.
|
||||
</li><br />
|
||||
<li>
|
||||
PAGO La EMPRESA cobrará al CLIENTE por la prestación del servicio las tarifas vigentes en cada momento en la web y que aparecerán una vez seleccionada la película,
|
||||
cine, día y sesión, apartado éste último, en el que aparecerá el precio correspondiente a la selección efectuada y los impuestos aplicables. Una vez seleccionada/s la/s
|
||||
butaca/s, se abrirá la sección correspondiente al pago, con la petición de introducción de los datos de la tarjeta de crédito, en la cual se detallará el precio y la comisión
|
||||
correspondiente a cada butaca.
|
||||
</li><br />
|
||||
<li>
|
||||
DERECHO DE DESISTIMIENTO El CLIENTE debe asegurarse fehacientemente antes de tramitar la reserva de la exactitud y adecuación de los datos
|
||||
introducidos, ya que no es posible la devolución de las entradas adquiridas una vez realizada la compra. No poder asistir al espectáculo o cometer un error al adquirir las
|
||||
entradas no son motivos que permitan su devolución. Sólo podrán anularse entradas por posibles incidencias técnicas u operativas, imputables a la EMPRESA. El usuario no podrá
|
||||
ejercitar el derecho de desistimiento o resolución previsto en el artículo 44 de la ley 47/2002 de 19 de diciembre de reforma de la Ley 7/1996, de 15 de enero, de Ordenación
|
||||
del Comercio Minorista, al estar excluido en el artículo 45 b). Tampoco podrá ser ejercido por el usuario el derecho de Resolución previsto en el artículo 4 del R.D.
|
||||
1906/19999, de 17 de diciembre, al estar excluido el ejercicio del mismo en el artículo 4.5. No obstante lo anterior, cuando el importe de una compra hubiese sido cargado
|
||||
fraudulenta o indebidamente, utilizando el número de una tarjeta de pago, el titular de la misma podrá solicitar la anulación del cargo a la EMPRESA siempre y cuando se
|
||||
acredite la previa presentación de denuncia por estos hechos. La devolución del importe de las mismas se realizará mediante reclamación por escrito, a la que deberán
|
||||
acompañarse los documentos (denuncia) que acredite n la pérdida o robo de la tarjeta con la que se efectuó el pago. Sin embargo, si la compra hubiese sido efectivamente
|
||||
realizada por el titular de la tarjeta y la exigencia de devolución no fuera consecuencia de haberse ejercido el derecho de desistimiento o de resolución reconocido en el
|
||||
artículo 44 y, por tanto, hubiese exigido indebidamente la anulación del correspondiente cargo, aquel quedará obligado frente al vendedor al resarcimiento de los daños y
|
||||
perjuicios ocasionados como consecuencia de dicha anulación. La EMPRESA pretende facilitar tanto a promotores como al público la adquisición de dichas entradas pero en ningún
|
||||
momento la EMPRESA es la entidad promotora del espectáculo.
|
||||
</li><br />
|
||||
<li>
|
||||
RECLAMACIONES Para cualquier aclaración sobre las presentes condición es generales o para realizar cualquier
|
||||
reclamación relativa a su compra, el CLIENTE tiene a su disposición las direcciones especificadas al principio de este documento.
|
||||
</li><br />
|
||||
<li>
|
||||
DURACIÓN Y TERMINACIÓN La prestación del servicio de la web complucine.sytes.net tiene una duración indefinida. No obstante,la EMPRESA está autorizada para
|
||||
dar por terminada o suspender la prestación del servicio en cualquier momento, sin perjuicio de lo que se hubiere dispuesto al respecto en las correspondientes condiciones
|
||||
generales. Cuando ello sea razonablemente posible, la EMPRESA advertirá previamente la terminación o suspensión de la prestación del servicio.
|
||||
</li><br />
|
||||
<li>
|
||||
PROPIEDAD INTELECTUAL E INDUSTRIAL El CLIENTE acepta que todos los derechos de propiedad industrial e intelectual sobre los contenidos y cualesquiera otros
|
||||
elementos insertados en la web complucine.sytes.net pertenecen a la EMPRESA. La EMPRESA es titular de los elementos que integran el diseño gráfico de su página web, los
|
||||
menús, botones de navegación, el código HTML, los textos, imágenes, texturas, gráficos y cualquier otro contenido de la página web o, en cualquier caso, dispone de la
|
||||
correspondiente autorización para la utilización de dichos elementos. El contenido de la web no podrá ser reproducido ni en todo ni en parte, ni transmitido, ni registrado
|
||||
por ningún sistema de recuperación de información, en ninguna forma ni en ningún medio, a menos que se cuente con la autorización previa, por escrito, de la citada Entidad.
|
||||
Asimismo queda prohibido suprimir, eludir o manipular el copyright y demás datos identificativos de los derechos de la EMPRESA, así como los dispositivos técnicos de
|
||||
protección, o cualquiera mecanismos de información que pudieren contener los contenidos.
|
||||
</li><br />
|
||||
<li>
|
||||
PROTECCIÓN DE DATOS DE CARÁCTER PERSONAL La EMPRESA ha adoptado las medidas y niveles de seguridad de protección de los datos personales exigidos por la Ley
|
||||
Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal y sus reglamentos de desarrollo. Los datos personales recabados a través de
|
||||
complucine.sytes.net son objeto de tratamiento automatizado y se incorporan a un fichero titularidad de la EMPRESA, que es a su vez la responsable del mencionado fichero.
|
||||
La cumplimentación de los datos correspondientes a la compra de entradas o del formulario de sugerencias en el sitio web www.cinentradas.com implica el consentimiento expreso
|
||||
del CLIENTE a la inclusión de sus datos de carácter personal en el referido fichero automatizado de la EMPRESA. El Cliente titular de los datos puede ejercitar gratuitamente
|
||||
sus derechos de acceso, rectificación, cancelación y oposición con arreglo a lo previsto en la Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter
|
||||
Personal y demás normativa aplicable al efecto, mediante el envio de un correo electrónico a la dirección MARKETING@complucine.sytes.net, o bien mediante carta dirigida a la
|
||||
dirección de la EMPRESA especificada al inicio de este documento. Ya sea por correo electrónico o postal, debera constar claramente la
|
||||
identidad del titular de los datos de forma que permita reconocer la identidad del CLIENTE que ejercita cualquiera de los anteriores derechos, debiendo indicar asimismo la
|
||||
dirección a la que EMPRESA deberá hacer llegar la respuesta.El citado fichero figura inscrito en el Registro General de la Agencia Española de Protección de Datos. La
|
||||
finalidad de la recogida de datos no es otra que la de poder ofrecer al CLIENTE los servicios de venta de entradas, así como la de atender las sugerencias realizadas por
|
||||
los mismos.
|
||||
</li><br />
|
||||
<li>
|
||||
NULIDAD PARCIAL Si cualquier parte de estas condiciones de servicio fuera contraria a Derecho y, por tanto, inválida, ello no afectará a las otras disposiciones
|
||||
conformes a Derecho. Las partes se comprometen a renegociar aquellas partes de las condiciones de servicio que resultaran nulas y a incorporarlas al resto de las condiciones
|
||||
de servicio.
|
||||
</li><br />
|
||||
<li>
|
||||
LEY APLICABLE Y JURISDICCIÓN COMPETENTE. El CLIENTE se somete, con renuncia expresa a cualquier otro fuero, a los juzgados y tribunales de la ciudad de
|
||||
Madrid (España). Estas Condiciones Generales se rigen por la ley española. Ambas partes reconocen que la legislación aplicable al presente contrato, y a todas las relaciones
|
||||
jurídicas dimanantes del mismo, será la española, por expresa aplicación de lo dispuesto en el artículo 1.262 del Código Civil, en relación a lo dispuesto en el Capítulo IV,
|
||||
del Título Preliminar del mismo cuerpo legal.
|
||||
</li><br />
|
||||
</ol>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<?php
|
||||
$template->print_footer();
|
||||
?>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
';
|
||||
|
||||
//General page content:
|
||||
require RAIZ_APP.'/HTMLtemplate.php';
|
||||
?>
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |