' . t('About') . ''; $output .= '
' . t('Enables Technical Metadata derivative generation') . '
'; return $output; default: } } /** * 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(array( '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(); } // Add xml extension if it doesn't already exist; $field = FieldConfig::load("media.file.field_media_file"); $fieldSettings = $field->getSettings(); $extensions = $fieldSettings['file_extensions']; if (!strpos($extensions, 'xml')) { $fieldSettings['file_extensions'] .= ' xml'; $field->set('settings', $fieldSettings); } } /** * Implements hook_theme(). */ function islandora_fits_theme($existing, $type, $theme, $path) { return [ 'fits' => [ 'variables' => [ 'title' => 'FITS data', 'link' => NULL, 'output' => [], ], ], ]; } /** * Implements hook_ENTITY_TYPE_presave(). */ function islandora_fits_media_presave(MediaInterface $media) { if ($media->bundle() != 'fits_technical_metadata') { return; } $transformer = \Drupal::getContainer()->get('islandora_fits.transformxml'); $media->set('field_complete', TRUE); $file_id = $media->get('field_media_file')->getValue()[0]['target_id']; $file = File::load($file_id); $data = file_get_contents($file->getFileUri()); // Adds any new fields to FITS media type. $has_new = $transformer->check_new($data); if ($has_new) { $media->set('field_complete', FALSE); } else { $transformer->populate_media($data, $media); } } /** * Implements hook_media_update(). */ function islandora_fits_media_update(MediaInterface $media) { if ($media->bundle() != 'fits_technical_metadata') { return; } if ($media->get('field_complete')->value == FALSE) { $transformer = \Drupal::getContainer()->get('islandora_fits.transformxml'); $file_id = $media->get('field_media_file')->getValue()[0]['target_id']; $file = File::load($file_id); $data = file_get_contents($file->getFileUri()); $transformer->add_media_fields($data); $new_media = Media::load($media->id()); $new_media->set('field_complete', TRUE); $new_media->save(); } } /** * Implements hook_media_insert(). */ function islandora_fits_media_insert(MediaInterface $media) { if ($media->bundle() != 'fits_technical_metadata') { return; } islandora_fits_media_update($media); }