diff --git a/src/Calendar/CalendarService.php b/src/Calendar/CalendarService.php index 2f6126b4..cdf86088 100644 --- a/src/Calendar/CalendarService.php +++ b/src/Calendar/CalendarService.php @@ -11,6 +11,7 @@ namespace App\Calendar; use App\Configuration\SystemConfiguration; use App\Entity\User; +use App\Event\CalendarConfigurationEvent; use App\Event\CalendarDragAndDropSourceEvent; use App\Event\CalendarGoogleSourceEvent; use App\Event\RecentActivityEvent; @@ -99,4 +100,24 @@ final class CalendarService return new Google($apiKey, $sources); } + + public function getConfiguration(): array + { + $config = [ + 'dayLimit' => $this->configuration->getCalendarDayLimit(), + 'showWeekNumbers' => $this->configuration->isCalendarShowWeekNumbers(), + 'showWeekends' => $this->configuration->isCalendarShowWeekends(), + 'businessDays' => $this->configuration->getCalendarBusinessDays(), + 'businessTimeBegin' => $this->configuration->getCalendarBusinessTimeBegin(), + 'businessTimeEnd' => $this->configuration->getCalendarBusinessTimeEnd(), + 'slotDuration' => $this->configuration->getCalendarSlotDuration(), + 'timeframeBegin' => $this->configuration->getCalendarTimeframeBegin(), + 'timeframeEnd' => $this->configuration->getCalendarTimeframeEnd(), + 'dragDropAmount' => $this->configuration->getCalendarDragAndDropMaxEntries(), + ]; + $event = new CalendarConfigurationEvent($config); + $this->dispatcher->dispatch($event); + + return $event->getConfiguration(); + } } diff --git a/src/Controller/CalendarController.php b/src/Controller/CalendarController.php index 5fa1bec5..b484a8f7 100644 --- a/src/Controller/CalendarController.php +++ b/src/Controller/CalendarController.php @@ -39,18 +39,7 @@ class CalendarController extends AbstractController $factory = $this->getDateTimeFactory(); $defaultStart = $factory->createDateTime($configuration->getTimesheetDefaultBeginTime()); - $config = [ - 'dayLimit' => $configuration->getCalendarDayLimit(), - 'showWeekNumbers' => $configuration->isCalendarShowWeekNumbers(), - 'showWeekends' => $configuration->isCalendarShowWeekends(), - 'businessDays' => $configuration->getCalendarBusinessDays(), - 'businessTimeBegin' => $configuration->getCalendarBusinessTimeBegin(), - 'businessTimeEnd' => $configuration->getCalendarBusinessTimeEnd(), - 'slotDuration' => $configuration->getCalendarSlotDuration(), - 'timeframeBegin' => $configuration->getCalendarTimeframeBegin(), - 'timeframeEnd' => $configuration->getCalendarTimeframeEnd(), - 'dragDropAmount' => $configuration->getCalendarDragAndDropMaxEntries(), - ]; + $config = $this->calendarService->getConfiguration(); $isPunchMode = !$mode->canEditDuration() && !$mode->canEditBegin() && !$mode->canEditEnd(); $dragAndDrop = []; diff --git a/src/Event/CalendarConfigurationEvent.php b/src/Event/CalendarConfigurationEvent.php new file mode 100644 index 00000000..019e2202 --- /dev/null +++ b/src/Event/CalendarConfigurationEvent.php @@ -0,0 +1,39 @@ + + */ + private $configuration; + + public function __construct(array $configuration) + { + $this->configuration = $configuration; + } + + public function getConfiguration(): array + { + return $this->configuration; + } + + public function setConfiguration(array $configuration) + { + foreach ($configuration as $key => $value) { + if (\array_key_exists($key, $this->configuration)) { + $this->configuration[$key] = $value; + } + } + } +} diff --git a/tests/Event/CalendarConfigurationEventTest.php b/tests/Event/CalendarConfigurationEventTest.php new file mode 100644 index 00000000..594716fa --- /dev/null +++ b/tests/Event/CalendarConfigurationEventTest.php @@ -0,0 +1,37 @@ + 'b', + 'c' => 1, + 'd' => false, + ]; + $sut = new CalendarConfigurationEvent($configuration); + + self::assertSame($configuration, $sut->getConfiguration()); + + $new_configuration = ['a' => 'new_value'] + $configuration + ['e' => 'should_not_be_set']; + $sut->setConfiguration($new_configuration); + + unset($new_configuration['e']); + self::assertSame($new_configuration, $sut->getConfiguration()); + } +}