Craft\AmForms_FormsService::displayForm PHP Method

displayForm() public method

Display a form.
public displayForm ( AmForms_FormModel $form ) : string
$form AmForms_FormModel
return string
    public function displayForm(AmForms_FormModel $form)
    {
        // Get submission model
        $submission = craft()->amForms_submissions->getActiveSubmission($form);
        // Set namespace
        $namespace = 'form_' . StringHelper::randomString(10);
        craft()->templates->setNamespace($namespace);
        // Build field HTML
        $tabs = array();
        $supportedFields = craft()->amForms_fields->getSupportedFieldTypes();
        $fieldTemplateInfo = craft()->amForms->getDisplayTemplateInfo('field', $form->fieldTemplate);
        $templatePath = $fieldTemplateInfo['path'];
        // Get the current templates path so we can restore it at the end of this function
        $siteTemplatesPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath();
        $pluginTemplatePath = craft()->path->getPluginsPath() . 'amforms/templates/_display/templates/';
        foreach ($form->getFieldLayout()->getTabs() as $tab) {
            // Tab information
            $tabs[$tab->id] = array('info' => $tab, 'fields' => array());
            // Tab fields
            $fields = $tab->getFields();
            foreach ($fields as $layoutField) {
                // Get actual field
                $field = $layoutField->getField();
                if (!in_array($field->type, $supportedFields)) {
                    // We don't display unsupported fields
                    continue;
                }
                // Reset templates path for input and get field input
                method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($pluginTemplatePath) : craft()->path->setTemplatesPath($pluginTemplatePath);
                $fieldInfo = craft()->fields->populateFieldType($field, $submission);
                craft()->templates->getTwig(null, array('safe_mode' => false))->addGlobal('required', $layoutField->required);
                $input = $fieldInfo->getInputHtml($field->handle, $submission->getFieldValue($field->handle));
                craft()->templates->getTwig(null, array('safe_mode' => false))->addGlobal('required', null);
                // Get field HTML
                method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($fieldTemplateInfo['path']) : craft()->path->setTemplatesPath($fieldTemplateInfo['path']);
                $fieldHtml = craft()->templates->render($fieldTemplateInfo['template'], array('form' => $form, 'field' => $field, 'input' => $input, 'required' => $layoutField->required, 'element' => $submission, 'namespace' => $namespace));
                $fieldHtml = craft()->templates->namespaceInputs($fieldHtml);
                // Add to tabs
                $tabs[$tab->id]['fields'][] = $fieldHtml;
            }
        }
        // Restore the templates path variable to it's original value
        method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($siteTemplatesPath) : craft()->path->setTemplatesPath($siteTemplatesPath);
        // Build tab HTML
        $variables = array('form' => $form, 'tabs' => $tabs, 'element' => $submission);
        $bodyHtml = craft()->amForms->renderDisplayTemplate('tab', $form->tabTemplate, $variables);
        // Use AntiSpam?
        $antispamHtml = craft()->amForms_antispam->render();
        // Use reCAPTCHA?
        $recaptchaHtml = craft()->amForms_recaptcha->render();
        // Build our complete form
        $variables = array('form' => $form, 'body' => $bodyHtml, 'antispam' => $antispamHtml, 'recaptcha' => $recaptchaHtml, 'element' => $submission, 'namespace' => $namespace);
        $formHtml = craft()->amForms->renderDisplayTemplate('form', $form->formTemplate, $variables);
        // Reset namespace
        craft()->templates->setNamespace(null);
        // Parse form
        return new \Twig_Markup($formHtml, craft()->templates->getTwig()->getCharset());
    }