styleUtils = $styleUtils; $this->settings = $settings; $this->blocksRenderer = $blocksRenderer; } public function renderStyles(array $form = [], string $prefix = null): string { $html = ''; return $html; } public function renderHTML(array $form = []): string { if (isset($form['body']) && !empty($form['body'])) { return $this->renderBlocks($form['body'], $form['settings'] ?? []); } return ''; } public function getStyles(array $form = []): string { if (isset($form['styles']) && strlen(trim($form['styles'])) > 0) { return strip_tags($form['styles']); } else { return $this->styleUtils->getDefaultStyles(); } } public function renderBlocks(array $blocks = [], array $formSettings = [], bool $honeypotEnabled = true): string { // add honeypot for spambots $html = ($honeypotEnabled) ? $this->renderHoneypot() : ''; foreach ($blocks as $key => $block) { if ($block['type'] == 'submit' && $this->settings->get('captcha.type') === Captcha::TYPE_RECAPTCHA) { $html .= $this->renderReCaptcha(); } if (in_array($block['type'], ['column', 'columns'])) { $blocks = $block['body'] ?? []; $html .= $this->blocksRenderer->renderContainerBlock($block, $this->renderBlocks($blocks, $formSettings, false)) . PHP_EOL; } else { $html .= $this->blocksRenderer->renderBlock($block, $formSettings) . PHP_EOL; } } return $html; } private function renderHoneypot(): string { return ''; } private function renderReCaptcha(): string { $siteKey = $this->settings->get('captcha.recaptcha_site_token'); return '
'; } private function renderFormDivWrapperStyles(array $form, string $selector = null): string { if (is_null($selector)) return ''; if (!isset($form['settings'])) return ''; $formSettings = $form['settings']; $styles = []; if (isset($formSettings['backgroundColor'])) { $styles[] = 'background-color: ' . trim($formSettings['backgroundColor']); } if (isset($formSettings['border_size']) && isset($formSettings['border_color'])) { $styles[] = 'border: ' . $formSettings['border_size'] . 'px solid ' . $formSettings['border_color']; } if (isset($formSettings['border_radius'])) { $styles[] = 'border-radius: ' . $formSettings['border_radius'] . 'px'; } if (isset($formSettings['background_image_url'])) { $styles[] = 'background-image: url(' . trim($formSettings['background_image_url']) . ')'; $backgroundPosition = 'center'; $backgroundRepeat = 'no-repeat'; $backgroundSize = 'cover'; if (isset($formSettings['background_image_display']) && $formSettings['background_image_display'] === 'fit') { $backgroundPosition = 'center top'; $backgroundSize = 'contain'; } if (isset($formSettings['background_image_display']) && $formSettings['background_image_display'] === 'tile') { $backgroundRepeat = 'repeat'; $backgroundSize = 'auto'; } $styles[] = 'background-position: ' . $backgroundPosition; $styles[] = 'background-repeat: ' . $backgroundRepeat; $styles[] = 'background-size: ' . $backgroundSize; } $media = "@media (max-width: 500px) {{$selector} {background-image: none;}}"; return $selector . '{' . join(';', $styles) . '}' . $media; } public function renderFormElementStyles(array $form): string { if (!isset($form['settings'])) return ''; $formSettings = $form['settings']; $styles = []; if (isset($formSettings['fontColor'])) { $styles[] = 'color: ' . trim($formSettings['fontColor']); } if (isset($formSettings['form_padding'])) { $styles[] = 'padding: ' . $formSettings['form_padding'] . 'px'; } if (isset($formSettings['alignment'])) { $styles[] = 'text-align: ' . $formSettings['alignment']; } return join(';', $styles); } }