19 declare(strict_types=1);
45 class Handler implements ilExportHandlerManagerInterface
54 ilExportHandlerFactoryInterface $export_handler,
58 ilExportHandlerDataFactoryWrapperInterface $data_factory_wrapper
70 $obj_id = $export_object->
getId();
71 $type = $export_object->
getType();
72 $class = ilImportExportFactory::getExporterClass($type);
73 $comp = ilImportExportFactory::getComponentForExport($type);
75 $target_release = $v[0] .
"." . $v[1] .
".0";
76 return $this->export_handler->target()->handler()
77 ->withTargetRelease($target_release)
79 ->withObjectIds([$obj_id])
80 ->withClassname($class)
81 ->withComponent($comp);
86 ): ilExportHandlerTargetInterface {
87 $obj_id = $object_id->
toInt();
89 $class = ilImportExportFactory::getExporterClass($type);
90 $comp = ilImportExportFactory::getComponentForExport($type);
92 $target_release = $v[0] .
"." . $v[1] .
".0";
93 return $this->export_handler->target()->handler()
94 ->withTargetRelease($target_release)
96 ->withObjectIds([$obj_id])
97 ->withClassname($class)
98 ->withComponent($comp);
102 string $path_in_container,
103 ilExportHandlerExportInfo $export_info,
104 ilExportHandlerRepositoryElementInterface $element
106 $export_info = $export_info->withCurrentElement($element);
107 $manifest = $this->export_handler->part()->manifest()->handler()
108 ->withInfo($export_info);
109 $element->getIRSS()->write(
111 $path_in_container . DIRECTORY_SEPARATOR . $export_info->getExportFolderName() . DIRECTORY_SEPARATOR .
"manifest.xml" 113 foreach ($export_info->getComponentInfos() as $component_info) {
114 $component = $this->export_handler->part()->component()->handler()
115 ->withExportInfo($export_info)
116 ->withComponentInfo($component_info);
117 $element->getIRSS()->write(
119 $path_in_container . DIRECTORY_SEPARATOR . $component_info->getExportFilePathInContainer()
126 ilExportHandlerContainerExportInfoInterface $container_export_info
127 ): ilExportHandlerRepositoryElementInterface {
128 $main_export_info = $container_export_info->getMainEntityExportInfo();
129 $main_element = $this->
createExport($user_id, $main_export_info,
"set_" . $main_export_info->getSetNumber());
130 $repository = $this->export_handler->repository();
131 foreach ($container_export_info->getExportInfos() as $export_info) {
133 $keys = $repository->key()->collection()
134 ->withElement($repository->key()->handler()->withObjectId($export_info->getTargetObjectId()));
135 $element = $export_info->getReuseExport()
136 ? $this->export_handler->repository()->handler()->getElements($keys)->newest()
138 $element = $element->getIRSS()->isContainerExport()
141 $stream = $element->getIRSSInfo()->getStream();
143 $zip_structure = $zip_reader->getStructure();
144 foreach ($zip_structure as $path_inside_zip => $item) {
145 if ($item[
'is_dir']) {
151 $stream = $zip_reader->getItem($path_inside_zip, $zip_structure)[0];
152 # Contents of the stream $stream are lost later (possible incompatible stream object), therefore a new 153 # stream with the content of $stream is created and passed on. 154 $main_element->getIRSS()->write(
156 "set_" . $export_info->getSetNumber() . DIRECTORY_SEPARATOR . $path_inside_zip
160 $container = $this->export_handler->part()->container()->handler()
161 ->withExportInfos($container_export_info->getExportInfos()->withElementAtHead($main_export_info))
162 ->withMainEntityExportInfo($main_export_info);
163 $main_element->getIRSS()->write(
167 return $main_element;
172 ilExportHandlerExportInfoInterface $export_info,
173 string $path_in_container
174 ): ilExportHandlerRepositoryElementInterface {
175 # make legacy export run dir 176 # tmp solution, remove later if no longer needed 179 $stakeholder = $this->export_handler->repository()->stakeholder()->handler()->withOwnerId($user_id);
180 $object_id = $this->data_factory_wrapper->objId($export_info->getTarget()->getObjectIds()[0]);
181 $element = $this->export_handler->repository()->handler()->createElement(
186 $this->
writeToElement($path_in_container, $export_info, $element);
188 # write files from legacy export run dir to irss 189 # tmp solution, remove later if no longer needed 190 $writer = $this->export_handler->consumer()->handler()->exportWriter($element);
191 $writer->writeDirectoryRecursive(
192 $export_info->getLegacyExportRunDir(),
193 $export_info->getExportFolderName()
196 # delete legacy export run dir 197 # tmp solution, remove if no longer needed 205 ): ilExportHandlerExportInfoInterface {
206 return $this->export_handler->info()->export()->handler()
213 ): ilExportHandlerExportInfoInterface {
214 return $this->export_handler->info()->export()->handler()
220 ilExportHandlerContainerExportInfoObjectIdCollectionInterface $object_ids
221 ): ilExportHandlerContainerExportInfoInterface {
222 return $this->export_handler->info()->export()->container()->handler()
223 ->withMainExportEntity($main_entity_object_id)
224 ->withObjectIds($object_ids)
225 ->withTimestamp(time());
230 return $this->export_handler->info()->export()->container()->objectId()->collectionBuilder();
235 bool $public_access =
false 236 ): ilExportHandlerContainerExportInfoObjectIdCollectionBuilderInterface {
237 $id_collection_builder = $this->export_handler->info()->export()->container()->objectId()->collectionBuilder();
238 $tree_nodes = $this->tree->getSubTree($this->tree->getNodeData($container_reference_id->
toInt()));
239 foreach ($tree_nodes as $node) {
241 $node[
'type'] ==
'rolf' or
242 !$this->obj_definition->allowExport($node[
'type']) or
244 !$this->
access->checkAccess(
'write',
'', (
int) $node[
'ref_id'])
248 $reference_id =
new ReferenceId((
int) $node[
'ref_id']);
249 $object_id = $reference_id->toObjectId();
250 $keys = $this->export_handler->repository()->key()->collection()->withElement(
251 $this->export_handler->repository()->key()->handler()->withObjectId($object_id)
253 $elements = $this->export_handler->repository()->handler()->getElements($keys);
254 $create_new_export = (
255 ($public_access and !$this->export_handler->publicAccess()->handler()->hasPublicAccessFile($object_id)) or
256 !$public_access and $elements->count() == 0
258 $id_collection_builder = $id_collection_builder->addObjectId($object_id, $create_new_export);
260 return $id_collection_builder;
getExportInfo(ObjectId $object_id, int $time_stamp)
getExportTargetWithObject(ilObject $export_object)
writeToElement(string $path_in_container, ilExportHandlerExportInfo $export_info, ilExportHandlerRepositoryElementInterface $element)
static _isFileHidden(string $a_file_name)
Returns true, if a file with the specified name, is usually hidden from the user. ...
static makeDirParents(string $a_dir)
Create a new directory and all parent directories.
createContainerExport(int $user_id, ilExportHandlerContainerExportInfoInterface $container_export_info)
getContainerExportInfo(ObjectId $main_entity_object_id, ilExportHandlerContainerExportInfoObjectIdCollectionInterface $object_ids)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
const ILIAS_VERSION_NUMERIC
__construct(ilExportHandlerFactoryInterface $export_handler, ilObjectDefinition $obj_definition, ilTree $tree, ilAccessHandler $access, ilExportHandlerDataFactoryWrapperInterface $data_factory_wrapper)
ilExportHandlerFactoryInterface $export_handler
static delDir(string $a_dir, bool $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
ilObjectDefinition $obj_definition
static ofString(string $string)
Creates a new stream with an initial value.
getObjectIdCollectioBuilder()
ilExportHandlerDataFactoryWrapperInterface $data_factory_wrapper
getExportTarget(ObjectId $object_id)
createExport(int $user_id, ilExportHandlerExportInfoInterface $export_info, string $path_in_container)
static _lookupType(int $id, bool $reference=false)
getObjectIdCollectionBuilderFrom(ReferenceId $container_reference_id, bool $public_access=false)
getExportInfoWithObject(ilObject $export_object, int $time_stamp)