You are here

protected function FieldEncryptProcessEntities::processValue in Field Encryption 8.2

Encrypt or decrypt a value.

Parameters

\Drupal\Core\Entity\ContentEntityInterface $entity: The entity to process.

\Drupal\Core\Field\FieldItemListInterface $field: The field to process.

int $delta: The field delta.

string $property_name: The name of the property.

\Drupal\encrypt\EncryptionProfileInterface $encryption_profile: The encryption profile to use.

string $value: The value to encrypt / decrypt.

string $op: The operation ("encrypt" or "decrypt").

Return value

string The processed value.

1 call to FieldEncryptProcessEntities::processValue()
FieldEncryptProcessEntities::processField in src/FieldEncryptProcessEntities.php
Process a field.

File

src/FieldEncryptProcessEntities.php, line 254

Class

FieldEncryptProcessEntities
Service class to process entities and fields for encryption.

Namespace

Drupal\field_encrypt

Code

protected function processValue(ContentEntityInterface $entity, FieldItemListInterface $field, $delta, $property_name, EncryptionProfileInterface $encryption_profile, $value = '', $op = 'encrypt') {

  // Do not modify empty strings.
  if ($value === '') {
    return '';
  }
  if ($op === 'encrypt') {
    if ($this
      ->allowEncryption($entity, $field
      ->getName(), $delta, $property_name, $field, $value)) {

      // Encrypt property value.
      $processed_value = base64_encode($this->encryptService
        ->encrypt($value, $encryption_profile));

      // Save encrypted value in EncryptedFieldValue entity.
      $this->encryptedFieldValueManager
        ->createEncryptedFieldValue($entity, $field
        ->getName(), $delta, $property_name, $processed_value);

      // Return value to store for unencrypted property.
      // We can't set this to NULL, because then the field values are not
      // saved, so we can't replace them with their unencrypted value on load.
      return $this
        ->getUnencryptedPlaceholderValue($entity, $field, $property_name);
    }
    else {

      // If not allowed, but we still have an EncryptedFieldValue entity,
      // remove it.
      if ($encrypted_value = $this->encryptedFieldValueManager
        ->getExistingEntity($entity, $field
        ->getName(), $delta, $property_name)) {
        $this->entityManager
          ->getStorage('encrypted_field_value')
          ->delete([
          $encrypted_value,
        ]);
      }
      return $value;
    }
  }
  elseif ($op === 'decrypt') {

    // Get encrypted value from EncryptedFieldValue entity.
    if ($encrypted_value = $this->encryptedFieldValueManager
      ->getEncryptedFieldValue($entity, $field
      ->getName(), $delta, $property_name)) {

      // Decrypt value.
      $decrypted_value = $this->encryptService
        ->decrypt(base64_decode($encrypted_value), $encryption_profile);
      return $decrypted_value;
    }
    else {
      return $value;
    }
  }
}