Feature: allow filtering works in docgen for acc course by logged user

This commit is contained in:
nobohan 2023-03-16 14:29:51 +01:00
parent bf79e0afdb
commit 9ded3eb631

View File

@ -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];