Formalismos. Departamento -> Carrera.
[CLab.git] / contenido / usuario+horarios.php
blobe218aa3547f8a1c468011afceeedd6de222e6e80
1 <?php
2 function MOSTRAR_SELECCION_TALLER() {
3 echo
5 <form action="./?accion=horarios" method="post">
6 <table border=0>
7 <tr><td>Taller a asignar: </td><td>
8 <select name="taller">
9 ';
10 if ($_SESSION['dpto'] == 0) {
11 echo
13 <option value="LSA">'."LSA".'
14 <option value="LID">'."LID".'
15 <option value="LAI">'."LAI".'
16 <option value="LIV">'."LIV".'
18 } else {
19 echo
21 <option value="TPP">'."TPP".'
22 <option value="TIS">'."TIS".'
23 <option value="TAS">'."TAS".'
24 <option value="TEC">'."TEC".'
27 echo
29 </select>
30 </td></tr>
31 </table>
32 <input type="hidden" name="HORARIO_registrar" value="insertar">
33 <input type="submit" name="continuar" value="Continuar" />
34 </form>
38 /*****************************************************************************************************************************************************/
39 //Se nos pide registrar un instructor?
40 function HORARIO_registrar_instructor() {
41 global $session, $link, $base, $motor, $usuario, $clave;
43 echo 'Procediendo a registro de instructor, parametros:';
44 echo 'Usuario: '.$_SESSION['user'].'<hr />';
45 echo 'Tipo: '.$_SESSION['tipo'].'<hr />';
46 echo 'Dpto: '.$_SESSION['dpto'].'<hr />';
47 echo 'dia: '.$_SESSION['dia'].'<hr />';
48 echo 'posicion: '.$_SESSION['posicion'].'<hr />';
49 echo '<hr />';
51 if (!$session->isAdmin()) {die("Lo siento, Ud. esta intentando registrar un Instructor sin ser administrador");}
53 echo "<h2>Visor de Horarios - Procesando la asignación de horarios para ".$_SESSION['user']."<br /><hr />";
55 $link = @mysql_connect($motor, $usuario, $clave) or die('Por favor revise sus datos, puesto que se produjo el siguiente error:<br /><pre>' . mysql_error() . '</pre>');
56 mysql_select_db($base, $link) or die('!->La base de datos seleccionada "'.$base.'" no existe');
58 //Si es encargado de taller no importa si tiene otro laboratorio
59 $num_rows = 0;
60 if ( $_SESSION['tipo'] != 2 ) {
61 //Verificamos que no tenga otro laboratorio al mismo tiempo.
62 $q = "SELECT * FROM horarios WHERE username='". $_SESSION['user'] ."' AND dia='".$_SESSION['dia']."' AND posicion='".$_SESSION['posicion']."';";
63 //echo $q."<br />";
64 $resultados = @mysql_query($q, $link) or die('!->Ocurrió un error mientras se revisaba la disponibilidad del instructor.');
65 $num_rows = mysql_numrows($resultados);
66 //$num_rows > 0 significa que el muchacho ya tiene asignado otro laboratorio a la misma hora :)
67 if ($num_rows > 0) {
68 echo
70 <h3>Registro de Intructor abortado</h3><hr />
71 Lo sentimos, pero este Instructor ya tiene otros laboratorios asignados el mismo día y hora.
73 echo CONTINUAR;
74 return;
78 //Ok, no tiene otro laboratorio simultaneo, entonces verificamos que no haya nadie mas ya asignado a ese taller
79 //Si no es asistente, entonces contar todos los que hay que NO sean asistentes.
80 //Tampoco hay que contar los Encargados de Taller
81 switch ( $_SESSION['tipo'] ) {
82 //Asistente de Catedratico, contar solo asistentes en ese taller.
83 case 0:
84 $q = "SELECT * FROM horarios, users WHERE horarios.username = users.username AND tipo = 0 AND taller='". $_SESSION['taller'] ."' AND dia='".$_SESSION['dia']."' AND posicion='".$_SESSION['posicion']."';";
85 break;
86 //Asistente de Taller + Instructor, contar todo menos asistentes y encargados.
87 case 1:
88 case 3:
89 $q = "SELECT * FROM horarios, users WHERE horarios.username = users.username AND tipo != 0 AND tipo != 2 AND taller LIKE'%". $_SESSION['taller'] ."%' AND dia='".$_SESSION['dia']."' AND posicion='".$_SESSION['posicion']."';";
90 break;
91 //Encargado de Taller, verificar si EL esta.
92 case 2:
93 //Si ya hay uno: $q = "SELECT * FROM horarios, users WHERE horarios.username = users.username AND tipo = 2 AND taller='". $_SESSION['taller'] ."' AND dia='".$_SESSION['dia']."' AND posicion='".$_SESSION['posicion']."';";
94 $q = "SELECT * FROM horarios, users WHERE horarios.username = '".$_SESSION['user']. "' AND users.username = '" .$_SESSION['user']. "' AND tipo = 2 AND taller='". $_SESSION['taller'] ."' AND dia='".$_SESSION['dia']."' AND posicion='".$_SESSION['posicion']."';";
95 break;
97 //echo $q.'<br />';
98 $resultados = @mysql_query($q, $link) or die('!->Ocurrió un error mientras se revisaba la disponibilidad del instructor. (2)');
99 $num_rows = mysql_numrows($resultados);
101 //Umm si >0 es que hay alguien ahi, y podemos proceder solo si ese numero es menor a 8 y somos asistentes...
102 if ( $num_rows > 0 && ($_SESSION['tipo'] != 0 && $num_rows < 8) ) {
103 echo '<h3>Registro de Intructor abortado</h3><hr />';
105 switch ( $_SESSION['tipo'] ) {
106 case 0:
107 echo 'Lo sentimos, pero ya hay 8 ' . TI_0 . ' en este taller a esta hora<br />';
108 break;
109 case 1:
110 case 3:
111 echo 'Lo sentimos, pero este taller ya tiene otro(s) Instructor(es) asignado(s) el mismo día y hora.<br />';
112 break;
113 case 2:
114 echo 'Lo sentimos, pero este Encargado de taller ya esta asignado a este horario.<br />';
115 break;
117 echo CONTINUAR;
118 return;
120 //Finalmente, si no estabamos ocupados y no lo estaban ocupando, nos insertamos.
121 //Insertamos al instructor en el horario.
123 if ( $_SESSION['tipo'] == 2 ) {
124 $tempTaller = "";
125 } else {
126 $tempTaller = $_SESSION['taller'];
128 $q = "INSERT INTO horarios VALUES ('".$_SESSION['user'] ."', ' " . $tempTaller . "','".$_SESSION['dia']."','".$_SESSION['posicion']."')";
129 //echo $q;
130 @mysql_query($q, $link) or die('!->Ocurrió un error en la ultima etapa de la adición de usuarios.');
131 echo
133 <h3>Registro exitoso</h3><br />
135 echo CONTINUAR;
136 return;
138 function HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO($dia, $hora) {
139 global $session, $link;
140 // 1. Tengo ocupada esa hora?
141 switch ( $_SESSION['tipo'] ) {
142 case 0:
143 case 1:
144 case 3:
145 case 2:
146 $q = "SELECT users.username, nombre, horarios.taller FROM users,horarios WHERE horarios.username = '".$_SESSION['user'] . "' AND users.username = '".$_SESSION['user']."' AND tipo = '".$_SESSION['tipo']."' AND dia='$dia' AND posicion='$hora'";
147 break;
149 //echo $q;
150 $resultados = @mysql_query($q, $link);
151 $num_rows = mysql_numrows($resultados);
153 if($num_rows > 0){
154 //Los encargados estan ocupados y punto.
155 if ( $_SESSION['tipo'] == 2 ) {
156 $msj = $msj.'<FONT COLOR="#800000">'."Ocupado"."</font><br />";
157 } else {
158 //Si, la tengo ocupada, ¿en que taller estoy?
159 //Hacemos for para mostrar si hay mas de un taller (error)!
160 for($i=0; $i<$num_rows; $i++){
161 $msj = $msj.'<FONT COLOR="#800000">'.mysql_result($resultados,$i,"taller")."</font><br />";
164 }else {
165 //No, no la tengo ocupada!, entonces dejemos ponerle trabajo, claro, si somos admins...
166 if ($session->isAdmin()){
167 $msj=$msj .'<a href="./?accion=horarios&amp;o=a&amp;d='.$dia.'&amp;p='.$hora.'">Asignar</a>';
168 } else {
169 $msj="";
173 return "<td>".$msj."</td>";
176 function HORARIO__DESCRIBIR_ELEMENTO_EN_POS($taller,$dia, $hora) {
177 global $session, $link;
178 //Si existe un nombre en $_GET entonces mostrar solo ese nombre o asignar.
179 if ( isset($_GET['user']) )
180 {$userExtra = "horarios.username = '".$_GET['user'] . "' AND users.username = '".$_GET['user']."'";}
181 else
182 {$userExtra = "horarios.username = users.username";}
184 // ¿Hay alguien(es) en esa posición?
185 $q = "SELECT users.username, nombre FROM users,horarios WHERE $userExtra AND taller LIKE '%$taller%' AND tipo = '".$_SESSION['tipo']."' AND dia='$dia' AND posicion='$hora'";
186 //echo $q;
187 $resultados = @mysql_query($q, $link);
188 $num_rows = mysql_numrows($resultados);
190 if($num_rows > 0){
191 $msj="";
192 for($i=0; $i<$num_rows; $i++){
193 $uname = mysql_result($resultados,$i,"nombre");
194 $uinfo = mysql_result($resultados,$i,"username");
195 /* Por petición solo el primer nombre es mostrado */
196 unset ($nombre);
197 ereg("([^ ]*)", $uname, $nombre);
198 $msj = $msj.'<a href="./?'._ACC_.'=usuario+info&amp;usr='.$uinfo.'">'.$nombre[1].'</a>[<a href="./?accion=horarios&amp;o=e&amp;t='.$taller.'&amp;d='.$dia.'&amp;p='.$hora.'&amp;user='.$uinfo.'">X</a>]<br />';
202 if($num_rows == 0 || ($_SESSION['tipo'] == 0 && $num_rows < 9) || $_SESSION['tipo'] == 2){
203 if ( isset($_SESSION['user']) ) { $u = "&amp;nombre=".$_SESSION['user']; } else { $u = ""; }
204 $msj=$msj .'<a href="./?accion=horarios&amp;t='.$taller.'&amp;d='.$dia.'&amp;p='.$hora.'&amp;o=a&amp;tipo='.$_SESSION['tipo'].$u.'">Asignar</a>';
207 return "<td>".$msj."</td>";
210 function MOSTRAR_HORARIOS_UNICO() {
211 /* Muestra la tabla de horario en base a las opciones de filtro establecidas */
212 global $link, $base, $motor, $usuario, $clave;
213 $link = @mysql_connect($motor, $usuario, $clave) or die('Por favor revise sus datos, puesto que se produjo el siguiente error:<br /><pre>' . mysql_error() . '</pre>');
214 @mysql_select_db($base, $link) or die('!->La base de datos seleccionada "'.$base.'" no existe');
215 echo "<h3>";
216 switch ($_SESSION['dpto'])
218 case 0: echo DE_0; break;
219 case 1: echo DE_1; break;
221 echo
222 ' </h3>
223 <hr />
224 <table border="1" cellspacing="0" cellpadding="3">
225 <tr><th>Horario</th><th>Lunes</th><th>Martes</th><th>Miercoles</th><th>Jueves</th><th>Viernes</th><th>Sabado</th></tr>
227 for ($i=450; $i<=1170; $i+=60){
228 echo "<tr><td><b>". date("h:ia", mktime(0,$i)) . "</b></td>". HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(1, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(2, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(3, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(4, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(5, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(6, $i)."</tr>";
230 echo "</table>";
231 mysql_close($link);
234 function MOSTRAR_HORARIOS() {
235 /* Muestra la tabla de horario en base a las opciones de filtro establecidas */
236 global $link, $base, $motor, $usuario, $clave;
237 $link = @mysql_connect($motor, $usuario, $clave) or die('Por favor revise sus datos, puesto que se produjo el siguiente error:<br /><pre>' . mysql_error() . '</pre>');
238 @mysql_select_db($base, $link) or die('!->La base de datos seleccionada "'.$base.'" no existe');
239 echo "<h3>";
240 switch ($_SESSION['dpto'])
242 case 0: echo DE_0; break;
243 case 1: echo DE_1; break;
245 echo ' - Taller '.$_SESSION['taller'].' - ';
246 switch ($_SESSION['tipo'])
248 case 0: echo TI_0; break;
249 case 1: echo TI_1; break;
250 case 2: echo TI_2; break;
251 case 3: echo TI_3; break;
254 echo
255 ' </h3>
256 <hr />
257 <table border="1" cellspacing="0" cellpadding="3">
258 <tr><th>Horario</th><th>Lunes</th><th>Martes</th><th>Miercoles</th><th>Jueves</th><th>Viernes</th><th>Sabado</th></tr>
260 for ($i=450; $i<=1170; $i+=60){
261 echo "<tr><td><b>". date("h:ia", mktime(0,$i)) . "</b></td>". HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 1, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 2, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 3, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 4, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 5, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 6, $i)."</tr>";
263 echo "</table>";
264 mysql_close($link);
267 function CONTENIDO_horarios() {
268 /* Esta es la función principal que muta dependiendo de la acción requerida */
269 global $session, $database, $link, $base, $motor, $usuario, $clave;
271 /*****************************************************************************************************************************************************/
273 //Tenemos un nombre y somos admins, o somos instructores? - Y no estamos procesando un (o)bjectivo.
274 if ( !$session->isAdmin() || ($session->isAdmin() && isset($_GET['user'])) && !isset($_GET['o']) && !isset($_POST['HORARIO_registrar']) ) {
275 if ( $session->isAdmin() ) {
276 $_SESSION['user']=$_GET['user'];
277 } else {
278 $_SESSION['user'] = $session->username;
280 //echo "We've got a name: " . $_SESSION['user'];
281 $req_user_info = $database->getUserInfo($_SESSION['user']);
283 $_SESSION['tipo'] = $req_user_info['tipo'];
284 $_SESSION['dpto'] = $req_user_info['departamento'];
285 unset($_SESSION['taller']);
287 MOSTRAR_HORARIOS_UNICO();
288 return;
290 /*****************************************************************************************************************************************************/
291 /* Teoricamente solo un Admin puede pasar de esta linea. */
292 if (!$session->isAdmin()) {die("Lo siento, Ud. esta intentando ingresar a un área especial sin ser administrador");}
293 /*****************************************************************************************************************************************************/
295 /* Necesitamos saber el día y la posición en la que lo quieren registrar */
296 if (!isset($_POST['HORARIO_registrar']) ) {
297 $_SESSION['dia'] = $_GET['d'];
298 $_SESSION['posicion'] = $_GET['p'];
300 /* Se nos pide registrar a un instructor */ /*Entramos si somos Encargados de Taller */
301 if ( isset($_POST['HORARIO_registrar']) || ($_GET['o'] == 'a' && $_SESSION['tipo'] == 2 && $_SESSION['user'] != "")) {
302 if ( !isset($_SESSION['taller']) ) { $_SESSION['taller'] = $_POST['taller']; }
303 if ( isset($_POST['user']) ) { $_SESSION['user'] = $_POST['user']; }
304 if ($_GET['o'] == 'a' && $_SESSION['tipo'] == 2) { $_SESSION['taller'] = ""; }
305 HORARIO_registrar_instructor();
306 return;
309 /* Se nos pide ir a la pantalla de ingresar o registrar usuario */
310 if ( isset($_GET['d']) && isset($_GET['p'])&& isset($_GET['o'])) {
312 $link = @mysql_connect($motor, $usuario, $clave) or die('Por favor revise sus datos, puesto que se produjo el siguiente error:<br /><pre>' . mysql_error() . '</pre>');
313 mysql_select_db($base, $link) or die('!->La base de datos seleccionada "'.$base.'" no existe');
314 echo '<h2>Visor de Horarios - Filtro de instructores</h2><hr>';
316 // ¿Quieren agregar?
317 if ($_GET['o'] == 'a') {
318 if ( !isset($_SESSION['taller']) ) {
319 // Si entro por nombre, entonces no tiene taller preseleccionado: mandar a seleccion de Taller
320 MOSTRAR_SELECCION_TALLER();
321 return;
324 //Sino busquemos al elegido: ¿Hay alguien(es) en ese departamente y con ese cargo?
325 $q = "SELECT username, nombre FROM users WHERE departamento='".$_SESSION['dpto'] ."' AND tipo='" . $_SESSION['tipo'] . "'";
326 $resultados = @mysql_query($q, $link);
327 $num_rows = mysql_numrows($resultados);
329 //Si hay personal entonces mostrar.
330 if($num_rows > 0){
331 echo
333 <form action="./?'._ACC_.'=horarios" method="post">
334 <table border=0>
335 <tr><td>Instructores disponibles para el filtro actual: </td><td>
336 <select name="user">
340 for($i=0; $i<$num_rows; $i++){
341 $uname = mysql_result($resultados,$i,"username");
342 $unombre = mysql_result($resultados,$i,"nombre");
343 echo '<option value="' . $uname . '">'.$unombre;
345 echo
347 </select>
348 </td></tr>
349 </table>
350 <input type="hidden" name="HORARIO_registrar" value="insertar">
351 <input type="submit" name="continuar" value="Continuar" />
352 </form>
354 } else {
355 echo '<h3>Error<h3><hr />';
356 echo 'No se encontró ningún instructor que cumpliera con su criterio<br />';
359 //Quieren eliminar
360 } else {
361 $req_user_info = $database->getUserInfo($_GET['user']);
362 //eliminar
363 if ( $req_user_info['tipo'] == 2 ) {
364 $q = "DELETE FROM horarios WHERE username LIKE '%".$_GET['user']."%' AND dia = ".$_GET['d']." AND posicion = ".$_GET['p'].";";
365 } else {
366 $q = "DELETE FROM horarios WHERE username LIKE '%".$_GET['user']."%' AND taller LIKE '%".$_GET['t']."%' AND dia = ".$_GET['d']." AND posicion = ".$_GET['p'].";";
368 //echo $q;
369 $resultado = mysql_query($q, $link) or die('!->La operación de eliminación no pudo ser completada');
370 echo "<h3>Operación de eliminación completada</h3><hr />".$_GET['user']." ha sido removido del horario.<hr />";
371 echo CONTINUAR;
373 return;
376 /*****************************************************************************************************************************************************/
377 /* Acción por defecto de Administrador: Se nos pide filtrar los horarios.*/
378 $paso = $_POST['paso'];
380 0. Selección de departamento.
381 $_POST['dpto']
382 1. Selección de ocupacion del instructor
383 $_POST['tipo']
384 1.1 Salta paso 2 si $_POST['tipo'] = 2 -> Encargado de Taller
385 2. Selección de taller.
386 $_POST['taller']
388 //¿alguien tiene cuello y nos han pedido que lo asignemos de una vez sin pasar por licitación de Instructores XD?:
389 if (isset($_GET['user'])) { $_SESSION['user'] = $_GET['user']; } else { unset ($_SESSION['user']); }
390 echo '<h2>Visor de Horarios</h2></b><hr />';
391 switch ($paso) {
392 case 0:
393 if (!isset($_GET['dpto'])) {
394 echo
396 <form action="./?accion=horarios" method="post">
397 <table border=0>
398 <tr><td>Carrera a administrar: </td><td>
399 <select name="dpto">
400 <option value="0">'.DE_0.'
401 <option value="1">'.DE_1.'
402 </select>
403 </td></tr>
404 </table>
405 <input type="hidden" name="paso" value="1">
406 <input type="submit" name="continuar" value="Continuar" />
407 </form>
409 break;
410 } else {
411 $_SESSION['dpto'] = $_GET['dpto'];
413 case 1:
414 if (!isset($_GET['tipo'])) {
415 $_SESSION['dpto'] = $_POST['dpto'];
417 echo
419 <form action="./?accion=horarios" method="post">
420 <table border=0>
421 <tr><td>Tipo de instructor a administrar: </td><td>
422 <select name="tipo">
423 <option value="0">'.TI_0.'
424 <option value="1">'.TI_1.'
425 <option value="2">'.TI_2.'
426 <option value="3">'.TI_3.'
427 </select>
428 </td></tr>
429 </table>
430 <input type="hidden" name="paso" value="2">
431 <input type="submit" name="continuar" value="Continuar" />
432 </form>
434 echo '<hr />';
435 switch ($_SESSION['dpto'])
437 case 0: echo DE_0; break;
438 case 1: echo DE_1; break;
440 break;
441 } else {
442 $_POST['tipo'] = $_GET['tipo'];
444 case 2:
445 $_SESSION['tipo'] = $_POST['tipo'];
446 //Si es encargado de Taller nos saltamos la seleccion.
447 if ($_SESSION['tipo'] != 2) {
448 if ( isset($_GET['user'] ) ) { $ChinearGet = "&amp;user=".$_GET['user']; } else { $ChinearGet = ""; }
449 echo
451 <form action="./?accion=horarios'.$ChinearGet.'" method="post">
452 <table border=0>
453 <tr><td>Taller a administrar: </td><td>
454 <select name="taller">
456 if ($_SESSION['dpto'] == 0) {
457 echo
459 <option value="LSA">'."LSA".'
460 <option value="LID">'."LID".'
461 <option value="LAI">'."LAI".'
462 <option value="LIV">'."LIV".'
464 } else {
465 echo
467 <option value="TPP">'."TPP".'
468 <option value="TIS">'."TIS".'
469 <option value="TAS">'."TAS".'
470 <option value="TEC">'."TEC".'
473 echo
475 </select>
476 </td></tr>
477 </table>
478 <input type="hidden" name="paso" value="3">
479 <input type="submit" name="continuar" value="Continuar" />
480 </form>
482 echo '<hr />';
483 switch ($_SESSION['dpto'])
485 case 0: echo DE_0; break;
486 case 1: echo DE_1; break;
488 echo " -> ";
489 switch ($_SESSION['tipo'])
491 case 0: echo TI_0; break;
492 case 1: echo TI_1; break;
493 case 2: echo TI_2; break;
494 case 3: echo TI_3; break;
496 break;
497 } else {
498 $_POST['taller'] = "";
500 case 3:
501 $_SESSION['taller'] = $_POST['taller'];
502 MOSTRAR_HORARIOS();
503 break;
504 default:
505 return;