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