You are here

class EncryptedFieldValueManager in Field Encryption 8.2

Manager containing common functions to manage EncryptedFieldValue entities.

Hierarchy

Expanded class hierarchy of EncryptedFieldValueManager

1 file declares its use of EncryptedFieldValueManager
EncryptedFieldValueManagerTest.php in tests/src/Unit/EncryptedFieldValueManagerTest.php
Contains \Drupal\Tests\field_encrypt\Unit\EncryptedFieldValueManagerTest.
1 string reference to 'EncryptedFieldValueManager'
field_encrypt.services.yml in ./field_encrypt.services.yml
field_encrypt.services.yml
1 service uses EncryptedFieldValueManager
field_encrypt.encrypted_field_value_manager in ./field_encrypt.services.yml
Drupal\field_encrypt\EncryptedFieldValueManager

File

src/EncryptedFieldValueManager.php, line 13

Namespace

Drupal\field_encrypt
View source
class EncryptedFieldValueManager implements EncryptedFieldValueManagerInterface {

  /**
   * The entity type manager service.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityManager;

  /**
   * Construct the CommentManager object.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_manager
   *   The entity type manager service.
   */
  public function __construct(EntityTypeManagerInterface $entity_manager) {
    $this->entityManager = $entity_manager;
  }

  /**
   * {@inheritdoc}
   */
  public function createEncryptedFieldValue(ContentEntityInterface $entity, $field_name, $delta, $property, $encrypted_value) {
    $langcode = $entity
      ->language()
      ->getId();
    if ($encrypted_field_value = $this
      ->getExistingEntity($entity, $field_name, $delta, $property)) {
      $encrypted_field_value
        ->setEncryptedValue($encrypted_value);
      $encrypted_field_value
        ->save();
    }
    else {

      // Create a new EncryptedFieldValue entity. The parent entity's (revision)
      // id might not be known yet, so the EncryptedFieldValue will be saved
      // by saveEncryptedFieldValues() later on.
      $encrypted_field_value = $this->entityManager
        ->getStorage('encrypted_field_value')
        ->create([
        'entity_type' => $entity
          ->getEntityTypeId(),
        'entity_id' => !$entity
          ->isNew() ? $entity
          ->id() : NULL,
        'entity_revision_id' => $this
          ->getEntityRevisionId($entity),
        'field_name' => $field_name,
        'field_property' => $property,
        'field_delta' => $delta,
        'encrypted_value' => $encrypted_value,
        'langcode' => $langcode,
      ]);
      $entity->encrypted_field_values[] = $encrypted_field_value;
    }
    return $encrypted_field_value;
  }

  /**
   * {@inheritdoc}
   */
  public function saveEncryptedFieldValues(ContentEntityInterface $entity) {
    if (!empty($entity->encrypted_field_values)) {
      foreach ($entity->encrypted_field_values as $encrypted_field_value) {
        if ($encrypted_field_value instanceof EncryptedFieldValueInterface) {

          // Update the parent entity (revision) id, now that it's known.
          $encrypted_field_value
            ->set('entity_id', $entity
            ->id());
          $encrypted_field_value
            ->set('entity_revision_id', $this
            ->getEntityRevisionId($entity));

          // Actually save the EncryptedFieldValue entity.
          $encrypted_field_value
            ->save();
        }
      }
      unset($entity->encrypted_field_values);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getEncryptedFieldValue(ContentEntityInterface $entity, $field_name, $delta, $property) {
    $field_value_entity = $this
      ->getExistingEntity($entity, $field_name, $delta, $property, $entity
      ->getRevisionId());
    if ($field_value_entity) {
      $langcode = $entity
        ->language()
        ->getId();
      if ($field_value_entity
        ->hasTranslation($langcode)) {
        $field_value_entity = $field_value_entity
          ->getTranslation($langcode);
      }
      return $field_value_entity
        ->getEncryptedValue();
    }
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function getExistingEntity(ContentEntityInterface $entity, $field_name, $delta, $property) {
    $query = $this->entityManager
      ->getStorage('encrypted_field_value')
      ->getQuery()
      ->condition('entity_type', $entity
      ->getEntityTypeId())
      ->condition('entity_id', $entity
      ->id())
      ->condition('entity_revision_id', $this
      ->getEntityRevisionId($entity))
      ->condition('langcode', $entity
      ->language()
      ->getId())
      ->condition('field_name', $field_name)
      ->condition('field_delta', $delta)
      ->condition('field_property', $property);
    $values = $query
      ->execute();
    if (!empty($values)) {
      $id = array_shift($values);
      return EncryptedFieldValue::load($id);
    }
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function deleteEntityEncryptedFieldValues(ContentEntityInterface $entity) {
    $field_values = $this->entityManager
      ->getStorage('encrypted_field_value')
      ->loadByProperties([
      'entity_type' => $entity
        ->getEntityTypeId(),
      'entity_id' => $entity
        ->id(),
    ]);
    if ($field_values) {
      $this->entityManager
        ->getStorage('encrypted_field_value')
        ->delete($field_values);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function deleteEntityEncryptedFieldValuesForField(ContentEntityInterface $entity, $field_name) {
    $field_values = $this->entityManager
      ->getStorage('encrypted_field_value')
      ->loadByProperties([
      'entity_type' => $entity
        ->getEntityTypeId(),
      'field_name' => $field_name,
      'entity_revision_id' => $this
        ->getEntityRevisionId($entity),
    ]);
    if ($field_values) {
      $this->entityManager
        ->getStorage('encrypted_field_value')
        ->delete($field_values);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function deleteEncryptedFieldValuesForField($entity_type, $field_name) {
    $field_values = $this->entityManager
      ->getStorage('encrypted_field_value')
      ->loadByProperties([
      'entity_type' => $entity_type,
      'field_name' => $field_name,
    ]);
    if ($field_values) {
      $this->entityManager
        ->getStorage('encrypted_field_value')
        ->delete($field_values);
    }
  }

  /**
   * Get the revision ID to store for a given entity.
   *
   * @param \Drupal\Core\Entity\ContentEntityInterface $entity
   *   The entity to check.
   *
   * @return int
   *   The revision ID.
   */
  protected function getEntityRevisionId(ContentEntityInterface $entity) {
    if ($entity
      ->isNew()) {
      return NULL;
    }
    return $entity
      ->getEntityType()
      ->hasKey('revision') ? $entity
      ->getRevisionId() : $entity
      ->id();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
EncryptedFieldValueManager::$entityManager protected property The entity type manager service.
EncryptedFieldValueManager::createEncryptedFieldValue public function Create an encrypted field value, or update an existing one. Overrides EncryptedFieldValueManagerInterface::createEncryptedFieldValue
EncryptedFieldValueManager::deleteEncryptedFieldValuesForField public function Delete encrypted field values for a field on a given entity type. Overrides EncryptedFieldValueManagerInterface::deleteEncryptedFieldValuesForField
EncryptedFieldValueManager::deleteEntityEncryptedFieldValues public function Delete encrypted field values on a given entity. Overrides EncryptedFieldValueManagerInterface::deleteEntityEncryptedFieldValues
EncryptedFieldValueManager::deleteEntityEncryptedFieldValuesForField public function Delete encrypted field values on a given entity for a specific field. Overrides EncryptedFieldValueManagerInterface::deleteEntityEncryptedFieldValuesForField
EncryptedFieldValueManager::getEncryptedFieldValue public function Get an encrypted field value. Overrides EncryptedFieldValueManagerInterface::getEncryptedFieldValue
EncryptedFieldValueManager::getEntityRevisionId protected function Get the revision ID to store for a given entity.
EncryptedFieldValueManager::getExistingEntity public function Loads an existing EncryptedFieldValue entity. Overrides EncryptedFieldValueManagerInterface::getExistingEntity
EncryptedFieldValueManager::saveEncryptedFieldValues public function Save encrypted field values and link them to their parent entity. Overrides EncryptedFieldValueManagerInterface::saveEncryptedFieldValues
EncryptedFieldValueManager::__construct public function Construct the CommentManager object.