You are here

protected function FeedImportProcessor::combineEntities in Feed Import 8

Combines two entities.

Parameters

array $new: Created entity

object $curr: Current entity

Return value

boolean TRUE if current entity was changed

1 call to FeedImportProcessor::combineEntities()
FeedImportProcessor::saveEntities in feed_import_base/src/FeedImportProcessor.php
Saves created entities.

File

feed_import_base/src/FeedImportProcessor.php, line 798

Class

FeedImportProcessor
Class that processess the import.

Namespace

Drupal\feed_import_base

Code

protected function combineEntities(array &$new, $curr) {

  // Initial entity status.
  $changed = FALSE;

  // Get entity language
  $lang =& $new[$this->entityInfo->langKey];

  // Compare fields from entities.
  foreach ($this->fieldsInfo as &$field) {

    // Get field name and column.
    $fn =& $field['field'];
    $fc =& $field['column'];
    if ($fc) {

      // It is a field
      if (isset($new[$fn][$lang])) {
        if (isset($curr->{$fn}[$lang])) {
          if ($field['update_mode']
            ->merge($curr->{$fn}[$lang], $new[$fn][$lang], $field)) {

            // Mark as changed.
            $changed = TRUE;
          }
        }
        else {

          // Overwrite.
          $curr->{$fn}[$lang] = $new[$fn][$lang];

          // Mark as changed.
          $changed = TRUE;
        }
      }
      elseif ($field['overwrite'] && isset($curr->{$fn}[$lang])) {

        // Forced update mode.
        unset($curr->{$fn}[$lang]);

        // Don't leave an empty property.
        if (empty($curr->{$fn})) {
          unset($curr->{$fn});
        }

        // Mark as changed.
        $changed = TRUE;
      }
    }
    else {

      // It is a property.
      if (isset($new[$fn])) {
        if (isset($curr->{$fn}) && $curr->{$fn} == $new[$fn]) {

          // Nothing changed.
          continue;
        }

        // Set the new property value.
        $curr->{$fn} = $new[$fn];

        // Mark as changed.
        $changed = TRUE;

        // Remove from memory.
        unset($new[$fn]);
      }
      elseif ($field['overwrite'] && isset($curr->{$fn})) {

        // Forced update mode is selected.
        unset($curr->{$fn});

        // Mark as changed.
        $changed = TRUE;
      }
    }
  }
  return $changed;
}