<?php declare(strict_types=1); namespace vonRotenberg\CoretoolsBundle\Controller\ContentElement; use Contao\ContentModel; use Contao\CoreBundle\Controller\ContentElement\AbstractContentElementController; use Contao\CoreBundle\DependencyInjection\Attribute\AsContentElement; use Contao\CoreBundle\Twig\FragmentTemplate; use Contao\FilesModel; use Contao\System; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; #[AsContentElement(category: 'miscellaneous', nestedFragments: true)] class BackgroundWrapperController extends AbstractContentElementController { protected function getResponse(FragmentTemplate $template, ContentModel $model, Request $request): Response { $GLOBALS['TL_CSS']['vr_coretools'] = 'bundles/vonrotenbergcoretools/css/background-wrapper.min.css|static'; $arrData = array_merge($template->getData(),[ 'element_css_classes' => trim($template->element_css_classes . ' ' . $this->getWrapperClasses($model)) ]); if ($model->vr_bw_addImage) { $objFile = FilesModel::findByUuid($model->vr_bw_bgSRC); if ($objFile !== null && is_file(System::getContainer()->getParameter('kernel.project_dir') . '/' . $objFile->path)) { if (!in_array($objFile->extension,['mp4', 'm4v', 'mov', 'wmv', 'webm', 'ogv'])) { $figure = System::getContainer() ->get('contao.image.studio') ->createFigureBuilder() ->from($objFile) ->setSize($model->size) ->buildIfResourceExists(); if ($figure !== null && $model->vr_bw_minHeight === '-mh-bgimage') { $imageData = $figure->getImage()->getPicture()->getImg(); $ratio = round(100 / $imageData['width'] * $imageData['height'],3); $arrData['minHeight_ratio'] = $ratio; } $arrData['background_figure'] = $figure; } else { $arrData['background_video'] = [ 'path' => System::getContainer()->get('contao.assets.files_context')->getStaticUrl() . $objFile->path, 'extension' => $objFile->extension ]; } } } $template->setData($arrData); return $template->getResponse(); } /** * @param ContentModel $model * * @return string */ protected function getWrapperClasses(ContentModel $model): string { $arrCssClasses = []; // Add background image classes if ($model->vr_bw_addImage) { if (!empty($model->vr_bw_bgSize)) { $arrCssClasses[] = $model->vr_bw_bgSize; } if (!empty($model->vr_bw_bgPos)) { $arrCssClasses[] = $model->vr_bw_bgPos; } if (!empty($model->vr_bw_bgOpacity)) { $arrCssClasses[] = $model->vr_bw_bgOpacity; } } if ($model->vr_bw_bgBesideContent) { $arrCssClasses[] = '-bg-beside-content'; if (!empty($model->vr_bw_bgHorizontalPosition)) { $arrCssClasses[] = $model->vr_bw_bgHorizontalPosition; } /*if (!empty($model->vr_bw_bgHorizontalWidth)) { $arrCssClasses[] = $model->vr_bw_bgHorizontalWidth; }*/ } if (!empty($model->vr_bw_bgColor)) { $arrCssClasses[] = $model->vr_bw_bgColor; } if ($model->vr_bw_bgWidthRestriction) { $arrCssClasses[] = '-bg-width-restrict'; } // Add content area classes if (!empty($model->vr_bw_width)) { $arrCssClasses[] = $model->vr_bw_width; } if (!empty($model->vr_bw_minHeight)) { $arrCssClasses[] = $model->vr_bw_minHeight; if ($model->vr_bw_minHeight == '-mh-vh' && !empty($model->vr_bw_mh_viewport)) { $arrCssClasses[] = $model->vr_bw_mh_viewport; } if ($model->vr_bw_minHeight == '-mh-ratio' && !empty($model->vr_bw_mh_ratio)) { $arrCssClasses[] = $model->vr_bw_mh_ratio; } } if (!empty($model->vr_bw_vAlign)) { $arrCssClasses[] = $model->vr_bw_vAlign; } if ($model->vr_bw_colorInvert) { $arrCssClasses[] = '-color-inverted'; } if ( in_array($model->vr_bw_width,['-width-extended','-width-default-left','-width-default-right','-width-extended-left','-width-extended-right']) && $model->vr_bw_widthText) { $arrCssClasses[] = '-add-text-indent'; } if (!empty($model->vr_bw_padding)) { $arrCssClasses[] = $model->vr_bw_padding; } return implode(' ', $arrCssClasses); } }