0) { $temp = str_replace('{', '', $fechas[0]['fecha']); $temp = str_replace('}', '', $temp); $temp = explode(',', $temp); if ($hoy < strtotime($temp[0])) $fueraPeriodo = true; } else $fueraPeriodo = true; } if (!$fueraPeriodo) { $etapa = Etapa::getClaveEtapaXID($pdo, $_POST['etapa']); $seccion = ''; if ($actual){ $seccion = alMomento($pdo, $_POST['id'],$_POST['etapa']); if ($seccion != 'error') $return['momento'] = $seccion; else $return['error'] = 'error'; } switch (mb_strtoupper($etapa)){ case 'REVISION': $etapaFinalistas = Etapa::buscaEtapaXClave($pdo, 'FINALISTAS'); if (isset($etapaFinalistas)) $fechasFinalistas = Concurso::getFechaXEtapa($pdo, $_POST['id'], $etapaFinalistas); if (isset($fechasFinalistas)) $seccion = finalistas($pdo, $_POST['id'], $fechasFinalistas, $actual, $edicion); else $seccion = 'error'; if ($seccion != 'error') $return['asignaciones'] = $seccion; else $return['error'] = 'error'; break; case 'EVALUACION': $etapaGanadores = Etapa::buscaEtapaXClave($pdo, 'GANADORES'); if (isset($etapaGanadores)) $fechasGanadores = Concurso::getFechaXEtapa($pdo, $_POST['id'], $etapaGanadores); if (isset($fechasGanadores)) $seccion = ganadores($pdo, $_POST['id'], $fechasGanadores, $actual, $edicion); else $seccion = 'error'; if ($seccion != 'error') $return['asignaciones'] = $seccion; else $return['error'] = 'No podemos mostrar la información en éste momento'; break; default : $return['error'] = 'No podemos mostrar la información en éste momento'; } if (Concurso::tieneEvaluaciones($pdo, $_POST['etapa'], $_POST['id'])) $flag = true; else $flag = false; if (!isset($return['error']) && $flag){ $seccion = listadoProyectos($pdo, $_POST['id'],$_POST['etapa']); if ($seccion != 'error'){ $return['proyectos'] = $seccion; $graficas = graficas($pdo, $_POST['id'],$_POST['etapa']); if (count($graficas) > 0){ $return['rubros'] = $graficas['rubros']; $return['leyenda'] = $graficas['leyenda']; $concurso = Concurso::getCouncursoxId($pdo, $_POST['id']); } else $return['error'] = 'No podemos mostrar la información en éste momento'; } else $return['error'] = 'No podemos mostrar la información en éste momento'; } else { if (!$flag){ $return['rubros'] = 'NO'; $return['proyectos'] = 'NO'; } } } else $return['error'] = 'Se encuentra fuera de período'; break; case 2: //ModalFaltantes $faltante = ''; $faltantes = Proyecto::obtenerProyectosFaltantes($pdo, $_POST['id'], $_POST['etapa']); $cont = 1; foreach ($faltantes as $proyecto){ $faltante .= '
' . $proyecto['clave'] . '
' . $proyecto['proyecto'] . '
'; if ($cont ==5) $cont = 1; else $cont++; } $return['faltan'] = $faltante; break; case 3: //Rubros $datos = ''; switch (mb_strtoupper(Etapa::getClaveEtapaXID($pdo,$_POST['etapa']))){ case 'REVISION': $proyectos = Proyecto::getProyectosAutorizados($pdo, $_POST['id'], 0, 'nombre'); break; case 'EVALUACION': $proyectos = Proyecto::getProyectosFinalistas($pdo, $_POST['id'], 0, 'nombre'); break; default : $proyectos = array(); } if (count($proyectos) > 0){ $valores = array(); foreach ($proyectos as $proyecto) array_push ($valores,Resultados::valoresGraficaXPregunta($pdo, $_POST['pregunta'], $proyecto['idproyecto'], $_POST['etapa'])); if(count($valores) > 0){ $colores = obtenerColores($proyectos); $claves = array_column($proyectos, 'clave'); $return['tipo'] = 'doughnut'; $return['etiquetas'] = $claves; $return['colores'] = $colores; $return['datos'] = $valores; } else $return['datos'] = ''; } else $return['error'] = 'error'; break; case 4: //DataList Proyectos $seccion = Resultados::evaluacionesXProyecto($pdo, $_POST['id'], $_POST['etapa'],'HTML'); if ($seccion != 'error') $return['tablas'] = $seccion; else $return['error'] = 'error'; break; case 5: //Guarda Finalistas/Ganadores switch ($_POST['seleccionados']){ case 1: //Finalistas $anteriores = false; if(!empty($_POST['old'])){ $olds = explode(',',$_POST['old']); while ($temp = current($olds)){ $index = key($olds); $temp = explode('-', $temp); $olds[$index] = $temp[1]; next($olds); } $anteriores = true; } $finalistas = explode(',',$_POST['elegidos']); while ($temp = current($finalistas)){ $index = key($finalistas); $temp = explode('-', $temp); $finalistas[$index] = $temp[1]; next($finalistas); } $falsos = array(); $verdaderos = array(); if ($anteriores){ $falsos = array_diff($olds,$finalistas); $verdaderos = array_diff($finalistas, $olds); } else $verdaderos = $finalistas; $cont = 0; foreach ($falsos as $falso){ if (actualizaFinalista($pdo, $falso,(bool)false)){ if ($cont == 0) $validaF = true; } else $validaF = false; $cont++; } $validaV = false; $cont = 0; foreach ($verdaderos as $verdadero){ if (actualizaFinalista($pdo, $verdadero,(bool)true)){ if ($cont == 0) $validaV = true; } else $validaV = false; $cont++; } if (count($falsos) == 0) $validaF = true; if (count($verdaderos) == 0) $validaV = true; if ($validaF && $validaV){ $etapaFinalistas = Etapa::buscaEtapaXClave($pdo, 'GANADORES'); if (isset($etapaFinalistas)) $fechasGanadores = Concurso::getFechaXEtapa($pdo, $_POST['id'], $etapaFinalistas); if (!isset($fechasFinalistas)) $msg = ' la fecha de publicación'; else $msg = 'l ' . Fechas::romanizaFecha($fechasFinalistas['fechas']); $return['titulo'] = 'Los finalistas del concurso ya han sido asignados
(Pueden ser modificados únicamente antes de' . $msg . ')
'; $return['msg'] = '¡Felicidades! Se asignaron exitosamente los finalistas'; } else $return['error'] = 'No fue posible asignar correctamente todos los finalistas'; break; case 2: //Ganadores $anteriores = false; if(!empty($_POST['old'])){ $olds = explode(',',$_POST['old']); while ($temp = current($olds)){ $index = key($olds); $temp = explode('-', $temp); $olds[$index] = array('categoria' => $temp[0],'proyecto' => $temp[1],'lugar' => $temp[2]); next($olds); } $cont = 0; foreach ($olds as $old){ if(eliminaGanador($pdo, $old['categoria'], $old['proyecto'], $old['lugar'])){ if ($cont == 0) $anteriores = true; } else $anteriores = false; $cont++; } } else $anteriores = true; if(isset($_POST['elegidos']) && $anteriores){ $ganadores = explode(',',$_POST['elegidos']); while ($temp = current($ganadores)){ $index = key($ganadores); $temp = explode('-', $temp); $ganadores[$index] = array('categoria' => $temp[0],'proyecto' => $temp[1],'lugar' => $temp[2]); next($ganadores); } $valida = false; $cont = 0; foreach ($ganadores as $ganador){ if (agregaGanador($pdo, $ganador['categoria'], $ganador['proyecto'], $ganador['lugar'])){ if ($cont == 0) $valida = true; } else $valida = false; $cont++; } if (!$valida) { foreach ($ganadores as $ganador){ eliminaGanador($pdo, $ganador['categoria'], $ganador['proyecto'], $ganador['lugar']); } $return['error'] = 'No fue posible asignar los ganadores'; } else{ $etapaGanadores = Etapa::buscaEtapaXClave($pdo, 'GANADORES'); if (isset($etapaGanadores)) $fechasGanadores = Concurso::getFechaXEtapa($pdo, $_POST['id'], $etapaGanadores); if (!isset($fechasGanadores)) $msg = ' la fecha de publicación'; else $msg = 'l ' . Fechas::romanizaFecha($fechasGanadores['fechas']); $return['titulo'] = 'Los ganadores del concurso ya han sido asignados
(Pueden ser modificados únicamente antes de' . $msg . ')
'; $return['msg'] = '¡Felicidades! Se asignaron exitosamente los ganadores'; } } else { $return['error'] = 'No fue posible asignar los ganadores'; } break; } break; } } $return['json'] = json_encode($return); echo json_encode($return); /********** AL MOMENTO *********/ function alMomento($pdo,$concurso,$etapa, $orden = 'apellidos'){ $error = false; $divAlMomento = ''; $titulo = array(); switch (mb_strtoupper(Etapa::getClaveEtapaXID($pdo,$etapa))){ case 'REGISTRO': break; case 'REVISION': $titulo[] = 'Revisores'; break; case 'EVALUACION': $titulo[] = 'Jurado Evaluador'; $titulo[] = 'Docentes / Administrativos'; break; default : $error = true; } if (!$error) { $divAlMomento .= '

