You are here

protected function FeedImportProcessor::attachField in Feed Import 8

Attaches a field value to entity.

Parameters

array &$entity: Entity where to attach field.

array &$field: Field settings.

mixed &$value: Field value.

1 call to FeedImportProcessor::attachField()
FeedImportProcessor::createEntity in feed_import_base/src/FeedImportProcessor.php
Creates a new entity.

File

feed_import_base/src/FeedImportProcessor.php, line 610

Class

FeedImportProcessor
Class that processess the import.

Namespace

Drupal\feed_import_base

Code

protected function attachField(array &$entity, &$field, &$value) {
  if ($field['column']) {

    // It is a field.
    $fn =& $field['field'];
    $fc =& $field['column'];
    $lang =& $entity[$this->entityInfo->langKey];

    // Check if field exists.
    if (!isset($entity[$fn][$lang])) {
      $entity[$fn][$lang] = array();
    }

    // Get field reference.
    $ef =& $entity[$fn][$lang];

    // Check for static fields.
    $st = FALSE;
    if (!empty($this->staticFields[$fn])) {
      $st =& $this->staticFields[$fn];
    }

    // Make it look multivalued.
    if (!is_array($value)) {
      $value = array(
        $value,
      );
    }
    elseif ($field['cardinality'] != -1 && ($cnt = count($value)) > $field['cardinality']) {

      // Remove extra values.
      array_splice($value, $field['cardinality'], $cnt - $field['cardinality'], NULL);
    }

    // Set field properties.
    if ($st) {

      // There are static field props.
      $fa = array(
        $fc => NULL,
      );
      $fv =& $fa[$fc];
      foreach ($value as &$v) {
        if (is_object($v)) {
          $ef[] = (array) $v + $st;
        }
        else {
          $fv = $v;
          $ef[] = $fa + $st;
        }
      }
    }
    else {

      // No static field props.
      foreach ($value as &$v) {
        if (is_object($v)) {
          $ef[] = (array) $v;
        }
        else {
          $ef[][$fc] = $v;
        }
      }
    }
  }
  else {

    // If this is a property then get only first value.
    if (is_array($value) || is_object($value)) {

      // This still can be array but if so then problem is elsewhere.
      $value = reset($value);
    }

    // Set property.
    $entity[$field['field']] = $value;
  }
}