You are here

public function AutosaveEntityFormDatabaseStorage::getEntityAndFormState in Autosave Form 8

Retrieves the stored entity with the form state.

The timestamp of the autosaved state will be set into the form state storage under the key 'autosave_form_state_timestamp'.

Parameters

$form_id: The form id.

string $entity_type_id: The entity type id of the entity.

mixed $entity_id: The id of the entity.

string $langcode: The language code of the original entity.

$uid: The user id.

$form_session_id: (optional) The form session id.

$timestamp: (optional) The timestamp for which to load the entity and the form state.

Return value

array An array containing the entity object and the form state object, keyed accordingly with 'entity' and 'form_state'.

Overrides AutosaveEntityFormStorageInterface::getEntityAndFormState

File

src/Storage/AutosaveEntityFormDatabaseStorage.php, line 86

Class

AutosaveEntityFormDatabaseStorage
A database backend for autosave of entity forms.

Namespace

Drupal\autosave_form\Storage

Code

public function getEntityAndFormState($form_id, $entity_type_id, $entity_id, $langcode, $uid, $form_session_id = NULL, $autosaved_timestamp = NULL) {
  $result = NULL;
  $query = $this->connection
    ->select(static::AUTOSAVE_ENTITY_FORM_TABLE, 'cefa')
    ->fields('cefa', [
    'entity',
    'form_state',
    'timestamp',
  ])
    ->orderBy('timestamp', 'DESC')
    ->condition('form_id', $form_id);
  if (isset($form_session_id)) {
    $query
      ->condition('form_session_id', $form_session_id);
  }
  $query
    ->condition('entity_type_id', $entity_type_id)
    ->condition('entity_id', $entity_id)
    ->condition('langcode', $langcode)
    ->condition('uid', $uid);
  if (isset($autosaved_timestamp)) {
    $query
      ->condition('timestamp', $autosaved_timestamp);
  }
  $data = $query
    ->execute()
    ->fetchAssoc();
  if ($data) {

    // Prepare the entity object.
    $result['entity'] = $this->serializer
      ->decode($data['entity']);

    // Prepare the form state.
    $form_state_data = $this->serializer
      ->decode($data['form_state']);
    $result['form_state'] = new FormState();
    $result['form_state']
      ->setStorage($form_state_data['storage']);
    $result['form_state']
      ->setUserInput($form_state_data['input']);
    $result['form_state']
      ->set('autosave_form_state_timestamp', $data['timestamp']);
  }
  return $result;
}