Uploaded image for project: '{RETIRED} Curriki'
  1. {RETIRED} Curriki
  2. CURRIKI-6558 Create Group Email digest for NEA GPS Network Group Members
  3. CURRIKI-6622

GPS Groups - Sending Messages to a Member breaks email to Group Leader

    XMLWordPrintable

Details

    • Sub-task
    • Resolution: Cannot Reproduce
    • Blocker
    • NEA Phase 2
    • None
    • Groups
    • 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

      { width: 100%; background-color: #ebebeb; }

      .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"]

      { width: 95% !important; }

      }

      @media screen and (max-width: 480px) {
      td[class="container-padding"]

      { padding-left: 12px !important; padding-right: 12px !important; }

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

        1. 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>
        2. $msg.get("groups.notification_mail.discussion_activity_event.topic.update", [$date, $groupMemberPageUrl,$groupMemberName, $docTitle, $url])
          ##</li>
        1. 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>
        2. $msg.get("groups.notification_mail.discussion_activity_event.answer.update", [$date, $groupMemberPageUrl,$groupMemberName, $docTitle, $url])
          ##</li>
        1. 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/>

      #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

        1. 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)
        1. 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/>

        2. 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

      #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")

        1. <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)}"])
        2. "## "XWiki.".length() = 6
          </p>
          </td></tr>
          </table>
          <!--/600px container -->

      </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

      Attachments

        Activity

          People

            polx Paul Libbrecht
            toddsherman Todd Sherman
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: