Browse Source

Resaves populated media

pull/907/head
Alan Stanley 7 years ago
parent
commit
1b01b8f60f
  1. 28
      islandora_fits.module
  2. 29
      src/Services/XMLTransform.php

28
islandora_fits.module

@ -11,6 +11,7 @@ use Drupal\media\MediaInterface;
use Drupal\taxonomy\Entity\Term;
use Drupal\node\Entity\Node;
use Drupal\file\Entity\File;
use Drupal\media\Entity\Media;
/**
@ -69,18 +70,18 @@ function islandora_fits_media_presave(MediaInterface $media) {
if ($media->bundle() != 'fits_technical_metadata') {
return;
}
$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->add_media_fields($data);
if (!$has_new) {
$transformer->populate_media($data, $media);
$media->set('field_complete', TRUE);
} else {
$has_new = $transformer->check_new($data);
if ($has_new) {
$media->set('field_complete', FALSE);
}
else {
$transformer->populate_media($data, $media);
}
}
@ -88,9 +89,18 @@ function islandora_fits_media_presave(MediaInterface $media) {
* Implements hook_media_update().
*/
function islandora_fits_media_update(MediaInterface $media) {
$complete = $media->get('field_complete')->value;
if (!$complete) {
$media->save();
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();
}
}

29
src/Services/XMLTransform.php

@ -7,7 +7,6 @@ use Drupal\Core\DependencyInjection\ServiceProviderBase;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\field\Entity\FieldConfig;
/**
* Class XMLTransform.
*/
@ -65,13 +64,11 @@ class XMLTransform extends ServiceProviderBase {
}
}
$table_attributes = array('class' => array('islandora_fits_table'));
$table = array(
'header' => $headers,
'rows' => $rows,
'attributes' => $table_attributes,
);
$variables['islandora_fits_table'][$tool_name] = $table;
$variables['islandora_fits_fieldsets'][$tool_name] = [
'#theme' => 'table',
@ -90,9 +87,7 @@ class XMLTransform extends ServiceProviderBase {
'title' => $title,
'data' => $fieldset,
];
}
$renderable = [
'#theme' => 'fits',
'#output' => $output,
@ -101,7 +96,6 @@ class XMLTransform extends ServiceProviderBase {
'islandora_fits/islandora_fits',
]
]
];
return $renderable;
}
@ -189,7 +183,6 @@ class XMLTransform extends ServiceProviderBase {
}
}
}
}
/**
@ -251,7 +244,7 @@ class XMLTransform extends ServiceProviderBase {
'field_name' => $field['field_name'],
'type' => 'text',
]);
$field_storage->save();
$field_storage->save();
}
$bundle_fields = $this->entityManager->getFieldDefinitions('media', 'fits_technical_metadata');
$bundle_keys = array_keys($bundle_fields);
@ -320,7 +313,7 @@ class XMLTransform extends ServiceProviderBase {
foreach ($names as $label => $field_value) {
$lower = strtolower($label);
$normalized = str_replace($this->forbidden, '_', $lower);
$field_name = substr("field_$normalized", 0, 32);
$field_name = substr("fits_$normalized", 0, 32);
$normalized_names[] = [
'field_label' => $label,
@ -330,4 +323,22 @@ class XMLTransform extends ServiceProviderBase {
}
return $normalized_names;
}
public function check_new($input_xml) {
$fields_added = FALSE;
$data = $this->transformFits($input_xml);
$all_fields = [];
foreach ($data['#output'] as $datum) {
$all_fields = array_merge($all_fields, $this->harvest_values($datum));
}
$to_process = $this->normalize_names($all_fields);
foreach ($to_process as $field) {
$bundle_fields = $this->entityManager->getFieldDefinitions('media', 'fits_technical_metadata');
$bundle_keys = array_keys($bundle_fields);
if (!in_array($field['field_name'], $bundle_keys)) {
$fields_added = TRUE;
}
}
return $fields_added;
}
}

Loading…
Cancel
Save