diff --git a/config/services.yaml b/config/services.yaml index fd968d79..c273e511 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -65,6 +65,9 @@ services: App\Validator\Constraints\TimesheetValidator: arguments: [!tagged timesheet.validator] + App\Validator\Constraints\ProjectValidator: + arguments: [!tagged project.validator] + App\Validator\Constraints\QuickEntryTimesheetValidator: arguments: [!tagged timesheet.validator] diff --git a/src/Kernel.php b/src/Kernel.php index 9a3cd60d..b0e90cf9 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -27,6 +27,7 @@ use App\Saml\Security\SamlFactory; use App\Timesheet\CalculatorInterface as TimesheetCalculator; use App\Timesheet\Rounding\RoundingInterface; use App\Timesheet\TrackingMode\TrackingModeInterface; +use App\Validator\Constraints\ProjectConstraint; use App\Validator\Constraints\TimesheetConstraint; use App\Widget\WidgetInterface; use App\Widget\WidgetRendererInterface; @@ -60,6 +61,7 @@ class Kernel extends BaseKernel public const TAG_TIMESHEET_EXPORTER = 'timesheet.exporter'; public const TAG_TIMESHEET_TRACKING_MODE = 'timesheet.tracking_mode'; public const TAG_TIMESHEET_ROUNDING_MODE = 'timesheet.rounding_mode'; + public const TAG_PROJECT_VALIDATOR = 'project.validator'; public function getCacheDir() { @@ -87,6 +89,7 @@ class Kernel extends BaseKernel $container->registerForAutoconfiguration(TrackingModeInterface::class)->addTag(self::TAG_TIMESHEET_TRACKING_MODE); $container->registerForAutoconfiguration(RoundingInterface::class)->addTag(self::TAG_TIMESHEET_ROUNDING_MODE); $container->registerForAutoconfiguration(TimesheetConstraint::class)->addTag(self::TAG_TIMESHEET_VALIDATOR); + $container->registerForAutoconfiguration(ProjectConstraint::class)->addTag(self::TAG_PROJECT_VALIDATOR); /** @var SecurityExtension $extension */ $extension = $container->getExtension('security'); diff --git a/src/Validator/Constraints/ProjectConstraint.php b/src/Validator/Constraints/ProjectConstraint.php new file mode 100644 index 00000000..ef7c5795 --- /dev/null +++ b/src/Validator/Constraints/ProjectConstraint.php @@ -0,0 +1,19 @@ +constraints = $constraints; + } + /** * @param Project|mixed $value * @param Constraint $constraint @@ -33,6 +46,13 @@ class ProjectValidator extends ConstraintValidator } $this->validateProject($value, $this->context); + + foreach ($this->constraints as $constraint) { + $this->context + ->getValidator() + ->inContext($this->context) + ->validate($value, $constraint, [Constraint::DEFAULT_GROUP]); + } } protected function validateProject(Project $project, ExecutionContextInterface $context)