ILIAS  trunk Revision v11.0_alpha-1831-g8615d53dadb
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
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 224 of file class.ilTestPassesSelector.php.

References getLastFinishedPass(), and null.

Referenced by isClosedPass().

225  {
226  if ($this->getLastFinishedPass() === null) {
227  throw new ilTestException('invalid object state: last finished pass was not set!');
228  }
229  }
Base Exception for all Exceptions relating to Modules/Test.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
+ 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.

References loadPasses(), and passesLoaded().

Referenced by getLazyLoadedPasses().

68  {
69  if (!$this->passesLoaded()) {
70  $this->loadPasses();
71  }
72  }
+ 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 170 of file class.ilTestPassesSelector.php.

References isClosedPass().

Referenced by getClosedPasses().

170  : array
171  {
172  $closed_passes = [];
173 
174  foreach ($existing_passes as $pass) {
175  if ($this->isClosedPass($pass)) {
176  $closed_passes[] = $pass;
177  }
178  }
179 
180  return $closed_passes;
181  }
+ 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 183 of file class.ilTestPassesSelector.php.

References null.

Referenced by fetchReportablePasses().

183  : ?int
184  {
185  $last_pass = null;
186 
187  foreach ($existing_passes as $pass) {
188  if ($last_pass === null || $pass > $last_pass) {
189  $last_pass = $pass;
190  }
191  }
192 
193  return $last_pass;
194  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
+ Here is the caller graph for this function:

◆ fetchReportablePasses()

ilTestPassesSelector::fetchReportablePasses ( array  $existing_passes)
private

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

References fetchLastPass(), and isReportableAttempt().

Referenced by getReportablePasses().

155  : array
156  {
157  $last_pass = $this->fetchLastPass($existing_passes);
158 
159  $reportable_passes = [];
160 
161  foreach ($existing_passes as $pass) {
162  if ($this->isReportableAttempt($last_pass, $pass)) {
163  $reportable_passes[] = $pass;
164  }
165  }
166 
167  return $reportable_passes;
168  }
fetchLastPass(array $existing_passes)
isReportableAttempt(int $last_attempt, int $attempt)
+ 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.

References $active_id.

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

42  : ?int
43  {
44  return $this->active_id;
45  }
+ Here is the caller graph for this function:

◆ getClosedPasses()

ilTestPassesSelector::getClosedPasses ( )

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

References fetchClosedPasses(), and getExistingPasses().

Referenced by openPassExists().

138  : array
139  {
140  $existing_passes = $this->getExistingPasses();
141  return $this->fetchClosedPasses($existing_passes);
142  }
fetchClosedPasses(array $existing_passes)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getExistingPasses()

ilTestPassesSelector::getExistingPasses ( )

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

References getLazyLoadedPasses().

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

118  : array
119  {
120  return array_keys($this->getLazyLoadedPasses());
121  }
+ 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.

References $last_finished_pass.

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

52  : ?int
53  {
55  }
+ Here is the caller graph for this function:

◆ getLastFinishedPassTimestamp()

ilTestPassesSelector::getLastFinishedPassTimestamp ( )

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

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

Referenced by ilObjTest\isNextPassAllowed().

267  : ?int
268  {
270  if ($last_finished_pass === null || $last_finished_pass === -1) {
271  return null;
272  }
273 
274  $passes = $this->getLazyLoadedPasses();
275  if (!isset($passes[$last_finished_pass])) {
276  return null;
277  }
278  return $passes[$last_finished_pass]['tstamp'];
279  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getLazyLoadedPasses()

ilTestPassesSelector::getLazyLoadedPasses ( )
private

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

References $passes, and ensureLoadedPasses().

Referenced by getExistingPasses(), and getLastFinishedPassTimestamp().

97  : array
98  {
99  $this->ensureLoadedPasses();
100  return $this->passes;
101  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getNumExistingPasses()

ilTestPassesSelector::getNumExistingPasses ( )

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

References getExistingPasses().

128  : int
129  {
130  return count($this->getExistingPasses());
131  }
+ Here is the call graph for this function:

◆ getReportablePasses()

ilTestPassesSelector::getReportablePasses ( )

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

References fetchReportablePasses(), and getExistingPasses().

Referenced by hasReportablePasses().

144  : array
145  {
146  $existing_passes = $this->getExistingPasses();
147  return $this->fetchReportablePasses($existing_passes);
148  }
fetchReportablePasses(array $existing_passes)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ hasExistingPasses()

ilTestPassesSelector::hasExistingPasses ( )

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

References getExistingPasses().

123  : bool
124  {
125  return $this->getExistingPasses() !== [];
126  }
+ Here is the call graph for this function:

◆ hasReportablePasses()

ilTestPassesSelector::hasReportablePasses ( )

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

References getReportablePasses().

150  : bool
151  {
152  return (bool) count($this->getReportablePasses());
153  }
+ Here is the call graph for this function:

◆ hasTestPassedOnce()

ilTestPassesSelector::hasTestPassedOnce ( int  $active_id)

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

References $active_id, and $res.

Referenced by isReportableAttempt().

281  : bool
282  {
283  if (!isset($this->test_passed_once_cache[$active_id])) {
284  $this->test_passed_once_cache[$active_id] = false;
285 
286  $res = $this->db->queryF(
287  'SELECT passed_once FROM tst_result_cache WHERE active_fi = %s',
288  ['integer'],
289  [$active_id]
290  );
291 
292  while ($row = $this->db->fetchAssoc($res)) {
293  $this->test_passed_once_cache[$active_id] = (bool) $row['passed_once'];
294  }
295  }
296 
297  return $this->test_passed_once_cache[$active_id];
298  }
$res
Definition: ltiservices.php:66
+ Here is the caller graph for this function:

◆ isClosedPass()

ilTestPassesSelector::isClosedPass ( int  $pass)
private

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

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

Referenced by fetchClosedPasses(), and isReportableAttempt().

231  : bool
232  {
234 
235  if ($pass <= $this->getLastFinishedPass()) {
236  return true;
237  }
238 
239  if ($this->isProcessingTimeReached($pass)) {
240  return true;
241  }
242 
243  return false;
244  }
+ 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 252 of file class.ilTestPassesSelector.php.

References getActiveId().

Referenced by isClosedPass().

252  : bool
253  {
254  if (!$this->test_obj->getEnableProcessingTime()) {
255  return false;
256  }
257 
258  $startingTime = $this->test_obj->getStartingTimeOfUser($this->getActiveId(), $pass);
259 
260  if ($startingTime === false) {
261  return false;
262  }
263 
264  return $this->test_obj->isMaxProcessingTimeReached($startingTime, $this->getActiveId());
265  }
+ 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 196 of file class.ilTestPassesSelector.php.

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

Referenced by fetchReportablePasses().

196  : bool
197  {
198  switch ($this->test_obj->getScoreSettings()->getResultSummarySettings()->getScoreReporting()) {
199  case ScoreReportingTypes::SCORE_REPORTING_IMMIDIATLY:
200  return true;
201 
202  case ScoreReportingTypes::SCORE_REPORTING_DATE:
203  return $this->isReportingDateReached();
204 
205  case ScoreReportingTypes::SCORE_REPORTING_FINISHED:
206  if ($attempt < $last_attempt) {
207  return true;
208  }
209 
210  return $this->isClosedPass($attempt);
211 
212  case ScoreReportingTypes::SCORE_REPORTING_AFTER_PASSED:
213  if (!$this->hasTestPassedOnce($this->getActiveId())) {
214  return false;
215  }
216 
217  return $this->isClosedPass($attempt);
218 
219  default:
220  return false;
221  }
222  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isReportingDateReached()

ilTestPassesSelector::isReportingDateReached ( )
private

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

Referenced by isReportableAttempt().

246  : bool
247  {
248  $reporting_date = $this->test_obj->getScoreSettings()->getResultSummarySettings()->getReportingDate();
249  return $reporting_date <= new DateTimeImmutable('now', new DateTimeZone('UTC'));
250  }
+ Here is the caller graph for this function:

◆ loadLastFinishedPass()

ilTestPassesSelector::loadLastFinishedPass ( )

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

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

103  : void
104  {
105  $query = 'SELECT last_finished_pass FROM tst_active WHERE active_id = %s';
106 
107  $res = $this->db->queryF(
108  $query,
109  ['integer'],
110  [$this->getActiveId()]
111  );
112 
113  while ($row = $this->db->fetchAssoc($res)) {
114  $this->setLastFinishedPass($row['last_finished_pass']);
115  }
116  }
$res
Definition: ltiservices.php:66
setLastFinishedPass(?int $last_finished_pass)
+ Here is the call graph for this function:

◆ loadPasses()

ilTestPassesSelector::loadPasses ( )
private

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

References $res, and getActiveId().

Referenced by ensureLoadedPasses().

73  : void
74  {
75  $query = '
76  SELECT DISTINCT tst_pass_result.* FROM tst_pass_result
77  LEFT JOIN tst_test_result
78  ON tst_pass_result.pass = tst_test_result.pass
79  AND tst_pass_result.active_fi = tst_test_result.active_fi
80  WHERE tst_pass_result.active_fi = %s
81  ORDER BY tst_pass_result.pass
82  ';
83 
84  $res = $this->db->queryF(
85  $query,
86  ['integer'],
87  [$this->getActiveId()]
88  );
89 
90  $this->passes = [];
91 
92  while ($row = $this->db->fetchAssoc($res)) {
93  $this->passes[$row['pass']] = $row;
94  }
95  }
$res
Definition: ltiservices.php:66
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ openPassExists()

ilTestPassesSelector::openPassExists ( )

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

References getClosedPasses(), and getExistingPasses().

133  : bool
134  {
135  return count($this->getExistingPasses()) > count($this->getClosedPasses());
136  }
+ Here is the call graph for this function:

◆ passesLoaded()

ilTestPassesSelector::passesLoaded ( )
private

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

Referenced by ensureLoadedPasses().

62  : bool
63  {
64  return is_array($this->passes);
65  }
+ Here is the caller graph for this function:

◆ setActiveId()

ilTestPassesSelector::setActiveId ( ?int  $active_id)

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

References $active_id.

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

◆ setLastFinishedPass()

ilTestPassesSelector::setLastFinishedPass ( ?int  $last_finished_pass)

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

References $last_finished_pass, and null.

Referenced by loadLastFinishedPass().

57  : void
58  {
59  $this->last_finished_pass = $last_finished_pass === null ? -1 : $last_finished_pass;
60  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
+ 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

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

Referenced by getLazyLoadedPasses().

◆ $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: