class WebformSubmission in Webform 8.5
Same name and namespace in other branches
- 6.x src/Entity/WebformSubmission.php \Drupal\webform\Entity\WebformSubmission
Defines the WebformSubmission entity.
Plugin annotation
@ContentEntityType(
id = "webform_submission",
label = @Translation("Webform submission"),
label_collection = @Translation("Submissions"),
label_singular = @Translation("submission"),
label_plural = @Translation("submissions"),
label_count = @PluralTranslation(
singular = "@count submission",
plural = "@count submissions",
),
bundle_label = @Translation("Webform"),
handlers = {
"storage" = "Drupal\webform\WebformSubmissionStorage",
"storage_schema" = "Drupal\webform\WebformSubmissionStorageSchema",
"views_data" = "Drupal\webform\WebformSubmissionViewsData",
"view_builder" = "Drupal\webform\WebformSubmissionViewBuilder",
"list_builder" = "Drupal\webform\WebformSubmissionListBuilder",
"access" = "Drupal\webform\WebformSubmissionAccessControlHandler",
"form" = {
"add" = "Drupal\webform\WebformSubmissionForm",
"edit" = "Drupal\webform\WebformSubmissionForm",
"edit_all" = "Drupal\webform\WebformSubmissionForm",
"api" = "Drupal\webform\WebformSubmissionForm",
"test" = "Drupal\webform\WebformSubmissionForm",
"notes" = "Drupal\webform\WebformSubmissionNotesForm",
"duplicate" = "Drupal\webform\WebformSubmissionDuplicateForm",
"delete" = "Drupal\webform\Form\WebformSubmissionDeleteForm",
},
},
bundle_entity_type = "webform",
list_cache_contexts = { "user" },
list_cache_tags = { "config:webform_list", "webform_submission_list" },
base_table = "webform_submission",
admin_permission = "administer webform",
entity_keys = {
"id" = "sid",
"bundle" = "webform_id",
"uuid" = "uuid",
"langcode" = "langcode"
},
links = {
"canonical" = "/admin/structure/webform/manage/{webform}/submission/{webform_submission}",
"access-denied" = "/admin/structure/webform/manage/{webform}/submission/{webform_submission}/access-denied",
"table" = "/admin/structure/webform/manage/{webform}/submission/{webform_submission}/table",
"text" = "/admin/structure/webform/manage/{webform}/submission/{webform_submission}/text",
"yaml" = "/admin/structure/webform/manage/{webform}/submission/{webform_submission}/yaml",
"edit-form" = "/admin/structure/webform/manage/{webform}/submission/{webform_submission}/edit",
"notes-form" = "/admin/structure/webform/manage/{webform}/submission/{webform_submission}/notes",
"resend-form" = "/admin/structure/webform/manage/{webform}/submission/{webform_submission}/resend",
"duplicate-form" = "/admin/structure/webform/manage/{webform}/submission/{webform_submission}/duplicate",
"delete-form" = "/admin/structure/webform/manage/{webform}/submission/{webform_submission}/delete",
"collection" = "/admin/structure/webform/submissions/manage/list"
},
permission_granularity = "bundle"
)
Hierarchy
- class \Drupal\Core\Entity\EntityBase implements EntityInterface uses RefinableCacheableDependencyTrait, DependencySerializationTrait
- class \Drupal\Core\Entity\ContentEntityBase implements \Drupal\Core\Entity\IteratorAggregate, ContentEntityInterface, TranslationStatusInterface uses EntityChangesDetectionTrait, SynchronizableEntityTrait
- class \Drupal\webform\Entity\WebformSubmission implements WebformSubmissionInterface uses EntityChangedTrait, StringTranslationTrait
- class \Drupal\Core\Entity\ContentEntityBase implements \Drupal\Core\Entity\IteratorAggregate, ContentEntityInterface, TranslationStatusInterface uses EntityChangesDetectionTrait, SynchronizableEntityTrait
Expanded class hierarchy of WebformSubmission
72 files declare their use of WebformSubmission
- webform.install.update.inc in includes/
webform.install.update.inc - Archived Webform update hooks.
- webform.module in ./
webform.module - Enables the creation of webforms and questionnaires.
- Webform.php in src/
Element/ Webform.php - WebformAccessSubmissionViewsTest.php in modules/
webform_access/ tests/ src/ Functional/ WebformAccessSubmissionViewsTest.php - WebformAccessTokensTest.php in modules/
webform_access/ tests/ src/ Functional/ WebformAccessTokensTest.php
File
- src/
Entity/ WebformSubmission.php, line 83
Namespace
Drupal\webform\EntityView source
class WebformSubmission extends ContentEntityBase implements WebformSubmissionInterface {
use EntityChangedTrait;
use StringTranslationTrait;
/**
* Store a reference to the current temporary webform.
*
* @var \Drupal\webform\WebformInterface
*
* @see \Drupal\webform\WebformEntityElementsValidator::validateRendering()
*/
protected static $webform;
/**
* The data.
*
* @var array
*/
protected $data = [];
/**
* Reference to original data loaded before any updates.
*
* @var array
*/
protected $originalData = [];
/**
* The data with computed values.
*
* @var array
*/
protected $computedData = [];
/**
* The data hashed.
*
* @var string
*/
protected $dataHash;
/**
* Flag to indicated if submission is being converted from anonymous to authenticated.
*
* @var bool
*/
protected $converting = FALSE;
/**
* {@inheritdoc}
*/
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
$fields['serial'] = BaseFieldDefinition::create('integer')
->setLabel(t('Serial number'))
->setDescription(t('The serial number of the webform submission entity.'))
->setReadOnly(TRUE);
$fields['sid'] = BaseFieldDefinition::create('integer')
->setLabel(t('Submission ID'))
->setDescription(t('The ID of the webform submission entity.'))
->setReadOnly(TRUE);
$fields['uuid'] = BaseFieldDefinition::create('uuid')
->setLabel(t('Submission UUID'))
->setDescription(t('The UUID of the webform submission entity.'))
->setReadOnly(TRUE);
$fields['token'] = BaseFieldDefinition::create('string')
->setLabel(t('Token'))
->setDescription(t('A secure token used to look up a submission.'))
->setSetting('max_length', 255)
->setReadOnly(TRUE);
$fields['uri'] = BaseFieldDefinition::create('string')
->setLabel(t('Submission URI'))
->setDescription(t('The URI the user submitted the webform.'))
->setSetting('max_length', 2000)
->setReadOnly(TRUE);
$fields['created'] = BaseFieldDefinition::create('created')
->setLabel(t('Created'))
->setDescription(t('The time that the webform submission was first saved as draft or submitted.'));
$fields['completed'] = BaseFieldDefinition::create('timestamp')
->setLabel(t('Completed'))
->setDescription(t('The time that the webform submission was submitted as complete (not draft).'));
$fields['changed'] = BaseFieldDefinition::create('changed')
->setLabel(t('Changed'))
->setDescription(t('The time that the webform submission was last saved (complete or draft).'));
$fields['in_draft'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Is draft'))
->setDescription(t('Is this a draft of the submission?'))
->setDefaultValue(FALSE);
$fields['current_page'] = BaseFieldDefinition::create('string')
->setLabel(t('Current page'))
->setDescription(t('The current wizard page.'))
->setSetting('max_length', 128);
$fields['remote_addr'] = BaseFieldDefinition::create('string')
->setLabel(t('Remote IP address'))
->setDescription(t('The IP address of the user that submitted the webform.'))
->setSetting('max_length', 128);
$fields['uid'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Submitted by'))
->setDescription(t('The username of the user that submitted the webform.'))
->setSetting('target_type', 'user')
->setDefaultValueCallback('Drupal\\webform\\Entity\\WebformSubmission::getCurrentUserId');
$fields['langcode'] = BaseFieldDefinition::create('language')
->setLabel(t('Language'))
->setDescription(t('The submission language code.'));
$fields['webform_id'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Webform'))
->setDescription(t('The associated webform.'))
->setSetting('target_type', 'webform');
$fields['entity_type'] = BaseFieldDefinition::create('string')
->setLabel(t('Submitted to: Entity type'))
->setDescription(t('The entity type to which this submission was submitted from.'))
->setSetting('is_ascii', TRUE)
->setSetting('max_length', EntityTypeInterface::ID_MAX_LENGTH);
// Can't use entity reference without a target type because it defaults to
// an integer which limits reference to only content entities (and not
// config entities like Views, Panels, etc…).
// @see \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem::propertyDefinitions()
$fields['entity_id'] = BaseFieldDefinition::create('string')
->setLabel(t('Submitted to: Entity ID'))
->setDescription(t('The ID of the entity of which this webform submission was submitted from.'))
->setSetting('max_length', 255);
$fields['locked'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Locked'))
->setDescription(t('A flag that indicates a locked webform submission.'))
->setDefaultValue(FALSE);
$fields['sticky'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Sticky'))
->setDescription(t('A flag that indicate the status of the webform submission.'))
->setDefaultValue(FALSE);
$fields['notes'] = BaseFieldDefinition::create('string_long')
->setLabel(t('Notes'))
->setDescription(t('Administrative notes about the webform submission.'))
->setDefaultValue('');
return $fields;
}
/**
* {@inheritdoc}
*/
public function serial() {
return $this
->get('serial')->value;
}
/**
* {@inheritdoc}
*/
public function label() {
$submission_label = $this
->getWebform()
->getSetting('submission_label') ?: \Drupal::config('webform.settings')
->get('settings.default_submission_label');
/** @var \Drupal\webform\WebformTokenManagerInterface $token_manager */
$token_manager = \Drupal::service('webform.token_manager');
return PlainTextOutput::renderFromHtml($token_manager
->replaceNoRenderContext($submission_label, $this));
}
/**
* {@inheritdoc}
*/
public function getLangcode() {
return $this
->get('langcode')->value;
}
/**
* {@inheritdoc}
*/
public function setLangcode($langcode) {
$this
->set('langcode', $langcode);
return $this;
}
/**
* {@inheritdoc}
*/
public function getCreatedTime() {
if (isset($this
->get('created')->value)) {
return $this
->get('created')->value;
}
return NULL;
}
/**
* {@inheritdoc}
*/
public function setCreatedTime($created) {
$this
->set('created', $created);
return $this;
}
/**
* {@inheritdoc}
*/
public function getChangedTime() {
return $this
->get('changed')->value;
}
/**
* {@inheritdoc}
*/
public function setChangedTime($timestamp) {
$this
->set('changed', $timestamp);
return $this;
}
/**
* {@inheritdoc}
*/
public function getCompletedTime() {
return $this
->get('completed')->value;
}
/**
* {@inheritdoc}
*/
public function setCompletedTime($timestamp) {
$this
->set('completed', $timestamp);
return $this;
}
/**
* {@inheritdoc}
*/
public function getNotes() {
return $this
->get('notes')->value;
}
/**
* {@inheritdoc}
*/
public function setNotes($notes) {
$this
->set('notes', $notes);
return $this;
}
/**
* {@inheritdoc}
*/
public function getSticky() {
return $this
->get('sticky')->value;
}
/**
* {@inheritdoc}
*/
public function setSticky($sticky) {
$this
->set('sticky', $sticky);
return $this;
}
/**
* {@inheritdoc}
*/
public function setLocked($locked) {
$this
->set('locked', $locked);
return $this;
}
/**
* {@inheritdoc}
*/
public function getRemoteAddr() {
return $this
->get('remote_addr')->value ?: $this
->t('(unknown)');
}
/**
* {@inheritdoc}
*/
public function setRemoteAddr($ip_address) {
$this
->set('remote_addr', $ip_address);
return $this;
}
/**
* {@inheritdoc}
*/
public function getCurrentPage() {
return $this
->get('current_page')->value;
}
/**
* {@inheritdoc}
*/
public function setCurrentPage($current_page) {
$this
->set('current_page', $current_page);
return $this;
}
/**
* {@inheritdoc}
*/
public function getCurrentPageTitle() {
$current_page = $this
->getCurrentPage();
$page = $this
->getWebform()
->getPage('default', $current_page);
return $page && isset($page['#title']) ? $page['#title'] : $current_page;
}
/**
* {@inheritdoc}
*/
public function getElementData($key) {
$data = $this
->getData();
return isset($data[$key]) ? $data[$key] : NULL;
}
/**
* {@inheritdoc}
*/
public function setElementData($key, $value) {
// Make sure the element exists before setting its value.
if ($this
->getWebform()
->getElement($key)) {
$this->data[$key] = $value;
$this->computedData = NULL;
$this->dataHash = NULL;
}
return $this;
}
/**
* {@inheritdoc}
*/
public function getRawData() {
return $this->data;
}
/**
* {@inheritdoc}
*/
public function getData() {
if (isset($this->computedData)) {
return $this->computedData;
}
// If there is no active theme and we can't prematurely start computing
// element values because it will define and lock the active theme.
/** @var \Drupal\webform\WebformThemeManagerInterface $theme_manager */
$theme_manager = \Drupal::service('webform.theme_manager');
if (!$theme_manager
->hasActiveTheme()) {
return $this->data;
}
// Set computed element values in to submission data.
$this->computedData = $this->data;
$webform = $this
->getWebform();
if ($webform
->hasComputed()) {
/** @var \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager */
$element_manager = \Drupal::service('plugin.manager.webform.element');
$computed_elements = $webform
->getElementsComputed();
foreach ($computed_elements as $computed_element_name) {
$computed_element = $webform
->getElement($computed_element_name);
/** @var \Drupal\webform\Plugin\WebformElementComputedInterface $element_plugin */
$element_plugin = $element_manager
->getElementInstance($computed_element);
$this->computedData[$computed_element_name] = $element_plugin
->computeValue($computed_element, $this);
}
}
return $this->computedData;
}
/**
* {@inheritdoc}
*/
public function setData(array $data) {
$this->data = $data;
$this->computedData = NULL;
$this->dataHash = NULL;
return $this;
}
/**
* {@inheritdoc}
*/
public function getOriginalData() {
return $this->originalData;
}
/**
* {@inheritdoc}
*/
public function setOriginalData(array $data) {
$this->originalData = $data;
return $this;
}
/**
* {@inheritdoc}
*/
public function getElementOriginalData($key) {
return isset($this->originalData[$key]) ? $this->originalData[$key] : NULL;
}
/**
* {@inheritdoc}
*/
public function getDataHash() {
if (isset($this->dataHash)) {
return $this->dataHash;
}
$this->dataHash = Crypt::hmacBase64(serialize($this
->getRawData()), Settings::getHashSalt());
return $this->dataHash;
}
/**
* {@inheritdoc}
*/
public function getToken() {
return $this->token->value;
}
/**
* {@inheritdoc}
*/
public function getWebform() {
if (isset($this->webform_id->entity)) {
return $this->webform_id->entity;
}
else {
return static::$webform;
}
}
/**
* {@inheritdoc}
*/
public function getSourceEntity($translate = FALSE) {
if ($this->entity_type->value && $this->entity_id->value) {
$entity_type = $this->entity_type->value;
$entity_id = $this->entity_id->value;
$source_entity = $this
->entityTypeManager()
->getStorage($entity_type)
->load($entity_id);
// If translated is set, get the translated source entity.
if ($translate && $source_entity instanceof ContentEntityInterface) {
$langcode = $this
->language()
->getId();
if ($source_entity
->hasTranslation($langcode)) {
$source_entity = $source_entity
->getTranslation($langcode);
}
}
return $source_entity;
}
else {
return NULL;
}
}
/**
* {@inheritdoc}
*/
public function getSourceUrl() {
$uri = $this->uri->value;
if ($uri !== NULL && ($url = \Drupal::pathValidator()
->getUrlIfValid($uri))) {
return $url
->setOption('absolute', TRUE);
}
elseif (($entity = $this
->getSourceEntity()) && $entity
->hasLinkTemplate('canonical')) {
return $entity
->toUrl()
->setOption('absolute', TRUE);
}
else {
return $this
->getWebform()
->toUrl()
->setOption('absolute', TRUE);
}
}
/**
* {@inheritdoc}
*/
public function getTokenUrl($operation = 'update') {
switch ($operation) {
case 'view':
/** @var \Drupal\webform\WebformRequestInterface $request_handler */
$request_handler = \Drupal::service('webform.request');
$url = $request_handler
->getUrl($this, $this
->getSourceEntity(), 'webform.user.submission');
break;
case 'update':
$url = $this
->getSourceUrl();
break;
case 'delete':
/** @var \Drupal\webform\WebformRequestInterface $request_handler */
$request_handler = \Drupal::service('webform.request');
$url = $request_handler
->getUrl($this, $this
->getSourceEntity(), 'webform.user.submission.delete');
break;
default:
throw new \Exception("Token URL operation {$operation} is not supported");
}
$options = $url
->setAbsolute()
->getOptions();
$options['query']['token'] = $this
->getToken();
return $url
->setOptions($options);
}
/**
* {@inheritdoc}
*/
public function invokeWebformHandlers($method, &$context1 = NULL, &$context2 = NULL, &$context3 = NULL) {
if ($webform = $this
->getWebform()) {
return $webform
->invokeHandlers($method, $this, $context1, $context2, $context3);
}
}
/**
* {@inheritdoc}
*/
public function invokeWebformElements($method, &$context1 = NULL, &$context2 = NULL, &$context3 = NULL) {
if ($webform = $this
->getWebform()) {
$webform
->invokeElements($method, $this, $context1, $context2, $context3);
}
}
/**
* {@inheritdoc}
*/
public function getOwner() {
$user = $this
->get('uid')->entity;
if (!$user || $user
->isAnonymous()) {
$user = User::getAnonymousUser();
}
return $user;
}
/**
* {@inheritdoc}
*/
public function getOwnerId() {
return $this
->get('uid')->target_id;
}
/**
* {@inheritdoc}
*/
public function setOwnerId($uid) {
$this
->set('uid', $uid);
return $this;
}
/**
* {@inheritdoc}
*/
public function setOwner(UserInterface $account) {
$this
->set('uid', $account
->id());
return $this;
}
/**
* {@inheritdoc}
*/
public function isDraft() {
return $this
->get('in_draft')->value ? TRUE : FALSE;
}
/**
* {@inheritdoc}
*/
public function isConverting() {
return $this->converting;
}
/**
* {@inheritdoc}
*/
public function isCompleted() {
return $this
->get('completed')->value ? TRUE : FALSE;
}
/**
* {@inheritdoc}
*/
public function isLocked() {
return $this
->get('locked')->value ? TRUE : FALSE;
}
/**
* {@inheritdoc}
*/
public function isSticky() {
return (bool) $this
->get('sticky')->value;
}
/**
* {@inheritdoc}
*/
public function isOwner(AccountInterface $account) {
if ($account
->isAnonymous()) {
return !empty($_SESSION['webform_submissions']) && isset($_SESSION['webform_submissions'][$this
->id()]);
}
else {
return $account
->id() === $this
->getOwnerId();
}
}
/**
* {@inheritdoc}
*/
public function hasNotes() {
return $this->notes ? TRUE : FALSE;
}
/**
* {@inheritdoc}
*/
public function getState() {
if (!$this
->id()) {
return WebformSubmissionInterface::STATE_UNSAVED;
}
elseif ($this
->isConverting()) {
return WebformSubmissionInterface::STATE_CONVERTED;
}
elseif ($this
->isDraft()) {
return $this->created->value === $this->changed->value ? WebformSubmissionInterface::STATE_DRAFT_CREATED : WebformSubmissionInterface::STATE_DRAFT_UPDATED;
}
elseif ($this
->isLocked()) {
return WebformSubmissionInterface::STATE_LOCKED;
}
elseif ($this->completed->value === $this->changed->value) {
return WebformSubmissionInterface::STATE_COMPLETED;
}
else {
return WebformSubmissionInterface::STATE_UPDATED;
}
}
/**
* {@inheritdoc}
*/
protected function urlRouteParameters($rel) {
$uri_route_parameters = parent::urlRouteParameters($rel);
$webform = $this
->getWebform();
if ($webform) {
$uri_route_parameters['webform'] = $webform
->id();
}
return $uri_route_parameters;
}
/**
* {@inheritdoc}
*/
public function createDuplicate() {
/** @var \Drupal\webform\WebformSubmissionInterface $duplicate */
$duplicate = parent::createDuplicate();
$duplicate
->set('serial', NULL);
$duplicate
->set('token', Crypt::randomBytesBase64());
// Clear state.
$duplicate
->set('in_draft', FALSE);
$duplicate
->set('current_page', NULL);
// Create timestamps.
$duplicate
->set('created', NULL);
$duplicate
->set('changed', NULL);
$duplicate
->set('completed', NULL);
// Clear admin notes, sticky, and locked.
$duplicate
->set('notes', '');
$duplicate
->set('sticky', FALSE);
$duplicate
->set('locked', FALSE);
return $duplicate;
}
/**
* {@inheritdoc}
*/
public static function preCreate(EntityStorageInterface $storage, array &$values) {
if (empty($values['webform_id']) && empty($values['webform'])) {
if (empty($values['webform_id'])) {
throw new \Exception('Webform id (webform_id) is required to create a webform submission.');
}
elseif (empty($values['webform'])) {
throw new \Exception('Webform (webform) is required to create a webform submission.');
}
}
// Get temporary webform entity and store it in the static
// WebformSubmission::$webform property.
// This could be reworked to use \Drupal\Core\TempStore\PrivateTempStoreFactory
// but it might be overkill since we are just using this to validate
// that a webform's elements can be rendered.
// @see \Drupal\webform\WebformEntityElementsValidator::validateRendering()
// @see \Drupal\webform_ui\Form\WebformUiElementTestForm::buildForm()
if (isset($values['webform']) && $values['webform'] instanceof WebformInterface) {
$webform = $values['webform'];
static::$webform = $values['webform'];
$values['webform_id'] = $values['webform']
->id();
}
else {
/** @var \Drupal\webform\WebformInterface $webform */
$webform = Webform::load($values['webform_id']);
static::$webform = NULL;
}
// Get request's source entity parameter.
/** @var \Drupal\webform\WebformRequestInterface $request_handler */
$request_handler = \Drupal::service('webform.request');
$source_entity = $request_handler
->getCurrentSourceEntity('webform');
$values += [
'entity_type' => $source_entity ? $source_entity
->getEntityTypeId() : NULL,
'entity_id' => $source_entity ? $source_entity
->id() : NULL,
];
// Decode all data in an array.
if (empty($values['data'])) {
$values['data'] = [];
}
elseif (is_string($values['data'])) {
$values['data'] = Yaml::decode($values['data']);
}
// Get default date from source entity 'webform' field.
if ($values['entity_type'] && $values['entity_id']) {
$source_entity = \Drupal::entityTypeManager()
->getStorage($values['entity_type'])
->load($values['entity_id']);
/** @var \Drupal\webform\WebformEntityReferenceManagerInterface $entity_reference_manager */
$entity_reference_manager = \Drupal::service('webform.entity_reference_manager');
if ($webform_field_name = $entity_reference_manager
->getFieldName($source_entity)) {
if ($source_entity->{$webform_field_name}->target_id === $webform
->id() && $source_entity->{$webform_field_name}->default_data) {
$values['data'] += Yaml::decode($source_entity->{$webform_field_name}->default_data);
}
}
}
// Set default values.
$current_request = \Drupal::requestStack()
->getCurrentRequest();
$values += [
'in_draft' => FALSE,
'uid' => \Drupal::currentUser()
->id(),
'langcode' => \Drupal::languageManager()
->getCurrentLanguage()
->getId(),
'token' => Crypt::randomBytesBase64(),
'uri' => preg_replace('#^' . base_path() . '#', '/', $current_request
->getRequestUri()),
'remote_addr' => $webform && $webform
->hasRemoteAddr() ? $current_request
->getClientIp() : '',
];
$webform
->invokeHandlers(__FUNCTION__, $values);
$webform
->invokeElements(__FUNCTION__, $values);
}
/**
* {@inheritdoc}
*/
public function preSave(EntityStorageInterface $storage) {
// Because the original data is not stored in the persistent entity storage
// cache we have to reset it for the original webform submission entity.
// @see \Drupal\Core\Entity\EntityStorageBase::doPreSave
// @see \Drupal\Core\Entity\ContentEntityStorageBase::getFromPersistentCache
if (isset($this->original)) {
$this->original
->setData($this->originalData);
$this->original
->setOriginalData($this->original
->getData());
}
$request_time = \Drupal::time()
->getRequestTime();
// Set created.
if (!$this->created->value) {
$this->created->value = $request_time;
}
// Set changed.
$this->changed->value = $request_time;
// Set completed.
if ($this
->isDraft()) {
$this->completed->value = NULL;
}
elseif (!$this
->isCompleted()) {
$this->completed->value = $request_time;
}
parent::preSave($storage);
}
/**
* {@inheritdoc}
*/
public function postSave(EntityStorageInterface $storage, $update = TRUE) {
parent::postSave($storage, $update);
}
/**
* {@inheritdoc}
*/
public function save() {
// Clear the remote_addr for confidential submissions.
if (!$this
->getWebform()
->hasRemoteAddr()) {
$this
->get('remote_addr')->value = '';
}
return parent::save();
}
/**
* {@inheritdoc}
*/
public function resave() {
return $this
->entityTypeManager()
->getStorage($this->entityTypeId)
->resave($this);
}
/**
* {@inheritdoc}
*/
public function access($operation, AccountInterface $account = NULL, $return_as_object = FALSE) {
$access = parent::access($operation, $account, TRUE)
->orIf($this
->invokeWebformHandlers('access', $operation, $account));
return $return_as_object ? $access : $access
->isAllowed();
}
/**
* {@inheritdoc}
*/
public function convert(UserInterface $account) {
$this->converting = TRUE;
$this
->setOwner($account);
$this
->save();
$this->converting = FALSE;
}
/**
* {@inheritdoc}
*/
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;
}
}
/**
* Default value callback for 'uid' base field definition.
*
* @see ::baseFieldDefinitions()
*
* @return array
* An array of default values.
*/
public static function getCurrentUserId() {
return [
\Drupal::currentUser()
->id(),
];
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
CacheableDependencyTrait:: |
protected | property | Cache contexts. | |
CacheableDependencyTrait:: |
protected | property | Cache max-age. | |
CacheableDependencyTrait:: |
protected | property | Cache tags. | |
CacheableDependencyTrait:: |
protected | function | Sets cacheability; useful for value object constructors. | |
ContentEntityBase:: |
protected | property | Language code identifying the entity active language. | |
ContentEntityBase:: |
protected | property | Local cache for the default language code. | |
ContentEntityBase:: |
protected | property | The default langcode entity key. | |
ContentEntityBase:: |
protected | property | Whether the revision translation affected flag has been enforced. | |
ContentEntityBase:: |
protected | property | Holds untranslatable entity keys such as the ID, bundle, and revision ID. | |
ContentEntityBase:: |
protected | property | Local cache for field definitions. | |
ContentEntityBase:: |
protected | property | The array of fields, each being an instance of FieldItemListInterface. | |
ContentEntityBase:: |
protected static | property | Local cache for fields to skip from the checking for translation changes. | |
ContentEntityBase:: |
protected | property | Indicates whether this is the default revision. | |
ContentEntityBase:: |
protected | property | The language entity key. | |
ContentEntityBase:: |
protected | property | Local cache for the available language objects. | |
ContentEntityBase:: |
protected | property | The loaded revision ID before the new revision was set. | |
ContentEntityBase:: |
protected | property | Boolean indicating whether a new revision should be created on save. | |
ContentEntityBase:: |
protected | property | The revision translation affected entity key. | |
ContentEntityBase:: |
protected | property | Holds translatable entity keys such as the label. | |
ContentEntityBase:: |
protected | property | A flag indicating whether a translation object is being initialized. | |
ContentEntityBase:: |
protected | property | An array of entity translation metadata. | |
ContentEntityBase:: |
protected | property | Whether entity validation was performed. | |
ContentEntityBase:: |
protected | property | Whether entity validation is required before saving the entity. | |
ContentEntityBase:: |
protected | property | The plain data values of the contained fields. | |
ContentEntityBase:: |
public | function |
Adds a new translation to the translatable object. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Gets the bundle of the entity. Overrides EntityBase:: |
|
ContentEntityBase:: |
public static | function |
Provides field definitions for a specific bundle. Overrides FieldableEntityInterface:: |
4 |
ContentEntityBase:: |
protected | function | Clear entity translation object cache to remove stale references. | |
ContentEntityBase:: |
public | function |
Gets a field item list. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
protected | function | Gets the value of the given entity key, if defined. | 1 |
ContentEntityBase:: |
public | function |
Gets the definition of a contained field. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Gets an array of field definitions of all contained fields. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Gets an array of all field item lists. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
protected | function | Returns an array of field names to skip in ::hasTranslationChanges. | 1 |
ContentEntityBase:: |
public | function | ||
ContentEntityBase:: |
protected | function | ||
ContentEntityBase:: |
public | function |
Gets the loaded Revision ID of the entity. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Gets the revision identifier of the entity. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Gets an array of field item lists for translatable fields. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
protected | function | Gets a translated field. | |
ContentEntityBase:: |
public | function |
Gets a translation of the data. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Returns the languages the data is translated to. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Returns the translation status. Overrides TranslationStatusInterface:: |
|
ContentEntityBase:: |
public | function |
Returns the translatable object referring to the original language. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Determines whether the entity has a field with the given name. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Checks there is a translation for the given language code. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Determines if the current translation of the entity has unsaved changes. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Gets the identifier. Overrides EntityBase:: |
|
ContentEntityBase:: |
protected | function | Instantiates a translation object for an existing translation. | |
ContentEntityBase:: |
public | function |
Checks if this entity is the default revision. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether the translation is the default one. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks if untranslatable fields should affect only the default translation. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks if this entity is the latest revision. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether this is the latest revision affecting this translation. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Determines whether a new revision should be created on save. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether the translation is new. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether the current translation is affected by the current revision. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks if the revision translation affected flag value has been enforced. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Returns the translation support status. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether entity validation is required before saving the entity. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Gets the language of the entity. Overrides EntityBase:: |
|
ContentEntityBase:: |
public | function |
Reacts to changes to a field. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Acts on a created entity before hooks are invoked. Overrides EntityBase:: |
|
ContentEntityBase:: |
public | function |
Acts on a revision before it gets saved. Overrides RevisionableInterface:: |
2 |
ContentEntityBase:: |
public | function |
Gets a list of entities referenced by this entity. Overrides EntityBase:: |
1 |
ContentEntityBase:: |
public | function |
Removes the translation identified by the given language code. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Sets a field value. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
protected | function | Populates the local cache for the default language code. | |
ContentEntityBase:: |
public | function |
Enforces an entity to be saved as a new revision. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Marks the current revision translation as affected. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Enforces the revision translation affected flag value. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Sets whether entity validation is required before saving the entity. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
protected | function | Updates language for already instantiated fields. | |
ContentEntityBase:: |
public | function |
Updates the loaded Revision ID with the revision ID. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function | Updates the original values with the interim changes. | |
ContentEntityBase:: |
public | function |
Gets the entity UUID (Universally Unique Identifier). Overrides EntityBase:: |
|
ContentEntityBase:: |
public | function |
Validates the currently set values. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether the entity object was a default revision when it was saved. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function | Magic method: Implements a deep clone. | |
ContentEntityBase:: |
public | function |
Constructs an Entity object. Overrides EntityBase:: |
|
ContentEntityBase:: |
public | function | Implements the magic method for getting object properties. | |
ContentEntityBase:: |
public | function | Implements the magic method for isset(). | |
ContentEntityBase:: |
public | function | Implements the magic method for setting object properties. | |
ContentEntityBase:: |
public | function |
Overrides EntityBase:: |
|
ContentEntityBase:: |
public | function | Implements the magic method for unset(). | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | Aliased as: traitSleep | 1 |
DependencySerializationTrait:: |
public | function | 2 | |
EntityBase:: |
protected | property | Boolean indicating whether the entity should be forced to be new. | |
EntityBase:: |
protected | property | The entity type. | |
EntityBase:: |
protected | property | A typed data object wrapping this entity. | |
EntityBase:: |
public static | function |
Constructs a new entity object, without permanently saving it. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Deletes an entity permanently. Overrides EntityInterface:: |
2 |
EntityBase:: |
public | function |
Enforces an entity to be new. Overrides EntityInterface:: |
|
EntityBase:: |
protected | function | Gets the entity manager. | |
EntityBase:: |
protected | function | Gets the entity type bundle info service. | |
EntityBase:: |
protected | function | Gets the entity type manager. | |
EntityBase:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyTrait:: |
|
EntityBase:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyTrait:: |
|
EntityBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyTrait:: |
|
EntityBase:: |
public | function |
Returns the cache tags that should be used to invalidate caches. Overrides EntityInterface:: |
2 |
EntityBase:: |
public | function |
Gets the key that is used to store configuration dependencies. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the configuration dependency name. Overrides EntityInterface:: |
1 |
EntityBase:: |
public | function |
Gets the configuration target identifier for the entity. Overrides EntityInterface:: |
1 |
EntityBase:: |
public | function |
Gets the entity type definition. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the ID of the type of the entity. Overrides EntityInterface:: |
|
EntityBase:: |
protected | function | The list cache tags to invalidate for this entity. | |
EntityBase:: |
public | function |
Gets the original ID. Overrides EntityInterface:: |
1 |
EntityBase:: |
public | function |
Gets a typed data object for this entity object. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Indicates if a link template exists for a given key. Overrides EntityInterface:: |
|
EntityBase:: |
protected static | function | Invalidates an entity's cache tags upon delete. | 1 |
EntityBase:: |
protected | function | Invalidates an entity's cache tags upon save. | 1 |
EntityBase:: |
public | function |
Determines whether the entity is new. Overrides EntityInterface:: |
2 |
EntityBase:: |
protected | function | Gets the language manager. | |
EntityBase:: |
public | function |
Deprecated way of generating a link to the entity. See toLink(). Overrides EntityInterface:: |
1 |
EntityBase:: |
protected | function | Gets an array link templates. | 1 |
EntityBase:: |
public static | function |
Loads an entity. Overrides EntityInterface:: |
|
EntityBase:: |
public static | function |
Loads one or more entities. Overrides EntityInterface:: |
|
EntityBase:: |
public static | function |
Acts on deleted entities before the delete hook is invoked. Overrides EntityInterface:: |
16 |
EntityBase:: |
public static | function |
Acts on loaded entities. Overrides EntityInterface:: |
2 |
EntityBase:: |
public static | function |
Acts on entities before they are deleted and before hooks are invoked. Overrides EntityInterface:: |
4 |
EntityBase:: |
public | function |
Sets the original ID. Overrides EntityInterface:: |
1 |
EntityBase:: |
public | function |
Generates the HTML for a link to this entity. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the URL object for the entity. Overrides EntityInterface:: |
2 |
EntityBase:: |
public | function |
Gets a list of URI relationships supported by this entity. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the public URL for this entity. Overrides EntityInterface:: |
2 |
EntityBase:: |
public | function |
Gets the URL object for the entity. Overrides EntityInterface:: |
1 |
EntityBase:: |
protected | function | Gets the UUID generator. | |
EntityChangedTrait:: |
public | function | Returns the timestamp of the last entity change across all translations. | |
EntityChangesDetectionTrait:: |
protected | function | Returns an array of field names to skip when checking for changes. Aliased as: traitGetFieldsToSkipFromTranslationChangesCheck | |
RefinableCacheableDependencyTrait:: |
public | function | 1 | |
RefinableCacheableDependencyTrait:: |
public | function | ||
RefinableCacheableDependencyTrait:: |
public | function | ||
RefinableCacheableDependencyTrait:: |
public | function | ||
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
SynchronizableEntityTrait:: |
protected | property | Whether this entity is being created, updated or deleted through a synchronization process. | |
SynchronizableEntityTrait:: |
public | function | ||
SynchronizableEntityTrait:: |
public | function | ||
TranslationStatusInterface:: |
constant | Status code identifying a newly created translation. | ||
TranslationStatusInterface:: |
constant | Status code identifying an existing translation. | ||
TranslationStatusInterface:: |
constant | Status code identifying a removed translation. | ||
WebformSubmission:: |
protected | property | The data with computed values. | |
WebformSubmission:: |
protected | property | Flag to indicated if submission is being converted from anonymous to authenticated. | |
WebformSubmission:: |
protected | property | The data. | |
WebformSubmission:: |
protected | property | The data hashed. | |
WebformSubmission:: |
protected | property | Reference to original data loaded before any updates. | |
WebformSubmission:: |
protected static | property | Store a reference to the current temporary webform. | |
WebformSubmission:: |
public | function |
Checks data value access. Overrides ContentEntityBase:: |
|
WebformSubmission:: |
public static | function |
Provides base field definitions for an entity type. Overrides ContentEntityBase:: |
|
WebformSubmission:: |
public | function |
Convert anonymous submission to authenticated. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Creates a duplicate of the entity. Overrides ContentEntityBase:: |
|
WebformSubmission:: |
public | function |
Gets the timestamp of the last submission change. Overrides EntityChangedTrait:: |
|
WebformSubmission:: |
public | function |
Gets the timestamp of the submission completion. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Returns the time that the submission was created. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets the submission's current page. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Get the submission's current page title. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public static | function | Default value callback for 'uid' base field definition. | |
WebformSubmission:: |
public | function |
Gets the webform submission's data with computed valued. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Get a webform submission data as a hash view. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Get a webform submission element's data. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Get a webform submission element's original data. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets the langcode of the field values held in the object. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Get the submission's notes. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets the webform submission's original data before any changes. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Returns the entity owner's user entity. Overrides EntityOwnerInterface:: |
|
WebformSubmission:: |
public | function |
Returns the entity owner's user ID. Overrides EntityOwnerInterface:: |
|
WebformSubmission:: |
public | function |
Gets the webform submission's raw data. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets the remote IP address of the submission. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets the webform submission's source entity. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets the webform submission's source URL. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Track the state of a submission. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Get the submission's sticky flag. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets the webform submission's token. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets the webform submission's secure tokenized URL. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets the webform submission's webform entity. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Checks submission notes. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Invoke a webform element elements method. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Invoke all webform handlers method. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Is the current submission completed. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Is the current submission being converted from anonymous to authenticated. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Is the current submission in draft. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Get the submission's locked status. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Test whether the provided account is owner of this webform submission. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Returns the submission sticky status. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets the label of the entity. Overrides ContentEntityBase:: |
|
WebformSubmission:: |
public | function |
Acts on a saved entity before the insert or update hook is invoked. Overrides ContentEntityBase:: |
|
WebformSubmission:: |
public static | function |
Changes the values of an entity before it is created. Overrides EntityBase:: |
|
WebformSubmission:: |
public | function |
Acts on an entity before the presave hook is invoked. Overrides ContentEntityBase:: |
|
WebformSubmission:: |
public | function |
Resave a webform submission without trigger any hooks or handlers. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Saves an entity permanently. Overrides EntityBase:: |
|
WebformSubmission:: |
public | function |
Gets the serial number. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Sets the timestamp of the last submission change. Overrides EntityChangedTrait:: |
|
WebformSubmission:: |
public | function |
Sets the timestamp of the submission completion. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Sets the creation date of the submission. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Sets the submission's current page. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Set the webform submission's data. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Set a webform submission element's data. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Sets the langcode of the field values held in the object. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Sets the submission's locked flag. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Sets the submission's notes. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Set the webform submission's original data. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Sets the entity owner's user entity. Overrides EntityOwnerInterface:: |
|
WebformSubmission:: |
public | function |
Sets the entity owner's user ID. Overrides EntityOwnerInterface:: |
|
WebformSubmission:: |
public | function |
Sets remote IP address of the submission. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Sets the submission's sticky flag. Overrides WebformSubmissionInterface:: |
|
WebformSubmission:: |
public | function |
Gets an array of all property values. Overrides ContentEntityBase:: |
|
WebformSubmission:: |
protected | function |
Gets an array of placeholders for this entity. Overrides EntityBase:: |
|
WebformSubmissionInterface:: |
constant | Return status for submission that has been completed. | ||
WebformSubmissionInterface:: |
constant | Return status for submission that has been converted from anonymous to authenticated. | ||
WebformSubmissionInterface:: |
constant | Return status for submission that has been deleted. | ||
WebformSubmissionInterface:: |
constant | Return status for submission in draft created. | ||
WebformSubmissionInterface:: |
constant | Return status for submission in draft created. | ||
WebformSubmissionInterface:: |
constant | Return status for submission in draft updated. | ||
WebformSubmissionInterface:: |
constant | Return status for submission that has been locked. | ||
WebformSubmissionInterface:: |
constant | Return status for new submission. | ||
WebformSubmissionInterface:: |
constant | Return status for submission that has been updated. |