Feature: allow filtering works in docgen for acc course by logged user - php cs fixer

This commit is contained in:
nobohan 2023-03-16 14:33:09 +01:00
parent 9ded3eb631
commit 5bba1aca93

View File

@ -11,7 +11,6 @@ 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;
@ -35,11 +34,12 @@ use Chill\ThirdPartyBundle\Entity\ThirdParty;
use Chill\ThirdPartyBundle\Repository\ThirdPartyRepository;
use DateTime;
use libphonenumber\PhoneNumber;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Security;
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;
use function in_array;
class ListActivitiesByAccompanyingPeriodContext implements
DocGeneratorContextWithAdminFormInterface,
@ -53,6 +53,8 @@ class ListActivitiesByAccompanyingPeriodContext implements
private PersonRepository $personRepository;
private Security $security;
private SocialActionRepository $socialActionRepository;
private SocialIssueRepository $socialIssueRepository;
@ -63,8 +65,6 @@ class ListActivitiesByAccompanyingPeriodContext implements
private UserRepository $userRepository;
private Security $security;
public function __construct(
AccompanyingPeriodContext $accompanyingPeriodContext,
ActivityACLAwareRepositoryInterface $activityACLAwareRepository,
@ -119,25 +119,28 @@ class ListActivitiesByAccompanyingPeriodContext implements
$this->accompanyingPeriodContext->buildPublicForm($builder, $template, $entity);
}
public function getData(DocGeneratorTemplate $template, $entity, array $contextGenerationData = []): array
public function contextGenerationDataDenormalize(DocGeneratorTemplate $template, $entity, array $data): array
{
$data = $this->accompanyingPeriodContext->getData($template, $entity, $contextGenerationData);
$activities = $this->getActivitiesSimplified($entity);
$myActivitiesOnly = $template->getOptions()['myActivitiesOnly'];
if ($myActivitiesOnly) {
$activities = $this->filterActivitiesByCurrentUser($activities);
return $this->accompanyingPeriodContext->contextGenerationDataDenormalize($template, $entity, $data);
}
$data['activities'] = $activities;
$myWorksOnly = $template->getOptions()['myWorksOnly'];
if ($myWorksOnly) {
$data['course']['works'] = $this->filterWorksByCurrentUser($data['course']['works']);
public function contextGenerationDataNormalize(DocGeneratorTemplate $template, $entity, array $data): array
{
return $this->accompanyingPeriodContext->contextGenerationDataNormalize($template, $entity, $data);
}
return $data;
public function filterActivitiesByCurrentUser(array $activities): array
{
return array_filter(
$activities,
function ($activity) {
$activityUsernames = array_map(static function ($user) {
return $user['username'];
}, $activity['users'] ?? []);
return in_array($this->security->getUser()->getUsername(), $activityUsernames, true);
}
);
}
public function filterWorksByCurrentUser(array $works): array
@ -145,28 +148,37 @@ class ListActivitiesByAccompanyingPeriodContext implements
return array_filter(
$works,
function ($work) {
$workUsernames = array_map(function ($user) {
$workUsernames = array_map(static function ($user) {
return $user['username'];
}, $work['referrers'] ?? []);
return in_array($this->security->getUser()->getUsername(), $workUsernames);
return in_array($this->security->getUser()->getUsername(), $workUsernames, true);
}
);
}
public function filterActivitiesByCurrentUser(array $activities): array
public function getData(DocGeneratorTemplate $template, $entity, array $contextGenerationData = []): 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);
}
);
$data = $this->accompanyingPeriodContext->getData($template, $entity, $contextGenerationData);
$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 getDescription(): string
{
@ -203,16 +215,6 @@ class ListActivitiesByAccompanyingPeriodContext implements
return $this->accompanyingPeriodContext->hasPublicForm($template, $entity);
}
public function contextGenerationDataNormalize(DocGeneratorTemplate $template, $entity, array $data): array
{
return $this->accompanyingPeriodContext->contextGenerationDataNormalize($template, $entity, $data);
}
public function contextGenerationDataDenormalize(DocGeneratorTemplate $template, $entity, array $data): array
{
return $this->accompanyingPeriodContext->contextGenerationDataDenormalize($template, $entity, $data);
}
public function storeGenerated(DocGeneratorTemplate $template, StoredObject $storedObject, object $entity, array $contextGenerationData): void
{
$this->accompanyingPeriodContext->storeGenerated($template, $storedObject, $entity, $contextGenerationData);