Verified Commit d37dac09 authored by David Beniamine's avatar David Beniamine
Browse files

Merge branch...

Merge branch '499-faire-le-calcul-du-nombre-d-annotations-lues-dans-le-tableau-de-bord-a-partir-de-la-table' of gricad-gitlab.univ-grenoble-alpes.fr:labnbook/labnbook
parents 8fb3c87d c0184d1a
......@@ -125,6 +125,7 @@ class AnnotationController extends Controller
}
abort_if($user->cannot('view', $annotation), Helper::pullPolicyErrorCode());
Trace::logAction(Trace::CHECK_ANNOTATION, $parameters);
$annotation->saveReadingByUser($user->id_user);
return response()->json([]);
}
......
......@@ -267,82 +267,29 @@ EOL;
/**
* @param \App\Report $report
* @return string X lues / Y avec X
* X = le nombre d'annotations différentes qui sont lues par au moins 1 étudiant
* Y = le nombre total d'annotations non supprimées dans le rapport
* @return string X reads / Y with
* X = number of annotation read at least one time by students
* Y = total number of annotation in report (not deleted)
*/
public static function getAnnotation($report){
// Tableau contenant les annotations considérées comme lues pour chaque étudiant
$annotations_read_by_student = [];
// Tableau contenant les étudiants est le nombre de
$nb_annotations_read_by_student = [];
foreach (self::getUsers($report) as $id_user) {
$nb_annotations_read_by_student[$id_user] = 0;
$annotations_read_by_student[$id_user] = [];
}
// Récupération des traces des étudiants cocernant l'ouverture d'une annotation
$traces = DB::table('trace')
->select('id_user','attributes')
->where('id_report', $report->id_report)
->where('id_action', Trace::CHECK_ANNOTATION)
->whereIn('id_user', self::getUsers($report))
->get()
->toArray();
// Récupération des annotations globales du rapport
public static function getAnnotation($report)
{
// Get number of annotation read at least once (X)
$sql = "SELECT id_annotation, COUNT(id_user) AS nbReading
FROM `link_annotation_learner` JOIN annotation USING (id_annotation)
WHERE id_report = ? GROUP by id_annotation";
$nb_annotations_read = count(DB::select(DB::raw($sql), [$report->id_report]));
// Get total number of annotation in report
$annotations_report = DB::table('annotation')
->where('id_report', $report->id_report)
->pluck('id_annotation')
->toArray();
// Compte le nombre d'annotation
$nb_annotations = count($annotations_report);
// Annotations considérées comme lues par au moins 1 étudiant
$annotations_read = [];
// On parcourt toutes les traces récupérées précédemment
foreach ($traces as $key => $trace) {
// On décode la partie "attributes" des traces (contenant du json, ex : {"id_annotation":16985,"duration":3513} )
$trace_annotation_attribute = json_decode($trace->attributes);
// Les conditions pour considérer l'annotation comme lu par au moins 1 étudiant :
// - L'annotation (id) est présente dans le tableau contenant les annotations globales du rapport => $annotations_report
// - Le champs "duration" est présent dans la partie "attributes"
// - La temps de lecture (a), équivalant à la "duration", passée en seconde de l'annotation par un étudiant par rapport au nombre d'annotations (b) : ( a / 1000 ) / b >= 0.3
// - L'annotation (id) n'est déjà pas présente dans le tableau contenant les annotations considérées comme lu par au moins 1 étudiant => $annotations_read
if(
in_array($trace_annotation_attribute->id_annotation,$annotations_report) &&
isset( $trace_annotation_attribute->duration ) &&
( ( $trace_annotation_attribute->duration / 1000 ) / $nb_annotations >= 0.3 )
){
if( !in_array($trace_annotation_attribute->id_annotation,$annotations_read) ){
$annotations_read[] = $trace_annotation_attribute->id_annotation;
}
// On regarde si l'étudiant avait déjà lu cette annotation, si ce n'est pas le cas on lui ajoute cette annotation à ses annotations lues puis on accrémente sont nb d'annotations lues
if( !in_array($trace_annotation_attribute->id_annotation,$annotations_read_by_student[$trace->id_user]) ){
$annotations_read_by_student[$trace->id_user][] = $trace_annotation_attribute->id_annotation;
$nb_annotations_read_by_student[$trace->id_user]++;
}
}
}
// Compte le nombre d'annotations lues par au moins 1 étudiant
$nb_annotations_read = count($annotations_read);
// Renvoi un array avec le nb total d'annotations, le nb total d'annotations lues par les élèves, le nb total d'annotations lues par chacun des élèves
// Send array with number of annotation read at least one time by students and total number of annotation in report (not deleted)
return array(
"total_annotation" => $nb_annotations,
"total_annotation_read" => $nb_annotations_read,
"total_annotation_read_by_student" => array_values($nb_annotations_read_by_student)
);
}
}
......@@ -854,9 +854,6 @@ var reportsTable = (function() {
total = val.total_annotation_read + ' ' + verb + ' / ' + val.total_annotation;
indicator.details['total_annotation'] = val.total_annotation;
indicator.details['total_annotation_read'] = val.total_annotation_read;
$(val.total_annotation_read_by_student).each(function (index, val){
indicator.division.push(val);
});
} else {
total += parseFloat(val);
indicator.division.push(val);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment