Last active
June 9, 2019 05:10
-
-
Save c3r38r170/01418428c499dac05c4b14c78c1e6161 to your computer and use it in GitHub Desktop.
A little website for university professors' information we were told to ask. Written by hand the 4 days before the first class just by me. You can see the result in the free website 2019isi.dx.am until taken down. It's unfinished as I stopped developing it when I was told the information was already online. :P Totally free, take as you want.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html style="background:lightblue"> | |
<head> | |
<style> | |
body{ | |
text-align: center; | |
width: 70%; | |
position: absolute; | |
left: 10%; | |
background: cornflowerblue; | |
border-radius: 50px; | |
padding: 5%; | |
font-size: large | |
} | |
<?php | |
if(!empty($_POST)){ | |
$conexion=mysqli_connect('XXXXX.XXXXXXXXXX.XXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); | |
if(!$conexion){ | |
echo "Error: No se pudo conectar a MySQL." . PHP_EOL; | |
echo "errno de depuración: " . mysqli_connect_errno().PHP_EOL; | |
echo "error de depuración: " . mysqli_connect_error().PHP_EOL; | |
exit; | |
} | |
switch($_POST['tipoDeFormulario']){ | |
case 0: //entrar | |
$sentencia=$conexion->prepare('SELECT `id` FROM `2019_isi_alumnos` WHERE `email` = ? ;'); | |
if(!$sentencia){ | |
echo "Error: No se pudo crear la sentencia preparada. Error: ".$sentencia->error; | |
exit; | |
} | |
$sentencia->bind_param('s',$email); | |
$email=$_POST['usuario']; | |
if (!$sentencia->execute()) { | |
echo "Falló la ejecución: (" . $sentencia->errno . ") " . $sentencia->error; | |
exit; | |
} | |
$sentencia->store_result(); | |
$error=array(false); | |
if(!$sentencia->num_rows){ | |
$error=array(true,0); | |
} | |
if(!$error[0]){ | |
$sentencia->bind_result($id); | |
$sentencia->data_seek(0); | |
$sentencia->fetch(); | |
$sentencia->close(); | |
$datos=$conexion->query("SELECT `contra`,`verified` FROM `2019_isi_alumnos` WHERE `id` = $id ;"); | |
$datos=$datos->fetch_row(); | |
if(password_verify($_POST['contraseña'],$datos[0])){ | |
if($datos[1]){ | |
mostrarInformacion($id); | |
}else{ | |
$error=array(true,2); | |
} | |
}else{ | |
$error=array(true,1); | |
} | |
} | |
if($error[0]){ | |
?> | |
table{ | |
border-collapse: collapse; /* Para que no haya espacios entre celdas que puedan apretarse por error. */ | |
border: 2px solid black; | |
width:100%; | |
background:cornsilk; | |
background: lightgray; | |
} | |
td{ | |
padding: 10px; | |
} | |
input{ | |
margin:5px | |
} | |
#inicioDeSesionContenedor{ | |
position: absolute; | |
top: 50%; | |
left: 50%; | |
transform: translate(-50%,-50%); | |
text-align: left | |
} | |
</style> | |
</head> | |
<body> | |
<div id=inicioDeSesionContenedor> | |
<form method=post style="text-align:-webkit-center"> | |
<table> | |
<tr><td><label for=usuario>Correo:</label><td></td><input type=email placeholder="Dirección de correo" name=usuario required></td></tr> | |
<tr><td><label for=contraseña>Contraseña:</label><td></td><input type=password placeholder="Contraseña" name=contraseña required></td></tr> | |
</table> | |
<span style="font-weight:bold;color:red;padding:5px;border-radius:5px"> | |
<?php switch($error[1]){ | |
case 0: | |
echo'Este correo no se encuentra registrado.'; | |
break; | |
case 1: | |
echo'Contraseña incorrecta.'; | |
break; | |
case 2: | |
echo'Esta cuenta necesita ser verificada.'; | |
break; | |
} | |
?> | |
</span><br> | |
<input type=hidden name=tipoDeFormulario value=0> | |
<input type=submit value=Entrar><button onclick="window.location=''">Registrarme</button><button style="margin-left:5px" onclick="window.location=''">Volver</button> | |
</form> | |
</div> | |
<?php | |
exit; | |
} | |
break; | |
case 1: //registrar | |
$sentencia=$conexion->prepare('INSERT INTO `2019_isi_alumnos` (`nombreYapellido`,`email`,`contra`,`comision`,`verified`,`token`) VALUES (?,?,?,?,?,?);'); | |
if(!$sentencia){ | |
echo "Error: No se pudo crear la sentencia preparada. Error: ".$sentencia->error; | |
exit; | |
} | |
$sentencia->bind_param('sssiis',$_POST['nombreRegistro'],$_POST['usuarioRegistro'],$contraseña,$_POST['comisionRegistro'],$v,$mdcinco); | |
$contraseña=password_hash($_POST['contraseñaRegistro'],PASSWORD_BCRYPT); | |
$v=0; | |
$mdcinco=md5(rand()); | |
if (!$sentencia->execute()) { | |
echo "Falló la ejecución: (" . $sentencia->errno . ") " . $sentencia->error; | |
exit; | |
} | |
$gracias=true; | |
mail($email,'Verificación de Correo',"Entrá al siguiente link para validar tu cuenta:\n2019isi.dx.am/index.php?token=$mdcinco\nSi no reconocés este mensaje, mientras no apretes el link no tenés nada de qué preocuparte.",'From: verificacion@2019isi.dx.am'); | |
$sentencia->close(); | |
$mensaje='Usuario registrado exitosamente.<br>Confirme la cuenta de correo electrónico a partir del correo enviado a su cuenta (recordá revisar la carpeta de SPAM).<br>En caso de que no llegue, contactar a <a href=mailto:c3r38r170@gmail.com color:#0f0;background:#338170;padding:5px;border-radius:5px>c3r38r170@gmail.com</a>.'; | |
break; | |
case 2: //subirInformacion | |
$sentencia=$conexion->prepare('INSERT INTO `2019_isi_infoProfesores` (`nombreYapellido`,`contacto`,`materias`,`comisiones`,`horariosConsultas`,`lugarConsultas`,`color`) VALUES (?,?,?,?,?,?,SUBSTRING(MD5(RAND()),1,6));'); | |
if(!$sentencia){ | |
echo "Error: No se pudo crear la sentencia preparada. Error: ".$sentencia->error; | |
exit; | |
} | |
$sentencia->bind_param('ssssss',$nombreYapellido,$contacto,$materias,$comisiones,$horariosConsultas,$lugarConsultas); | |
$nombreYapellido="{$_POST['nombre']} {$_POST['apellido']}"; | |
$contacto=''; | |
$indice=1; | |
while(isset($_POST["email$indice"])){ | |
$contacto.=$_POST["email$indice"].','; | |
$indice++; | |
} | |
$indice=1; | |
while(isset($_POST["telefono$indice"])){ | |
$contacto.=$_POST["telefono$indice"].','; | |
$indice++; | |
} | |
$contacto=substr($contacto,0,strlen($contacto)-1); | |
$materias=''; | |
$indice=1; | |
while(isset($_POST["materia$indice"])){ | |
$materias.=$_POST["materia$indice"].','; | |
$indice++; | |
} | |
$materias=substr($materias,0,strlen($materias)-1); | |
$comisiones=''; | |
$indice=1; | |
while(isset($_POST["comision$indice"])){ | |
$comisiones.=$_POST["comision$indice"].','; | |
$indice++; | |
} | |
$comisiones=substr($comisiones,0,strlen($materias)-1); | |
$horariosConsultas=$_POST['datosHorario']; | |
$lugarConsultas=$_POST['consultaLugar']; | |
if (!$sentencia->execute()) { | |
echo "Falló la ejecución: (" . $sentencia->errno . ") " . $sentencia->error; | |
exit; | |
} | |
$sentencia->close(); | |
$gracias=true; | |
$mensaje='Datos cargados exitosamente.'; | |
break; | |
default; | |
break; | |
} | |
if($gracias){ | |
?> | |
</style> | |
</head> | |
<body> | |
<h1>¡Muchísimas gracias!</h1> | |
<p><?=$mensaje?></p> | |
<a href=/>Volver a la pantalla principal.</a> | |
<?php | |
} | |
$conexion->close(); | |
}elseif(empty($_GET)){ | |
?> | |
input, select{ | |
margin:5px | |
} | |
table{ | |
border-collapse: collapse; /* Para que no haya espacios entre celdas que puedan apretarse por error. */ | |
border: 2px solid black; | |
width:100%; | |
background:cornsilk; | |
} | |
table:not(.paraProfes){ | |
background: lightgray; | |
} | |
table:not(.paraProfes) > tbody > tr > td{ | |
padding: 10px; | |
} | |
.paraProfes > tbody > tr > td{ | |
border: 0.5px solid black; | |
text-align:center; | |
} | |
form{ | |
text-align:-webkit-center | |
} | |
#porQue{ | |
/* La idea es que parezca un link. */ | |
} | |
#en{ | |
border:3px solid black /* Para ver bien que celda se esta por editar. */ | |
} | |
.paginaDiferente{ | |
position:fixed; | |
width:100%; | |
height:100%; | |
top:0; | |
left:0; | |
background:lightblue; | |
font-size:larger | |
} | |
.paginaDiferenteContenedor{ | |
position: fixed; | |
top: 50%; | |
left: 50%; | |
transform: translate(-50%,-50%); | |
text-align: left; | |
background: cornflowerblue; | |
border-radius: 50px; | |
padding: 5%; | |
} | |
.volver{ | |
} | |
.seleccionada{ | |
background:green /* Para visualizar el cambio de las celdas. */ | |
} | |
.obligatorio{ | |
} | |
.obligatorio:before{ | |
content:"*"; | |
color:red | |
/* Manera dinámica de agregar contenido repetitivo. */ | |
} | |
.comision{ | |
} | |
.paraProfes > tbody > tr > td:nth-child(1){ | |
font-weight: bold; | |
width: 30%; | |
background: lightgray; | |
} | |
.paraProfes > tbody > tr > td:nth-child(2){ | |
border-left: 2px solid black; | |
} | |
</style> | |
</head> | |
<body> | |
<!-- | |
Información necesaria: | |
Según mensaje de Nico de Brito: | |
Nombre, Apellido | |
Forma de contacto, puede ser: | |
Teléfono (fijo o celular?) | |
Facebook (?) | |
Cada opción tiene que tener un botón de + | |
Días, Horarios y Lugar de consulta | |
Según yo: | |
Materia | |
Comisión | |
Horarios de clase //Estan subidos en la pagina oficial. | |
Sistema discreto de logueo (en /login o desde aplicacion?) | |
Log In | |
Sing In | |
Nombre y Apellido | |
Contraseña | |
Carrera | |
Comisión | |
--> | |
<button style="float:right" onclick="mostrarPagina('inicioDeSesion')">Iniciar Sesión</button> | |
<div class=paginaDiferente id=inicioDeSesion hidden> | |
<div class=paginaDiferenteContenedor> | |
<form method=post> | |
<table> | |
<tr><td><label for=usuario>Correo:</label></td><td><input type=email placeholder="Dirección de correo" name=usuario required></td></tr> | |
<tr><td><label for=contraseña>Contraseña:</label></td><td><input type=password placeholder="Contraseña" name=contraseña required></td></tr> | |
</table> | |
<input type=hidden name=tipoDeFormulario value=0> | |
<input type=submit value=Entrar><button type=button onclick="mostrarPagina('registro')">Registrarme</button><button type=button class=volver onclick="volverDe('inicioDeSesion')" style="margin-left:5px">Volver</button> | |
</form> | |
</div> | |
</div> | |
<div class=paginaDiferente id=registro hidden> | |
<div class=paginaDiferenteContenedor> | |
<form method=post> | |
<table> | |
<tr><td><label id=etiquetaNombreRegistro for=nombreRegistro>Nombre y Apellido:</label></td><td><input type=text placeholder="Nombre y Apellido" name=nombreRegistro></td></tr> | |
<tr><td><label id=etiquetaUsuarioRegistro for=usuarioRegistro>Correo:</label></td><td><input type=email placeholder="Dirección de correo" name=usuarioRegistro required></td></tr> | |
<tr><td><label id=etiquetaContraseñaRegistro for=contraseñaRegistro>Contraseña:</label></td><td><input type=password placeholder="Contraseña" name=contraseñaRegistro required></td></tr> | |
<tr><td>Comisión: </td><td><select name=comisionRegistro > | |
<option selected="selected">101</option> | |
<option>102</option> | |
<option>103</option> | |
<option>104</option> | |
<option>105</option> | |
<option>106</option> | |
<option>107</option> | |
<option>108</option> | |
<option>109</option> | |
<option>110</option> | |
<option>111</option> | |
<option>113</option> | |
<option>114</option> | |
</select></td></tr> | |
</table> | |
<input type=hidden name=tipoDeFormulario value=1> | |
<input type=submit id=registrar value=Registrarme><button type=button class=volver onclick="volverDe('registro')">Volver</button> | |
</form> | |
</div> | |
</div> | |
<h1 id=titulo>Bienvenido, profesor.</h1> | |
<p id=introduccion>Este sitio está hecho por ingresantes a Ingeniería en Sistemas de Información en un esfuerzo por mejorar la comunicación de los datos necesarios sobre los diferentes profesores a los nuevos alumnos.</p> | |
<p><span style="color:blue;text-decoration:underline;cursor:pointer" onclick="mostrarPagina('porQueDiv')">¿Por qué decidimos hacer este sitio?</span></p> | |
<div class=paginaDiferente id=porQueDiv hidden> | |
<div class=paginaDiferenteContenedor width="70%"> | |
<p>Nos recomendaron que a cada profesor le pidieramos una serie de datos y que los anotemos, porque con 8 materias y mínimo 2 profesores por materia no nos íbamos a acordar.</p> | |
<p>Pero... ¿acaso no sería un problema anotarlo también? Cada uno tendría que usar una buena cantidad de tiempo dictando los horarios de consulta, su email y teléfono y blah blah blah, estoy seguro de que llevaría aproximadamente media hora. Media hora por cada profesor de cada materia. Un lujo.</p> | |
<p>Y no solo eso, cada comisión tiene su puñado de alumnos que seguro van a escribir algo mal y después 1) la información se va a cruzar y 2) van a estar pidiéndoles al resto los datos.</p> | |
<p>¿No sería más práctico tener una base de datos donde los alumnos pudieran, por comisión, ver los datos de los profesores que les tocan tal cual como ellos los dieron?</p> | |
<p>Para eso estamos aquí.</p> | |
<button class=volver style="float:right" onclick="volverDe('porQueDiv')">Volver</button> | |
</div> | |
</div> | |
<p>A continuación, le pedimos que llene el siguiente formulario:</p> | |
<form method="post"> | |
<table class=paraProfes> | |
<tr><td><label for=nombre>Nombre</label> </td><td class=obligatorio><input type=text placeholder="Nombre" id=nombre name=nombre required> </td></tr> | |
<tr><td><label for=apellido>Apellido</label> </td><td class=obligatorio><input type=text placeholder="Apellido" id=apellido name=apellido required> </td></tr> | |
<tr><td><label for=email1>Forma de contacto preferida:</label> </td><td id=contacto class=obligatorio> | |
<input class=email type=email placeholder="Correo Electrónico" id=email1 name=email1 required><button id=otroEmail type=button>+</button><br> | |
<br> | |
<input class=telefono type=tel placeholder="Número de teléfono" id=telefono1 name=telefono1 hidden><button id=otroTelefono name=otroTelefono type=button>Añadir número de teléfono</button> | |
</td></tr> | |
<tr><td><label for=materia1>Materias:</label> </td><td id=materias class=obligatorio> | |
<select class=materia id=materia1 name=materia1 required> | |
<option selected=selected>Álgebra y Geometría Analítica</option> | |
<option>Algoritmos y Estructura de Datos</option> | |
<option>Análisis Matemático I</option> | |
<option>Arquitectura de Computadoras</option> | |
<option>Física 1</option> | |
<option>Ingeniería y Sociedad</option> | |
<option>Matemática Discreta</option> | |
<option>Sistemas y Organizaciones</option> | |
</select> | |
<button id=otraMateria type=button>+</button> </td></tr> | |
<tr><td><label for=comision1>Comisiones:</label> </td><td class=obligatorio id=comisiones> <select id=comision1 name=comision1 class=comision> | |
<option selected="selected">101</option> | |
<option>102</option> | |
<option>103</option> | |
<option>104</option> | |
<option>105</option> | |
<option>106</option> | |
<option>107</option> | |
<option>108</option> | |
<option>109</option> | |
<option>110</option> | |
<option>111</option> | |
<option>113</option> | |
<option>114</option> | |
</select><button id=otraComision type=button>+</button> </td></tr> | |
</table> | |
<br> | |
<table id=consultaSemana style="table-layout:fixed;" class=paraProfes> | |
<tr><td colspan=6 class=obligatorio style="padding:5px"><big> Días y horarios de consulta:</big> (clickear / tocar las casillas para seleccionarlas) </td></tr> | |
<tr style="border: 2px solid black;background:lightgray"><th>Horarios </th><th>Lunes </th><th>Martes </th><th>Miércoles </th><th>Jueves </th><th>Viernes </th></tr> | |
<tr><td>8:00 </td><td id=en> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>8:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>9:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>9:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>10:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>10:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>11:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>11:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>12:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>12:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>13:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>13:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>14:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>14:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>15:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>15:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>16:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>16:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>17:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>17:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>18:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>18:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>19:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>19:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>20:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>20:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>21:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>21:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><td>22:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
</table><br> | |
<input type=hidden id=datosHorario name=datosHorario> | |
<label for=consultaLugar>Lugar de consulta:<div class=obligatorio><input type=text placeholder="Domicilio / Referencia" name=consultaLugar></div></label> | |
<p><span style="color:red">*</span> = obligatorio</p> | |
<input type=hidden name=tipoDeFormulario value=2> | |
<input type=submit value="Subir Información" id=subirInformacion> | |
</form> | |
<script> | |
const IZQUIERDA=37; | |
const ARRIBA=38; | |
const DERECHA=39; | |
const ABAJO=40; | |
const ENTER=13; | |
var shiftApretado=false; | |
var mouseApretado=0; | |
function q(selector){ | |
return document.querySelector(selector); | |
} | |
function g(id){ | |
return document.getElementById(id); | |
} | |
q('body').onkeydown=function(evento){ | |
var horarioActual=g('en'); | |
shiftApretado=evento.shiftKey; | |
switch(evento.which){ | |
case ENTER: | |
evento.preventDefault(); | |
cambiarSeleccionado(horarioActual); | |
break; | |
case IZQUIERDA: | |
if(horarioActual.previousElementSibling.previousElementSibling!=null)cambiarHorarioActual(horarioActual,horarioActual.previousElementSibling); | |
break; | |
case ARRIBA: | |
evento.preventDefault(); | |
var nodoPadre=horarioActual.parentNode; | |
if(nodoPadre.previousElementSibling.previousElementSibling.previousElementSibling!=null){ | |
var i=-1; | |
do{ | |
i++; | |
}while(nodoPadre.children[i]!=horarioActual&&i<10) | |
if(i==10){ | |
console.log('No lo encuentra.'); | |
}else{ | |
cambiarHorarioActual(horarioActual,nodoPadre.previousElementSibling.children[i]); | |
} | |
} | |
break; | |
case DERECHA: | |
cambiarHorarioActual(horarioActual,horarioActual.nextElementSibling); | |
break; | |
case ABAJO: | |
evento.preventDefault(); | |
var nodoPadre=horarioActual.parentNode; | |
var i=-1; | |
do{ | |
i++; | |
}while(nodoPadre.children[i]!=horarioActual&&i<10) | |
if(i==10){ | |
console.log('No lo encuentra.'); | |
}else{ | |
cambiarHorarioActual(horarioActual,nodoPadre.nextElementSibling.children[i]); | |
} | |
break; | |
} | |
}; | |
function cambiarHorarioActual(actual,nuevo){ | |
if(nuevo!=null){ | |
actual.id=""; | |
nuevo.id='en'; | |
if(shiftApretado){ | |
if(nuevo.classList.contains('seleccionada')){ | |
var temp=actual.classList | |
if(temp.contains('seleccionada'))temp.remove('seleccionada'); | |
nuevo.classList=temp; | |
}else{ | |
var temp=actual.classList | |
if(!temp.contains('seleccionada'))temp.add('seleccionada'); | |
nuevo.classList=temp; | |
} | |
} | |
} | |
} | |
function cambiarSeleccionado(horario){ | |
var clases=horario.classList; | |
if(clases.contains('seleccionada')){ | |
clases.remove('seleccionada'); | |
}else{ | |
clases.add('seleccionada'); | |
} | |
} | |
q('body').onmousedown=function(evento){responderAlMouse(evento);mouseApretado++;} | |
q('body').onmouseup=function(){mouseApretado=0;} | |
q('body').onmouseover=function(evento){ | |
if(mouseApretado)responderAlMouse(evento); | |
} | |
function responderAlMouse(evento){ | |
if(esUnaCeldaEditable(evento.path)){ | |
evento.preventDefault(); | |
cambiarSeleccionado(evento.path[0]); | |
} | |
} | |
function esUnaCeldaEditable(arrayDeElementos){ | |
return arrayDeElementos[3].id==="consultaSemana"&&![arrayDeElementos[2].children[0],arrayDeElementos[2].children[1]].includes(arrayDeElementos[1])&&arrayDeElementos[1].children[0]!==arrayDeElementos[0]; | |
} | |
g('subirInformacion').onmouseover=function(){ | |
if(!q('.seleccionada')){ | |
alert('Falta información. Por favor, complete todo lo requerido.'); | |
}else{ | |
var campoDeDatos=g('datosHorario'); | |
campoDeDatos.value=""; | |
for(var i=2;i<=6;i++){ | |
for(var j=3;j<=31;j++){ | |
if(q('#consultaSemana > tbody > tr:nth-child('+j+') > td:nth-child('+i+')').classList.contains('seleccionada')){ | |
campoDeDatos.value+=j+";"+i+"-"; | |
} | |
} | |
} | |
campoDeDatos.value=campoDeDatos.value.substring(0,campoDeDatos.value.length-1); | |
} | |
} | |
function mostrarPagina(idDePagina){ | |
g(idDePagina).removeAttribute('hidden'); | |
} | |
function volverDe(idDePagina){ | |
g(idDePagina).setAttribute('hidden',''); | |
} | |
var numeroDelProximoEmail=2; | |
g('otroEmail').onclick=function(){ | |
var nodoTemporal=g('email1').cloneNode(); | |
nodoTemporal.value=''; | |
nodoTemporal.removeAttribute('id'); | |
nodoTemporal.name='email'+numeroDelProximoEmail; | |
g('contacto').insertBefore(nodoTemporal,g('otroEmail')); | |
numeroDelProximoEmail++; | |
} | |
var numeroDelProximoTelefono=2; | |
g('otroTelefono').onclick=function(){ | |
if(g('otroTelefono').innerHTML!=='+'){ | |
g('telefono1').removeAttribute('hidden'); | |
g('otroTelefono').innerHTML='+'; | |
}else{ | |
var nodoTemporal=g('telefono1').cloneNode(); | |
nodoTemporal.value=''; | |
nodoTemporal.removeAttribute('id'); | |
nodoTemporal.name='telefono'+numeroDelProximoTelefono; | |
g('contacto').insertBefore(nodoTemporal,g('otroTelefono')); | |
numeroDelProximoTelefono++; | |
} | |
} | |
var numeroDeLaProximaMateria=2; | |
g('otraMateria').onclick=function(){ | |
var nodoTemporal=g('materia1').cloneNode(true); | |
nodoTemporal.selectedIndex=0; | |
nodoTemporal.removeAttribute('id'); | |
nodoTemporal.name='materia'+numeroDeLaProximaMateria; | |
g('materias').insertBefore(nodoTemporal,g('otraMateria')); | |
numeroDeLaProximaMateria++; | |
} | |
var numeroDeLaProximaComision=2; | |
g('otraComision').onclick=function(){ | |
var nodoTemporal=g('comision1').cloneNode(true); | |
nodoTemporal.selectedIndex=0; | |
nodoTemporal.removeAttribute('id'); | |
nodoTemporal.name='comision'+numeroDeLaProximaComision; | |
g('comisiones').insertBefore(nodoTemporal,g('otraComision')); | |
numeroDeLaProximaComision++; | |
} | |
function iniciarSesion(){ | |
g('inicioDeSesion').removeAttribute('hidden'); | |
} | |
</script> | |
<?php | |
}else{ | |
if(isset($_GET['token'])){ | |
$conexion=mysqli_connect('XXXXX.XXXXXXXXXX.XXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); | |
$sentencia=$conexion->prepare('UPDATE `2019_isi_alumnos` SET `verified` = 1 WHERE `token` = ? ;'); | |
if(!$sentencia){ | |
echo "Error: No se pudo crear la sentencia preparada. Error: ".$sentencia->error; | |
exit; | |
} | |
$sentencia->bind_param('s',$_GET['token']); | |
if (!$sentencia->execute()) { | |
echo "Falló la ejecución: (" . $sentencia->errno . ") " . $sentencia->error; | |
exit; | |
} | |
?> | |
h1{ | |
} | |
p{ | |
} | |
a{ | |
} | |
</style> | |
</head> | |
<body> | |
<h1>¡Usuario verificado!</h1> | |
<p>Ya podés entrar haciento click <a href=/>aquí</a>.</p> | |
<?php | |
exit; | |
}elseif(isset($_GET['celuuid'])){ | |
$conexion=mysqli_connect('XXXXX.XXXXXXXXXX.XXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); | |
$sentencia=$conexion->prepare('SELECT `id` FROM `2019_isi_alumnos` WHERE `cel1` = ? OR `cel2` = ?;'); | |
if(!$sentencia){ | |
echo "Error: No se pudo crear la sentencia preparada. Error: ".$sentencia->error; | |
exit; | |
} | |
$sentencia->bind_param('ss',$_GET['celuuid'],$_GET['celuuid']); | |
if (!$sentencia->execute()) { | |
echo "Falló la ejecución: (" . $sentencia->errno . ") " . $sentencia->error; | |
exit; | |
} | |
$sentencia->store_result(); | |
if(!$sentencia->num_rows){ | |
echo('95% probabilidad de fraude, reubicando...'); | |
sleep(5); | |
header('http://2019isi.dx.am'); | |
exit; | |
} | |
$sentencia->bind_result($id); | |
$sentencia->data_seek(0); | |
$sentencia->fetch(); | |
mostrarInformacion($id); | |
$sentencia->close(); | |
}else{ | |
echo('95% probabilidad de fraude, reubicando...'); | |
sleep(5); | |
header('http://2019isi.dx.am'); | |
exit; | |
} | |
} | |
function mostrarInformacion($id){ | |
global $conexion; | |
$datosDelAlumno=$conexion->query("SELECT `nombreYapellido`,`comision` FROM `2019_isi_alumnos` WHERE `id` = $id ;"); | |
$infoDeProfesCruda=$conexion->query('SELECT * FROM `2019_isi_infoProfesores`;'); | |
$informacionDeLasClasesDeConsulta=array(); | |
$informacionDeLosProfesores=array(); | |
$datosDelAlumno=$datosDelAlumno->fetch_row(); | |
while($infoDeProfes=$infoDeProfesCruda->fetch_row()){ | |
if(in_array($datosDelAlumno[1],explode(',',$infoDeProfes[4]))){ | |
$informacionDeLasClasesDeConsulta[]=array($infoDeProfes[1],explode(',',$infoDeProfes[3]),explode('-',$infoDeProfes[5]),$infoDeProfes[7]); | |
$informacionDeLosProfesores[$infoDeProfes[1]]=array(explode(',',$infoDeProfes[2]),$infoDeProfes[6]); | |
//key: num 0: 1=nombreYapellido 1: 3=materias 2: 5=horariosConsulta 3: 7=color | |
//key: 1=nombreYapellido 0: 2=contacto 1: 6=lugarConsulta | |
} | |
} | |
$materiasSubidas=array(); | |
foreach($informacionDeLasClasesDeConsulta as $profe){ | |
foreach($profe[1] as $materia){ | |
if($materiasSubidas[$materia]==null){ | |
$materiasSubidas[$materia]=array(); | |
} | |
foreach($materiasSubidas[$materia] as $celda){ | |
if(in_array($celda[0],$profe[2])){ | |
$celda[1].="<br>{$profe[0]}"; | |
$celda[2]=((hexdec(substr($celda[2],0,2))+hexdec(substr($profe[3],0,2)))/2).((hexdec(substr($celda[2],2,2))+hexdec(substr($profe[3],2,2)))/2).((hexdec(substr($celda[2],4,2))+hexdec(substr($profe[6],4,2)))/2); | |
break; | |
unset($profe[2][array_search($celda[0],$profe[2])]); | |
} | |
} | |
foreach($profe[2] as $horario){ | |
$materiasSubidas[$materia][]=array($horario,$profe[0],$profe[3]); | |
} | |
} | |
} | |
?> | |
<script> | |
var infoDeTabla=JSON.parse(<?=json_encode($materiasSubidas)?>); | |
var infoDeProfes=JSON.parse(<?json_encode($informacionDeLosProfesores)?>); | |
</script> | |
<style> | |
#materias{ | |
} | |
#horarios{ | |
} | |
#horariosTitulo{ | |
} | |
#lunes{ | |
} | |
#martes{ | |
} | |
#miercoles{ | |
} | |
#jueves{ | |
} | |
#viernes{ | |
} | |
#profes{ | |
} | |
#informacion{ | |
} | |
#lugarContenedor{ | |
} | |
#tituloLugar{ | |
} | |
#contacto-sContenedor{ | |
} | |
#contacto-s{ | |
} | |
.dia{ | |
} | |
.vacia{ | |
content=""; | |
background=white; | |
} | |
.mail{ | |
} | |
.numeroDeTelefono{ | |
} | |
</style> | |
<head> | |
</body> | |
<h1>Bienvenid@, <?=$datosDelAlumno[0]?></h1> | |
<select onchange="actualizarTabla()" id=materias> | |
<?php | |
foreach(array_keys($materiasSubidas) as $materia){ | |
echo "<option>$materia</option>"; | |
} | |
?> | |
</select> | |
<table id=horarios> | |
<tr><th id=horariosTitulo>Horarios </th><th id=lunes class=dia>Lunes </th><th id=martes class=dia>Martes </th><th id=miercoles class=dia>Miércoles </th><th id=jueves class=dia>Jueves </th><th id=viernes class=dia>Viernes </th></tr> | |
<tr><th>8:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>8:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>9:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>9:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>10:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>10:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>11:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>11:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>12:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>12:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>13:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>13:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>14:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>14:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>15:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>15:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>16:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>16:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>17:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>17:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>18:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>18:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>19:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>19:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>20:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>20:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>21:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>21:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
<tr><th>22:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr> | |
</table> | |
<select onchange="actualizarDatos()" id=profes> | |
<?php | |
foreach(array_keys($informacionDeLosProfesores) as $nombreYapellido){ | |
echo "<option>$nombreYapellido</option>"; | |
} | |
?> | |
</select> | |
<table id=informacion> | |
<tr id=lugarContenedor><td>Lugar de Consulta: </td> <td id=lugar> </td></tr> | |
<tr id=contacto-sContenedor><td>Contacto/s: </td> <td id=contacto-s> </td></tr> | |
</table> | |
<script> | |
function g(id){ | |
return document.getElementById(id); | |
} | |
function actualizarTabla(){ | |
document.querySelectorAll('#horarios > tbody > tr > td:not(.vacia)').forEach(function(elemento){ | |
elemento.removeAttribute('style'); | |
elemento.classList.add('vacia'); | |
}); | |
infoDeTabla[g('materias').value].forEach(function(elemento){ | |
var celdaActual=document.querySelector('#horario > tbody > tr:nth-child('+elemento[0].split(';')[0]-2+') > td:nth-child('+elemento[0].split(';')[1]-1+')') | |
celdaActual.classList.remove('vacia'); | |
celdaActual.innerHTML=elemento[1]; | |
celdaActual.background='#'+elemento[2]; | |
}); | |
} | |
function actualizarDatos(){ | |
var profeElegido=infoDeProfes[g('profes').value]; | |
g('lugar').innerHTML=profeElegido[1]; | |
contactoContenedor=g('contacto-s'); | |
contactoContenedor.innerHTML=formatearContacto(profeElegido[0][0]); | |
profeElegido[0].forEach(function(elemento){ | |
contactoContenedor.innerHTML+='<br>'+formatearContacto(elemento); | |
}); | |
} | |
function formatearContacto(contacto){ | |
var resultado=''; | |
if(contacto.includes('@')){ | |
resultado='<a class=mail href:mailto:'+contacto+'>'+contacto+'</a>'; | |
}else{ | |
resultado='<span class=numeroDeTelefono>'+contacto+'</span>'; | |
} | |
return resultado; | |
} | |
document.querySelectorAll('#horarios > tbody > tr > td').forEach(function(elemento){ | |
elemento.classList.add('vacia'); | |
}); | |
</script> | |
<?php | |
} | |
?> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment