Index: branches/5.2.x/core/units/email_events/email_events_event_handler.php =================================================================== diff -u -N -r14244 -r14572 --- branches/5.2.x/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 14244) +++ branches/5.2.x/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 14572) @@ -1,6 +1,6 @@ getObject(); /* @var $object kDBItem */ + // validate email subject and body for parsing errors + $this->_validateEmailTemplate($object); + + // validate sender and recipient addresses if ($object->GetDBField('CustomSender')) { $this->_validateAddress($event, 'Sender'); } - $this->_validateAddress($event, 'Recipient'); if (!$this->Application->isDebugMode(false)) { @@ -942,17 +945,19 @@ } // process replacement tags - $minput_helper =& $this->Application->recallObject('MInputHelper'); - /* @var $minput_helper MInputHelper */ + if ( $object->GetDBField('ReplacementTagsXML') ) { + $minput_helper =& $this->Application->recallObject('MInputHelper'); + /* @var $minput_helper MInputHelper */ - $replacement_tags = Array (); - $records = $minput_helper->parseMInputXML( $object->GetDBField('ReplacementTagsXML') ); + $replacement_tags = Array (); + $records = $minput_helper->parseMInputXML( $object->GetDBField('ReplacementTagsXML') ); - foreach ($records as $record) { - $replacement_tags[ trim($record['Tag']) ] = trim($record['Replacement']); - } + foreach ($records as $record) { + $replacement_tags[ trim($record['Tag']) ] = trim($record['Replacement']); + } - $object->SetDBField('ReplacementTags', $replacement_tags ? serialize($replacement_tags) : NULL); + $object->SetDBField('ReplacementTags', $replacement_tags ? serialize($replacement_tags) : NULL); + } } /** @@ -1082,4 +1087,36 @@ echo ''; } + + /** + * Validates subject and body fields of Email template + * @param kDBItem $object + */ + function _validateEmailTemplate(&$object) + { + $this->parseField($object, 'Subject'); + $this->parseField($object, 'Body'); + } + + /** + * Parses contents of given object field and sets error, when invalid in-portal tags found + * @param kDBItem $object + * @param string $field + * @return void + */ + function parseField(&$object, $field) + { + $this->Application->InitParser(); + + try { + $this->Application->Parser->CompileRaw($object->GetField($field), 'email_template'); + } + catch (ParserException $e) { + if ( $this->Application->isDebugMode() ) { + $this->Application->Debugger->appendHTML('Error in Email Template: ' . $e->getMessage() . ' (line: ' . $e->getLine() . ')'); + } + + $object->SetError($field, 'parsing_error'); + } + } } \ No newline at end of file