From 238763aece0cdd01a21ff50536ab656292a8ed2d Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Fri, 8 Jul 2016 21:49:27 -0500 Subject: [PATCH] Allow recalculate the students score - refs #8307 --- main/exercise/exercise_report.php | 15 +++++++ main/exercise/recalculate.php | 74 +++++++++++++++++++++++++++++++ main/inc/ajax/model.ajax.php | 2 +- main/inc/lib/exercise.lib.php | 24 +++++++++- 4 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 main/exercise/recalculate.php diff --git a/main/exercise/exercise_report.php b/main/exercise/exercise_report.php index 46d3e338bb..01449a1de6 100755 --- a/main/exercise/exercise_report.php +++ b/main/exercise/exercise_report.php @@ -588,6 +588,21 @@ $extra_params['height'] = 'auto'; var sgrid = $("#results")[0]; sgrid.triggerToolbar(); + $('#results').on('click', 'a.exercise-recalculate', function (e) { + e.preventDefault(); + + if (!$(this).data('user') || !$(this).data('exercise') || !$(this).data('id')) { + return; + } + + var url = 'exercise/recalculate.php?'; + + var recalculateXhr = $.post(url, $(this).data()); + + $.when(recalculateXhr).done(function (response) { + $('#results').trigger('reloadGrid'); + }); + }); }); diff --git a/main/exercise/recalculate.php b/main/exercise/recalculate.php new file mode 100644 index 0000000000..f5333b787a --- /dev/null +++ b/main/exercise/recalculate.php @@ -0,0 +1,74 @@ +getRepository('ChamiloCoreBundle:TrackEExercises') + ->find(intval($_REQUEST['id'])); + +if ( + $trackedExercise->getExeUserId() != intval($_REQUEST['user']) || + $trackedExercise->getExeExoId() != intval($_REQUEST['exercise']) +) { + api_not_allowed(true); + exit; +} + +$attemps = $em->getRepository('ChamiloCoreBundle:TrackEAttempt') + ->findBy([ + 'exeId' => $trackedExercise->getExeId(), + 'userId' => $trackedExercise->getExeUserId() + ]); + +$newResult = 0; + +foreach ($attemps as $attemp) { + $questionId = $attemp->getQuestionId(); + + $question = $em->find('ChamiloCourseBundle:CQuizQuestion', $questionId); + + if (!$question) { + continue; + } + + $answers = $em->getRepository('ChamiloCourseBundle:CQuizAnswer')->findBy([ + 'questionId' => $questionId, + 'correct' => 1 + ]); + + $newMarks = 0; + + foreach ($answers as $answer) { + if ($answer->getId() != $attemp->getAnswer()) { + continue; + } + + $newMarks += $answer->getPonderation(); + } + + $newResult += $newMarks; + + $attemp->setMarks($newMarks); + + $em->merge($attemp); +} + +$trackedExercise->setExeResult($newResult); + +$em->merge($trackedExercise); +$em->flush(); diff --git a/main/inc/ajax/model.ajax.php b/main/inc/ajax/model.ajax.php index b0239d699f..ee1c42252f 100755 --- a/main/inc/ajax/model.ajax.php +++ b/main/inc/ajax/model.ajax.php @@ -1742,7 +1742,7 @@ if (in_array($action, $allowed_actions)) { } $array = array(); foreach ($columns as $col) { - if ($col == 'correction') { + if (in_array($col, ['correction', 'actions'])) { $array[] = isset($row[$col]) ? $row[$col] : ''; } else { $array[] = isset($row[$col]) ? Security::remove_XSS($row[$col]) : ''; diff --git a/main/inc/lib/exercise.lib.php b/main/inc/lib/exercise.lib.php index a3c27ff142..dbb8e48d3f 100644 --- a/main/inc/lib/exercise.lib.php +++ b/main/inc/lib/exercise.lib.php @@ -1956,8 +1956,7 @@ HOTSPOT; } //Admin can always delete the attempt - if (($locked == false || api_is_platform_admin()) && !api_is_student_boss() - ) { + if (($locked == false || api_is_platform_admin()) && !api_is_student_boss()) { $ip = TrackingUserLog::get_ip_from_user_event( $results[$i]['exe_user_id'], date('Y-m-d h:i:s'), @@ -1967,6 +1966,25 @@ HOTSPOT; ' . Display::return_icon('info.png', $ip) . ' '; + + $recalculateUrl = api_get_path(WEB_CODE_PATH) . 'exercise/recalculate.php?' . + api_get_cidreq() . '&' . + http_build_query([ + 'id' => $id, + 'exercise' => $exercise_id, + 'user' => $results[$i]['exe_user_id'] + ]); + $actions .= Display::url( + Display::return_icon('reload.png', get_lang('RecalculateResults')), + $recalculateUrl, + [ + 'data-exercise' => $exercise_id, + 'data-user' => $results[$i]['exe_user_id'], + 'data-id' => $id, + 'class' => 'exercise-recalculate' + ] + ); + $delete_link = '