mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Feature: allow filtering works in docgen for acc course by logged user
This commit is contained in:
parent
bf79e0afdb
commit
9ded3eb631
@ -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];
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user