You are here

class BibtexReferenceNormalizer in Bibliography & Citation 8

Same name and namespace in other branches
  1. 2.0.x modules/bibcite_bibtex/src/Normalizer/BibtexReferenceNormalizer.php \Drupal\bibcite_bibtex\Normalizer\BibtexReferenceNormalizer

Normalizes/denormalizes reference entity to BibTeX format.

Hierarchy

Expanded class hierarchy of BibtexReferenceNormalizer

1 string reference to 'BibtexReferenceNormalizer'
bibcite_bibtex.services.yml in modules/bibcite_bibtex/bibcite_bibtex.services.yml
modules/bibcite_bibtex/bibcite_bibtex.services.yml
1 service uses BibtexReferenceNormalizer
bibcite_bibtex.normalizer.reference in modules/bibcite_bibtex/bibcite_bibtex.services.yml
Drupal\bibcite_bibtex\Normalizer\BibtexReferenceNormalizer

File

modules/bibcite_bibtex/src/Normalizer/BibtexReferenceNormalizer.php, line 13

Namespace

Drupal\bibcite_bibtex\Normalizer
View source
class BibtexReferenceNormalizer extends ReferenceNormalizerBase {

  /**
   * {@inheritdoc}
   */
  public function denormalize($data, $class, $format = NULL, array $context = []) {
    $contributors = [];
    $contributor_key = $this
      ->getContributorKey();
    foreach ([
      $contributor_key,
      'editor',
    ] as $role) {
      if (!empty($data[$role])) {
        foreach ((array) $data[$role] as $author_name) {
          $contributors[] = [
            'name' => $author_name,
            'role' => $role,
          ];
        }
        unset($data[$role]);
      }
    }

    /* @var \Drupal\bibcite_entity\Entity\Reference $entity */
    $entity = parent::denormalize($data, $class, $format, $context);
    if (!empty($contributors)) {
      $author_field = $entity
        ->get('author');
      foreach ($contributors as $contributor) {
        $author = $this->serializer
          ->denormalize([
          'name' => [
            [
              'value' => $contributor['name'],
            ],
          ],
        ], Contributor::class, $format, $context);
        $author_field
          ->appendItem([
          'entity' => $author,
          'role' => $contributor['role'],
        ]);
      }
    }
    return $entity;
  }

  /**
   * {@inheritdoc}
   */
  public function normalize($reference, $format = NULL, array $context = []) {

    /** @var \Drupal\bibcite_entity\Entity\ReferenceInterface $reference */
    $attributes = [];
    $attributes[$this->typeKey] = $this
      ->convertEntityType($reference
      ->bundle(), $format);
    if ($keywords = $this
      ->extractKeywords($reference
      ->get('keywords'))) {
      $attributes[$this->keywordKey] = $keywords;
    }
    $contributors = $this
      ->extractContributors($reference
      ->get('author'));
    if (isset($contributors['author'])) {
      $attributes[$this->contributorKey] = $contributors['author'];
    }
    if (isset($contributors['editor'])) {
      $attributes['editor'] = $contributors['editor'];
    }
    $attributes += $this
      ->extractFields($reference, $format);
    return $attributes;
  }

  /**
   * {@inheritdoc}
   */
  protected function extractFields(ReferenceInterface $reference, $format) {
    $attributes = parent::extractFields($reference, $format);
    $attributes['title'] = $this
      ->extractScalar($reference
      ->get('title'));
    $attributes['reference'] = $reference
      ->id();
    return $attributes;
  }

