Skip to content
Snippets Groups Projects
Commit 4a3d4b07 authored by catch's avatar catch
Browse files

Issue #3495936 by daffie, benjifisher: Change the filter in the details page...

Issue #3495936 by daffie, benjifisher: Change the filter in the details page for migration messages to a condition object
parent cb230b71
No related branches found
No related tags found
3 merge requests!5423Draft: Resolve #3329907 "Test2",!3478Issue #3337882: Deleted menus are not removed from content type config,!579Issue #2230909: Simple decimals fail to pass validation
Pipeline #482467 passed with warnings
Pipeline: drupal

#482472

    ...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
    use Drupal\Core\Database\Connection; use Drupal\Core\Database\Connection;
    use Drupal\Core\Database\DatabaseConnectionRefusedException; use Drupal\Core\Database\DatabaseConnectionRefusedException;
    use Drupal\Core\Database\DatabaseNotFoundException; use Drupal\Core\Database\DatabaseNotFoundException;
    use Drupal\Core\Database\Query\SelectInterface;
    use Drupal\Core\Form\FormBuilderInterface; use Drupal\Core\Form\FormBuilderInterface;
    use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\Core\StringTranslation\TranslatableMarkup;
    use Drupal\Core\Url; use Drupal\Core\Url;
    ...@@ -189,10 +190,7 @@ public function details(string $migration_id, Request $request): array { ...@@ -189,10 +190,7 @@ public function details(string $migration_id, Request $request): array {
    $query->leftJoin($map_table, 'map', 'msg.source_ids_hash = map.source_ids_hash'); $query->leftJoin($map_table, 'map', 'msg.source_ids_hash = map.source_ids_hash');
    $query->fields('msg'); $query->fields('msg');
    $query->fields('map'); $query->fields('map');
    $filter = $this->buildFilterQuery($request); $this->addFilterToQuery($request, $query);
    if (!empty($filter['where'])) {
    $query->where($filter['where'], $filter['args']);
    }
    $result = $query $result = $query
    ->limit(50) ->limit(50)
    ->orderByHeader($header) ->orderByHeader($header)
    ...@@ -238,54 +236,45 @@ public function details(string $migration_id, Request $request): array { ...@@ -238,54 +236,45 @@ public function details(string $migration_id, Request $request): array {
    } }
    /** /**
    * Builds a query for migrate message administration. * Adds a filter to the query for migrate message administration.
    *
    * 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): ?array { protected function addFilterToQuery(Request $request, SelectInterface $query): void {
    $session_filters = $request->getSession()->get('migration_messages_overview_filter', []); $session_filters = $request->getSession()->get('migration_messages_overview_filter', []);
    if (empty($session_filters)) { if (empty($session_filters)) {
    return NULL; return;
    } }
    // Build query. // Build the condition.
    $where = $args = [];
    foreach ($session_filters as $filter) { foreach ($session_filters as $filter) {
    $filter_where = []; if (empty($filter['value'])) {
    continue;
    }
    switch ($filter['type']) { switch ($filter['type']) {
    case 'array': case 'array':
    foreach ($filter['value'] as $value) { $values = array_values($filter['value']);
    $filter_where[] = $filter['where']; if ($filter['field'] === 'msg.level') {
    $args[] = $value; $values = array_map(fn($x) => (int) $x, $values);
    } }
    $query->condition($filter['field'], $values, 'IN');
    break; break;
    case 'string': case 'string':
    $filter_where[] = $filter['where']; $query->condition($filter['field'], "%{$filter['value']}%", 'LIKE');
    $args[] = '%' . $filter['value'] . '%';
    break; break;
    default: default:
    $filter_where[] = $filter['where']; $query->condition($filter['field'], $filter['value']);
    $args[] = $filter['value'];
    }
    if (!empty($filter_where)) {
    $where[] = '(' . implode(' OR ', $filter_where) . ')';
    } }
    } }
    $where = !empty($where) ? implode(' AND ', $where) : '';
    return [
    'where' => $where,
    'args' => $args,
    ];
    } }
    /** /**
    ......
    ...@@ -82,19 +82,19 @@ public function buildForm(array $form, FormStateInterface $form_state) { ...@@ -82,19 +82,19 @@ public function buildForm(array $form, FormStateInterface $form_state) {
    public function submitForm(array &$form, FormStateInterface $form_state) { public function submitForm(array &$form, FormStateInterface $form_state) {
    $filters['message'] = [ $filters['message'] = [
    'title' => $this->t('message'), 'title' => $this->t('message'),
    'where' => 'msg.message LIKE ?', 'field' => 'msg.message',
    'type' => 'string', 'type' => 'string',
    ]; ];
    $filters['severity'] = [ $filters['severity'] = [
    'title' => $this->t('Severity'), 'title' => $this->t('Severity'),
    'where' => 'msg.level = ?', 'field' => 'msg.level',
    'type' => 'array', 'type' => 'array',
    ]; ];
    $session_filters = $this->getRequest()->getSession()->get('migration_messages_overview_filter', []); $session_filters = $this->getRequest()->getSession()->get('migration_messages_overview_filter', []);
    foreach ($filters as $name => $filter) { foreach ($filters as $name => $filter) {
    if ($form_state->hasValue($name)) { if ($form_state->hasValue($name)) {
    $session_filters[$name] = [ $session_filters[$name] = [
    'where' => $filter['where'], 'field' => $filter['field'],
    'value' => $form_state->getValue($name), 'value' => $form_state->getValue($name),
    'type' => $filter['type'], 'type' => $filter['type'],
    ]; ];
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment