19 declare(strict_types=1);
53 array $copyright_ids = [],
54 int $harvesting_target_ref_id = 0,
55 int $exposed_source_ref_id = 0
60 $harvesting_target_ref_id,
61 $exposed_source_ref_id
64 protected array $types,
65 protected array $copyright_ids,
66 protected int $harvesting_target_ref_id,
67 protected int $exposed_source_ref_id
71 public function getObjectTypesSelectedForHarvesting(): array
76 public function getCopyrightEntryIDsSelectedForHarvesting(): array
78 return $this->copyright_ids;
81 public function getContainerRefIDForHarvesting():
int 83 return $this->harvesting_target_ref_id;
86 public function getContainerRefIDForExposing():
int 88 return $this->exposed_source_ref_id;
98 array $deleted_obj_ids = [],
99 int $valid_source_container = 0,
100 array $obj_ids_referenced_in_container = [],
101 ?
int $throw_error_on_deletion_ref_id =
null,
102 ?
int $throw_error_on_ref_creation_obj_id =
null 106 $valid_source_container,
107 $obj_ids_referenced_in_container,
108 $throw_error_on_deletion_ref_id,
109 $throw_error_on_ref_creation_obj_id
110 ) extends NullObjectHandler {
111 public array $exposed_ref_creations = [];
112 public array $exposed_ref_deletions = [];
115 protected array $deleted_obj_ids,
116 protected int $valid_target_container,
117 protected array $obj_ids_referenced_in_container,
118 protected ?
int $throw_error_on_deletion_ref_id =
null,
119 protected ?
int $throw_error_on_ref_creation_obj_id =
null 123 public function referenceObjectInTargetContainer(
int $obj_id,
int $container_ref_id):
int 125 if ($obj_id === $this->throw_error_on_ref_creation_obj_id) {
126 throw new \ilMDOERHarvesterException(
'error');
128 $new_ref_id = (
int) ($container_ref_id . $obj_id);
129 $this->exposed_ref_creations[] = [
131 'container_ref_id' => $container_ref_id,
132 'new_ref_id' => $new_ref_id
137 public function getObjectReferenceIDInContainer(
int $obj_id,
int $container_ref_id): ?
int 139 if (in_array($obj_id, $this->obj_ids_referenced_in_container)) {
140 return (
int) ($container_ref_id . $obj_id);
145 public function isObjectDeleted(
int $obj_id):
bool 147 return in_array($obj_id, $this->deleted_obj_ids);
150 public function deleteReference(
int $ref_id):
void 152 if ($ref_id === $this->throw_error_on_deletion_ref_id) {
153 throw new \ilMDOERHarvesterException(
'error');
155 $this->exposed_ref_deletions[] =
$ref_id;
158 public function getTypeOfReferencedObject(
int $ref_id):
string 166 ?
int $throw_exception_for_id =
null,
167 int ...$already_have_export_obj_ids
169 return new class ($throw_exception_for_id, $already_have_export_obj_ids) extends NullExportHandler {
170 public array $exposed_created_exports_obj_ids = [];
173 protected ?
int $throw_exception_for_id,
174 protected array $already_have_export_obj_ids
178 public function hasPublicAccessExport(
int $obj_id):
bool 180 if ($this->throw_exception_for_id === $obj_id) {
181 throw new \Exception(
'error');
183 return in_array($obj_id, $this->already_have_export_obj_ids);
186 public function createPublicAccessExport(
int $obj_id):
void 188 if ($this->throw_exception_for_id === $obj_id) {
189 throw new \Exception(
'error');
191 $this->exposed_created_exports_obj_ids[] = $obj_id;
200 array $currently_harvested = [],
201 array $blocked_obj_ids = [],
202 bool $throw_error =
false 203 ): StatusRepository {
204 return new class ($currently_harvested, $blocked_obj_ids, $throw_error) extends NullStatusRepository {
205 public array $exposed_deletions = [];
206 public array $exposed_creations = [];
209 protected array $currently_harvested,
210 protected array $blocked_obj_ids,
211 protected bool $throw_error
215 public function getAllHarvestedObjIDs(): \Generator
217 if ($this->throw_error ===
true) {
218 throw new \ilMDOERHarvesterException(
'error');
220 yield
from array_keys($this->currently_harvested);
223 public function filterOutBlockedObjects(
int ...$obj_ids): \Generator
225 foreach ($obj_ids as $obj_id) {
226 if (!in_array($obj_id, $this->blocked_obj_ids)) {
232 public function getHarvestRefID(
int $obj_id):
int 234 return $this->currently_harvested[$obj_id];
237 public function deleteHarvestRefID(
int $obj_id):
void 239 $this->exposed_deletions[] = $obj_id;
242 public function setHarvestRefID(
int $obj_id,
int $harvested_ref_id):
void 244 $this->exposed_creations[] = [
246 'href_id' => $harvested_ref_id
258 public array $exposed_deletions = [];
259 public array $exposed_updates = [];
260 public array $exposed_creations = [];
262 public function __construct(
protected array $returned_records)
266 public function getRecords(
272 foreach ($this->returned_records as $obj_id => $metadata) {
273 yield
new class ($obj_id, $metadata) extends
NullRecord {
275 protected int $obj_id,
276 protected string $metadata
287 public function objID():
int 289 return $this->obj_id;
294 public function metadata(): \DOMDocument
296 $xml = new \DOMDocument();
297 $xml->loadXML($this->metadata);
304 public function deleteRecord(
int $obj_id):
void 306 $this->exposed_deletions[] = [
'obj_id' => $obj_id];
309 public function updateRecord(
int $obj_id, \
DOMDocument $metadata):
void 311 $this->exposed_updates[] = [
313 'metadata' => $metadata->saveXML()
317 public function createRecord(
int $obj_id,
string $identifier, \
DOMDocument $metadata):
void 319 $this->exposed_creations[] = [
321 'identifier' => $identifier,
322 'metadata' => $metadata->saveXML()
330 return new class ($search_result_obj_ids) extends
NullFactory {
331 public array $exposed_search_params;
333 public function __construct(
public array $search_result_obj_ids)
340 protected array $types = [];
341 protected bool $restricted_to_repository =
false;
347 public function withRestrictionToRepositoryObjects(
bool $restricted):
SearcherInterface 349 $clone = clone $this;
350 $clone->restricted_to_repository = $restricted;
356 $clone = clone $this;
357 $clone->types[] = $type;
364 int ...$further_entry_ids
366 $this->
factory->exposed_search_params[] = [
367 'restricted' => $this->restricted_to_repository,
368 'types' => $this->types,
369 'entries' => [$first_entry_id, ...$further_entry_ids]
371 foreach ($this->
factory->search_result_obj_ids as $obj_id) {
377 public function objID():
int 379 return $this->obj_id;
392 protected function getXMLWriter(array $returned_md = []): SimpleDCXMLWriter
394 return new class ($returned_md) extends
NullWriter {
395 public array $exposed_params = [];
397 public function __construct(
protected array $returned_md)
401 public function writeSimpleDCMetaData(
int $obj_id,
int $ref_id,
string $type): \DOMDocument
403 $this->exposed_params[] = [
409 $xml = new \DOMDocument();
410 $xml->loadXML($this->returned_md[$obj_id]);
418 return $this->createMock(\ilLogger::class);
424 public int $exposed_status;
425 public string $exposed_message;
429 $clone = clone $this;
436 $clone = clone $this;
437 $clone->exposed_status = $status;
446 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
459 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
461 'Deleted 1 deprecated references.<br>' .
462 'Created 0 new references.<br>' .
463 'Created, updated, or deleted 0 exposed records.',
464 $result->exposed_message
467 [[
'restricted' =>
true,
'types' => [
'type',
'second type'],
'entries' => [12, 5]]],
468 $search_factory->exposed_search_params
470 $this->assertSame([32], $status_repo->exposed_deletions);
471 $this->assertSame([12332], $object_handler->exposed_ref_deletions);
477 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
490 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
492 'Deleted 1 deprecated references.<br>' .
493 'Created 0 new references.<br>' .
494 'Created, updated, or deleted 0 exposed records.',
495 $result->exposed_message
497 $this->assertSame([32], $status_repo->exposed_deletions);
498 $this->assertSame([12332], $object_handler->exposed_ref_deletions);
504 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
517 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
519 'Deleted 1 deprecated references.<br>' .
520 'Created 0 new references.<br>' .
521 'Created, updated, or deleted 0 exposed records.',
522 $result->exposed_message
524 $this->assertSame([32], $status_repo->exposed_deletions);
525 $this->assertSame([12332], $object_handler->exposed_ref_deletions);
531 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
544 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
546 'Deleted 2 deprecated references.<br>' .
547 'Created 0 new references.<br>' .
548 'Created, updated, or deleted 0 exposed records.',
549 $result->exposed_message
551 $this->assertSame([32, 67], $status_repo->exposed_deletions);
552 $this->assertSame([12332, 12367], $object_handler->exposed_ref_deletions);
558 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
571 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
573 'Deleted 0 deprecated references.<br>' .
574 'Created 1 new references.<br>' .
575 'Created, updated, or deleted 0 exposed records.',
576 $result->exposed_message
580 'restricted' =>
true,
581 'types' => [
'type',
'second type'],
584 $search_factory->exposed_search_params
587 [[
'obj_id' => 45,
'href_id' => 12345]],
588 $status_repo->exposed_creations
591 [[
'obj_id' => 45,
'container_ref_id' => 123,
'new_ref_id' => 12345]],
592 $object_handler->exposed_ref_creations
594 $this->assertSame([45], $export_handler->exposed_created_exports_obj_ids);
600 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
613 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_NO_ACTION, $result->exposed_status);
615 'Deleted 0 deprecated references.<br>' .
616 'Created 0 new references.<br>' .
617 'Created, updated, or deleted 0 exposed records.',
618 $result->exposed_message
620 $this->assertEmpty($status_repo->exposed_creations);
621 $this->assertEmpty($object_handler->exposed_ref_creations);
622 $this->assertEmpty($export_handler->exposed_created_exports_obj_ids);
628 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
641 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_NO_ACTION, $result->exposed_status);
643 'Deleted 0 deprecated references.<br>' .
644 'Created 0 new references.<br>' .
645 'Created, updated, or deleted 0 exposed records.',
646 $result->exposed_message
648 $this->assertEmpty($status_repo->exposed_creations);
649 $this->assertEmpty($object_handler->exposed_ref_creations);
650 $this->assertEmpty($export_handler->exposed_created_exports_obj_ids);
656 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
669 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_NO_ACTION, $result->exposed_status);
671 'Deleted 0 deprecated references.<br>' .
672 'Created 0 new references.<br>' .
673 'Created, updated, or deleted 0 exposed records.',
674 $result->exposed_message
676 $this->assertEmpty($status_repo->exposed_creations);
677 $this->assertEmpty($object_handler->exposed_ref_creations);
678 $this->assertEmpty($export_handler->exposed_created_exports_obj_ids);
684 $this->
getSettings([
'type',
'second type'], [12, 5], 0, 456),
697 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_NO_ACTION, $result->exposed_status);
699 'Deleted 0 deprecated references.<br>' .
700 'Created 0 new references.<br>' .
701 'Created, updated, or deleted 0 exposed records.',
702 $result->exposed_message
704 $this->assertEmpty($status_repo->exposed_creations);
705 $this->assertEmpty($object_handler->exposed_ref_creations);
706 $this->assertEmpty($export_handler->exposed_created_exports_obj_ids);
712 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
725 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
727 'Deleted 0 deprecated references.<br>' .
728 'Created 2 new references.<br>' .
729 'Created, updated, or deleted 0 exposed records.',
730 $result->exposed_message
734 [
'obj_id' => 32,
'href_id' => 12332],
735 [
'obj_id' => 67,
'href_id' => 12367]
737 $status_repo->exposed_creations
741 [
'obj_id' => 32,
'container_ref_id' => 123,
'new_ref_id' => 12332],
742 [
'obj_id' => 67,
'container_ref_id' => 123,
'new_ref_id' => 12367]
744 $object_handler->exposed_ref_creations
746 $this->assertSame([32, 67], $export_handler->exposed_created_exports_obj_ids);
752 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
765 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
767 'Deleted 0 deprecated references.<br>' .
768 'Created 1 new references.<br>' .
769 'Created, updated, or deleted 0 exposed records.',
770 $result->exposed_message
774 'restricted' =>
true,
775 'types' => [
'type',
'second type'],
778 $search_factory->exposed_search_params
781 [[
'obj_id' => 45,
'href_id' => 12345]],
782 $status_repo->exposed_creations
785 [[
'obj_id' => 45,
'container_ref_id' => 123,
'new_ref_id' => 12345]],
786 $object_handler->exposed_ref_creations
788 $this->assertEmpty($export_handler->exposed_created_exports_obj_ids);
794 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
807 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
809 'Deleted 0 deprecated references.<br>' .
810 'Created 3 new references.<br>' .
811 'Created, updated, or deleted 0 exposed records.',
812 $result->exposed_message
816 [
'obj_id' => 32,
'href_id' => 12332],
817 [
'obj_id' => 45,
'href_id' => 12345],
818 [
'obj_id' => 67,
'href_id' => 12367]
820 $status_repo->exposed_creations
824 [
'obj_id' => 32,
'container_ref_id' => 123,
'new_ref_id' => 12332],
825 [
'obj_id' => 45,
'container_ref_id' => 123,
'new_ref_id' => 12345],
826 [
'obj_id' => 67,
'container_ref_id' => 123,
'new_ref_id' => 12367]
828 $object_handler->exposed_ref_creations
830 $this->assertSame([32, 67], $export_handler->exposed_created_exports_obj_ids);
836 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
843 $this->
getXMLWriter([32 =>
'<el>32</el>', 45 =>
'<el>45</el>']),
849 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
851 'Deleted 0 deprecated references.<br>' .
852 'Created 0 new references.<br>' .
853 'Created, updated, or deleted 1 exposed records.',
854 $result->exposed_message
858 'restricted' =>
true,
859 'types' => [
'type',
'second type'],
862 $search_factory->exposed_search_params
864 $this->assertEmpty($record_repo->exposed_creations);
865 $this->assertEmpty($record_repo->exposed_updates);
868 $record_repo->exposed_deletions
875 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
882 $this->
getXMLWriter([32 =>
'<el>32</el>', 45 =>
'<el>45</el>']),
888 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
890 'Deleted 0 deprecated references.<br>' .
891 'Created 0 new references.<br>' .
892 'Created, updated, or deleted 1 exposed records.',
893 $result->exposed_message
895 $this->assertEmpty($record_repo->exposed_creations);
896 $this->assertEmpty($record_repo->exposed_updates);
899 $record_repo->exposed_deletions
906 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
913 $this->
getXMLWriter([32 =>
'<el>32</el>', 45 =>
'<el>45</el>']),
919 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
921 'Deleted 0 deprecated references.<br>' .
922 'Created 0 new references.<br>' .
923 'Created, updated, or deleted 1 exposed records.',
924 $result->exposed_message
926 $this->assertEmpty($record_repo->exposed_creations);
927 $this->assertEmpty($record_repo->exposed_updates);
930 $record_repo->exposed_deletions
937 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
944 $this->
getXMLWriter([32 =>
'<el>32</el>', 45 =>
'<el>45</el>']),
950 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
952 'Deleted 0 deprecated references.<br>' .
953 'Created 0 new references.<br>' .
954 'Created, updated, or deleted 1 exposed records.',
955 $result->exposed_message
957 $this->assertEmpty($record_repo->exposed_creations);
958 $this->assertEmpty($record_repo->exposed_updates);
961 $record_repo->exposed_deletions
968 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
975 $writer = $this->
getXMLWriter([32 =>
'<el>32</el>', 45 =>
'<el>45 changed</el>']),
981 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
983 'Deleted 0 deprecated references.<br>' .
984 'Created 0 new references.<br>' .
985 'Created, updated, or deleted 1 exposed records.',
986 $result->exposed_message
988 $this->assertEmpty($record_repo->exposed_creations);
989 $this->assertCount(1, $record_repo->exposed_updates);
990 $this->assertSame(45, $record_repo->exposed_updates[0][
'obj_id']);
991 $this->assertXmlStringEqualsXmlString(
992 '<el>45 changed</el>',
993 $record_repo->exposed_updates[0][
'metadata']
995 $this->assertEmpty($record_repo->exposed_deletions);
998 [
'obj_id' => 32,
'ref_id' => 45632,
'type' =>
'type_45632'],
999 [
'obj_id' => 45,
'ref_id' => 45645,
'type' =>
'type_45645']
1001 $writer->exposed_params
1008 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
1015 $writer = $this->
getXMLWriter([32 =>
'<el>32</el>', 45 =>
'<el>45 new</el>']),
1021 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_OK, $result->exposed_status);
1023 'Deleted 0 deprecated references.<br>' .
1024 'Created 0 new references.<br>' .
1025 'Created, updated, or deleted 1 exposed records.',
1026 $result->exposed_message
1028 $this->assertEmpty($record_repo->exposed_updates);
1029 $this->assertCount(1, $record_repo->exposed_creations);
1030 $this->assertSame(45, $record_repo->exposed_creations[0][
'obj_id']);
1031 $this->assertSame(
'il__type_45645_45', $record_repo->exposed_creations[0][
'identifier']);
1032 $this->assertXmlStringEqualsXmlString(
1034 $record_repo->exposed_creations[0][
'metadata']
1036 $this->assertEmpty($record_repo->exposed_deletions);
1037 $this->assertEquals(
1039 [
'obj_id' => 32,
'ref_id' => 45632,
'type' =>
'type_45632'],
1040 [
'obj_id' => 45,
'ref_id' => 45645,
'type' =>
'type_45645']
1042 $writer->exposed_params
1049 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
1056 $writer = $this->
getXMLWriter([32 =>
'<el>32</el>', 45 =>
'<el>45 new</el>']),
1062 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_NO_ACTION, $result->exposed_status);
1064 'Deleted 0 deprecated references.<br>' .
1065 'Created 0 new references.<br>' .
1066 'Created, updated, or deleted 0 exposed records.',
1067 $result->exposed_message
1069 $this->assertEmpty($record_repo->exposed_updates);
1070 $this->assertEmpty($record_repo->exposed_creations);
1071 $this->assertEmpty($record_repo->exposed_deletions);
1077 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
1084 $writer = $this->
getXMLWriter([32 =>
'<el>32</el>', 45 =>
'<el>45 new</el>']),
1090 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_NO_ACTION, $result->exposed_status);
1092 'Deleted 0 deprecated references.<br>' .
1093 'Created 0 new references.<br>' .
1094 'Created, updated, or deleted 0 exposed records.',
1095 $result->exposed_message
1097 $this->assertEmpty($record_repo->exposed_updates);
1098 $this->assertEmpty($record_repo->exposed_creations);
1099 $this->assertEmpty($record_repo->exposed_deletions);
1105 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 456),
1112 $writer = $this->
getXMLWriter([32 =>
'<el>32</el>', 45 =>
'<el>45 new</el>']),
1118 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_NO_ACTION, $result->exposed_status);
1120 'Deleted 0 deprecated references.<br>' .
1121 'Created 0 new references.<br>' .
1122 'Created, updated, or deleted 0 exposed records.',
1123 $result->exposed_message
1125 $this->assertEmpty($record_repo->exposed_updates);
1126 $this->assertEmpty($record_repo->exposed_creations);
1127 $this->assertEmpty($record_repo->exposed_deletions);
1133 $this->
getSettings([
'type',
'second type'], [12, 5], 123, 0),
1140 $writer = $this->
getXMLWriter([32 =>
'<el>32</el>', 45 =>
'<el>45 new</el>']),
1146 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_NO_ACTION, $result->exposed_status);
1148 'Deleted 0 deprecated references.<br>' .
1149 'Created 0 new references.<br>' .
1150 'Created, updated, or deleted 0 exposed records.',
1151 $result->exposed_message
1153 $this->assertEmpty($record_repo->exposed_updates);
1154 $this->assertEmpty($record_repo->exposed_creations);
1155 $this->assertEmpty($record_repo->exposed_deletions);
1161 $this->
getSettings([
'type',
'second type'], [12, 5]),
1174 $this->assertSame(\
ILIAS\
Cron\Job\JobResult::STATUS_FAIL, $result->exposed_status);
1177 $result->exposed_message
search()
description: > Example for rendring a search glyph.
Interface Observer Contains several chained tasks and infos about them.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
__construct()
Constructor setup ILIAS global object public.