You are here

public function WebformSubmission::toArray in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Entity/WebformSubmission.php \Drupal\webform\Entity\WebformSubmission::toArray()

Gets an array of all property values.

Return value

mixed[] An array of property values, keyed by property name.

Overrides ContentEntityBase::toArray

File

src/Entity/WebformSubmission.php, line 919

Class

WebformSubmission
Defines the WebformSubmission entity.

Namespace

Drupal\webform\Entity

Code

public function toArray($custom = FALSE, $check_access = FALSE) {
  if ($custom === FALSE) {
    return parent::toArray();
  }
  else {
    $values = parent::toArray();
    foreach ($values as $key => $item) {

      // Issue #2567899 It seems it is impossible to save an empty string to an entity.
      // @see https://www.drupal.org/node/2567899
      // Solution: Set empty (aka NULL) items to an empty string.
      if (empty($item)) {
        $values[$key] = '';
      }
      else {
        $value = reset($item);
        $values[$key] = reset($value);
      }
    }
    $values['data'] = $this
      ->getData();

    // Check access.
    if ($check_access) {

      // Check field definition access.
      $submission_storage = \Drupal::entityTypeManager()
        ->getStorage('webform_submission');
      $field_definitions = $submission_storage
        ->getFieldDefinitions();
      $field_definitions = $submission_storage
        ->checkFieldDefinitionAccess($this
        ->getWebform(), $field_definitions + [
        'data' => TRUE,
      ]);
      $values = array_intersect_key($values, $field_definitions);

      // Check element data access.
      $elements = $this
        ->getWebform()
        ->getElementsInitializedFlattenedAndHasValue('view');
      $values['data'] = array_intersect_key($values['data'], $elements);
    }
    return $values;
  }
}