mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-10-24 22:23:13 +00:00 
			
		
		
		
	Compare commits
	
		
			18 Commits
		
	
	
		
			2.8.0
			...
			rector/rul
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 13abc36529 | |||
| 023a29cb78 | |||
| 7b637d1287 | |||
| 74ed34ba97 | |||
| 6e6f19c499 | |||
| 075aca493b | |||
| 224c2c74e8 | |||
| 6d63177ff4 | |||
| 81e8928344 | |||
| 737f5f9275 | |||
| 07c681fcec | |||
| 1c7d90a6ef | |||
| 24c33b306b | |||
| 7e19419861 | |||
| c35994203d | |||
| 9027cbd196 | |||
| dde3002100 | |||
| d8870e906f | 
| @@ -54,18 +54,9 @@ class CountPerson implements ExportInterface | ||||
|     public function getLabels($key, array $values, $data) | ||||
|     { | ||||
|         // the Closure which will be executed by the formatter. | ||||
|         return function ($value) { | ||||
|             switch ($value) { | ||||
|                 case '_header': | ||||
|                     // we have to process specifically the '_header' string, | ||||
|                     // which will be used by the formatter to show a column title | ||||
|                     return $this->getTitle(); | ||||
|  | ||||
|                 default: | ||||
|                     // for all value, we do not process them and return them | ||||
|                     // immediatly | ||||
|                     return $value; | ||||
|             } | ||||
|         return fn($value) => match ($value) { | ||||
|             '_header' => $this->getTitle(), | ||||
|             default => $value, | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -23,19 +23,12 @@ class ChillMainConfiguration implements ConfigurationInterface | ||||
| { | ||||
|     use AddWidgetConfigurationTrait; | ||||
|  | ||||
|     /** | ||||
|      * @var ContainerBuilder | ||||
|      */ | ||||
|     private $containerBuilder; | ||||
|  | ||||
|     public function __construct( | ||||
|         array $widgetFactories, | ||||
|         ContainerBuilder $containerBuilder | ||||
|         private readonly ContainerBuilder $containerBuilder | ||||
|     ) { | ||||
|         // we register here widget factories (see below) | ||||
|         $this->setWidgetFactories($widgetFactories); | ||||
|         // we will need the container builder later... | ||||
|         $this->containerBuilder = $containerBuilder; | ||||
|     } | ||||
|  | ||||
|     public function getConfigTreeBuilder() | ||||
|   | ||||
							
								
								
									
										26
									
								
								rector.php
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								rector.php
									
									
									
									
									
								
							| @@ -21,11 +21,11 @@ return static function (RectorConfig $rectorConfig): void { | ||||
|  | ||||
|     //define sets of rules | ||||
|     $rectorConfig->sets([ | ||||
|         LevelSetList::UP_TO_PHP_74 | ||||
|         LevelSetList::UP_TO_PHP_82 | ||||
|     ]); | ||||
|  | ||||
|     // chill rules | ||||
|     $rectorConfig->rule(\Chill\Utils\Rector\Rector\ChillBundleAddFormDefaultDataOnExportFilterAggregatorRector::class); | ||||
|     //$rectorConfig->rule(\Chill\Utils\Rector\Rector\ChillBundleAddFormDefaultDataOnExportFilterAggregatorRector::class); | ||||
|  | ||||
|     // skip some path... | ||||
|     $rectorConfig->skip([ | ||||
| @@ -37,27 +37,5 @@ return static function (RectorConfig $rectorConfig): void { | ||||
|  | ||||
|         // must merge MR500 and review a typing of "ArrayCollection" in entities | ||||
|         \Rector\TypeDeclaration\Rector\Property\TypedPropertyFromAssignsRector::class, | ||||
|  | ||||
|         // remove all PHP80 rules, in order to activate them one by one | ||||
|         \Rector\Php80\Rector\ClassMethod\AddParamBasedOnParentClassMethodRector::class, | ||||
|         \Rector\Php80\Rector\Class_\AnnotationToAttributeRector::class, | ||||
|         \Rector\Php80\Rector\Switch_\ChangeSwitchToMatchRector::class, | ||||
|         \Rector\Php80\Rector\FuncCall\ClassOnObjectRector::class, | ||||
|         \Rector\Php80\Rector\ClassConstFetch\ClassOnThisVariableObjectRector::class, | ||||
|         \Rector\Php80\Rector\Class_\ClassPropertyAssignToConstructorPromotionRector::class, | ||||
|         \Rector\Php80\Rector\Class_\DoctrineAnnotationClassToAttributeRector::class, | ||||
|         \Rector\Php80\Rector\ClassMethod\FinalPrivateToPrivateVisibilityRector::class, | ||||
|         \Rector\Php80\Rector\Ternary\GetDebugTypeRector::class, | ||||
|         \Rector\Php80\Rector\FunctionLike\MixedTypeRector::class, | ||||
|         \Rector\Php80\Rector\Property\NestedAnnotationToAttributeRector::class, | ||||
|         \Rector\Php80\Rector\FuncCall\Php8ResourceReturnToObjectRector::class, | ||||
|         \Rector\Php80\Rector\Catch_\RemoveUnusedVariableInCatchRector::class, | ||||
|         \Rector\Php80\Rector\ClassMethod\SetStateToStaticRector::class, | ||||
|         \Rector\Php80\Rector\NotIdentical\StrContainsRector::class, | ||||
|         \Rector\Php80\Rector\Identical\StrEndsWithRector::class, | ||||
|         \Rector\Php80\Rector\Identical\StrStartsWithRector::class, | ||||
|         \Rector\Php80\Rector\Class_\StringableForToStringRector::class, | ||||
|         \Rector\Php80\Rector\FuncCall\TokenGetAllToObjectRector::class, | ||||
|         \Rector\Php80\Rector\FunctionLike\UnionTypesRector::class | ||||
|     ]); | ||||
| }; | ||||
|   | ||||
| @@ -77,10 +77,8 @@ final class ActivityController extends AbstractController | ||||
|  | ||||
|     /** | ||||
|      * Deletes a Activity entity. | ||||
|      * | ||||
|      * @param mixed $id | ||||
|      */ | ||||
|     public function deleteAction(Request $request, $id) | ||||
|     public function deleteAction(Request $request, mixed $id) | ||||
|     { | ||||
|         $view = null; | ||||
|  | ||||
| @@ -679,8 +677,8 @@ final class ActivityController extends AbstractController | ||||
|                 throw $this->createNotFoundException('Accompanying Period not found'); | ||||
|             } | ||||
|  | ||||
|             // TODO Add permission | ||||
|             // $this->denyAccessUnlessGranted('CHILL_PERSON_SEE', $person); | ||||
|         // TODO Add permission | ||||
|         // $this->denyAccessUnlessGranted('CHILL_PERSON_SEE', $person); | ||||
|         } else { | ||||
|             throw $this->createNotFoundException('Person or Accompanying Period not found'); | ||||
|         } | ||||
|   | ||||
| @@ -47,10 +47,8 @@ class ActivityReasonCategoryController extends AbstractController | ||||
|  | ||||
|     /** | ||||
|      * Displays a form to edit an existing ActivityReasonCategory entity. | ||||
|      * | ||||
|      * @param mixed $id | ||||
|      */ | ||||
|     public function editAction($id) | ||||
|     public function editAction(mixed $id) | ||||
|     { | ||||
|         $em = $this->getDoctrine()->getManager(); | ||||
|  | ||||
| @@ -98,10 +96,8 @@ class ActivityReasonCategoryController extends AbstractController | ||||
|  | ||||
|     /** | ||||
|      * Finds and displays a ActivityReasonCategory entity. | ||||
|      * | ||||
|      * @param mixed $id | ||||
|      */ | ||||
|     public function showAction($id) | ||||
|     public function showAction(mixed $id) | ||||
|     { | ||||
|         $em = $this->getDoctrine()->getManager(); | ||||
|  | ||||
| @@ -118,10 +114,8 @@ class ActivityReasonCategoryController extends AbstractController | ||||
|  | ||||
|     /** | ||||
|      * Edits an existing ActivityReasonCategory entity. | ||||
|      * | ||||
|      * @param mixed $id | ||||
|      */ | ||||
|     public function updateAction(Request $request, $id) | ||||
|     public function updateAction(Request $request, mixed $id) | ||||
|     { | ||||
|         $em = $this->getDoctrine()->getManager(); | ||||
|  | ||||
|   | ||||
| @@ -24,11 +24,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | ||||
|  */ | ||||
| class ActivityReasonController extends AbstractController | ||||
| { | ||||
|     private ActivityReasonRepository $activityReasonRepository; | ||||
|  | ||||
|     public function __construct(ActivityReasonRepository $activityReasonRepository) | ||||
|     public function __construct(private readonly ActivityReasonRepository $activityReasonRepository) | ||||
|     { | ||||
|         $this->activityReasonRepository = $activityReasonRepository; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -56,10 +53,8 @@ class ActivityReasonController extends AbstractController | ||||
|  | ||||
|     /** | ||||
|      * Displays a form to edit an existing ActivityReason entity. | ||||
|      * | ||||
|      * @param mixed $id | ||||
|      */ | ||||
|     public function editAction($id) | ||||
|     public function editAction(mixed $id) | ||||
|     { | ||||
|         $em = $this->getDoctrine()->getManager(); | ||||
|  | ||||
| @@ -107,10 +102,8 @@ class ActivityReasonController extends AbstractController | ||||
|  | ||||
|     /** | ||||
|      * Finds and displays a ActivityReason entity. | ||||
|      * | ||||
|      * @param mixed $id | ||||
|      */ | ||||
|     public function showAction($id) | ||||
|     public function showAction(mixed $id) | ||||
|     { | ||||
|         $em = $this->getDoctrine()->getManager(); | ||||
|  | ||||
| @@ -127,10 +120,8 @@ class ActivityReasonController extends AbstractController | ||||
|  | ||||
|     /** | ||||
|      * Edits an existing ActivityReason entity. | ||||
|      * | ||||
|      * @param mixed $id | ||||
|      */ | ||||
|     public function updateAction(Request $request, $id) | ||||
|     public function updateAction(Request $request, mixed $id) | ||||
|     { | ||||
|         $em = $this->getDoctrine()->getManager(); | ||||
|  | ||||
|   | ||||
| @@ -25,17 +25,14 @@ class LoadActivity extends AbstractFixture implements OrderedFixtureInterface | ||||
| { | ||||
|     use \Symfony\Component\DependencyInjection\ContainerAwareTrait; | ||||
|  | ||||
|     private EntityManagerInterface $em; | ||||
|  | ||||
|     /** | ||||
|      * @var \Faker\Generator | ||||
|      */ | ||||
|     private $faker; | ||||
|  | ||||
|     public function __construct(EntityManagerInterface $em) | ||||
|     public function __construct(private readonly EntityManagerInterface $em) | ||||
|     { | ||||
|         $this->faker = FakerFactory::create('fr_FR'); | ||||
|         $this->em = $em; | ||||
|     } | ||||
|  | ||||
|     public function getOrder() | ||||
|   | ||||
| @@ -65,9 +65,9 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac | ||||
|  | ||||
|     use TrackUpdateTrait; | ||||
|  | ||||
|     public const SENTRECEIVED_RECEIVED = 'received'; | ||||
|     final public const SENTRECEIVED_RECEIVED = 'received'; | ||||
|  | ||||
|     public const SENTRECEIVED_SENT = 'sent'; | ||||
|     final public const SENTRECEIVED_SENT = 'sent'; | ||||
|  | ||||
|     /** | ||||
|      * @ORM\ManyToOne(targetEntity="Chill\PersonBundle\Entity\AccompanyingPeriod") | ||||
| @@ -104,6 +104,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac | ||||
|     /** | ||||
|      * @ORM\ManyToMany(targetEntity="Chill\DocStoreBundle\Entity\StoredObject", cascade={"persist"}) | ||||
|      * @Assert\Valid(traverse=true) | ||||
|      * @var Collection<StoredObject> | ||||
|      */ | ||||
|     private Collection $documents; | ||||
|  | ||||
| @@ -140,8 +141,9 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac | ||||
|     /** | ||||
|      * @ORM\ManyToMany(targetEntity="Chill\PersonBundle\Entity\Person") | ||||
|      * @Groups({"read", "docgen:read"}) | ||||
|      * @var Collection<Person> | ||||
|      */ | ||||
|     private ?Collection $persons = null; | ||||
|     private Collection $persons; | ||||
|  | ||||
|     /** | ||||
|      * @ORM\Embedded(class="Chill\MainBundle\Entity\Embeddable\PrivateCommentEmbeddable", columnPrefix="privateComment_") | ||||
| @@ -151,6 +153,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac | ||||
|     /** | ||||
|      * @ORM\ManyToMany(targetEntity="Chill\ActivityBundle\Entity\ActivityReason") | ||||
|      * @Groups({"docgen:read"}) | ||||
|      * @var Collection<ActivityReason> | ||||
|      */ | ||||
|     private Collection $reasons; | ||||
|  | ||||
| @@ -170,6 +173,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac | ||||
|      * @ORM\ManyToMany(targetEntity="Chill\PersonBundle\Entity\SocialWork\SocialAction") | ||||
|      * @ORM\JoinTable(name="chill_activity_activity_chill_person_socialaction") | ||||
|      * @Groups({"read", "docgen:read"}) | ||||
|      * @var Collection<SocialAction> | ||||
|      */ | ||||
|     private Collection $socialActions; | ||||
|  | ||||
| @@ -177,14 +181,16 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac | ||||
|      * @ORM\ManyToMany(targetEntity="Chill\PersonBundle\Entity\SocialWork\SocialIssue") | ||||
|      * @ORM\JoinTable(name="chill_activity_activity_chill_person_socialissue") | ||||
|      * @Groups({"read", "docgen:read"}) | ||||
|      * @var Collection<SocialIssue> | ||||
|      */ | ||||
|     private Collection $socialIssues; | ||||
|  | ||||
|     /** | ||||
|      * @ORM\ManyToMany(targetEntity="Chill\ThirdPartyBundle\Entity\ThirdParty") | ||||
|      * @Groups({"read", "docgen:read"}) | ||||
|      * @var Collection<ThirdParty> | ||||
|      */ | ||||
|     private ?Collection $thirdParties = null; | ||||
|     private Collection $thirdParties; | ||||
|  | ||||
|     /** | ||||
|      * @ORM\Column(type="time", nullable=true) | ||||
| @@ -200,8 +206,9 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac | ||||
|     /** | ||||
|      * @ORM\ManyToMany(targetEntity="Chill\MainBundle\Entity\User") | ||||
|      * @Groups({"read", "docgen:read"}) | ||||
|      * @var Collection<User> | ||||
|      */ | ||||
|     private ?Collection $users = null; | ||||
|     private Collection $users; | ||||
|  | ||||
|     public function __construct() | ||||
|     { | ||||
|   | ||||
| @@ -23,10 +23,9 @@ use Doctrine\ORM\Mapping as ORM; | ||||
| class ActivityReason | ||||
| { | ||||
|     /** | ||||
|      * @var bool | ||||
|      * @ORM\Column(type="boolean") | ||||
|      */ | ||||
|     private $active = true; | ||||
|     private bool $active = true; | ||||
|  | ||||
|     /** | ||||
|      * @var ActivityReasonCategory | ||||
| @@ -34,7 +33,7 @@ class ActivityReason | ||||
|      *     targetEntity="Chill\ActivityBundle\Entity\ActivityReasonCategory", | ||||
|      * inversedBy="reasons") | ||||
|      */ | ||||
|     private $category; | ||||
|     private ?ActivityReasonCategory $category = null; | ||||
|  | ||||
|     /** | ||||
|      * @var int | ||||
| @@ -43,13 +42,13 @@ class ActivityReason | ||||
|      * @ORM\Column(name="id", type="integer") | ||||
|      * @ORM\GeneratedValue(strategy="AUTO") | ||||
|      */ | ||||
|     private $id; | ||||
|     private ?int $id = null; | ||||
|  | ||||
|     /** | ||||
|      * @var array | ||||
|      * @ORM\Column(type="json") | ||||
|      */ | ||||
|     private $name; | ||||
|     private array $name; | ||||
|  | ||||
|     /** | ||||
|      * Get active. | ||||
| @@ -81,27 +80,9 @@ class ActivityReason | ||||
|  | ||||
|     /** | ||||
|      * Get name. | ||||
|      * | ||||
|      * @param mixed|null $locale | ||||
|      * | ||||
|      * @return array | string | ||||
|      */ | ||||
|     public function getName($locale = null) | ||||
|     public function getName(): array | ||||
|     { | ||||
|         if ($locale) { | ||||
|             if (isset($this->name[$locale])) { | ||||
|                 return $this->name[$locale]; | ||||
|             } | ||||
|  | ||||
|             foreach ($this->name as $name) { | ||||
|                 if (!empty($name)) { | ||||
|                     return $name; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return ''; | ||||
|         } | ||||
|  | ||||
|         return $this->name; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -12,6 +12,7 @@ declare(strict_types=1); | ||||
| namespace Chill\ActivityBundle\Entity; | ||||
|  | ||||
| use Doctrine\Common\Collections\ArrayCollection; | ||||
| use Doctrine\Common\Collections\Collection; | ||||
| use Doctrine\ORM\Mapping as ORM; | ||||
|  | ||||
| /** | ||||
| @@ -21,7 +22,7 @@ use Doctrine\ORM\Mapping as ORM; | ||||
|  * @ORM\Table(name="activityreasoncategory") | ||||
|  * @ORM\HasLifecycleCallbacks | ||||
|  */ | ||||
| class ActivityReasonCategory | ||||
| class ActivityReasonCategory implements \Stringable | ||||
| { | ||||
|     /** | ||||
|      * @var bool | ||||
| @@ -47,12 +48,12 @@ class ActivityReasonCategory | ||||
|     /** | ||||
|      * Array of ActivityReason. | ||||
|      * | ||||
|      * @var ArrayCollection | ||||
|      * @var Collection<ActivityReason> | ||||
|      * @ORM\OneToMany( | ||||
|      *     targetEntity="Chill\ActivityBundle\Entity\ActivityReason", | ||||
|      * mappedBy="category") | ||||
|      */ | ||||
|     private $reasons; | ||||
|     private Collection $reasons; | ||||
|  | ||||
|     /** | ||||
|      * ActivityReasonCategory constructor. | ||||
| @@ -65,7 +66,7 @@ class ActivityReasonCategory | ||||
|     /** | ||||
|      * @return string | ||||
|      */ | ||||
|     public function __toString() | ||||
|     public function __toString(): string | ||||
|     { | ||||
|         return 'ActivityReasonCategory(' . $this->getName('x') . ')'; | ||||
|     } | ||||
|   | ||||
| @@ -27,11 +27,11 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface; | ||||
|  */ | ||||
| class ActivityType | ||||
| { | ||||
|     public const FIELD_INVISIBLE = 0; | ||||
|     final public const FIELD_INVISIBLE = 0; | ||||
|  | ||||
|     public const FIELD_OPTIONAL = 1; | ||||
|     final public const FIELD_OPTIONAL = 1; | ||||
|  | ||||
|     public const FIELD_REQUIRED = 2; | ||||
|     final public const FIELD_REQUIRED = 2; | ||||
|  | ||||
|     /** | ||||
|      * @deprecated not in use | ||||
| @@ -275,10 +275,8 @@ class ActivityType | ||||
|  | ||||
|     /** | ||||
|      * @Assert\Callback | ||||
|      * | ||||
|      * @param mixed $payload | ||||
|      */ | ||||
|     public function checkSocialActionsVisibility(ExecutionContextInterface $context, $payload) | ||||
|     public function checkSocialActionsVisibility(ExecutionContextInterface $context, mixed $payload) | ||||
|     { | ||||
|         if ($this->socialIssuesVisible !== $this->socialActionsVisible) { | ||||
|             if (!(2 === $this->socialIssuesVisible && 1 === $this->socialActionsVisible)) { | ||||
|   | ||||
| @@ -22,14 +22,8 @@ use function in_array; | ||||
|  | ||||
| class ActivityEntityListener | ||||
| { | ||||
|     private EntityManagerInterface $em; | ||||
|  | ||||
|     private AccompanyingPeriodWorkRepository $workRepository; | ||||
|  | ||||
|     public function __construct(EntityManagerInterface $em, AccompanyingPeriodWorkRepository $workRepository) | ||||
|     public function __construct(private readonly EntityManagerInterface $em, private readonly AccompanyingPeriodWorkRepository $workRepository) | ||||
|     { | ||||
|         $this->em = $em; | ||||
|         $this->workRepository = $workRepository; | ||||
|     } | ||||
|  | ||||
|     public function persistActionToCourse(Activity $activity) | ||||
|   | ||||
| @@ -20,16 +20,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ByCreatorAggregator implements AggregatorInterface | ||||
| { | ||||
|     private UserRender $userRender; | ||||
|  | ||||
|     private UserRepositoryInterface $userRepository; | ||||
|  | ||||
|     public function __construct( | ||||
|         UserRepositoryInterface $userRepository, | ||||
|         UserRender $userRender | ||||
|     ) { | ||||
|         $this->userRepository = $userRepository; | ||||
|         $this->userRender = $userRender; | ||||
|     public function __construct(private readonly UserRepositoryInterface $userRepository, private readonly UserRender $userRender) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -21,16 +21,8 @@ use function in_array; | ||||
|  | ||||
| class BySocialActionAggregator implements AggregatorInterface | ||||
| { | ||||
|     private SocialActionRender $actionRender; | ||||
|  | ||||
|     private SocialActionRepository $actionRepository; | ||||
|  | ||||
|     public function __construct( | ||||
|         SocialActionRender $actionRender, | ||||
|         SocialActionRepository $actionRepository | ||||
|     ) { | ||||
|         $this->actionRender = $actionRender; | ||||
|         $this->actionRepository = $actionRepository; | ||||
|     public function __construct(private readonly SocialActionRender $actionRender, private readonly SocialActionRepository $actionRepository) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -21,16 +21,8 @@ use function in_array; | ||||
|  | ||||
| class BySocialIssueAggregator implements AggregatorInterface | ||||
| { | ||||
|     private SocialIssueRender $issueRender; | ||||
|  | ||||
|     private SocialIssueRepository $issueRepository; | ||||
|  | ||||
|     public function __construct( | ||||
|         SocialIssueRepository $issueRepository, | ||||
|         SocialIssueRender $issueRender | ||||
|     ) { | ||||
|         $this->issueRepository = $issueRepository; | ||||
|         $this->issueRender = $issueRender; | ||||
|     public function __construct(private readonly SocialIssueRepository $issueRepository, private readonly SocialIssueRender $issueRender) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -21,16 +21,8 @@ use function in_array; | ||||
|  | ||||
| class ByThirdpartyAggregator implements AggregatorInterface | ||||
| { | ||||
|     private ThirdPartyRender $thirdPartyRender; | ||||
|  | ||||
|     private ThirdPartyRepository $thirdPartyRepository; | ||||
|  | ||||
|     public function __construct( | ||||
|         ThirdPartyRepository $thirdPartyRepository, | ||||
|         ThirdPartyRender $thirdPartyRender | ||||
|     ) { | ||||
|         $this->thirdPartyRepository = $thirdPartyRepository; | ||||
|         $this->thirdPartyRender = $thirdPartyRender; | ||||
|     public function __construct(private readonly ThirdPartyRepository $thirdPartyRepository, private readonly ThirdPartyRender $thirdPartyRender) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -21,16 +21,8 @@ use function in_array; | ||||
|  | ||||
| class CreatorScopeAggregator implements AggregatorInterface | ||||
| { | ||||
|     private ScopeRepository $scopeRepository; | ||||
|  | ||||
|     private TranslatableStringHelper $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         ScopeRepository $scopeRepository, | ||||
|         TranslatableStringHelper $translatableStringHelper | ||||
|     ) { | ||||
|         $this->scopeRepository = $scopeRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     public function __construct(private readonly ScopeRepository $scopeRepository, private readonly TranslatableStringHelper $translatableStringHelper) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -94,17 +94,9 @@ class DateAggregator implements AggregatorInterface | ||||
|                 return ''; | ||||
|             } | ||||
|  | ||||
|             switch ($data['frequency']) { | ||||
|                 case 'month': | ||||
|                 case 'week': | ||||
|                     //return $this->translator->trans('for week') .' '. $value ; | ||||
|  | ||||
|                 case 'year': | ||||
|                     //return $this->translator->trans('in year') .' '. $value ; | ||||
|  | ||||
|                 default: | ||||
|                     return $value; | ||||
|             } | ||||
|             return match ($data['frequency']) { | ||||
|                 default => $value, | ||||
|             }; | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -21,16 +21,8 @@ use function in_array; | ||||
|  | ||||
| class LocationTypeAggregator implements AggregatorInterface | ||||
| { | ||||
|     private LocationTypeRepository $locationTypeRepository; | ||||
|  | ||||
|     private TranslatableStringHelper $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         LocationTypeRepository $locationTypeRepository, | ||||
|         TranslatableStringHelper $translatableStringHelper | ||||
|     ) { | ||||
|         $this->locationTypeRepository = $locationTypeRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     public function __construct(private readonly LocationTypeRepository $locationTypeRepository, private readonly TranslatableStringHelper $translatableStringHelper) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -22,18 +22,10 @@ use function in_array; | ||||
|  | ||||
| class ActivityTypeAggregator implements AggregatorInterface | ||||
| { | ||||
|     public const KEY = 'activity_type_aggregator'; | ||||
|     final public const KEY = 'activity_type_aggregator'; | ||||
|  | ||||
|     protected ActivityTypeRepositoryInterface $activityTypeRepository; | ||||
|  | ||||
|     protected TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         ActivityTypeRepositoryInterface $activityTypeRepository, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper | ||||
|     ) { | ||||
|         $this->activityTypeRepository = $activityTypeRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     public function __construct(protected ActivityTypeRepositoryInterface $activityTypeRepository, protected TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -21,18 +21,10 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ActivityUserAggregator implements AggregatorInterface | ||||
| { | ||||
|     public const KEY = 'activity_user_id'; | ||||
|     final public const KEY = 'activity_user_id'; | ||||
|  | ||||
|     private UserRender $userRender; | ||||
|  | ||||
|     private UserRepository $userRepository; | ||||
|  | ||||
|     public function __construct( | ||||
|         UserRepository $userRepository, | ||||
|         UserRender $userRender | ||||
|     ) { | ||||
|         $this->userRepository = $userRepository; | ||||
|         $this->userRender = $userRender; | ||||
|     public function __construct(private readonly UserRepository $userRepository, private readonly UserRender $userRender) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -21,14 +21,8 @@ use function in_array; | ||||
|  | ||||
| class ActivityUsersAggregator implements AggregatorInterface | ||||
| { | ||||
|     private UserRender $userRender; | ||||
|  | ||||
|     private UserRepositoryInterface $userRepository; | ||||
|  | ||||
|     public function __construct(UserRepositoryInterface $userRepository, UserRender $userRender) | ||||
|     public function __construct(private readonly UserRepositoryInterface $userRepository, private readonly UserRender $userRender) | ||||
|     { | ||||
|         $this->userRepository = $userRepository; | ||||
|         $this->userRender = $userRender; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -20,14 +20,8 @@ use function in_array; | ||||
|  | ||||
| class ActivityUsersJobAggregator implements \Chill\MainBundle\Export\AggregatorInterface | ||||
| { | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     private UserJobRepositoryInterface $userJobRepository; | ||||
|  | ||||
|     public function __construct(UserJobRepositoryInterface $userJobRepository, TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     public function __construct(private readonly UserJobRepositoryInterface $userJobRepository, private readonly TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     { | ||||
|         $this->userJobRepository = $userJobRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -20,14 +20,8 @@ use function in_array; | ||||
|  | ||||
| class ActivityUsersScopeAggregator implements \Chill\MainBundle\Export\AggregatorInterface | ||||
| { | ||||
|     private ScopeRepositoryInterface $scopeRepository; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct(ScopeRepositoryInterface $scopeRepository, TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     public function __construct(private readonly ScopeRepositoryInterface $scopeRepository, private readonly TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     { | ||||
|         $this->scopeRepository = $scopeRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -30,20 +30,8 @@ use function in_array; | ||||
|  | ||||
| class ActivityReasonAggregator implements AggregatorInterface, ExportElementValidatedInterface | ||||
| { | ||||
|     protected ActivityReasonCategoryRepository $activityReasonCategoryRepository; | ||||
|  | ||||
|     protected ActivityReasonRepository $activityReasonRepository; | ||||
|  | ||||
|     protected TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         ActivityReasonCategoryRepository $activityReasonCategoryRepository, | ||||
|         ActivityReasonRepository $activityReasonRepository, | ||||
|         TranslatableStringHelper $translatableStringHelper | ||||
|     ) { | ||||
|         $this->activityReasonCategoryRepository = $activityReasonCategoryRepository; | ||||
|         $this->activityReasonRepository = $activityReasonRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     public function __construct(protected ActivityReasonCategoryRepository $activityReasonCategoryRepository, protected ActivityReasonRepository $activityReasonRepository, protected TranslatableStringHelper $translatableStringHelper) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
| @@ -117,21 +105,11 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali | ||||
|  | ||||
|     public function getLabels($key, array $values, $data) | ||||
|     { | ||||
|         // for performance reason, we load data from db only once | ||||
|         switch ($data['level']) { | ||||
|             case 'reasons': | ||||
|                 $this->activityReasonRepository->findBy(['id' => $values]); | ||||
|  | ||||
|                 break; | ||||
|  | ||||
|             case 'categories': | ||||
|                 $this->activityReasonCategoryRepository->findBy(['id' => $values]); | ||||
|  | ||||
|                 break; | ||||
|  | ||||
|             default: | ||||
|                 throw new RuntimeException(sprintf("The level data '%s' is invalid.", $data['level'])); | ||||
|         } | ||||
|         match ($data['level']) { | ||||
|             'reasons' => $this->activityReasonRepository->findBy(['id' => $values]), | ||||
|             'categories' => $this->activityReasonCategoryRepository->findBy(['id' => $values]), | ||||
|             default => throw new RuntimeException(sprintf("The level data '%s' is invalid.", $data['level'])), | ||||
|         }; | ||||
|  | ||||
|         return function ($value) use ($data) { | ||||
|             if ('_header' === $value) { | ||||
|   | ||||
| @@ -20,11 +20,8 @@ use Symfony\Contracts\Translation\TranslatorInterface; | ||||
|  | ||||
| class SentReceivedAggregator implements AggregatorInterface | ||||
| { | ||||
|     private TranslatorInterface $translator; | ||||
|  | ||||
|     public function __construct(TranslatorInterface $translator) | ||||
|     public function __construct(private readonly TranslatorInterface $translator) | ||||
|     { | ||||
|         $this->translator = $translator; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -16,9 +16,9 @@ namespace Chill\ActivityBundle\Export; | ||||
|  */ | ||||
| abstract class Declarations | ||||
| { | ||||
|     public const ACTIVITY = 'activity'; | ||||
|     final public const ACTIVITY = 'activity'; | ||||
|  | ||||
|     public const ACTIVITY_ACP = 'activity_linked_to_acp'; | ||||
|     final public const ACTIVITY_ACP = 'activity_linked_to_acp'; | ||||
|  | ||||
|     public const ACTIVITY_PERSON = 'activity_linked_to_person'; | ||||
|     final public const ACTIVITY_PERSON = 'activity_linked_to_person'; | ||||
| } | ||||
|   | ||||
| @@ -24,20 +24,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ListActivity implements ListInterface, GroupedExportInterface | ||||
| { | ||||
|     private EntityManagerInterface $entityManager; | ||||
|  | ||||
|     private ListActivityHelper $helper; | ||||
|  | ||||
|     private TranslatableStringExportLabelHelper $translatableStringExportLabelHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         ListActivityHelper $helper, | ||||
|         EntityManagerInterface $entityManager, | ||||
|         TranslatableStringExportLabelHelper $translatableStringExportLabelHelper | ||||
|     ) { | ||||
|         $this->helper = $helper; | ||||
|         $this->entityManager = $entityManager; | ||||
|         $this->translatableStringExportLabelHelper = $translatableStringExportLabelHelper; | ||||
|     public function __construct(private readonly ListActivityHelper $helper, private readonly EntityManagerInterface $entityManager, private readonly TranslatableStringExportLabelHelper $translatableStringExportLabelHelper) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder) | ||||
| @@ -66,22 +54,17 @@ class ListActivity implements ListInterface, GroupedExportInterface | ||||
|  | ||||
|     public function getLabels($key, array $values, $data) | ||||
|     { | ||||
|         switch ($key) { | ||||
|             case 'acpId': | ||||
|                 return static function ($value) { | ||||
|                     if ('_header' === $value) { | ||||
|                         return ListActivityHelper::MSG_KEY . 'accompanying course id'; | ||||
|                     } | ||||
|         return match ($key) { | ||||
|             'acpId' => static function ($value) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return ListActivityHelper::MSG_KEY . 'accompanying course id'; | ||||
|                 } | ||||
|  | ||||
|                     return $value ?? ''; | ||||
|                 }; | ||||
|  | ||||
|             case 'scopesNames': | ||||
|                 return $this->translatableStringExportLabelHelper->getLabelMulti($key, $values, ListActivityHelper::MSG_KEY . 'course circles'); | ||||
|  | ||||
|             default: | ||||
|                 return $this->helper->getLabels($key, $values, $data); | ||||
|         } | ||||
|                 return $value ?? ''; | ||||
|             }, | ||||
|             'scopesNames' => $this->translatableStringExportLabelHelper->getLabelMulti($key, $values, ListActivityHelper::MSG_KEY . 'course circles'), | ||||
|             default => $this->helper->getLabels($key, $values, $data), | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     public function getQueryKeys($data) | ||||
|   | ||||
| @@ -24,12 +24,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class CountActivity implements ExportInterface, GroupedExportInterface | ||||
| { | ||||
|     protected ActivityRepository $activityRepository; | ||||
|  | ||||
|     public function __construct( | ||||
|         ActivityRepository $activityRepository | ||||
|     ) { | ||||
|         $this->activityRepository = $activityRepository; | ||||
|     public function __construct(protected ActivityRepository $activityRepository) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder) | ||||
|   | ||||
| @@ -36,8 +36,6 @@ use function in_array; | ||||
|  | ||||
| class ListActivity implements ListInterface, GroupedExportInterface | ||||
| { | ||||
|     protected EntityManagerInterface $entityManager; | ||||
|  | ||||
|     protected array $fields = [ | ||||
|         'id', | ||||
|         'date', | ||||
| @@ -52,22 +50,8 @@ class ListActivity implements ListInterface, GroupedExportInterface | ||||
|         'person_id', | ||||
|     ]; | ||||
|  | ||||
|     protected TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     protected TranslatorInterface $translator; | ||||
|  | ||||
|     private ActivityRepository $activityRepository; | ||||
|  | ||||
|     public function __construct( | ||||
|         EntityManagerInterface $em, | ||||
|         TranslatorInterface $translator, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         ActivityRepository $activityRepository | ||||
|     ) { | ||||
|         $this->entityManager = $em; | ||||
|         $this->translator = $translator; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|         $this->activityRepository = $activityRepository; | ||||
|     public function __construct(protected EntityManagerInterface $entityManager, protected TranslatorInterface $translator, protected TranslatableStringHelperInterface $translatableStringHelper, private readonly ActivityRepository $activityRepository) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder) | ||||
|   | ||||
| @@ -30,24 +30,18 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  */ | ||||
| class StatActivityDuration implements ExportInterface, GroupedExportInterface | ||||
| { | ||||
|     public const SUM = 'sum'; | ||||
|  | ||||
|     /** | ||||
|      * The action for this report. | ||||
|      */ | ||||
|     protected string $action; | ||||
|  | ||||
|     private ActivityRepository $activityRepository; | ||||
|     final public const SUM = 'sum'; | ||||
|  | ||||
|     /** | ||||
|      * @param string $action the stat to perform | ||||
|      */ | ||||
|     public function __construct( | ||||
|         ActivityRepository $activityRepository, | ||||
|         string $action = 'sum' | ||||
|         private readonly ActivityRepository $activityRepository, | ||||
|         /** | ||||
|          * The action for this report. | ||||
|          */ | ||||
|         protected string $action = 'sum' | ||||
|     ) { | ||||
|         $this->action = $action; | ||||
|         $this->activityRepository = $activityRepository; | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder) | ||||
|   | ||||
| @@ -30,46 +30,19 @@ use const SORT_NUMERIC; | ||||
|  | ||||
| class ListActivityHelper | ||||
| { | ||||
|     public const MSG_KEY = 'export.list.activity.'; | ||||
|  | ||||
|     private ActivityPresenceRepositoryInterface $activityPresenceRepository; | ||||
|  | ||||
|     private ActivityTypeRepositoryInterface $activityTypeRepository; | ||||
|  | ||||
|     private DateTimeHelper $dateTimeHelper; | ||||
|  | ||||
|     private LabelPersonHelper $labelPersonHelper; | ||||
|  | ||||
|     private LabelThirdPartyHelper $labelThirdPartyHelper; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     private TranslatableStringExportLabelHelper $translatableStringLabelHelper; | ||||
|  | ||||
|     private TranslatorInterface $translator; | ||||
|  | ||||
|     private UserHelper $userHelper; | ||||
|     final public const MSG_KEY = 'export.list.activity.'; | ||||
|  | ||||
|     public function __construct( | ||||
|         ActivityPresenceRepositoryInterface $activityPresenceRepository, | ||||
|         ActivityTypeRepositoryInterface $activityTypeRepository, | ||||
|         DateTimeHelper $dateTimeHelper, | ||||
|         LabelPersonHelper $labelPersonHelper, | ||||
|         LabelThirdPartyHelper $labelThirdPartyHelper, | ||||
|         TranslatorInterface $translator, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         TranslatableStringExportLabelHelper $translatableStringLabelHelper, | ||||
|         UserHelper $userHelper | ||||
|         private readonly ActivityPresenceRepositoryInterface $activityPresenceRepository, | ||||
|         private readonly ActivityTypeRepositoryInterface $activityTypeRepository, | ||||
|         private readonly DateTimeHelper $dateTimeHelper, | ||||
|         private readonly LabelPersonHelper $labelPersonHelper, | ||||
|         private readonly LabelThirdPartyHelper $labelThirdPartyHelper, | ||||
|         private readonly TranslatorInterface $translator, | ||||
|         private readonly TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         private readonly TranslatableStringExportLabelHelper $translatableStringLabelHelper, | ||||
|         private readonly UserHelper $userHelper | ||||
|     ) { | ||||
|         $this->activityPresenceRepository = $activityPresenceRepository; | ||||
|         $this->activityTypeRepository = $activityTypeRepository; | ||||
|         $this->dateTimeHelper = $dateTimeHelper; | ||||
|         $this->labelPersonHelper = $labelPersonHelper; | ||||
|         $this->labelThirdPartyHelper = $labelThirdPartyHelper; | ||||
|         $this->translator = $translator; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|         $this->translatableStringLabelHelper = $translatableStringLabelHelper; | ||||
|         $this->userHelper = $userHelper; | ||||
|     } | ||||
|  | ||||
|     public function addSelect(QueryBuilder $qb): void | ||||
| @@ -115,113 +88,78 @@ class ListActivityHelper | ||||
|  | ||||
|     public function getLabels($key, array $values, $data) | ||||
|     { | ||||
|         switch ($key) { | ||||
|             case 'createdAt': | ||||
|             case 'updatedAt': | ||||
|                 return $this->dateTimeHelper->getLabel($key); | ||||
|         return match ($key) { | ||||
|             'createdAt', 'updatedAt' => $this->dateTimeHelper->getLabel($key), | ||||
|             'createdBy', 'updatedBy' => $this->userHelper->getLabel($key, $values, $key), | ||||
|             'date' => $this->dateTimeHelper->getLabel(self::MSG_KEY . $key), | ||||
|             'attendeeName' => function ($value) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return 'Attendee'; | ||||
|                 } | ||||
|  | ||||
|             case 'createdBy': | ||||
|             case 'updatedBy': | ||||
|                 return $this->userHelper->getLabel($key, $values, $key); | ||||
|                 if (null === $value || null === $presence = $this->activityPresenceRepository->find($value)) { | ||||
|                     return ''; | ||||
|                 } | ||||
|  | ||||
|             case 'date': | ||||
|                 return $this->dateTimeHelper->getLabel(self::MSG_KEY . $key); | ||||
|                 return $this->translatableStringHelper->localize($presence->getName()); | ||||
|             }, | ||||
|             'listReasons' => $this->translatableStringLabelHelper->getLabelMulti($key, $values, 'Activity Reasons'), | ||||
|             'typeName' => function ($value) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return 'Activity type'; | ||||
|                 } | ||||
|  | ||||
|             case 'attendeeName': | ||||
|                 return function ($value) { | ||||
|                     if ('_header' === $value) { | ||||
|                         return 'Attendee'; | ||||
|                     } | ||||
|                 if (null === $value || null === $type = $this->activityTypeRepository->find($value)) { | ||||
|                     return ''; | ||||
|                 } | ||||
|  | ||||
|                     if (null === $value || null === $presence = $this->activityPresenceRepository->find($value)) { | ||||
|                         return ''; | ||||
|                     } | ||||
|                 return $this->translatableStringHelper->localize($type->getName()); | ||||
|             }, | ||||
|             'usersNames' => $this->userHelper->getLabelMulti($key, $values, self::MSG_KEY . 'users name'), | ||||
|             'usersIds', 'thirdPartiesIds', 'personsIds' => static function ($value) use ($key) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return match ($key) { | ||||
|                         'usersIds' => self::MSG_KEY . 'users ids', | ||||
|                         'thirdPartiesIds' => self::MSG_KEY . 'third parties ids', | ||||
|                         'personsIds' => self::MSG_KEY . 'persons ids', | ||||
|                     }; | ||||
|                 } | ||||
|  | ||||
|                     return $this->translatableStringHelper->localize($presence->getName()); | ||||
|                 }; | ||||
|                 $decoded = json_decode($value, null, 512, JSON_THROW_ON_ERROR); | ||||
|  | ||||
|             case 'listReasons': | ||||
|                 return $this->translatableStringLabelHelper->getLabelMulti($key, $values, 'Activity Reasons'); | ||||
|                 return implode( | ||||
|                     '|', | ||||
|                     array_unique( | ||||
|                         array_filter($decoded, static fn (?int $id) => null !== $id), | ||||
|                         SORT_NUMERIC | ||||
|                     ) | ||||
|                 ); | ||||
|             }, | ||||
|             'personsNames' => $this->labelPersonHelper->getLabelMulti($key, $values, self::MSG_KEY . 'persons name'), | ||||
|             'thirdPartiesNames' => $this->labelThirdPartyHelper->getLabelMulti($key, $values, self::MSG_KEY . 'thirds parties'), | ||||
|             'sentReceived' => function ($value) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return self::MSG_KEY . 'sent received'; | ||||
|                 } | ||||
|  | ||||
|             case 'typeName': | ||||
|                 return function ($value) { | ||||
|                     if ('_header' === $value) { | ||||
|                         return 'Activity type'; | ||||
|                     } | ||||
|                 if (null === $value) { | ||||
|                     return ''; | ||||
|                 } | ||||
|  | ||||
|                     if (null === $value || null === $type = $this->activityTypeRepository->find($value)) { | ||||
|                         return ''; | ||||
|                     } | ||||
|                 return $this->translator->trans($value); | ||||
|             }, | ||||
|             default => function ($value) use ($key) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return self::MSG_KEY . $key; | ||||
|                 } | ||||
|  | ||||
|                     return $this->translatableStringHelper->localize($type->getName()); | ||||
|                 }; | ||||
|                 if (null === $value) { | ||||
|                     return ''; | ||||
|                 } | ||||
|  | ||||
|             case 'usersNames': | ||||
|                 return $this->userHelper->getLabelMulti($key, $values, self::MSG_KEY . 'users name'); | ||||
|  | ||||
|             case 'usersIds': | ||||
|             case 'thirdPartiesIds': | ||||
|             case 'personsIds': | ||||
|                 return static function ($value) use ($key) { | ||||
|                     if ('_header' === $value) { | ||||
|                         switch ($key) { | ||||
|                             case 'usersIds': | ||||
|                                 return self::MSG_KEY . 'users ids'; | ||||
|  | ||||
|                             case 'thirdPartiesIds': | ||||
|                                 return self::MSG_KEY . 'third parties ids'; | ||||
|  | ||||
|                             case 'personsIds': | ||||
|                                 return self::MSG_KEY . 'persons ids'; | ||||
|  | ||||
|                             default: | ||||
|                                 throw new LogicException('key not supported'); | ||||
|                         } | ||||
|                     } | ||||
|  | ||||
|                     $decoded = json_decode($value, null, 512, JSON_THROW_ON_ERROR); | ||||
|  | ||||
|                     return implode( | ||||
|                         '|', | ||||
|                         array_unique( | ||||
|                             array_filter($decoded, static fn (?int $id) => null !== $id), | ||||
|                             SORT_NUMERIC | ||||
|                         ) | ||||
|                     ); | ||||
|                 }; | ||||
|  | ||||
|             case 'personsNames': | ||||
|                 return $this->labelPersonHelper->getLabelMulti($key, $values, self::MSG_KEY . 'persons name'); | ||||
|  | ||||
|             case 'thirdPartiesNames': | ||||
|                 return $this->labelThirdPartyHelper->getLabelMulti($key, $values, self::MSG_KEY . 'thirds parties'); | ||||
|  | ||||
|             case 'sentReceived': | ||||
|                 return function ($value) { | ||||
|                     if ('_header' === $value) { | ||||
|                         return self::MSG_KEY . 'sent received'; | ||||
|                     } | ||||
|  | ||||
|                     if (null === $value) { | ||||
|                         return ''; | ||||
|                     } | ||||
|  | ||||
|                     return $this->translator->trans($value); | ||||
|                 }; | ||||
|  | ||||
|             default: | ||||
|                 return function ($value) use ($key) { | ||||
|                     if ('_header' === $value) { | ||||
|                         return self::MSG_KEY . $key; | ||||
|                     } | ||||
|  | ||||
|                     if (null === $value) { | ||||
|                         return ''; | ||||
|                     } | ||||
|  | ||||
|                     return $this->translator->trans($value); | ||||
|                 }; | ||||
|         } | ||||
|                 return $this->translator->trans($value); | ||||
|             }, | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     public function getQueryKeys($data) | ||||
|   | ||||
| @@ -23,16 +23,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ActivityTypeFilter implements FilterInterface | ||||
| { | ||||
|     private ActivityTypeRepositoryInterface $activityTypeRepository; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         ActivityTypeRepositoryInterface $activityTypeRepository, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper | ||||
|     ) { | ||||
|         $this->activityTypeRepository = $activityTypeRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     public function __construct(private readonly ActivityTypeRepositoryInterface $activityTypeRepository, private readonly TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -20,11 +20,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ByCreatorFilter implements FilterInterface | ||||
| { | ||||
|     private UserRender $userRender; | ||||
|  | ||||
|     public function __construct(UserRender $userRender) | ||||
|     public function __construct(private readonly UserRender $userRender) | ||||
|     { | ||||
|         $this->userRender = $userRender; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -22,11 +22,8 @@ use function in_array; | ||||
|  | ||||
| class BySocialActionFilter implements FilterInterface | ||||
| { | ||||
|     private SocialActionRender $actionRender; | ||||
|  | ||||
|     public function __construct(SocialActionRender $actionRender) | ||||
|     public function __construct(private readonly SocialActionRender $actionRender) | ||||
|     { | ||||
|         $this->actionRender = $actionRender; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -22,11 +22,8 @@ use function in_array; | ||||
|  | ||||
| class BySocialIssueFilter implements FilterInterface | ||||
| { | ||||
|     private SocialIssueRender $issueRender; | ||||
|  | ||||
|     public function __construct(SocialIssueRender $issueRender) | ||||
|     public function __construct(private readonly SocialIssueRender $issueRender) | ||||
|     { | ||||
|         $this->issueRender = $issueRender; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -28,11 +28,8 @@ class EmergencyFilter implements FilterInterface | ||||
|  | ||||
|     private const DEFAULT_CHOICE = false; | ||||
|  | ||||
|     private TranslatorInterface $translator; | ||||
|  | ||||
|     public function __construct(TranslatorInterface $translator) | ||||
|     public function __construct(private readonly TranslatorInterface $translator) | ||||
|     { | ||||
|         $this->translator = $translator; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -22,11 +22,8 @@ use function in_array; | ||||
|  | ||||
| class LocationTypeFilter implements FilterInterface | ||||
| { | ||||
|     private TranslatableStringHelper $translatableStringHelper; | ||||
|  | ||||
|     public function __construct(TranslatableStringHelper $translatableStringHelper) | ||||
|     public function __construct(private readonly TranslatableStringHelper $translatableStringHelper) | ||||
|     { | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -29,11 +29,8 @@ class SentReceivedFilter implements FilterInterface | ||||
|  | ||||
|     private const DEFAULT_CHOICE = Activity::SENTRECEIVED_SENT; | ||||
|  | ||||
|     private TranslatorInterface $translator; | ||||
|  | ||||
|     public function __construct(TranslatorInterface $translator) | ||||
|     public function __construct(private readonly TranslatorInterface $translator) | ||||
|     { | ||||
|         $this->translator = $translator; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -21,11 +21,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class UserFilter implements FilterInterface | ||||
| { | ||||
|     private UserRender $userRender; | ||||
|  | ||||
|     public function __construct(UserRender $userRender) | ||||
|     public function __construct(private readonly UserRender $userRender) | ||||
|     { | ||||
|         $this->userRender = $userRender; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -23,11 +23,8 @@ use function in_array; | ||||
|  | ||||
| class UserScopeFilter implements FilterInterface | ||||
| { | ||||
|     private TranslatableStringHelper $translatableStringHelper; | ||||
|  | ||||
|     public function __construct(TranslatableStringHelper $translatableStringHelper) | ||||
|     public function __construct(private readonly TranslatableStringHelper $translatableStringHelper) | ||||
|     { | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -27,16 +27,8 @@ use Symfony\Contracts\Translation\TranslatorInterface; | ||||
|  | ||||
| class ActivityDateFilter implements FilterInterface | ||||
| { | ||||
|     protected TranslatorInterface $translator; | ||||
|  | ||||
|     private RollingDateConverterInterface $rollingDateConverter; | ||||
|  | ||||
|     public function __construct( | ||||
|         TranslatorInterface $translator, | ||||
|         RollingDateConverterInterface $rollingDateConverter | ||||
|     ) { | ||||
|         $this->translator = $translator; | ||||
|         $this->rollingDateConverter = $rollingDateConverter; | ||||
|     public function __construct(protected TranslatorInterface $translator, private readonly RollingDateConverterInterface $rollingDateConverter) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -26,16 +26,10 @@ use function count; | ||||
|  | ||||
| class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInterface | ||||
| { | ||||
|     protected ActivityTypeRepositoryInterface $activityTypeRepository; | ||||
|  | ||||
|     protected TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         ActivityTypeRepositoryInterface $activityTypeRepository | ||||
|         protected TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         protected ActivityTypeRepositoryInterface $activityTypeRepository | ||||
|     ) { | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|         $this->activityTypeRepository = $activityTypeRepository; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -20,11 +20,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ActivityUsersFilter implements FilterInterface | ||||
| { | ||||
|     private UserRender $userRender; | ||||
|  | ||||
|     public function __construct(UserRender $userRender) | ||||
|     public function __construct(private readonly UserRender $userRender) | ||||
|     { | ||||
|         $this->userRender = $userRender; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -29,16 +29,8 @@ use function in_array; | ||||
|  | ||||
| class ActivityReasonFilter implements ExportElementValidatedInterface, FilterInterface | ||||
| { | ||||
|     protected ActivityReasonRepository $activityReasonRepository; | ||||
|  | ||||
|     protected TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         TranslatableStringHelper $helper, | ||||
|         ActivityReasonRepository $activityReasonRepository | ||||
|     ) { | ||||
|         $this->translatableStringHelper = $helper; | ||||
|         $this->activityReasonRepository = $activityReasonRepository; | ||||
|     public function __construct(protected TranslatableStringHelper $translatableStringHelper, protected ActivityReasonRepository $activityReasonRepository) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -37,20 +37,8 @@ use function count; | ||||
|  | ||||
| class PersonHavingActivityBetweenDateFilter implements ExportElementValidatedInterface, FilterInterface | ||||
| { | ||||
|     protected ActivityReasonRepository $activityReasonRepository; | ||||
|  | ||||
|     protected TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     protected TranslatorInterface $translator; | ||||
|  | ||||
|     public function __construct( | ||||
|         TranslatableStringHelper $translatableStringHelper, | ||||
|         ActivityReasonRepository $activityReasonRepository, | ||||
|         TranslatorInterface $translator | ||||
|     ) { | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|         $this->activityReasonRepository = $activityReasonRepository; | ||||
|         $this->translator = $translator; | ||||
|     public function __construct(protected TranslatableStringHelper $translatableStringHelper, protected ActivityReasonRepository $activityReasonRepository, protected TranslatorInterface $translator) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -22,11 +22,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class UsersJobFilter implements FilterInterface | ||||
| { | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct(TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     public function __construct(private readonly TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     { | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -23,16 +23,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class UsersScopeFilter implements FilterInterface | ||||
| { | ||||
|     private ScopeRepositoryInterface $scopeRepository; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         ScopeRepositoryInterface $scopeRepository, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper | ||||
|     ) { | ||||
|         $this->scopeRepository = $scopeRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     public function __construct(private readonly ScopeRepositoryInterface $scopeRepository, private readonly TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -58,40 +58,22 @@ use function in_array; | ||||
|  | ||||
| class ActivityType extends AbstractType | ||||
| { | ||||
|     protected AuthorizationHelper $authorizationHelper; | ||||
|  | ||||
|     protected ObjectManager $om; | ||||
|  | ||||
|     protected SocialActionRender $socialActionRender; | ||||
|  | ||||
|     protected SocialIssueRender $socialIssueRender; | ||||
|  | ||||
|     protected array $timeChoices; | ||||
|  | ||||
|     protected TranslatableStringHelper $translatableStringHelper; | ||||
|  | ||||
|     protected User $user; | ||||
|  | ||||
|     public function __construct( | ||||
|         TokenStorageInterface $tokenStorage, | ||||
|         AuthorizationHelper $authorizationHelper, | ||||
|         ObjectManager $om, | ||||
|         TranslatableStringHelper $translatableStringHelper, | ||||
|         array $timeChoices, | ||||
|         SocialIssueRender $socialIssueRender, | ||||
|         SocialActionRender $socialActionRender | ||||
|         protected AuthorizationHelper $authorizationHelper, | ||||
|         protected ObjectManager $om, | ||||
|         protected TranslatableStringHelper $translatableStringHelper, | ||||
|         protected array $timeChoices, | ||||
|         protected SocialIssueRender $socialIssueRender, | ||||
|         protected SocialActionRender $socialActionRender | ||||
|     ) { | ||||
|         if (!$tokenStorage->getToken()->getUser() instanceof User) { | ||||
|             throw new RuntimeException('you should have a valid user'); | ||||
|         } | ||||
|  | ||||
|         $this->user = $tokenStorage->getToken()->getUser(); | ||||
|         $this->authorizationHelper = $authorizationHelper; | ||||
|         $this->om = $om; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|         $this->timeChoices = $timeChoices; | ||||
|         $this->socialIssueRender = $socialIssueRender; | ||||
|         $this->socialActionRender = $socialActionRender; | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder, array $options): void | ||||
|   | ||||
| @@ -25,11 +25,8 @@ use Symfony\Component\OptionsResolver\OptionsResolver; | ||||
|  | ||||
| class ActivityTypeType extends AbstractType | ||||
| { | ||||
|     private TranslatableStringHelper $translatableStringHelper; | ||||
|  | ||||
|     public function __construct(TranslatableStringHelper $translatableStringHelper) | ||||
|     public function __construct(private readonly TranslatableStringHelper $translatableStringHelper) | ||||
|     { | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder, array $options) | ||||
|   | ||||
| @@ -24,20 +24,11 @@ use Symfony\Component\OptionsResolver\OptionsResolver; | ||||
|  */ | ||||
| class PickActivityReasonType extends AbstractType | ||||
| { | ||||
|     private ActivityReasonRepository $activityReasonRepository; | ||||
|  | ||||
|     private ActivityReasonRender $reasonRender; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         ActivityReasonRepository $activityReasonRepository, | ||||
|         ActivityReasonRender $reasonRender, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper | ||||
|         private readonly ActivityReasonRepository $activityReasonRepository, | ||||
|         private readonly ActivityReasonRender $reasonRender, | ||||
|         private readonly TranslatableStringHelperInterface $translatableStringHelper | ||||
|     ) { | ||||
|         $this->activityReasonRepository = $activityReasonRepository; | ||||
|         $this->reasonRender = $reasonRender; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function configureOptions(OptionsResolver $resolver) | ||||
|   | ||||
| @@ -23,14 +23,8 @@ use Symfony\Contracts\Translation\TranslatorInterface; | ||||
|  */ | ||||
| class TranslatableActivityReasonCategoryType extends AbstractType | ||||
| { | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     private TranslatorInterface $translator; | ||||
|  | ||||
|     public function __construct(TranslatableStringHelperInterface $translatableStringHelper, TranslatorInterface $translator) | ||||
|     public function __construct(private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly TranslatorInterface $translator) | ||||
|     { | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|         $this->translator = $translator; | ||||
|     } | ||||
|  | ||||
|     public function configureOptions(OptionsResolver $resolver) | ||||
|   | ||||
| @@ -20,16 +20,8 @@ use Symfony\Component\OptionsResolver\OptionsResolver; | ||||
|  | ||||
| class TranslatableActivityType extends AbstractType | ||||
| { | ||||
|     protected ActivityTypeRepositoryInterface $activityTypeRepository; | ||||
|  | ||||
|     protected TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         TranslatableStringHelperInterface $helper, | ||||
|         ActivityTypeRepositoryInterface $activityTypeRepository | ||||
|     ) { | ||||
|         $this->translatableStringHelper = $helper; | ||||
|         $this->activityTypeRepository = $activityTypeRepository; | ||||
|     public function __construct(protected TranslatableStringHelperInterface $translatableStringHelper, protected ActivityTypeRepositoryInterface $activityTypeRepository) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function configureOptions(OptionsResolver $resolver) | ||||
|   | ||||
| @@ -23,16 +23,8 @@ use Symfony\Contracts\Translation\TranslatorInterface; | ||||
|  */ | ||||
| class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface | ||||
| { | ||||
|     protected Security $security; | ||||
|  | ||||
|     protected TranslatorInterface $translator; | ||||
|  | ||||
|     public function __construct( | ||||
|         Security $security, | ||||
|         TranslatorInterface $translator | ||||
|     ) { | ||||
|         $this->security = $security; | ||||
|         $this->translator = $translator; | ||||
|     public function __construct(protected Security $security, protected TranslatorInterface $translator) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function buildMenu($menuId, MenuItem $menu, array $parameters) | ||||
|   | ||||
| @@ -18,13 +18,10 @@ use Symfony\Component\Security\Core\Security; | ||||
| /** | ||||
|  * @implements LocalMenuBuilderInterface<array> | ||||
|  */ | ||||
| final class AdminMenuBuilder implements LocalMenuBuilderInterface | ||||
| final readonly class AdminMenuBuilder implements LocalMenuBuilderInterface | ||||
| { | ||||
|     private Security $security; | ||||
|  | ||||
|     public function __construct(Security $security) | ||||
|     public function __construct(private Security $security) | ||||
|     { | ||||
|         $this->security = $security; | ||||
|     } | ||||
|  | ||||
|     public function buildMenu($menuId, MenuItem $menu, array $parameters) | ||||
|   | ||||
| @@ -21,24 +21,10 @@ use Symfony\Contracts\Translation\TranslatorInterface; | ||||
| /** | ||||
|  * @implements LocalMenuBuilderInterface<array{person: Person}> | ||||
|  */ | ||||
| final class PersonMenuBuilder implements LocalMenuBuilderInterface | ||||
| final readonly class PersonMenuBuilder implements LocalMenuBuilderInterface | ||||
| { | ||||
|     /** | ||||
|      * @var AuthorizationCheckerInterface | ||||
|      */ | ||||
|     private $authorizationChecker; | ||||
|  | ||||
|     /** | ||||
|      * @var TranslatorInterface | ||||
|      */ | ||||
|     private $translator; | ||||
|  | ||||
|     public function __construct( | ||||
|         AuthorizationCheckerInterface $authorizationChecker, | ||||
|         TranslatorInterface $translator | ||||
|     ) { | ||||
|         $this->translator = $translator; | ||||
|         $this->authorizationChecker = $authorizationChecker; | ||||
|     public function __construct(private AuthorizationCheckerInterface $authorizationChecker, private TranslatorInterface $translator) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function buildMenu($menuId, MenuItem $menu, array $parameters) | ||||
|   | ||||
| @@ -16,13 +16,10 @@ use Chill\ActivityBundle\Repository\ActivityRepository; | ||||
| use Chill\MainBundle\Entity\Notification; | ||||
| use Chill\MainBundle\Notification\NotificationHandlerInterface; | ||||
|  | ||||
| final class ActivityNotificationHandler implements NotificationHandlerInterface | ||||
| final readonly class ActivityNotificationHandler implements NotificationHandlerInterface | ||||
| { | ||||
|     private ActivityRepository $activityRepository; | ||||
|  | ||||
|     public function __construct(ActivityRepository $activityRepository) | ||||
|     public function __construct(private ActivityRepository $activityRepository) | ||||
|     { | ||||
|         $this->activityRepository = $activityRepository; | ||||
|     } | ||||
|  | ||||
|     public function getTemplate(Notification $notification, array $options = []): string | ||||
|   | ||||
| @@ -17,7 +17,7 @@ use Doctrine\ORM\EntityRepository; | ||||
|  | ||||
| class ActivityPresenceRepository implements ActivityPresenceRepositoryInterface | ||||
| { | ||||
|     private EntityRepository $repository; | ||||
|     private readonly EntityRepository $repository; | ||||
|  | ||||
|     public function __construct(EntityManagerInterface $entityManager) | ||||
|     { | ||||
|   | ||||
| @@ -23,15 +23,11 @@ use Symfony\Component\HttpFoundation\RequestStack; | ||||
|  */ | ||||
| class ActivityReasonRepository extends ServiceEntityRepository | ||||
| { | ||||
|     private RequestStack $requestStack; | ||||
|  | ||||
|     public function __construct( | ||||
|         ManagerRegistry $registry, | ||||
|         RequestStack $requestStack | ||||
|         private readonly RequestStack $requestStack | ||||
|     ) { | ||||
|         parent::__construct($registry, ActivityReason::class); | ||||
|  | ||||
|         $this->requestStack = $requestStack; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -21,7 +21,7 @@ use Doctrine\ORM\Query\Expr\Join; | ||||
|  | ||||
| final class ActivityTypeRepository implements ActivityTypeRepositoryInterface | ||||
| { | ||||
|     private EntityRepository $repository; | ||||
|     private readonly EntityRepository $repository; | ||||
|  | ||||
|     public function __construct(EntityManagerInterface $em) | ||||
|     { | ||||
|   | ||||
| @@ -20,9 +20,9 @@ use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; | ||||
|  | ||||
| class ActivityStatsVoter extends AbstractChillVoter implements ProvideRoleHierarchyInterface | ||||
| { | ||||
|     public const LISTS = 'CHILL_ACTIVITY_LIST'; | ||||
|     final public const LISTS = 'CHILL_ACTIVITY_LIST'; | ||||
|  | ||||
|     public const STATS = 'CHILL_ACTIVITY_STATS'; | ||||
|     final public const STATS = 'CHILL_ACTIVITY_STATS'; | ||||
|  | ||||
|     protected VoterHelperInterface $helper; | ||||
|  | ||||
|   | ||||
| @@ -35,7 +35,7 @@ class ActivityVoter extends AbstractChillVoter implements ProvideRoleHierarchyIn | ||||
|      * | ||||
|      * It is safe for usage in template and controller | ||||
|      */ | ||||
|     public const CREATE = 'CHILL_ACTIVITY_CREATE'; | ||||
|     final public const CREATE = 'CHILL_ACTIVITY_CREATE'; | ||||
|  | ||||
|     /** | ||||
|      * role to allow to create an activity associated win an accompanying course. | ||||
| @@ -44,7 +44,7 @@ class ActivityVoter extends AbstractChillVoter implements ProvideRoleHierarchyIn | ||||
|      * | ||||
|      * @internal | ||||
|      */ | ||||
|     public const CREATE_ACCOMPANYING_COURSE = 'CHILL_ACTIVITY_CREATE_ACCOMPANYING_COURSE'; | ||||
|     final public const CREATE_ACCOMPANYING_COURSE = 'CHILL_ACTIVITY_CREATE_ACCOMPANYING_COURSE'; | ||||
|  | ||||
|     /** | ||||
|      * role to allow to create an activity associated with a person. | ||||
| @@ -53,17 +53,17 @@ class ActivityVoter extends AbstractChillVoter implements ProvideRoleHierarchyIn | ||||
|      * | ||||
|      * @internal | ||||
|      */ | ||||
|     public const CREATE_PERSON = 'CHILL_ACTIVITY_CREATE_PERSON'; | ||||
|     final public const CREATE_PERSON = 'CHILL_ACTIVITY_CREATE_PERSON'; | ||||
|  | ||||
|     public const DELETE = 'CHILL_ACTIVITY_DELETE'; | ||||
|     final public const DELETE = 'CHILL_ACTIVITY_DELETE'; | ||||
|  | ||||
|     public const FULL = 'CHILL_ACTIVITY_FULL'; | ||||
|     final public const FULL = 'CHILL_ACTIVITY_FULL'; | ||||
|  | ||||
|     public const SEE = 'CHILL_ACTIVITY_SEE'; | ||||
|     final public const SEE = 'CHILL_ACTIVITY_SEE'; | ||||
|  | ||||
|     public const SEE_DETAILS = 'CHILL_ACTIVITY_SEE_DETAILS'; | ||||
|     final public const SEE_DETAILS = 'CHILL_ACTIVITY_SEE_DETAILS'; | ||||
|  | ||||
|     public const UPDATE = 'CHILL_ACTIVITY_UPDATE'; | ||||
|     final public const UPDATE = 'CHILL_ACTIVITY_UPDATE'; | ||||
|  | ||||
|     private const ALL = [ | ||||
|         self::CREATE, | ||||
| @@ -74,15 +74,12 @@ class ActivityVoter extends AbstractChillVoter implements ProvideRoleHierarchyIn | ||||
|         self::FULL, | ||||
|     ]; | ||||
|  | ||||
|     protected Security $security; | ||||
|  | ||||
|     protected VoterHelperInterface $voterHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         Security $security, | ||||
|         protected Security $security, | ||||
|         VoterHelperFactoryInterface $voterHelperFactory | ||||
|     ) { | ||||
|         $this->security = $security; | ||||
|         $this->voterHelper = $voterHelperFactory->generate(self::class) | ||||
|             ->addCheckFor(Person::class, [self::SEE, self::CREATE]) | ||||
|             ->addCheckFor(AccompanyingPeriod::class, [self::SEE, self::CREATE]) | ||||
|   | ||||
| @@ -42,48 +42,17 @@ class ActivityContext implements | ||||
|     DocGeneratorContextWithAdminFormInterface, | ||||
|     DocGeneratorContextWithPublicFormInterface | ||||
| { | ||||
|     private BaseContextData $baseContextData; | ||||
|  | ||||
|     private DocumentCategoryRepository $documentCategoryRepository; | ||||
|  | ||||
|     private EntityManagerInterface $em; | ||||
|  | ||||
|     private NormalizerInterface $normalizer; | ||||
|  | ||||
|     private PersonRenderInterface $personRender; | ||||
|  | ||||
|     private PersonRepository $personRepository; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     private TranslatorInterface $translator; | ||||
|  | ||||
|     private ThirdPartyRender $thirdPartyRender; | ||||
|  | ||||
|     private ThirdPartyRepository $thirdPartyRepository; | ||||
|  | ||||
|     public function __construct( | ||||
|         DocumentCategoryRepository $documentCategoryRepository, | ||||
|         NormalizerInterface $normalizer, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         EntityManagerInterface $em, | ||||
|         PersonRenderInterface $personRender, | ||||
|         PersonRepository $personRepository, | ||||
|         TranslatorInterface $translator, | ||||
|         BaseContextData $baseContextData, | ||||
|         ThirdPartyRender $thirdPartyRender, | ||||
|         ThirdPartyRepository $thirdPartyRepository | ||||
|         private readonly NormalizerInterface $normalizer, | ||||
|         private readonly TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         private readonly EntityManagerInterface $em, | ||||
|         private readonly PersonRenderInterface $personRender, | ||||
|         private readonly PersonRepository $personRepository, | ||||
|         private readonly TranslatorInterface $translator, | ||||
|         private readonly BaseContextData $baseContextData, | ||||
|         private readonly ThirdPartyRender $thirdPartyRender, | ||||
|         private readonly ThirdPartyRepository $thirdPartyRepository | ||||
|     ) { | ||||
|         $this->documentCategoryRepository = $documentCategoryRepository; | ||||
|         $this->normalizer = $normalizer; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|         $this->em = $em; | ||||
|         $this->personRender = $personRender; | ||||
|         $this->personRepository = $personRepository; | ||||
|         $this->translator = $translator; | ||||
|         $this->baseContextData = $baseContextData; | ||||
|         $this->thirdPartyRender = $thirdPartyRender; | ||||
|         $this->thirdPartyRepository = $thirdPartyRepository; | ||||
|     } | ||||
|  | ||||
|     public function adminFormReverseTransform(array $data): array | ||||
|   | ||||
| @@ -48,44 +48,17 @@ class ListActivitiesByAccompanyingPeriodContext implements | ||||
|     DocGeneratorContextWithAdminFormInterface, | ||||
|     DocGeneratorContextWithPublicFormInterface | ||||
| { | ||||
|     private AccompanyingPeriodContext $accompanyingPeriodContext; | ||||
|  | ||||
|     private ActivityACLAwareRepositoryInterface $activityACLAwareRepository; | ||||
|  | ||||
|     private NormalizerInterface $normalizer; | ||||
|  | ||||
|     private PersonRepository $personRepository; | ||||
|  | ||||
|     private SocialActionRepository $socialActionRepository; | ||||
|  | ||||
|     private SocialIssueRepository $socialIssueRepository; | ||||
|  | ||||
|     private ThirdPartyRepository $thirdPartyRepository; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     private UserRepository $userRepository; | ||||
|  | ||||
|     public function __construct( | ||||
|         AccompanyingPeriodContext $accompanyingPeriodContext, | ||||
|         ActivityACLAwareRepositoryInterface $activityACLAwareRepository, | ||||
|         NormalizerInterface $normalizer, | ||||
|         PersonRepository $personRepository, | ||||
|         SocialActionRepository $socialActionRepository, | ||||
|         SocialIssueRepository $socialIssueRepository, | ||||
|         ThirdPartyRepository $thirdPartyRepository, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         UserRepository $userRepository, | ||||
|         private readonly AccompanyingPeriodContext $accompanyingPeriodContext, | ||||
|         private readonly ActivityACLAwareRepositoryInterface $activityACLAwareRepository, | ||||
|         private readonly NormalizerInterface $normalizer, | ||||
|         private readonly PersonRepository $personRepository, | ||||
|         private readonly SocialActionRepository $socialActionRepository, | ||||
|         private readonly SocialIssueRepository $socialIssueRepository, | ||||
|         private readonly ThirdPartyRepository $thirdPartyRepository, | ||||
|         private readonly TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         private readonly UserRepository $userRepository | ||||
|     ) { | ||||
|         $this->accompanyingPeriodContext = $accompanyingPeriodContext; | ||||
|         $this->activityACLAwareRepository = $activityACLAwareRepository; | ||||
|         $this->normalizer = $normalizer; | ||||
|         $this->personRepository = $personRepository; | ||||
|         $this->socialActionRepository = $socialActionRepository; | ||||
|         $this->socialIssueRepository = $socialIssueRepository; | ||||
|         $this->thirdPartyRepository = $thirdPartyRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|         $this->userRepository = $userRepository; | ||||
|     } | ||||
|  | ||||
|     public function adminFormReverseTransform(array $data): array | ||||
|   | ||||
| @@ -28,7 +28,7 @@ use Doctrine\ORM\EntityManagerInterface; | ||||
| use Doctrine\ORM\Mapping\MappingException; | ||||
| use Symfony\Component\Security\Core\Security; | ||||
|  | ||||
| final class AccompanyingPeriodActivityGenericDocProvider implements GenericDocForAccompanyingPeriodProviderInterface, GenericDocForPersonProviderInterface | ||||
| final readonly class AccompanyingPeriodActivityGenericDocProvider implements GenericDocForAccompanyingPeriodProviderInterface, GenericDocForPersonProviderInterface | ||||
| { | ||||
|     public const KEY = 'accompanying_period_activity_document'; | ||||
|  | ||||
|   | ||||
| @@ -19,16 +19,10 @@ use Chill\DocStoreBundle\GenericDoc\Twig\GenericDocRendererInterface; | ||||
| use Chill\DocStoreBundle\Repository\StoredObjectRepository; | ||||
| use Chill\PersonBundle\Entity\AccompanyingPeriod; | ||||
|  | ||||
| final class AccompanyingPeriodActivityGenericDocRenderer implements GenericDocRendererInterface | ||||
| final readonly class AccompanyingPeriodActivityGenericDocRenderer implements GenericDocRendererInterface | ||||
| { | ||||
|     private StoredObjectRepository $objectRepository; | ||||
|  | ||||
|     private ActivityRepository $activityRepository; | ||||
|  | ||||
|     public function __construct(StoredObjectRepository $storedObjectRepository, ActivityRepository $activityRepository) | ||||
|     public function __construct(private StoredObjectRepository $objectRepository, private ActivityRepository $activityRepository) | ||||
|     { | ||||
|         $this->objectRepository = $storedObjectRepository; | ||||
|         $this->activityRepository = $activityRepository; | ||||
|     } | ||||
|  | ||||
|     public function supports(GenericDocDTO $genericDocDTO, $options = []): bool | ||||
|   | ||||
| @@ -76,10 +76,8 @@ final class ActivityControllerTest extends WebTestCase | ||||
|  | ||||
|     /** | ||||
|      * @dataProvider getSecuredPagesUnauthenticated | ||||
|      * | ||||
|      * @param mixed $url | ||||
|      */ | ||||
|     public function testAccessIsDeniedForUnauthenticated($url) | ||||
|     public function testAccessIsDeniedForUnauthenticated(mixed $url) | ||||
|     { | ||||
|         $client = $this->createClient(); | ||||
|  | ||||
| @@ -216,7 +214,7 @@ final class ActivityControllerTest extends WebTestCase | ||||
|             ->setName('social without activity'); | ||||
|         //copy role scopes where ACTIVITY is not present | ||||
|         foreach ($socialPermissionGroup->getRoleScopes() as $roleScope) { | ||||
|             if (!strpos($roleScope->getRole(), 'ACTIVITY')) { | ||||
|             if (!strpos((string) $roleScope->getRole(), 'ACTIVITY')) { | ||||
|                 $withoutActivityPermissionGroup->addRoleScope($roleScope); | ||||
|             } | ||||
|         } | ||||
| @@ -262,11 +260,9 @@ final class ActivityControllerTest extends WebTestCase | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param mixed $username | ||||
|      * | ||||
|      * @return \Symfony\Component\BrowserKit\Client | ||||
|      */ | ||||
|     private function getAuthenticatedClient($username = 'center a_social') | ||||
|     private function getAuthenticatedClient(mixed $username = 'center a_social') | ||||
|     { | ||||
|         return self::createClient([], [ | ||||
|             'PHP_AUTH_USER' => $username, | ||||
|   | ||||
| @@ -19,7 +19,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||||
|  */ | ||||
| final class ActivityReasonCategoryControllerTest extends WebTestCase | ||||
| { | ||||
|     public function testToWrite() | ||||
|     public function testToWrite(): never | ||||
|     { | ||||
|         $this->markTestSkipped(); | ||||
|     } | ||||
|   | ||||
| @@ -19,7 +19,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||||
|  */ | ||||
| final class ActivityReasonControllerTest extends WebTestCase | ||||
| { | ||||
|     public function testToWrite() | ||||
|     public function testToWrite(): never | ||||
|     { | ||||
|         $this->markTestSkipped(); | ||||
|     } | ||||
|   | ||||
| @@ -19,7 +19,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||||
|  */ | ||||
| final class ActivityTypeControllerTest extends WebTestCase | ||||
| { | ||||
|     public function testToWrite() | ||||
|     public function testToWrite(): never | ||||
|     { | ||||
|         $this->markTestSkipped(); | ||||
|     } | ||||
|   | ||||
| @@ -34,7 +34,7 @@ final class TranslatableActivityReasonTest extends TypeTestCase | ||||
|         parent::setUp(); | ||||
|     } | ||||
|  | ||||
|     public function testSimple() | ||||
|     public function testSimple(): never | ||||
|     { | ||||
|         $translatableActivityReasonType = new PickActivityReasonType( | ||||
|             $this->getTranslatableStringHelper() | ||||
|   | ||||
| @@ -89,11 +89,9 @@ final class TranslatableActivityTypeTest extends KernelTestCase | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param mixed $active | ||||
|      * | ||||
|      * @return \Chill\ActivityBundle\Entity\ActivityType | ||||
|      */ | ||||
|     protected function getRandomType($active = true) | ||||
|     protected function getRandomType(mixed $active = true) | ||||
|     { | ||||
|         $types = $this->container->get('doctrine.orm.entity_manager') | ||||
|             ->getRepository(ActivityType::class) | ||||
|   | ||||
| @@ -19,7 +19,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||||
|  */ | ||||
| final class TimelineProviderTest extends WebTestCase | ||||
| { | ||||
|     public function testAnActivityIsShownOnTimeline() | ||||
|     public function testAnActivityIsShownOnTimeline(): never | ||||
|     { | ||||
|         $this->markTestSkipped('we have to write fixtures before writing this tests'); | ||||
|     } | ||||
|   | ||||
| @@ -33,24 +33,14 @@ class TimelineActivityProvider implements TimelineProviderInterface | ||||
| { | ||||
|     private const SUPPORTED_CONTEXTS = ['center', 'person']; | ||||
|  | ||||
|     protected ActivityACLAwareRepository $aclAwareRepository; | ||||
|  | ||||
|     protected EntityManagerInterface $em; | ||||
|  | ||||
|     protected AuthorizationHelperInterface $helper; | ||||
|  | ||||
|     protected UserInterface $user; | ||||
|  | ||||
|     public function __construct( | ||||
|         EntityManagerInterface $em, | ||||
|         AuthorizationHelperInterface $helper, | ||||
|         protected EntityManagerInterface $em, | ||||
|         protected AuthorizationHelperInterface $helper, | ||||
|         TokenStorageInterface $storage, | ||||
|         ActivityACLAwareRepository $aclAwareRepository | ||||
|         protected ActivityACLAwareRepository $aclAwareRepository | ||||
|     ) { | ||||
|         $this->em = $em; | ||||
|         $this->helper = $helper; | ||||
|         $this->aclAwareRepository = $aclAwareRepository; | ||||
|  | ||||
|         if (!$storage->getToken()->getUser() instanceof User) { | ||||
|             throw new RuntimeException('A user should be authenticated !'); | ||||
|         } | ||||
|   | ||||
| @@ -18,9 +18,9 @@ use Symfony\Component\Validator\Constraint; | ||||
|  */ | ||||
| class ActivityValidity extends Constraint | ||||
| { | ||||
|     public const IS_REQUIRED_MESSAGE = ' is required'; | ||||
|     final public const IS_REQUIRED_MESSAGE = ' is required'; | ||||
|  | ||||
|     public const ROOT_MESSAGE = 'For this type of activity, '; | ||||
|     final public const ROOT_MESSAGE = 'For this type of activity, '; | ||||
|  | ||||
|     public $noPersonsMessage = 'For this type of activity, you must add at least one person'; | ||||
|  | ||||
|   | ||||
| @@ -21,11 +21,8 @@ use Symfony\Component\HttpFoundation\Request; | ||||
|  | ||||
| final class AsideActivityController extends CRUDController | ||||
| { | ||||
|     private AsideActivityCategoryRepository $categoryRepository; | ||||
|  | ||||
|     public function __construct(AsideActivityCategoryRepository $categoryRepository) | ||||
|     public function __construct(private readonly AsideActivityCategoryRepository $categoryRepository) | ||||
|     { | ||||
|         $this->categoryRepository = $categoryRepository; | ||||
|     } | ||||
|  | ||||
|     public function createEntity(string $action, Request $request): object | ||||
|   | ||||
| @@ -24,11 +24,8 @@ use function random_int; | ||||
|  | ||||
| class LoadAsideActivity extends Fixture implements DependentFixtureInterface | ||||
| { | ||||
|     private UserRepository $userRepository; | ||||
|  | ||||
|     public function __construct(UserRepository $userRepository) | ||||
|     public function __construct(private readonly UserRepository $userRepository) | ||||
|     { | ||||
|         $this->userRepository = $userRepository; | ||||
|     } | ||||
|  | ||||
|     public function getDependencies(): array | ||||
|   | ||||
| @@ -25,8 +25,9 @@ class AsideActivityCategory | ||||
| { | ||||
|     /** | ||||
|      * @ORM\OneToMany(targetEntity=AsideActivityCategory::class, mappedBy="parent") | ||||
|      * @var Collection<AsideActivityCategory> | ||||
|      */ | ||||
|     private $children; | ||||
|     private Collection $children; | ||||
|  | ||||
|     /** | ||||
|      * @ORM\Id | ||||
| @@ -36,7 +37,6 @@ class AsideActivityCategory | ||||
|     private int $id; | ||||
|  | ||||
|     /** | ||||
|      * @ORM\OneToMany(targetEntity=AsideActivityCategory::class, mappedBy="parent") | ||||
|      * @ORM\Column(type="boolean") | ||||
|      */ | ||||
|     private bool $isActive = true; | ||||
| @@ -114,10 +114,8 @@ class AsideActivityCategory | ||||
|  | ||||
|     /** | ||||
|      * @Assert\Callback | ||||
|      * | ||||
|      * @param mixed $payload | ||||
|      */ | ||||
|     public function preventRecursiveParent(ExecutionContextInterface $context, $payload) | ||||
|     public function preventRecursiveParent(ExecutionContextInterface $context, mixed $payload) | ||||
|     { | ||||
|         if (!$this->hasParent()) { | ||||
|             return; | ||||
|   | ||||
| @@ -20,14 +20,10 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ByActivityTypeAggregator implements AggregatorInterface | ||||
| { | ||||
|     private AsideActivityCategoryRepository $asideActivityCategoryRepository; | ||||
|  | ||||
|     private TranslatableStringHelper $translatableStringHelper; | ||||
|  | ||||
|     public function __construct(AsideActivityCategoryRepository $asideActivityCategoryRepository, TranslatableStringHelper $translatableStringHelper) | ||||
|     { | ||||
|         $this->asideActivityCategoryRepository = $asideActivityCategoryRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     public function __construct( | ||||
|         private readonly AsideActivityCategoryRepository $asideActivityCategoryRepository, | ||||
|         private readonly TranslatableStringHelper $translatableStringHelper | ||||
|     ) { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -22,14 +22,8 @@ use function in_array; | ||||
|  | ||||
| class ByUserJobAggregator implements AggregatorInterface | ||||
| { | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     private UserJobRepositoryInterface $userJobRepository; | ||||
|  | ||||
|     public function __construct(UserJobRepositoryInterface $userJobRepository, TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     public function __construct(private readonly UserJobRepositoryInterface $userJobRepository, private readonly TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     { | ||||
|         $this->userJobRepository = $userJobRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -22,14 +22,8 @@ use function in_array; | ||||
|  | ||||
| class ByUserScopeAggregator implements AggregatorInterface | ||||
| { | ||||
|     private ScopeRepositoryInterface $scopeRepository; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct(ScopeRepositoryInterface $scopeRepository, TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     public function __construct(private readonly ScopeRepositoryInterface $scopeRepository, private readonly TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     { | ||||
|         $this->scopeRepository = $scopeRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -16,5 +16,5 @@ namespace Chill\AsideActivityBundle\Export; | ||||
|  */ | ||||
| abstract class Declarations | ||||
| { | ||||
|     public const ASIDE_ACTIVITY_TYPE = 'aside_activity'; | ||||
|     final public const ASIDE_ACTIVITY_TYPE = 'aside_activity'; | ||||
| } | ||||
|   | ||||
| @@ -23,12 +23,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class AvgAsideActivityDuration implements ExportInterface, GroupedExportInterface | ||||
| { | ||||
|     private AsideActivityRepository $repository; | ||||
|  | ||||
|     public function __construct( | ||||
|         AsideActivityRepository $repository | ||||
|     ) { | ||||
|         $this->repository = $repository; | ||||
|     public function __construct(private readonly AsideActivityRepository $repository) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder) | ||||
|   | ||||
| @@ -23,12 +23,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class CountAsideActivity implements ExportInterface, GroupedExportInterface | ||||
| { | ||||
|     private AsideActivityRepository $repository; | ||||
|  | ||||
|     public function __construct( | ||||
|         AsideActivityRepository $repository | ||||
|     ) { | ||||
|         $this->repository = $repository; | ||||
|     public function __construct(private readonly AsideActivityRepository $repository) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder) | ||||
|   | ||||
| @@ -32,42 +32,18 @@ use Doctrine\ORM\QueryBuilder; | ||||
| use LogicException; | ||||
| use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| final class ListAsideActivity implements ListInterface, GroupedExportInterface | ||||
| final readonly class ListAsideActivity implements ListInterface, GroupedExportInterface | ||||
| { | ||||
|     private AsideActivityCategoryRepository $asideActivityCategoryRepository; | ||||
|  | ||||
|     private CategoryRender $categoryRender; | ||||
|  | ||||
|     private CenterRepositoryInterface $centerRepository; | ||||
|  | ||||
|     private DateTimeHelper $dateTimeHelper; | ||||
|  | ||||
|     private EntityManagerInterface $em; | ||||
|  | ||||
|     private ScopeRepositoryInterface $scopeRepository; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     private UserHelper $userHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         EntityManagerInterface $em, | ||||
|         DateTimeHelper $dateTimeHelper, | ||||
|         UserHelper $userHelper, | ||||
|         ScopeRepositoryInterface $scopeRepository, | ||||
|         CenterRepositoryInterface $centerRepository, | ||||
|         AsideActivityCategoryRepository $asideActivityCategoryRepository, | ||||
|         CategoryRender $categoryRender, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper | ||||
|         private EntityManagerInterface $em, | ||||
|         private DateTimeHelper $dateTimeHelper, | ||||
|         private UserHelper $userHelper, | ||||
|         private ScopeRepositoryInterface $scopeRepository, | ||||
|         private CenterRepositoryInterface $centerRepository, | ||||
|         private AsideActivityCategoryRepository $asideActivityCategoryRepository, | ||||
|         private CategoryRender $categoryRender, | ||||
|         private TranslatableStringHelperInterface $translatableStringHelper | ||||
|     ) { | ||||
|         $this->em = $em; | ||||
|         $this->dateTimeHelper = $dateTimeHelper; | ||||
|         $this->userHelper = $userHelper; | ||||
|         $this->scopeRepository = $scopeRepository; | ||||
|         $this->centerRepository = $centerRepository; | ||||
|         $this->asideActivityCategoryRepository = $asideActivityCategoryRepository; | ||||
|         $this->categoryRender = $categoryRender; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder) | ||||
| @@ -95,86 +71,67 @@ final class ListAsideActivity implements ListInterface, GroupedExportInterface | ||||
|  | ||||
|     public function getLabels($key, array $values, $data) | ||||
|     { | ||||
|         switch ($key) { | ||||
|             case 'id': | ||||
|             case 'note': | ||||
|                 return static function ($value) use ($key) { | ||||
|                     if ('_header' === $value) { | ||||
|                         return 'export.aside_activity.' . $key; | ||||
|                     } | ||||
|         return match ($key) { | ||||
|             'id', 'note' => static function ($value) use ($key) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return 'export.aside_activity.' . $key; | ||||
|                 } | ||||
|  | ||||
|                     return $value ?? ''; | ||||
|                 }; | ||||
|                 return $value ?? ''; | ||||
|             }, | ||||
|             'duration' => static function ($value) use ($key) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return 'export.aside_activity.' . $key; | ||||
|                 } | ||||
|  | ||||
|             case 'duration': | ||||
|                 return static function ($value) use ($key) { | ||||
|                     if ('_header' === $value) { | ||||
|                         return 'export.aside_activity.' . $key; | ||||
|                     } | ||||
|                 if (null === $value) { | ||||
|                     return ''; | ||||
|                 } | ||||
|  | ||||
|                     if (null === $value) { | ||||
|                         return ''; | ||||
|                     } | ||||
|                 if ($value instanceof DateTimeInterface) { | ||||
|                     return $value->format('H:i:s'); | ||||
|                 } | ||||
|  | ||||
|                     if ($value instanceof DateTimeInterface) { | ||||
|                         return $value->format('H:i:s'); | ||||
|                     } | ||||
|                 return $value; | ||||
|             }, | ||||
|             'createdAt', 'updatedAt', 'date' => $this->dateTimeHelper->getLabel('export.aside_activity.' . $key), | ||||
|             'agent_id', 'creator_id' => $this->userHelper->getLabel($key, $values, 'export.aside_activity.' . $key), | ||||
|             'aside_activity_type' => function ($value) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return 'export.aside_activity.aside_activity_type'; | ||||
|                 } | ||||
|  | ||||
|                     return $value; | ||||
|                 }; | ||||
|                 if (null === $value || '' === $value || null === $c = $this->asideActivityCategoryRepository->find($value)) { | ||||
|                     return ''; | ||||
|                 } | ||||
|  | ||||
|             case 'createdAt': | ||||
|             case 'updatedAt': | ||||
|             case 'date': | ||||
|                 return $this->dateTimeHelper->getLabel('export.aside_activity.' . $key); | ||||
|                 return $this->categoryRender->renderString($c, []); | ||||
|             }, | ||||
|             'main_scope' => function ($value) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return 'export.aside_activity.main_scope'; | ||||
|                 } | ||||
|  | ||||
|             case 'agent_id': | ||||
|             case 'creator_id': | ||||
|                 return $this->userHelper->getLabel($key, $values, 'export.aside_activity.' . $key); | ||||
|                 if (null === $value || '' === $value || null === $c = $this->scopeRepository->find($value)) { | ||||
|                     return ''; | ||||
|                 } | ||||
|  | ||||
|             case 'aside_activity_type': | ||||
|                 return function ($value) { | ||||
|                     if ('_header' === $value) { | ||||
|                         return 'export.aside_activity.aside_activity_type'; | ||||
|                     } | ||||
|                 return $this->translatableStringHelper->localize($c->getName()); | ||||
|             }, | ||||
|             'main_center' => function ($value) { | ||||
|                 if ('_header' === $value) { | ||||
|                     return 'export.aside_activity.main_center'; | ||||
|                 } | ||||
|  | ||||
|                     if (null === $value || '' === $value || null === $c = $this->asideActivityCategoryRepository->find($value)) { | ||||
|                         return ''; | ||||
|                     } | ||||
|                 if (null === $value || '' === $value || null === $c = $this->centerRepository->find($value)) { | ||||
|                     /** @var Center $c */ | ||||
|                     return ''; | ||||
|                 } | ||||
|  | ||||
|                     return $this->categoryRender->renderString($c, []); | ||||
|                 }; | ||||
|  | ||||
|             case 'main_scope': | ||||
|                 return function ($value) { | ||||
|                     if ('_header' === $value) { | ||||
|                         return 'export.aside_activity.main_scope'; | ||||
|                     } | ||||
|  | ||||
|                     if (null === $value || '' === $value || null === $c = $this->scopeRepository->find($value)) { | ||||
|                         return ''; | ||||
|                     } | ||||
|  | ||||
|                     return $this->translatableStringHelper->localize($c->getName()); | ||||
|                 }; | ||||
|  | ||||
|             case 'main_center': | ||||
|                 return function ($value) { | ||||
|                     if ('_header' === $value) { | ||||
|                         return 'export.aside_activity.main_center'; | ||||
|                     } | ||||
|  | ||||
|                     if (null === $value || '' === $value || null === $c = $this->centerRepository->find($value)) { | ||||
|                         /** @var Center $c */ | ||||
|                         return ''; | ||||
|                     } | ||||
|  | ||||
|                     return $c->getName(); | ||||
|                 }; | ||||
|  | ||||
|             default: | ||||
|                 throw new LogicException('this key is not supported : ' . $key); | ||||
|         } | ||||
|                 return $c->getName(); | ||||
|             }, | ||||
|             default => throw new LogicException('this key is not supported : ' . $key), | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     public function getQueryKeys($data) | ||||
|   | ||||
| @@ -23,12 +23,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class SumAsideActivityDuration implements ExportInterface, GroupedExportInterface | ||||
| { | ||||
|     private AsideActivityRepository $repository; | ||||
|  | ||||
|     public function __construct( | ||||
|         AsideActivityRepository $repository | ||||
|     ) { | ||||
|         $this->repository = $repository; | ||||
|     public function __construct(private readonly AsideActivityRepository $repository) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder) | ||||
|   | ||||
| @@ -23,20 +23,11 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ByActivityTypeFilter implements FilterInterface | ||||
| { | ||||
|     private AsideActivityCategoryRepository $asideActivityTypeRepository; | ||||
|  | ||||
|     private CategoryRender $categoryRender; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         CategoryRender $categoryRender, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         AsideActivityCategoryRepository $asideActivityTypeRepository | ||||
|         private readonly CategoryRender $categoryRender, | ||||
|         private readonly TranslatableStringHelperInterface $translatableStringHelper, | ||||
|         private readonly AsideActivityCategoryRepository $asideActivityTypeRepository | ||||
|     ) { | ||||
|         $this->categoryRender = $categoryRender; | ||||
|         $this->asideActivityTypeRepository = $asideActivityTypeRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -26,16 +26,8 @@ use Symfony\Contracts\Translation\TranslatorInterface; | ||||
|  | ||||
| class ByDateFilter implements FilterInterface | ||||
| { | ||||
|     protected TranslatorInterface $translator; | ||||
|  | ||||
|     private RollingDateConverterInterface $rollingDateConverter; | ||||
|  | ||||
|     public function __construct( | ||||
|         RollingDateConverterInterface $rollingDateConverter, | ||||
|         TranslatorInterface $translator | ||||
|     ) { | ||||
|         $this->translator = $translator; | ||||
|         $this->rollingDateConverter = $rollingDateConverter; | ||||
|     public function __construct(private readonly RollingDateConverterInterface $rollingDateConverter, protected TranslatorInterface $translator) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -20,11 +20,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ByUserFilter implements FilterInterface | ||||
| { | ||||
|     private UserRender $userRender; | ||||
|  | ||||
|     public function __construct(UserRender $userRender) | ||||
|     public function __construct(private readonly UserRender $userRender) | ||||
|     { | ||||
|         $this->userRender = $userRender; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -22,11 +22,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ByUserJobFilter implements FilterInterface | ||||
| { | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct(TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     public function __construct(private readonly TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     { | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -23,16 +23,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| class ByUserScopeFilter implements FilterInterface | ||||
| { | ||||
|     private ScopeRepositoryInterface $scopeRepository; | ||||
|  | ||||
|     private TranslatableStringHelperInterface $translatableStringHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         ScopeRepositoryInterface $scopeRepository, | ||||
|         TranslatableStringHelperInterface $translatableStringHelper | ||||
|     ) { | ||||
|         $this->scopeRepository = $scopeRepository; | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|     public function __construct(private readonly ScopeRepositoryInterface $scopeRepository, private readonly TranslatableStringHelperInterface $translatableStringHelper) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function addRole(): ?string | ||||
|   | ||||
| @@ -22,12 +22,8 @@ use Symfony\Component\Form\FormBuilderInterface; | ||||
|  | ||||
| final class AsideActivityCategoryType extends AbstractType | ||||
| { | ||||
|     private CategoryRender $categoryRender; | ||||
|  | ||||
|     public function __construct( | ||||
|         CategoryRender $categoryRender | ||||
|     ) { | ||||
|         $this->categoryRender = $categoryRender; | ||||
|     public function __construct(private readonly CategoryRender $categoryRender) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder, array $options) | ||||
|   | ||||
| @@ -33,7 +33,7 @@ use function in_array; | ||||
|  | ||||
| final class AsideActivityFormType extends AbstractType | ||||
| { | ||||
|     private array $timeChoices; | ||||
|     private readonly array $timeChoices; | ||||
|  | ||||
|     public function __construct( | ||||
|         ParameterBagInterface $parameterBag, | ||||
| @@ -105,13 +105,7 @@ final class AsideActivityFormType extends AbstractType | ||||
|                     if (!in_array($data->getTimestamp(), $timeChoices, true)) { | ||||
|                         // the data are not in the possible values. add them | ||||
|                         $timeChoices[$data->format('H:i')] = $data->getTimestamp(); | ||||
|                         $form = $builder->create($fieldName, ChoiceType::class, array_merge( | ||||
|                             $durationTimeOptions, | ||||
|                             [ | ||||
|                                 'choices' => $timeChoices, | ||||
|                                 'auto_initialize' => false, | ||||
|                             ] | ||||
|                         )); | ||||
|                         $form = $builder->create($fieldName, ChoiceType::class, [...$durationTimeOptions, 'choices' => $timeChoices, 'auto_initialize' => false]); | ||||
|                         $form->addModelTransformer($durationTimeTransformer); | ||||
|                         $formEvent->getForm()->getParent()->add($form->getForm()); | ||||
|                     } | ||||
|   | ||||
| @@ -20,12 +20,8 @@ use Symfony\Component\OptionsResolver\OptionsResolver; | ||||
|  | ||||
| final class PickAsideActivityCategoryType extends AbstractType | ||||
| { | ||||
|     private CategoryRender $categoryRender; | ||||
|  | ||||
|     public function __construct( | ||||
|         CategoryRender $categoryRender | ||||
|     ) { | ||||
|         $this->categoryRender = $categoryRender; | ||||
|     public function __construct(private readonly CategoryRender $categoryRender) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function configureOptions(OptionsResolver $resolver) | ||||
|   | ||||
| @@ -14,13 +14,10 @@ namespace Chill\AsideActivityBundle\Menu; | ||||
| use Knp\Menu\MenuItem; | ||||
| use Symfony\Component\Security\Core\Security; | ||||
|  | ||||
| final class AdminMenuBuilder implements \Chill\MainBundle\Routing\LocalMenuBuilderInterface | ||||
| final readonly class AdminMenuBuilder implements \Chill\MainBundle\Routing\LocalMenuBuilderInterface | ||||
| { | ||||
|     private Security $security; | ||||
|  | ||||
|     public function __construct(Security $security) | ||||
|     public function __construct(private Security $security) | ||||
|     { | ||||
|         $this->security = $security; | ||||
|     } | ||||
|  | ||||
|     public function buildMenu($menuId, MenuItem $menu, array $parameters) | ||||
|   | ||||
| @@ -21,14 +21,8 @@ use Symfony\Contracts\Translation\TranslatorInterface; | ||||
|  */ | ||||
| class SectionMenuBuilder implements LocalMenuBuilderInterface | ||||
| { | ||||
|     public AuthorizationCheckerInterface $authorizationChecker; | ||||
|  | ||||
|     protected TranslatorInterface $translator; | ||||
|  | ||||
|     public function __construct(TranslatorInterface $translator, AuthorizationCheckerInterface $authorizationChecker) | ||||
|     public function __construct(protected TranslatorInterface $translator, public AuthorizationCheckerInterface $authorizationChecker) | ||||
|     { | ||||
|         $this->translator = $translator; | ||||
|         $this->authorizationChecker = $authorizationChecker; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -18,7 +18,7 @@ use Doctrine\Persistence\ObjectRepository; | ||||
|  | ||||
| class AsideActivityCategoryRepository implements ObjectRepository | ||||
| { | ||||
|     private EntityRepository $repository; | ||||
|     private readonly EntityRepository $repository; | ||||
|  | ||||
|     public function __construct(EntityManagerInterface $entityManager) | ||||
|     { | ||||
|   | ||||
| @@ -21,9 +21,9 @@ use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; | ||||
|  | ||||
| class AsideActivityVoter extends AbstractChillVoter implements ProvideRoleHierarchyInterface | ||||
| { | ||||
|     public const STATS = 'CHILL_ASIDE_ACTIVITY_STATS'; | ||||
|     final public const STATS = 'CHILL_ASIDE_ACTIVITY_STATS'; | ||||
|  | ||||
|     private VoterHelperInterface $voterHelper; | ||||
|     private readonly VoterHelperInterface $voterHelper; | ||||
|  | ||||
|     public function __construct( | ||||
|         VoterHelperFactoryInterface $voterHelperFactory | ||||
|   | ||||
| @@ -19,7 +19,7 @@ use Symfony\Component\Templating\EngineInterface; | ||||
| /** | ||||
|  * @implements ChillEntityRenderInterface<AsideActivityCategory> | ||||
|  */ | ||||
| final class CategoryRender implements ChillEntityRenderInterface | ||||
| final readonly class CategoryRender implements ChillEntityRenderInterface | ||||
| { | ||||
|     public const DEFAULT_ARGS = [ | ||||
|         self::SEPERATOR_KEY => ' > ', | ||||
| @@ -27,14 +27,8 @@ final class CategoryRender implements ChillEntityRenderInterface | ||||
|  | ||||
|     public const SEPERATOR_KEY = 'default.separator'; | ||||
|  | ||||
|     private EngineInterface $engine; | ||||
|  | ||||
|     private TranslatableStringHelper $translatableStringHelper; | ||||
|  | ||||
|     public function __construct(TranslatableStringHelper $translatableStringHelper, EngineInterface $engine) | ||||
|     public function __construct(private TranslatableStringHelper $translatableStringHelper, private EngineInterface $engine) | ||||
|     { | ||||
|         $this->translatableStringHelper = $translatableStringHelper; | ||||
|         $this->engine = $engine; | ||||
|     } | ||||
|  | ||||
|     public function buildParents(AsideActivityCategory $asideActivityCategory) | ||||
|   | ||||
| @@ -13,11 +13,11 @@ namespace Chill\BudgetBundle\Calculator; | ||||
|  | ||||
| class CalculatorResult | ||||
| { | ||||
|     public const TYPE_CURRENCY = 'currency'; | ||||
|     final public const TYPE_CURRENCY = 'currency'; | ||||
|  | ||||
|     public const TYPE_PERCENTAGE = 'percentage'; | ||||
|     final public const TYPE_PERCENTAGE = 'percentage'; | ||||
|  | ||||
|     public const TYPE_RATE = 'rate'; | ||||
|     final public const TYPE_RATE = 'rate'; | ||||
|  | ||||
|     public $label; | ||||
|  | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user