mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-12 13:24:25 +00:00
Feature: [export][activity] Add filter and aggregator by users
(participating to the activity)
This commit is contained in:
parent
3e5be50a87
commit
4ed760949a
@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Chill is a software for social workers
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view
|
||||||
|
* the LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Chill\ActivityBundle\Export\Aggregator;
|
||||||
|
|
||||||
|
use Chill\ActivityBundle\Export\Declarations;
|
||||||
|
use Chill\MainBundle\Export\AggregatorInterface;
|
||||||
|
use Chill\MainBundle\Repository\UserRepositoryInterface;
|
||||||
|
use Chill\MainBundle\Templating\Entity\UserRender;
|
||||||
|
use Doctrine\ORM\QueryBuilder;
|
||||||
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
|
use function in_array;
|
||||||
|
|
||||||
|
class ActivityUsersAggregator implements AggregatorInterface
|
||||||
|
{
|
||||||
|
private UserRender $userRender;
|
||||||
|
|
||||||
|
private UserRepositoryInterface $userRepository;
|
||||||
|
|
||||||
|
public function __construct(UserRepositoryInterface $userRepository, UserRender $userRender)
|
||||||
|
{
|
||||||
|
$this->userRepository = $userRepository;
|
||||||
|
$this->userRender = $userRender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addRole(): ?string
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function alterQuery(QueryBuilder $qb, $data)
|
||||||
|
{
|
||||||
|
if (!in_array('actusers', $qb->getAllAliases(), true)) {
|
||||||
|
$qb->leftJoin('activity.users', 'actusers');
|
||||||
|
}
|
||||||
|
|
||||||
|
$qb
|
||||||
|
->addSelect('actusers.id AS activity_users_aggregator')
|
||||||
|
->addGroupBy('activity_users_aggregator');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function applyOn(): string
|
||||||
|
{
|
||||||
|
return Declarations::ACTIVITY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function buildForm(FormBuilderInterface $builder)
|
||||||
|
{
|
||||||
|
// nothing to add on the form
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLabels($key, array $values, $data)
|
||||||
|
{
|
||||||
|
return function ($value) {
|
||||||
|
if ('_header' === $value) {
|
||||||
|
return 'Activity users';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null === $value) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$u = $this->userRepository->find($value);
|
||||||
|
|
||||||
|
return $this->userRender->renderString($u, []);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getQueryKeys($data)
|
||||||
|
{
|
||||||
|
return ['activity_users_aggregator'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTitle()
|
||||||
|
{
|
||||||
|
return 'Aggregate by activity users';
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Chill is a software for social workers
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view
|
||||||
|
* the LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Chill\ActivityBundle\Export\Filter;
|
||||||
|
|
||||||
|
use Chill\ActivityBundle\Export\Declarations;
|
||||||
|
use Chill\MainBundle\Export\FilterInterface;
|
||||||
|
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||||
|
use Chill\MainBundle\Templating\Entity\UserRender;
|
||||||
|
use Doctrine\ORM\QueryBuilder;
|
||||||
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
|
|
||||||
|
class ActivityUsersFilter implements FilterInterface
|
||||||
|
{
|
||||||
|
private UserRender $userRender;
|
||||||
|
|
||||||
|
public function __construct(UserRender $userRender)
|
||||||
|
{
|
||||||
|
$this->userRender = $userRender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addRole(): ?string
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function alterQuery(QueryBuilder $qb, $data)
|
||||||
|
{
|
||||||
|
$orX = $qb->expr()->orX();
|
||||||
|
|
||||||
|
foreach ($data['accepted_users'] as $key => $user) {
|
||||||
|
$orX->add($qb->expr()->isMemberOf(':activity_users_filter_u' . $key, 'activity.users'));
|
||||||
|
$qb->setParameter('activity_users_filter_u' . $key, $user);
|
||||||
|
}
|
||||||
|
|
||||||
|
$qb->andWhere($orX);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function applyOn()
|
||||||
|
{
|
||||||
|
return Declarations::ACTIVITY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function buildForm(FormBuilderInterface $builder)
|
||||||
|
{
|
||||||
|
$builder->add('accepted_users', PickUserDynamicType::class, [
|
||||||
|
'multiple' => true,
|
||||||
|
'label' => 'Users',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function describeAction($data, $format = 'string')
|
||||||
|
{
|
||||||
|
$users = [];
|
||||||
|
|
||||||
|
foreach ($data['accepted_users'] as $u) {
|
||||||
|
$users[] = $this->userRender->renderString($u, []);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ['Filtered activity by users: only %users%', [
|
||||||
|
'%users%' => implode(', ', $users),
|
||||||
|
]];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTitle(): string
|
||||||
|
{
|
||||||
|
return 'Filter activity by users';
|
||||||
|
}
|
||||||
|
}
|
@ -55,6 +55,10 @@ services:
|
|||||||
tags:
|
tags:
|
||||||
- { name: chill.export_filter, alias: 'activity_date_filter' }
|
- { name: chill.export_filter, alias: 'activity_date_filter' }
|
||||||
|
|
||||||
|
Chill\ActivityBundle\Export\Filter\ActivityUsersFilter:
|
||||||
|
tags:
|
||||||
|
- { name: chill.export_filter, alias: 'activity_users_filter' }
|
||||||
|
|
||||||
chill.activity.export.reason_filter:
|
chill.activity.export.reason_filter:
|
||||||
class: Chill\ActivityBundle\Export\Filter\PersonFilters\ActivityReasonFilter
|
class: Chill\ActivityBundle\Export\Filter\PersonFilters\ActivityReasonFilter
|
||||||
tags:
|
tags:
|
||||||
@ -159,3 +163,7 @@ services:
|
|||||||
Chill\ActivityBundle\Export\Aggregator\ACPAggregators\CreatorScopeAggregator:
|
Chill\ActivityBundle\Export\Aggregator\ACPAggregators\CreatorScopeAggregator:
|
||||||
tags:
|
tags:
|
||||||
- { name: chill.export_aggregator, alias: activity_creator_scope_aggregator }
|
- { name: chill.export_aggregator, alias: activity_creator_scope_aggregator }
|
||||||
|
|
||||||
|
Chill\ActivityBundle\Export\Aggregator\ActivityUsersAggregator:
|
||||||
|
tags:
|
||||||
|
- { name: chill.export_aggregator, alias: activity_users_aggregator }
|
||||||
|
@ -252,8 +252,6 @@ Filter by activity type: Filtrer les activités par type
|
|||||||
Filter activity by locationtype: Filtrer les activités par type de localisation
|
Filter activity by locationtype: Filtrer les activités par type de localisation
|
||||||
'Filtered activity by locationtype: only %types%': "Filtré par type de localisation: uniquement %types%"
|
'Filtered activity by locationtype: only %types%': "Filtré par type de localisation: uniquement %types%"
|
||||||
Accepted locationtype: Types de localisation
|
Accepted locationtype: Types de localisation
|
||||||
Filter activity by creator: Filtrer les activités par créateur de l'échange
|
|
||||||
'Filtered activity by creator: only %users%': "Filtré par créateur de l'échange: uniquement %users%"
|
|
||||||
Accepted users: TMS(s)
|
Accepted users: TMS(s)
|
||||||
Filter activity by emergency: Filtrer les activités par urgence
|
Filter activity by emergency: Filtrer les activités par urgence
|
||||||
'Filtered activity by emergency: only %emergency%': "Filtré par urgence: uniquement si %emergency%"
|
'Filtered activity by emergency: only %emergency%': "Filtré par urgence: uniquement si %emergency%"
|
||||||
@ -269,7 +267,11 @@ Filter activity by linked socialaction: Filtrer les activités par action liée
|
|||||||
Filter activity by linked socialissue: Filtrer les activités par problématique liée
|
Filter activity by linked socialissue: Filtrer les activités par problématique liée
|
||||||
'Filtered activity by linked socialissue: only %issues%': "Filtré par problématique liée: uniquement %issues%"
|
'Filtered activity by linked socialissue: only %issues%': "Filtré par problématique liée: uniquement %issues%"
|
||||||
Filter activity by user: Filtrer les activités par créateur
|
Filter activity by user: Filtrer les activités par créateur
|
||||||
'Filtered activity by user: only %users%': "Filtré par créateur: uniquement %users%"
|
Filter activity by users: Filtrer les activités par utilisateur participant
|
||||||
|
Filter activity by creator: Filtrer les activités par créateur de l'échange
|
||||||
|
'Filtered activity by user: only %users%': "Filtré par référent: uniquement %users%"
|
||||||
|
'Filtered activity by users: only %users%': "Filtré par utilisateurs participants: uniquement %users%"
|
||||||
|
'Filtered activity by creator: only %users%': "Filtré par créateur: uniquement %users%"
|
||||||
Creators: Créateurs
|
Creators: Créateurs
|
||||||
Filter activity by userscope: Filtrer les activités par service du créateur
|
Filter activity by userscope: Filtrer les activités par service du créateur
|
||||||
'Filtered activity by userscope: only %scopes%': "Filtré par service du créateur: uniquement %scopes%"
|
'Filtered activity by userscope: only %scopes%': "Filtré par service du créateur: uniquement %scopes%"
|
||||||
@ -282,7 +284,8 @@ By reason: Par sujet
|
|||||||
By category of reason: Par catégorie de sujet
|
By category of reason: Par catégorie de sujet
|
||||||
Reason's level: Niveau du sujet
|
Reason's level: Niveau du sujet
|
||||||
Group by reasons: Sujet d'activité
|
Group by reasons: Sujet d'activité
|
||||||
Aggregate by activity user: Grouper les activités par utilisateur
|
Aggregate by activity user: Grouper les activités par référent
|
||||||
|
Aggregate by activity users: Grouper les activités par utilisateurs participants
|
||||||
Aggregate by activity type: Grouper les activités par type
|
Aggregate by activity type: Grouper les activités par type
|
||||||
Aggregate by activity reason: Grouper les activités par sujet
|
Aggregate by activity reason: Grouper les activités par sujet
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user