protected function RightToBeForgottenEntityTraversal::processEntity in General Data Protection Regulation 3.0.x
Same name and namespace in other branches
- 8.2 modules/gdpr_tasks/src/Traversal/RightToBeForgottenEntityTraversal.php \Drupal\gdpr_tasks\Traversal\RightToBeForgottenEntityTraversal::processEntity()
- 8 modules/gdpr_tasks/src/Traversal/RightToBeForgottenEntityTraversal.php \Drupal\gdpr_tasks\Traversal\RightToBeForgottenEntityTraversal::processEntity()
Throws
\Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
\Drupal\Core\Entity\EntityStorageException
Overrides EntityTraversal::processEntity
File
- modules/
gdpr_tasks/ src/ Traversal/ RightToBeForgottenEntityTraversal.php, line 89
Class
- RightToBeForgottenEntityTraversal
- Entity traversal used for Right to be Forgotten requests.
Namespace
Drupal\gdpr_tasks\TraversalCode
protected function processEntity(FieldableEntityInterface $entity, GdprFieldConfigEntity $config, $row_id, GdprField $parent_config = NULL) {
$entity_success = TRUE;
$entity_type = $entity
->getEntityTypeId();
$fields = $this->entityFieldManager
->getFieldDefinitions($entity_type, $entity
->bundle());
$field_configs = $config
->getFieldsForBundle($entity
->bundle());
// Re-load a fresh copy of the entity from storage so we don't
// end up modifying any other references to the entity in memory.
/** @var \Drupal\Core\Entity\FieldableEntityInterface $entity */
$entity = $this->entityTypeManager
->getStorage($entity_type)
->loadUnchanged($entity
->id());
foreach ($fields as $field_id => $field_definition) {
$field_config = isset($field_configs[$field_id]) ? $field_configs[$field_id] : NULL;
// If the field is not configured, not enabled,
// or not enabled for RTF, then skip it.
if ($field_config === NULL || !$field_config->enabled || !in_array($field_config->rtf, [
'anonymize',
'remove',
'maybe',
])) {
continue;
}
$mode = $field_config->rtf;
$field = $entity
->get($field_id);
$success = TRUE;
$msg = NULL;
$anonymizer = '';
if ($mode == 'anonymize') {
list($success, $msg, $anonymizer) = $this
->anonymize($field, $field_definition, $field_config);
}
elseif ($mode == 'remove') {
list($success, $msg, $should_delete) = $this
->remove($field, $field_config, $entity);
}
if ($success === TRUE) {
$this->results['log'][] = [
'entity_id' => $entity
->id(),
'entity_type' => $entity_type . '.' . $entity
->bundle(),
'field_name' => $field
->getName(),
'action' => $mode,
'anonymizer' => $anonymizer,
];
}
else {
// Could not anonymize/remove field. Record to errors list.
// Prevent entity from being saved.
$entity_success = FALSE;
$this->results['errors'][] = $msg;
}
}
if ($entity_success) {
if (isset($should_delete) && $should_delete) {
$this->results['to_delete'][] = $entity;
}
else {
$this->results['successes'][] = $entity;
}
}
else {
$this->results['failures'][] = $entity;
}
}