ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ILIAS\Exercise\Submission\SubmissionManager Class Reference
+ Collaboration diagram for ILIAS\Exercise\Submission\SubmissionManager:

Public Member Functions

 __construct (InternalRepoService $repo, protected InternalDomainService $domain, protected \ilExcSubmissionStakeholder $stakeholder, protected int $ass_id)
 
 countSubmissionsOfUser (int $user_id)
 
 getSubmissionsOfUser (int $user_id, ?array $submit_ids=null, bool $only_valid=false, ?string $min_timestamp=null, bool $print_versions=false)
 Note: this includes submissions of other team members, if user is in a team. More...
 
 getSubmissionsOfOwners (array $user_ids)
 This is only suitable for types like text or single upload, where no teams are used. More...
 
 recalculateLateSubmissions ()
 
 getAllAssignmentFiles ()
 
 getMaxAmountOfSubmittedFiles (int $user_id=0)
 
 getUsersWithSubmission ()
 Get all user ids, that have submitted something. More...
 
 addLocalFile (int $user_id, string $file, string $filename="")
 
 addUpload (int $user_id, UploadResult $result, string $filename="")
 
 addZipUploads (int $user_id, UploadResult $result)
 
 deliverFile (int $user_id, string $rid, string $filetitle="")
 
 copyRidToWebDir (string $rid, string $internal_file_path)
 
 deleteSubmissions (int $user_id, array $ids)
 Delete submissions. More...
 
 deleteAllSubmissionsOfUser (int $user_id)
 
 copySubmissionsToDir (array $user_ids, string $directory)
 Should be replaced by writing into a zip directly in the future. More...
 

Protected Member Functions

 remainingFilesAllowed (int $user_id)
 
 getAllSubmissionIdsOfUser (int $user_id)
 All, include print, include all from team. More...
 
 getDirectoryNameFromUserData (int $user_id)
 there is still a version in ilExSubmission that needs to be replaced More...
 

Protected Attributes

ilExAssignmentTypeInterface $type
 
ILIAS Exercise Team TeamManager $team
 
ilLogger $log
 
SubmissionRepositoryInterface $repo
 
ilExAssignment $assignment
 

Detailed Description

Definition at line 28 of file SubmissionManager.php.

Constructor & Destructor Documentation

◆ __construct()

ILIAS\Exercise\Submission\SubmissionManager::__construct ( InternalRepoService  $repo,
protected InternalDomainService  $domain,
protected \ilExcSubmissionStakeholder  $stakeholder,
protected int  $ass_id 
)

Definition at line 36 of file SubmissionManager.php.

41 {
42 $this->assignment = $domain->assignment()->getAssignment($ass_id);
43 $this->type = $this->assignment->getAssignmentType();
44 $this->repo = $repo->submission();
45 $this->log = $this->domain->logger()->exc();
46 $this->team = $domain->team();
47 }

References ILIAS\Exercise\Submission\Submission\$ass_id, ILIAS\Exercise\Submission\SubmissionManager\$repo, ILIAS\Exercise\InternalDomainService\assignment(), and ILIAS\Exercise\InternalDomainService\team().

+ Here is the call graph for this function:

Member Function Documentation

◆ addLocalFile()

ILIAS\Exercise\Submission\SubmissionManager::addLocalFile ( int  $user_id,
string  $file,
string  $filename = "" 
)

Definition at line 205 of file SubmissionManager.php.

209 : bool {
210
211 if ($filename === "") {
212 $filename = basename($file);
213 }
214 $submission = new \ilExSubmission(
215 $this->assignment,
217 );
218
219 if (!$submission->canAddFile()) {
220 return false;
221 }
222
223 if ($this->type->isSubmissionAssignedToTeam()) {
224 $team_id = $submission->getTeam()->getId();
225 $user_id = 0;
226 if ($team_id === 0) {
227 return false;
228 }
229 } else {
230 $team_id = 0;
231 }
232 $success = $this->repo->addLocalFile(
233 $this->assignment->getExerciseId(),
234 $this->ass_id,
235 $user_id,
236 $team_id,
237 $file,
238 $filename,
239 $submission->isLate(),
240 $this->stakeholder
241 );
242
243 if ($success && $team_id > 0) {
244 $this->domain->team()->writeLog(
245 $team_id,
248 );
249 }
250
251 return $success;
252 }
$filename
Definition: buildRTE.php:78

