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 a obscure error preg_match_all('/{([^}]*)}/', $template, $matches); $qs = $submission->getForm()->getQuestions(); $tagsAllFound = true; foreach ($matches[1] as $a) { foreach ($qs as $q) { if ($q->handle == $formHandle . '_' . $a) { //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); break; } } } //replace any stragglers $formattedTemplate = str_replace("{", "<<<", $formattedTemplate); $formattedTemplate = str_replace("}", ">>>", $formattedTemplate); //fix up actual matches $formattedTemplate = str_replace("@@@1", "{", $formattedTemplate); $formattedTemplate = str_replace("1@@@", "}", $formattedTemplate); $result = craft()->templates->renderObjectTemplate($formattedTemplate, $submission); //put unmatched handles back the way they were $result = str_replace('<<<', '{', $result); $result = str_replace(">>>", "}", $result); return $result; }
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; }