Browse Source

Added null check

main
astanley 4 months ago
parent
commit
2fb4836184
  1. 19
      src/Form/DoiPrepopulateForm.php
  2. 5
      src/NodeBuilder.php

19
src/Form/DoiPrepopulateForm.php

@ -12,7 +12,7 @@ use Drupal\doi_prefill\CrossrefApiReader;
use Drupal\doi_prefill\NodeBuilder; use Drupal\doi_prefill\NodeBuilder;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\Core\Render\Markup; use Drupal\Core\Render\Markup;
use Drupal\Core\Messenger\MessengerInterface;
/** /**
* Provides a DOI Prefill form. * Provides a DOI Prefill form.
*/ */
@ -39,6 +39,13 @@ final class DoiPrepopulateForm extends FormBase {
*/ */
protected $entityTypeManager; protected $entityTypeManager;
/**
* The messenger service.
*
* @var \Drupal\Core\Messenger\MessengerInterface
*/
protected $messenger;
/** /**
* The constructor. * The constructor.
* *
@ -49,10 +56,11 @@ final class DoiPrepopulateForm extends FormBase {
* @param Drupal\doi_prefill\NodeBuilder $nodeBuilder * @param Drupal\doi_prefill\NodeBuilder $nodeBuilder
* The NodeBuilder. * The NodeBuilder.
*/ */
public function __construct(CrossrefApiReader $doiApi, EntityTypeManagerInterface $entityTypeManager, NodeBuilder $nodeBuilder) { public function __construct(CrossrefApiReader $doiApi, EntityTypeManagerInterface $entityTypeManager, NodeBuilder $nodeBuilder, MessengerInterface $messenger) {
$this->doiApi = $doiApi; $this->doiApi = $doiApi;
$this->entityTypeManager = $entityTypeManager; $this->entityTypeManager = $entityTypeManager;
$this->nodeBuilder = $nodeBuilder; $this->nodeBuilder = $nodeBuilder;
$this->messenger = $messenger;
} }
/** /**
@ -65,6 +73,7 @@ final class DoiPrepopulateForm extends FormBase {
$container->get('doi_prefill.crossref_api_reader'), $container->get('doi_prefill.crossref_api_reader'),
$container->get('entity_type.manager'), $container->get('entity_type.manager'),
$container->get('doi_prefill.node_builder'), $container->get('doi_prefill.node_builder'),
$container->get('messenger'),
); );
} }
@ -167,8 +176,10 @@ final class DoiPrepopulateForm extends FormBase {
$doi = trim($form_state->getValue('doi')); $doi = trim($form_state->getValue('doi'));
$collection = $form_state->getValue('collection'); $collection = $form_state->getValue('collection');
$nid = $this->nodeBuilder->buildNode($collection, $doi); $nid = $this->nodeBuilder->buildNode($collection, $doi);
if (empty($nid)) {
if ($form_state->getValue('redirect') == 'edit') { $this->messenger->addWarning($this->t('Crossref returned no information.'));
}
else {
$destination = "/node/{$nid}/edit"; $destination = "/node/{$nid}/edit";
$response = new RedirectResponse($destination); $response = new RedirectResponse($destination);
$response->send(); $response->send();

5
src/NodeBuilder.php

@ -37,6 +37,9 @@ final class NodeBuilder {
*/ */
public function buildNode($collection, $doi) { public function buildNode($collection, $doi) {
$contents = $this->doiApi->getWork($doi); $contents = $this->doiApi->getWork($doi);
if (!$contents) {
return [];
}
$config = $this->config->get('doi_prefill.settings'); $config = $this->config->get('doi_prefill.settings');
$field_settings = $config->get('field_settings'); $field_settings = $config->get('field_settings');
$mapping = $config->get('doi_term_islandora_term_pairs'); $mapping = $config->get('doi_term_islandora_term_pairs');
@ -47,7 +50,7 @@ final class NodeBuilder {
// Build typed relations. // Build typed relations.
$typed_relations = []; $typed_relations = [];
$vid = 'person'; $vid = 'coar_resource_types';
foreach ($contents['author'] as $author) { foreach ($contents['author'] as $author) {
$author_term = "{$author['family']}"; $author_term = "{$author['family']}";
if (isset($author['given'])) { if (isset($author['given'])) {

Loading…
Cancel
Save