Browse Source

Rosie's feedback

main
ajstanley 10 months ago
parent
commit
6385913ae4
  1. 60
      src/Form/DOIFieldSettingsForm.php
  2. 8
      src/Form/DoiPrepopulateForm.php
  3. 1
      src/NodeBuilder.php

60
src/Form/DOIFieldSettingsForm.php

@ -45,7 +45,9 @@ final class DOIFieldSettingsForm extends ConfigFormBase {
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* The entity type manager service. * The entity type manager service.
* @param \Drupal\Core\Entity\EntityFieldManagerInterface $entityFieldManager * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entityFieldManager
* THe field manager. * The field manager.
* @param \Drupal\islandora\IslandoraUtils $utils
* Islandora utils service.
*/ */
public function __construct(EntityTypeManagerInterface $entityTypeManager, EntityFieldManagerInterface $entityFieldManager, IslandoraUtils $utils) { public function __construct(EntityTypeManagerInterface $entityTypeManager, EntityFieldManagerInterface $entityFieldManager, IslandoraUtils $utils) {
$this->entityTypeManager = $entityTypeManager; $this->entityTypeManager = $entityTypeManager;
@ -156,12 +158,8 @@ final class DOIFieldSettingsForm extends ConfigFormBase {
$form['pairs_description'] = [ $form['pairs_description'] = [
'#type' => 'markup', '#type' => 'markup',
'#markup' => $this->t('DOI genre terms are returned by Crossref. Please choose any term you would like to replace from your own taxonomy.'), '#markup' => $this->t('DOI genre terms are returned by Crossref. Please choose any term you would like to replace from your own taxonomy.<br /><strong>Note:</strong> any unpaired terms coming from Crossref will be left blank.'),
]; '#allowed_tags' => ['br', 'strong'],
$initial_pair = [
'key' => '',
'value' => '',
'unique_id' => 'initial',
]; ];
$doi_term_islandora_term_pairs = $form_state->get('doi_term_islandora_term_pairs', []); $doi_term_islandora_term_pairs = $form_state->get('doi_term_islandora_term_pairs', []);
@ -171,9 +169,13 @@ final class DOIFieldSettingsForm extends ConfigFormBase {
} }
if (empty($doi_term_islandora_term_pairs)) { if (empty($doi_term_islandora_term_pairs)) {
// Initialize as an empty array if no pairs exist. // Initialize as an empty array if no pairs exist.
$doi_term_islandora_term_pairs['initial'] = $initial_pair; $new_id = uniqid();
$doi_term_islandora_term_pairs[$new_id] = [
'key' => '',
'value' => '',
'entry_id' => $new_id,
];
} }
// Set the form state for entry_count and doi_term_islandora_term_pairs. // Set the form state for entry_count and doi_term_islandora_term_pairs.
$form_state->set('doi_term_islandora_term_pairs', $doi_term_islandora_term_pairs); $form_state->set('doi_term_islandora_term_pairs', $doi_term_islandora_term_pairs);
$entry_count = count($doi_term_islandora_term_pairs); $entry_count = count($doi_term_islandora_term_pairs);
@ -184,6 +186,11 @@ final class DOIFieldSettingsForm extends ConfigFormBase {
'#type' => 'table', '#type' => 'table',
'#prefix' => '<div id="key-value-pairs-wrapper">', '#prefix' => '<div id="key-value-pairs-wrapper">',
'#suffix' => '</div>', '#suffix' => '</div>',
'#header' => [
$this->t('DOI term'),
$this->t('Genre term'),
$this->t('Action'),
],
]; ];
// Generate the table rows dynamically based on stored pairs. // Generate the table rows dynamically based on stored pairs.
@ -209,6 +216,7 @@ final class DOIFieldSettingsForm extends ConfigFormBase {
]; ];
// Remove button for each entry. // Remove button for each entry.
if ($pair['key'] && $pair['value']) {
$form['doi_term_islandora_term_pairs'][$unique_id]['remove'] = [ $form['doi_term_islandora_term_pairs'][$unique_id]['remove'] = [
'#type' => 'submit', '#type' => 'submit',
'#value' => $this->t('Remove'), '#value' => $this->t('Remove'),
@ -221,11 +229,9 @@ final class DOIFieldSettingsForm extends ConfigFormBase {
// Instead of relying on `#attributes`, set a unique `#name`! // Instead of relying on `#attributes`, set a unique `#name`!
'#name' => 'remove_' . $unique_id, '#name' => 'remove_' . $unique_id,
]; ];
} }
else {
// Button to add another key-value pair. $form['doi_term_islandora_term_pairs'][$unique_id]['add_more'] = [
$form['add_more'] = [
'#type' => 'submit', '#type' => 'submit',
'#value' => $this->t('Add term'), '#value' => $this->t('Add term'),
'#submit' => ['::addMoreCallback'], '#submit' => ['::addMoreCallback'],
@ -234,6 +240,9 @@ final class DOIFieldSettingsForm extends ConfigFormBase {
'wrapper' => 'key-value-pairs-wrapper', 'wrapper' => 'key-value-pairs-wrapper',
], ],
]; ];
}
}
return parent::buildForm($form, $form_state); return parent::buildForm($form, $form_state);
} }
@ -268,26 +277,32 @@ final class DOIFieldSettingsForm extends ConfigFormBase {
*/ */
public function addMoreCallback(array &$form, FormStateInterface $form_state) { public function addMoreCallback(array &$form, FormStateInterface $form_state) {
// Retrieve existing key-value pairs. // Retrieve existing key-value pairs.
$doi_term_islandora_term_pairs = $form_state->get('doi_term_islandora_term_pairs') ?? []; // $doi_term_islandora_term_pairs = $form_state->get('doi_term_islandora_term_pairs') ?? [];.
// Get submitted values and merge with stored ones. // Get submitted values and merge with stored ones.
$user_input = $form_state->getUserInput(); $user_input = $form_state->getUserInput();
if (!empty($user_input['doi_term_islandora_term_pairs'])) { if (!empty($user_input['doi_term_islandora_term_pairs'])) {
foreach ($user_input['doi_term_islandora_term_pairs'] as $id => $values) { foreach ($user_input['doi_term_islandora_term_pairs'] as $id => $values) {
if (!isset($doi_term_islandora_term_pairs[$id])) { if ($values['key'] && $values['value']) {
$doi_term_islandora_term_pairs[$id] = $values; $doi_term_islandora_term_pairs[$id] = $values;
} }
} }
} }
$fresh_id = uniqid();
// Add a new empty entry with a unique ID. $blank = [
$unique_id = uniqid();
$doi_term_islandora_term_pairs[$unique_id] = [
'key' => '', 'key' => '',
'value' => '', 'value' => '',
'unique_id' => $unique_id, 'entry_id' => $fresh_id,
]; ];
$unique_id = uniqid();
if (isset($doi_term_islandora_term_pairs['initial'])) {
$new = [
$unique_id => $doi_term_islandora_term_pairs['initial'],
];
unset($doi_term_islandora_term_pairs['initial']);
$doi_term_islandora_term_pairs[$unique_id] = $new[$unique_id];
$doi_term_islandora_term_pairs[$unique_id]['entry_id'] = $unique_id;
}
$doi_term_islandora_term_pairs[$fresh_id] = $blank;
// Store the updated values. // Store the updated values.
$form_state->set('doi_term_islandora_term_pairs', $doi_term_islandora_term_pairs); $form_state->set('doi_term_islandora_term_pairs', $doi_term_islandora_term_pairs);
$form_state->set('entry_count', count($doi_term_islandora_term_pairs)); $form_state->set('entry_count', count($doi_term_islandora_term_pairs));
@ -313,7 +328,6 @@ final class DOIFieldSettingsForm extends ConfigFormBase {
if (isset($doi_term_islandora_term_pairs[$clicked_id])) { if (isset($doi_term_islandora_term_pairs[$clicked_id])) {
unset($doi_term_islandora_term_pairs[$clicked_id]); unset($doi_term_islandora_term_pairs[$clicked_id]);
} }
$count = count($doi_term_islandora_term_pairs);
$form_state->set('doi_term_islandora_term_pairs', $doi_term_islandora_term_pairs); $form_state->set('doi_term_islandora_term_pairs', $doi_term_islandora_term_pairs);
$form_state->set('entry_count', count($doi_term_islandora_term_pairs)); $form_state->set('entry_count', count($doi_term_islandora_term_pairs));
$form_state->setRebuild(); $form_state->setRebuild();

8
src/Form/DoiPrepopulateForm.php

@ -117,7 +117,11 @@ final class DoiPrepopulateForm extends FormBase {
foreach ($collections as $id => $collection) { foreach ($collections as $id => $collection) {
$options[$id] = $collection->label(); $options[$id] = $collection->label();
} }
$form['overview'] = [
'#type' => 'markup',
'#markup' => $this->t('Enter <strong>DOI</strong> to prepopulate a new Drupal node with values from Crossref.<br /><strong>Note:</strong> The new node will be in an unpublished state.'),
'#allowed_tags' => ['br', 'strong'],
];
$form['container'] = [ $form['container'] = [
'#type' => 'container', '#type' => 'container',
'#attributes' => ['class' => ['form-inline']], '#attributes' => ['class' => ['form-inline']],
@ -135,7 +139,7 @@ final class DoiPrepopulateForm extends FormBase {
]; ];
$form['container']['redirect'] = [ $form['container']['redirect'] = [
'#type' => 'select', '#type' => 'hidden',
'#title' => $this->t("After submission?"), '#title' => $this->t("After submission?"),
'#options' => [ '#options' => [
'edit' => $this->t('Edit after submission'), 'edit' => $this->t('Edit after submission'),

1
src/NodeBuilder.php

@ -73,6 +73,7 @@ final class NodeBuilder {
$field_settings['issue'] => $contents['issue'] ?? '', $field_settings['issue'] => $contents['issue'] ?? '',
$field_settings['volume'] => $contents['volume'] ?? '', $field_settings['volume'] => $contents['volume'] ?? '',
$field_settings['date_issued'] => $contents['created']['date-parts'][0][0] ?? '', $field_settings['date_issued'] => $contents['created']['date-parts'][0][0] ?? '',
'status' => 0,
]); ]);
// Optional fields. // Optional fields.

Loading…
Cancel
Save