' . $titulo[0] . '

'; $asignados = Etapa::getUsuariosAsignados($pdo, $concurso, $etapa, $orden); if (count($asignados) <= 10 ) $numCol = count($asignados); else $numCol = ceil(count($asignados) / 2); $cont = 1; $cambiaColumna = true; if (count($asignados) > 0){ foreach ($asignados as $asignado){ switch (mb_strtoupper($orden)){ case 'NOMBRE': $usuario = $asignado['nombre'] . ' ' . $asignado['apellidos']; break; case 'APELLIDOS': $usuario = $asignado['apellidos'] . ' ' . $asignado['nombre']; break; default: $usuario = ''; } if($cambiaColumna){ $divAlMomento .= '
'; $cambiaColumna = false; } $divAlMomento .= '
'; $total = Etapa::totalFaltantes($pdo, $asignado['idusuario'], $etapa); if ($total > 0){ $divAlMomento .= '
Faltan
' . Fechas::dosDigitos($total) . '
proyectos
'; } else $divAlMomento .= '
'; $divAlMomento .= '
' . $usuario . '
'; $cont++; if ($cont > $numCol){ $cambiaColumna = true; $cont = 1; } if($cambiaColumna) $divAlMomento .= '
'; } if(!$cambiaColumna) $divAlMomento .= '
'; } $divAlMomento .= '
'; if (isset($titulo[1])){ $usuarios = Etapa::getUsuariosValoraciones($pdo, $concurso, $etapa, 'apellidos'); if (count($usuarios) > 0){ $divAlMomento .= '

