19 declare(strict_types=1);
47 ObjectHandler $object_handler,
48 ExportHandler $export_handler,
49 StatusRepository $status_repository,
53 SimpleDCXMLWriter $xml_writer,
73 $currently_harvested_obj_ids = iterator_to_array($this->status_repository->getAllHarvestedObjIDs());
77 $currently_harvested_obj_ids
79 $messages[] =
'Deleted ' . $deletion_count .
' deprecated references.';
82 $currently_harvested_obj_ids
84 $messages[] =
'Created ' . $harvest_count .
' new references.';
88 $messages[] =
'Created, updated, or deleted ' . $exposure_count .
' exposed records.';
90 if ($deletion_count !== 0 || $harvest_count !== 0 || $exposure_count !== 0) {
91 $result = $result->withStatus(\
ILIAS\
Cron\Job\JobResult::STATUS_OK);
93 $result = $result->withStatus(\
ILIAS\
Cron\Job\JobResult::STATUS_NO_ACTION);
95 return $result->withMessage(implode(
'<br>',
$messages));
97 return $result->withStatus(\
ILIAS\
Cron\Job\JobResult::STATUS_FAIL)
98 ->withMessage($e->getMessage());
104 $searcher = $this->copyright_search_factory->get()
105 ->withRestrictionToRepositoryObjects(
true);
106 foreach ($this->
settings->getObjectTypesSelectedForHarvesting() as $type) {
107 $searcher = $searcher->withAdditionalTypeFilter($type);
109 $search_results = [];
110 foreach ($searcher->search(
111 $this->lom_repository,
112 ...$this->settings->getCopyrightEntryIDsSelectedForHarvesting()
113 ) as $ressource_id) {
114 $search_results[] = $ressource_id->objID();
117 $unblocked = $this->status_repository->filterOutBlockedObjects(...$search_results);
119 foreach ($unblocked as $obj_id) {
120 if ($this->object_handler->isObjectDeleted($obj_id)) {
134 array $harvestable_obj_ids,
135 array $currently_harvested_obj_ids
138 foreach ($currently_harvested_obj_ids as $obj_id) {
139 if (in_array($obj_id, $harvestable_obj_ids)) {
143 $ref_id = $this->status_repository->getHarvestRefID($obj_id);
146 $this->object_handler->deleteReference(
$ref_id);
149 'Error when deleting harvested reference with ref_id ' .
150 $ref_id .
': ' . $e->getMessage()
154 $this->status_repository->deleteHarvestRefID($obj_id);
166 array $harvestable_obj_ids,
167 array $currently_harvested_obj_ids
171 $target_ref_id = $this->
settings->getContainerRefIDForHarvesting();
172 if (!$target_ref_id) {
176 foreach ($harvestable_obj_ids as $obj_id) {
177 if (in_array($obj_id, $currently_harvested_obj_ids)) {
181 $this->
logDebug(
'Creating new reference for object with obj_id: ' . $obj_id);
183 $new_ref_id = $this->object_handler->referenceObjectInTargetContainer(
189 'Error when creating reference for object with obj_id ' .
190 $obj_id .
': ' . $e->getMessage()
194 $this->status_repository->setHarvestRefID($obj_id, $new_ref_id);
197 if (!$this->export_handler->hasPublicAccessExport($obj_id)) {
198 $this->export_handler->createPublicAccessExport($obj_id);
202 'Error when creating export for object with obj_id ' .
203 $obj_id .
': ' . $e->getMessage()
217 array $harvestable_obj_ids,
221 $source_ref_id = $this->
settings->getContainerRefIDForExposing();
222 if (!$source_ref_id) {
226 $already_exposed = [];
227 foreach ($this->exposed_record_repository->getRecords() as $record) {
228 $obj_id = $record->infos()->objID();
229 $already_exposed[] = $obj_id;
231 $ref_id = $this->object_handler->getObjectReferenceIDInContainer($obj_id, $source_ref_id);
233 if (!in_array($obj_id, $harvestable_obj_ids) || is_null(
$ref_id)) {
234 $this->
logDebug(
'Deleting exposed record for object with obj_id: ' . $obj_id);
235 $this->exposed_record_repository->deleteRecord($obj_id);
240 $simple_dc_xml = $this->xml_writer->writeSimpleDCMetaData(
243 $this->object_handler->getTypeOfReferencedObject(
$ref_id)
246 if ($simple_dc_xml->saveXML() !== $record->metadata()->saveXML()) {
247 $this->
logDebug(
'Updating exposed record for object with obj_id: ' . $obj_id);
248 $this->exposed_record_repository->updateRecord($obj_id, $simple_dc_xml);
253 foreach ($harvestable_obj_ids as $obj_id) {
254 if (in_array($obj_id, $already_exposed)) {
258 $ref_id = $this->object_handler->getObjectReferenceIDInContainer($obj_id, $source_ref_id);
263 $type = $this->object_handler->getTypeOfReferencedObject(
$ref_id);
265 $simple_dc_xml = $this->xml_writer->writeSimpleDCMetaData(
271 $this->
logDebug(
'Creating exposed record for object with obj_id: ' . $obj_id);
272 $this->exposed_record_repository->createRecord(
285 $this->
logger->debug($message);
290 $this->
logger->error($message);
295 return 'il__' . $type .
'_' . $obj_id;
Interface Observer Contains several chained tasks and infos about them.