private function _renderSubmissionTemplate($template, Formerly_SubmissionModel $submission)
{
$formHandle = $submission->getForm()->handle;
$formattedTemplate = $template;
//check that all the tags are valid before passing them to the template engine, otherwise it
//crashes with an obscure error
preg_match_all('/{(.+?)(\\||})/', $template, $matches);
$qs = $submission->getForm()->getQuestions();
$tagsAllFound = true;
foreach ($matches[1] as $a) {
foreach ($qs as $q) {
if (strstr($formHandle . '_' . $a, $q->handle)) {
//if multiple result field do replace now
//this is a valid twig field replace it with a temporary start and end tag
//(because we want to replace all non matches later with something so twig doesn't try to replace the nonmatches)
$formattedTemplate = str_replace("{" . $a . "}", "@@@1" . $formHandle . '_' . $a . '1@@@', $formattedTemplate);
$formattedTemplate = str_replace("{" . $a . "|", "@@@2" . $formHandle . '_' . $a . '2@@@', $formattedTemplate);
break;
}
}
}
//replace any stragglers
preg_match_all('/{(.+?)(\\||})/', $template, $matches);
foreach ($matches[1] as $a) {
$formattedTemplate = str_replace("{" . $a . "}", "<<<" . $a . '>>>', $formattedTemplate);
}
//fix up actual matches
$formattedTemplate = str_replace("@@@1", "{", $formattedTemplate);
$formattedTemplate = str_replace("1@@@", "}", $formattedTemplate);
$formattedTemplate = str_replace("@@@2", "{", $formattedTemplate);
$formattedTemplate = str_replace("2@@@", "|", $formattedTemplate);
$result = craft()->templates->renderObjectTemplate($formattedTemplate, $submission);
//put unmatched handles back the way they were
$result = str_replace('<<<', '{', $result);
$result = str_replace(">>>", "}", $result);
$result = str_replace("{id}", $submission->id, $result);
$siteUrl = craft()->config->get("siteUrl");
if (is_array($siteUrl) && count($siteUrl) > 0) {
$result = str_replace("{siteUrl}", $siteUrl[CRAFT_LOCALE], $result);
} else {
$result = str_replace("{siteUrl}", $siteUrl, $result);
}
return $result;
}