protected function WebformSubmissionListBuilder::getQuery in Webform 6.x
Same name and namespace in other branches
- 8.5 src/WebformSubmissionListBuilder.php \Drupal\webform\WebformSubmissionListBuilder::getQuery()
Get the base entity query filtered by webform and search.
Parameters
string $keys: (optional) Search key.
string $state: (optional) Submission state.
string $source_entity: (optional) Source entity (type:id).
Return value
\Drupal\Core\Entity\Query\QueryInterface An entity query.
1 call to WebformSubmissionListBuilder::getQuery()
- WebformSubmissionListBuilder::getEntityIds in src/
WebformSubmissionListBuilder.php - Loads entity IDs using a pager sorted by the entity id.
File
- src/
WebformSubmissionListBuilder.php, line 1360
Class
- WebformSubmissionListBuilder
- Provides a list controller for webform submission entity.
Namespace
Drupal\webformCode
protected function getQuery($keys = '', $state = '', $source_entity = '') {
/** @var \Drupal\webform\WebformSubmissionStorageInterface $submission_storage */
$submission_storage = $this
->getStorage();
$query = $submission_storage
->getQuery();
$submission_storage
->addQueryConditions($query, $this->webform, $this->sourceEntity, $this->account);
// Filter by key(word).
if ($keys) {
// Search values.
$sub_query = Database::getConnection()
->select('webform_submission_data', 'sd')
->fields('sd', [
'sid',
])
->condition('value', '%' . $keys . '%', 'LIKE');
$submission_storage
->addQueryConditions($sub_query, $this->webform);
// Search UUID and Notes.
$or_condition = $query
->orConditionGroup();
$or_condition
->condition('notes', '%' . $keys . '%', 'LIKE');
// Only search UUID if keys is alphanumeric with dashes.
// @see Issue #2978420: Error SQL with accent mark submissions filter.
if (preg_match('/^[0-9a-z-]+$/', $keys)) {
$or_condition
->condition('uuid', $keys);
}
$query
->condition($query
->orConditionGroup()
->condition('sid', $sub_query, 'IN')
->condition($or_condition));
}
// Filter by (submission) state.
switch ($state) {
case static::STATE_STARRED:
$query
->condition('sticky', 1);
break;
case static::STATE_UNSTARRED:
$query
->condition('sticky', 0);
break;
case static::STATE_LOCKED:
$query
->condition('locked', 1);
break;
case static::STATE_UNLOCKED:
$query
->condition('locked', 0);
break;
case static::STATE_DRAFT:
$query
->condition('in_draft', 1);
break;
case static::STATE_COMPLETED:
$query
->condition('in_draft', 0);
break;
}
// Filter by source entity.
if ($source_entity && strpos($source_entity, ':') !== FALSE) {
list($entity_type, $entity_id) = explode(':', $source_entity);
$query
->condition('entity_type', $entity_type);
$query
->condition('entity_id', $entity_id);
}
// Filter by draft. (Only applies to user submissions and drafts)
if (isset($this->draft)) {
// Cast boolean to integer to support SQLite.
$query
->condition('in_draft', (int) $this->draft);
}
return $query;
}