19 declare(strict_types=1);
48 ObjectHandler $object_handler,
49 ExportHandler $export_handler,
50 StatusRepository $status_repository,
54 SimpleDCXMLWriter $xml_writer,
74 $currently_harvested_obj_ids = iterator_to_array($this->status_repository->getAllHarvestedObjIDs());
78 $currently_harvested_obj_ids
80 $messages[] =
'Deleted ' . $deletion_count .
' deprecated references.';
83 $currently_harvested_obj_ids
85 $messages[] =
'Created ' . $harvest_count .
' new references.';
89 $messages[] =
'Created, updated, or deleted ' . $exposure_count .
' exposed records.';
91 if ($deletion_count !== 0 || $harvest_count !== 0 || $exposure_count !== 0) {
96 return $result->withMessage(implode(
'<br>', $messages));
99 ->withMessage($e->getMessage());
105 $searcher = $this->copyright_search_factory->get()
106 ->withRestrictionToRepositoryObjects(
true);
107 foreach ($this->
settings->getObjectTypesSelectedForHarvesting() as $type) {
108 $searcher = $searcher->withAdditionalTypeFilter($type);
110 $search_results = [];
111 foreach ($searcher->search(
112 $this->lom_repository,
113 ...$this->settings->getCopyrightEntryIDsSelectedForHarvesting()
114 ) as $ressource_id) {
115 $search_results[] = $ressource_id->objID();
118 $unblocked = $this->status_repository->filterOutBlockedObjects(...$search_results);
120 foreach ($unblocked as $obj_id) {
121 if ($this->object_handler->isObjectDeleted($obj_id)) {
135 array $harvestable_obj_ids,
136 array $currently_harvested_obj_ids
139 foreach ($currently_harvested_obj_ids as $obj_id) {
140 if (in_array($obj_id, $harvestable_obj_ids)) {
144 $ref_id = $this->status_repository->getHarvestRefID($obj_id);
147 $this->object_handler->deleteReference(
$ref_id);
150 'Error when deleting harvested reference with ref_id ' .
151 $ref_id .
': ' . $e->getMessage()
155 $this->status_repository->deleteHarvestRefID($obj_id);
167 array $harvestable_obj_ids,
168 array $currently_harvested_obj_ids
172 $target_ref_id = $this->
settings->getContainerRefIDForHarvesting();
173 if (!$target_ref_id) {
177 foreach ($harvestable_obj_ids as $obj_id) {
178 if (in_array($obj_id, $currently_harvested_obj_ids)) {
182 $this->
logDebug(
'Creating new reference for object with obj_id: ' . $obj_id);
184 $new_ref_id = $this->object_handler->referenceObjectInTargetContainer(
190 'Error when creating reference for object with obj_id ' .
191 $obj_id .
': ' . $e->getMessage()
195 $this->status_repository->setHarvestRefID($obj_id, $new_ref_id);
198 if (!$this->export_handler->hasPublicAccessExport($obj_id)) {
199 $this->export_handler->createPublicAccessExport($obj_id);
203 'Error when creating export for object with obj_id ' .
204 $obj_id .
': ' . $e->getMessage()
218 array $harvestable_obj_ids,
222 $source_ref_id = $this->
settings->getContainerRefIDForExposing();
223 if (!$source_ref_id) {
227 $already_exposed = [];
228 foreach ($this->exposed_record_repository->getRecords() as $record) {
229 $obj_id = $record->infos()->objID();
230 $already_exposed[] = $obj_id;
232 $ref_id = $this->object_handler->getObjectReferenceIDInContainer($obj_id, $source_ref_id);
234 if (!in_array($obj_id, $harvestable_obj_ids) || is_null(
$ref_id)) {
235 $this->
logDebug(
'Deleting exposed record for object with obj_id: ' . $obj_id);
236 $this->exposed_record_repository->deleteRecord($obj_id);
241 $simple_dc_xml = $this->xml_writer->writeSimpleDCMetaData(
244 $this->object_handler->getTypeOfReferencedObject(
$ref_id)
247 if ($simple_dc_xml->saveXML() !== $record->metadata()->saveXML()) {
248 $this->
logDebug(
'Updating exposed record for object with obj_id: ' . $obj_id);
249 $this->exposed_record_repository->updateRecord($obj_id, $simple_dc_xml);
254 foreach ($harvestable_obj_ids as $obj_id) {
255 if (in_array($obj_id, $already_exposed)) {
259 $ref_id = $this->object_handler->getObjectReferenceIDInContainer($obj_id, $source_ref_id);
264 $type = $this->object_handler->getTypeOfReferencedObject(
$ref_id);
266 $simple_dc_xml = $this->xml_writer->writeSimpleDCMetaData(
272 $this->
logDebug(
'Creating exposed record for object with obj_id: ' . $obj_id);
273 $this->exposed_record_repository->createRecord(
286 $this->
logger->debug($message);
291 $this->
logger->error($message);
296 return 'il__' . $type .
'_' . $obj_id;
final const STATUS_NO_ACTION