' . $titulo[1] . '

'; if (count($asignados) <= 10 ) $numCol = count($usuarios); else $numCol = ceil(count($usuarios) / 2); $cont = 1; $cambiaColumna = true; if (count($usuarios) > 0){ foreach ($usuarios as $usr){ switch (mb_strtoupper($orden)){ case 'NOMBRE': $usuario = $usr['nombre'] . ' ' . $usr['apellidos']; break; case 'APELLIDOS': $usuario = $usr['apellidos'] . ' ' . $usr['nombre']; break; default: $usuario = ''; } if($cambiaColumna){ $divAlMomento .= '
'; $cambiaColumna = false; } $divAlMomento .= '
' . $usuario . '
'; $cont++; if ($cont > $numCol){ $cambiaColumna = true; $cont = 1; } if($cambiaColumna) $divAlMomento .= '
'; } if(!$cambiaColumna) $divAlMomento .= '
'; } $divAlMomento .= '
'; } } return $divAlMomento; } else return 'error'; } /********** GRÁFICAS **********/ function graficas($pdo, $concurso, $etapa){ $graficas = array(); $divRubros = ''; $cont = 0; $rubros = Etapa::getRubrosXEtapa($pdo, $etapa); if (count($rubros) > 0){ $graficas = array('rubros' => '', 'graficas' => '', 'leyenda' => ''); foreach ($rubros as $rubro){ $divRubros .= '
' . $rubro['rubro'] . '
'; $preguntas = Etapa::getPreguntasXRubro($pdo, $rubro['idrubro']); foreach ($preguntas as $pregunta){ if (Resultados::esPromediable($pdo, $pregunta['tipo'])){ $cont++; $divRubros .= '
' . $pregunta['pregunta'] . '
'; } } $divRubros .= '
'; } $graficas['rubros'] = $divRubros; $divLeyenda = ''; switch (mb_strtoupper(Etapa::getClaveEtapaXID($pdo,$etapa))){ case 'REVISION': $proyectos = Proyecto::getProyectosAutorizados($pdo, $concurso, 0, 'clave'); break; case 'EVALUACION': $proyectos = Proyecto::getProyectosFinalistas($pdo, $concurso, 0, 'clave'); break; default : $proyectos = array(); } $colores = obtenerColores($proyectos); $col = 1; $divide = ceil(count($colores) / 2); $cambiaColumna = true; for ($cont =0; $cont < count($colores); $cont++){ if($cambiaColumna){ $divLeyenda .= '
'; $cambiaColumna = false; } $divLeyenda .= '
' . $proyectos[$cont]['clave'] . '
' . $proyectos[$cont]['proyecto'] . '
'; $col++; if ($col > $divide){ $cambiaColumna = true; $col = 1; } if($cambiaColumna) $divLeyenda .= '
'; } if(!$cambiaColumna) $divLeyenda .= ''; $graficas['leyenda'] = $divLeyenda; } return $graficas; } function obtenerColores($proyectos){ $coloresDef = array(); $colores = Colores::chartColors(); if (count($proyectos) <= count($colores)){ for ($cont = 0; $cont < count($proyectos); $cont++){ array_push($coloresDef, $colores[$cont]); } } else { $cont = 0; for ($proy = 0; $proy < count($proyectos); $proy++){ array_push($coloresDef, $colores[$cont]); $cont++; if ($cont == (count($colores) - 1)) $cont = 0; } } return $coloresDef; } /********** PROYECTOS **********/ function listadoProyectos($pdo, $concurso, $etapa){ $listaProyectos = ''; switch (mb_strtoupper(Etapa::getClaveEtapaXID($pdo,$etapa))){ case 'REVISION': $proyectos = Proyecto::getProyectosAutorizados($pdo, $concurso, 0, 'nombre'); break; case 'EVALUACION': $proyectos = Proyecto::getProyectosFinalistas($pdo, $concurso, 0, 'nombre'); break; default : $proyectos = array(); } if (count($proyectos) > 0){ foreach ($proyectos as $proyecto){ $listaProyectos .= '
  • ' . $proyecto['clave'] . '-' . $proyecto['proyecto'] . '
  • '; } return $listaProyectos; } else return 'error'; } /********** FINALISTAS / GANADORES **********/ function finalistas($pdo, $id, $fechaFinalistas, $activo, $acceso){ $divFinalistas = ''; if ($fechaFinalistas['fechas'] == 'Por definir') return '
    ¡Importante!
    No ha sido asignada la fecha de publicación de finalistas
    '; else { $asigna = false; $flag = false; $categorias = Concurso::getCategoriasConcurso($pdo, $id); $finalistas = array(); if (count($categorias) > 0) { if ($activo && !$fechaFinalistas['activo']){ if ($acceso){ $asigna = true; $despliega = ''; if (count($categorias) < 3) $despliega = 'd-flex flex-row'; else $despliega = 'card-columns'; $divFinalistas .= '
    '; $col = 0; $disabled = ''; $existenFinalistas = Proyecto::getProyectosFinalistas($pdo, $id, 0, 'nombre'); if (count($existenFinalistas) > 0){ $flag = true; $disabled = 'disabled'; } foreach ($categorias as $categoria){ $divFinalistas .= '

    ' . $categoria['categoria'] . '

    Proyecto
    Finalistas
    '; $row = 0; $col++; $autorizados = Proyecto::getProyectosAutorizados($pdo, $id, $categoria['idcategoria'], 'nombre'); $finalistas = Proyecto::getProyectosFinalistas($pdo, $id, $categoria['idcategoria'], 'nombre'); foreach ($autorizados as $proyecto) { $divFinalistas .= '
    ' . $proyecto['clave'] . ' - '. $proyecto['proyecto'] . '
    '; if (in_array($proyecto['idproyecto'], array_column($finalistas, 'idproyecto'))) $check = 'checked'; else $check = ''; $divFinalistas .= '
    '; $divFinalistas .= '
    '; $row++; } $divFinalistas .= '
    '; } $divFinalistas .= '
    '; if ($flag) $divFinalistas .= ''; else $divFinalistas .= ''; if ($flag) $estilo = 'style="display:none;"'; else $estilo = ''; $divFinalistas .= '
    '; } else { $divFinalistas = '
    ¡Lo sentimos!
    Los finalistas aún no han sido publicados
    '; } } else { $despliega = ''; if (count($categorias) < 3) $despliega = 'd-flex flex-row'; else $despliega = 'card-columns'; $divFinalistas .= '
    '; foreach ($categorias as $categoria){ $finalistas = Proyecto::getProyectosFinalistas($pdo, $id, $categoria['idcategoria'], 'clave'); $divFinalistas .= '
    ' . $categoria['categoria'] . '
    '; $cont = 0; foreach ($finalistas as $finalista){ $divFinalistas .= '
    '; $cont++; } $divFinalistas .= '
    '; } $divFinalistas .= '
    '; } if ($asigna){ if ($flag) return '
    Los finalistas del concurso ya han sido asignados
    (Pueden ser modificados únicamente antes del ' . Fechas::romanizaFecha($fechaFinalistas['fechas']) .')
    ' . $divFinalistas; else return '
    Selecciona a los finalistas del concurso para poder hacerlos públicos
    ' . $divFinalistas; } else return $divFinalistas; } else return 'error'; } } function ganadores($pdo, $id, $fechaGanadores, $activo, $acceso){ $divGanadores = ''; if ($fechaGanadores['fechas'] == 'Por definir') return '
    ¡Importante!
    No ha sido asignada la fecha de publicación de ganadores
    '; else { $asigna = false; $flag = false; $categorias = Concurso::getCategoriasConcurso($pdo, $id); $ganadores = array(); if (count($categorias) > 0) { if ($activo && !$fechaGanadores['activo']){ if ($acceso){ $asigna = true;$despliega = ''; if (count($categorias) < 3) $despliega = 'd-flex flex-row'; else $despliega = 'card-columns'; $divGanadores .= '
    '; foreach ($categorias as $categoria){ $divGanadores .= '

    ' . $categoria['categoria'] . '

    Proyecto
    '; $row = 0; $color; $finalistas = Proyecto::getProyectosFinalistas($pdo, $id, $categoria['idcategoria'], 'nombre'); $ganadores = Proyecto::getProyectosGanadores($pdo, $categoria['idcategoria'],$id); $disabled = ''; if (count($ganadores) > 0){ $flag = true; $disabled = 'disabled'; } foreach ($finalistas as $proyecto) { $lugar = verificalugar($ganadores, $proyecto['idproyecto']); if ($proyecto['categoria'] == $categoria['idcategoria']) { $divGanadores .= '
    ' . $proyecto['clave'] . ' - ' . $proyecto['proyecto'] . '
    '; for ($cont = 1; $cont <= 3; $cont++){ if ($lugar == $cont) $check = 'checked'; else $check = ''; $divGanadores .= '
    '; } $divGanadores .= '
    '; $row++; } } $divGanadores .= '
    '; } $divGanadores .= '
    '; if ($flag) $divGanadores .= ''; else $divGanadores .= ''; if ($flag) $estilo = 'style="display:none;"'; else $estilo = ''; $divGanadores .= '
    '; } else { $divGanadores = '
    ¡Lo sentimos!
    Los ganadores aún no han sido publicados
    '; } } else { $divGanadores .= '
    '; foreach ($categorias as $categoria){ $ganadores = Proyecto::getProyectosGanadores($pdo, $categoria['idcategoria'],$id); $divGanadores .= '
    ' . $categoria['categoria'] . '
    '; for ($cont = 0; $cont < count($ganadores); $cont++){ if ($cont < (count($ganadores) -1)) $borde = 'lugarBorde'; else $borde = ''; $divGanadores .= '
    ' . $ganadores[$cont]['lugar'] . '°
    ' . $ganadores[$cont]['clave'] . '
    ' . $ganadores[$cont]['proyecto'] . '
    '; } $divGanadores .= '
    '; } $divGanadores .= '
    '; } if ($asigna){ if ($flag) return '
    Los ganadores del concurso ya han sido asignados
    (Pueden ser modificados únicamente antes del ' . Fechas::romanizaFecha($fechaGanadores['fechas']) . ')
    ' . $divGanadores; else return '
    Selecciona a los ganadores del concurso para poder hacerlos públicos
    ' . $divGanadores; } else return $divGanadores; } else return 'error'; } } function lugar($lugar){ $datos= array(); switch ($lugar){ case 1: $datos = array('color' => 'gold', 'orden' => 'order-1 order-sm-2', 'bloque' => 'Central'); break; case 2: $datos = array('color' => 'silver', 'orden' => 'order-2 order-sm-1', 'bloque' => 'Izq'); break; case 3: $datos = array('color' => 'bronze', 'orden' => 'order-3 order-sm-3', 'bloque' => 'Der'); break; } return $datos; } function verificalugar($ganadores, $idproyecto){ $lugar = 0; if (in_array($idproyecto, array_column($ganadores, 'idproyecto'))){ $cont = 0; while ($cont < count($ganadores)){ if ($ganadores[$cont]['idproyecto'] == $idproyecto){ $lugar = $ganadores[$cont]['lugar']; $cont = count($ganadores); } else $cont++; } } return $lugar; } /********** INSERT, DELETE, UPDATE **********/ function actualizaFinalista($pdo, $proyecto, $status){ $actualizado = false; $stmt = $pdo->prepare('Select * from cidit_fu_finalistas(:proyecto,:status)'); $stmt->bindParam(':proyecto', $proyecto); $stmt->bindParam(':status', $status, PDO::PARAM_BOOL); if($stmt->execute()) $actualizado = true; $stmt->closeCursor(); $stmt = null; return $actualizado; } function agregaGanador($pdo, $categoria, $proyecto, $lugar){ $agregado = false; $stmt = $pdo->prepare('Select * from cidit_fi_ganador(:categoria,:proyecto,:lugar)'); $stmt->bindParam(':categoria', $categoria); $stmt->bindParam(':proyecto', $proyecto); $stmt->bindParam(':lugar', $lugar); if($stmt->execute()) $agregado = true; $stmt->closeCursor(); $stmt = null; return $agregado; } function eliminaGanador($pdo, $categoria, $proyecto, $lugar){ $eliminado = false; $stmt = $pdo->prepare('Select * from cidit_fd_ganador(:categoria,:proyecto,:lugar)'); $stmt->bindParam(':categoria', $categoria); $stmt->bindParam(':proyecto', $proyecto); $stmt->bindParam(':lugar', $lugar); if($stmt->execute()) $eliminado = true; $stmt->closeCursor(); $stmt = null; return $eliminado; }