/** * Generate the form's html. * * @param Form $entity * @param bool $persist * * @return string */ public function generateHtml(Form $entity, $persist = true) { //generate cached HTML $theme = $entity->getTemplate(); $submissions = null; $lead = $this->leadModel->getCurrentLead(); $style = ''; if (!empty($theme)) { $theme .= '|'; } if ($entity->usesProgressiveProfiling()) { $submissions = $this->getRepository()->getFormResults($entity, ['leadId' => $lead->getId(), 'limit' => 200]); } if ($entity->getRenderStyle()) { $templating = $this->templatingHelper->getTemplating(); $styleTheme = $theme . 'MauticFormBundle:Builder:style.html.php'; $style = $templating->render($this->themeHelper->checkForTwigTemplate($styleTheme)); } // Determine pages $fields = $entity->getFields()->toArray(); // Ensure the correct order in case this is generated right after a form save with new fields uasort($fields, function ($a, $b) { if ($a->getOrder() === $b->getOrder()) { return 0; } return $a->getOrder() < $b->getOrder() ? -1 : 1; }); $pages = ['open' => [], 'close' => []]; $openFieldId = $closeFieldId = $previousId = $lastPage = false; $pageCount = 1; foreach ($fields as $fieldId => $field) { if ('pagebreak' == $field->getType() && $openFieldId) { // Open the page $pages['open'][$openFieldId] = $pageCount; $openFieldId = false; $lastPage = $fieldId; // Close the page at the next page break if ($previousId) { $pages['close'][$previousId] = $pageCount; ++$pageCount; } } else { if (!$openFieldId) { $openFieldId = $fieldId; } } $previousId = $fieldId; } if (!empty($pages)) { if ($openFieldId) { $pages['open'][$openFieldId] = $pageCount; } if ($previousId !== $lastPage) { $pages['close'][$previousId] = $pageCount; } } $html = $this->templatingHelper->getTemplating()->render($theme . 'MauticFormBundle:Builder:form.html.php', ['fieldSettings' => $this->getCustomComponents()['fields'], 'fields' => $fields, 'contactFields' => $this->leadFieldModel->getFieldListWithProperties(), 'form' => $entity, 'theme' => $theme, 'submissions' => $submissions, 'lead' => $lead, 'formPages' => $pages, 'lastFormPage' => $lastPage, 'style' => $style]); if (!$entity->usesProgressiveProfiling()) { $entity->setCachedHtml($html); if ($persist) { //bypass model function as events aren't needed for this $this->getRepository()->saveEntity($entity); } } return $html; }