Skip to content
Snippets Groups Projects
Verified Commit 1c773fed authored by Dave Long's avatar Dave Long
Browse files

Issue #3476175 by daffie, rajneeshb, smustgrave, dagmar: Change the filter in...

Issue #3476175 by daffie, rajneeshb, smustgrave, dagmar: Change the filter in the overview page of the dblog module to a condition object
parent 22098897
No related branches found
No related tags found
No related merge requests found
...@@ -28,14 +28,14 @@ function dblog_filters() { ...@@ -28,14 +28,14 @@ function dblog_filters() {
if (!empty($types)) { if (!empty($types)) {
$filters['type'] = [ $filters['type'] = [
'title' => t('Type'), 'title' => t('Type'),
'where' => "w.type = ?", 'field' => 'w.type',
'options' => $types, 'options' => $types,
]; ];
} }
$filters['severity'] = [ $filters['severity'] = [
'title' => t('Severity'), 'title' => t('Severity'),
'where' => 'w.severity = ?', 'field' => 'w.severity',
'options' => RfcLogLevel::getLevels(), 'options' => RfcLogLevel::getLevels(),
]; ];
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Database\Connection; use Drupal\Core\Database\Connection;
use Drupal\Core\Database\Query\PagerSelectExtender; use Drupal\Core\Database\Query\PagerSelectExtender;
use Drupal\Core\Database\Query\SelectInterface;
use Drupal\Core\Database\Query\TableSortExtender; use Drupal\Core\Database\Query\TableSortExtender;
use Drupal\Core\Datetime\DateFormatterInterface; use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Extension\ModuleHandlerInterface;
...@@ -104,7 +105,6 @@ public static function getLogLevelClassMap() { ...@@ -104,7 +105,6 @@ public static function getLogLevelClassMap() {
*/ */
public function overview(Request $request) { public function overview(Request $request) {
$filter = $this->buildFilterQuery($request);
$rows = []; $rows = [];
$classes = static::getLogLevelClassMap(); $classes = static::getLogLevelClassMap();
...@@ -154,9 +154,8 @@ public function overview(Request $request) { ...@@ -154,9 +154,8 @@ public function overview(Request $request) {
]); ]);
$query->leftJoin('users_field_data', 'ufd', '[w].[uid] = [ufd].[uid]'); $query->leftJoin('users_field_data', 'ufd', '[w].[uid] = [ufd].[uid]');
if (!empty($filter['where'])) { $this->addFilterToQuery($request, $query);
$query->where($filter['where'], $filter['args']);
}
$result = $query $result = $query
->limit(50) ->limit(50)
->orderByHeader($header) ->orderByHeader($header)
...@@ -306,14 +305,16 @@ public function eventDetails($event_id) { ...@@ -306,14 +305,16 @@ public function eventDetails($event_id) {
/** /**
* Builds a query for database log administration filters based on session. * Builds a query for database log administration filters based on session.
* *
* This method retrieves the session-based filters from the request and applies
* them to the provided query object. If no filters are present, the query is
* left unchanged.
*
* @param \Symfony\Component\HttpFoundation\Request $request * @param \Symfony\Component\HttpFoundation\Request $request
* The request. * The request.
* * @param \Drupal\Core\Database\Query\SelectInterface $query
* @return array|null * The database query.
* An associative array with keys 'where' and 'args' or NULL if there were
* no filters set.
*/ */
protected function buildFilterQuery(Request $request) { protected function addFilterToQuery(Request $request, SelectInterface &$query): void {
$session_filters = $request->getSession()->get('dblog_overview_filter', []); $session_filters = $request->getSession()->get('dblog_overview_filter', []);
if (empty($session_filters)) { if (empty($session_filters)) {
return; return;
...@@ -323,24 +324,29 @@ protected function buildFilterQuery(Request $request) { ...@@ -323,24 +324,29 @@ protected function buildFilterQuery(Request $request) {
$filters = dblog_filters(); $filters = dblog_filters();
// Build query. // Build the condition.
$where = $args = []; $condition_and = $query->getConnection()->condition('AND');
$condition_and_used = FALSE;
foreach ($session_filters as $key => $filter) { foreach ($session_filters as $key => $filter) {
$filter_where = []; $condition_or = $query->getConnection()->condition('OR');
$condition_or_used = FALSE;
foreach ($filter as $value) { foreach ($filter as $value) {
$filter_where[] = $filters[$key]['where']; if ($key == 'severity') {
$args[] = $value; $value = (int) $value;
}
if (in_array($value, array_keys($filters[$key]['options']))) {
$condition_or->condition($filters[$key]['field'], $value);
$condition_or_used = TRUE;
}
} }
if (!empty($filter_where)) { if ($condition_or_used) {
$where[] = '(' . implode(' OR ', $filter_where) . ')'; $condition_and->condition($condition_or);
$condition_and_used = TRUE;
} }
} }
$where = !empty($where) ? implode(' AND ', $where) : ''; if ($condition_and_used) {
$query->condition($condition_and);
return [ }
'where' => $where,
'args' => $args,
];
} }
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment