@@ -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