Exercises: Read extra field "blocking_percentage" to block user attempts

BT#18068
pull/3565/head^2
Julio Montoya 5 years ago
parent dfd1e3ec2a
commit 823e5eb9b1
  1. 29
      main/exercise/exercise.class.php
  2. 8
      main/inc/lib/events.lib.php

@ -6679,6 +6679,35 @@ class Exercise
$exerciseAttempts
);
$isVisible = false;
} else {
// Check blocking exercise.
$extraFieldValue = new ExtraFieldValue('exercise');
$blockExercise = $extraFieldValue->get_values_by_handler_and_field_variable(
$this->iId,
'blocking_percentage'
);
if ($blockExercise && isset($blockExercise['value']) && !empty($blockExercise['value'])) {
$blockPercentage = (int) $blockExercise['value'];
$userAttempts = Event::getExerciseResultsByUser(
api_get_user_id(),
$this->iId,
$this->course_id,
$this->sessionId,
$lpId,
$lpItemId
);
if (!empty($userAttempts)) {
$currentAttempt = current($userAttempts);
if ($currentAttempt['total_percentage'] <= $blockPercentage) {
$message = sprintf(
get_lang('ExerciseBlockBecausePercentageX'),
$blockPercentage
);
$isVisible = false;
}
}
}
}
}
}

@ -1215,10 +1215,10 @@ class Event
if (Database::num_rows($query) > 0) {
$attempt = Database::fetch_array($query, 'ASSOC');
return $attempt['count'];
} else {
return 0;
return (int) $attempt['count'];
}
return 0;
}
/**
@ -1646,6 +1646,8 @@ class Event
if (Database::num_rows($res_revised) > 0) {
$row['attempt_revised'] = 1;
}
$row['total_percentage'] = ($row['exe_result'] / $row['exe_weighting']) * 100;
$list[$row['exe_id']] = $row;
$sql = "SELECT * FROM $table_track_attempt
WHERE exe_id = $exeId";

Loading…
Cancel
Save