ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilTestPassesSelector Class Reference
+ Collaboration diagram for ilTestPassesSelector:

Public Member Functions

 __construct (private ilDBInterface $db, private ilObjTest $test_obj)
 
 getActiveId ()
 
 setActiveId (?int $active_id)
 
 getLastFinishedPass ()
 
 setLastFinishedPass (?int $last_finished_pass)
 
 loadLastFinishedPass ()
 
 getExistingPasses ()
 
 hasExistingPasses ()
 
 getNumExistingPasses ()
 
 openPassExists ()
 
 getClosedPasses ()
 
 getReportablePasses ()
 
 hasReportablePasses ()
 
 getLastFinishedPassTimestamp ()
 
 hasTestPassedOnce (int $active_id)
 

Private Member Functions

 passesLoaded ()
 
 ensureLoadedPasses ()
 
 loadPasses ()
 
 getLazyLoadedPasses ()
 
 fetchReportablePasses (array $existing_passes)
 
 fetchClosedPasses (array $existing_passes)
 
 fetchLastPass (array $existing_passes)
 
 isReportableAttempt (int $last_attempt, int $attempt)
 
 checkLastFinishedPassInitialised ()
 
 isClosedPass (int $pass)
 
 isReportingDateReached ()
 
 isProcessingTimeReached (int $pass)
 

Private Attributes

int $active_id = null
 
int $last_finished_pass = null
 
array $passes = null
 
array $test_passed_once_cache = []
 

Detailed Description

Definition at line 29 of file class.ilTestPassesSelector.php.

Constructor & Destructor Documentation

◆ __construct()

ilTestPassesSelector::__construct ( private ilDBInterface  $db,
private ilObjTest  $test_obj 
)

Definition at line 36 of file class.ilTestPassesSelector.php.

39 {
40 }

Member Function Documentation

◆ checkLastFinishedPassInitialised()

ilTestPassesSelector::checkLastFinishedPassInitialised ( )
private

Definition at line 221 of file class.ilTestPassesSelector.php.

222 {
223 if ($this->getLastFinishedPass() === null) {
224 throw new ilTestException('invalid object state: last finished pass was not set!');
225 }
226 }
Base Exception for all Exceptions relating to Modules/Test.

References getLastFinishedPass().

Referenced by isClosedPass().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ensureLoadedPasses()

ilTestPassesSelector::ensureLoadedPasses ( )
private

Definition at line 67 of file class.ilTestPassesSelector.php.

68 {
69 if (!$this->passesLoaded()) {
70 $this->loadPasses();
71 }
72 }

References loadPasses(), and passesLoaded().

Referenced by getLazyLoadedPasses().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fetchClosedPasses()

ilTestPassesSelector::fetchClosedPasses ( array  $existing_passes)
private

Definition at line 167 of file class.ilTestPassesSelector.php.

167 : array
168 {
169 $closed_passes = [];
170
171 foreach ($existing_passes as $pass) {
172 if ($this->isClosedPass($pass)) {
173 $closed_passes[] = $pass;
174 }
175 }
176
177 return $closed_passes;
178 }

References isClosedPass().

Referenced by getClosedPasses().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fetchLastPass()

ilTestPassesSelector::fetchLastPass ( array  $existing_passes)
private

Definition at line 180 of file class.ilTestPassesSelector.php.

180 : ?int
181 {
182 $last_pass = null;
183
184 foreach ($existing_passes as $pass) {
185 if ($last_pass === null || $pass > $last_pass) {
186 $last_pass = $pass;
187 }
188 }
189
190 return $last_pass;
191 }

Referenced by fetchReportablePasses().

+ Here is the caller graph for this function:

◆ fetchReportablePasses()

ilTestPassesSelector::fetchReportablePasses ( array  $existing_passes)
private

Definition at line 152 of file class.ilTestPassesSelector.php.

