Gradebook: Prevent duplicates when a result its created in a classroom activity and going back in the browser for edit it - refs GH#2648

Author: @BorjaSanchezBeezNest
pull/4575/head
Borja Sánchez 3 years ago committed by GitHub
parent e1dd14f365
commit 7b000d7d66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      public/main/gradebook/gradebook_add_result.php
  2. 28
      public/main/gradebook/lib/be/result.class.php

@ -43,12 +43,21 @@ if ($add_result_form->validate()) {
foreach ($scores as $userId => $row) { foreach ($scores as $userId => $row) {
$res = new Result(); $res = new Result();
$res->set_evaluation_id($values['evaluation_id']); $res->set_evaluation_id($values['evaluation_id']);
$res->set_user_id(key($scores)); $res->set_user_id($userId);
//if no scores are given, don't set the score //if no scores are given, don't set the score
if (!empty($row) || '0' == $row) { if (!empty($row) || '0' == $row) {
$res->set_score($row); $res->set_score($row);
} }
//To prevent error editing when going back in the browser,
//check if exist a record for this user and evaluation_id
if ($res->exists()) {
$res->addResultLog($userId, $values['evaluation_id']);
$res->save();
} else {
$res->add(); $res->add();
}
next($scores); next($scores);
} }

@ -268,7 +268,14 @@ class Result
} else { } else {
$sql .= 'null'; $sql .= 'null';
} }
$sql .= ' WHERE id = '.$this->id; if (isset($this->id)) {
$sql .= " WHERE id = {$this->id}";
} else {
$sql .= " WHERE evaluation_id = {$this->evaluation}
AND user_id = {$this->user_id}
";
}
// no need to update creation date // no need to update creation date
Database::query($sql); Database::query($sql);
@ -302,16 +309,15 @@ class Result
*/ */
public function exists() public function exists()
{ {
$em = Database::getManager(); $table = Database::get_main_table(TABLE_MAIN_GRADEBOOK_RESULT);
$sql = "SELECT COUNT(*) AS count
$result = $em FROM $table gr
->createQuery( WHERE gr.evaluation_id = $this->evaluation
'SELECT COUNT(gr) FROM ChamiloCoreBundle:GradebookResult gr AND gr.user_id = $this->user_id
WHERE gr.evaluationId = :eval_id AND gr.userId = :user_id' ";
) $result = Database::query($sql);
->setParameters(['eval_id' => $this->evaluation, 'user_id' => $this->user_id]) $row = Database::fetch_array($result);
->getSingleScalarResult(); $count = (int) $row['count'];
$count = (int) $result;
return $count > 0; return $count > 0;
} }

Loading…
Cancel
Save