Skip to content

Commit 0aa961c

Browse files
matheuszychthojou
authored andcommitted
Implements partial fault handling when exporting test media objects by skipping missing resources
1 parent b191e0b commit 0aa961c

1 file changed

Lines changed: 13 additions & 0 deletions

File tree

components/ILIAS/Test/classes/class.ilObjTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818

1919
declare(strict_types=1);
2020

21+
use ILIAS\MediaObjects\MediaObjectRepository;
22+
use ILIAS\ResourceStorage\Identification\ResourceIdentification;
23+
use ILIAS\ResourceStorage\Services as ResourceStorage;
2124
use ILIAS\Test\Participants\ParticipantRepository;
2225
use ILIAS\Test\Results\Data\Repository;
2326
use ILIAS\Test\TestDIC;
@@ -145,6 +148,8 @@ class ilObjTest extends ilObject
145148
protected Repository $test_result_repository;
146149

147150
protected LOMetadata $lo_metadata;
151+
protected MediaObjectRepository $media_object_repository;
152+
protected ResourceStorage $irss;
148153

149154
/**
150155
* Constructor
@@ -166,6 +171,8 @@ public function __construct(int $id = 0, bool $a_call_by_reference = true)
166171
$this->component_factory = $DIC['component.factory'];
167172
$this->filesystem_web = $DIC->filesystem()->web();
168173
$this->lo_metadata = $DIC->learningObjectMetadata();
174+
$this->media_object_repository = $DIC->mediaObjects()->internal()->repo()->mediaObject();
175+
$this->irss = $DIC->resourceStorage();
169176

170177
$local_dic = $this->getLocalDIC();
171178
$this->participant_access_filter = $local_dic['participant.access_filter.factory'];
@@ -3732,7 +3739,13 @@ public function exportXMLMediaObjects(&$a_xml_writer, $a_inst, $a_target_dir, &$
37323739
ilFileUtils::createDirectory($target_dir);
37333740
$media_obj = new ilObjMediaObject((int) $mob_id);
37343741
$media_obj->exportXML($a_xml_writer, (int) $a_inst);
3742+
/** @var ilMediaItem $item */
37353743
foreach ($media_obj->getMediaItems() as $item) {
3744+
$rid = $this->media_object_repository->getById($item->getMobId())['rid'] ?? null;
3745+
if (!is_string($rid) || !$this->irss->manage()->find($rid) instanceof ResourceIdentification) {
3746+
$expLog->write(date('[y-m-d H:i:s] ') . "The resource for Media Object {$item->getMobId()} does not exist (skipping)");
3747+
continue;
3748+
}
37363749
$stream = $item->getLocationStream();
37373750
file_put_contents($target_dir . DIRECTORY_SEPARATOR . $item->getLocation(), $stream);
37383751
$stream->close();

0 commit comments

Comments
 (0)