Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /* Archivo Creado por Henrry Josué */
- /**
- * Basado en la documentación:
- * https://github.com/chamilo/chamilo-lms/blob/master/main/inc/lib/api.lib.php
- *
- *
- * EL ARCHIVO ACTUAL DEBE ESTAR UBICADO EN LA SIGUIENTE DIRECCION
- * ...\main\inc\globalValidacion.php
- *
- */
- ####################################################################################################
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ####################################################################################################
- /*##################################################################################################
- *
- *
- * ────────── INICIO DE MODIFICACIÓN ──────────
- *
- *
- * Solicitud por: Ing. Moises Molina ─ Director Sistemas Online
- *
- * Autor: Henrry Josue Lopez
- *
- * Fecha de implementación: 01/02/2017
- *
- *
- * Modigficacion : 03/02/2017
- * Linea
- *
- *
- *
- * Requerimientos
- *
- *
- * ─ Verificar si un usuario tiene un examen activado.
- *
- * ─ Si tiene un examen activo al iniciar sesion, que redireccione a la pagina de ejercicios.
- *
- * ─ Evitar que los usuarios accedan a otros sitios de la plataforma durante el examen.
- *
- *
- *
- * Requerimientos I Modificacion 09/02/2017
- *
- * - Mostrar un mensaje de el motivo de la redirección al examen.
- *
- * - Ejecutar la redirección solo si el alumno inicio el examen y se salio.
- *
- * - Denegarle entrar a los demas menus de la plataforma durante tenga un examen iniciado.
- *
- * - Si el alumno no termino su examen y se termino el periodo de publicacion entonces
- * al momento que el catedrático ingrese a dicho curso, validar los avances del alumno,
- * para que se refleje en la seccion de evaluacion del catedrático.
- *
- * ################################################################################################
- **/
- use \ChamiloSession as Session;
- $language_file = array('exercice','tracking');
- //require_once '../inc/global_message_alert.inc.php';
- //Control de acceso de los usuarios
- //api_protect_course_script(true);
- //Determina si el usuario de la sesión es un administrador
- //$is_allowedToEdit = api_is_allowed_to_edit(null,true);
- //Determina si el usuario es un profesor
- //$is_tutor = api_is_allowed_to_edit(true);
- //Determina si el curso actual es del profesor
- //$is_tutor_course = api_is_course_tutor();
- //Solo Estudiantes
- function verificar_examenes_iniciados(){
- $is_allowedToEdit = api_is_allowed_to_edit(null,true);
- if (!$is_allowedToEdit) {
- //Obtener la codigo directory del curso actual, es el codigo de navegacion
- $course_directory=api_get_course_path();
- //Nombres de las tablas de la base de datos en donde realizaremos las consultas - Nombres predeterminados en la api de la plataforma
- $TBL_EXERCICES = Database:: get_course_table(TABLE_QUIZ_TEST);
- $TBL_TRACK_EXERCICES = Database:: get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
- //1- Obtiene la informacion del curso actual
- //2- Obtiene el identificacion de usuario actual
- $course_id = api_get_course_int_id();
- // Condiciones para la sesion
- $session_id = api_get_session_id();
- $condition_session = api_get_session_condition($session_id,true,true);
- //Consultar cuantos examenes activos del curso ingresado hay.
- $total_sql_exercise = "SELECT count(id) as count FROM $TBL_EXERCICES
- WHERE c_id = $course_id AND active = '1' $condition_session ";
- //Ejecucion de la consulta $total_sql_exercise
- $result_total = Database::query($total_sql_exercise);
- $quantity=Database::fetch_assoc($result_total);
- $total_exercises = $quantity['count'];
- $sql = "SELECT id, title, type, description, results_disabled, session_id, start_time, end_time, feedback_type, max_attempt FROM $TBL_EXERCICES
- WHERE c_id = $course_id AND
- active='1'";
- // Ejecucion de la consulta $sql
- $result = Database::query($sql);
- $exercises_count = Database::num_rows($result);
- //declaracion de un arreglo en el cual se llenaran los datos obtenidos
- $exercise_list = array();
- //almacenando los datos obtenidos en el arreglo anteriormente declarado
- while ($row = Database::fetch_array($result,'ASSOC')) {
- $exercise_list[] = $row;
- }
- if (!empty($exercise_list)) {
- foreach ($exercise_list as $row) {
- //Declaramos el tiempo limite para realizar el examen en falso
- $time_limits = false;
- //Evaluando que los tiempos obtenidos sean reales y formato correcto correctos
- if ($row['start_time'] != '0000-00-00 00:00:00' || $row['end_time'] != '0000-00-00 00:00:00') {
- $time_limits = true;
- }
- //Si el limite de tiempo es verdadero procedemos a la siguiente condicion
- if ($time_limits) {
- // Establecemos el tiempo de inicio del examen en cero
- $start_time = false;
- //Evaluando si los tiempos obtenidos son distintos de cero, entonces obtenemos
- //el tiempo en formato UTC desde la api, igual para el tiempo que finaliza el examen
- if ($row['start_time'] != '0000-00-00 00:00:00') {
- $start_time = api_strtotime($row['start_time'],'UTC');
- }
- $end_time = false;
- if ($row['end_time'] != '0000-00-00 00:00:00') {
- $end_time = api_strtotime($row['end_time'],'UTC');
- }
- //obtenemos el tiempo acrual desde el servidor
- $now = time();
- //Establece el tiempo de examen activo en falso
- $is_actived_time = false;
- //Si el tiempo de inicio del examen y el tiempo final son verdaderos y correctos
- if ($start_time && $end_time) {
- //Si el tiempo actual es mayor que el tiempo que se activo la prueba
- //Si el tiempo actual es menor que el tiempo en que se debe desactivar la prueba
- //Si tiempo actual es mayor que el tiempo de inicio y tambien que el final
- if ($now > $start_time && $end_time > $now ) {
- //SI las condiciones anteriores son verdaderas entonces existe un examen activo
- $is_actived_time = true;
- //Consulta para saber cuantos intentos tiene el usuario en una prueba
- /*En la version 11.2 de chamilo el exe_cours_id cambio a c_id*/
- $qry_intentos_xamenes = "SELECT * FROM $TBL_TRACK_EXERCICES
- WHERE exe_exo_id = '".$row['id']."' AND
- exe_user_id = ".api_get_user_id()." AND
- c_id = '".$course_id."' AND
- status = 'incomplete' AND
- orig_lp_id = '0' AND
- orig_lp_item_id = '0' AND
- session_id = '" . api_get_session_id() . "'
- ORDER BY exe_id DESC";
- //Ejecucion de la consulta $total_sql
- $qryres_intentos = Database::query($qry_intentos_xamenes);
- $num_intentos_incompletos = Database :: num_rows($qryres_intentos);
- //almacenando los datos obtenidos en el arreglo anteriormente declarado
- while ($row_iniciados = Database :: fetch_array($qryres_intentos,'ASSOC')) {
- $result_examenes_list_iniciados[] = $row_iniciados;
- }
- if (!empty($result_examenes_list_iniciados)) {
- foreach ($result_examenes_list_iniciados as $row_iniciados) {
- $id_examem_iniciado=$row_iniciados['exe_exo_id'];
- }
- }
- //Si hay uno o mas intentos incompletos entonces se ejecuta la sentencia.
- if ($num_intentos_incompletos>=1) {
- //Verifica si el examen es parcial o pruebas, parcial(es sin retroalimentacion identificado por dos en la base de datos)
- if ($row['feedback_type']==2) {
- //Obtiene la direccion del seridor y la direccion raiz de la plataforma
- //Se concatena una url con el directory del curso actual en el cual se ingresó
- $urlExamen = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
- $partes = explode("/", $urlExamen);
- //$new_url_quiz="http://".$partes[0]."/".$partes[1]."/main/exercice/overview.php?cidReq=".$course_directory."&id_session=0&gidReq=0&gradebook=0&origin=&exerciseId=1";
- //$new_url_quiz="http://".$partes[0]."/".$partes[1]."/main/exercice/overview.php?cidReq=".$course_directory."&id_session=0&gidReq=0&gradebook=0&origin=&exerciseId=".$id_examem_iniciado;
- $new_url_quiz="http://".$partes[0]."/".$partes[1]."/main/exercice/exercise.php?gradebook=0&cidReq=".$course_directory."&id_session=0&gidReq=0&gradebook=0&origin=";
- //http://192.168.1.117/uthelearning/main/exercice/exercise.php?gradebook=0&cidReq=INF25&id_session=0&gidReq=0&gradebook=0&origin=
- $course_home_url="http://".$partes[0]."/".$partes[1]."/user_portal.php";
- //echo '<script language="javascript">alert("'.$TBL_TRACK_EXERCICES."---".$course_id."--".$num_intentos_incompletos."--".$row['feedback_type'].'");</script>';
- $titulo_mensaje="Examen Alerta";
- $contenido_mensaje="Usted ha iniciado un examen pero no lo ha terminado, favor finalicelo y evite problemas al momento de la evaluación";
- ShowAlert($titulo_mensaje,$contenido_mensaje,$new_url_quiz,1);
- //Script para verificar si hay un examen activo y redireccionar.
- /*
- $script= "
- <script type='text/javascript'>
- //Ingresamos un mensaje a mostrar
- var mensaje = confirm('<h4 style=\"padding:15px;\">Hola que tal</h4>');
- //Detectamos si el usuario acepto el mensaje
- if (mensaje) {
- //Redireccionamos a la pagina del examen y salimos.
- window.location='$new_url_quiz';
- exit;
- }
- //Detectamos si el usuario denegó el mensaje
- else {
- //No se permite entrar se regresa al menu de cursos
- window.location='$course_home_url';
- }
- </script>
- ";*/
- //echo($script);
- /*
- $titulo_mensaje="Alerta Examen";
- $contenido_mensaje="Tienes un examen iniciado, ve a la seccion de Examenes a finalizarlo";
- showAlert($titulo_mensaje, $contenido_mensaje, $new_url_quiz);
- echo "<script>alert('HOLA')</script>";
- //return_pantalla_alerta();*/
- return 1;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- function finalizar_examenes_iniciados(){
- $is_allowedToEdit = api_is_allowed_to_edit(null,true);
- if ($is_allowedToEdit) {
- //Nombres de las tablas de la base de datos en donde realizaremos las consultas - Nombres predeterminados en la api de la plataforma
- $TBL_EXERCICES = Database:: get_course_table(TABLE_QUIZ_TEST);
- $TBL_TRACK_EXERCICES = Database:: get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
- //1- Obtiene la informacion del curso actual
- //2- Obtiene el identificacion de usuario actual
- $course_id = api_get_course_int_id();
- // Condiciones para la sesion
- $session_id = api_get_session_id();
- $condition_session = api_get_session_condition($session_id,true,true);
- $sql = "SELECT id, title, type, description, results_disabled, session_id, start_time, end_time, feedback_type, max_attempt FROM $TBL_EXERCICES
- WHERE c_id = $course_id AND
- active='1'";
- // Ejecucion de la consulta $sql
- $result = Database::query($sql);
- $exercises_count = Database::num_rows($result);
- //declaracion de un arreglo en el cual se llenaran los datos obtenidos
- $exercise_list = array();
- //almacenando los datos obtenidos en el arreglo anteriormente declarado
- while ($row = Database::fetch_array($result,'ASSOC')) {
- $exercise_list[] = $row;
- }
- if (!empty($exercise_list)) {
- foreach ($exercise_list as $row) {
- //Declaramos el tiempo limite para realizar el examen en falso
- $time_limits = false;
- //Evaluando que los tiempos obtenidos sean reales y formato correcto correctos
- if ($row['start_time'] != '0000-00-00 00:00:00' || $row['end_time'] != '0000-00-00 00:00:00') {
- $time_limits = true;
- }
- //Si el limite de tiempo es verdadero procedemos a la siguiente condicion
- if ($time_limits) {
- // Establecemos el tiempo de inicio del examen en cero
- $start_time = false;
- //Evaluando si los tiempos obtenidos son distintos de cero, entonces obtenemos
- //el tiempo en formato UTC desde la api, igual para el tiempo que finaliza el examen
- if ($row['start_time'] != '0000-00-00 00:00:00') {
- $start_time = api_strtotime($row['start_time'],'UTC');
- }
- $end_time = false;
- if ($row['end_time'] != '0000-00-00 00:00:00') {
- $end_time = api_strtotime($row['end_time'],'UTC');
- }
- //obtenemos el tiempo acrual desde el servidor
- $now = time();
- //Establece el tiempo de examen activo en falso
- $is_actived_time = false;
- if ($start_time && $end_time) {
- if ($now > $start_time && $now>$end_time) {
- //Comprobar si hay examenes incompletos, pero despues el periodo de publicacion
- $qry_examenes_incompletos = "SELECT count(exe_id) as count
- FROM $TBL_TRACK_EXERCICES
- WHERE status='incomplete'";
- $result_total_examenes_incompletos = Database::query($qry_examenes_incompletos);
- $total_examenes_incompletos = 0;
- if (Database::num_rows($result_total_examenes_incompletos)) {
- $result_total_examenes_incompletos = Database::fetch_array($result_total_examenes_incompletos);
- $total_examenes_incompletos = $result_total_examenes_incompletos['count'];
- }
- //Si hay examenes incompletos despues del periodo de publicacion entonces validarlos
- if ($total_examenes_incompletos>=1) {
- //Ejecucion de la consulta para verificar si hay un examen que ya vencio el tiempo.
- $qry_examenes_cerrados="SELECT id, title, active, results_disabled, feedback_type
- FROM $TBL_EXERCICES
- WHERE start_time<DATE_ADD(NOW(),INTERVAL '6' HOUR) AND end_time<DATE_ADD(NOW(),INTERVAL '6' HOUR) AND c_id='".$course_id."' AND feedback_type='2'";
- //EJECUCION DE LA CONSULTA $qry_examenes_cerrados
- $result_examenes_cerrados=Database::query($qry_examenes_cerrados);
- //Contar la cantidad de lineas par saber si la consulta esta llena o vacía
- $exercises_count_row = Database :: num_rows($result_examenes_cerrados);
- $result_examenes_list_cerrados = array();
- //almacenando los datos obtenidos en el arreglo anteriormente declarado
- while ($row_cerrados = Database :: fetch_array($result_examenes_cerrados,'ASSOC')) {
- $result_examenes_list_cerrados[] = $row_cerrados;
- }
- //echo '<script language="javascript">alert("'.$total_examenes_incompletos." - ".$exercises_count_row.'");</script>';
- if (!empty($result_examenes_list_cerrados)) {
- foreach ($result_examenes_list_cerrados as $row_cerrados) {
- //echo '<script language="javascript">alert("'.$TBL_TRACK_EXERCICES."Hola".$course_id."--".$course_code."--".$row_cerrados['id'].'");</script>';
- //Actualizacion, para validar los examenes que quedaron abiertos al terminar el tiempo
- $update_status="UPDATE $TBL_TRACK_EXERCICES set status=''
- WHERE c_id='".$course_id."' and exe_exo_id='".$row_cerrados['id']."' and status='incomplete'";
- if ($debug) { error_log('Updating track_e_exercises '.$update_status); }
- Database::query($update_status);
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- ####################################################################################################
- /* FINAL DE LA MODIFICACION */
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ####################################################################################################
- /*ESTA CLASE SERA LLAMADO DESDE LAS SGUIENTES MODULOS
- *
- * .../main/course_description/index.php
- * .../main/calendar/agenda.php
- * .../main/document/document.php
- * .../main/lp/lp_controller.php
- * .../main/link/link.php
- * .../main/announcements/announcements.php
- * .../main/forum/index.php
- * .../main/dropbox/dropbox_init.inc.php
- * .../main/user/user.php
- * .../main/group/group.php
- * .../main/chat/chat.php
- * .../main/work/work.php
- * .../main/survey/survey_list.php
- * .../main/wiki/index.php
- * .../main/gradebook/index.php
- * .../main/glossary/index.php
- * .../main/notebook/index.php
- * .../
- * .../
- *
- *###################################################################################################
- * En cada uno de los archivos antes mencionados se incluira de la siguiente manera:
- *
- * require_once '../inc/globalValidacion.inc.php';
- *
- * preferiblemente que se ubique despues de la linea -- global.inc.php --
- *###################################################################################################
- *
- *
- * En el siguiente archivo se debe inlcuir agregando una pleca al pricipio como se muestra adelante
- * .../main/course_home/course_home.php
- *
- *
- * require_once dirname(__FILE__).'/../inc/globalValidacion.inc.php';
- *
- */
- ####################################################################################################
- ####################################################################################################
- // EL ARCHIVO ACTUAL DEBE ESTAR UBICADO SIEMPRE EN LA SIGUIENTE DIRECCION
- // ...\main\inc\globalValidacion.php
- ####################################################################################################
- function ShowAlert($titulo, $contenido, $url, $tipo)
- {
- echo '<script>
- //var html_css_pc="<style>.banner{position:absolute;width:20%;left:40%;top:24%;background:#F8F9EB;border-radius:5px;}.centrar{height:100%;top:0;position:absolute;text-align:center;width:100%;background:rgba(27, 78, 9,0.5);z-index:100;}</style>";
- var html_css_pc="<style>.banner{position:absolute;width:20%;left:40%;top:24%;background:#363f4a;border-radius:5px;}.centrar{height:100%;top:0;position:absolute;text-align:center;width:100%;background:rgba(1, 1, 1, 0.7);z-index:100;}</style>";
- //var html_css_movil="<style>.banner{position:absolute;width:50%;left:25%;top:24%;background:#F8F9EB;border-radius:5px;}.centrar{height:100%;top:0;position:absolute;text-align:center;width:100%;background:rgba(27, 78, 9,0.5);z-index:100;}</style>";
- var html_css_movil="<style>.banner{position:absolute;width:50%;left:25%;top:24%;background:#363f4a;border-radius:5px;}.centrar{height:100%;top:0;position:absolute;text-align:center;width:100%;background:rgba(1, 1, 1, 0.7);z-index:100;}</style>";
- if(screen.width>768){
- document.write(html_css_pc);
- }else{
- document.write(html_css_movil);
- }</script>';
- //echo ($css_banner);
- if ($tipo==1) {
- $html_alert_2='
- <nav class="centrar" id="banner" style="display:none;">
- <div class="banner">
- <h3 style="padding-bottom: 5px;margin-bottom: 30px;border-style: solid;border-width: 0px 0px 2px;border-color: #ffffff;color: #ffffff">'.$titulo.'</h3>
- <img width="65%" src="https://elearning.uth.hn/v2/web/css/themes/UTH/images/header-logo.png">
- <br>
- <h4 style="padding:15px; color:#ffffff;">'.$contenido.'</h4>
- <div class="col-sm-8" style="width:100%;padding: 0;"><button class="btn btn-primary" name="Accept" id="btn_aceptar_dialogo" type="submit" style="width:100%;background:#00692e;border-color:transparent;font-weight:bold;font-size:medium;border-radius:0px 0px 5px 5px;" onclick=""><em class="fa fa-check"></em> Aceptar</button></div>
- </div>
- <script type="text/javascript">
- var url_examen="'.$url.'";
- $("#banner").fadeIn(1000);
- $(document).ready(function(){
- $("#btn_aceptar_dialogo").click(function(){
- if (url_examen != "") {
- window.location=url_examen;
- exit;
- }
- $("#banner").show(300);
- });
- $("#btn_aceptar_dialogo").click(function(){
- $("#banner").fadeOut(1000);
- if (url_examen != "") {
- window.location=url_examen;
- exit;
- }
- });
- });
- </script>';
- }else{
- $html_alert_2='
- <nav class="centrar" id="banner" style="display:none;">
- <div class="banner">
- <h3 style="padding-bottom: 5px;margin-bottom: 30px;border-style: solid;border-width: 0px 0px 2px;border-color: #ffffff;color: #ffffff">'.$titulo.'</h3>
- <img width="65%" src="https://elearning.uth.hn/v2/web/css/themes/UTH/images/header-logo.png">
- <br>
- <h4 style="padding:15px; color:#ffffff;">'.$contenido.'</h4>
- <div class="col-sm-8" style="width:100%;padding: 0;"><button class="btn btn-primary" name="Cancel" id="btn_aceptar_dialogo" type="submit" style="width:100%;background:#00692e;border-color:transparent;font-weight:bold;font-size:medium;border-radius:0px 0px 5px 5px;" onclick=""><em class="fa fa-cancel"></em> Cancelar</button><button class="btn btn-primary" name="Accept" id="btn_aceptar_dialogo" type="submit" style="width:100%;background:#00692e;border-color:transparent;font-weight:bold;font-size:medium;border-radius:0px 0px 5px 5px;" onclick=""><em class="fa fa-check"></em> Aceptar</button></div>
- </div>
- <script type="text/javascript">
- var url_examen="'.$url.'";
- $("#banner").fadeIn(1000);
- $(document).ready(function(){
- $("#btn_aceptar_dialogo").click(function(){
- if (url_examen != "") {
- window.location=url_examen;
- exit;
- }
- $("#banner").show(300);
- });
- $("#btn_aceptar_dialogo").click(function(){
- $("#banner").fadeOut(1000);
- if (url_examen != "") {
- window.location=url_examen;
- exit;
- }
- });
- });
- </script>';
- }
- echo $html_alert_2;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement