49 $this->ass_domain = $DIC->exercise()->internal()->domain()->assignment();
55 return array(
"4.1.0",
"4.4.0",
"5.0.0",
"5.1.0",
"5.2.0",
"5.3.0",
"9.0");
58 protected function getXmlNamespace(
string $a_entity,
string $a_schema_version): string
60 return "https://www.ilias.de/xml/Modules/Exercise/" . $a_entity;
63 protected function getTypes(
string $a_entity,
string $a_version): array
65 if ($a_entity ==
"exc") {
71 "Description" =>
"text",
73 "PassNr" =>
"integer",
74 "ShowSubmissions" =>
"integer" 83 "Description" =>
"text",
85 "PassNr" =>
"integer",
86 "ShowSubmissions" =>
"integer",
87 "ComplBySubmission" =>
"integer" 96 "Description" =>
"text",
98 "PassNr" =>
"integer",
99 "NrMandatoryRandom" =>
"integer",
100 "ShowSubmissions" =>
"integer",
101 "ComplBySubmission" =>
"integer",
102 "Tfeedback" =>
"integer" 107 if ($a_entity ==
"exc_assignment") {
108 switch ($a_version) {
112 "ExerciseId" =>
"integer",
113 "Deadline" =>
"text",
114 "Instruction" =>
"text",
116 "Mandatory" =>
"integer",
117 "OrderNr" =>
"integer",
118 "Dir" =>
"directory");
123 "ExerciseId" =>
"integer",
125 "Deadline" =>
"integer",
126 "Instruction" =>
"text",
128 "Mandatory" =>
"integer",
129 "OrderNr" =>
"integer",
133 ,
"PeerMin" =>
"integer" 134 ,
"PeerDeadline" =>
"integer" 136 ,
"FeedbackFile" =>
"integer" 137 ,
"FeedbackCron" =>
"integer" 138 ,
"FeedbackDate" =>
"integer" 139 ,
"FeedbackDir" =>
"directory" 145 "ExerciseId" =>
"integer",
147 "Deadline" =>
"integer",
148 "Instruction" =>
"text",
150 "Mandatory" =>
"integer",
151 "OrderNr" =>
"integer",
155 ,
"PeerMin" =>
"integer" 156 ,
"PeerDeadline" =>
"integer" 157 ,
"PeerFile" =>
"integer" 158 ,
"PeerPersonal" =>
"integer" 160 ,
"FeedbackFile" =>
"integer" 161 ,
"FeedbackCron" =>
"integer" 162 ,
"FeedbackDate" =>
"integer" 163 ,
"FeedbackDir" =>
"directory" 170 "ExerciseId" =>
"integer",
172 "Deadline" =>
"integer",
173 "Deadline2" =>
"integer",
174 "Instruction" =>
"text",
176 "Mandatory" =>
"integer",
177 "OrderNr" =>
"integer",
178 "TeamTutor" =>
"integer",
179 "MaxFile" =>
"integer",
183 ,
"PeerMin" =>
"integer" 184 ,
"PeerDeadline" =>
"integer" 185 ,
"PeerFile" =>
"integer" 186 ,
"PeerPersonal" =>
"integer" 187 ,
"PeerChar" =>
"integer" 188 ,
"PeerUnlock" =>
"integer" 189 ,
"PeerValid" =>
"integer" 190 ,
"PeerText" =>
"integer" 191 ,
"PeerRating" =>
"integer" 192 ,
"PeerCritCat" =>
"integer" 194 ,
"FeedbackFile" =>
"integer" 195 ,
"FeedbackCron" =>
"integer" 196 ,
"FeedbackDate" =>
"integer" 197 ,
"FeedbackDir" =>
"directory" 202 "ExerciseId" =>
"integer",
204 "Deadline" =>
"integer",
205 "Deadline2" =>
"integer",
206 "Instruction" =>
"text",
208 "Mandatory" =>
"integer",
209 "OrderNr" =>
"integer",
210 "TeamTutor" =>
"integer",
211 "MaxFile" =>
"integer",
212 "Dir" =>
"directory",
214 "WebDataDir" =>
"directory" 217 ,
"PeerMin" =>
"integer" 218 ,
"PeerDeadline" =>
"integer" 219 ,
"PeerFile" =>
"integer" 220 ,
"PeerPersonal" =>
"integer" 221 ,
"PeerChar" =>
"integer" 222 ,
"PeerUnlock" =>
"integer" 223 ,
"PeerValid" =>
"integer" 224 ,
"PeerText" =>
"integer" 225 ,
"PeerRating" =>
"integer" 226 ,
"PeerCritCat" =>
"integer" 228 ,
"FeedbackFile" =>
"integer" 229 ,
"FeedbackCron" =>
"integer" 230 ,
"FeedbackDate" =>
"integer" 231 ,
"FeedbackDir" =>
"directory" 232 ,
"FbDateCustom" =>
"integer" 233 ,
"DeadlineMode" =>
"integer" 234 ,
"RelativeDeadline" =>
"integer" 235 ,
"RelDeadlineLastSubm" =>
"integer" 240 "ExerciseId" =>
"integer",
242 "Deadline" =>
"integer",
243 "Deadline2" =>
"integer",
244 "Instruction" =>
"text",
246 "Mandatory" =>
"integer",
247 "OrderNr" =>
"integer",
248 "TeamTutor" =>
"integer",
249 "MaxFile" =>
"integer",
250 "InstructionCollection" =>
"rscollection",
252 "WebDataDir" =>
"directory" 255 ,
"PeerMin" =>
"integer" 256 ,
"PeerDeadline" =>
"integer" 257 ,
"PeerFile" =>
"integer" 258 ,
"PeerPersonal" =>
"integer" 259 ,
"PeerChar" =>
"integer" 260 ,
"PeerUnlock" =>
"integer" 261 ,
"PeerValid" =>
"integer" 262 ,
"PeerText" =>
"integer" 263 ,
"PeerRating" =>
"integer" 264 ,
"PeerCritCat" =>
"integer" 266 ,
"FeedbackFile" =>
"integer" 267 ,
"FeedbackCron" =>
"integer" 268 ,
"FeedbackDate" =>
"integer" 269 ,
"FeedbackDir" =>
"directory" 270 ,
"FbDateCustom" =>
"integer" 271 ,
"DeadlineMode" =>
"integer" 272 ,
"RelativeDeadline" =>
"integer" 273 ,
"RelDeadlineLastSubm" =>
"integer" 278 if ($a_entity ==
"exc_cit_cat") {
279 switch ($a_version) {
286 ,
"Parent" =>
"integer" 293 if ($a_entity ==
"exc_cit") {
294 switch ($a_version) {
301 ,
"Parent" =>
"integer" 306 ,
"Required" =>
"integer" 313 if ($a_entity ==
"exc_ass_file_order") {
314 switch ($a_version) {
319 ,
"AssignmentId" =>
"integer" 320 ,
"Filename" =>
"text" 321 ,
"OrderNr" =>
"integer" 326 if ($a_entity ==
"exc_ass_reminders") {
327 switch ($a_version) {
332 "AssignmentId" =>
"integer",
333 "ExerciseId" =>
"integer",
334 "Status" =>
"integer",
335 "Start" =>
"integer",
337 "Frequency" =>
"integer",
338 "LastSend" =>
"integer",
339 "TemplateId" =>
"integer" 346 public function readData(
string $a_entity,
string $a_version, array $a_ids): void
350 if (!is_array($a_ids)) {
351 $a_ids = array($a_ids);
354 if ($a_entity ==
"exc") {
355 switch ($a_version) {
358 " pass_mode, pass_nr, show_submissions" .
359 " FROM exc_data JOIN object_data ON (exc_data.obj_id = object_data.obj_id)" .
360 " WHERE " .
$ilDB->in(
"exc_data.obj_id", $a_ids,
false,
"integer"));
367 " pass_mode, pass_nr, show_submissions, compl_by_submission" .
368 " FROM exc_data JOIN object_data ON (exc_data.obj_id = object_data.obj_id)" .
369 " WHERE " .
$ilDB->in(
"exc_data.obj_id", $a_ids,
false,
"integer"));
376 " pass_mode, pass_nr, show_submissions, compl_by_submission, tfeedback,nr_mandatory_random" .
377 " FROM exc_data JOIN object_data ON (exc_data.obj_id = object_data.obj_id)" .
378 " WHERE " .
$ilDB->in(
"exc_data.obj_id", $a_ids,
false,
"integer"));
383 if ($a_entity ==
"exc_assignment") {
384 switch ($a_version) {
387 " instruction, title, start_time, mandatory, order_nr" .
388 " FROM exc_assignment" .
389 " WHERE " .
$ilDB->in(
"exc_id", $a_ids,
false,
"integer"));
394 " instruction, title, start_time, mandatory, order_nr, peer, peer_min, peer_dl peer_deadline," .
395 " fb_file feedback_file, fb_cron feedback_cron, fb_date feedback_date" .
396 " FROM exc_assignment" .
397 " WHERE " .
$ilDB->in(
"exc_id", $a_ids,
false,
"integer"));
402 " instruction, title, start_time, mandatory, order_nr, peer, peer_min, peer_dl peer_deadline," .
403 " peer_file, peer_prsl peer_personal, fb_file feedback_file, fb_cron feedback_cron, fb_date feedback_date" .
404 " FROM exc_assignment" .
405 " WHERE " .
$ilDB->in(
"exc_id", $a_ids,
false,
"integer"));
413 " instruction, title, start_time, mandatory, order_nr, team_tutor, max_file, peer, peer_min," .
414 " peer_dl peer_deadline, peer_file, peer_prsl peer_personal, peer_char, peer_unlock, peer_valid," .
415 " peer_text, peer_rating, peer_crit_cat, fb_file feedback_file, fb_cron feedback_cron, fb_date feedback_date," .
416 " fb_date_custom, rel_deadline_last_subm, deadline_mode, relative_deadline" .
417 " FROM exc_assignment" .
418 " WHERE " .
$ilDB->in(
"exc_id", $a_ids,
false,
"integer"));
423 if ($a_entity ==
"exc_crit_cat") {
424 switch ($a_version) {
430 " FROM exc_crit_cat" .
431 " WHERE " .
$ilDB->in(
"parent", $a_ids,
false,
"integer"));
436 if ($a_entity ==
"exc_crit") {
437 switch ($a_version) {
443 ", descr, pos, required, def" .
445 " WHERE " .
$ilDB->in(
"parent", $a_ids,
false,
"integer"));
446 foreach ($this->data as $k => $v) {
447 $this->data[$k][
"DefJson"] =
"";
448 if ($v[
"Def"] !=
"") {
449 $this->data[$k][
"DefJson"] = json_encode(unserialize($v[
"Def"], [
'allowed_classes' =>
false]));
456 if ($a_entity ==
"exc_ass_file_order") {
457 switch ($a_version) {
461 " FROM exc_ass_file_order" .
462 " WHERE " .
$ilDB->in(
"assignment_id", $a_ids,
false,
"integer"));
467 if ($a_entity ==
"exc_ass_reminders") {
468 switch ($a_version) {
471 $this->
getDirectDataFromQuery(
"SELECT type, ass_id, exc_id, status, start, end, freq, last_send, template_id" .
472 " FROM exc_ass_reminders" .
473 " WHERE " .
$ilDB->in(
"ass_id", $a_ids,
false,
"integer"));
482 public function getXmlRecord(
string $a_entity,
string $a_version, array $a_set): array
484 if ($a_entity ==
"exc_assignment") {
486 if ($a_set[
"StartTime"] !=
"") {
490 if ($a_set[
"Deadline"] !=
"") {
494 if ($a_set[
"Deadline2"] !=
"") {
499 $if = $this->ass_domain->instructionFiles((
int) $a_set[
"Id"]);
500 $a_set[
"InstructionCollection"] = $if->getCollectionIdString();
505 if ($a_entity ==
"exc_ass_reminders") {
506 if ($a_set[
"End"] !=
"") {
510 if ($a_set[
"LastSend"] !=
"") {
522 ?array $a_rec =
null,
527 switch ($a_version) {
532 "exc_assignment" => array(
"ids" => $a_rec[
"Id"] ??
null)
540 "exc_crit_cat" => array(
"ids" => $a_rec[
"Id"] ?? null),
541 "exc_assignment" => array(
"ids" => $a_rec[
"Id"] ?? null)
548 "exc_crit" => array(
"ids" => $a_rec[
"Id"] ??
null)
551 case "exc_assignment":
552 switch ($a_version) {
556 "exc_ass_file_order" => array(
"ids" => $a_rec[
"Id"] ?? null),
557 "exc_ass_reminders" => array(
"ids" => $a_rec[
"Id"] ?? null)
579 string $a_schema_version
581 $a_rec = $this->
stripTags($a_rec, [
"Instruction"]);
583 $a_rec[
"Instruction"] = $purifier->purify((
string) ($a_rec[
"Instruction"] ??
""));
587 if ($new_id = $a_mapping->
getMapping(
'components/ILIAS/Container',
'objs', $a_rec[
'Id'])) {
591 $newObj->setType(
"exc");
595 $newObj->setTitle($a_rec[
"Title"]);
596 $newObj->setDescription($a_rec[
"Description"]);
597 $newObj->setPassMode($a_rec[
"PassMode"]);
598 $newObj->setPassNr((
int) $a_rec[
"PassNr"]);
599 $newObj->setNrMandatoryRandom((
int) $a_rec[
"NrMandatoryRandom"]);
600 $newObj->setShowSubmissions((
bool) (
int) $a_rec[
"ShowSubmissions"]);
601 $newObj->setCompletionBySubmission((
bool) (
int) $a_rec[
"ComplBySubmission"]);
602 $newObj->setTutorFeedback((
int) $a_rec[
"Tfeedback"]);
605 $this->current_exc = $newObj;
607 $a_mapping->
addMapping(
"components/ILIAS/Exercise",
"exc", $a_rec[
"Id"], $newObj->getId());
608 $a_mapping->
addMapping(
'components/ILIAS/ILIASObject',
'objs', $a_rec[
'Id'], $newObj->getId());
609 $a_mapping->
addMapping(
'components/ILIAS/AdvancedMetaData',
'parent', $a_rec[
'Id'], $newObj->getId());
611 "components/ILIAS/MetaData",
613 $a_rec[
"Id"] .
":0:exc",
614 $newObj->getId() .
":0:exc" 618 case "exc_assignment":
619 $exc_id = $a_mapping->
getMapping(
"components/ILIAS/Exercise",
"exc", $a_rec[
"ExerciseId"]);
621 if (is_object($this->current_exc) && $this->current_exc->getId() == $exc_id) {
628 $ass->setExerciseId($exc_id);
630 if ($a_rec[
"StartTime"] !=
"") {
635 if ($a_rec[
"Deadline"] !=
"") {
640 $ass->setInstruction($a_rec[
"Instruction"] ??
"");
641 $ass->setTitle($a_rec[
"Title"] ??
"");
642 $ass->setMandatory((
bool) ($a_rec[
"Mandatory"] ??
false));
643 $ass->setOrderNr((
int) ($a_rec[
"OrderNr"] ?? 0));
646 $ass->setType((
int) ($a_rec[
"Type"] ?? 0));
649 $ass->setPeerReview((
bool) ($a_rec[
"Peer"] ??
false));
650 $ass->setPeerReviewMin((
int) ($a_rec[
"PeerMin"] ?? 0));
651 $ass->setPeerReviewDeadline((
int) $a_rec[
"PeerDeadline"]);
652 $ass->setFeedbackFile($a_rec[
"FeedbackFile"] ??
"");
653 $ass->setFeedbackCron((
bool) ($a_rec[
"FeedbackCron"] ??
false));
654 $ass->setFeedbackDate((
int) ($a_rec[
"FeedbackDate"] ?? 0));
657 $ass->setPeerReviewFileUpload((
bool) ($a_rec[
"PeerFile"] ??
false));
658 $ass->setPeerReviewPersonalized((
bool) ($a_rec[
"PeerPersonal"] ??
false));
661 if (($a_rec[
"Deadline2"] ??
"") !==
"") {
663 $ass->setExtendedDeadline($deadline->get(
IL_CAL_UNIX));
665 $ass->setMaxFile((
int) ($a_rec[
"MaxFile"] ?? 0));
666 $ass->setTeamTutor((
bool) ($a_rec[
"TeamTutor"] ??
false));
667 $ass->setPeerReviewChars((
int) ($a_rec[
"PeerChar"] ??
null));
668 $ass->setPeerReviewSimpleUnlock((
int) ($a_rec[
"PeerUnlock"] ?? 0));
669 $ass->setPeerReviewValid((
int) ($a_rec[
"PeerValid"] ?? 0));
670 $ass->setPeerReviewText((
bool) ($a_rec[
"PeerText"] ??
false));
671 $ass->setPeerReviewRating((
bool) ($a_rec[
"PeerRating"] ??
false));
674 $ass->setFeedbackDateCustom((
int) ($a_rec[
"FbDateCustom"] ?? 0));
675 $ass->setRelDeadlineLastSubmission((
int) ($a_rec[
"RelDeadlineLastSubm"] ?? 0));
676 $ass->setDeadlineMode((
int) ($a_rec[
"DeadlineMode"] ?? 0));
677 $ass->setRelativeDeadline((
int) ($a_rec[
"RelativeDeadline"] ?? 0));
680 if ($a_rec[
"PeerCritCat"]) {
681 $ass->setPeerReviewCriteriaCatalogue((
int) $a_mapping->
getMapping(
"components/ILIAS/Exercise",
"exc_crit_cat", $a_rec[
"PeerCritCat"]));
687 $dir = str_replace(
"..",
"", ($a_rec[
"InstructionCollection"] ??
""));
689 $if = $this->ass_domain->instructionFiles($ass->getId());
692 $dir = str_replace(
"..",
"", ($a_rec[
"Dir"] ??
""));
694 $if = $this->ass_domain->instructionFiles($ass->getId());
697 $dir = str_replace(
"..",
"", ($a_rec[
"WebDataDir"] ??
""));
699 $if = $this->ass_domain->instructionFiles($ass->getId());
707 $ar->setId($ass->getId());
708 $ar->setTemplateRefId(0);
709 $ar->setContainerRefId(0);
713 $a_mapping->
addMapping(
"components/ILIAS/Exercise",
"exc_assignment", $a_rec[
"Id"], $ass->getId());
719 $exc_id = $a_mapping->
getMapping(
"components/ILIAS/Exercise",
"exc", $a_rec[
"Parent"]);
722 $crit_cat->setParent($exc_id);
723 $crit_cat->setTitle($a_rec[
"Title"]);
724 $crit_cat->setPosition($a_rec[
"Pos"]);
727 $a_mapping->
addMapping(
"components/ILIAS/Exercise",
"exc_crit_cat", $a_rec[
"Id"], $crit_cat->getId());
732 $crit_cat_id = $a_mapping->
getMapping(
"components/ILIAS/Exercise",
"exc_crit_cat", $a_rec[
"Parent"]);
733 if ($crit_cat_id > 0) {
735 $crit->setParent($crit_cat_id);
736 $crit->setTitle($a_rec[
"Title"]);
737 $crit->setDescription($a_rec[
"Descr"]);
738 $crit->setPosition($a_rec[
"Pos"]);
739 $crit->setRequired($a_rec[
"Required"]);
740 $crit->importDefinition($a_rec[
"Def"], $a_rec[
"DefJson"]);
745 case "exc_ass_file_order":
747 $ass_id = $a_mapping->
getMapping(
"components/ILIAS/Exercise",
"exc_assignment", $a_rec[
"AssignmentId"]);
753 case "exc_ass_reminders":
755 $new_ass_id = $a_mapping->
getMapping(
"components/ILIAS/Exercise",
"exc_assignment", $a_rec[
"AssId"]);
756 $new_exc_id = $a_mapping->
getMapping(
'components/ILIAS/Exercise',
'exc', $a_rec[
'ExcId']);
760 $rmd->setReminderStatus($a_rec[
"Status"]);
761 $rmd->setReminderStart((
int) ($a_rec[
"Start"] ?? 0));
762 $rmd->setReminderEnd((
int) $end->get(
IL_CAL_UNIX));
763 $rmd->setReminderFrequency((
int) ($a_rec[
"Freq"] ?? 0));
764 $rmd->setReminderLastSend((
int) ($a_rec[
"LastSend"] ?? 0));
765 $rmd->setReminderMailTemplate((
int) ($a_rec[
"TemplateId"] ?? 0));
777 if ($entity ===
"exc_assignment" && $field ===
"InstructionCollection") {
778 return $this->ass_domain->instructionFiles((
int) $record[
"Id"])->getCollection();
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getXmlRecord(string $a_entity, string $a_version, array $a_set)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Assignments domain service.
Class ResourceCollection.
static getInstanceByType(string $a_type)
addMapping(string $a_comp, string $a_entity, string $a_old_id, string $a_new_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
importRecord(string $a_entity, array $a_types, array $a_rec, ilImportMapping $a_mapping, string $a_schema_version)
getMapping(string $a_comp, string $a_entity, string $a_old_id)
ilObjExercise $current_exc
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getTypes(string $a_entity, string $a_version)
getXmlNamespace(string $a_entity, string $a_schema_version)
static instructionFileInsertOrder(string $a_filename, int $a_ass_id, int $a_order_nr=0)
getDirectDataFromQuery(string $a_query, bool $a_convert_to_leading_upper=true, bool $a_set=true)
Get data from query.This is a standard procedure, all db field names are directly mapped to abstract ...
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
__construct(Container $dic, ilPlugin $plugin)
readData(string $a_entity, string $a_version, array $a_ids)
stripTags(array $rec, array $omit_keys=[])
DomainService $ass_domain
getDependencies(string $a_entity, string $a_version, ?array $a_rec=null, ?array $a_ids=null)
getCollection(array $record, string $entity, string $schema_version, string $field, string $value)