Allow recalculate the students score - refs #8307

pull/2487/head
Angel Fernando Quiroz Campos 9 years ago
parent be95748ec9
commit 238763aece
  1. 15
      main/exercise/exercise_report.php
  2. 74
      main/exercise/recalculate.php
  3. 2
      main/inc/ajax/model.ajax.php
  4. 24
      main/inc/lib/exercise.lib.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 = '<?php echo api_get_path(WEB_CODE_PATH) ?>exercise/recalculate.php?<?php echo api_get_cidreq() ?>';
var recalculateXhr = $.post(url, $(this).data());
$.when(recalculateXhr).done(function (response) {
$('#results').trigger('reloadGrid');
});
});
<?php } ?>
});

@ -0,0 +1,74 @@
<?php
/* For licensing terms, see /license.txt */
require_once '../inc/global.inc.php';
$isAllowedToEdit = api_is_allowed_to_edit(true, true);
if (!$isAllowedToEdit) {
api_not_allowed(true);
exit;
}
if (!isset($_REQUEST['user'], $_REQUEST['exercise'], $_REQUEST['id'])) {
api_not_allowed(true);
exit;
}
$em = Database::getManager();
$trackedExercise = $em
->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();

@ -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]) : '';

@ -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) . '
</a>';
$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 = '<a href="exercise_report.php?' . api_get_cidreq() . '&filter_by_user=' . intval($_GET['filter_by_user']) . '&filter=' . $filter . '&exerciseId=' . $exercise_id . '&delete=delete&did=' . $id . '"
onclick="javascript:if(!confirm(\'' . sprintf(
get_lang('DeleteAttempt'),
@ -2011,6 +2029,8 @@ HOTSPOT;
);
}
$results[$i]['id'] = $results[$i]['exe_id'];
if ($is_allowedToEdit) {
$results[$i]['status'] = $revised;
$results[$i]['score'] = $score;

Loading…
Cancel
Save