Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
51d8d86
chore(foundation): introduce export/import foundation components
lukas-heinrich Apr 9, 2026
89ad746
feat(qpl): implement normalizing/denormalizing in question pool compo…
lukas-heinrich Apr 9, 2026
4e30463
feat(qpl): implement question pool export and integrate core export c…
lukas-heinrich Apr 9, 2026
0ccbf26
feat(qpl): implement question pool import and integrate user interfac…
lukas-heinrich Apr 9, 2026
5ddeec3
fix(qpl): support copage import
lukas-heinrich Apr 9, 2026
45ac6dd
fix(qpl): formula unit and categories import
lukas-heinrich Apr 10, 2026
ca25453
feat(qpl): introduce question image file import
lukas-heinrich Apr 13, 2026
1e66d59
feat(qpl): introduce import cleanup stage
lukas-heinrich Apr 13, 2026
2972243
refactor(qpl): remove questions import in question pool
lukas-heinrich Apr 13, 2026
3293938
fix(foundation): rename export context parameter
lukas-heinrich Apr 14, 2026
f2b39f8
fix(qpl): support legacy question pool import
lukas-heinrich Apr 15, 2026
4fcc09c
refactor(foundation,qpl): introduce export bridge to enhance dependen…
lukas-heinrich Apr 16, 2026
1c5ec51
refactor(qpl): introduce trait to share question collection logic
lukas-heinrich Apr 17, 2026
0d93afc
fix(test): missing parameter in Repository::getTestAttemptResult
lukas-heinrich Apr 20, 2026
699b831
feat(test): introduce normalizing into test component
lukas-heinrich Apr 21, 2026
4ea8341
feat(test): introduce test export classes and integrate into existing…
lukas-heinrich Apr 21, 2026
bd68b8b
feat(test): introduce skill threshold export
lukas-heinrich Apr 22, 2026
9f68a8f
fix(test): missing redirection leads to duplicate export
lukas-heinrich Apr 22, 2026
86035f9
fix(test): incorrect resources export
lukas-heinrich Apr 22, 2026
91305a3
fix(test): include question set config in export
lukas-heinrich Apr 22, 2026
af814b3
refactor: remove request dependency in import stages
lukas-heinrich Apr 23, 2026
d2c57a8
refactor(qpl): create question importer class
lukas-heinrich Apr 24, 2026
30753b6
refactor(qpl): replace string constants with defined constants in imp…
lukas-heinrich Apr 27, 2026
4f8d92a
fix(test): normalizing bugs and test mapping
lukas-heinrich Apr 28, 2026
a4a75a9
feat(test): introduce user import resolving
lukas-heinrich Apr 28, 2026
c326bfc
fix(test): add export for missing test result dependencies
lukas-heinrich Apr 29, 2026
5a50c38
fix(qpl): generate thumbnails for question images
lukas-heinrich Apr 29, 2026
b76c85d
fix(filesystem): preserve uri and mode in ReattachableStream across d…
lukas-heinrich Apr 29, 2026
15a40f9
feat(test): implement test importer class and integrate into xml impo…
lukas-heinrich Apr 29, 2026
5a31937
feat(test): add missing participant relations export/import
lukas-heinrich Apr 29, 2026
f8215cc
refactor(qpl): introduce export/import logging
lukas-heinrich Apr 29, 2026
de07ef6
fix(foundation): improve legacy normalizer resolving
lukas-heinrich Apr 30, 2026
4e4a611
refactor(foundation): introduce XMLFileDeserializer
lukas-heinrich May 4, 2026
60d8b44
feat(test): implement skill level thresholds import
lukas-heinrich May 4, 2026
080a2fd
feat(test): introduce random question set config import
lukas-heinrich May 4, 2026
533fb27
fix(qpl): remove todo annotations in normalizing steps
lukas-heinrich May 7, 2026
a6ee6f3
refactor(test): improve random test import and split importer class
lukas-heinrich May 7, 2026
9e02d00
fix(test): support random test question reference export/import
lukas-heinrich May 7, 2026
b698a7b
feat(test): support legacy test import and handle redirect after impo…
lukas-heinrich May 8, 2026
e64040c
refactor(test/qpl): integrate logging into import/export processes fo…
lukas-heinrich May 13, 2026
e589bc3
style: fix coding style
lukas-heinrich May 13, 2026
30217dc
refactor: remove legacy test classes
lukas-heinrich May 13, 2026
73616ef
fix: remove imported object placeholder after testing
lukas-heinrich Jun 19, 2026
23ef550
fix: redirect after question pool import
lukas-heinrich Jun 19, 2026
fdb411d
fix: null cast exception
lukas-heinrich Jul 1, 2026
1687e7f
fix: content cast exception in ordering element export
lukas-heinrich Jul 1, 2026
b80372a
refactor: cleanup test classes
lukas-heinrich Jul 31, 2026
21f6fb6
refactor: improve code structure after internal review
lukas-heinrich Aug 20, 2026
f1532ef
refactor: improve architecture and small code smells after internal r…
lukas-heinrich Aug 24, 2026
1ffbb7e
refactor: add legacy test export deprecations
lukas-heinrich Aug 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ protected function init(): void
throw new ilExportException('Export class file "' . $export_class_file . '" not found.');
}
}
$this->sv = $this->getMinimalComponentExporter()->determineSchemaVersion($component, $this->getTarget()->getTargetRelease());
$this->sv = $this->getMinimalComponentExporter()->determineSchemaVersion($this->getTarget()->getType(), $this->getTarget()->getTargetRelease());
$this->sv["uses_dataset"] ??= false;
$this->sv['xsd_file'] ??= '';
}
Expand Down
18 changes: 13 additions & 5 deletions components/ILIAS/Filesystem/src/Stream/ReattachableStream.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,23 @@
*/
class ReattachableStream extends Stream
{
/**
* Checks if the stream is attached to the wrapper.
* If not, the stream is reattached.
*/
private ?string $reattach_uri = null;
private ?string $reattach_mode = null;

#[\Override]
public function detach()
{
$this->reattach_uri = $this->uri;
$this->reattach_mode = $this->_mode;

return parent::detach();
}

#[\Override]
protected function assertStreamAttached(): void
{
if ($this->stream === null) {
$this->stream = fopen($this->uri, $this->_mode);
$this->stream = fopen($this->reattach_uri, $this->reattach_mode);
}
}
}
33 changes: 1 addition & 32 deletions components/ILIAS/Test/classes/class.ilObjTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -407,36 +407,6 @@ public function getExportFiles(string $dir = ''): array
return $files;
}

