diff --git a/config/install/rules.reaction.broadcast_media_create_event.yml b/config/install/rules.reaction.broadcast_media_create_event.yml index 81d660fc..112007d2 100644 --- a/config/install/rules.reaction.broadcast_media_create_event.yml +++ b/config/install/rules.reaction.broadcast_media_create_event.yml @@ -2,12 +2,11 @@ uuid: c4447a0b-a2a8-4f32-947b-fbe1094632d5 langcode: en status: true dependencies: - module: - - islandora - - rules enforced: module: - islandora +_core: + default_config_hash: mRt_MC0dKA68qaoXI3WlnCg-ta5Wry0dLR2dpOqY4to id: broadcast_media_create_event label: 'Broadcast Media Create Event' events: @@ -43,7 +42,8 @@ expression: uuid: f7880d70-1411-4c60-a065-a7d187b604db context_values: recipients: - - 'activemq:queue:islandora-indexing-triplestore' + - "activemq:queue:islandora-indexing-triplestore\r" + - 'activemq:queue:islandora-indexing-fcrepo-binary-create' context_mapping: message: event_message context_processors: diff --git a/config/install/rules.reaction.broadcast_media_delete_event.yml b/config/install/rules.reaction.broadcast_media_delete_event.yml index 755ea290..53df0439 100644 --- a/config/install/rules.reaction.broadcast_media_delete_event.yml +++ b/config/install/rules.reaction.broadcast_media_delete_event.yml @@ -2,12 +2,11 @@ uuid: 33b8afa6-1507-4f04-acc9-5a18ca2b0ccc langcode: en status: true dependencies: - module: - - islandora - - rules enforced: module: - islandora +_core: + default_config_hash: Jejr-Hg2lX1o7mdUt_RBxW0xfzOKhoFbGGpepW_SoZg id: broadcast_media_delete_event label: 'Broadcast Media Delete Event' events: @@ -43,7 +42,8 @@ expression: uuid: 371b1104-1aa6-4b3d-82cf-e27168e664ae context_values: recipients: - - 'activemq:queue:islandora-indexing-triplestore' + - "activemq:queue:islandora-indexing-triplestore\r" + - 'activemq:queue:islandora-indexing-fcrepo-binary-delete' context_mapping: message: event_message context_processors: diff --git a/config/install/rules.reaction.broadcast_media_update_event.yml b/config/install/rules.reaction.broadcast_media_update_event.yml index 7a91db1c..ea78e3d6 100644 --- a/config/install/rules.reaction.broadcast_media_update_event.yml +++ b/config/install/rules.reaction.broadcast_media_update_event.yml @@ -2,12 +2,11 @@ uuid: d58d3327-38d2-400b-91a0-3b00b3870121 langcode: en status: true dependencies: - module: - - islandora - - rules enforced: module: - islandora +_core: + default_config_hash: qAkxtz6jH0on_W4QXhpGqZMFfgyATahnUKdynX9bl1g id: broadcast_media_update_event label: 'Broadcast Media Update Event' events: @@ -43,7 +42,8 @@ expression: uuid: 6aa1f15c-3a39-4af5-b577-81fa7081de62 context_values: recipients: - - 'activemq:queue:islandora-indexing-triplestore' + - "activemq:queue:islandora-indexing-triplestore\r" + - 'activemq:queue:islandora-indexing-fcrepo-binary-update' context_mapping: message: event_message context_processors: diff --git a/islandora.module b/islandora.module index 073e1ff8..fb9dd0c1 100644 --- a/islandora.module +++ b/islandora.module @@ -85,6 +85,7 @@ function islandora_rdf_namespaces() { 'islandora' => 'http://islandora.ca/CLAW/', 'pcdm' => 'http://pcdm.org/models#', 'use' => 'http://pcdm.org/use#', + 'iana' => 'http://www.iana.org/assignments/relation/', ]; } diff --git a/src/EventGenerator/EventGenerator.php b/src/EventGenerator/EventGenerator.php index e0463277..10814328 100644 --- a/src/EventGenerator/EventGenerator.php +++ b/src/EventGenerator/EventGenerator.php @@ -3,6 +3,7 @@ namespace Drupal\islandora\EventGenerator; use Drupal\Core\Entity\EntityInterface; +use Drupal\media_entity\Entity\Media; use Drupal\user\UserInterface; /** @@ -16,7 +17,7 @@ class EventGenerator implements EventGeneratorInterface { * {@inheritdoc} */ public function generateCreateEvent(EntityInterface $entity, UserInterface $user) { - return json_encode([ + $event = [ "@context" => "https://www.w3.org/ns/activitystreams", "type" => "Create", "actor" => [ @@ -24,14 +25,20 @@ class EventGenerator implements EventGeneratorInterface { "id" => $user->toUrl()->setAbsolute()->toString(), ], "object" => $entity->toUrl()->setAbsolute()->toString(), - ]); + ]; + + if ($entity instanceof Media) { + $this->addAttachment($entity, $event); + } + + return json_encode($event); } /** * {@inheritdoc} */ public function generateUpdateEvent(EntityInterface $entity, UserInterface $user) { - return json_encode([ + $event = [ "@context" => "https://www.w3.org/ns/activitystreams", "type" => "Update", "actor" => [ @@ -39,14 +46,20 @@ class EventGenerator implements EventGeneratorInterface { "id" => $user->toUrl()->setAbsolute()->toString(), ], "object" => $entity->toUrl()->setAbsolute()->toString(), - ]); + ]; + + if ($entity instanceof Media) { + $this->addAttachment($entity, $event); + } + + return json_encode($event); } /** * {@inheritdoc} */ public function generateDeleteEvent(EntityInterface $entity, UserInterface $user) { - return json_encode([ + $event = [ "@context" => "https://www.w3.org/ns/activitystreams", "type" => "Delete", "actor" => [ @@ -54,7 +67,50 @@ class EventGenerator implements EventGeneratorInterface { "id" => $user->toUrl()->setAbsolute()->toString(), ], "object" => $entity->toUrl()->setAbsolute()->toString(), - ]); + ]; + + if ($entity instanceof Media) { + $this->addAttachment($entity, $event); + } + + return json_encode($event); + } + + /** + * Adds the 'attachment' info to the event array. + * + * @param \Drupal\media_entity\Entity\Media $entity + * The entity that was updated. + * @param array $event + * Array of info to be serialized to jsonld. + */ + protected function addAttachment(Media $entity, array &$event) { + if ($entity->hasField("field_image")) { + $file = $entity->field_image->entity; + } + elseif ($entity->hasField("field_file")) { + $file = $entity->field_file->entity; + } + else { + \Drupal::logger('islandora')->warning( + "Cannot parse 'field_image' or 'field_file' from Media entity {$entity->id()}" + ); + return; + } + + if ($file === null) { + \Drupal::logger('islandora')->debug( + "'field_image' or 'field_file' is null in Media entity {$entity->id()}" + ); + return; + } + + $url = file_create_url($file->getFileUri()); + $mime = $file->getMimeType(); + $event['attachment'] = [ + 'url' => $url, + 'mediaType' => $mime, + ]; } }