152 : array
153 {
154 $last_pass = $this->fetchLastPass($existing_passes);
155
156 $reportable_passes = [];
157
158 foreach ($existing_passes as $pass) {
159 if ($this->isReportableAttempt($last_pass, $pass)) {
160 $reportable_passes[] = $pass;
161 }
162 }
163
164 return $reportable_passes;
165 }
isReportableAttempt(int $last_attempt, int $attempt)
fetchLastPass(array $existing_passes)

References fetchLastPass(), and isReportableAttempt().

Referenced by getReportablePasses().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getActiveId()

ilTestPassesSelector::getActiveId ( )

Definition at line 42 of file class.ilTestPassesSelector.php.

42 : ?int
43 {
44 return $this->active_id;
45 }

References $active_id.

Referenced by isProcessingTimeReached(), isReportableAttempt(), loadLastFinishedPass(), and loadPasses().

+ Here is the caller graph for this function:

◆ getClosedPasses()

ilTestPassesSelector::getClosedPasses ( )

Definition at line 135 of file class.ilTestPassesSelector.php.

135 : array
136 {
137 $existing_passes = $this->getExistingPasses();
138 return $this->fetchClosedPasses($existing_passes);
139 }
fetchClosedPasses(array $existing_passes)

References fetchClosedPasses(), and getExistingPasses().

Referenced by openPassExists().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getExistingPasses()

ilTestPassesSelector::getExistingPasses ( )

Definition at line 115 of file class.ilTestPassesSelector.php.

115 : array
116 {
117 return array_keys($this->getLazyLoadedPasses());
118 }

References getLazyLoadedPasses().

Referenced by getClosedPasses(), getNumExistingPasses(), getReportablePasses(), hasExistingPasses(), and openPassExists().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getLastFinishedPass()

ilTestPassesSelector::getLastFinishedPass ( )

Definition at line 52 of file class.ilTestPassesSelector.php.

52 : ?int
53 {
55 }

References $last_finished_pass.

Referenced by checkLastFinishedPassInitialised(), getLastFinishedPassTimestamp(), isClosedPass(), and ilObjTest\isNextPassAllowed().

+ Here is the caller graph for this function:

◆ getLastFinishedPassTimestamp()

ilTestPassesSelector::getLastFinishedPassTimestamp ( )

Definition at line 264 of file class.ilTestPassesSelector.php.

264 : ?int
265 {
267 if ($last_finished_pass === null || $last_finished_pass === -1) {
268 return null;
269 }
270
271 $passes = $this->getLazyLoadedPasses();
272 if (!isset($passes[$last_finished_pass])) {
273 return null;
274 }
275 return $passes[$last_finished_pass]['tstamp'];
276 }

References $last_finished_pass, $passes, getLastFinishedPass(), and getLazyLoadedPasses().

Referenced by ilObjTest\isNextPassAllowed().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getLazyLoadedPasses()

ilTestPassesSelector::getLazyLoadedPasses ( )
private

Definition at line 94 of file class.ilTestPassesSelector.php.

94 : array
95 {
96 $this->ensureLoadedPasses();
97 return $this->passes;
98 }

References $passes, and ensureLoadedPasses().

Referenced by getExistingPasses(), and getLastFinishedPassTimestamp().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getNumExistingPasses()

ilTestPassesSelector::getNumExistingPasses ( )

Definition at line 125 of file class.ilTestPassesSelector.php.

125 : int
126 {
127 return count($this->getExistingPasses());
128 }

References getExistingPasses().

+ Here is the call graph for this function:

◆ getReportablePasses()

ilTestPassesSelector::getReportablePasses ( )

Definition at line 141 of file class.ilTestPassesSelector.php.

141 : array
142 {
143 $existing_passes = $this->getExistingPasses();
144 return $this->fetchReportablePasses($existing_passes);
145 }
fetchReportablePasses(array $existing_passes)

References fetchReportablePasses(), and getExistingPasses().

