From 97ef3133dae1ecb2608313631ebaefa554d8fdfa Mon Sep 17 00:00:00 2001 From: Akanksha Singh Date: Fri, 15 Sep 2023 17:33:17 +0530 Subject: [PATCH 01/15] Add link for fields mapped from original entities --- src/Controller/IslandoraCitationsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Controller/IslandoraCitationsController.php b/src/Controller/IslandoraCitationsController.php index d70ba26..512bae3 100644 --- a/src/Controller/IslandoraCitationsController.php +++ b/src/Controller/IslandoraCitationsController.php @@ -53,7 +53,7 @@ public function provideArguments($node_type) { foreach ($fields as $field_definition) { if (!empty($field_definition->getTargetBundle())) { - $data = $field_definition->getThirdPartySetting('islandora_citations', 'csl_field'); + $data = $field_definition->getThirdPartySetting('islandora_citations', 'csl_field') ?? $field_definition->getThirdPartySetting('islandora_citations', 'use_entity_checkbox'); $rows[] = [$field_definition->getName(), $data ? implode(',', $data) : '-', [ From 4b5d351fba165d0f2c2ffadcd6ba4e8f15cdf0b1 Mon Sep 17 00:00:00 2001 From: Akanksha Singh Date: Fri, 15 Sep 2023 17:38:59 +0530 Subject: [PATCH 02/15] Add link for fields mapped from original entities --- .../IslandoraCitationsController.php | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/Controller/IslandoraCitationsController.php b/src/Controller/IslandoraCitationsController.php index 512bae3..e436677 100644 --- a/src/Controller/IslandoraCitationsController.php +++ b/src/Controller/IslandoraCitationsController.php @@ -53,17 +53,18 @@ public function provideArguments($node_type) { foreach ($fields as $field_definition) { if (!empty($field_definition->getTargetBundle())) { - $data = $field_definition->getThirdPartySetting('islandora_citations', 'csl_field') ?? $field_definition->getThirdPartySetting('islandora_citations', 'use_entity_checkbox'); - $rows[] = [$field_definition->getName(), - $data ? implode(',', $data) : '-', - [ - 'data' => new FormattableMarkup('@name', - [ - ':link' => 'fields/node.' . $node_type . '.' . $field_definition->getName(), - '@name' => $this->t('Edit'), - ]), - ], - ]; + $data = $field_definition->getThirdPartySetting('islandora_citations', 'csl_field'); + $dataForMappedEntities = $field_definition->getThirdPartySetting('islandora_citations', 'use_entity_checkbox'); + $rows[] = [$field_definition->getName(), + $data ? implode(',', $data) : ($dataForMappedEntities ? 'Mapped from entity' : 'Not mapped'), + [ + 'data' => new FormattableMarkup('@name', + [ + ':link' => 'fields/node.' . $node_type . '.' . $field_definition->getName(), + '@name' => $this->t('Edit'), + ]), + ], + ]; } } return [ From 66084fe7511b786fcc56a23b7c40876b268dced9 Mon Sep 17 00:00:00 2001 From: Akanksha Singh Date: Fri, 15 Sep 2023 17:40:30 +0530 Subject: [PATCH 03/15] Add link for fields mapped from original entities --- src/Controller/IslandoraCitationsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Controller/IslandoraCitationsController.php b/src/Controller/IslandoraCitationsController.php index e436677..15e02b8 100644 --- a/src/Controller/IslandoraCitationsController.php +++ b/src/Controller/IslandoraCitationsController.php @@ -56,7 +56,7 @@ public function provideArguments($node_type) { $data = $field_definition->getThirdPartySetting('islandora_citations', 'csl_field'); $dataForMappedEntities = $field_definition->getThirdPartySetting('islandora_citations', 'use_entity_checkbox'); $rows[] = [$field_definition->getName(), - $data ? implode(',', $data) : ($dataForMappedEntities ? 'Mapped from entity' : 'Not mapped'), + $data ? implode(',', $data) : ($dataForMappedEntities ? 'Mapped from entity' : '-'), [ 'data' => new FormattableMarkup('@name', [ From 2cb643136abb6b32cad765a7c2904d8c7649fe14 Mon Sep 17 00:00:00 2001 From: Akanksha Singh Date: Fri, 15 Sep 2023 18:06:52 +0530 Subject: [PATCH 04/15] FDR-422: Show labels instead of ids FDR-422: code sniffer fix Show labels instead of ids --- src/Controller/IslandoraCitationsController.php | 6 +++--- src/IslandoraCitationsHelper.php | 9 ++++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Controller/IslandoraCitationsController.php b/src/Controller/IslandoraCitationsController.php index 15e02b8..47bd7ba 100644 --- a/src/Controller/IslandoraCitationsController.php +++ b/src/Controller/IslandoraCitationsController.php @@ -55,8 +55,8 @@ public function provideArguments($node_type) { if (!empty($field_definition->getTargetBundle())) { $data = $field_definition->getThirdPartySetting('islandora_citations', 'csl_field'); $dataForMappedEntities = $field_definition->getThirdPartySetting('islandora_citations', 'use_entity_checkbox'); - $rows[] = [$field_definition->getName(), - $data ? implode(',', $data) : ($dataForMappedEntities ? 'Mapped from entity' : '-'), + $rows[] = [$field_definition->getName(), + $data ? implode(',', $data) : ($dataForMappedEntities ? 'Mapped from entity' : '-'), [ 'data' => new FormattableMarkup('@name', [ @@ -64,7 +64,7 @@ public function provideArguments($node_type) { '@name' => $this->t('Edit'), ]), ], - ]; + ]; } } return [ diff --git a/src/IslandoraCitationsHelper.php b/src/IslandoraCitationsHelper.php index 4507bb5..34183ba 100644 --- a/src/IslandoraCitationsHelper.php +++ b/src/IslandoraCitationsHelper.php @@ -81,7 +81,14 @@ public function loadCslJsonSchema() { * Cet citations styles from config entity. */ public function getCitationEntityList() { - return $this->citationsStorage->getQuery()->execute(); + $citationIds = $this->citationsStorage->getQuery()->execute(); + $citationEntities = $this->citationsStorage->loadMultiple($citationIds); + $citationList = []; + foreach ($citationEntities as $citationEntity) { + $citationList[$citationEntity->id()] = $citationEntity->label(); + } + + return $citationList; } /** From 2301c9379a509fc7bb40d612f9fef30ec95497b2 Mon Sep 17 00:00:00 2001 From: Akanksha Singh Date: Wed, 11 Oct 2023 20:40:48 +0530 Subject: [PATCH 05/15] FDR-333: Fix bug with citations, update readme --- README.md | 53 ++++++++++++++++++++++++++++++++++--- img.png | Bin 0 -> 53873 bytes islandora_citations.module | 23 +++++++++++++--- 3 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 img.png diff --git a/README.md b/README.md index 3338403..eae3312 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,44 @@ Display citations for Islandora Objects. +## Introduction + +The module enables users to add multiple citation style languages, +map csl fields to drupal fields and render citations using these. + +### Citation Type Field +A new field, 'field_csl_type' is added which references CSL type taxonomy. This is a required field +for rendering citations and derives the citation display. + +### Citation style languages +An interface is provided to add citation style languages either by pasting the csl in the provided +text-area or by uploading a csl file. + +Three default citation style languages are provided with the module - +APA +MLA +Chicago Manual of Style + +### Mapping CSL fields +Any drupal field can be mapped to a csl field with third party settings. Edit any field to update +the citations mapping section. + +#### Entity Reference and Entity Reference Revision fields +- Users are able to map csl fields from the referenced entity by selecting the map from entity option. + +- If a direct mapping is selected for the entity reference field, the title of the referenced entity +will be mapped to the selected csl value. This option is not available for paragraphs. + +### Typed Relation fields +Typed relations fields are mapped directly from their relations. For example, author relation would get mapped to author csl field. + +### Multi Value fields +Multi value fields are displayed as comma separated strings +For multi-value date fields, only the first value is considered and the rest are ignore. + +### Citations display block +A block is provided which allows users to select a default CSL to render the citations in. + ## Installation Install as @@ -9,12 +47,21 @@ Install as ## Configuration - -// Todo +Add a new citations style language - /admin/structure/islandora-citations +Configure the citations block and set a default CSL - admin/structure/block/manage/displaycitations +Map csl fields to entity fields - admin/structure/types/manage//fields/ +For example: /admin/structure/types/manage/islandora_object/fields/node.islandora_object.field_member_of ## Usage -// Todo +Run the migration for csl type taxonomy - `drush migrate:import csl_type ` +Place the citations block from the block layout section. +Map the relevant drupal fields to csl fields. + +## Known Issues + +Module is under active development and there are some known issues: + - Normalisation of date range fields ## Maintainers/Sponsors diff --git a/img.png b/img.png new file mode 100644 index 0000000000000000000000000000000000000000..69aebfa155ef9d0dada9e304fbe2c53d5bcbd507 GIT binary patch literal 53873 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 + $form['islandora_citations'] = [ + '#title' => 'Citation Settings', + '#type' => 'fieldset' + ]; + // For typed relation, there is no separate mapping. // It can just be enabled and the mapping will be based on rel type. if ($entity->getType() == 'typed_relation') { - $form['third_party_settings']['islandora_citations']['use_entity_checkbox'] = [ + $form['islandora_citations']['use_entity_checkbox'] = [ '#title' => t('Map CSL from relation type'), '#description' => t('Enable mapping of this typed relation field from the selected relation type. Rel types, author and creator both get mapped to author.'), '#type' => 'checkbox', @@ -35,7 +40,7 @@ function islandora_citations_form_field_config_edit_form_alter(&$form, FormState // For ER fields, we allow both mapping selected from entity // or mapping just the title of the ER entity. if ($entity->getType() == 'entity_reference_revisions' || $entity->getType() == 'entity_reference') { - $form['third_party_settings']['islandora_citations']['use_entity_checkbox'] = [ + $form['islandora_citations']['use_entity_checkbox'] = [ '#title' => t('Map from referenced entity'), '#description' => \t('If this field is enabled, the csl mapping will be taken from the referenced entity. Make sure you map fields in the referenced entity before enabling this.'), '#type' => 'checkbox', @@ -46,7 +51,7 @@ function islandora_citations_form_field_config_edit_form_alter(&$form, FormState // We do not allow direct mapping for typed relation or ERR. if (!($entity->getType() === 'entity_reference_revisions' || $entity->getType() === 'typed_relation')) { - $form['third_party_settings']['islandora_citations']['csl_field'] = [ + $form['islandora_citations']['csl_field'] = [ '#type' => 'select', '#title' => \t('CSL Field'), '#description' => \t('Select which CSL value this field should be mapped to.'), @@ -57,10 +62,22 @@ function islandora_citations_form_field_config_edit_form_alter(&$form, FormState ]; } + $form['#entity_builders'][] = 'islandora_citations_field_config_edit_form_form_builder'; return $form; } } + +/** + * Entity builder for the contact form edit form with third party options. + * + * @see islandora_citations_field_config_edit_form_alter() + */ +function islandora_citations_field_config_edit_form_form_builder($entity_type, \Drupal\Core\Entity\EntityInterface $configEntity, &$form, FormStateInterface $form_state) { + $configEntity->setThirdPartySetting('islandora_citations', 'csl_field', $form_state->getValue('csl_field')); + $configEntity->setThirdPartySetting('islandora_citations', 'use_entity_checkbox', $form_state->getValue('use_entity_checkbox')); +} + /** * Implements hook_theme(). */ From 072e875f6a59246609303fea6b7b88ab3664ae08 Mon Sep 17 00:00:00 2001 From: Akanksha Singh Date: Wed, 11 Oct 2023 20:42:31 +0530 Subject: [PATCH 06/15] FDR-333: Fix bug with citations, update readme --- islandora_citations.module | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/islandora_citations.module b/islandora_citations.module index c951081..38c054f 100644 --- a/islandora_citations.module +++ b/islandora_citations.module @@ -5,6 +5,7 @@ * General hook implementations. */ +use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Form\FormStateInterface; /** @@ -20,7 +21,7 @@ function islandora_citations_form_field_config_edit_form_alter(&$form, FormState $form['islandora_citations'] = [ '#title' => 'Citation Settings', - '#type' => 'fieldset' + '#type' => 'fieldset', ]; // For typed relation, there is no separate mapping. @@ -67,13 +68,12 @@ function islandora_citations_form_field_config_edit_form_alter(&$form, FormState } } - /** * Entity builder for the contact form edit form with third party options. * * @see islandora_citations_field_config_edit_form_alter() */ -function islandora_citations_field_config_edit_form_form_builder($entity_type, \Drupal\Core\Entity\EntityInterface $configEntity, &$form, FormStateInterface $form_state) { +function islandora_citations_field_config_edit_form_form_builder($entity_type, EntityInterface $configEntity, &$form, FormStateInterface $form_state) { $configEntity->setThirdPartySetting('islandora_citations', 'csl_field', $form_state->getValue('csl_field')); $configEntity->setThirdPartySetting('islandora_citations', 'use_entity_checkbox', $form_state->getValue('use_entity_checkbox')); } From 7d859fe0f1e24756d3e2eeb62d8632ffea898a27 Mon Sep 17 00:00:00 2001 From: Akanksha Singh Date: Wed, 11 Oct 2023 20:44:35 +0530 Subject: [PATCH 07/15] FDR-333: Fix typo --- islandora_citations.module | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/islandora_citations.module b/islandora_citations.module index 38c054f..090b006 100644 --- a/islandora_citations.module +++ b/islandora_citations.module @@ -69,7 +69,7 @@ function islandora_citations_form_field_config_edit_form_alter(&$form, FormState } /** - * Entity builder for the contact form edit form with third party options. + * Entity builder for the config edit form with third party options. * * @see islandora_citations_field_config_edit_form_alter() */ From 357f26b823e91f198b87c8e81803f0293c97dbfa Mon Sep 17 00:00:00 2001 From: Akanksha Singh Date: Wed, 11 Oct 2023 20:57:19 +0530 Subject: [PATCH 08/15] FDR-333: Fix typo --- README.md | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index eae3312..14e5251 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,13 @@ The module enables users to add multiple citation style languages, map csl fields to drupal fields and render citations using these. ### Citation Type Field -A new field, 'field_csl_type' is added which references CSL type taxonomy. This is a required field -for rendering citations and derives the citation display. +A new field, 'field_csl_type' is added which references CSL type taxonomy. +This is a required field for rendering citations +and derives the citation display. ### Citation style languages -An interface is provided to add citation style languages either by pasting the csl in the provided -text-area or by uploading a csl file. +An interface is provided to add citation style languages either by pasting +the csl in the provided text-area or by uploading a csl file. Three default citation style languages are provided with the module - APA @@ -21,24 +22,29 @@ MLA Chicago Manual of Style ### Mapping CSL fields -Any drupal field can be mapped to a csl field with third party settings. Edit any field to update -the citations mapping section. +Any drupal field can be mapped to a csl field with third party settings. +Edit any field to update the citations mapping section. #### Entity Reference and Entity Reference Revision fields -- Users are able to map csl fields from the referenced entity by selecting the map from entity option. +- Users are able to map csl fields from the referenced entity +by selecting the map from entity option. -- If a direct mapping is selected for the entity reference field, the title of the referenced entity -will be mapped to the selected csl value. This option is not available for paragraphs. +- If a direct mapping is selected for the entity reference field, +the title of the referenced entity will be mapped to the selected csl value. +This option is not available for paragraphs. ### Typed Relation fields -Typed relations fields are mapped directly from their relations. For example, author relation would get mapped to author csl field. +Typed relations fields are mapped directly from their relations. +For example, author relation would get mapped to author csl field. ### Multi Value fields Multi value fields are displayed as comma separated strings -For multi-value date fields, only the first value is considered and the rest are ignore. +For multi-value date fields, only the first value is considered +and the rest are ignored. ### Citations display block -A block is provided which allows users to select a default CSL to render the citations in. +A block is provided which allows users to select a +default CSL to render the citations in. ## Installation @@ -47,9 +53,14 @@ Install as ## Configuration -Add a new citations style language - /admin/structure/islandora-citations -Configure the citations block and set a default CSL - admin/structure/block/manage/displaycitations -Map csl fields to entity fields - admin/structure/types/manage//fields/ +Add a new citations style language +/admin/structure/islandora-citations + +Configure the citations block and set a default CSL +admin/structure/block/manage/displaycitations + +Map csl fields to entity fields +admin/structure/types/manage//fields/ For example: /admin/structure/types/manage/islandora_object/fields/node.islandora_object.field_member_of ## Usage From 197a480d66687a62e154e7c284e7cf3829b0a7ab Mon Sep 17 00:00:00 2001 From: Noel Chiasson Date: Fri, 13 Oct 2023 10:16:44 -0300 Subject: [PATCH 09/15] Updating csl_type migration --- migrations/csl_type.yml | 137 ++++++++++++++-------------------------- 1 file changed, 46 insertions(+), 91 deletions(-) diff --git a/migrations/csl_type.yml b/migrations/csl_type.yml index 7e56e2c..6fd1bb0 100644 --- a/migrations/csl_type.yml +++ b/migrations/csl_type.yml @@ -1,101 +1,56 @@ id: csl_type label: CSL Type. migration_tags: - - taxonomy + - dgi_taxonomy migration_group: islandora source: plugin: embedded_data data_rows: - - - name: 'article' - - - name: 'article-journal' - - - name: 'article-magazine' - - - name: 'article-newspaper' - - - name: 'bill' - - - name: 'book' - - - name: 'broadcast' - - - name: 'chapter' - - - name: 'classic' - - - name: 'collection' - - - name: 'dataset' - - - name: 'document' - - - name: 'entry' - - - name: 'entry-dictionary' - - - name: 'entry-encyclopedia' - - - name: 'event' - - - name: 'figure' - - - name: 'graphic' - - - name: 'hearing' - - - name: 'interview' - - - name: 'legal_case' - - - name: 'legislation' - - - name: 'manuscript' - - - name: 'map' - - - name: 'motion_picture' - - - name: 'musical_score' - - - name: 'pamphlet' - - - name: 'paper-conference' - - - name: 'patent' - - - name: 'performance' - - - name: 'periodical' - - - name: 'personal_communication' - - - name: 'post' - - - name: 'post-weblog' - - - name: 'regulation' - - - name: 'report' - - - name: 'review' - - - name: 'review-book' - - - name: 'software' - - - name: 'song' - - - name: 'speech' - - - name: 'standard' - - - name: 'thesis' - - - name: 'treaty' - - - name: 'Webpage' + - name: 'article' + - name: 'article-journal' + - name: 'article-magazine' + - name: 'article-newspaper' + - name: 'bill' + - name: 'book' + - name: 'broadcast' + - name: 'chapter' + - name: 'classic' + - name: 'collection' + - name: 'dataset' + - name: 'document' + - name: 'entry' + - name: 'entry-dictionary' + - name: 'entry-encyclopedia' + - name: 'event' + - name: 'figure' + - name: 'graphic' + - name: 'hearing' + - name: 'interview' + - name: 'legal_case' + - name: 'legislation' + - name: 'manuscript' + - name: 'map' + - name: 'motion_picture' + - name: 'musical_score' + - name: 'pamphlet' + - name: 'paper-conference' + - name: 'patent' + - name: 'performance' + - name: 'periodical' + - name: 'personal_communication' + - name: 'post' + - name: 'post-weblog' + - name: 'regulation' + - name: 'report' + - name: 'review' + - name: 'review-book' + - name: 'software' + - name: 'song' + - name: 'speech' + - name: 'standard' + - name: 'thesis' + - name: 'treaty' + - name: 'webpage' ids: name: type: string From f72cdaf90064dbef4e162af0a658f35a35fa316e Mon Sep 17 00:00:00 2001 From: Noel Chiasson <53783039+nchiasson-dgi@users.noreply.github.com> Date: Thu, 19 Oct 2023 11:25:37 -0300 Subject: [PATCH 10/15] Fixing issue with default citation form reference (#53) --- src/Form/SelectCslForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Form/SelectCslForm.php b/src/Form/SelectCslForm.php index b66882c..e0e9f87 100644 --- a/src/Form/SelectCslForm.php +++ b/src/Form/SelectCslForm.php @@ -77,7 +77,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { } } // Check default csl exist or not. - if (!in_array($default_csl, $cslItems)) { + if (!array_key_exists($default_csl, $cslItems)) { $default_csl = array_values($cslItems)[0]; } $csl = !empty($default_csl) ? $this->getDefaultCitation($default_csl) : ''; From e82e23dd4042924d6f25f8fe542ac10b71d68085 Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Wed, 1 Nov 2023 11:55:25 -0300 Subject: [PATCH 11/15] Cannot be compatible with both, due to normalization type hints. --- islandora_citations.info.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/islandora_citations.info.yml b/islandora_citations.info.yml index 0a6d22f..09de850 100644 --- a/islandora_citations.info.yml +++ b/islandora_citations.info.yml @@ -2,7 +2,7 @@ name: Islandora citations type: module description: Provides a service to manage citations. package: Custom -core_version_requirement: ^9 || ^10 +core_version_requirement: ^9 dependencies: - drupal:field_permissions - drupal:node From ae5507570c6ba13ba6e9193e31e0e663eb60fcc2 Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Wed, 1 Nov 2023 11:58:31 -0300 Subject: [PATCH 12/15] Bump up to D10. --- islandora_citations.info.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/islandora_citations.info.yml b/islandora_citations.info.yml index 09de850..47f2714 100644 --- a/islandora_citations.info.yml +++ b/islandora_citations.info.yml @@ -2,7 +2,7 @@ name: Islandora citations type: module description: Provides a service to manage citations. package: Custom -core_version_requirement: ^9 +core_version_requirement: ^10 dependencies: - drupal:field_permissions - drupal:node From 8057df5dfa07dd27024070aab9783cd53c133879 Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Wed, 1 Nov 2023 12:05:26 -0300 Subject: [PATCH 13/15] Fix up method signature. --- src/Normalizer/NormalizerBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Normalizer/NormalizerBase.php b/src/Normalizer/NormalizerBase.php index 0e3b9a8..36572d5 100644 --- a/src/Normalizer/NormalizerBase.php +++ b/src/Normalizer/NormalizerBase.php @@ -18,7 +18,7 @@ abstract class NormalizerBase extends SerializationNormalizerBase implements Nor /** * {@inheritdoc} */ - public function supportsNormalization($data, $format = NULL) { + public function supportsNormalization($data, ?string $format = NULL, array $context = []): bool { return $format === static::FORMAT && parent::supportsNormalization($data, $format); } From 2255f109ddf670539cb262e58d52fe91a3f1e493 Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Wed, 1 Nov 2023 12:05:38 -0300 Subject: [PATCH 14/15] Fix up some misc possibly undefined array vars. --- src/Controller/IslandoraCitationsController.php | 2 ++ src/Normalizer/DateTimeNormalizer.php | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Controller/IslandoraCitationsController.php b/src/Controller/IslandoraCitationsController.php index 47bd7ba..2576628 100644 --- a/src/Controller/IslandoraCitationsController.php +++ b/src/Controller/IslandoraCitationsController.php @@ -50,6 +50,7 @@ public function provideArguments($node_type) { ]; $fields = $this->entityFieldManager->getFieldDefinitions('node', $node_type); + $rows = []; foreach ($fields as $field_definition) { if (!empty($field_definition->getTargetBundle())) { @@ -93,6 +94,7 @@ public function paragraphsArguments($paragraphs_type) { ]; $fields = $this->entityFieldManager->getFieldDefinitions('paragraph', $paragraphs_type->id()); + $rows = []; foreach ($fields as $field_definition) { if (!empty($field_definition->getTargetBundle())) { $data = $field_definition->getThirdPartySetting('islandora_citations', 'csl_field'); diff --git a/src/Normalizer/DateTimeNormalizer.php b/src/Normalizer/DateTimeNormalizer.php index ffc5ed5..1c96e6f 100644 --- a/src/Normalizer/DateTimeNormalizer.php +++ b/src/Normalizer/DateTimeNormalizer.php @@ -57,9 +57,13 @@ public function normalize($datetime, $format = NULL, array $context = []) { assert($datetime instanceof DateTimeInterface); $drupal_date_time = $datetime->getDateTime()->setTimezone($this->getNormalizationTimezone()); if ($drupal_date_time === NULL) { - return $drupal_date_time; + return NULL; } + $date = $this->dateFormatter->format($drupal_date_time->getTimestamp(), 'custom', 'Y-m-d'); + + $element = []; + foreach ($context['csl-map'] as $cslField) { $element[$cslField] = $date; } From f97ab8c556d49fbfb3c9bc5ca6c17273f0a9657d Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Fri, 3 Nov 2023 09:55:09 -0300 Subject: [PATCH 15/15] Pass along the `$context` to the parent call. --- src/Normalizer/NormalizerBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Normalizer/NormalizerBase.php b/src/Normalizer/NormalizerBase.php index 36572d5..42e83d3 100644 --- a/src/Normalizer/NormalizerBase.php +++ b/src/Normalizer/NormalizerBase.php @@ -19,7 +19,7 @@ abstract class NormalizerBase extends SerializationNormalizerBase implements Nor * {@inheritdoc} */ public function supportsNormalization($data, ?string $format = NULL, array $context = []): bool { - return $format === static::FORMAT && parent::supportsNormalization($data, $format); + return $format === static::FORMAT && parent::supportsNormalization($data, $format, $context); } /**