templates/student/viewEvaluation.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block title %}- Ver la Evaluación{% endblock %}
  3. {% block stylesheets %}
  4.     {{ parent() }}
  5.     <link href="{{ asset('libraries/css/questions.css?v=4') }}" rel="stylesheet" type="text/css">
  6. {% endblock %}
  7. {% block body %}
  8.     <div class="row">
  9.         <div id="myStudent" class='col-sm-9 mt-5' style="margin: auto; font-size: 1.5em;" data-studentid="{{ student.id }}">
  10.             Estudiante: <span style="color: #990000;"><b>{{ student }}</b></span>
  11.         </div>
  12.         <div class='col-sm-9' style="margin: auto;">
  13.             <hr>
  14.             <div class="row">
  15.                 <div class='col-sm-2 center'>
  16.                     Curso: <br> <b>{{ module.level.course }}</b>
  17.                 </div>
  18.                 <div id="myModule" class='col-sm-2 center' data-moduleid="{{ module.id }}">
  19.                     Nombre del Módulo: <br> <b>{{ module }}</b>
  20.                 </div>
  21.                 <div class='col-sm-2 center'>
  22.                     Nivel: <br> <b>{{ module.level.name }}</b>
  23.                 </div>
  24.                 <div class='col-sm-2 center'>
  25.                     Puntaje Mínimo: <br> <b>{{ module.scoreMinimun }}</b>
  26.                 </div>
  27.                 <div class='col-sm-2 center' id="myEvaluation" data-evaluationid="{{ evaluation.id }}">
  28.                     Puntaje Obtenido: <br> <b><span id="evaluationScore">{{ evaluation.score }}</span></b>
  29.                 </div>
  30.             </div>
  31.         </div>
  32.     </div>
  33.     <div class="row">
  34.         {# iterar las respuestas #}
  35.         <div id="content-questions" class='col-sm-9' style="margin: auto;">
  36.             <hr>
  37.             {% for answer in evaluationAnswer %}
  38.                 <div class="col-sm-12">
  39.                     <div class="pregresp" data-question="1" data-score="1">
  40.                         <div class="question mb-2">
  41.                             <div class="row">
  42.                                 <div class="col-5 col-sm-5 col-md-4 col-lg-3 col-xl-2">
  43.                                     <b>Pregunta: </b>
  44.                                 </div>
  45.                                 <div class="col-7 col-sm-8 col-md-8 col-lg-9 col-xl-10">
  46.                                     {{ answer.question|nl2br }}
  47.                                 </div>
  48.                             </div>
  49.                         </div>
  50.                         <div class="answers">
  51.                             <div class="row">
  52.                                 {% if answer.rightAnswer != 'text' and answer.rightAnswer != 'audio' %}
  53.                                     <div class="col-12 mb-2">
  54.                                         <div class="row">
  55.                                             <div class="col-5 col-sm-5 col-md-4 col-lg-3 col-xl-2">
  56.                                                 <span>Respuesta Correcta: </span>
  57.                                             </div>
  58.                                             <div class="col-7 col-sm-7 col-md-8 col-lg-9 col-xl-10">
  59.                                                 <span>{{ answer.rightAnswer }}</span>
  60.                                             </div>
  61.                                         </div>
  62.                                     </div>
  63.                                 {% endif %}
  64.                                 {# Validar que la pregunta se abierta #}
  65.                                 {% if answer.answerType == 'opened' %}
  66.                                     {% if answer.rightAnswer == 'audio' %}
  67.                                         
  68.                                         <div class="col-12">
  69.                                             <div class="row mt-2 mb-2">
  70.                                                 <div class="col-5 col-sm-5 col-md-4 col-lg-3 col-xl-2">
  71.                                                     <span>Puntaje máximo: </span>
  72.                                                 </div>
  73.                                                 <div class="col-7 col-sm-8 col-md-8 col-lg-9 col-xl-10">
  74.                                                     <span>{{ answer.points }}</span>
  75.                                                     <div class="tooltip">?<span class="tooltiptext">Esta pregunta vale <b>{{ answer.points }}</b> puntos</span></div>
  76.                                                 </div>
  77.                                             </div>
  78.                                         </div>
  79.                                         
  80.                                         {# si es una pregunta tipo AUDIO se exponen 5 campos para calificacion del docente #}
  81.                                         <div class="col-12 mb-2">
  82.                                             <div class="row postRevision" data-answer='{{ answer.id }}' data-maxpoint='{{ answer.points }}'>
  83.                                                 {% if answer.answerGiven %}
  84.                                                     <div class="col-12 center">
  85.                                                         <audio controls>
  86.                                                             <source src="{{ answer.answerGiven }}">
  87.                                                         </audio>
  88.                                                     </div>
  89.                                                 {% else %}
  90.                                                     <div class="col-12 bold center mt-3 mb-3">
  91.                                                         <span>No se encontró una respuesta</span>
  92.                                                     </div>
  93.                                                 {% endif %}
  94.                                                 {% if not answer.isChecked %}
  95.                                                     <div class="col-sm-12 center mb-2 text-primary">
  96.                                                         <b><i>Cada habilidad se califica con máximo 20%</i></b>
  97.                                                     </div>
  98.                                                     <div class="col-sm-3 col-md-2 form-group center">
  99.                                                         <label>Fluidez <i class="fa fa-spinner fa-spin fa-fw" style="display: none;"></i></label>
  100.                                                         <div class="tooltip">?<span class="tooltiptext">Cada habilidad se califica con máximo 20%</span></div>
  101.                                                         <input type="number" class="form-control center" step="1" min="0" max="20" data-revisionid='0' data-maxscore="20" data-observation='Fluidez' data-audio="1" value="0" data-toggle="tooltip" data-placement="top" title="Tooltip on top">
  102.                                                         <div class="invalid-feedback validate">Max 20%</div>
  103.                                                     </div>
  104.                                                     <div class="col-sm-3 col-md-2 form-group center">
  105.                                                         <label>Estructura <i class="fa fa-spinner fa-spin fa-fw" style="display: none;"></i></label>
  106.                                                         <div class="tooltip">?<span class="tooltiptext">Cada habilidad se califica con máximo 20%</span></div>
  107.                                                         <input type="number" class="form-control center" step="1" min="0" max="20" data-revisionid='0' data-maxscore="20" data-observation='Estructura' data-audio="1" value="0">
  108.                                                         <div class="invalid-feedback validate">Max 20%</div>
  109.                                                     </div>
  110.                                                     <div class="col-sm-3 col-md-2 form-group center">
  111.                                                         <label>Coherencia <i class="fa fa-spinner fa-spin fa-fw" style="display: none;"></i></label>
  112.                                                         <div class="tooltip">?<span class="tooltiptext">Cada habilidad se califica con máximo 20%</span></div>
  113.                                                         <input type="number" class="form-control center" step="1" min="0" max="20" data-revisionid='0' data-maxscore="20" data-observation='Coherencia' data-audio="1" value="0">
  114.                                                         <div class="invalid-feedback validate">Max 20%</div>
  115.                                                     </div>
  116.                                                     <div class="col-sm-3 col-md-2 form-group center">
  117.                                                         <label>Vocabulario <i class="fa fa-spinner fa-spin fa-fw" style="display: none;"></i></label>
  118.                                                         <div class="tooltip">?<span class="tooltiptext">Cada habilidad se califica con máximo 20%</span></div>
  119.                                                         <input type="number" class="form-control center" step="1" min="0" max="20" data-revisionid='0' data-maxscore="20" data-observation='Vocabulario' data-audio="1" value="0">
  120.                                                         <div class="invalid-feedback validate">Max 20%</div>
  121.                                                     </div>
  122.                                                     <div class="col-sm-3 col-md-2 form-group center">
  123.                                                         <label>Pronunciación <i class="fa fa-spinner fa-spin fa-fw" style="display: none;"></i></label>
  124.                                                         <div class="tooltip">?<span class="tooltiptext">Cada habilidad se califica con máximo 20%</span></div>
  125.                                                         <input type="number" class="form-control center" step="1" min="0" max="20" data-revisionid='0' data-maxscore="20" data-observation='Pronunciación' data-audio="1" value="0">
  126.                                                         <div class="invalid-feedback validate">Max 20%</div>
  127.                                                     </div>
  128.                                                 {% endif %}
  129.                                             </div>
  130.                                         </div>
  131.                                     {% elseif answer.rightAnswer == 'text'  %}
  132.                                         
  133.                                         <div class="col-12 mb-2">
  134.                                             <div class="row">
  135.                                                 <div class="col-5 col-sm-5 col-md-4 col-lg-3 col-xl-2">
  136.                                                     <span>Puntaje máximo: </span>
  137.                                                 </div>
  138.                                                 <div class="col-7 col-sm-8 col-md-8 col-lg-9 col-xl-10">
  139.                                                     <span><b>{{ answer.points }}</b></span>
  140.                                                     <div class="tooltip">?<span class="tooltiptext">Esta pregunta vale <b>{{ answer.points }}</b> puntos</span></div>
  141.                                                 </div>
  142.                                             </div>
  143.                                         </div>
  144.                                         
  145.                                         <div class="col-12 mb-2">
  146.                                             <div class="row">
  147.                                                 <div class="col-5 col-sm-5 col-md-4 col-lg-3 col-xl-2">
  148.                                                     <span>Respuesta Dada: </span>
  149.                                                 </div>
  150.                                                 <div class="col-7 col-sm-7 col-md-8 col-lg-9 col-xl-10">
  151.                                                     <div class="answTextGiven">
  152.                                                         <span>{{ answer.answerGiven|nl2br }}</span>
  153.                                                     </div>
  154.                                                 </div>
  155.                                             </div>
  156.                                             {% if not answer.isChecked %}
  157.                                                 <div class="row postRevision" data-answer='{{ answer.id }}'>
  158.                                                     <div class="col-5 col-sm-5 col-md-4 col-lg-3 col-xl-2">
  159.                                                         <label>Calificación</label>
  160.                                                     </div>
  161.                                                     <div class="col-4 col-sm-3 col-md-2 form-group">
  162.                                                         {% set step = answer.isDecimals(answer.points)? 0.1 : 1 %}
  163.                                                         <input type="number" class="form-control center" step="{{ step }}" min="0" max="{{ answer.points }}" data-revisionid='0' data-maxscore="{{ answer.points }}" data-observation='Vocabulario' value="0">
  164.                                                         <div class="invalid-feedback validate center">La calificación no debe ser mayor a {{ answer.points }} pt</div>
  165.                                                     </div>
  166.                                                 </div>
  167.                                             {% endif  %}
  168.                                         </div>
  169.                                     {% endif  %}
  170.                                 {% else %}
  171.                                     <div class="col-12 mb-2">
  172.                                         <div class="row">
  173.                                             <div class="col-5 col-sm-5 col-md-4 col-lg-3 col-xl-2">
  174.                                                 <span>Respuesta Dada: </span>
  175.                                             </div>
  176.                                             <div class="col-7 col-sm-7 col-md-8 col-lg-9 col-xl-10">
  177.                                                 <span>{{ answer.answerGiven }}</span>
  178.                                             </div>
  179.                                         </div>
  180.                                     </div>
  181.                                 {% endif %}
  182.                                 <div class="col-12">
  183.                                     {% set redColor = '#00ec36' %}
  184.                                     {% if answer.score == 0 %}
  185.                                         {% set redColor = '#ffd8db' %}
  186.                                     {% endif %}
  187.                                     <div class="row">
  188.                                         <div class="col-5 col-sm-5 col-md-4 col-lg-3 col-xl-2">
  189.                                             <span>Puntaje Obtenido: </span>
  190.                                         </div>
  191.                                         <div class="col-7 col-sm-7 col-md-8 col-lg-9 col-xl-10">
  192.                                             <span class="answerScore" style="background-color: {{ redColor }}">{{ answer.score }}</span>
  193.                                         </div>
  194.                                     </div>
  195.                                 </div>
  196.                             </div>
  197.                         </div>
  198.                     </div>
  199.                 </div>
  200.             {% endfor %}
  201.         </div>
  202.     </div>
  203.     <div class="row">
  204.         <div class="col-12 center"  style="margin-bottom: 100px;">
  205.             <hr>
  206.             {% if evaluation.status == 'FINISHED' %}
  207.                 <button id="btnGoBack" class="btn btn-primary"><i class="fa fa-arrow-left" aria-hidden="true"></i> Go back</button>
  208.             {% elseif evaluation.status == 'IN_PROCESS' %}
  209.                 <button id="btnCloseEvaluation" class="btn btn-primary"><i class="fa fa-floppy-o" aria-hidden="true"></i> Submit grade</button>
  210.             {% endif %}
  211.         </div>
  212.     </div>
  213. {% endblock body %}
  214. {% block add2body %}
  215.     <div id="preloaderView">
  216.         <div style="position: absolute; top: 18%; left: 0%; width: 100%; text-align: center;">
  217.             <img src="/libraries/images/logo-1.png" style="">
  218.         </div>
  219.         <div class="spinner-border text-primary" style="position: fixed; top: 40%; left: 48%;"></div>
  220.         <div id="message" class="center" style="position: absolute; top: 55%; width: 100%;">Loading test...</div>
  221.     </div>
  222.     <div id="closeEvaluation" class="modal" tabindex="-1" role="dialog">
  223.         <div class="modal-dialog" role="document">
  224.             <div class="modal-content">
  225.                 <div class="modal-header">
  226.                     <h5 class="center modal-title wdFull">Saving Answers</h5>
  227.                     <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  228.                         <span aria-hidden="true">&times;</span>
  229.                     </button>
  230.                 </div>
  231.                 <div class="modal-body">
  232.                     <p class="center" style="font-size: 15pt;">
  233.                         We have saved the answers <br> Thanks Teacher!!!
  234.                     </p>
  235.                 </div>
  236.                 <div class="modal-footer">
  237.                     <button type="button" class="btn btn-primary" data-dismiss="modal">Aceptar</button>
  238.                 </div>
  239.             </div>
  240.         </div>
  241.     </div>
  242. {% endblock add2body %}
  243. {% block javascripts %}
  244.     {{ parent() }}
  245.     <script>
  246.         document.onreadystatechange = function () {
  247.             var state = document.readyState
  248.             if (state == 'complete') {
  249.                 setTimeout(function(){
  250.                     $('#preloaderView').animate({opacity: 0}, 1000, function () {
  251.                         $('#preloaderView').hide();
  252.                         $('#preloaderView').css({opacity: 1});
  253.                     });
  254.                 }, 800);
  255.             }
  256.         };
  257.         $(document).ready(function () {
  258.             $('.postRevision input').focusin(function () {
  259.                 $(this).select();
  260.             });
  261.             $('.postRevision input').change(function () {
  262.                 let myVal = $(this).val();
  263.                 
  264.                 // mostrar alerta si el valor ingresado el mayor al permitido
  265.                 if($(this).data('maxscore') < myVal) {
  266.                     $(this).val('0');
  267.                     $(this).closest('div').find('div.validate').show();
  268.                     return;
  269.                 }
  270.                 
  271.                 $(this).closest('div').find('div.validate').hide();
  272.                 
  273.                 let answerId = $(this).closest('div.postRevision').data('answer');
  274.                 let isAudio = $(this).data('audio');
  275.                 
  276.                 if(isAudio == 1) {
  277.                     let mxpoint = $(this).closest('div.postRevision').data('maxpoint');
  278.                     myVal = myVal * mxpoint / 100;
  279.                 }
  280.                 let data = {
  281.                     scoreVal: myVal,
  282.                     observation: $(this).data('observation'),
  283.                     maxscore: $(this).data('maxscore'),
  284.                     revisionid: $(this).data('revisionid'),
  285.                     answerId: answerId
  286.                 };
  287.                 savePostRevision(data, $(this));
  288.                 
  289.                 let arrInputs = $(this).closest('div.postRevision').find('input');
  290.                 let sumInputs = 0;
  291.                 arrInputs.each(function(i, o) {
  292.                     let inputVal = ($(o).val() * 1);
  293.                     if($(o).data('audio') == 1) {
  294.                         let mxpoint = $(o).closest('div.postRevision').data('maxpoint');
  295.                         inputVal = inputVal * mxpoint / 100;
  296.                     }
  297.                     sumInputs += inputVal;
  298.                 });
  299.                 
  300.                 let mycolor = '#ffd8db';
  301.                 if(sumInputs > 0) {
  302.                     mycolor = '#00ec36';
  303.                 }
  304.                 // mostrar el puntaje dado
  305.                 $(this).closest('.answers').find('span.answerScore').text(sumInputs).css('background-color', mycolor);
  306.             });
  307.             $('#btnGoBack').click(function() {
  308.                 history.back();
  309.             });
  310.             $('#btnCloseEvaluation').click(function() {
  311.                 
  312.                 $('#preloaderView #message').text('Sendig the grade...');
  313.                 $('#preloaderView').show();
  314.                 // cambiar de estado la evaluacion y calificar los ponderados por habilidad
  315.                 let data = {
  316.                     evaluationId: $('#myEvaluation').data('evaluationid'),
  317.                     studentId: $('#myStudent').data('studentid'),
  318.                     moduleId: $('#myModule').data('moduleid')
  319.                 };
  320.                 $.ajax({
  321.                     method: 'post', url: '{{ path('teacher_close_evaluation') }}', data: data,
  322.                     success: function (data) {
  323.                         // mostrar mensaje para cerrar la pagina
  324.                         $('#preloaderView #message').text('Data was sent. Thanks');
  325.                         setTimeout(function(){
  326.                             $('#preloaderView').animate({opacity: 0}, 1000, function() {
  327.                                 $('#closeEvaluation').modal('show');
  328.                                 $('#preloaderView').hide();
  329.                             });
  330.                         }, 2000);
  331.                     }
  332.                 });
  333.             });
  334.             $('#closeEvaluation').on('hide.bs.modal', function (e) {
  335.                 // redirigir a la pagina dashboard del estudiante
  336.                 var studentID = $('#myStudent').data('studentid');
  337.                 window.location.href = "/admin/student/modules/" + studentID;
  338.             });
  339.             function savePostRevision(data, objInput) {
  340.                 $(objInput).prop("disabled", true);
  341.                 let sibSpiner = $(objInput).closest('div').find('i.fa-spinner');
  342.                 $(sibSpiner).show();
  343.                 $.ajax({
  344.                     method: 'post', url: '{{ path('teacher_save_post_revision') }}', data: data,
  345.                     success: function (data) {
  346.                         $(objInput).data('revisionid', data.revisionid);
  347.                         $('#evaluationScore').text(data.evaluationScore);
  348.                         $(objInput).prop( "disabled", false);
  349.                         $(sibSpiner).hide();
  350.                     }
  351.                 });
  352.             }
  353.         });
  354.     </script>
  355. {% endblock javascripts %}