diff --git a/src/Bundle/ChillActivityBundle/Service/DocGenerator/ListActivitiesByAccompanyingPeriodContext.php b/src/Bundle/ChillActivityBundle/Service/DocGenerator/ListActivitiesByAccompanyingPeriodContext.php index 17e566133..55dfca728 100644 --- a/src/Bundle/ChillActivityBundle/Service/DocGenerator/ListActivitiesByAccompanyingPeriodContext.php +++ b/src/Bundle/ChillActivityBundle/Service/DocGenerator/ListActivitiesByAccompanyingPeriodContext.php @@ -104,9 +104,13 @@ class ListActivitiesByAccompanyingPeriodContext implements $this->accompanyingPeriodContext->buildAdminForm($builder); $builder - ->add('myActivityOnly', CheckboxType::class, [ + ->add('myActivitiesOnly', CheckboxType::class, [ 'required' => false, - 'label' => 'docgen.myActivityOnly', + 'label' => 'docgen.myActivitiesOnly', + ]) + ->add('myWorksOnly', CheckboxType::class, [ + 'required' => false, + 'label' => 'docgen.myWorksOnly', ]); } @@ -117,13 +121,53 @@ 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, $myActivityOnly); + + $activities = $this->getActivitiesSimplified($entity); + + $myActivitiesOnly = $template->getOptions()['myActivitiesOnly']; + if ($myActivitiesOnly) { + $activities = $this->filterActivitiesByCurrentUser($activities); + } + + $data['activities'] = $activities; + + $myWorksOnly = $template->getOptions()['myWorksOnly']; + if ($myWorksOnly) { + $data['course']['works'] = $this->filterWorksByCurrentUser($data['course']['works']); + } return $data; } + public function filterWorksByCurrentUser(array $works): array + { + return array_filter( + $works, + function ($work) { + $workUsernames = array_map(function ($user) { + return $user['username']; + }, $work['referrers'] ?? []); + return in_array($this->security->getUser()->getUsername(), $workUsernames); + } + ); + } + + + public function filterActivitiesByCurrentUser(array $activities): array + { + return array_filter( + $activities, + function ($activity) { + $activityUsernames = array_map(function ($user) { + return $user['username']; + }, $activity['users'] ?? []); + return in_array($this->security->getUser()->getUsername(), $activityUsernames); + } + ); + } + + public function getDescription(): string { return 'docgen.Accompanying period with a list of activities description'; @@ -174,25 +218,12 @@ class ListActivitiesByAccompanyingPeriodContext implements $this->accompanyingPeriodContext->storeGenerated($template, $storedObject, $entity, $contextGenerationData); } - private function getActivitiesSimplified(AccompanyingPeriod $period, bool $myActivityOnly) + private function getActivitiesSimplified(AccompanyingPeriod $period) { $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];