From 200b7a2cd4284590ba8f59a8229f57a231b74ab5 Mon Sep 17 00:00:00 2001 From: Elorfin Date: Wed, 9 Feb 2022 07:57:44 +0100 Subject: [PATCH] allows to filter on disabled users --- .../tools/community/user/components/users.jsx | 8 ++++++ .../Finder/ResourceUserEvaluationFinder.php | 11 +++++++- .../Finder/WorkspaceEvaluationFinder.php | 11 +++++++- .../data/sources/resource-evaluations.js | 7 +++++ .../data/sources/workspace-evaluations.js | 7 +++++ .../tools/evaluation/components/users.jsx | 7 +++++ .../cursus/Finder/EventPresenceFinder.php | 18 +++++++++++++ .../Finder/Registration/CourseUserFinder.php | 18 +++++++++++++ .../Finder/Registration/EventUserFinder.php | 18 +++++++++++++ .../Finder/Registration/SessionUserFinder.php | 19 ++++++++++++++ .../modules/event/components/participants.jsx | 7 +++++ .../modules/session/components/users.jsx | 7 +++++ src/plugin/drop-zone/Finder/DropFinder.php | 25 +++++++++++++++++- .../correction/components/correctors.jsx | 7 +++++ .../dropzone/correction/components/drops.jsx | 7 +++++ src/plugin/exo/Finder/PaperFinder.php | 26 ++++++++++++++++++- .../quiz/papers/components/papers.jsx | 7 +++++ .../open-badge/Finder/AssertionFinder.php | 18 +++++++++++++ .../tools/badges/badge/components/details.jsx | 7 +++++ src/plugin/scorm/Finder/ScoTrackingFinder.php | 16 ++++++++++-- .../scorm/player/components/results.jsx | 7 +++++ 21 files changed, 252 insertions(+), 6 deletions(-) diff --git a/src/main/core/Resources/modules/tools/community/user/components/users.jsx b/src/main/core/Resources/modules/tools/community/user/components/users.jsx index ef827f75f6d..a74f0cb082c 100644 --- a/src/main/core/Resources/modules/tools/community/user/components/users.jsx +++ b/src/main/core/Resources/modules/tools/community/user/components/users.jsx @@ -92,6 +92,14 @@ const UsersList = props => filters: [] } : undefined } + }, { + name: 'restrictions.disabled', + alias: 'isDisabled', + type: 'boolean', + label: trans('disabled'), + displayable: false, + sortable: false, + filterable: true } ]} card={UserCard} diff --git a/src/main/evaluation/Finder/ResourceUserEvaluationFinder.php b/src/main/evaluation/Finder/ResourceUserEvaluationFinder.php index 9b22ab2a694..ae58fe4d8d0 100644 --- a/src/main/evaluation/Finder/ResourceUserEvaluationFinder.php +++ b/src/main/evaluation/Finder/ResourceUserEvaluationFinder.php @@ -31,7 +31,7 @@ public function configureQueryBuilder( $userJoin = false; $nodeJoin = false; - if (!array_key_exists('user', $searches)) { + if (!array_key_exists('userDisabled', $searches) && !array_key_exists('user', $searches)) { // don't show evaluation of disabled/deleted users $qb->join('obj.user', 'u'); $userJoin = true; @@ -50,6 +50,15 @@ public function configureQueryBuilder( $qb->andWhere("u.uuid = :{$filterName}"); $qb->setParameter($filterName, $filterValue); break; + case 'userDisabled': + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } + $qb->andWhere('u.isEnabled = :isEnabled'); + $qb->andWhere('u.isRemoved = FALSE'); + $qb->setParameter('isEnabled', !$filterValue); + break; case 'user.firstName': if (!$userJoin) { $qb->join('obj.user', 'u'); diff --git a/src/main/evaluation/Finder/WorkspaceEvaluationFinder.php b/src/main/evaluation/Finder/WorkspaceEvaluationFinder.php index 41e8286a9cf..bd138b4ea20 100644 --- a/src/main/evaluation/Finder/WorkspaceEvaluationFinder.php +++ b/src/main/evaluation/Finder/WorkspaceEvaluationFinder.php @@ -29,7 +29,7 @@ public function configureQueryBuilder( array $options = ['count' => false, 'page' => 0, 'limit' => -1] ) { $userJoin = false; - if (!array_key_exists('user', $searches)) { + if (!array_key_exists('userDisabled', $searches) && !array_key_exists('user', $searches)) { // don't show evaluation of disabled/deleted users $qb->join('obj.user', 'u'); $userJoin = true; @@ -70,6 +70,15 @@ public function configureQueryBuilder( $qb->andWhere("u.uuid = :{$filterName}"); $qb->setParameter($filterName, $filterValue); break; + case 'userDisabled': + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } + $qb->andWhere('u.isEnabled = :isEnabled'); + $qb->andWhere('u.isRemoved = FALSE'); + $qb->setParameter('isEnabled', !$filterValue); + break; default: $this->setDefaults($qb, $filterName, $filterValue); } diff --git a/src/main/evaluation/Resources/modules/data/sources/resource-evaluations.js b/src/main/evaluation/Resources/modules/data/sources/resource-evaluations.js index 60cae6b28f4..bc8a9e074fc 100644 --- a/src/main/evaluation/Resources/modules/data/sources/resource-evaluations.js +++ b/src/main/evaluation/Resources/modules/data/sources/resource-evaluations.js @@ -63,6 +63,13 @@ export default { }, displayed: true, filterable: false + }, { + name: 'userDisabled', + label: trans('user_disabled'), + type: 'boolean', + displayable: false, + sortable: false, + filterable: true } ] } diff --git a/src/main/evaluation/Resources/modules/data/sources/workspace-evaluations.js b/src/main/evaluation/Resources/modules/data/sources/workspace-evaluations.js index f28f4ccb503..35c36be8bf0 100644 --- a/src/main/evaluation/Resources/modules/data/sources/workspace-evaluations.js +++ b/src/main/evaluation/Resources/modules/data/sources/workspace-evaluations.js @@ -63,6 +63,13 @@ export default { }, displayed: true, filterable: false + }, { + name: 'userDisabled', + label: trans('user_disabled'), + type: 'boolean', + displayable: false, + sortable: false, + filterable: true } ] } diff --git a/src/main/evaluation/Resources/modules/tools/evaluation/components/users.jsx b/src/main/evaluation/Resources/modules/tools/evaluation/components/users.jsx index 545f2febf12..8a1950eb6b5 100644 --- a/src/main/evaluation/Resources/modules/tools/evaluation/components/users.jsx +++ b/src/main/evaluation/Resources/modules/tools/evaluation/components/users.jsx @@ -105,6 +105,13 @@ const EvaluationUsers = (props) => }, displayed: true, filterable: false + }, { + name: 'userDisabled', + label: trans('user_disabled'), + type: 'boolean', + displayable: false, + sortable: false, + filterable: true } ]} actions={(rows) => [ diff --git a/src/plugin/cursus/Finder/EventPresenceFinder.php b/src/plugin/cursus/Finder/EventPresenceFinder.php index 4ba1e3bda9e..74e8b3956b4 100644 --- a/src/plugin/cursus/Finder/EventPresenceFinder.php +++ b/src/plugin/cursus/Finder/EventPresenceFinder.php @@ -25,6 +25,14 @@ public static function getClass(): string public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], array $sortBy = null, array $options = ['count' => false, 'page' => 0, 'limit' => -1]) { $userJoin = false; + if (!array_key_exists('userDisabled', $searches) && !array_key_exists('user', $searches)) { + // don't show presences of disabled/deleted users + $qb->join('obj.user', 'u'); + $userJoin = true; + + $qb->andWhere('u.isEnabled = TRUE'); + $qb->andWhere('u.isRemoved = FALSE'); + } foreach ($searches as $filterName => $filterValue) { switch ($filterName) { @@ -44,6 +52,16 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $qb->setParameter($filterName, $filterValue); break; + case 'userDisabled': + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } + $qb->andWhere('u.isEnabled = :isEnabled'); + $qb->andWhere('u.isRemoved = FALSE'); + $qb->setParameter('isEnabled', !$filterValue); + break; + default: $this->setDefaults($qb, $filterName, $filterValue); } diff --git a/src/plugin/cursus/Finder/Registration/CourseUserFinder.php b/src/plugin/cursus/Finder/Registration/CourseUserFinder.php index 4879ab22e37..b6f4253219e 100644 --- a/src/plugin/cursus/Finder/Registration/CourseUserFinder.php +++ b/src/plugin/cursus/Finder/Registration/CourseUserFinder.php @@ -25,6 +25,14 @@ public static function getClass(): string public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], array $sortBy = null, array $options = ['count' => false, 'page' => 0, 'limit' => -1]) { $userJoin = false; + if (!array_key_exists('userDisabled', $searches) && !array_key_exists('user', $searches)) { + // don't show registrations of disabled/deleted users + $qb->join('obj.user', 'u'); + $userJoin = true; + + $qb->andWhere('u.isEnabled = TRUE'); + $qb->andWhere('u.isRemoved = FALSE'); + } foreach ($searches as $filterName => $filterValue) { switch ($filterName) { @@ -44,6 +52,16 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $qb->setParameter($filterName, $filterValue); break; + case 'userDisabled': + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } + $qb->andWhere('u.isEnabled = :isEnabled'); + $qb->andWhere('u.isRemoved = FALSE'); + $qb->setParameter('isEnabled', !$filterValue); + break; + case 'organizations': if (!$userJoin) { $qb->join('obj.user', 'u'); diff --git a/src/plugin/cursus/Finder/Registration/EventUserFinder.php b/src/plugin/cursus/Finder/Registration/EventUserFinder.php index bdd3116653c..4222318786b 100644 --- a/src/plugin/cursus/Finder/Registration/EventUserFinder.php +++ b/src/plugin/cursus/Finder/Registration/EventUserFinder.php @@ -25,6 +25,14 @@ public static function getClass(): string public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], array $sortBy = null, array $options = ['count' => false, 'page' => 0, 'limit' => -1]) { $userJoin = false; + if (!array_key_exists('userDisabled', $searches) && !array_key_exists('user', $searches)) { + // don't show registrations of disabled/deleted users + $qb->join('obj.user', 'u'); + $userJoin = true; + + $qb->andWhere('u.isEnabled = TRUE'); + $qb->andWhere('u.isRemoved = FALSE'); + } foreach ($searches as $filterName => $filterValue) { switch ($filterName) { @@ -44,6 +52,16 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $qb->setParameter($filterName, $filterValue); break; + case 'userDisabled': + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } + $qb->andWhere('u.isEnabled = :isEnabled'); + $qb->andWhere('u.isRemoved = FALSE'); + $qb->setParameter('isEnabled', !$filterValue); + break; + case 'organizations': if (!$userJoin) { $qb->join('obj.user', 'u'); diff --git a/src/plugin/cursus/Finder/Registration/SessionUserFinder.php b/src/plugin/cursus/Finder/Registration/SessionUserFinder.php index 370967e16de..d2984c39d1c 100644 --- a/src/plugin/cursus/Finder/Registration/SessionUserFinder.php +++ b/src/plugin/cursus/Finder/Registration/SessionUserFinder.php @@ -27,6 +27,15 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $userJoin = false; $sessionJoin = false; + if (!array_key_exists('userDisabled', $searches) && !array_key_exists('user', $searches)) { + // don't show registrations of disabled/deleted users + $qb->join('obj.user', 'u'); + $userJoin = true; + + $qb->andWhere('u.isEnabled = TRUE'); + $qb->andWhere('u.isRemoved = FALSE'); + } + foreach ($searches as $filterName => $filterValue) { switch ($filterName) { case 'course': @@ -58,6 +67,16 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $qb->setParameter($filterName, $filterValue); break; + case 'userDisabled': + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } + $qb->andWhere('u.isEnabled = :isEnabled'); + $qb->andWhere('u.isRemoved = FALSE'); + $qb->setParameter('isEnabled', !$filterValue); + break; + case 'organizations': if (!$userJoin) { $qb->join('obj.user', 'u'); diff --git a/src/plugin/cursus/Resources/modules/event/components/participants.jsx b/src/plugin/cursus/Resources/modules/event/components/participants.jsx index fb3b9cc6b01..629385b4fb1 100644 --- a/src/plugin/cursus/Resources/modules/event/components/participants.jsx +++ b/src/plugin/cursus/Resources/modules/event/components/participants.jsx @@ -139,6 +139,13 @@ const EventPresences = (props) => ), displayed: true + }, { + name: 'userDisabled', + label: trans('user_disabled'), + type: 'boolean', + displayable: false, + sortable: false, + filterable: true } ]} actions={(rows) => [ diff --git a/src/plugin/cursus/Resources/modules/session/components/users.jsx b/src/plugin/cursus/Resources/modules/session/components/users.jsx index b171567def9..36607d73f47 100644 --- a/src/plugin/cursus/Resources/modules/session/components/users.jsx +++ b/src/plugin/cursus/Resources/modules/session/components/users.jsx @@ -35,6 +35,13 @@ const SessionUsers = (props) => label: trans('registration_date', {}, 'cursus'), options: {time: true}, displayed: true + }, { + name: 'userDisabled', + label: trans('user_disabled'), + type: 'boolean', + displayable: false, + sortable: false, + filterable: true } ]} actions={props.actions} diff --git a/src/plugin/drop-zone/Finder/DropFinder.php b/src/plugin/drop-zone/Finder/DropFinder.php index 8a1bfc56780..8e9fd4252e6 100644 --- a/src/plugin/drop-zone/Finder/DropFinder.php +++ b/src/plugin/drop-zone/Finder/DropFinder.php @@ -24,6 +24,16 @@ public static function getClass(): string public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], array $sortBy = null, array $options = ['count' => false, 'page' => 0, 'limit' => -1]) { + $userJoin = false; + if (!array_key_exists('userDisabled', $searches) && !array_key_exists('user', $searches)) { + // don't show evaluation of disabled/deleted users + $qb->join('obj.user', 'u'); + $userJoin = true; + + $qb->andWhere('u.isEnabled = TRUE'); + $qb->andWhere('u.isRemoved = FALSE'); + } + foreach ($searches as $filterName => $filterValue) { switch ($filterName) { case 'dropzone': @@ -32,7 +42,11 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $qb->setParameter('dropzoneUuid', $searches['dropzone']); break; case 'user': - $qb->join('obj.user', 'u'); + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } + $qb->andWhere(" UPPER(u.firstName) LIKE :name OR UPPER(u.lastName) LIKE :name @@ -42,6 +56,15 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar "); $qb->setParameter('name', '%'.strtoupper($filterValue).'%'); break; + case 'userDisabled': + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } + $qb->andWhere('u.isEnabled = :isEnabled'); + $qb->andWhere('u.isRemoved = FALSE'); + $qb->setParameter('isEnabled', !$filterValue); + break; default: $this->setDefaults($qb, $filterName, $filterValue); } diff --git a/src/plugin/drop-zone/Resources/modules/resources/dropzone/correction/components/correctors.jsx b/src/plugin/drop-zone/Resources/modules/resources/dropzone/correction/components/correctors.jsx index 94a57a44bb3..af98cc3f343 100644 --- a/src/plugin/drop-zone/Resources/modules/resources/dropzone/correction/components/correctors.jsx +++ b/src/plugin/drop-zone/Resources/modules/resources/dropzone/correction/components/correctors.jsx @@ -88,6 +88,13 @@ const Correctors = props => label: trans('unlocked', {}, 'dropzone'), displayed: true, type: 'boolean' + }, { + name: 'userDisabled', + label: trans('user_disabled'), + type: 'boolean', + displayable: false, + sortable: false, + filterable: true } ]} actions={(rows) => [ diff --git a/src/plugin/drop-zone/Resources/modules/resources/dropzone/correction/components/drops.jsx b/src/plugin/drop-zone/Resources/modules/resources/dropzone/correction/components/drops.jsx index f18acb638f4..98ca9d96f73 100644 --- a/src/plugin/drop-zone/Resources/modules/resources/dropzone/correction/components/drops.jsx +++ b/src/plugin/drop-zone/Resources/modules/resources/dropzone/correction/components/drops.jsx @@ -96,6 +96,13 @@ const DropsList = props => current: row.score, total: props.dropzone.parameters.scoreMax }) + }, { + name: 'userDisabled', + label: trans('user_disabled'), + type: 'boolean', + displayable: false, + sortable: false, + filterable: true } ]} actions={(rows) => [ diff --git a/src/plugin/exo/Finder/PaperFinder.php b/src/plugin/exo/Finder/PaperFinder.php index 550294c4906..f91ae7519b0 100644 --- a/src/plugin/exo/Finder/PaperFinder.php +++ b/src/plugin/exo/Finder/PaperFinder.php @@ -27,6 +27,16 @@ public static function getClass(): string public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], array $sortBy = null, array $options = ['count' => false, 'page' => 0, 'limit' => -1]) { + $userJoin = false; + if (!array_key_exists('userDisabled', $searches) && !array_key_exists('user', $searches)) { + // don't show evaluation of disabled/deleted users + $qb->join('obj.user', 'u'); + $userJoin = true; + + $qb->andWhere('u.isEnabled = TRUE'); + $qb->andWhere('u.isRemoved = FALSE'); + } + foreach ($searches as $filterName => $filterValue) { switch ($filterName) { case 'exercise': @@ -34,12 +44,26 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $qb->andWhere('e.id = :exerciseId'); $qb->setParameter('exerciseId', $searches['exercise']); break; + case 'user': - $qb->join('obj.user', 'u'); + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } $qb->andWhere('u.uuid = :userId'); $qb->setParameter('userId', $filterValue); break; + case 'userDisabled': + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } + $qb->andWhere('u.isEnabled = :isEnabled'); + $qb->andWhere('u.isRemoved = FALSE'); + $qb->setParameter('isEnabled', !$filterValue); + break; + case 'finished': $qb->andWhere("obj.interrupted != :{$filterName}"); $qb->setParameter($filterName, $filterValue); diff --git a/src/plugin/exo/Resources/modules/resources/quiz/papers/components/papers.jsx b/src/plugin/exo/Resources/modules/resources/quiz/papers/components/papers.jsx index 34e36275e41..e07525d1ed2 100644 --- a/src/plugin/exo/Resources/modules/resources/quiz/papers/components/papers.jsx +++ b/src/plugin/exo/Resources/modules/resources/quiz/papers/components/papers.jsx @@ -101,6 +101,13 @@ const Papers = props => return null } + }, { + name: 'userDisabled', + label: trans('user_disabled'), + type: 'boolean', + displayable: false, + sortable: false, + filterable: true } ]} diff --git a/src/plugin/open-badge/Finder/AssertionFinder.php b/src/plugin/open-badge/Finder/AssertionFinder.php index 2bd5c90d36a..8fae2e1da4b 100644 --- a/src/plugin/open-badge/Finder/AssertionFinder.php +++ b/src/plugin/open-badge/Finder/AssertionFinder.php @@ -43,6 +43,15 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $userJoin = false; $workspaceJoin = false; + if (!array_key_exists('userDisabled', $searches) && !array_key_exists('user', $searches) && !array_key_exists('recipient', $searches)) { + // don't show assertions of disabled/deleted users + $qb->join('obj.recipient', 'u'); + $userJoin = true; + + $qb->andWhere('u.isEnabled = TRUE'); + $qb->andWhere('u.isRemoved = FALSE'); + } + /** @var User $user */ $user = $this->tokenStorage->getToken()->getUser(); @@ -72,6 +81,15 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $qb->andWhere('u.uuid = :user'); $qb->setParameter('user', $filterValue); break; + case 'userDisabled': + if (!$userJoin) { + $qb->join('obj.recipient', 'u'); + $userJoin = true; + } + $qb->andWhere('u.isEnabled = :isEnabled'); + $qb->andWhere('u.isRemoved = FALSE'); + $qb->setParameter('isEnabled', !$filterValue); + break; case 'fromGrantableBadges': $grantDecoder = $this->toolMaskDecoderManager->getMaskDecoderByToolAndName( $this->om->getRepository(Tool::class)->findOneBy(['name' => 'badges']), diff --git a/src/plugin/open-badge/Resources/modules/tools/badges/badge/components/details.jsx b/src/plugin/open-badge/Resources/modules/tools/badges/badge/components/details.jsx index a02f1920426..e7098951dc9 100644 --- a/src/plugin/open-badge/Resources/modules/tools/badges/badge/components/details.jsx +++ b/src/plugin/open-badge/Resources/modules/tools/badges/badge/components/details.jsx @@ -106,6 +106,13 @@ const BadgeDetailsComponent = (props) => { options: { time: true } + }, { + name: 'userDisabled', + label: trans('user_disabled'), + type: 'boolean', + displayable: false, + sortable: false, + filterable: true } ]} actions={(rows) => [ diff --git a/src/plugin/scorm/Finder/ScoTrackingFinder.php b/src/plugin/scorm/Finder/ScoTrackingFinder.php index d3216e074be..e0721038f4c 100644 --- a/src/plugin/scorm/Finder/ScoTrackingFinder.php +++ b/src/plugin/scorm/Finder/ScoTrackingFinder.php @@ -26,11 +26,13 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $qb->join('obj.sco', 'sco'); $userJoin = false; - if (!in_array('user', $searches) && !in_array('userEmail', $searches)) { + if (!array_key_exists('userDisabled', $searches) && !in_array('user', $searches) && !in_array('userEmail', $searches)) { // only return results for enabled users $qb->join('obj.user', 'u'); - $qb->andWhere('u.isEnabled = true AND u.isRemoved = false'); $userJoin = true; + + $qb->andWhere('u.isEnabled = TRUE'); + $qb->andWhere('u.isRemoved = FALSE'); } foreach ($searches as $filterName => $filterValue) { @@ -50,6 +52,16 @@ public function configureQueryBuilder(QueryBuilder $qb, array $searches = [], ar $qb->setParameter($filterName, $filterValue); break; + case 'userDisabled': + if (!$userJoin) { + $qb->join('obj.user', 'u'); + $userJoin = true; + } + $qb->andWhere('u.isEnabled = :isEnabled'); + $qb->andWhere('u.isRemoved = FALSE'); + $qb->setParameter('isEnabled', !$filterValue); + break; + case 'userEmail': if (!$userJoin) { $qb->join('obj.user', 'u'); diff --git a/src/plugin/scorm/Resources/modules/resources/scorm/player/components/results.jsx b/src/plugin/scorm/Resources/modules/resources/scorm/player/components/results.jsx index 980f3de345b..179fa073ee7 100644 --- a/src/plugin/scorm/Resources/modules/resources/scorm/player/components/results.jsx +++ b/src/plugin/scorm/Resources/modules/resources/scorm/player/components/results.jsx @@ -127,6 +127,13 @@ const ResultsComponent = props => filterable: false, sortable: constants.SCORM_2004 === props.scorm.version, calculated: (rowData) => rowData.progression + '%' + }, { + name: 'userDisabled', + label: trans('user_disabled'), + type: 'boolean', + displayable: false, + sortable: false, + filterable: true } ]} />