References $filename.

◆ addUpload()

ILIAS\Exercise\Submission\SubmissionManager::addUpload ( int  $user_id,
UploadResult  $result,
string  $filename = "" 
)

Definition at line 254 of file SubmissionManager.php.

258 : bool {
259
260 if ($filename === "") {
261 $filename = $result->getName();
262 }
263 $submission = new \ilExSubmission(
264 $this->assignment,
266 );
267
268 if (!$submission->canAddFile()) {
269 return false;
270 }
271
272 if ($this->type->isSubmissionAssignedToTeam()) {
273 $team_id = $submission->getTeam()->getId();
274 $user_id = 0;
275 if ($team_id === 0) {
276 return false;
277 }
278 } else {
279 $team_id = 0;
280 }
281 $success = $this->repo->addUpload(
282 $this->assignment->getExerciseId(),
283 $this->ass_id,
284 $user_id,
285 $team_id,
286 $result,
287 $filename,
288 $submission->isLate(),
289 $this->stakeholder
290 );
291
292 if ($success && $team_id > 0) {
293 $this->domain->team()->writeLog(
294 $team_id,
297 );
298 }
299
300 return $success;
301 }

References $filename, and ILIAS\FileUpload\DTO\UploadResult\getName().

+ Here is the call graph for this function:

◆ addZipUploads()

ILIAS\Exercise\Submission\SubmissionManager::addZipUploads ( int  $user_id,
UploadResult  $result 
)

Definition at line 318 of file SubmissionManager.php.

321 : bool {
322 $submission = new \ilExSubmission(
323 $this->assignment,
325 );
326 if (!$submission->canAddFile()) {
327 return false;
328 }
329 if ($this->type->isSubmissionAssignedToTeam()) {
330 $team_id = $submission->getTeam()->getId();
331 $user_id = 0;
332 if ($team_id === 0) {
333 return false;
334 }
335 } else {
336 $team_id = 0;
337 }
338 $filenames = $this->repo->addZipUpload(
339 $this->assignment->getExerciseId(),
340 $this->ass_id,
341 $user_id,
342 $team_id,
343 $result,
344 $submission->isLate(),
345 $this->stakeholder,
346 $this->remainingFilesAllowed($user_id)
347 );
348 $this->log->debug("99");
349 if ($team_id > 0) {
350 foreach ($filenames as $filename) {
351 $this->domain->team()->writeLog(
352 $team_id,
355 );
356 }
357 }
358
359 return count($filenames) > 0;
360 }

◆ copyRidToWebDir()

ILIAS\Exercise\Submission\SubmissionManager::copyRidToWebDir ( string  $rid,
string  $internal_file_path 
)

Definition at line 375 of file SubmissionManager.php.

378 : ?string {
379 global $DIC;
380
381 $web_filesystem = $DIC->filesystem()->web();
382
383 $internal_dirs = dirname($internal_file_path);
384 $zip_file = basename($internal_file_path);
385
386 if ($rid !== "") {
387 //$this->log->debug("internal file path: " . $internal_file_path);
388 if ($web_filesystem->hasDir($internal_dirs)) {
389 $web_filesystem->deleteDir($internal_dirs);
390 }
391 $web_filesystem->createDir($internal_dirs);
392 if ($web_filesystem->has($internal_file_path)) {
393 $web_filesystem->delete($internal_file_path);
394 }
395 if (!$web_filesystem->has($internal_file_path)) {
396 //$this->log->debug("writing: " . $internal_file_path);
397 $stream = $this->repo->getStream(
398 $this->ass_id,
399 $rid
400 );
401 if (!is_null($stream)) {
402 $web_filesystem->writeStream($internal_file_path, $stream);
403
404 return ILIAS_ABSOLUTE_PATH .
405 DIRECTORY_SEPARATOR .
406 "public" .
407 DIRECTORY_SEPARATOR .
409 DIRECTORY_SEPARATOR .
410 CLIENT_ID .
411 DIRECTORY_SEPARATOR .
412 $internal_dirs .
413 DIRECTORY_SEPARATOR .
414 $zip_file;
415 }
416 }
417 }
418
419 return null;
420 }
const CLIENT_ID
Definition: constants.php:41
const ILIAS_WEB_DIR
Definition: constants.php:45
global $DIC
Definition: shib_login.php:26

◆ copySubmissionsToDir()

ILIAS\Exercise\Submission\SubmissionManager::copySubmissionsToDir ( array  $user_ids,
string  $directory 
)

Should be replaced by writing into a zip directly in the future.

Definition at line 478 of file SubmissionManager.php.

481 {
482 $members = [];
483 foreach ($user_ids as $member_id) {
484 $submission = new \ilExSubmission($this->assignment, $member_id);
485 $submission->updateTutorDownloadTime();
486
487 // get member object (ilObjUser)
488 if ($this->domain->profile()->exists($member_id)) {
489 // adding file metadata
490 foreach ($this->getSubmissionsOfUser($member_id) as $sub) {
491 $members[$sub->getUserId()]["files"][$sub->getId()] = $sub;
492 }
493
494 $name = \ilObjUser::_lookupName($member_id);
495 $members[$member_id]["name"] = $name["firstname"] . " " . $name["lastname"];
496 }
497 }
498 $this->copySubmissionFilesToDir($members, $directory);
499 }
getSubmissionsOfUser(int $user_id, ?array $submit_ids=null, bool $only_valid=false, ?string $min_timestamp=null, bool $print_versions=false)
Note: this includes submissions of other team members, if user is in a team.
static _lookupName(int $a_user_id)

References ilObjUser\_lookupName().

+ Here is the call graph for this function:

◆ countSubmissionsOfUser()

ILIAS\Exercise\Submission\SubmissionManager::countSubmissionsOfUser ( int  $user_id)

Definition at line 49 of file SubmissionManager.php.

49 : int
50 {
51 return count(iterator_to_array(
53 ));
54 }

References ILIAS\Exercise\Submission\SubmissionManager\getSubmissionsOfUser().

+ Here is the call graph for this function:

◆ deleteAllSubmissionsOfUser()

ILIAS\Exercise\Submission\SubmissionManager::deleteAllSubmissionsOfUser ( int  $user_id)

Definition at line 467 of file SubmissionManager.php.

467 : void
468 {
469 $this->deleteSubmissions(
470 $user_id,
472 );
473 }
getAllSubmissionIdsOfUser(int $user_id)
All, include print, include all from team.
deleteSubmissions(int $user_id, array $ids)
Delete submissions.

References $user_id.

◆ deleteSubmissions()

ILIAS\Exercise\Submission\SubmissionManager::deleteSubmissions ( int  $user_id,
array  $ids 
)

Delete submissions.

Definition at line 425 of file SubmissionManager.php.

425 : void
426 {
427 if (count($ids) == 0) {
428 return;
429 }
430 $all = $this->getAllSubmissionIdsOfUser($user_id);
431 foreach ($ids as $id) {
432 // this ensures, the ids belong to user submissions at all
433 if (!in_array($id, $all)) {
434 continue;
435 }
436 $s = $this->repo->getById($id);
437 $this->repo->delete(
438 $id,
439 $this->stakeholder
440 );
441 $team_id = $this->team->getTeamForMember($this->ass_id, $user_id);
442 if ($team_id && $team_id > 0) {
443 $this->team->writeLog(
444 $team_id,
446 $s->getTitle()
447 );
448 }
449 }
450 }

References $id, $user_id, and ilExAssignmentTeam\TEAM_LOG_REMOVE_FILE.

◆ deliverFile()

ILIAS\Exercise\Submission\SubmissionManager::deliverFile ( int  $user_id,
string  $rid,
string  $filetitle = "" 
)

Definition at line 362 of file SubmissionManager.php.

366 : void {
367 $this->repo->deliverFile(
368 $this->ass_id,
369 $user_id,
370 $rid,
371 $filetitle
372 );
373 }

◆ getAllAssignmentFiles()

ILIAS\Exercise\Submission\SubmissionManager::getAllAssignmentFiles ( )
Exceptions

