Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save szeidler/23fd27786bc2ff8b65a71acae11f5d28 to your computer and use it in GitHub Desktop.
Save szeidler/23fd27786bc2ff8b65a71acae11f5d28 to your computer and use it in GitHub Desktop.
Prevent references fields from creating duplicates
diff --git a/src/TermMerger.php b/src/TermMerger.php
index 2b341f6..d96ae0d 100644
--- a/src/TermMerger.php
+++ b/src/TermMerger.php
@@ -177,13 +177,30 @@ class TermMerger implements TermMergerInterface {
}
$referenceUpdated = FALSE;
- foreach ($values as &$value) {
+ $targetTermExists = FALSE;
+
+ // Check if the toTerm already exists in the field values.
+ foreach ($values as $value) {
+ if ($value['target_id'] === $toTerm->id()) {
+ $targetTermExists = TRUE;
+ }
+ }
+
+ foreach ($values as $delta => &$value) {
if ($value['target_id'] !== $fromTerm->id()) {
continue;
}
+ elseif ($targetTermExists) {
+ // Remove the fromTerm reference, if the toTerm already exists
+ // in the multi-value field. It will prevent duplicates of the
+ // toTerm.
+ unset($values[$delta]);
+ }
+ else {
+ $value['target_id'] = $toTerm->id();
+ }
$referenceUpdated = TRUE;
- $value['target_id'] = $toTerm->id();
}
if (!$referenceUpdated) {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment