diff --git a/src/Bundle/ChillActivityBundle/Service/DocGenerator/ListActivitiesByAccompanyingPeriodContext.php b/src/Bundle/ChillActivityBundle/Service/DocGenerator/ListActivitiesByAccompanyingPeriodContext.php index 7e1873710..17e566133 100644 --- a/src/Bundle/ChillActivityBundle/Service/DocGenerator/ListActivitiesByAccompanyingPeriodContext.php +++ b/src/Bundle/ChillActivityBundle/Service/DocGenerator/ListActivitiesByAccompanyingPeriodContext.php @@ -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];