Details
-
Sub-task
-
Resolution: Cannot Reproduce
-
Blocker
-
None
-
None
Description
1. Go to a Group. http://dev.gpsnetwork.org/xwiki/bin/view/Group_GPSGroupLeaderEmailDigestTest/WebHome
2. As a Non-Admin send a message to a single member - Instant Notification is turned on for all three members.
2.1 The member sending the message should be notified
2.2 the Group Leaders should be notified
2.3 and the member recipient should be notified.
Bug
1 The Group Leader was notified but the email was broken.
Failed to execute the [velocity] macro
org.xwiki.rendering.macro.MacroExecutionException: Failed to evaluate Velocity Macro for content [#set($hostname=${xwiki.xWiki.Param('curriki.system.hostname', 'broken-url')})
#set($displayGroupname=$context.get("DISPLAY_GROUPNAME"))
#set($groupname=$context.get("GROUPNAME"))
#set($groupPageUrl="http://${hostname}/xwiki/bin/view/${groupname}/WebHome")
#set($event=$context.get("EVENT"))
#set($notificationMailSender=$context.get("NOTIFICATION_MAIL_SENDER"))
html clean="false"
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="initial-scale=1.0">
<!-- So that mobile webkit will display zoomed in -->
<meta name="format-detection" content="telephone=no">
<!-- disable auto telephone linking in iOS -->
<title>Hi there! Curriki wants to keep you up to date with your groups. The following activities happened in the past
24 hours in your ${displayGroupname} group.</title>
<style type="text/css">
.ReadMsgBody
.ExternalClass
{ width: 100%; background-color: #ebebeb; }.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div
{ line-height: 100%; }body
{ -webkit-text-size-adjust: none; -ms-text-size-adjust: none; }body
{ margin: 0; padding: 0; }table
{ border-spacing: 0; }table td
{ border-collapse: collapse; }.yshortcuts a
{ border-bottom: none !important; } @media screen and (max-width: 600px) {
table[class="container"]
}
@media screen and (max-width: 480px) {
td[class="container-padding"]
}
</style>
</head>
<body style="margin:0; padding:10px 0;" bgcolor="#ebebeb" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<br>
<!-- 100% wrapper (grey background) -->
<table border="0" width="100%" height="100%" cellpadding="0" cellspacing="0" bgcolor="#ebebeb">
<tr>
<td align="center" valign="top" bgcolor="#ebebeb" style="background-color: #ebebeb;">
<!-- 600px container (white background) userName: ${RECIPIENT_USERNAME} -->
<table border="0" width="600" cellpadding="0" cellspacing="0" class="container" bgcolor="#ffffff">
<tr>
<td class="container-padding" bgcolor="#ffffff"
style="background-color: #ffffff; padding-left: 30px; padding-right: 30px; font-size: 14px; line-height: 20px; font-family: Helvetica, sans-serif; color: #333;">
<table border="0" width="600" cellpadding="0" cellspacing="0" class="container" bgcolor="#ffffff">
<tr>
<td align="center" bgcolor="#ffffff" style="background-color: #ffffff;">
<br/>
<br/>
<em style="font-weight: bold; font-size: 24px; line-height: 40px; color:#284EBF; font-style: normal;">$msg.get("groups.notification_mail.heading")</em>
</td>
</tr>
</table>
<br/>
<div style="font-weight: bold; font-size: 18px; line-height: 24px; color:#373ACA">
$msg.get("groups.notification_mail.greeting",[${RECIPIENT_FIRST_AND_LAST}])
</div>
<p>$msg.get("groups.notification_mail.content",[$displayGroupname, $groupPageUrl])</p>
<br/> <br/>
#set($date="${notificationMailSender.formatDate($event.date)} EDT")
#set($groupMember=$event.user)
#set($userDoc=$xwiki.getDocument($groupMember))
#set($userObj=$userDoc.getObject("XWiki.XWikiUsers"))
#set($groupMemberName="${userObj.getProperty('first_name').getValue()} ${userObj.getProperty('last_name').getValue()}")
#set($groupMemberPageUrl="http://${hostname}/xwiki/bin/view/MyCurriki/Profile?user=${groupMember}")
#set($groupMembersPageUrl="http://${hostname}/xwiki/bin/view/${groupname}/Members")
#set($displayTitle=$event.getDisplayTitle())
#set($displayBody=$event.getDisplayBody())
#set($url="http://${hostname}${event.getUrl()}")
#if("${event.class}" == "class org.curriki.plugin.activitystream.plugin.MemberActivityEvent")
#if("${event.getType()}" == "create")
<!-- $notificationMailSender.eventTick() events -->
$msg.get("groups.notification_mail.member_activity_event", [$date, $groupMemberPageUrl,$groupMemberName,$groupMembersPageUrl])
#set($trash=$context.put("EMAIL_SUBJECT", $msg.get("groups.notification_mail.member_activity_event.email_subject", [$groupMemberName, $displayGroupname])))
<br/><br/>
#end
#elseif("${event.class}" == "class org.curriki.plugin.activitystream.plugin.DiscussionActivityEvent")
#set($docTitle=$event.getParam1())
#set($docType=$event.getParam3())
-
- Topics
#if(($docType.contains("discussion-topic")) && ($event.getType().contains("create")))
<!-- $notificationMailSender.eventTick() events -->
$msg.get("groups.notification_mail.discussion_activity_event.topic.create", [$date, $groupMemberPageUrl,$groupMemberName, $docTitle, $url])
#set($trash=$context.put("EMAIL_SUBJECT", $msg.get("groups.notification_mail.discussion_activity_event.topic.create.email_subject", [$groupMemberName, $displayGroupname])))
<br/><br/>
#set($body=$xwiki.activitystream.getTempAttribute("messageBody"))##
#if($body.startsWith('html clean="false" wiki="false"'))#set($body=$body.substring(35))#end
#if($body.endsWith('/html'))#set($body=$body.substring(0,$mathtool.sub($body.length(),9)))#end
#set($body=$body.replaceAll("</?(p|br|h1|h2|h3|h4|h5|h6)[^>]*>","<ö>").replaceAll("<[^ö][^>]+>","").replaceAll("<ö>","<br/>"))
<div style="border:thin">$body</div>
<br/>
###elseif(($docType.contains("discussion-topic")) && ($event.getType().contains("update")))
##<li> - $msg.get("groups.notification_mail.discussion_activity_event.topic.update", [$date, $groupMemberPageUrl,$groupMemberName, $docTitle, $url])
##</li>
- Topics
-
- Answers
#elseif(($docType.contains("discussion-answer")) && ($event.getType().contains("create")))
<!-- $notificationMailSender.eventTick() events -->
$msg.get("groups.notification_mail.discussion_activity_event.answer.create", [$date, $groupMemberPageUrl,$groupMemberName, $docTitle, $url])
#set($trash=$context.put("EMAIL_SUBJECT", $msg.get("groups.notification_mail.discussion_activity_event.answer.create.email_subject", [$groupMemberName, $displayGroupname])))
<br/><br/>
#set($body=$xwiki.activitystream.getTempAttribute("messageBody"))##
#if($body.startsWith('html clean="false" wiki="false"'))#set($body=$body.substring(35))#end
#if($body.endsWith('/html'))#set($body=$body.substring(0,$mathtool.sub($body.length(),9)))#end
#set($body=$body.replaceAll("</?(p|br|h1|h2|h3|h4|h5|h6)[^>]*>","<ö>").replaceAll("<[^ö][^>]+>","").replaceAll("<ö>","<br/>"))
<div style="border:thin">$body</div>
<br/>
###elseif(($docType.contains("discussion-answer")) && ($event.getType().contains("update")))
##<li> - $msg.get("groups.notification_mail.discussion_activity_event.answer.update", [$date, $groupMemberPageUrl,$groupMemberName, $docTitle, $url])
##</li>
- Answers
-
- Comments
#elseif(($docType.contains("discussion-answer")) && ($event.getType().contains("addComment")))
<!-- $notificationMailSender.eventTick() events -->
$msg.get("groups.notification_mail.discussion_activity_event.comment.create", [$date, $groupMemberPageUrl,$groupMemberName, $docTitle, $url])
#set($trash=$context.put("EMAIL_SUBJECT", $msg.get("groups.notification_mail.discussion_activity_event.comment.create.email_subject", [$groupMemberName, $displayGroupname])))
<br/><br/>
- Comments
#set($body=$xwiki.activitystream.getTempAttribute("messageBody"))##
#if($body.startsWith('html clean="false" wiki="false"'))#set($body=$body.substring(35))#end
#if($body.endsWith('/html'))#set($body=$body.substring(0,$mathtool.sub($body.length(),9)))#end
#set($body=$body.replaceAll("</?(p|br|h1|h2|h3|h4|h5|h6)[^>]*>","<ö>").replaceAll("<[^ö][^>]+>","").replaceAll("<ö>","<br/>"))
<div style="border:thin">$body</div>
<br/>
#end
-
- Messages
#elseif("${event.class}" == "class org.curriki.plugin.activitystream.plugin.MessageActivityEvent")
#set($articleTitle=$event.getParam1())
#set($level=$event.getParam3())
#set($mailTo=$event.getMailTo())
#set($recipientRole=$event.getRecipientRole())
#set($toGroupMail=$event.getMailToGroup())
#set($break=false)
- Messages
-
- Created a message
#if($notificationMailSender.shouldUserSeeMessage($RECIPIENT_EMAIL, $RECIPIENT_USERNAME, $groupname, $event))
#if($level=="message")
#if("$! {mailTo}" != "")
<!-- $notificationMailSender.eventTick() events -->
#set($break=true)
$msg.get("groups.notification_mail.message_activity_event.message.to_members", [$date, $groupMemberPageUrl,$groupMemberName, $articleTitle, $url, $mailTo])
#end
#if("$!{recipientRole}" != "")
<!-- $notificationMailSender.eventTick() events -->
#if($break)
</br>
#end
#set($break=true)
$msg.get("groups.notification_mail.message_activity_event.message.to_role", [$date, $groupMemberPageUrl,$groupMemberName, $articleTitle, $url, $recipientRole])
#end
#if("$!{toGroupMail}" != "")
<!-- $notificationMailSender.eventTick() events -->
#if($break)
</br>
#end
#set($break=true)
$msg.get("groups.notification_mail.message_activity_event.message.to_group", [$date, $groupMemberPageUrl,$groupMemberName, $articleTitle, $url, $toGroupMail])
#end
#if("$!{mailTo}" == "" && "$!
{recipientRole}" == "" && "$!
{toGroupMail}" == "")
<!-- $notificationMailSender.eventTick() events -->
#if($break)
</br>
#end
#set($break=true)
$msg.get("groups.notification_mail.message_activity_event.message.to_none", [$date, $groupMemberPageUrl,$groupMemberName, $articleTitle, $url])
#end
<br/><br/>
#set($body=$xwiki.activitystream.getTempAttribute("messageBody"))##
#if($body.startsWith('html clean="false" wiki="false"'))#set($body=$body.substring(35))#end
#if($body.endsWith('/html'))#set($body=$body.substring(0,$mathtool.sub($body.length(),9)))#end
#set($body=$body.replaceAll("</?(p|br|h1|h2|h3|h4|h5|h6)[^>]*>","<ö>").replaceAll("<[^ö][^>]+>","").replaceAll("<ö>","<br/>"))
<div style="border:thin">$body</div>
#set($trash=$context.put("EMAIL_SUBJECT", $msg.get("groups.notification_mail.message_activity_event.message.email_subject", [$groupMemberName, $displayGroupname])))
<br/> - Created a comment to a message
#elseif(($level=="comment"))
<!-- $notificationMailSender.eventTick() events -->
$msg.get("groups.notification_mail.message_activity_event.comment", [$date, $groupMemberPageUrl,$groupMemberName, $articleTitle, $url])
<br/><br/>
#set($body=$xwiki.activitystream.getTempAttribute("messageBody"))##
#if($body.startsWith('html clean="false" wiki="false"'))#set($body=$body.substring(35))#end
#if($body.endsWith('/html'))#set($body=$body.substring(0,$mathtool.sub($body.length(),9)))#end
#set($body=$body.replaceAll("</?(p|br|h1|h2|h3|h4|h5|h6)[^>]*>","<ö>").replaceAll("<[^ö][^>]+>","").replaceAll("<ö>","<br/>"))
<div style="border:thin">$body</div>
#set($trash=$context.put("EMAIL_SUBJECT", $msg.get("groups.notification_mail.message_activity_event.comment.email_subject", [$groupMemberName, $displayGroupname])))
<br/>
#end
#end
- Created a message
#elseif("${event.class}" == "class org.curriki.plugin.activitystream.plugin.ResourceActivityEvent")
#set($assetTitle=$event.getParam1())
<!-- $notificationMailSender.eventTick() events -->
$msg.get("groups.notification_mail.resource_activity_event", [$date, $groupMemberPageUrl,$groupMemberName,$assetTitle,$url])
#set($trash=$context.put("EMAIL_SUBJECT", $msg.get("groups.notification_mail.resource_activity_event.email_subject", [$groupMemberName, $displayGroupname])))
<br/><br/>
#end
##elseif("${event.class}" == "class org.curriki.plugin.activitystream.plugin.DocumentationActivityEvent")
-
- <li>DocumentationActivityEvent: $date, $groupMember, $groupMemberPageUrl, $groupMemberPageUrl</li>
<p>$msg.get("groups.notification_mail.editPreferencesLink",["http://${hostname}/xwiki/bin/view/UserProfiles_${groupname}/${RECIPIENT_USERNAME.substring(6)}"]) - "## "XWiki.".length() = 6
</p>
</td></tr>
</table>
<!--/600px container -->
- <li>DocumentationActivityEvent: $date, $groupMember, $groupMemberPageUrl, $groupMemberPageUrl</li>
</td>
</tr>
</table>
<!-/100% wrapper->
<br>
<br>
</body>
</html>
/html]
at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluateString(VelocityMacro.java:131)
at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluateString(VelocityMacro.java:50)
at org.xwiki.rendering.macro.script.AbstractScriptMacro.evaluateBlock(AbstractScriptMacro.java:302)
at org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:198)
at org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:59)
at org.xwiki.rendering.internal.transformation.macro.MacroTransformation.transformOnce(MacroTransformation.java:187)
at org.xwiki.rendering.internal.transformation.macro.MacroTransformation.transform(MacroTransformation.java:132)
at org.xwiki.rendering.internal.transformation.DefaultTransformationManager.performTransformations(DefaultTransformationManager.java:83)
at org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:248)
at org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:124)
at org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:54)
at org.xwiki.display.internal.DefaultDocumentDisplayer.display(DefaultDocumentDisplayer.java:80)
at org.xwiki.display.internal.DefaultDocumentDisplayer.display(DefaultDocumentDisplayer.java:38)
at com.xpn.xwiki.internal.sheet.SheetDocumentDisplayer.display(SheetDocumentDisplayer.java:118)
at com.xpn.xwiki.internal.sheet.SheetDocumentDisplayer.display(SheetDocumentDisplayer.java:57)
at org.xwiki.display.internal.ConfiguredDocumentDisplayer.display(ConfiguredDocumentDisplayer.java:67)
at org.xwiki.display.internal.ConfiguredDocumentDisplayer.display(ConfiguredDocumentDisplayer.java:41)
at com.xpn.xwiki.doc.XWikiDocument.getRenderedContent(XWikiDocument.java:918)
at com.xpn.xwiki.doc.XWikiDocument.getRenderedContent(XWikiDocument.java:884)
at com.xpn.xwiki.api.Document.getRenderedContent(Document.java:608)
at com.xpn.xwiki.api.Document$getRenderedContent.call(Unknown Source)
at NotificationMailSender.sendNotificationEmailForEvent(script14110634306952098916670.groovy:251)
at NotificationMailSender$sendNotificationEmailForEvent.callCurrent(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
at NotificationMailSender$sendNotificationEmailForEvent.callCurrent(Unknown Source)
at NotificationMailSender.sendNotificationEmailForEvent(script14110634306952098916670.groovy:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.curriki.plugin.activitystream.impl.CurrikiActivityStream$1.runInternal(CurrikiActivityStream.java:150)
at com.xpn.xwiki.util.AbstractXWikiRunnable.run(AbstractXWikiRunnable.java:110)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.xwiki.velocity.XWikiVelocityException: Failed to evaluate content with id [xwiki:Groups.NotificationMailTemplate]
at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:247)
at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:184)
at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluateString(VelocityMacro.java:124)
... 32 more
Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'shouldUserSeeMessage' in class NotificationMailSender threw exception java.lang.NullPointerException: Cannot invoke method split() on null object at xwiki:Groups.NotificationMailTemplate[line 185, column 29]
at org.apache.velocity.runtime.parser.node.ASTMethod.handleInvocationException(ASTMethod.java:243)
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:187)
at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:280)
at org.apache.velocity.runtime.parser.node.ASTReference.evaluate(ASTReference.java:530)
at org.apache.velocity.runtime.parser.node.ASTExpression.evaluate(ASTExpression.java:62)
at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:85)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
at org.apache.velocity.runtime.parser.node.ASTElseIfStatement.render(ASTElseIfStatement.java:92)
at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:106)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:228)
... 34 more
Caused by: java.lang.NullPointerException: Cannot invoke method split() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:32)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:54)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at NotificationMailSender.shouldUserSeeMessage1(script14110634306952098916670.groovy:115)
at NotificationMailSender$shouldUserSeeMessage1.callCurrent(Unknown Source)
at NotificationMailSender.shouldUserSeeMessage(script14110634306952098916670.groovy:104)
at sun.reflect.GeneratedMethodAccessor590.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:395)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:384)
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:173)
... 43 more