ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
ILIAS\Modules\Test\AccessFileUploadAnswer Class Reference
+ Inheritance diagram for ILIAS\Modules\Test\AccessFileUploadAnswer:
+ Collaboration diagram for ILIAS\Modules\Test\AccessFileUploadAnswer:

Public Member Functions

 __construct (Container $container, 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

Container $container
 
Readable $readable
 
Closure $object_id_of_test_id
 
Closure $references_of
 
Closure $session
 
Closure $checkResultsAccess
 
Incident $incident
 

Detailed Description

Definition at line 34 of file AccessFileUploadAnswer.php.

Constructor & Destructor Documentation

◆ __construct()

ILIAS\Modules\Test\AccessFileUploadAnswer::__construct ( Container  $container,
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 54 of file AccessFileUploadAnswer.php.

References ILIAS\Modules\Test\AccessFileUploadAnswer\$container, and ILIAS\Modules\Test\AccessFileUploadAnswer\$readable.

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

Member Function Documentation

◆ accessCodeOk()

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

Definition at line 102 of file AccessFileUploadAnswer.php.

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

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

102  : bool
103  {
104  $code = ($this->session)(ilTestSession::ACCESS_CODE_SESSION_INDEX)[$test_id] ?? false;
105 
106  return $code && $this->userDidUpload($test_id, $file, $code);
107  }
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\Modules\Test\AccessFileUploadAnswer::activeIdOfFile ( string  $file,
int  $test 
)
private

Definition at line 128 of file AccessFileUploadAnswer.php.

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

128  : ?int
129  {
130  $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)';
131  $is_in_test = 'EXISTS (SELECT 1 FROM tst_active WHERE test_fi = %s AND active_id = active_fi)';
132 
133  $result = $this->container->database()->queryF(
134  "SELECT active_fi, value1 FROM tst_solutions WHERE $is_upload_question AND $is_in_test",
135  ['text', 'integer'],
136  ['assFileUpload', $test]
137  );
138 
139  while (($row = $this->container->database()->fetchAssoc($result))) {
140  if ($row['value1'] === $file) {
141  return (int) $row['active_fi'];
142  }
143  }
144 
145  return null;
146  }
+ Here is the caller graph for this function:

◆ canAccessResults()

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

Definition at line 167 of file AccessFileUploadAnswer.php.

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

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

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

◆ isAnonymous()

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

Definition at line 97 of file AccessFileUploadAnswer.php.

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

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

◆ isPermitted()

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

Implements ILIAS\Modules\Test\SimpleAccess.

Definition at line 76 of file AccessFileUploadAnswer.php.

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

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

◆ pathAndTestId()

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

Definition at line 184 of file AccessFileUploadAnswer.php.

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

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

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

◆ roleBasedCheck()

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

Definition at line 155 of file AccessFileUploadAnswer.php.

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

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

155  : bool
156  {
157  return $this->isAnonymous() ? $this->accessCodeOk($file, $test_id) : $this->canAccessResults($test_id, $references, $file) || $this->userDidUpload($test_id, $file);
158  }
canAccessResults(int $test_id, array $references, string $file)
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:

◆ userDidUpload()

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

Definition at line 109 of file AccessFileUploadAnswer.php.

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

109  : bool
110  {
111  $where = [
112  'active_id = active_fi',
113  'user_fi = %s',
114  'value1 = %s',
115  'anonymous_id ' . (null === $code ? 'IS' : '=') . ' %s',
116  'test_fi = %s',
117  ];
118 
119  $result = $this->container->database()->queryF(
120  'SELECT 1 FROM tst_solutions WHERE EXISTS (SELECT 1 FROM tst_active WHERE ' . implode(' AND ', $where) . ')',
121  ['integer', 'text', 'text', 'integer'],
122  [$this->container->user()->getId(), $file, $code, $test_id]
123  );
124 
125  return (bool) $this->container->database()->numRows($result);
126  }
+ Here is the caller graph for this function:

Field Documentation

◆ $checkResultsAccess

Closure ILIAS\Modules\Test\AccessFileUploadAnswer::$checkResultsAccess
private

Definition at line 45 of file AccessFileUploadAnswer.php.

◆ $container

Container ILIAS\Modules\Test\AccessFileUploadAnswer::$container
private

◆ $incident

Incident ILIAS\Modules\Test\AccessFileUploadAnswer::$incident
private

Definition at line 46 of file AccessFileUploadAnswer.php.

◆ $object_id_of_test_id

Closure ILIAS\Modules\Test\AccessFileUploadAnswer::$object_id_of_test_id
private

Definition at line 39 of file AccessFileUploadAnswer.php.

◆ $readable

Readable ILIAS\Modules\Test\AccessFileUploadAnswer::$readable
private

◆ $references_of

Closure ILIAS\Modules\Test\AccessFileUploadAnswer::$references_of
private

◆ $session

Closure ILIAS\Modules\Test\AccessFileUploadAnswer::$session
private

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