<?php declare(strict_types=1); /* * This file is part of contao-weinanlieferung-bundle. * * (c) vonRotenberg * * @license commercial */ namespace vonRotenberg\WeinanlieferungBundle\Controller\Backend; use Contao\Config; use Contao\CoreBundle\Controller\AbstractController; use Contao\CoreBundle\Csrf\ContaoCsrfTokenManager; use Contao\Date; use Contao\Environment; use Contao\FrontendUser; use Contao\Image; use Contao\Input; use Contao\SelectMenu; use Contao\StringUtil; use Contao\System; use Contao\TextField; use Contao\Widget; use Doctrine\DBAL\Connection; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Twig\Environment as TwigEnvironment; use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungLeseartModel; use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungRebsorteModel; use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungReservationModel; use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungSlotsModel; /** * @Route("%contao.backend.route_prefix%/weinanlieferung/slotassistant", name=self::class, defaults={"_scope" = "backend"}) */ class WeinanlieferungSlotAssistantController extends AbstractController { private $twig; private $tokenManager; private $request; private $db; protected $fields; public function __construct(TwigEnvironment $twig, ContaoCsrfTokenManager $tokenManager, RequestStack $requestStack, Connection $db) { $this->twig = $twig; $this->tokenManager = $tokenManager; $this->request = $requestStack->getCurrentRequest(); $this->db = $db; $container = System::getContainer(); $objSession = $container->get('session'); $strKey = Input::get('popup') ? 'popupReferer' : 'referer'; $strRefererId = $this->request->attributes->get('_contao_referer_id'); $session = $objSession->get($strKey); $session[$strRefererId]['current'] = substr(Environment::get('requestUri'), \strlen(Environment::get('path')) + 1); $objSession->set($strKey, $session); } public function __invoke(): Response { $GLOBALS['TL_CSS']['cirrus'] = 'bundles/vonrotenbergweinanlieferung/css/backend.css|static'; $arrData = [ 'request_token' => $this->tokenManager->getDefaultTokenValue(), 'ref' => $this->request->attributes->get('_contao_referer_id') ]; System::loadLanguageFile('default'); // dump($this->getWidgets()); $arrData['fields'] = $this->getWidgets(); return new Response( $this->twig->render( '@Contao_VonrotenbergWeinanlieferungBundle/be_wa_slotassistant.html.twig', $arrData ) ); } protected function getWidgets() { if (!empty($this->fields)) { return $this->fields; } $arrWidgets = [ 'base_legend' => [ [ 'class' => 'w50', 'help' => 'Legen Sie hier den Zeitslot-Typ/Annahmestelle fest.', 'widget' => new SelectMenu([ 'name' => 'slotType', 'mandatory' => true, 'options' => [ ['value' => 'eins', 'label' => 'eins'], ['value' => 'zwei', 'label' => 'zwei'] ], 'label' => 'Zeitslot-Typ' ]) ], [ 'class' => 'w50', 'help' => 'Die Pufferzeit zwischen den Slots.', 'widget' => new TextField([ 'name' => 'buffer', 'mandatory' => true, 'label' => 'Pufferzeit in min.', 'rgxp' => 'natural' ]) ] ], 'time_legend' => [ [ 'class' => 'w50 wizard', 'help' => 'Zeitslot-Typ/Annahmestelle fest.', 'widget' => new TextField([ 'name' => 'date_start[1]', 'mandatory' => true, 'label' => 'Pufferzeit in min.', 'rgxp' => 'datim', 'datepicker' => true, ]) ] ] ]; foreach ($arrWidgets as $group => $fields) { foreach ($fields as $field) { if (empty($field['widget']->id)) { $field['widget']->id = $field['widget']->name; } $wizard = ''; // Date picker if ($field['widget']->datepicker ?? null) { $rgxp = $field['widget']->rgxp ?? 'date'; $format = Date::formatToJs(Config::get($rgxp . 'Format')); switch ($rgxp) { case 'datim': $time = ",\n timePicker: true"; break; case 'time': $time = ",\n pickOnly: \"time\""; break; default: $time = ''; break; } $strOnSelect = ''; // Trigger the auto-submit function (see #8603) if ($field['widget']->submitOnChange ?? null) { $strOnSelect = ",\n onSelect: function() { Backend.autoSubmit(\"wa_slotassistant\"); }"; } $wizard .= ' ' . Image::getHtml('assets/datepicker/images/icon.svg', '', 'title="' . StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['datepicker']) . '" id="toggle_' . $field['widget']->id . '" style="cursor:pointer"') . ' <script> window.addEvent("domready", function() { new Picker.Date($("ctrl_' . $field['widget']->id . '"), { draggable: false, toggle: $("toggle_' . $field['widget']->id . '"), format: "' . $format . '", positionOffset: {x:-211,y:-209}' . $time . ', pickerClass: "datepicker_bootstrap", useFadeInOut: !Browser.ie' . $strOnSelect . ', startDay: ' . $GLOBALS['TL_LANG']['MSC']['weekOffset'] . ', titleFormat: "' . $GLOBALS['TL_LANG']['MSC']['titleFormat'] . '" }); }); </script>'; $field['widget']->wizard = $wizard; } if (Input::post('FORM_SUBMIT') == 'wa_slotassistant') { dump($field['widget']->validate()); } } } $this->fields = $arrWidgets; return $this->fields; } }