0) { $temp = array_column($asignaciones, 'idusuario'); $temp = array_unique($temp, SORT_NUMERIC); $usuarios = array(); foreach ($temp as $user){ array_push($usuarios, array('idusuario' => $user) + Usuario::getNombreUsuario($pdo, $user)); } array_multisort(array_column($usuarios, 'apellidos'),SORT_ASC,$usuarios); $proyectos = array(); $temp = array_column($asignaciones, 'idproyecto'); $temp = array_unique($temp, SORT_NUMERIC); foreach ($temp as $proy){ array_push($proyectos, array('idproyecto' => $proy) + Proyecto::getProyectoXID($pdo, $proy)); } array_multisort(array_column($proyectos, 'clave'),SORT_ASC,$proyectos); $html = ''; switch ($_POST['subtipo']){ case 1: $tipo = ''; $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])); switch($etapa){ case 'REVISION': $tipo = 'revisor'; break; case 'EVALUACION': $tipo = 'evaluador'; break; } $html = generaTabPrincipal($tipo, $usuarios, $proyectos, $asignaciones); break; case 2: $html = generaTabPrincipal('proyecto', $proyectos, $usuarios, $asignaciones); break; } $return['main'] = $html; } else $return['error'] = 'No fue posible obtener los datos'; break; case 2: //Genera dropdownlist de usuarios/proyectos principales $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])); $asignaciones = Etapa::getAsignacionesXEtapa($pdo, $_POST['concurso'], $_POST['etapa']); $categorias = Concurso::getCategoriasConcurso($pdo, $_POST['concurso']); switch($etapa){ case 'REVISION': switch ($_POST['subtipo']){ case 1: if (count($categorias) > 0){ $niveles = array_column($categorias, 'nivel'); $niveles = array_unique($niveles); $usuarios = Asignacion::getUsuariosAsignables($pdo, $niveles); $usuariosAsignados = array(); if (count($asignaciones) > 0) { $temp = array_column($asignaciones, 'idusuario'); $usuariosAsignados = array_unique($temp, SORT_NUMERIC); } foreach ($usuariosAsignados as $user){ reset($usuarios); while ($temp = current($usuarios)){ if ($temp['idusuario'] == $user){ $index = key($usuarios); unset($usuarios[$index]); end($usuarios); next($usuarios); } else next($usuarios); } } if (count($usuarios) > 0){ $html = ''; foreach ($usuarios as $user){ $nombre = mb_convert_case(mb_strtolower($user['apellidos'] . ' ' . $user['nombre']), MB_CASE_TITLE, "UTF-8"); $html .= '
  • ' . $nombre . '
  • '; } $return['lista'] = $html; } else if (count($usuariosAsignados) > 0) $return['error'] = 'Todos los profesores tienen al menos un proyecto asignado.
    Modifica en la sección editar.'; else $return['error'] = 'No fue posible obtener a los revisores'; } else $return['error'] = 'No fue posible obtener a los revisores'; break; case 2: $proyectosAsignados = array(); if (count($asignaciones) > 0) { $temp = array_column($asignaciones, 'idproyecto'); $proyectosAsignados = array_unique($temp, SORT_NUMERIC); } $rol = Usuario::getIdRol($pdo, 'REVISOR'); $proyectos = Proyecto::getProyectosAutorizados($pdo, $_POST['concurso'], 0, 'clave'); foreach ($proyectosAsignados as $proy){ reset($proyectos); while ($temp = current($proyectos)){ if ($temp['idproyecto'] == $proy){ $index = key($proyectos); unset($proyectos[$index]); end($proyectos); next($proyectos); } else next($proyectos); } } if (count($proyectos) > 0){ $html = ''; foreach ($proyectos as $proy){ $nivel = 0; reset($categorias); while ($temp = current($categorias)){ if ($temp['idcategoria'] == $proy['categoria']){ $nivel = $temp['nivel']; end($categorias); next($categorias); } else next($categorias); } $html .= '
  • ' . $proy['clave'] . ' - ' . $proy['proyecto'] . '
  • '; } $return['lista'] = $html; } else if (count($proyectosAsignados) > 0) $return['error'] = 'Todos los proyectos autorizados tienen al menos un revisor asignado.
    Modifica en la sección editar.'; else $return['error'] = 'No se han autorizado aún los proyectos'; break; } break; case 'EVALUACION': switch ($_POST['subtipo']){ case 1: if (count($categorias) > 0){ $niveles = array_column($categorias, 'nivel'); $niveles = array_unique($niveles); $usuarios = Asignacion::getUsuariosAsignables($pdo, $niveles); $usuariosAsignados = array(); if (count($asignaciones) > 0) { $temp = array_column($asignaciones, 'idusuario'); $usuariosAsignados = array_unique($temp, SORT_NUMERIC); } foreach ($usuariosAsignados as $user){ reset($usuarios); while ($temp = current($usuarios)){ if ($temp['idusuario'] == $user){ $index = key($usuarios); unset($usuarios[$index]); end($usuarios); next($usuarios); } else next($usuarios); } } if (count($usuarios) > 0){ $html = ''; foreach ($usuarios as $user){ $nombre = mb_convert_case(mb_strtolower($user['apellidos'] . ' ' . $user['nombre']), MB_CASE_TITLE, "UTF-8"); $html .= '
  • ' . $nombre . '
  • '; } $return['lista'] = $html; } else if (count($usuariosAsignados) > 0) $return['error'] = 'Todos los profesores tienen al menos un proyecto asignado.
    Modifica en la sección editar.'; else $return['error'] = 'No fue posible obtener a los evaluadores'; } else $return['error'] = 'No fue posible obtener a los evaluadores'; break; case 2: $proyectosAsignados = array(); if (count($asignaciones) > 0) { $temp = array_column($asignaciones, 'idproyecto'); $proyectosAsignados = array_unique($temp, SORT_NUMERIC); } $rol = Usuario::getIdRol($pdo, 'REVISOR'); $proyectos = Proyecto::getProyectosAutorizados($pdo, $_POST['concurso'], 0, 'clave'); foreach ($proyectosAsignados as $proy){ reset($proyectos); while ($temp = current($proyectos)){ if ($temp['idproyecto'] == $proy){ $index = key($proyectos); unset($proyectos[$index]); end($proyectos); next($proyectos); } else next($proyectos); } } if (count($proyectos) > 0){ $html = ''; foreach ($proyectos as $proy){ $nivel = 0; reset($categorias); while ($temp = current($categorias)){ if ($temp['idcategoria'] == $proy['categoria']){ $nivel = $temp['nivel']; end($categorias); next($categorias); } else next($categorias); } $html .= '
  • ' . $proy['clave'] . ' - ' . $proy['proyecto'] . '
  • '; } $return['lista'] = $html; } else if (count($proyectosAsignados) > 0) $return['error'] = 'Todos los proyectos autorizados tienen al menos un evaluador asignado.
    Modifica en la sección editar.'; else $return['error'] = 'No se han publicado aún los proyectos finalistas'; break; } break; } break; case 3: //Genera lista de usuarios/proyectos secundarios $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])); $niveles = explode(',',$_POST['nivel']); switch ($_POST['subtipo']){ case 1: $html = generaProyectos($pdo, $_POST['concurso'], $etapa, $niveles); if (empty($html)) $return['error'] = 'No hay proyectos disponibles a mostrar'; else $return['elegibles'] = $html; break; case 2: $html = generaUsuarios($pdo, $niveles); if (empty($html)) $return['error'] = 'No hay usuarios disponibles a mostrar'; else $return['elegibles'] = $html; break; default : $return['error'] = 'No ahy información disponible a mostrar'; } break; case 4: //Asignar proyectos-asesor/evaluador $elegidos = explode(',',$_POST['elegidos']); switch ($_POST['subtipo']){ case 1: $cont = 0; $asignado = true; $ids = explode('-',$_POST['princ']); if ($ids[0] != 0){ $usr = $ids[0]; $puesto = Usuario::getPuestoXClave($pdo, 'COMITE'); if (count($puesto) > 0){ if (!Usuario::tienePuesto($pdo, $usr,$puesto['idpuesto'])) Usuario::agregaUsuarioPuesto($pdo,$usr,$puesto['idpuesto']); } } else $usr = Asignacion::agregaUsuario($pdo, $ids[1], mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])), $_POST['concurso']); if ($usr != 0) { while ($cont < count($elegidos) && $asignado){ $asignado = Asignacion::agregaAsignacion($pdo, $_POST['etapa'], $elegidos[$cont], $usr); $cont++; } if (!$asignado){ foreach ($elegidos as $elegido){ Asignacion::eliminaAsignacionXDatos($pdo, $_POST['etapa'], $elegido, $usr); } if (count($elegidos) == 1) $return['error'] = 'No fue posible asignarle a ' . $_POST['texto'] . ' el proyecto'; else $return['error'] = 'No fue posible asignarle a ' . $_POST['texto'] . ' los proyectos'; } else { if (count($elegidos) == 1) $return['asigna'] = 'Se asignó exitosamente el proyecto a ' . $_POST['texto'] . ''; else $return['asigna'] = 'Se asignaron exitosamente los proyectos a ' . $_POST['texto'] . ''; } } else $return['error'] = 'No fue posible asignarle a ' . $_POST['texto'] . ' los proyectos'; break; case 2: $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])); $tipo = ''; switch($etapa){ case 'REVISION': $tipo = 'revisor'; break; case 'EVALUACION': $tipo = 'evaluador'; break; } $cont = 0; $asignado = true; $todos = true; while($ele = current($elegidos)){ $ids = explode('-',$ele); $index = key($elegidos); if ($ids[0] != 0){ $puesto = Usuario::getPuestoXClave($pdo, 'COMITE'); if (count($puesto) > 0){ if (!Usuario::tienePuesto($pdo, $ids[0],$puesto['idpuesto'])) Usuario::agregaUsuarioPuesto($pdo,$ids[0],$puesto['idpuesto']); } $elegidos[$index] = $ids[0]; } else { $usr = Asignacion::agregaUsuario($pdo, $ids[1], mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])), $_POST['concurso']); if ($usr == 0) { unset($elegidos[$index]); $todos = false; } else { $elegidos[$index] = $usr; } } next($elegidos); } while ($cont < count($elegidos) && $asignado){ $asignado = Asignacion::agregaAsignacion($pdo, $_POST['etapa'], $_POST['princ'], $elegidos[$cont]); $cont++; } if (!$asignado){ foreach ($elegidos as $elegido){ Asignacion::eliminaAsignacionXDatos($pdo, $_POST['etapa'], $_POST['princ'], $elegido); } if (count($elegidos) == 1) $return['error'] = 'No fue posible asignarle un ' . $tipo . ' al proyecto ' . $_POST['texto'] . ''; else $return['error'] = 'No fue posible asignarle ' . $tipo . 'es al proyecto ' . $_POST['texto'] . ''; } else { if (count($elegidos) == 1) if ($todos) $return['asigna'] = 'Se asignó exitosamente el ' . $tipo . ' al proyecto ' . $_POST['texto'] . ''; else $return['error'] = 'No fue posible asignarle un ' . $tipo . ' al proyecto ' . $_POST['texto'] . ''; else if ($todos) $return['asigna'] = 'Se asignaron exitosamente los ' . $tipo . 'es al proyecto ' . $_POST['texto'] . ''; else $return['asigna'] = 'Se asignaron algunos de los ' . $tipo . 'es al proyecto ' . $_POST['texto'] . '.
    No fue posible asignarlos a todos.
    '; } break; } break; case 5: //Edita una asignación break; case 6: //Eliminar asignación $elegidos = explode(',',$_POST['elegidos']); $noBorrar = array(); $asignacionesTotales = 0; foreach ($elegidos as $elegido) { $asignaciones = Asignacion::getAsignaciones($pdo, $_POST['subtipo'], $elegido, $_POST['etapa'], $_POST['concurso']); foreach($asignaciones as $asignado){ if (Asignacion::tieneEvaluaciones($pdo, $asignado['idasignacion'])){ array_push($noBorrar,array('enuso'=>$asignado['idasignacion'], 'elegido' => $elegido)); } else if (!Asignacion::eliminaAsignacion ($pdo, $asignado['idasignacion'])) array_push($noBorrar,array('enuso'=>$asignado['idasignacion'], 'elegido' => $elegido)); $asignacionesTotales++; } } if (count($noBorrar) == 0){ switch($_POST['subtipo']){ case 1: $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])); $tipo = ''; switch($etapa){ case 'REVISION': $tipo = 'revisor'; break; case 'EVALUACION': $tipo = 'evaluador'; break; } if (count($elegidos) == 1) $return['eliminados'] = 'Se borraron las asignaciones del ' . $tipo; else $return['eliminados'] = 'Se borraron las asignaciones de todos los ' . $tipo . 'es seleccionados'; break; case 2: if (count($elegidos) == 1) $return['eliminados'] = 'Se borraron las asignaciones del proyecto'; else $return['eliminados'] = 'Se borraron las asignaciones de todos los proyectos seleccionados'; break; } } else { if (count($noBorrar) < $asignacionesTotales){ switch($_POST['subtipo']){ case 1: $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])); $tipo = ''; switch($etapa){ case 'REVISION': $tipo = 'revisor'; break; case 'EVALUACION': $tipo = 'evaluador'; break; } if (count($elegidos) == 1) $return['faltan'] = 'No fue posible eliminar todas las asignaciones del ' . $tipo; else $return['faltan'] = 'No fue posible eliminar todas las asignaciones de todos los ' . $tipo . 'es seleccionados'; break; case 2: if (count($elegidos) == 1) $return['faltan'] = 'No fue posible eliminar todas las asignaciones del proyecto'; else $return['faltan'] = 'No fue posible eliminar todas las asignaciones de todos los proyectos seleccionados'; break; } } else { switch($_POST['subtipo']){ case 1: $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])); $tipo = ''; switch($etapa){ case 'REVISION': $tipo = 'revisor'; break; case 'EVALUACION': $tipo = 'evaluador'; break; } if (count($elegidos) == 1) $return['error'] = 'No fue posible eliminar ninguna asignación del ' . $tipo; else $return['error'] = 'No fue posible eliminar ninguna asignación de los ' . $tipo . 'es seleccionados'; break; case 2: if (count($elegidos) == 1) $return['error'] = 'No fue posible eliminar ninguna asignación del proyecto'; else $return['error'] = 'No fue posible eliminar ninguna asignación de los proyectos seleccionados'; break; } } } break; } } else $return['error'] = 'No fue posible obtener los datos'; } $return['json'] = json_encode($return); echo json_encode($return); function generaTabPrincipal($tab, $principal, $secundario, $datos){ $html = ''; $html = '
    '; $cont = 1; foreach ($principal as $princ){ $lista = ''; $id = 0; switch (mb_strtoupper($tab)){ case 'REVISOR': case 'EVALUADOR': $textoPrinc = mb_convert_case(mb_strtolower($princ['apellidos'] . ' ' . $princ['nombre']), MB_CASE_TITLE, "UTF-8"); $respuesta = array_filter($datos, function($arreglo) use($princ) { return $arreglo['idusuario'] == $princ['idusuario']; }); foreach ($respuesta as $resp){ $temp = array_filter($secundario, function($arreglo) use($resp) { return $arreglo['idproyecto'] == $resp['idproyecto']; }); $temp2 = current($temp); $lista .= '
    ' . $temp2['clave'] . ' - ' . $temp2['proyecto'] . '
    '; } $id = $princ['idusuario']; break; case 'PROYECTO': $textoPrinc = $princ['clave'] . ' - ' . $princ['proyecto']; $respuesta = array_filter($datos, function($arreglo) use($princ) { return $arreglo['idproyecto'] == $princ['idproyecto']; }); foreach ($respuesta as $resp){ $temp = array_filter($secundario, function($arreglo) use($resp) { return $arreglo['idusuario'] == $resp['idusuario']; }); $temp2 = current($temp); $lista .= '
    ' . mb_convert_case(mb_strtolower($temp2['apellidos'] . ' ' . $temp2['nombre']), MB_CASE_TITLE, "UTF-8") . '
    '; } $id = $princ['idproyecto']; break; } $html .= '
    ' . $textoPrinc . '
    Ver Detalle
    '. $lista . '
    '; $cont++; } $html .= '
    '; return $html; } function generaProyectos($pdo, $concurso, $etapa, $niveles){ $html = ''; $categorias = array(); $tempCategorias = Concurso::getCategoriasConcurso($pdo, $concurso); foreach ($tempCategorias as $temp){ reset($niveles); while ($nivel = current($niveles)){ if ($temp['nivel'] == $nivel){ array_push($categorias, $temp); end($niveles); next($niveles); } else next($niveles); } } if (count($categorias) > 0){ $despliega = ''; if (count($categorias) < 3) $despliega = 'd-flex flex-row'; else $despliega = 'card-columns'; $html = '
    '; foreach ($categorias as $categoria){ switch($etapa){ case 'REVISION': $proyectos = Proyecto::getProyectosAutorizados($pdo, $concurso, $categoria['idcategoria'], 'clave'); break; case 'EVALUACION': $proyectos = Proyecto::getProyectosFinalistas($pdo, $concurso, $categoria['idcategoria'], 'clave'); break; } $html .= '
    ' . $categoria['categoria'] . '
    '; if (count($proyectos) > 0){ foreach ($proyectos as $proyecto) { $html .= '
    ' . $proyecto['clave'] . ' - ' . $proyecto['proyecto'] . '
    '; } } else $html .= '
    No hay ningún proyecto aprobado
    '; $html .= '
    '; } $html .= '
    '; } else $html = ''; return $html; } function generaUsuarios($pdo, $niveles){ $html = ''; $usuarios = Asignacion::getUsuariosAsignables($pdo, $niveles); if (count($usuarios) > 0) { $colClass=''; $num = count($usuarios); switch ($num){ case $num <= 5: $numCol = $num; $colClass = 'col-sm-12'; break; case $num > 5 && $num <= 10: $numCol = ceil(count($usuarios) / 2); $colClass = 'col-sm-6'; break; case $num > 10: $numCol = ceil(count($usuarios) / 3); $colClass = 'col-sm-4'; break; } $cont = 1; $cambiaColumna = true; $html = '
    '; foreach ($usuarios as $usuario){ if($cambiaColumna){ $html .= '
    '; $cambiaColumna = false; } $nombre = mb_convert_case(mb_strtolower($usuario['apellidos'] . ' ' . $usuario['nombre']), MB_CASE_TITLE, "UTF-8"); $html .= '
    ' . $nombre . '
    '; $cont++; if ($cont > $numCol){ $cambiaColumna = true; $cont = 1; } if($cambiaColumna) $html .= '
    '; } if(!$cambiaColumna) $html .= '
    '; $html .= ''; } else $html = ''; return $html; }