|
|
@@ -19,6 +19,15 @@ use Doctrine\ORM\Query\FilterCollection;
|
|
|
*/
|
|
|
class FiltersConfigurationService
|
|
|
{
|
|
|
+ /**
|
|
|
+ * L'état du des filtres de contrainte de temps avant l'utilisation de la méthode suspendTimeConstraintFilters()
|
|
|
+ * Si $previousTimeConstraintState est `true`, les filtres étaient activés, et si c'est `false`, les filtres
|
|
|
+ * étaient désactivés. Si les filtres ne sont pas suspendus, $previousTimeConstraintState est null.
|
|
|
+ *
|
|
|
+ * @var bool|null
|
|
|
+ */
|
|
|
+ private ?bool $previousTimeConstraintState = null;
|
|
|
+
|
|
|
public function __construct(
|
|
|
private EntityManagerInterface $entityManager,
|
|
|
private DateTimeConstraint $dateTimeConstraint,
|
|
|
@@ -50,4 +59,55 @@ class FiltersConfigurationService
|
|
|
$activityYearFilter->setAccessId($accessId);
|
|
|
$activityYearFilter->setTimeConstraint($this->activityYearConstraint);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Suspends les contraintes de temps. Celles-ci pourront être restorées grâce à la méthode
|
|
|
+ * restoreTimeConstraintFilters().
|
|
|
+ *
|
|
|
+ * @see src/Filter/Doctrine/TimeConstraint/AbstractTimeFilter.php
|
|
|
+ *
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function suspendTimeConstraintFilters(): void {
|
|
|
+ if ($this->previousTimeConstraintState !== null) {
|
|
|
+ throw new \RuntimeException("date_time_filter is already suspended");
|
|
|
+ }
|
|
|
+
|
|
|
+ $filters = $this->entityManager->getFilters();
|
|
|
+
|
|
|
+ if (!$filters->isEnabled('date_time_filter')) {
|
|
|
+ $this->previousTimeConstraintState = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /** @var AbstractTimeFilter $filter */
|
|
|
+ $filter = $filters->getFilter('date_time_filter');
|
|
|
+
|
|
|
+ $this->previousTimeConstraintState = $filter->isDisabled() === false;
|
|
|
+ $filter->setDisabled(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Restore les contraintes de temps après qu'elles aient été suspendues au moyen de la
|
|
|
+ * méthode suspendTimeConstraintFilters()
|
|
|
+ *
|
|
|
+ * @see src/Filter/Doctrine/TimeConstraint/AbstractTimeFilter.php
|
|
|
+ *
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function restoreTimeConstraintFilters(): void {
|
|
|
+ if ($this->previousTimeConstraintState === null) {
|
|
|
+ throw new \RuntimeException("date_time_filter has not been suspended, can not be restored");
|
|
|
+ }
|
|
|
+
|
|
|
+ $filters = $this->entityManager->getFilters();
|
|
|
+
|
|
|
+ if ($filters->isEnabled('date_time_filter')) {
|
|
|
+ /** @var AbstractTimeFilter $filter */
|
|
|
+ $filter = $filters->getFilter('date_time_filter');
|
|
|
+ $filter->setDisabled($this->previousTimeConstraintState);
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->previousTimeConstraintState = null;
|
|
|
+ }
|
|
|
}
|