ilExcUnknownAssignmentTypeException

Definition at line 170 of file SubmissionManager.php.

170 : array
171 {
173
174 $delivered = [];
175 foreach ($this->repo->getAllEntriesOfAssignment($assignment->getId()) as $row) {
176 $row["timestamp"] = $row["ts"];
177 $delivered[] = $row;
178 }
179
180 return $delivered;
181 }

◆ getAllSubmissionIdsOfUser()

ILIAS\Exercise\Submission\SubmissionManager::getAllSubmissionIdsOfUser ( int  $user_id)
protected

All, include print, include all from team.

Definition at line 455 of file SubmissionManager.php.

455 : array
456 {
457 $subs = [];
458 foreach ($this->getSubmissionsOfUser($user_id) as $s) {
459 $subs[] = $s->getId();
460 }
461 foreach ($this->getSubmissionsOfUser($user_id, null, false, null, true) as $s) {
462 $subs[] = $s->getId();
463 }
464 return $subs;
465 }

References $user_id.

◆ getDirectoryNameFromUserData()

ILIAS\Exercise\Submission\SubmissionManager::getDirectoryNameFromUserData ( int  $user_id)
protected

there is still a version in ilExSubmission that needs to be replaced

Definition at line 634 of file SubmissionManager.php.

634 : string
635 {
637 return \ilFileUtils::getASCIIFilename(
638 trim($userName["lastname"]) . "_" .
639 trim($userName["firstname"]) . "_" .
640 trim($userName["login"]) . "_" .
641 $userName["user_id"]
642 );
643 }

References $user_id, and ilObjUser\_lookupName().

+ Here is the call graph for this function:

◆ getMaxAmountOfSubmittedFiles()

ILIAS\Exercise\Submission\SubmissionManager::getMaxAmountOfSubmittedFiles ( int  $user_id = 0)

Definition at line 183 of file SubmissionManager.php.

185 : int {
186 $ass = $this->assignment;
187 return $this->repo->getMaxAmountOfSubmittedFiles(
188 $ass->getExerciseId(),
189 $ass->getId(),
191 );
192 }

◆ getSubmissionsOfOwners()

ILIAS\Exercise\Submission\SubmissionManager::getSubmissionsOfOwners ( array  $user_ids)

This is only suitable for types like text or single upload, where no teams are used.

Returns
\Generator<Submission>

Definition at line 110 of file SubmissionManager.php.

110 : \Generator
111 {
112 $type_uses_uploads = $this->type->usesFileUpload();
113 $type_uses_print_versions = in_array($this->assignment->getType(), [
117 ], true);
118 yield from $this->repo->getSubmissionsOfUsers(
119 $this->ass_id,
120 $type_uses_uploads,
121 $type_uses_print_versions,
122 $user_ids
123 );
124 }

References ILIAS\ResourceStorage\Flavour\Machine\DefaultMachines\from(), ilExAssignment\TYPE_BLOG, ilExAssignment\TYPE_PORTFOLIO, and ilExAssignment\TYPE_WIKI_TEAM.

+ Here is the call graph for this function:

◆ getSubmissionsOfUser()

ILIAS\Exercise\Submission\SubmissionManager::getSubmissionsOfUser ( int  $user_id,
?array  $submit_ids = null,
bool  $only_valid = false,
?string  $min_timestamp = null,
bool  $print_versions = false 
)

Note: this includes submissions of other team members, if user is in a team.

Returns
\Generator<Submission>

Definition at line 60 of file SubmissionManager.php.

66 : \Generator {
67 $type_uses_print_versions = in_array($this->assignment->getType(), [
71 ], true);
72 $type_uses_uploads = $this->type->usesFileUpload();
73 if ($this->type->isSubmissionAssignedToTeam()) {
74 $team_id = $this->team->getTeamForMember($this->ass_id, $user_id);
75 if (((int) $team_id) !== 0) {
76 yield from $this->repo->getSubmissionsOfTeam(
77 $this->ass_id,
78 $type_uses_uploads,
79 $type_uses_print_versions,
81 $submit_ids,
82 $only_valid,
83 $min_timestamp,
84 $print_versions
85 );
86 }
87 } else {
88 $user_ids = $this->team->getTeamMemberIdsOrUserId(
89 $this->ass_id,
91 );
92 yield from $this->repo->getSubmissionsOfUsers(
93 $this->ass_id,
94 $type_uses_uploads,
95 $type_uses_print_versions,
96 $user_ids,
97 $submit_ids,
98 $only_valid,
99 $min_timestamp,
100 $print_versions
101 );
102 }
103 yield from [];
104 }

