function _field_sql_storage_write_compare

Compare a single field value for both entities and tell us if it changed.

Parameters

array $field: Loaded field structure.

object $entity1: First entity to compare.

object $entity2: Second entity to compare.

Return value

bool True if field value changed, false otherwise.

2 calls to _field_sql_storage_write_compare()
FieldSqlStorageTestCase::testFieldCompareDataModification in modules/field/modules/field_sql_storage/field_sql_storage.test
Tests the expected return values of _field_sql_storage_write_compare().
field_sql_storage_field_storage_write in modules/field/modules/field_sql_storage/field_sql_storage.module
Implements hook_field_storage_write().

File

modules/field/modules/field_sql_storage/field_sql_storage.module, line 505

Code

function _field_sql_storage_write_compare($field, $entity1, $entity2) {
    $field_name = $field['field_name'];
    if (empty($entity1->{$field_name}) && empty($entity2->{$field_name})) {
        // Both are empty we can safely assume that it did not change.
        return FALSE;
    }
    if (!isset($entity1->{$field_name}) || !isset($entity2->{$field_name})) {
        // One of them is missing but not the other the value changed.
        return TRUE;
    }
    // We need to proceed to deep array comparison, but we cannot do it naively:
    // in most cases the field values come from the edit form, and some Form API
    // widget values that are not field columns may be present. We need to clean
    // up both original and new field values before comparison.
    $items1 = _field_sql_storage_write_compare_filter($field, (array) $entity1->{$field_name});
    $items2 = _field_sql_storage_write_compare_filter($field, (array) $entity2->{$field_name});
    return $items1 != $items2;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.