ILIAS  trunk Revision v11.0_alpha-1769-g99a433fe2dc
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
ILIAS\Test\Access\AccessFileUploadAnswer Class Reference
+ Inheritance diagram for ILIAS\Test\Access\AccessFileUploadAnswer:
+ Collaboration diagram for ILIAS\Test\Access\AccessFileUploadAnswer:

Public Member Functions

 __construct (private readonly ilObjUser $user, private readonly ilDBInterface $database, private readonly Readable $readable, $object_id_of_test_id=[ilObjTest::class, '_getObjectIDFromTestID'], $references_of=[ilObject::class, '_getAllReferences'], $session=[ilSession::class, 'get'], ?callable $checkResultsAccess=null, ?Incident $incident=null)
 
 isPermitted (string $path)
 

Private Member Functions

 isAnonymous ()
 
 accessCodeOk (string $file, int $test_id)
 
 userDidUpload (int $test_id, string $file, ?string $code=null)
 
 activeIdOfFile (string $file, int $test)
 
 roleBasedCheck (int $test_id, array $references, string $file)
 
 canAccessResults (int $test_id, array $references, string $file)
 
 pathAndTestId (string $path)
 

Private Attributes

readonly Closure $object_id_of_test_id
 
readonly Closure $references_of
 
readonly Closure $session
 
readonly Closure $checkResultsAccess
 
readonly Incident $incident
 

Detailed Description

Definition at line 35 of file AccessFileUploadAnswer.php.

Constructor & Destructor Documentation

◆ __construct()

ILIAS\Test\Access\AccessFileUploadAnswer::__construct ( private readonly ilObjUser  $user,
private readonly ilDBInterface  $database,
private readonly Readable  $readable,
  $object_id_of_test_id = [ilObjTest::class,
'_getObjectIDFromTestID']  ,
  $references_of = [ilObject::class,
'_getAllReferences']  ,
  $session = [ilSession::class,
'get']  ,
?callable  $checkResultsAccess = null,
?Incident  $incident = null 
)
Parameters
callable(int)int $object_id_of_test_id
callable(int)int[] $references_of
callable(string)mixed $session
callable(int,int,int)bool $checkResultsAccess

Definition at line 53 of file AccessFileUploadAnswer.php.

62  {
63  $this->incident = $incident ?? new Incident();
64  $this->object_id_of_test_id = Closure::fromCallable($object_id_of_test_id);
65  $this->references_of = Closure::fromCallable($references_of);
66  $this->session = Closure::fromCallable($session);
67  $checkResultsAccess = $checkResultsAccess ?? static function (int $reference, int $test_id, int $active_id): bool {
68  $access = new ilTestAccess($reference);
69  return $access->checkResultsAccessForActiveId($active_id, $test_id);
70  };
71  $this->checkResultsAccess = Closure::fromCallable($checkResultsAccess);
72  }

Member Function Documentation

◆ accessCodeOk()

ILIAS\Test\Access\AccessFileUploadAnswer::accessCodeOk ( string  $file,
int  $test_id 
)
private

Definition at line 100 of file AccessFileUploadAnswer.php.

References ILIAS\Test\Access\AccessFileUploadAnswer\$session, ilTestSession\ACCESS_CODE_SESSION_INDEX, and ILIAS\Test\Access\AccessFileUploadAnswer\userDidUpload().

Referenced by ILIAS\Test\Access\AccessFileUploadAnswer\roleBasedCheck().

100  : bool
101  {
102  $code = ($this->session)(ilTestSession::ACCESS_CODE_SESSION_INDEX)[$test_id] ?? false;
103 
104  return $code && $this->userDidUpload($test_id, $file, $code);
105  }
userDidUpload(int $test_id, string $file, ?string $code=null)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ activeIdOfFile()

ILIAS\Test\Access\AccessFileUploadAnswer::activeIdOfFile ( string  $file,
int  $test 
)
private

Definition at line 126 of file AccessFileUploadAnswer.php.

References null.

Referenced by ILIAS\Test\Access\AccessFileUploadAnswer\canAccessResults().

