You are here

public function TablefieldItem::setValue in TableField 8.2

Overrides \Drupal\Core\TypedData\TypedData::setValue().

Parameters

array|null $values: An array of property values.

Overrides FieldItemBase::setValue

File

src/Plugin/Field/FieldType/TablefieldItem.php, line 155

Class

TablefieldItem
Plugin implementation of the 'tablefield' field type.

Namespace

Drupal\tablefield\Plugin\Field\FieldType

Code

public function setValue($values, $notify = TRUE) {
  if (!isset($values)) {
    return;
  }
  elseif (!empty($values['tablefield'])) {
    $values['rebuild'] = $values['tablefield']['rebuild'];
    $values['value'] = $values['tablefield']['table'];
    unset($values['tablefield']);
    unset($values['rebuild']['rebuild']);
  }
  elseif (!empty($values['value']['tablefield'])) {
    $values['rebuild'] = $values['value']['tablefield']['rebuild'];
    $values['value'] = $values['value']['tablefield']['table'];
    unset($values['rebuild']['rebuild']);
  }
  elseif (empty($values['rebuild'])) {
    if (array_key_exists('value', $values) && array_key_exists('caption', $values['value'])) {
      unset($values['value']['caption']);
    }
    $values['rebuild']['rows'] = isset($values['value']) ? count($values['value']) : 0;
    $values['rebuild']['cols'] = isset($values['value'][0]) ? count($values['value'][0]) : 0;
  }
  if (isset($values['caption'])) {
    $values['value']['caption'] = $values['caption'];
  }

  // If "Lock defaults" is enabled the table needs sorting.
  $lock = $this
    ->getFieldDefinition()
    ->getSetting('lock_values');
  if ($lock) {

    // Sort columns on key.
    foreach ($values['value'] as $key => $value) {
      if (is_array($value)) {
        ksort($value);
        $values['value'][$key] = $value;
      }
    }

    // Sort rows on key.
    if (is_array($values['value'])) {
      ksort($values['value']);
    }
  }
  parent::setValue($values, $notify);
}