You are here

public function DefaultFieldComparator::compareFieldValues in Changed Fields API 8.3

Same name and namespace in other branches
  1. 8 src/Plugin/FieldComparator/DefaultFieldComparator.php \Drupal\changed_fields\Plugin\FieldComparator\DefaultFieldComparator::compareFieldValues()
  2. 8.2 src/Plugin/FieldComparator/DefaultFieldComparator.php \Drupal\changed_fields\Plugin\FieldComparator\DefaultFieldComparator::compareFieldValues()

Method that compares old and new field values.

Parameters

Drupal\Core\Field\FieldDefinitionInterface $field_definition: Field definition instance.

array $old_value: Old fields value.

array $new_value: New field value.

Return value

array|bool Returns TRUE if field values are equal or an array of changed field values.

File

src/Plugin/FieldComparator/DefaultFieldComparator.php, line 159

Class

DefaultFieldComparator
Provides default field comparator plugin definition.

Namespace

Drupal\changed_fields\Plugin\FieldComparator

Code

public function compareFieldValues(FieldDefinitionInterface $field_definition, array $old_value, array $new_value) {
  $result = TRUE;
  $properties = $this
    ->getComparableProperties($field_definition);

  // If value was added or removed then we have already different values.
  if (!$old_value && $new_value || $old_value && !$new_value) {
    $result = $this
      ->makeResultArray($old_value, $new_value);
  }
  else {
    if ($old_value && $new_value) {

      // If value was added|removed to|from multi-value field then we have
      // already different values.
      if (count($new_value) != count($old_value)) {
        $result = $this
          ->makeResultArray($old_value, $new_value);
      }
      else {

        // Walk through each field value and compare it's properties.
        foreach ($new_value as $key => $value) {
          if (is_array($result)) {
            break;
          }
          foreach ($properties as $property) {
            if ($new_value[$key][$property] != $old_value[$key][$property]) {
              $result = $this
                ->makeResultArray($old_value, $new_value);
              break;
            }
          }
        }
      }
    }
  }
  return $result;
}