/**
* creates data directory for import files
* (data_dir/tst_data/tst_<id>/import, depending on data
* directory that is set in ILIAS setup/ini)
*/
public static function _createImportDirectory(): string
{
global $DIC;
$ilias = $DIC['ilias'];
$tst_data_dir = ilFileUtils::getDataDir() . "/tst_data";
ilFileUtils::makeDir($tst_data_dir);

if (!is_writable($tst_data_dir)) {
$ilias->raiseError("Test Data Directory (" . $tst_data_dir
. ") not writeable.", $ilias->error_obj->FATAL);
}

// create test directory (data_dir/tst_data/tst_import)
$tst_dir = $tst_data_dir . "/tst_import";
ilFileUtils::makeDir($tst_dir);
if (!@is_dir($tst_dir)) {
$ilias->raiseError("Creation of test import directory failed.", $ilias->error_obj->FATAL);
}

// assert that this is empty and does not contain old data
ilFileUtils::delDir($tst_dir, true);

return $tst_dir;
}

final public function isComplete(ilTestQuestionSetConfig $test_question_set_config): bool
{
if ($this->getMarkSchema() === null
Expand Down Expand Up @@ -2798,8 +2768,7 @@ public function getAvailableQuestions($arr_filter, $completeonly = 0): array
}

/**
* Receives parameters from a QTI parser and creates a valid ILIAS test object
* @param ilQTIAssessment $assessment
* @deprecated 12: Use ILIAS\Test\ExportImport\TestImporter instead
*/
public function fromXML(ilQTIAssessment $assessment, array $mappings): void
{
Expand Down
Loading
Loading