Browse Source

Reverted to nodeless model

pull/907/head
Alan Stanley 7 years ago
parent
commit
c86b91c172
  1. 27
      config/install/field.field.media.fits_technical_metadata.field_attached_fits_node.yml
  2. 20
      config/install/field.field.node.fits_technical_metadata.field_data_of.yml
  3. 23
      config/install/field.storage.media.field_attached_fits_node.yml
  4. 22
      config/install/field.storage.node.field_data_of.yml
  5. 17
      config/install/node.type.fits_technical_metadata.yml
  6. 37
      islandora_fits.module
  7. 27
      src/Services/XMLTransform.php

27
config/install/field.field.media.fits_technical_metadata.field_attached_fits_node.yml

@ -1,27 +0,0 @@
langcode: en
status: true
dependencies:
config:
- field.storage.media.field_attached_fits_node
- media.type.fits_technical_metadata
- node.type.fits_technical_metadata
id: media.fits_technical_metadata.field_attached_fits_node
field_name: field_attached_fits_node
entity_type: media
bundle: fits_technical_metadata
label: 'Attached FITS node'
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
handler: 'default:node'
handler_settings:
target_bundles:
fits_technical_metadata: fits_technical_metadata
sort:
field: _none
auto_create: false
auto_create_bundle: ''
field_type: entity_reference

20
config/install/field.field.node.fits_technical_metadata.field_data_of.yml

@ -1,20 +0,0 @@
langcode: en
status: true
dependencies:
config:
- field.storage.node.field_data_of
- node.type.fits_technical_metadata
id: node.fits_technical_metadata.field_data_of
field_name: field_data_of
entity_type: node
bundle: fits_technical_metadata
label: 'Data of'
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
handler: 'default:node'
handler_settings: { }
field_type: entity_reference

23
config/install/field.storage.media.field_attached_fits_node.yml

@ -1,23 +0,0 @@
langcode: en
status: true
dependencies:
module:
- field_permissions
- media
- node
third_party_settings:
field_permissions:
permission_type: public
id: media.field_attached_fits_node
field_name: field_attached_fits_node
entity_type: media
type: entity_reference
settings:
target_type: node
module: core
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false

22
config/install/field.storage.node.field_data_of.yml

@ -1,22 +0,0 @@
langcode: en
status: true
dependencies:
module:
- field_permissions
- node
third_party_settings:
field_permissions:
permission_type: public
id: node.field_data_of
field_name: field_data_of
entity_type: node
type: entity_reference
settings:
target_type: node
module: core
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false

17
config/install/node.type.fits_technical_metadata.yml

@ -1,17 +0,0 @@
langcode: en
status: true
dependencies:
module:
- menu_ui
third_party_settings:
menu_ui:
available_menus:
- main
parent: 'main:'
name: 'Fits Technical Metadata'
type: fits_technical_metadata
description: 'Convenience node to hold indexable FITS values'
help: ''
new_revision: true
preview_mode: 1
display_submitted: true

37
islandora_fits.module

@ -5,6 +5,7 @@
* Contains islandora_fits.module.
*/
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\media\MediaInterface;
use Drupal\taxonomy\Entity\Term;
@ -68,23 +69,31 @@ function islandora_fits_media_presave(MediaInterface $media) {
if ($media->bundle() != 'fits_technical_metadata') {
return;
}
$attached = $media->get('field_attached_fits_node')->referencedEntities()[0];
$data_of = $media->get('field_media_of')->referencedEntities()[0];
$title = $data_of->getTitle();
if (!$attached) {
$node = Node::create(['type' => 'fits_technical_metadata']);
$node->setTitle("Fits Metadata of $title");
$node->save();
$media->field_attached_fits_node->target_id = $node->id();
$attached = $node;
}
$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 content type.
$transformer->add_node_fields($data);
$transformer->populate_node($data, $attached);
$attached->save();
// 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 {
$media->set('field_complete', FALSE);
}
}
/**
* Implements hook_media_update().
*/
function islandora_fits_media_update(MediaInterface $media) {
$complete = $media->get('field_complete')->value;
if (!$complete) {
$media->save();
}
}

27
src/Services/XMLTransform.php

@ -235,7 +235,8 @@ class XMLTransform extends ServiceProviderBase {
* @param $input_xml
* @throws \Drupal\Core\Entity\EntityStorageException
*/
public function add_node_fields($input_xml) {
public function add_media_fields($input_xml) {
$fields_added = FALSE;
$data = $this->transformFits($input_xml);
$all_fields = [];
foreach ($data['#output'] as $datum) {
@ -243,30 +244,37 @@ class XMLTransform extends ServiceProviderBase {
}
$to_process = $this->normalize_names($all_fields);
foreach ($to_process as $field) {
$exists = FieldStorageConfig::loadByName('node', $field['field_name']);
$exists = FieldStorageConfig::loadByName('media', $field['field_name']);
if (!$exists) {
$field_storage = FieldStorageConfig::create([
'entity_type' => 'node',
'entity_type' => 'media',
'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);
if (!in_array($field['field_name'], $bundle_keys)) {
$field_storage = FieldStorageConfig::loadByName('media', $field['field_name']);
FieldConfig::create([
'field_storage' => $field_storage,
'bundle' => 'fits_technical_metadata',
'label' => $field['field_name'],
'label' => $field['field_label'],
])->save();
$fields_added = TRUE;
}
}
return $fields_added;
}
/**
* Populates associated node.
* Populates media.
*
* @param $input_xml
* @param $node
* @param $media
*/
public function populate_node($input_xml, &$node) {
public function populate_media($input_xml, &$media) {
$data = $this->transformFits($input_xml);
$all_fields = [];
foreach ($data['#output'] as $datum) {
@ -279,9 +287,8 @@ class XMLTransform extends ServiceProviderBase {
$field_name = substr("field_$normalized", 0, 32);
$to_add[$field_name] = $field_value;
}
foreach ($to_add as $field_name => $field_value) {
$node->set($field_name, $field_value);
$media->set($field_name, $field_value);
}
}

Loading…
Cancel
Save