Browse Source

added test

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

68
islandora_fits.module

@ -9,6 +9,7 @@ use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\media\MediaInterface;
use Drupal\file\Entity\File;
use Drupal\media\Entity\Media;
use Drupal\node\Entity\NodeType;
/**
* Implements hook_help().
@ -46,21 +47,56 @@ function islandora_fits_theme($existing, $type, $theme, $path) {
*/
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->checkNew($data);
if ($has_new) {
$media->set('field_complete', FALSE);
$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;
}
$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->populateMedia($data, $media);
$transformer = \Drupal::getContainer()->get('islandora_fits.transformxml');
$media->set('field_complete', TRUE);
$file_id = $media->get('field_media_file')->getValue()[0]['target_id'];
if ($file_id) {
$file = File::load($file_id);
$data = file_get_contents($file->getFileUri());
// Adds any new fields to FITS media type.
$has_new = $transformer->checkNew($data);
if ($has_new) {
$media->set('field_complete', FALSE);
}
else {
$transformer->populateMedia($data, $media);
}
}
}
}
/**
@ -86,10 +122,9 @@ function islandora_fits_media_update(MediaInterface $media) {
* Implements hook_media_insert().
*/
function islandora_fits_media_insert(MediaInterface $media) {
if ($media->bundle() != 'fits_technical_metadata') {
return;
if ($media->bundle() == 'fits_technical_metadata') {
islandora_fits_media_update($media);
}
islandora_fits_media_update($media);
}
/**
@ -97,7 +132,7 @@ function islandora_fits_media_insert(MediaInterface $media) {
*/
function islandora_fits_entity_extra_field_info() {
$entityFieldManager = \Drupal::service('entity_field.manager');
$node_types = \Drupal\node\Entity\NodeType::loadMultiple();
$node_types = NodeType::loadMultiple();
$extra = [];
$types = [];
foreach ($node_types as $node_type) {
@ -115,7 +150,6 @@ function islandora_fits_entity_extra_field_info() {
];
}
}
return $extra;
}

Loading…
Cancel
Save