  /**
   * Extract contributors values from field.
   *
   * @param \Drupal\Core\Field\FieldItemListInterface $field_item_list
   *   List of field items.
   *
   * @return array
   *   Contributors in BibTeX format.
   */
  private function extractContributors(FieldItemListInterface $field_item_list) {
    $contributors = [];
    foreach ($field_item_list as $field) {
      $role = $field
        ->get('role')
        ->getValue() === 'editor' ? 'editor' : 'author';
      $contributors[$role][] = $field->entity
        ->getName();
    }
    return $contributors;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BibtexReferenceNormalizer::denormalize public function Denormalizes data back into an object of the given class. Overrides ReferenceNormalizerBase::denormalize
BibtexReferenceNormalizer::extractContributors private function Extract contributors values from field.
BibtexReferenceNormalizer::extractFields protected function Extract fields values from reference entity. Overrides ReferenceNormalizerBase::extractFields
BibtexReferenceNormalizer::normalize public function Normalizes an object into a set of arrays/scalars. Overrides ReferenceNormalizerBase::normalize
CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY constant Name of key for bubbling cacheability metadata via serialization context.
FieldableEntityNormalizerTrait::$entityFieldManager protected property The entity field manager.
FieldableEntityNormalizerTrait::$entityTypeManager protected property The entity type manager. 1
FieldableEntityNormalizerTrait::$entityTypeRepository protected property The entity type repository.
FieldableEntityNormalizerTrait::constructValue protected function Build the field item value using the incoming data. 7
FieldableEntityNormalizerTrait::denormalizeFieldData protected function Denormalizes entity data by denormalizing each field individually.
FieldableEntityNormalizerTrait::determineEntityTypeId protected function Determines the entity type ID to denormalize as.
FieldableEntityNormalizerTrait::extractBundleData protected function Denormalizes the bundle property so entity creation can use it.
FieldableEntityNormalizerTrait::getEntityFieldManager protected function Returns the entity field manager.
FieldableEntityNormalizerTrait::getEntityTypeDefinition protected function Gets the entity type definition.
FieldableEntityNormalizerTrait::getEntityTypeManager protected function Returns the entity type manager.
FieldableEntityNormalizerTrait::getEntityTypeRepository protected function Returns the entity type repository.
NormalizerBase::addCacheableDependency protected function Adds cacheability if applicable.
NormalizerBase::checkFormat protected function Checks if the provided format is supported by this normalizer. 2
NormalizerBase::supportsDenormalization public function Implements \Symfony\Component\Serializer\Normalizer\DenormalizerInterface::supportsDenormalization() 1
NormalizerBase::supportsNormalization public function Checks whether the given class is supported for normalization by this normalizer. 1
ReferenceNormalizerBase::$configFactory protected property Configuration factory service.
ReferenceNormalizerBase::$contributorKey public property Format contributor key.
ReferenceNormalizerBase::$defaultType public property Default publication type. Will be assigned for types without mapping.
ReferenceNormalizerBase::$fieldsMapping protected property Mapping between bibcite_entity and format fields.
ReferenceNormalizerBase::$format protected property The format that this Normalizer supports. Overrides NormalizerBase::$format
ReferenceNormalizerBase::$keywordKey public property Format keyword key.
ReferenceNormalizerBase::$supportedInterfaceOrClass protected property The interface or class that this Normalizer supports. Overrides EntityNormalizer::$supportedInterfaceOrClass
ReferenceNormalizerBase::$typeKey public property Format type key.
ReferenceNormalizerBase::$typesMapping protected property Mapping between bibcite_entity and format publication types.
ReferenceNormalizerBase::convertEntityType protected function Convert publication type to format type.
ReferenceNormalizerBase::convertFormatType protected function Convert format type to publication type.
ReferenceNormalizerBase::convertKeys protected function Convert format keys to Bibcite entity keys and filter non-mapped.
ReferenceNormalizerBase::DEFAULT_REF_TYPE constant Default reference type. Will be assigned for types without mapping.
ReferenceNormalizerBase::extractAuthors protected function Extract authors values from field. 1
ReferenceNormalizerBase::extractKeywords protected function Extract keywords labels from field.
ReferenceNormalizerBase::extractScalar protected function Extract scalar value.
ReferenceNormalizerBase::getContributorKey protected function Get format contributor key.
ReferenceNormalizerBase::getKeywordKey protected function Get format keyword key.
ReferenceNormalizerBase::getTypeKey protected function Get format type key.
ReferenceNormalizerBase::setFormat public function Format setter for DI calls.
ReferenceNormalizerBase::__construct public function Construct new BibliographyNormalizer object. Overrides EntityNormalizer::__construct