126  : ?int
127  {
128  $is_upload_question = 'EXISTS (SELECT 1 FROM qpl_qst_type INNER JOIN qpl_questions ON question_type_id = question_type_fi WHERE type_tag = %s AND tst_solutions.question_fi = qpl_questions.question_id)';
129  $is_in_test = 'EXISTS (SELECT 1 FROM tst_active WHERE test_fi = %s AND active_id = active_fi)';
130 
131  $result = $this->database->queryF(
132  "SELECT active_fi, value1 FROM tst_solutions WHERE $is_upload_question AND $is_in_test",
133  ['text', 'integer'],
134  ['assFileUpload', $test]
135  );
136 
137  while (($row = $this->database->fetchAssoc($result))) {
138  if ($row['value1'] === $file) {
139  return (int) $row['active_fi'];
140  }
141  }
142 
143  return null;
144  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
+ Here is the caller graph for this function:

◆ canAccessResults()

ILIAS\Test\Access\AccessFileUploadAnswer::canAccessResults ( int  $test_id,
array  $references,
string  $file 
)
private
Parameters
int$test_id
int[]$references
string$file
Returns
bool

Definition at line 165 of file AccessFileUploadAnswer.php.

References ILIAS\Test\Access\AccessFileUploadAnswer\activeIdOfFile().

Referenced by ILIAS\Test\Access\AccessFileUploadAnswer\roleBasedCheck().

165  : bool
166  {
167  $active_id = $this->activeIdOfFile($file, $test_id);
168  if (!$active_id) {
169  return false;
170  }
171 
172  return $this->incident->any(fn(int $reference): bool => (
173  ($this->checkResultsAccess)($reference, $test_id, $active_id)
174  ), $references);
175  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isAnonymous()

ILIAS\Test\Access\AccessFileUploadAnswer::isAnonymous ( )
private

Definition at line 95 of file AccessFileUploadAnswer.php.

References ILIAS\Repository\user().

Referenced by ILIAS\Test\Access\AccessFileUploadAnswer\roleBasedCheck().

95  : bool
96  {
97  return $this->user->isAnonymous() || !$this->user->getId();
98  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isPermitted()

ILIAS\Test\Access\AccessFileUploadAnswer::isPermitted ( string  $path)
Returns
Result<bool>

Implements ILIAS\Test\Access\SimpleAccess.

Definition at line 74 of file AccessFileUploadAnswer.php.

References ILIAS\Test\Access\AccessFileUploadAnswer\$references_of, ILIAS\Repository\int(), ILIAS\Test\Access\AccessFileUploadAnswer\pathAndTestId(), and ILIAS\Test\Access\AccessFileUploadAnswer\roleBasedCheck().

74  : Result
75  {
76  $path_and_test = $this->pathAndTestId($path);
77 
78  if (!$path_and_test) {
79  return new Error('Not a file upload path of test answers.');
80  }
81  if (!$path_and_test['test']) {
82  return new Ok(false);
83  }
84 
85  $object_id = (int) ($this->object_id_of_test_id)($path_and_test['test']);
86  if (!$object_id) {
87  return new Ok(false);
88  }
89 
90  $references = ($this->references_of)($object_id);
91 
92  return new Ok($this->readable->references($references) && $this->roleBasedCheck($path_and_test['test'], $references, $path_and_test['path']));
93  }
$path
Definition: ltiservices.php:29
roleBasedCheck(int $test_id, array $references, string $file)
+ Here is the call graph for this function:

◆ pathAndTestId()

ILIAS\Test\Access\AccessFileUploadAnswer::pathAndTestId ( string  $path)
private
Parameters
string$path
Returns
null|array{test: int, path: string}

Definition at line 182 of file AccessFileUploadAnswer.php.

References $results, ILIAS\Repository\int(), and null.

Referenced by ILIAS\Test\Access\AccessFileUploadAnswer\isPermitted().

182  : ?array
183  {
184  $results = [];
185  if (!preg_match(':/assessment/tst_(\d+)/.*/([^/]+)$:', $path, $results)) {
186  return null;
187  }
188 
189  return [
190  'test' => (int) $results[1],
191  'path' => $results[2],
192  ];
193  }
$path
Definition: ltiservices.php:29
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
$results
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ roleBasedCheck()

ILIAS\Test\Access\AccessFileUploadAnswer::roleBasedCheck ( int  $test_id,
array  $references,
string  $file 
)
private
Parameters
int$test_id
int[]$references
string$file
Returns
bool

Definition at line 153 of file AccessFileUploadAnswer.php.

References ILIAS\Test\Access\AccessFileUploadAnswer\accessCodeOk(), ILIAS\Test\Access\AccessFileUploadAnswer\canAccessResults(), ILIAS\Test\Access\AccessFileUploadAnswer\isAnonymous(), and ILIAS\Test\Access\AccessFileUploadAnswer\userDidUpload().

Referenced by ILIAS\Test\Access\AccessFileUploadAnswer\isPermitted().

153  : bool
154  {
155  return $this->isAnonymous() ? $this->accessCodeOk($file, $test_id) : $this->canAccessResults($test_id, $references, $file) || $this->userDidUpload($test_id, $file);
156  }
userDidUpload(int $test_id, string $file, ?string $code=null)
canAccessResults(int $test_id, array $references, string $file)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ userDidUpload()

ILIAS\Test\Access\AccessFileUploadAnswer::userDidUpload ( int  $test_id,
string  $file,
?string  $code = null 
)
private

Definition at line 107 of file AccessFileUploadAnswer.php.

References null, and ILIAS\Repository\user().

Referenced by ILIAS\Test\Access\AccessFileUploadAnswer\accessCodeOk(), and ILIAS\Test\Access\AccessFileUploadAnswer\roleBasedCheck().

107  : bool
108  {
109  $where = [
110  'active_id = active_fi',
111  'user_fi = %s',
112  'value1 = %s',
113  'anonymous_id ' . (null === $code ? 'IS' : '=') . ' %s',
114  'test_fi = %s',
115  ];
116 
117  $result = $this->database->queryF(
118  'SELECT 1 FROM tst_solutions WHERE EXISTS (SELECT 1 FROM tst_active WHERE ' . implode(' AND ', $where) . ')',
119  ['integer', 'text', 'text', 'integer'],
120  [$this->user->getId(), $file, $code, $test_id]
121  );
122 
123  return (bool) $this->database->numRows($result);
124  }
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:

Field Documentation

◆ $checkResultsAccess

readonly Closure ILIAS\Test\Access\AccessFileUploadAnswer::$checkResultsAccess
private

Definition at line 44 of file AccessFileUploadAnswer.php.

◆ $incident

readonly Incident ILIAS\Test\Access\AccessFileUploadAnswer::$incident
private

Definition at line 45 of file AccessFileUploadAnswer.php.

◆ $object_id_of_test_id

readonly Closure ILIAS\Test\Access\AccessFileUploadAnswer::$object_id_of_test_id
private

Definition at line 38 of file AccessFileUploadAnswer.php.

◆ $references_of

readonly Closure ILIAS\Test\Access\AccessFileUploadAnswer::$references_of
private

◆ $session

readonly Closure ILIAS\Test\Access\AccessFileUploadAnswer::$session
private

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