getDesactivateOpentalentSiteWeb() === true && $this->networkUtils->isCMFAndActiveNow($parameters->getOrganization()) ) { throw new \RuntimeException('This structure is currently active in the CMF network, the website can not be disabled.'); } } /** * @param Parameters $parameters * * @throws \Exception * * @noinspection PhpParameterNameChangedDuringInheritanceInspection */ public function beforeChange($parameters, OnChangeContext $context): void { // Le type de notation a changé if ( $context->previousData() && $context->previousData()->getAdvancedEducationNotationType() !== $parameters->getAdvancedEducationNotationType() ) { $this->onAdvancedEducationNotationTypeChange($parameters); } // La date de début d'activité change if ( $context->previousData() && $context->previousData()->getMusicalDate() !== $parameters->getMusicalDate() ) { $this->onMusicalDateChange( $parameters, $context->previousData()->getMusicalDate() ); } } /** * @param Parameters $parameters * * @noinspection PhpParameterNameChangedDuringInheritanceInspection */ public function onChange($parameters, OnChangeContext $context): void { // Le customDomain a été modifié, on met à jour le site typo3 (s'il est actif) if ( $context->previousData() && !$parameters->getDesactivateOpentalentSiteWeb() && $context->previousData()->getCustomDomain() !== $parameters->getCustomDomain() ) { $this->messageBus->dispatch( new Typo3Update($parameters->getOrganization()->getId()) ); } // Le site web opentalent a été désactivé / réactivé if ( $context->previousData() && $context->previousData()->getDesactivateOpentalentSiteWeb() !== $parameters->getDesactivateOpentalentSiteWeb() ) { if ($parameters->getDesactivateOpentalentSiteWeb()) { $this->messageBus->dispatch( new Typo3Delete($parameters->getOrganization()->getId()) ); } else { $this->messageBus->dispatch( new Typo3Undelete($parameters->getOrganization()->getId()) ); $this->messageBus->dispatch( new Typo3Update($parameters->getOrganization()->getId()) ); } } } /** * Si le type de grilles d'évaluation évolue, il faut "nettoyer" les curriculums/teachers associés au type précédent. * * @see OnParametersChangeTest::testOnAdvancedEducationNotationTypeByTeachersChange() * @see OnParametersChangeTest::testOnAdvancedEducationNotationTypeByEducationChange() */ public function onAdvancedEducationNotationTypeChange(Parameters $parameters): void { foreach ($parameters->getOrganization()->getEducationNotationConfigs() as $educationNotationConfig) { /* @var EducationNotationConfig $educationNotationConfig */ if ($parameters->getAdvancedEducationNotationType() === AdvancedEducationNotationTypeEnum::BY_TEACHER) { foreach ($educationNotationConfig->getEducationCurriculums() as $educationCurriculum) { $educationCurriculum->setEducationNotationConfig(null); } } else { foreach ($educationNotationConfig->getTeachers() as $teacher) { $teacher->setEducationNotationConfig(null); } } } } /** * Permet de mettre à jour l'année de début des cours concernés suivant la date * de l'activité musicale qui vient d'être changée. * * @throws \Exception * * @see OnParametersChangeTest::testOnMusicalDateChange() */ public function onMusicalDateChange(Parameters $parameters, \DateTimeInterface $previousMusicalDate): void { $currentMusicalDate = $parameters->getMusicalDate(); if ($previousMusicalDate > $currentMusicalDate) { $lowerDate = $currentMusicalDate; $higherDate = $previousMusicalDate; } else { $lowerDate = $previousMusicalDate; $higherDate = $currentMusicalDate; } $startDate = new \DateTime(date('Y').'-'.$lowerDate->format('m-d')); $endDate = new \DateTime(date('Y').'-'.$higherDate->format('m-d')); $coursesToUpdate = $this->courseRepository->getCoursesToFrom($parameters->getOrganization(), $startDate, $endDate); /** @var Course $course */ foreach ($coursesToUpdate as $course) { $year = $this->organizationUtils->getActivityYearSwitchDate($parameters->getOrganization(), $course->getDatetimeStart()); $course->setStartYear($year); $course->setEndYear($year + 1); } } }