mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Feature: allow filtering activities in docgen for acc course by logged user
This commit is contained in:
parent
331443ae12
commit
bf79e0afdb
@ -11,6 +11,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace Chill\ActivityBundle\Service\DocGenerator;
|
||||
|
||||
use Chill\ActivityBundle\Entity\Activity;
|
||||
use Chill\ActivityBundle\Entity\ActivityPresence;
|
||||
use Chill\ActivityBundle\Entity\ActivityType;
|
||||
use Chill\ActivityBundle\Repository\ActivityACLAwareRepositoryInterface;
|
||||
@ -37,6 +38,8 @@ use libphonenumber\PhoneNumber;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
|
||||
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||
use Symfony\Component\Security\Core\Security;
|
||||
|
||||
class ListActivitiesByAccompanyingPeriodContext implements
|
||||
DocGeneratorContextWithAdminFormInterface,
|
||||
@ -60,6 +63,8 @@ class ListActivitiesByAccompanyingPeriodContext implements
|
||||
|
||||
private UserRepository $userRepository;
|
||||
|
||||
private Security $security;
|
||||
|
||||
public function __construct(
|
||||
AccompanyingPeriodContext $accompanyingPeriodContext,
|
||||
ActivityACLAwareRepositoryInterface $activityACLAwareRepository,
|
||||
@ -69,7 +74,8 @@ class ListActivitiesByAccompanyingPeriodContext implements
|
||||
SocialIssueRepository $socialIssueRepository,
|
||||
ThirdPartyRepository $thirdPartyRepository,
|
||||
TranslatableStringHelperInterface $translatableStringHelper,
|
||||
UserRepository $userRepository
|
||||
UserRepository $userRepository,
|
||||
Security $security
|
||||
) {
|
||||
$this->accompanyingPeriodContext = $accompanyingPeriodContext;
|
||||
$this->activityACLAwareRepository = $activityACLAwareRepository;
|
||||
@ -80,6 +86,7 @@ class ListActivitiesByAccompanyingPeriodContext implements
|
||||
$this->thirdPartyRepository = $thirdPartyRepository;
|
||||
$this->translatableStringHelper = $translatableStringHelper;
|
||||
$this->userRepository = $userRepository;
|
||||
$this->security = $security;
|
||||
}
|
||||
|
||||
public function adminFormReverseTransform(array $data): array
|
||||
@ -95,6 +102,12 @@ class ListActivitiesByAccompanyingPeriodContext implements
|
||||
public function buildAdminForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$this->accompanyingPeriodContext->buildAdminForm($builder);
|
||||
|
||||
$builder
|
||||
->add('myActivityOnly', CheckboxType::class, [
|
||||
'required' => false,
|
||||
'label' => 'docgen.myActivityOnly',
|
||||
]);
|
||||
}
|
||||
|
||||
public function buildPublicForm(FormBuilderInterface $builder, DocGeneratorTemplate $template, $entity): void
|
||||
@ -104,9 +117,9 @@ class ListActivitiesByAccompanyingPeriodContext implements
|
||||
|
||||
public function getData(DocGeneratorTemplate $template, $entity, array $contextGenerationData = []): array
|
||||
{
|
||||
$myActivityOnly = $template->getOptions()['myActivityOnly'];
|
||||
$data = $this->accompanyingPeriodContext->getData($template, $entity, $contextGenerationData);
|
||||
|
||||
$data['activities'] = $this->getActivitiesSimplified($entity);
|
||||
$data['activities'] = $this->getActivitiesSimplified($entity, $myActivityOnly);
|
||||
|
||||
return $data;
|
||||
}
|
||||
@ -161,12 +174,25 @@ class ListActivitiesByAccompanyingPeriodContext implements
|
||||
$this->accompanyingPeriodContext->storeGenerated($template, $storedObject, $entity, $contextGenerationData);
|
||||
}
|
||||
|
||||
private function getActivitiesSimplified(AccompanyingPeriod $period)
|
||||
private function getActivitiesSimplified(AccompanyingPeriod $period, bool $myActivityOnly)
|
||||
{
|
||||
$activities =
|
||||
$this->activityACLAwareRepository->findByAccompanyingPeriodSimplified($period);
|
||||
$results = [];
|
||||
|
||||
if ($myActivityOnly) {
|
||||
$activities = array_filter(
|
||||
$activities,
|
||||
function ($activity) {
|
||||
$activity_usernames = array_map(function ($userId) {
|
||||
return $this->userRepository->findOneBy(['id' => $userId])->getUsername();
|
||||
}, $activity['userIds'] ?? []);
|
||||
|
||||
return in_array($this->security->getUser()->getUsername(), $activity_usernames);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
foreach ($activities as $row) {
|
||||
$activity = $row[0];
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user