References ILIAS\Exercise\Submission\Submission\$team_id, ILIAS\Exercise\Submission\Submission\$user_id, and ILIAS\ResourceStorage\Flavour\Machine\DefaultMachines\from().

Referenced by ILIAS\Exercise\Submission\SubmissionManager\countSubmissionsOfUser().

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

◆ getUsersWithSubmission()

ILIAS\Exercise\Submission\SubmissionManager::getUsersWithSubmission ( )

Get all user ids, that have submitted something.

Returns
int[]

Definition at line 198 of file SubmissionManager.php.

198 : array
199 {
200 return $this->repo->getUsersWithSubmission(
201 $this->ass_id
202 );
203 }

◆ recalculateLateSubmissions()

ILIAS\Exercise\Submission\SubmissionManager::recalculateLateSubmissions ( )

Definition at line 126 of file SubmissionManager.php.

126 : void
127 {
128 // see JF, 2015-05-11
129 $assigment = $this->assignment;
130
131 $ext_deadline = $assigment->getExtendedDeadline();
132
133 foreach ($this->getAllAssignmentFiles() as $file) {
134 $id = $file["returned_id"];
135 $uploaded = new \ilDateTime($file["ts"], IL_CAL_DATETIME);
136 $uploaded = $uploaded->get(IL_CAL_UNIX);
137
138 $deadline = $assigment->getPersonalDeadline($file["user_id"]);
139 $last_deadline = max($deadline, $assigment->getExtendedDeadline());
140
141 $late = null;
142
143 // upload is not late anymore
144 if ($file["late"] &&
145 (!$last_deadline ||
146 !$ext_deadline ||
147 $uploaded < $deadline)) {
148 $late = false;
149 }
150 // upload is now late
151 elseif (!$file["late"] &&
152 $ext_deadline &&
153 $deadline &&
154 $uploaded > $deadline) {
155 $late = true;
156 }
157
158 if ($late !== null) {
159 $this->repo->updateLate(
160 $id,
161 $late
162 );
163 }
164 }
165 }
const IL_CAL_UNIX
const IL_CAL_DATETIME

References ILIAS\Exercise\Submission\Submission\$id, ILIAS\Exercise\Submission\Submission\$late, IL_CAL_DATETIME, and IL_CAL_UNIX.

◆ remainingFilesAllowed()

ILIAS\Exercise\Submission\SubmissionManager::remainingFilesAllowed ( int  $user_id)
protected

Definition at line 303 of file SubmissionManager.php.

303 : int
304 {
305 $submission = new \ilExSubmission(
306 $this->assignment,
308 );
309 $max_file = $submission->getAssignment()->getMaxFile();
310 if ($max_file === 0) {
311 return -1;
312 }
313 $cnt_sub = $this->countSubmissionsOfUser($user_id);
314 $max_file -= $cnt_sub;
315 return max($max_file, 0);
316 }

References $user_id.

Field Documentation

◆ $assignment

ilExAssignment ILIAS\Exercise\Submission\SubmissionManager::$assignment
protected

Definition at line 34 of file SubmissionManager.php.

◆ $log

ilLogger ILIAS\Exercise\Submission\SubmissionManager::$log
protected

Definition at line 32 of file SubmissionManager.php.

◆ $repo

SubmissionRepositoryInterface ILIAS\Exercise\Submission\SubmissionManager::$repo
protected

◆ $team

ILIAS Exercise Team TeamManager ILIAS\Exercise\Submission\SubmissionManager::$team
protected

Definition at line 31 of file SubmissionManager.php.

◆ $type

ilExAssignmentTypeInterface ILIAS\Exercise\Submission\SubmissionManager::$type
protected

Definition at line 30 of file SubmissionManager.php.


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