insertTagParser = $insertTagParser; } protected function getResponse(Template $template, ModuleModel $model, Request $request): ?Response { global $objPage; Controller::loadDataContainer('tl_vr_wa_slot'); $GLOBALS['TL_CSS']['vr_wa'] = 'bundles/vonrotenbergweinanlieferung/css/frontend.scss|static'; $standortIds = StringUtil::deserialize($model->vr_wa_standortId); $arrData = $template->getData(); $arrOptions = []; // Add filter values if (!empty($_GET['filter_kapazitaet'])) { $arrData['filter']['kapazitaet']['selected'] = $_GET['filter_kapazitaet']; $arrOptions['column'][] = '(SELECT tl_vr_wa_slot.behaelter - IFNULL(SUM(tl_vr_wa_reservation.behaelter),0) FROM tl_vr_wa_reservation WHERE tl_vr_wa_reservation.pid = tl_vr_wa_slot.id) >= ?'; $arrOptions['value'][] = $_GET['filter_kapazitaet']; } if (!empty($_GET['filter_standort'])) { $arrData['filter']['standort']['selected'] = $_GET['filter_standort']; $arrOptions['column'][] = 'pid = ?'; $arrOptions['value'][] = $_GET['filter_standort']; } if (!empty($_GET['filter_ernteart'])) { $arrData['filter']['ernteart']['selected'] = $_GET['filter_ernteart']; $arrOptions['column'][] = 'FIND_IN_SET (?,ernteart)'; $arrOptions['value'][] = $_GET['filter_ernteart']; } if (!empty($_GET['filter_sorte']) && !empty($_GET['filter_leseart'])) { $arrData['filter']['sorte']['selected'] = $_GET['filter_sorte']; $arrData['filter']['leseart']['selected'] = $_GET['filter_leseart']; $arrOptions['column'][] = "sorten REGEXP('\"sorte\";s:[0-9]+:\"" . intval($_GET['filter_sorte']) . "\"[^\}]+\"leseart\";s:[0-9]+:\"" . intval($_GET['filter_leseart']) . "\"')"; } else { if (!empty($_GET['filter_sorte'])) { $arrData['filter']['sorte']['selected'] = $_GET['filter_sorte']; $arrOptions['column'][] = "sorten REGEXP('\"sorte\";s:[0-9]+:\"" . intval($_GET['filter_sorte']) . "\"')"; } if (!empty($_GET['filter_leseart'])) { $arrData['filter']['leseart']['selected'] = $_GET['filter_leseart']; $arrOptions['column'][] = "sorten REGEXP('\"leseart\";s:[0-9]+:\"" . intval($_GET['filter_leseart']) . "\"')"; } } $arrData['filter']['kapazitaet']['options'] = range(1,30); if (($Standorte = WeinanlieferungStandortModel::findBy(["id IN (".implode(',',$standortIds).")"],null,['order'=>'title ASC'])) !== null) { $arrData['filter']['standort']['options'] = array_combine($Standorte->fetchEach('id'),$Standorte->fetchEach('title')); } if (isset($GLOBALS['TL_DCA']['tl_vr_wa_slot']['fields']['ernteart']['options'])) { foreach ($GLOBALS['TL_DCA']['tl_vr_wa_slot']['fields']['ernteart']['options'] as $ernteart) { $arrData['filter']['ernteart']['options'][$ernteart] = $GLOBALS['TL_LANG']['REF']['wa_ernteart'][$ernteart] ?? $ernteart; } } if (($Sorten = WeinanlieferungRebsorteModel::findAll(['order'=>'title ASC'])) !== null) { $arrData['filter']['sorte']['options'] = array_combine($Sorten->fetchEach('id'),$Sorten->fetchEach('title')); } if (($Leseart = WeinanlieferungLeseartModel::findAll(['order'=>'title ASC'])) !== null) { $arrData['filter']['leseart']['options'] = array_combine($Leseart->fetchEach('id'),$Leseart->fetchEach('title')); } // Get available slots if (($slots = WeinanlieferungSlotsModel::findMultiplePublishedByPids($standortIds,$arrOptions)) !== null) { /** @var WeinanlieferungSlotsModel $slot */ foreach ($slots as $slot) { $day = new Date($slot->date); $arrSorten = []; $arrErnteart = []; $intAvailableBehaelter = max(0,$slot->getAvailableBehaelter()); $Sorten = StringUtil::deserialize($slot->sorten, true); foreach ($Sorten as $sorte) { $objSorte = WeinanlieferungRebsorteModel::findByPk($sorte['sorte']); $objLeseart = WeinanlieferungLeseartModel::findByPk($sorte['leseart']); $arrSorten[] = ($objSorte !== null ? $objSorte->title : '') . ' ' . ($objLeseart !== null ? $objLeseart->title : ''); } if ($slot->ernteart !== null) { foreach (explode(',', $slot->ernteart) as $ernteart) { $arrErnteart[] = $GLOBALS['TL_LANG']['REF']['wa_ernteart'][$ernteart] ?? $ernteart; } } $strStandort = ''; if (($Standort = $slot->getRelated('pid')) !== null) { $strStandort = $Standort->title; } $arrLage = []; if (($Lage = $slot->getRelated('lage')) !== null) { $arrLage = $Lage->fetchEach('title'); } $arrData['days'][$day->dayBegin][] = array_merge($slot->row(),[ 'anmerkungen' => $slot->anmerkungen ? StringUtil::substr(strip_tags($slot->anmerkungen),110) : '', 'standort' => $strStandort, 'lage' => $arrLage, 'sorte' => $arrSorten, 'ernteart' => $arrErnteart, 'behaelterAvailable' => $intAvailableBehaelter, 'buchbar' => (boolean) $intAvailableBehaelter, 'gebucht' => (boolean) WeinanlieferungReservationModel::countBy(["uid = ?","pid = ?"],[FrontendUser::getInstance()->id,$slot->id]) ]); } } // Add page URL if ($objPage instanceof PageModel) { $arrData['pageUrl'] = $objPage->getFrontendUrl(); } $template->setData($arrData); // Handle ajax if ($request->headers->get('VR-Ajax') == 'WaSlotsModule') { throw new ResponseException(new Response($this->insertTagParser->replace($template->parse()))); } return $template->getResponse(); } }