exports: test all activity filters/aggregators and fix errors

This commit is contained in:
Mathieu Jaumotte 2022-08-24 11:22:54 +02:00
parent dea7982ca8
commit 52902e905a
14 changed files with 66 additions and 21 deletions

View File

@ -61,7 +61,11 @@ class BySocialActionAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->addSelect('IDENTITY(activity.socialActions) AS socialaction_aggregator'); if(!in_array('socialaction', $qb->getAllAliases())) {
$qb->join('activity.socialActions', 'socialaction');
}
$qb->addSelect('socialaction.id AS socialaction_aggregator');
$groupBy = $qb->getDQLPart('groupBy'); $groupBy = $qb->getDQLPart('groupBy');

View File

@ -62,7 +62,11 @@ class BySocialIssueAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->addSelect('IDENTITY(activity.socialIssues) AS socialissue_aggregator'); if (!in_array('socialissue', $qb->getAllAliases())) {
$qb->join('activity.socialIssues', 'socialissue');
}
$qb->addSelect('socialissue.id AS socialissue_aggregator');
$groupBy = $qb->getDQLPart('groupBy'); $groupBy = $qb->getDQLPart('groupBy');

View File

@ -30,7 +30,7 @@ class ByThirdpartyAggregator implements AggregatorInterface
{ {
return function ($value): string { return function ($value): string {
if ($value === '_header') { if ($value === '_header') {
return 'Thirdparty'; return 'Accepted thirdparty';
} }
$tp = $this->thirdPartyRepository->find($value); $tp = $this->thirdPartyRepository->find($value);
@ -61,7 +61,11 @@ class ByThirdpartyAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->addSelect('IDENTITY(activity.thirdParties) AS thirdparty_aggregator'); if (!in_array('thirdparty', $qb->getAllAliases())) {
$qb->join('activity.thirdParties', 'thirdparty');
}
$qb->addSelect('thirdparty.id AS thirdparty_aggregator');
$groupBy = $qb->getDQLPart('groupBy'); $groupBy = $qb->getDQLPart('groupBy');

View File

@ -61,7 +61,11 @@ class ByUserAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->addSelect('IDENTITY(activity.users) AS users_aggregator'); if (!in_array('user', $qb->getAllAliases())) {
$qb->join('activity.users', 'user');
}
$qb->addSelect('user.id AS users_aggregator');
$groupBy = $qb->getDQLPart('groupBy'); $groupBy = $qb->getDQLPart('groupBy');

View File

@ -16,7 +16,7 @@ class DateAggregator implements AggregatorInterface
{ {
private const CHOICES = [ private const CHOICES = [
'by month' => 'month', 'by month' => 'month',
'by week' => 'week', // sur base du numéro de la semaine 'by week' => 'week', // numéro de la semaine
'by year' => 'year', 'by year' => 'year',
]; ];
@ -60,6 +60,7 @@ class DateAggregator implements AggregatorInterface
public function buildForm(FormBuilderInterface $builder) public function buildForm(FormBuilderInterface $builder)
{ {
$builder->add('by_date', ChoiceType::class, [ $builder->add('by_date', ChoiceType::class, [
'label' => 'Frequency',
'choices' => self::CHOICES, 'choices' => self::CHOICES,
'multiple' => false, 'multiple' => false,
'expanded' => true, 'expanded' => true,

View File

@ -63,7 +63,11 @@ class LocationTypeAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->addSelect('IDENTITY(activity.location) AS locationtype_aggregator'); if (!in_array('location', $qb->getAllAliases())) {
$qb->join('activity.location', 'location');
}
$qb->addSelect('IDENTITY(location.locationType) AS locationtype_aggregator');
$groupBy = $qb->getDQLPart('groupBy'); $groupBy = $qb->getDQLPart('groupBy');

View File

@ -15,6 +15,7 @@ use Chill\ActivityBundle\Export\Declarations;
use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter; use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\UserRepository; use Chill\MainBundle\Repository\UserRepository;
use Chill\MainBundle\Templating\Entity\UserRender;
use Closure; use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@ -26,10 +27,14 @@ class ActivityUserAggregator implements AggregatorInterface
private UserRepository $userRepository; private UserRepository $userRepository;
private UserRender $userRender;
public function __construct( public function __construct(
UserRepository $userRepository UserRepository $userRepository,
UserRender $userRender
) { ) {
$this->userRepository = $userRepository; $this->userRepository = $userRepository;
$this->userRender = $userRender;
} }
public function addRole() public function addRole()
@ -63,10 +68,12 @@ class ActivityUserAggregator implements AggregatorInterface
return function ($value) { return function ($value) {
if ('_header' === $value) { if ('_header' === $value) {
return 'activity user'; return 'Activity user';
} }
return $this->userRepository->find($value)->getUsername(); $u = $this->userRepository->find($value);
return $this->userRender->renderString($u, []);
}; };
} }

View File

@ -61,7 +61,11 @@ class BySocialActionFilter implements FilterInterface
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
$clause = $qb->expr()->in('activity.socialActions', ':socialactions'); if (!in_array('socialaction', $qb->getAllAliases())) {
$qb->join('activity.socialActions', 'socialaction');
}
$clause = $qb->expr()->in('socialaction.id', ':socialactions');
if ($where instanceof Andx) { if ($where instanceof Andx) {
$where->add($clause); $where->add($clause);

View File

@ -61,7 +61,11 @@ class BySocialIssueFilter implements FilterInterface
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
$clause = $qb->expr()->in('activity.socialIssues', ':socialissues'); if (!in_array('socialissue', $qb->getAllAliases())) {
$qb->join('activity.socialIssues', 'socialissue');
}
$clause = $qb->expr()->in('socialissue.id', ':socialissues');
if ($where instanceof Andx) { if ($where instanceof Andx) {
$where->add($clause); $where->add($clause);

View File

@ -61,7 +61,11 @@ class ByUserFilter implements FilterInterface
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
$clause = $qb->expr()->in('activity.users', ':users'); if (!in_array('user', $qb->getAllAliases())) {
$qb->join('activity.users', 'user');
}
$clause = $qb->expr()->in('user.id', ':users');
if ($where instanceof Andx) { if ($where instanceof Andx) {
$where->add($clause); $where->add($clause);

View File

@ -256,7 +256,7 @@ Filter activity by linked users: Filtrer les activités par TMS
'Filtered activity by linked users: only %users%': "Filtré par TMS: uniquement %users%" 'Filtered activity by linked users: only %users%': "Filtré par TMS: 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 %emergency%" 'Filtered activity by emergency: only %emergency%': "Filtré par urgence: uniquement si %emergency%"
activity is emergency: l'activité est urgente activity is emergency: l'activité est urgente
activity is not emergency: l'activité n'est pas urgente activity is not emergency: l'activité n'est pas urgente
Filter activity by sentreceived: Filtrer les activités par envoyé/reçu Filter activity by sentreceived: Filtrer les activités par envoyé/reçu
@ -277,7 +277,7 @@ Accepted userscope: Services
#aggregators #aggregators
Activity type: Type d'activité Activity type: Type d'activité
Activity user: Utilisateur lié à l'activity Activity user: Utilisateur lié à l'activité
By reason: Par sujet 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
@ -288,8 +288,13 @@ Aggregate by activity reason: Grouper les activités par sujet
Group activity by locationtype: Grouper les activités par type de localisation Group activity by locationtype: Grouper les activités par type de localisation
Group activity by date: Grouper les activités par date Group activity by date: Grouper les activités par date
Frequency: Fréquence
by month: par mois
by week: par semaine
by year: par année
Group activity by linked users: Grouper les activités par TMS impliqué Group activity by linked users: Grouper les activités par TMS impliqué
Group activity by linked thirdparties: Grouper les activités par tiers impliqué Group activity by linked thirdparties: Grouper les activités par tiers impliqué
Accepted thirdparty: Tiers impliqué
Group activity by linked socialaction: Grouper les activités par action liée Group activity by linked socialaction: Grouper les activités par action liée
Group activity by linked socialissue: Grouper les activités par problématique liée Group activity by linked socialissue: Grouper les activités par problématique liée
Group activity by userscope: Grouper les activités par service du créateur Group activity by userscope: Grouper les activités par service du créateur