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());
}