diff --git a/islandora_fits.install b/islandora_fits.install index 7034b281..cc00f330 100644 --- a/islandora_fits.install +++ b/islandora_fits.install @@ -6,25 +6,22 @@ */ - -use Drupal\taxonomy\Entity\Term; use Drupal\field\Entity\FieldConfig; /** * Implements hook_install(). */ -function islandora_fits_install() { - $term_name = 'FITS File'; - $test_terms = taxonomy_term_load_multiple_by_name($term_name); - if (!$test_terms) { - $term = Term::create([ - 'parent' => [], - 'name' => $term_name, - 'vid' => 'islandora_media_use', - 'description' => 'Technical Metadata associated with an original media file', - 'field_external_uri' => ['uri' => 'https://projects.iq.harvard.edu/fits'], - ])->save(); +function islandora_fits_install($is_syncing) { + + if (!_islandora_fits_term_exists()) { + $callable = $is_syncing ? [\Drupal::messenger(), 'addStatus'] : [\Drupal::messenger(), 'addWarning']; + $callable(t('A term in the taxonomy @vid with the URI @uri does not appear to exist. The @migration_id migration can be executed to create it.', [ + '@vid' => 'islandora_media_use', + '@uri' => 'https://projects.iq.harvard.edu/fits', + '@migration_id' => 'islandora_fits_tags', + ])); } + // Add xml extension if it doesn't already exist. $field = FieldConfig::load("media.file.field_media_file"); if ($field) { @@ -37,3 +34,40 @@ function islandora_fits_install() { } } } + +/** + * Implements hook_requirements(). + */ +function islandora_fits_requirements($phase) : array { + $requirements = []; + + if ($phase == 'runtime') { + $term_exists = _islandora_fits_term_exists(); + $requirements['islandora_fits_term_exists'] = [ + 'title' => t('FITS Term Exists'), + 'value' => $term_exists, + 'description' => t('Whether or not a term with the URI targeted by default FITS derivative configuration exists. If derivative configurations were made to target another URI, this can probably be ignored.'), + 'severity' => $term_exists ? REQUIREMENT_OK : REQUIREMENT_WARNING + ]; + } + + return $requirements; +} + +/** + * Helper; determine if a term with the target URI exists. + * + * @return bool + * TRUE if a term (at least one) with the target URI exists; otherwise, FALSE. + * + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException + */ +function _islandora_fits_term_exists() { + $query = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->getQuery() + ->condition('vid', 'islandora_media_use') + ->condition('field_external_uri.uri', 'https://projects.iq.harvard.edu/fits') + ->count(); + $count = $query->execute(); + return $count > 0; +} diff --git a/migrations/islandora_fits_tags.yml b/migrations/islandora_fits_tags.yml new file mode 100644 index 00000000..9cb3d92e --- /dev/null +++ b/migrations/islandora_fits_tags.yml @@ -0,0 +1,25 @@ +--- +id: islandora_fits_tags +migration_tags: + - islandora +migration_group: islandora +label: "FITS Term(s)" +source: + plugin: embeddedd_data + data_rows: + - vid: islandora_media_use + name: FITS File + description: Technical Metadata associated with an original media file + uri: https://projects.iq.harvard.edu/fits + ids: + uri: + type: string +process: + vid: vid + name: name + description: description + field_external_uri/uri: uri +destination: + plugin: entity:taxonomy_term +migration_dependencies: + required: { }