<?php
namespace Plugin\Holiday\EventSubscriber;
use Plugin\Holiday\Repository\HolidayRepository;
use Plugin\Holiday\Repository\HolidayConfigRepository;
use Plugin\Holiday\Repository\HolidayWeekRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Twig\Environment;
class HolidayEventSubscriber implements EventSubscriberInterface
{
/**
* @var Environment
*/
private $twig;
/**
* @var HolidayRepository
*/
private $holidayRepository;
/**
* @var HolidayConfigRepository
*/
private $holidayConfigRepository;
/**
* @var HolidayWeekRepository
*/
private $holidayWeekRepository;
public function __construct(
Environment $twig,
HolidayRepository $holidayRepository,
HolidayConfigRepository $holidayConfigRepository,
HolidayWeekRepository $holidayWeekRepository
) {
$this->twig = $twig;
$this->holidayRepository = $holidayRepository;
$this->holidayConfigRepository = $holidayConfigRepository;
$this->holidayWeekRepository = $holidayWeekRepository;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => ['onRenderHoliday', 0],
];
}
public function onRenderHoliday(RequestEvent $event)
{
if (!$event->isMainRequest()) {
return;
}
// HolidayConfig の取得
$HolidayConfigData = $this->holidayConfigRepository->findConfig(1);
$configData = !empty($HolidayConfigData) ? (int) $HolidayConfigData[0]['config_data'] : 3;
// HolidayWeek の取得
$HolidayWeekData = $this->holidayWeekRepository->findWeek(1);
$weekData = [];
if (!empty($HolidayWeekData) && !empty($HolidayWeekData[0]['week'])) {
$weekData = unserialize($HolidayWeekData[0]['week']);
if (!is_array($weekData)) {
$weekData = [];
}
}
// 月毎の定休日情報の取得
$Holidays = [];
$GetHolidayWeekCount = [];
for ($i = 0; $i < $configData; $i++) {
$GetHolidays = $this->holidayRepository->findMonthDay($i);
$GetHolidayWeekCount[date('n', mktime(0, 0, 0, date("m") + $i, 1, date("Y")))] = $this->holidayRepository->getMonthWeekCount($i);
foreach ($GetHolidays as $holiday) {
$Holidays[$holiday['month']][$holiday['day']] = $holiday['day'];
}
}
// 曜日毎の定休日設定情報の取得
$HolidayWeek = [];
for ($i = 0; $i <= 6; $i++) {
$HolidayWeek[$i] = in_array($i, $weekData);
}
// Twigグローバル変数として設定
$this->twig->addGlobal('Holidays', $Holidays);
$this->twig->addGlobal('HolidayWeekCount', $GetHolidayWeekCount);
$this->twig->addGlobal('HolidayWeek', $HolidayWeek);
$this->twig->addGlobal('HolidayConfig', [['config_data' => $configData]]);
}
}