コード例 #1
0
ファイル: FormModel.php プロジェクト: dongilbert/mautic
 /**
  * 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;
 }