Skip to content

Commit 06788e2

Browse files
matheuszychthojou
authored andcommitted
Adds optimizations to the TestScoring class
1 parent a608435 commit 06788e2

File tree

1 file changed

+12
-17
lines changed

1 file changed

+12
-17
lines changed

components/ILIAS/Test/src/Scoring/Manual/TestScoring.php

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class TestScoring
4646
{
4747
private bool $preserve_manual_scores = false;
4848
private int $question_id = 0;
49+
private \ilTestEvaluationFactory $evaluation_factory;
4950

5051
/**
5152
* @var array<int, \assQuestionGUI> $question_cache
@@ -58,6 +59,7 @@ public function __construct(
5859
private \ilDBInterface $db,
5960
private \ilLanguage $lng
6061
) {
62+
$this->evaluation_factory = new \ilTestEvaluationFactory($this->db, $this->test);
6163
}
6264

6365
public function setPreserveManualScores(bool $preserve_manual_scores): void
@@ -82,16 +84,12 @@ public function setQuestionId(int $question_id): void
8284

8385
public function recalculateSolutions(): array
8486
{
85-
$factory = new \ilTestEvaluationFactory($this->db, $this->test);
86-
$participants = $factory->getCorrectionsEvaluationData()->getParticipants();
87+
$participants = $this->evaluation_factory->getCorrectionsEvaluationData()->getParticipants();
8788

8889
foreach ($participants as $active_id => $userdata) {
89-
if (is_object($userdata) && is_array($userdata->getPasses())) {
90+
if ($userdata instanceof \ilTestEvaluationUserData) {
9091
$this->recalculatePasses($userdata, $active_id);
91-
\ilLPStatusWrapper::_updateStatus(
92-
$this->test->getId(),
93-
$userdata->getUserID()
94-
);
92+
\ilLPStatusWrapper::_updateStatus($this->test->getId(), $userdata->getUserID());
9593
}
9694
}
9795

@@ -117,9 +115,8 @@ public function recalculateSolution(int $active_id, int $pass): void
117115

118116
private function recalculatePasses(\ilTestEvaluationUserData $userdata, int $active_id): void
119117
{
120-
$passes = $userdata->getPasses();
121-
foreach ($passes as $pass => $passdata) {
122-
if (is_object($passdata)) {
118+
foreach ($userdata->getPasses() as $pass => $passdata) {
119+
if ($passdata instanceof \ilTestEvaluationPassData) {
123120
$this->recalculatePass($passdata, $userdata->getUserID(), $active_id, $pass);
124121
}
125122
}
@@ -132,10 +129,9 @@ private function recalculatePass(
132129
int $active_id,
133130
int $pass
134131
): void {
135-
$questions = $passdata->getAnsweredQuestions();
136132
$reached_points_changed = false;
137-
foreach ($questions as $question_data) {
138-
if (!$this->getQuestionId() || $this->getQuestionId() === $question_data['id']) {
133+
foreach ($passdata->getAnsweredQuestions() as $question_data) {
134+
if ($this->getQuestionId() !== 0 || $this->getQuestionId() === $question_data['id']) {
139135
$reached_points_changed = $reached_points_changed || $this->recalculateQuestionScore($user_id, $active_id, $pass, $question_data);
140136
}
141137
}
@@ -148,14 +144,13 @@ private function recalculateQuestionScore(
148144
int $pass,
149145
array $questiondata
150146
): bool {
151-
if ($this->preserve_manual_scores === true && $questiondata['manual'] === 1) {
147+
if ($this->preserve_manual_scores && $questiondata['manual'] === 1) {
152148
return false;
153149
}
154150

155151
$q_id = $questiondata['id'];
156-
if (!isset($this->question_cache[$q_id])) {
157-
$this->question_cache[$q_id] = $this->test->createQuestionGUI('', $q_id)->getObject();
158-
}
152+
$this->question_cache[$q_id] ??= $this->test->createQuestionGUI('', $q_id)->getObject();
153+
/** @var \assQuestion $question */
159154
$question = $this->question_cache[$q_id];
160155

161156
$old_points = $question->getReachedPoints($active_id, $pass);

0 commit comments

Comments
 (0)