Referenced by hasReportablePasses().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ hasExistingPasses()

ilTestPassesSelector::hasExistingPasses ( )

Definition at line 120 of file class.ilTestPassesSelector.php.

120 : bool
121 {
122 return $this->getExistingPasses() !== [];
123 }

References getExistingPasses().

+ Here is the call graph for this function:

◆ hasReportablePasses()

ilTestPassesSelector::hasReportablePasses ( )

Definition at line 147 of file class.ilTestPassesSelector.php.

147 : bool
148 {
149 return (bool) count($this->getReportablePasses());
150 }

References getReportablePasses().

+ Here is the call graph for this function:

◆ hasTestPassedOnce()

ilTestPassesSelector::hasTestPassedOnce ( int  $active_id)

Definition at line 278 of file class.ilTestPassesSelector.php.

278 : bool
279 {
280 if (!isset($this->test_passed_once_cache[$active_id])) {
281 $this->test_passed_once_cache[$active_id] = false;
282
283 $res = $this->db->queryF(
284 'SELECT passed_once FROM tst_result_cache WHERE active_fi = %s',
285 ['integer'],
286 [$active_id]
287 );
288
289 while ($row = $this->db->fetchAssoc($res)) {
290 $this->test_passed_once_cache[$active_id] = (bool) $row['passed_once'];
291 }
292 }
293
294 return $this->test_passed_once_cache[$active_id];
295 }
$res
Definition: ltiservices.php:69

References $active_id, and $res.

Referenced by isReportableAttempt().

+ Here is the caller graph for this function:

◆ isClosedPass()

ilTestPassesSelector::isClosedPass ( int  $pass)
private

Definition at line 228 of file class.ilTestPassesSelector.php.

228 : bool
229 {
231
232 if ($pass <= $this->getLastFinishedPass()) {
233 return true;
234 }
235
236 if ($this->isProcessingTimeReached($pass)) {
237 return true;
238 }
239
240 return false;
241 }

References checkLastFinishedPassInitialised(), getLastFinishedPass(), and isProcessingTimeReached().

Referenced by fetchClosedPasses(), and isReportableAttempt().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isProcessingTimeReached()

ilTestPassesSelector::isProcessingTimeReached ( int  $pass)
private

Definition at line 249 of file class.ilTestPassesSelector.php.

249 : bool
250 {
251 if (!$this->test_obj->getEnableProcessingTime()) {
252 return false;
253 }
254
255 $startingTime = $this->test_obj->getStartingTimeOfUser($this->getActiveId(), $pass);
256
257 if ($startingTime === false) {
258 return false;
259 }
260
261 return $this->test_obj->isMaxProcessingTimeReached($startingTime, $this->getActiveId());
262 }

References getActiveId().

Referenced by isClosedPass().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isReportableAttempt()

ilTestPassesSelector::isReportableAttempt ( int  $last_attempt,
int  $attempt 
)
private

Definition at line 193 of file class.ilTestPassesSelector.php.

193 : bool
194 {
195 switch ($this->test_obj->getScoreSettings()->getResultSummarySettings()->getScoreReporting()) {
196 case ScoreReportingTypes::SCORE_REPORTING_IMMIDIATLY:
197 return true;
198
199 case ScoreReportingTypes::SCORE_REPORTING_DATE:
200 return $this->isReportingDateReached();
201
202 case ScoreReportingTypes::SCORE_REPORTING_FINISHED:
203 if ($attempt < $last_attempt) {
204 return true;
205 }
206
207 return $this->isClosedPass($attempt);
208
209 case ScoreReportingTypes::SCORE_REPORTING_AFTER_PASSED:
210 if (!$this->hasTestPassedOnce($this->getActiveId())) {
211 return false;
212 }
213
214 return $this->isClosedPass($attempt);
215
216 default:
217 return false;
218 }
219 }

References getActiveId(), hasTestPassedOnce(), isClosedPass(), and isReportingDateReached().

