diff --git a/public/main/gradebook/gradebook_add_result.php b/public/main/gradebook/gradebook_add_result.php index 0d099d1070..3699c642b9 100644 --- a/public/main/gradebook/gradebook_add_result.php +++ b/public/main/gradebook/gradebook_add_result.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); } - $res->add(); + + //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); } diff --git a/public/main/gradebook/lib/be/result.class.php b/public/main/gradebook/lib/be/result.class.php index 4af96a5e69..91fedd3dde 100644 --- a/public/main/gradebook/lib/be/result.class.php +++ b/public/main/gradebook/lib/be/result.class.php @@ -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; }