Browse Source

added test

pull/907/head
ajstanley 6 years ago
parent
commit
1505ea35f2
  1. 44
      islandora_fits.module

44
islandora_fits.module

@ -9,6 +9,7 @@ use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\media\MediaInterface; use Drupal\media\MediaInterface;
use Drupal\file\Entity\File; use Drupal\file\Entity\File;
use Drupal\media\Entity\Media; use Drupal\media\Entity\Media;
use Drupal\node\Entity\NodeType;
/** /**
* Implements hook_help(). * Implements hook_help().
@ -46,11 +47,43 @@ function islandora_fits_theme($existing, $type, $theme, $path) {
*/ */
function islandora_fits_media_presave(MediaInterface $media) { function islandora_fits_media_presave(MediaInterface $media) {
if ($media->bundle() != 'fits_technical_metadata') { if ($media->bundle() != 'fits_technical_metadata') {
$field_names = array_keys($media->getFieldDefinitions());
$pairs = [];
foreach ($field_names as $name) {
$label = $media->$name->getFieldDefinition()->getLabel();
if (is_string($label)) {
// Allow for accidental multiple spaves.
$label = preg_replace('/\s+/', ' ', $label);
$pairs[$label] = $name;
}
}
$file_id = NULL;
$transformer = \Drupal::getContainer()->get('islandora_fits.transformxml');
if($media->hasField('field_fits_file')) {
$file_id = $media->get('field_fits_file')->getValue()[0]['target_id'];
}
if (!$file_id) {
return; return;
} }
$file = File::load($file_id);
$contents = file_get_contents($file->getFileUri());
$data = $transformer->transformFits($contents);
$all_fields = [];
foreach ($data['#output'] as $datum) {
$all_fields = array_merge($all_fields, $transformer->harvestKeyValues($datum));
}
$indexable_fields = array_intersect_key($pairs, $all_fields);
foreach ($indexable_fields as $key => $field) {
if ($media->get($field)->getString() != $all_fields[$key]) {
$media->set($field, $all_fields[$key]);
}
}
}
else {
$transformer = \Drupal::getContainer()->get('islandora_fits.transformxml'); $transformer = \Drupal::getContainer()->get('islandora_fits.transformxml');
$media->set('field_complete', TRUE); $media->set('field_complete', TRUE);
$file_id = $media->get('field_media_file')->getValue()[0]['target_id']; $file_id = $media->get('field_media_file')->getValue()[0]['target_id'];
if ($file_id) {
$file = File::load($file_id); $file = File::load($file_id);
$data = file_get_contents($file->getFileUri()); $data = file_get_contents($file->getFileUri());
// Adds any new fields to FITS media type. // Adds any new fields to FITS media type.
@ -62,6 +95,9 @@ function islandora_fits_media_presave(MediaInterface $media) {
$transformer->populateMedia($data, $media); $transformer->populateMedia($data, $media);
} }
} }
}
}
/** /**
* Implements hook_media_update(). * Implements hook_media_update().
@ -86,18 +122,17 @@ function islandora_fits_media_update(MediaInterface $media) {
* Implements hook_media_insert(). * Implements hook_media_insert().
*/ */
function islandora_fits_media_insert(MediaInterface $media) { function islandora_fits_media_insert(MediaInterface $media) {
if ($media->bundle() != 'fits_technical_metadata') { if ($media->bundle() == 'fits_technical_metadata') {
return;
}
islandora_fits_media_update($media); islandora_fits_media_update($media);
} }
}
/** /**
* Implements hook_entity_extra_field_info(). * Implements hook_entity_extra_field_info().
*/ */
function islandora_fits_entity_extra_field_info() { function islandora_fits_entity_extra_field_info() {
$entityFieldManager = \Drupal::service('entity_field.manager'); $entityFieldManager = \Drupal::service('entity_field.manager');
$node_types = \Drupal\node\Entity\NodeType::loadMultiple(); $node_types = NodeType::loadMultiple();
$extra = []; $extra = [];
$types = []; $types = [];
foreach ($node_types as $node_type) { foreach ($node_types as $node_type) {
@ -115,7 +150,6 @@ function islandora_fits_entity_extra_field_info() {
]; ];
} }
} }
return $extra; return $extra;
} }

Loading…
Cancel
Save