Referenced by fetchReportablePasses().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isReportingDateReached()

ilTestPassesSelector::isReportingDateReached ( )
private

Definition at line 243 of file class.ilTestPassesSelector.php.

243 : bool
244 {
245 $reporting_date = $this->test_obj->getScoreSettings()->getResultSummarySettings()->getReportingDate();
246 return $reporting_date <= new DateTimeImmutable('now', new DateTimeZone('UTC'));
247 }

Referenced by isReportableAttempt().

+ Here is the caller graph for this function:

◆ loadLastFinishedPass()

ilTestPassesSelector::loadLastFinishedPass ( )

Definition at line 100 of file class.ilTestPassesSelector.php.

100 : void
101 {
102 $query = 'SELECT last_finished_pass FROM tst_active WHERE active_id = %s';
103
104 $res = $this->db->queryF(
105 $query,
106 ['integer'],
107 [$this->getActiveId()]
108 );
109
110 while ($row = $this->db->fetchAssoc($res)) {
111 $this->setLastFinishedPass($row['last_finished_pass']);
112 }
113 }
setLastFinishedPass(?int $last_finished_pass)

References $res, getActiveId(), and setLastFinishedPass().

+ Here is the call graph for this function:

◆ loadPasses()

ilTestPassesSelector::loadPasses ( )
private

Definition at line 73 of file class.ilTestPassesSelector.php.

73 : void
74 {
75 $query = '
76 SELECT tst_pass_result.* FROM tst_pass_result
77 WHERE tst_pass_result.active_fi = %s
78 ORDER BY tst_pass_result.pass
79 ';
80
81 $res = $this->db->queryF(
82 $query,
83 ['integer'],
84 [$this->getActiveId()]
85 );
86
87 $this->passes = [];
88
89 while ($row = $this->db->fetchAssoc($res)) {
90 $this->passes[$row['pass']] = $row;
91 }
92 }

References $res, and getActiveId().

Referenced by ensureLoadedPasses().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ openPassExists()

ilTestPassesSelector::openPassExists ( )

Definition at line 130 of file class.ilTestPassesSelector.php.

130 : bool
131 {
132 return count($this->getExistingPasses()) > count($this->getClosedPasses());
133 }

References getClosedPasses(), and getExistingPasses().

+ Here is the call graph for this function:

◆ passesLoaded()

ilTestPassesSelector::passesLoaded ( )
private

Definition at line 62 of file class.ilTestPassesSelector.php.

62 : bool
63 {
64 return is_array($this->passes);
65 }

Referenced by ensureLoadedPasses().

+ Here is the caller graph for this function:

◆ setActiveId()

ilTestPassesSelector::setActiveId ( ?int  $active_id)

Definition at line 47 of file class.ilTestPassesSelector.php.

47 : void
48 {
49 $this->active_id = $active_id;
50 }

References $active_id.

◆ setLastFinishedPass()

ilTestPassesSelector::setLastFinishedPass ( ?int  $last_finished_pass)

Definition at line 57 of file class.ilTestPassesSelector.php.

57 : void
58 {
59 $this->last_finished_pass = $last_finished_pass === null ? -1 : $last_finished_pass;
60 }

References $last_finished_pass.

Referenced by loadLastFinishedPass().

+ Here is the caller graph for this function:

Field Documentation

◆ $active_id

int ilTestPassesSelector::$active_id = null
private

Definition at line 31 of file class.ilTestPassesSelector.php.

Referenced by getActiveId(), hasTestPassedOnce(), and setActiveId().

◆ $last_finished_pass

int ilTestPassesSelector::$last_finished_pass = null
private

◆ $passes

array ilTestPassesSelector::$passes = null
private

◆ $test_passed_once_cache

array ilTestPassesSelector::$test_passed_once_cache = []
private

Definition at line 34 of file class.ilTestPassesSelector.php.


The documentation for this class was generated from the following file: