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) {
$res = new Result();
$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 (!empty($row) || '0' == $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();
}
next($scores);
}

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

Loading…
Cancel
Save