<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>https://suprawiki.com.br/index.php?action=history&amp;feed=atom&amp;title=Invitation</id>
	<title>Invitation - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="https://suprawiki.com.br/index.php?action=history&amp;feed=atom&amp;title=Invitation"/>
	<link rel="alternate" type="text/html" href="https://suprawiki.com.br/index.php?title=Invitation&amp;action=history"/>
	<updated>2026-04-04T14:54:32Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://suprawiki.com.br/index.php?title=Invitation&amp;diff=224&amp;oldid=prev</id>
		<title>Administrator: Importacão de dados via API</title>
		<link rel="alternate" type="text/html" href="https://suprawiki.com.br/index.php?title=Invitation&amp;diff=224&amp;oldid=prev"/>
		<updated>2023-06-01T15:40:55Z</updated>

		<summary type="html">&lt;p&gt;Importacão de dados via API&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{include reference=&amp;quot;Invitation.InvitationCommon&amp;quot; /}}&lt;br /&gt;
&lt;br /&gt;
{{include reference=&amp;quot;Invitation.InvitationMembersCommon&amp;quot; /}}&lt;br /&gt;
&lt;br /&gt;
{{velocity}}&lt;br /&gt;
#*&lt;br /&gt;
 * Invitation Application&lt;br /&gt;
 * This script is only for sending messages and users who are not allowed to send mail need not have access to&lt;br /&gt;
 * view this page.&lt;br /&gt;
 *&lt;br /&gt;
 * Macros in this script don&amp;#039;t rely on any variables except those which are passed to them and the following:&lt;br /&gt;
 *&lt;br /&gt;
 * $doc the com.xpn.xwiki.api.Document object representing the document containing this code.&lt;br /&gt;
 * $msg the internationalization message provider containing a get(String) and a get(String, List) function&lt;br /&gt;
 * $xcontext the com.xpn.xwiki.Context object for this request&lt;br /&gt;
 * $xwiki an object of the com.xpn.xwiki.api.XWiki class.&lt;br /&gt;
 *&lt;br /&gt;
 * Macros also depend on other macros but only other macros which are contained in this script.&lt;br /&gt;
 *&lt;br /&gt;
 * This script relies on the following documents:&lt;br /&gt;
 *&lt;br /&gt;
 * InvitationCommon&lt;br /&gt;
 *&lt;br /&gt;
 * InvitationMembersCommon&lt;br /&gt;
 * &lt;br /&gt;
 *&lt;br /&gt;
 * This script is affected by the following documents:&lt;br /&gt;
 *&lt;br /&gt;
 * InvitationMessages stores all of the mail message objects. If this does not exist it will be created.&lt;br /&gt;
 *                    May be changed in the configuration.&lt;br /&gt;
 *&lt;br /&gt;
 * InvitationMailClass the class for mail message objects. May be changed in the configuration.&lt;br /&gt;
 *&lt;br /&gt;
 * InvitationConfig configuration for this code. Contains an XObject of the class defined in this document.&lt;br /&gt;
 *                  If it does not exist it will be created with default values.&lt;br /&gt;
 *&lt;br /&gt;
 *###&lt;br /&gt;
#if($xcontext.getUser() == &amp;#039;XWiki.XWikiGuest&amp;#039;)&lt;br /&gt;
  ## Only members should ever have access to this document, enforce this through XWiki permissions system,&lt;br /&gt;
  ## this is a last effort in the event of incorrect settings.&lt;br /&gt;
  #stop&lt;br /&gt;
#end&lt;br /&gt;
##&lt;br /&gt;
## is the user a mail admin TODO: change this.&lt;br /&gt;
#set($isAdmin = $hasEdit)&lt;br /&gt;
##&lt;br /&gt;
## Load config and mail.&lt;br /&gt;
#set($config = {})&lt;br /&gt;
#loadInvitationConfig($config)&lt;br /&gt;
#set($mail = {})&lt;br /&gt;
#set($emailContainer = $xwiki.getDocumentAsAuthor($config.get(&amp;#039;emailContainer&amp;#039;)))&lt;br /&gt;
#loadInvitationMail($config, $emailContainer, $mail)&lt;br /&gt;
##&lt;br /&gt;
## Load CSS&lt;br /&gt;
$xwiki.get(&amp;#039;ssx&amp;#039;).use($config.get(&amp;#039;commonPage&amp;#039;))&lt;br /&gt;
##&lt;br /&gt;
## Don&amp;#039;t load comments, history, etc.&lt;br /&gt;
#set ($displayDocExtra = false)&lt;br /&gt;
##&lt;br /&gt;
#displayInvitationHeader($request.getParameterMap(), $config)&lt;br /&gt;
##&lt;br /&gt;
##---------------------------------------------------------------------&lt;br /&gt;
## Decide what we should do.&lt;br /&gt;
##---------------------------------------------------------------------&lt;br /&gt;
##&lt;br /&gt;
#if($xcontext.getAction() != &amp;#039;view&amp;#039;)&lt;br /&gt;
  ## The administration application includes this page so we will not do anything.&lt;br /&gt;
#elseif(!$isAdmin &amp;amp;&amp;amp; &amp;quot;#isUserReportedSpammer($mail.values())&amp;quot; != &amp;#039;false&amp;#039;)&lt;br /&gt;
  ## The current user has been reported as a spammer, they are not allowed to send more mail until&lt;br /&gt;
  ## the situation has been investigated.&lt;br /&gt;
&lt;br /&gt;
  ## A message which you sent was reported as spam and your privilege to send mail has been suspended...&lt;br /&gt;
  (%id=&amp;quot;invitation-permission-error&amp;quot;%)((({{error}}$services.localization.render(&amp;#039;xe.invitation.userIsReportedSpammer&amp;#039;){{/error}})))&lt;br /&gt;
  ##&lt;br /&gt;
#elseif(!$isAdmin&lt;br /&gt;
        &amp;amp;&amp;amp; $config.get(&amp;#039;allowUsersOfOtherWikis&amp;#039;) != &amp;#039;1&amp;#039;&lt;br /&gt;
        &amp;amp;&amp;amp; $doc.getWiki() != $xwiki.getDocument($xcontext.getUser()).getWiki())&lt;br /&gt;
  ## Users of other subwikis are not allowed to send mail.&lt;br /&gt;
  (%id=&amp;quot;invitation-permission-error&amp;quot;%)((({{error}}$services.localization.render(&amp;#039;xe.invitation.onlyMembersCanSendMail&amp;#039;)&lt;br /&gt;
  $services.localization.render(&amp;#039;xe.invitation.youAreAMemberOfOtherWiki&amp;#039;, [$xwiki.getDocument($xcontext.getUser()).getWiki()]){{/error}})))&lt;br /&gt;
#else&lt;br /&gt;
  ## The user is authorized to send mail &amp;lt;-------------------------------------------------------&lt;br /&gt;
  ## Get the list of email addresses to send to.&lt;br /&gt;
  #set($userMaySendToMultiple = ($isAdmin || $config.get(&amp;#039;usersMaySendToMultiple&amp;#039;) == &amp;#039;1&amp;#039;))&lt;br /&gt;
  #set($recipientString = $escapetool.xml(&amp;quot;$!request.get(&amp;#039;recipients&amp;#039;)&amp;quot;))&lt;br /&gt;
  #set($recipients = [])&lt;br /&gt;
  #getRecipients($recipientString, $userMaySendToMultiple, $recipients)&lt;br /&gt;
  ##&lt;br /&gt;
  ## get subject line and message body if allowed...&lt;br /&gt;
  #set($userMayPersonalizeMessage = ($isAdmin || $config.get(&amp;#039;usersMayPersonalizeMessage&amp;#039;) == &amp;#039;1&amp;#039;))&lt;br /&gt;
  #if($userMayPersonalizeMessage)&lt;br /&gt;
    #set($subjectLine = $request.get(&amp;#039;subjectLine&amp;#039;))&lt;br /&gt;
    #set($messageBody = $request.get(&amp;#039;messageBody&amp;#039;))&lt;br /&gt;
  #else&lt;br /&gt;
    #set($subjectLine = &amp;#039;&amp;#039;)&lt;br /&gt;
    #set($messageBody = &amp;#039;&amp;#039;)&lt;br /&gt;
  #end&lt;br /&gt;
  ##&lt;br /&gt;
  #if(&amp;quot;$!request.get(&amp;#039;sendMail&amp;#039;)&amp;quot; != &amp;#039;&amp;#039;&lt;br /&gt;
      &amp;amp;&amp;amp; $request.getMethod().toLowerCase() == &amp;#039;post&amp;#039;&lt;br /&gt;
      &amp;amp;&amp;amp; ${services.csrf.isTokenValid(&amp;quot;$!{request.getParameter(&amp;#039;form_token&amp;#039;)}&amp;quot;)})&lt;br /&gt;
    #generateAndSendMail($config,&lt;br /&gt;
                         $recipients,&lt;br /&gt;
                         $subjectLine,&lt;br /&gt;
                         $messageBody)&lt;br /&gt;
    ## Reload mail so footer information is correct.&lt;br /&gt;
    #set($mail = {})&lt;br /&gt;
    #loadInvitationMail($config, $emailContainer, $mail)&lt;br /&gt;
  #else&lt;br /&gt;
    ## The user wants to write and preview a message.&lt;br /&gt;
    #displayForm($recipientString,&lt;br /&gt;
                 $subjectLine,&lt;br /&gt;
                 $messageBody,&lt;br /&gt;
                 $userMaySendToMultiple,&lt;br /&gt;
                 $userMayPersonalizeMessage)&lt;br /&gt;
    #set($messages = [])&lt;br /&gt;
    ## No recipients (&amp;#039;&amp;#039;,) because we are just creating it to preview.&lt;br /&gt;
    #set($emailContainer = $xwiki.getDocumentAsAuthor($config.get(&amp;#039;emailContainer&amp;#039;)))&lt;br /&gt;
    #generateMailFromTemplate($config.get(&amp;#039;subjectLineTemplate&amp;#039;),&lt;br /&gt;
                              $config.get(&amp;#039;messageBodyTemplate&amp;#039;),&lt;br /&gt;
                              $config.get(&amp;#039;emailClass&amp;#039;),&lt;br /&gt;
                              [],&lt;br /&gt;
                              $config.get(&amp;#039;emailRegex&amp;#039;),&lt;br /&gt;
                              $subjectLine,&lt;br /&gt;
                              $messageBody,&lt;br /&gt;
                              $messages,&lt;br /&gt;
                              $emailContainer)&lt;br /&gt;
    #set($invalidAddresses = [])&lt;br /&gt;
    #validateAddressFormat($recipients, $config.get(&amp;#039;emailRegex&amp;#039;), $invalidAddresses)&lt;br /&gt;
    #displayMessage($messages.get(0), $recipients, $invalidAddresses)&lt;br /&gt;
  #end&lt;br /&gt;
  #invitationFooter($mail, $request.getParameterMap(), $isAdmin, $config)&lt;br /&gt;
#end##if user has permission to send&lt;br /&gt;
##&lt;br /&gt;
##---------------------------------------------------------------------&lt;br /&gt;
## The macros (Nothing below this point is run directly)&lt;br /&gt;
##---------------------------------------------------------------------&lt;br /&gt;
##&lt;br /&gt;
#*&lt;br /&gt;
 * Generate and send an email message.&lt;br /&gt;
 *&lt;br /&gt;
 * $messages (List&amp;lt;XObject&amp;gt;) a list of invitation email messages.&lt;br /&gt;
 *&lt;br /&gt;
 * $config (XObject) configuration for the inviter.&lt;br /&gt;
 *&lt;br /&gt;
 * $emailContainer (Document) the document contaning the mail message.&lt;br /&gt;
 *###&lt;br /&gt;
#macro(generateAndSendMail, $config, $recipients, $messageSubject, $messageContent)&lt;br /&gt;
  #set($messages = [])&lt;br /&gt;
  #set($emailContainer = $xwiki.getDocumentAsAuthor($config.get(&amp;#039;emailContainer&amp;#039;)))&lt;br /&gt;
  #generateMailFromTemplate($config.get(&amp;#039;subjectLineTemplate&amp;#039;),&lt;br /&gt;
                            $config.get(&amp;#039;messageBodyTemplate&amp;#039;),&lt;br /&gt;
                            $config.get(&amp;#039;emailClass&amp;#039;),&lt;br /&gt;
                            $recipients,&lt;br /&gt;
                            $config.get(&amp;#039;emailRegex&amp;#039;),&lt;br /&gt;
                            $messageSubject,&lt;br /&gt;
                            $messageContent,&lt;br /&gt;
                            $messages,&lt;br /&gt;
                            $emailContainer)&lt;br /&gt;
  ##&lt;br /&gt;
  #if($messages.size() &amp;gt; 0)&lt;br /&gt;
    #sendMail($messages, $config, $emailContainer)&lt;br /&gt;
    #set($errors = [])&lt;br /&gt;
    #foreach($message in $messages)&lt;br /&gt;
      #set($status = $message.getProperty(&amp;#039;status&amp;#039;).getValue())&lt;br /&gt;
      #if($status != &amp;#039;pending&amp;#039;)&lt;br /&gt;
        #set($discard = $errors.add($message))&lt;br /&gt;
      #end&lt;br /&gt;
    #end&lt;br /&gt;
    (%class=&amp;quot;invitation&amp;quot;%)(((&lt;br /&gt;
&lt;br /&gt;
      (%id=&amp;quot;invitation-action-message&amp;quot;%)(((##&lt;br /&gt;
      #if($errors.size() &amp;gt; 0)&lt;br /&gt;
        ## An error has occured while sending the message.&lt;br /&gt;
        {{error}}$services.localization.render(&amp;#039;xe.invitation.errorWhileSending&amp;#039;){{/error}}##&lt;br /&gt;
      #else&lt;br /&gt;
        ## Your message has been sent.&lt;br /&gt;
        {{info}}$services.localization.render(&amp;#039;xe.invitation.successSending&amp;#039;){{/info}}##&lt;br /&gt;
      #end&lt;br /&gt;
      )))&lt;br /&gt;
&lt;br /&gt;
      #displayMessageTable($messages, [&amp;#039;sentDate&amp;#039;, &amp;#039;recipient&amp;#039;, &amp;#039;status&amp;#039;])&lt;br /&gt;
     )))&lt;br /&gt;
    #displayMessage($messages.get(0), $recipients)&lt;br /&gt;
  #else&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    (%id=&amp;quot;invitation-action-message&amp;quot;%)((({{error}}$services.localization.render(&amp;#039;xe.invitation.noValidMessagesToSend&amp;#039;){{/error}})))&lt;br /&gt;
&lt;br /&gt;
  #end&lt;br /&gt;
#end&lt;br /&gt;
#*&lt;br /&gt;
 * Send an email message.&lt;br /&gt;
 *&lt;br /&gt;
 * $messages (List&amp;lt;XObject&amp;gt;) a list of invitation email messages.&lt;br /&gt;
 *&lt;br /&gt;
 * $config (XObject) configuration for the inviter.&lt;br /&gt;
 *&lt;br /&gt;
 * $emailContainer (Document) the document contaning the mail messages.&lt;br /&gt;
 *###&lt;br /&gt;
#macro(sendMail, $messages, $config, $emailContainer)&lt;br /&gt;
  ##&lt;br /&gt;
  ## Get mail sender plugin.&lt;br /&gt;
  #set($sender = $xwiki.get(&amp;#039;mailsender&amp;#039;))&lt;br /&gt;
  ##&lt;br /&gt;
  ## If parameters are set in the local config, use them, otherwise use global defaults.&lt;br /&gt;
  #set($senderConfig = $sender.createMailConfiguration($xwiki))&lt;br /&gt;
  #if(&amp;quot;$!config.get(&amp;#039;smtp_server&amp;#039;)&amp;quot; != &amp;#039;&amp;#039;)&lt;br /&gt;
    $senderConfig.setHost($config.get(&amp;#039;smtp_server&amp;#039;))##&lt;br /&gt;
  #end&lt;br /&gt;
  #if(&amp;quot;$!config.get(&amp;#039;smtp_port&amp;#039;)&amp;quot; != &amp;#039;&amp;#039;)&lt;br /&gt;
    $senderConfig.setPort($mathtool.toInteger($config.get(&amp;#039;smtp_port&amp;#039;)))##&lt;br /&gt;
  #end&lt;br /&gt;
  #if(&amp;quot;$!config.get(&amp;#039;smtp_server_username&amp;#039;)&amp;quot; != &amp;#039;&amp;#039;)&lt;br /&gt;
    $senderConfig.setSmtpUsername($config.get(&amp;#039;smtp_server_username&amp;#039;))##&lt;br /&gt;
  #end&lt;br /&gt;
  #if(&amp;quot;$config.containsKey(&amp;#039;smtp_server_password&amp;#039;)&amp;quot; != &amp;#039;&amp;#039;)&lt;br /&gt;
    $senderConfig.setSmtpPassword($config.get(&amp;#039;smtp_server_password&amp;#039;))##&lt;br /&gt;
  #end&lt;br /&gt;
  #if(&amp;quot;$config.containsKey(&amp;#039;javamail_extra_props&amp;#039;)&amp;quot; != &amp;#039;&amp;#039;)&lt;br /&gt;
    $senderConfig.setExtraProperties($config.get(&amp;#039;javamail_extra_props&amp;#039;))##&lt;br /&gt;
  #end&lt;br /&gt;
  ##&lt;br /&gt;
  #foreach($message in $messages)&lt;br /&gt;
    #set($mailObj = $sender.createMail())&lt;br /&gt;
    ##&lt;br /&gt;
    #if(&amp;quot;$config.get(&amp;#039;from_address&amp;#039;)&amp;quot; != &amp;#039;&amp;#039;)&lt;br /&gt;
      $mailObj.setFrom($config.get(&amp;#039;from_address&amp;#039;))##&lt;br /&gt;
    #end&lt;br /&gt;
    ##&lt;br /&gt;
    ## Set recipients&lt;br /&gt;
    #set($recipient = $message.getProperty(&amp;#039;recipient&amp;#039;).getValue())##&lt;br /&gt;
    $mailObj.setTo($recipient)##&lt;br /&gt;
    ##&lt;br /&gt;
    ## Set the subject line and message body.&lt;br /&gt;
    $mailObj.setSubject($message.getProperty(&amp;#039;subjectLine&amp;#039;).getValue())##&lt;br /&gt;
    ##&lt;br /&gt;
    ## If text part is not set then we get an NPE when trying to craft a multipart message.&lt;br /&gt;
    $mailObj.setTextPart(&amp;#039;&amp;#039;)##&lt;br /&gt;
    ## Put all in email div so that we can apply CSS only to the email and not to the preview.&lt;br /&gt;
    $mailObj.setHtmlPart(&amp;quot;&amp;lt;div style=&amp;#039;font-size:87.5%;&amp;#039;&amp;gt;$message.getProperty(&amp;#039;messageBody&amp;#039;).getValue()&amp;lt;/div&amp;gt;&amp;quot;)##&lt;br /&gt;
    ##&lt;br /&gt;
    ## Send the message&lt;br /&gt;
    #if(&amp;quot;$sender.sendMail($mailObj, $senderConfig)&amp;quot; != 0)&lt;br /&gt;
      #setMessageStatus($message, &amp;#039;sendingFailed&amp;#039;)##&lt;br /&gt;
    #else&lt;br /&gt;
      #setMessageStatus($message, &amp;#039;pending&amp;#039;, $services.localization.render(&amp;#039;xe.invitation.messageSentLogEntry&amp;#039;))##&lt;br /&gt;
    #end&lt;br /&gt;
  #end&lt;br /&gt;
  ## Comment = &amp;quot;Added Email Message(s).&amp;quot;&lt;br /&gt;
  $emailContainer.saveAsAuthor($services.localization.render(&amp;#039;xe.invitation.sendMail.addMessageSaveComment&amp;#039;))&lt;br /&gt;
#end&lt;br /&gt;
##&lt;br /&gt;
#*&lt;br /&gt;
 * Generate invitation XObjects from a template, user input, and a set of recipients.&lt;br /&gt;
 *&lt;br /&gt;
 * $subjectLineTemplate (String) this will be evaluated as velocity and placed in the email subject line.&lt;br /&gt;
 *                               You may refer to $messageID and $subjectLine in the code.&lt;br /&gt;
 *&lt;br /&gt;
 * $messageBodyTemplate (String) this will be evaluated as velocity and placed in the email message body.&lt;br /&gt;
 *                               You may refer to $messageID, $messageBody, You may also use xwiki2.0 syntax&lt;br /&gt;
 *                               in the template.&lt;br /&gt;
 *&lt;br /&gt;
 * $emailClass (String) the document name of the XClass representing email messages.&lt;br /&gt;
 *&lt;br /&gt;
 * $recipients (List&amp;lt;String&amp;gt;) email addresses to send this message to.&lt;br /&gt;
 *&lt;br /&gt;
 * $emailRegex (String) the regular expression to validate the email addresses against. Undefined behavior will result&lt;br /&gt;
 *                      from an invalid expression.&lt;br /&gt;
 *&lt;br /&gt;
 * $userSuppliedSubject (String) the message subject. This can be modified or ignored by the template.&lt;br /&gt;
 *&lt;br /&gt;
 * $userSuppliedContent (String) the message content. This can be modified or ignored by the template.&lt;br /&gt;
 *&lt;br /&gt;
 * $messages (List&amp;lt;XObject&amp;gt;) this list will be populated with mail objects for each recipient.&lt;br /&gt;
 *&lt;br /&gt;
 * $emailContainer (Document) the document where the mail object will be stored for later review.&lt;br /&gt;
 *###&lt;br /&gt;
#macro(generateMailFromTemplate, $subjectLineTemplate, $messageBodyTemplate, $emailClass, $recipients, $emailRegex, &lt;br /&gt;
                                 $userSuppliedSubject, $userSuppliedContent, $messages, $emailContainer)&lt;br /&gt;
  #if($recipients &amp;amp;&amp;amp; $recipients.size() &amp;gt; 0)&lt;br /&gt;
    #set($sendTo = [])&lt;br /&gt;
    #set($discard = $sendTo.addAll($recipients))&lt;br /&gt;
    #set($invalid = [])&lt;br /&gt;
    #validateAddressFormat($recipients, $emailRegex, $invalid)&lt;br /&gt;
    #set($discard = $sendTo.removeAll($invalid))&lt;br /&gt;
    #set($messageGroupID = $mathtool.getRandom())&lt;br /&gt;
  #else&lt;br /&gt;
    ## If we&amp;#039;re just doing a test run, no recipients but we still want to generate a message.&lt;br /&gt;
    #set($sendTo = [&amp;#039;&amp;#039;])&lt;br /&gt;
  #end&lt;br /&gt;
  ##&lt;br /&gt;
  #foreach($recipient in $sendTo)&lt;br /&gt;
    #set($message = $emailContainer.newObject($emailClass))&lt;br /&gt;
    $message.set(&amp;#039;sendingUser&amp;#039;, $xcontext.getUser())##&lt;br /&gt;
    $message.set(&amp;#039;sentDate&amp;#039;, &amp;#039;&amp;#039;)##&lt;br /&gt;
    $message.set(&amp;#039;messageGroupID&amp;#039;, $messageGroupID)##&lt;br /&gt;
    $message.set(&amp;#039;recipient&amp;#039;, $recipient)##&lt;br /&gt;
    ## Set the message id to a random number string, set it to $messageID variable so it can be used by the template.&lt;br /&gt;
    #set($messageID = &amp;quot;$mathtool.getRandom().toString().replaceAll(&amp;#039;\.&amp;#039;,&amp;#039;&amp;#039;)##&lt;br /&gt;
                       $mathtool.getRandom().toString().replaceAll(&amp;#039;\.&amp;#039;,&amp;#039;&amp;#039;)##&lt;br /&gt;
                       $mathtool.getRandom().toString().replaceAll(&amp;#039;\.&amp;#039;,&amp;#039;&amp;#039;)&amp;quot;)&lt;br /&gt;
    $message.set(&amp;#039;messageID&amp;#039;, $messageID)##&lt;br /&gt;
    ##&lt;br /&gt;
    ## Need to make $subjectLine and $messageBody available to $doc.getRenderedContent.&lt;br /&gt;
    #set($subjectLine = &amp;quot;$!userSuppliedSubject&amp;quot;)&lt;br /&gt;
    #set($messageBody = &amp;quot;$!userSuppliedContent&amp;quot;)&lt;br /&gt;
    ##&lt;br /&gt;
    ## If the subject line provided by the user is empty then there will be trailing whitespace.&lt;br /&gt;
    ## xe.invitation.emailContent.subjectLine={0} has invited you to join {1} {2}&lt;br /&gt;
    #set($subjectLineWithWhitespace = &amp;quot;$doc.getRenderedContent($subjectLineTemplate, &amp;#039;xwiki/2.0&amp;#039;, &amp;#039;plain/1.0&amp;#039;)&amp;quot;)&lt;br /&gt;
    ##&lt;br /&gt;
    ## Generate the message from the template - html in the subject line is ignored by the mail client.&lt;br /&gt;
    $message.set(&amp;#039;subjectLine&amp;#039;, $subjectLineWithWhitespace.trim())##&lt;br /&gt;
    $message.set(&amp;#039;messageBody&amp;#039;, &amp;quot;$doc.getRenderedContent($messageBodyTemplate, &amp;#039;xwiki/2.0&amp;#039;)&amp;quot;)##&lt;br /&gt;
    #set($discard = $messages.add($message))&lt;br /&gt;
  #end&lt;br /&gt;
#end&lt;br /&gt;
##&lt;br /&gt;
#*&lt;br /&gt;
 * Check the format of an email address against a regular expression.&lt;br /&gt;
 *&lt;br /&gt;
 * $allAddresses (List&amp;lt;String&amp;gt;) The list of addresses to validate.&lt;br /&gt;
 *&lt;br /&gt;
 * $emailRegex (String) The regular expression to validate the email addresses agains. Undefined behavior will result&lt;br /&gt;
 *                      from an invalid expression.&lt;br /&gt;
 *&lt;br /&gt;
 * $invalidAddresses (List&amp;lt;String&amp;gt;) this List will be populated with addresses from $allAddresses which are invalid.&lt;br /&gt;
 *###&lt;br /&gt;
#macro(validateAddressFormat, $allAddresses, $emailRegex, $invalidAddresses)&lt;br /&gt;
  ## Perl/javascript regexes look like /^.*/&lt;br /&gt;
  ## java does not like the / at beginning and end.&lt;br /&gt;
  #if($emailRegex.length() &amp;gt; 1)&lt;br /&gt;
    #set($emailRegexInternal = $emailRegex.substring(1, $mathtool.add($emailRegex.length(), -1)))&lt;br /&gt;
  #else&lt;br /&gt;
    ## I don&amp;#039;t expect this but want to maintain compatibility.&lt;br /&gt;
    #set($emailRegexInternal = $emailRegex)&lt;br /&gt;
  #end&lt;br /&gt;
  #foreach($address in $allAddresses)&lt;br /&gt;
    #if(&amp;quot;$!address&amp;quot; == &amp;#039;&amp;#039;)&lt;br /&gt;
      ## Empty address, do nothing.&lt;br /&gt;
    #elseif($regextool.find($address, $emailRegexInternal).size() == 0)&lt;br /&gt;
      #set($discard = $invalidAddresses.add($address))&lt;br /&gt;
    #end&lt;br /&gt;
  #end&lt;br /&gt;
#end&lt;br /&gt;
##&lt;br /&gt;
#*&lt;br /&gt;
 * Display a form for typing up an invitation email.&lt;br /&gt;
 *&lt;br /&gt;
 * $recipientString (String) what should be filled in to the field for recipients.&lt;br /&gt;
 *&lt;br /&gt;
 * $subjectLine (String) what should be put in the subject line by default.&lt;br /&gt;
 *&lt;br /&gt;
 * $messageBody (String) what should be put in the content of the message by default.&lt;br /&gt;
 *&lt;br /&gt;
 * $userMaySendToMultiple (Boolean) true if the current user has permission send to multiple addresses at once.&lt;br /&gt;
 *&lt;br /&gt;
 * $userMayPersonalizeMessage (Boolean) true if the user may add their own subject line and message content.&lt;br /&gt;
 *###&lt;br /&gt;
#macro(displayForm, $recipientString, $subjectLine, $messageBody, $userMaySendToMultiple, $userMayPersonalizeMessage)&lt;br /&gt;
&lt;br /&gt;
  {{html clean=&amp;quot;false&amp;quot; wiki=&amp;quot;false&amp;quot;}}&lt;br /&gt;
  &amp;lt;form id=&amp;quot;invitation-sender-form&amp;quot; action=&amp;quot;$doc.getURL(&amp;#039;view&amp;#039;)&amp;quot; method=&amp;quot;post&amp;quot; class=&amp;quot;invitation&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;hidden&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;form_token&amp;quot; value=&amp;quot;$!{services.csrf.getToken()}&amp;quot; /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;dl&amp;gt;&lt;br /&gt;
    ## Who you are inviting:&lt;br /&gt;
    &amp;lt;dt&amp;gt;&amp;lt;label for=&amp;quot;recipients&amp;quot;&amp;gt;$services.localization.render(&amp;#039;xe.invitation.toLabel&amp;#039;)&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;
    ## If the user has edit access on this document, then we should allow them to send to multiple email addresses.&lt;br /&gt;
    #if($userMaySendToMultiple)&lt;br /&gt;
      &amp;lt;dd&amp;gt;&lt;br /&gt;
       &amp;lt;textarea cols=&amp;quot;75&amp;quot; name=&amp;quot;recipients&amp;quot; rows=&amp;quot;3&amp;quot; id=&amp;quot;recipients&amp;quot;&amp;gt;##&lt;br /&gt;
        $!recipientString##&lt;br /&gt;
       &amp;lt;/textarea&amp;gt;&lt;br /&gt;
      &amp;lt;/dd&amp;gt;&lt;br /&gt;
    #else&lt;br /&gt;
      &amp;lt;dd&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; size=&amp;quot;54&amp;quot; name=&amp;quot;recipients&amp;quot; id=&amp;quot;recipients&amp;quot; value=&amp;quot;$!recipientString&amp;quot; /&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;
    #end&lt;br /&gt;
    #if($userMayPersonalizeMessage)&lt;br /&gt;
       ## Subject line:&lt;br /&gt;
       &amp;lt;dt&amp;gt;&amp;lt;label for=&amp;quot;subjectLine&amp;quot;&amp;gt;$services.localization.render(&amp;#039;xe.invitation.subjectLabel&amp;#039;)&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;
       &amp;lt;dd&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; size=&amp;quot;54&amp;quot; name=&amp;quot;subjectLine&amp;quot; id=&amp;quot;subjectLine&amp;quot; value=&amp;quot;$!escapetool.xml($!subjectLine)&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dd&amp;gt;&lt;br /&gt;
       ## Invitation message:&lt;br /&gt;
       &amp;lt;dt&amp;gt;&amp;lt;label for=&amp;quot;messageBody&amp;quot;&amp;gt;$services.localization.render(&amp;#039;xe.invitation.contentLabel&amp;#039;)&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;
       &amp;lt;dd&amp;gt;&lt;br /&gt;
        &amp;lt;textarea cols=&amp;quot;75&amp;quot; name=&amp;quot;messageBody&amp;quot; rows=&amp;quot;10&amp;quot; id=&amp;quot;messageBody&amp;quot;&amp;gt;##&lt;br /&gt;
         $!escapetool.xml($!messageBody)##&lt;br /&gt;
        &amp;lt;/textarea&amp;gt;&lt;br /&gt;
       &amp;lt;/dd&amp;gt;&lt;br /&gt;
    #end&lt;br /&gt;
   &amp;lt;/dl&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;bottombuttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;buttons&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;buttonwrapper&amp;quot;&amp;gt;&lt;br /&gt;
      ## Preview&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; class=&amp;quot;button&amp;quot; name=&amp;quot;preview&amp;quot; value=&amp;quot;$services.localization.render(&amp;#039;xe.invitation.displayForm.preview&amp;#039;)&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span class=&amp;quot;buttonwrapper&amp;quot;&amp;gt;&lt;br /&gt;
      ## Send Mail&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; class=&amp;quot;button&amp;quot; name=&amp;quot;sendMail&amp;quot; value=&amp;quot;$services.localization.render(&amp;#039;xe.invitation.displayForm.sendMail&amp;#039;)&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
  {{/html}}&lt;br /&gt;
&lt;br /&gt;
#end&lt;br /&gt;
##&lt;br /&gt;
#*&lt;br /&gt;
 * Has mail sent by the current user been reported as spam?&lt;br /&gt;
 * will return &amp;#039;false&amp;#039; if not otherwise will return &amp;#039;true&amp;#039;&lt;br /&gt;
 * if a message was reported as spam but an admin has marked the situation&lt;br /&gt;
 * as handled then this macro will return &amp;#039;false&amp;#039;&lt;br /&gt;
 *&lt;br /&gt;
 * $messages (Collection&amp;lt;XObject&amp;gt;) objects representing all email messages.&lt;br /&gt;
 *###&lt;br /&gt;
#macro(isUserReportedSpammer, $messages)&lt;br /&gt;
  #set($out = &amp;#039;false&amp;#039;)&lt;br /&gt;
  #foreach($message in $messages)&lt;br /&gt;
     #if($message.getProperty(&amp;#039;sendingUser&amp;#039;).getValue() == $xcontext.getUser()&lt;br /&gt;
          &amp;amp;&amp;amp; $message.getProperty(&amp;#039;status&amp;#039;).getValue() == &amp;#039;reported&amp;#039;)&lt;br /&gt;
     ##&lt;br /&gt;
       #set($out = &amp;#039;true&amp;#039;)&lt;br /&gt;
     #end&lt;br /&gt;
  #end&lt;br /&gt;
  $out##&lt;br /&gt;
#end&lt;br /&gt;
##&lt;br /&gt;
#*&lt;br /&gt;
 * Get the list of recipients from the user input string.&lt;br /&gt;
 * Splits on space but is tolerent of commas.&lt;br /&gt;
 * Each email in the list may only appear in the output once (no duplicates.)&lt;br /&gt;
 *&lt;br /&gt;
 * $recipientString (String) the String input by the user eg: &amp;quot;alice@example.com bob@example.com&amp;quot;&lt;br /&gt;
 *&lt;br /&gt;
 * $userMaySendToMultiple (Boolean) is the user allowed to send to multiple addresses at once?&lt;br /&gt;
 *&lt;br /&gt;
 * $recipientsOut (List&amp;lt;String&amp;gt;) is populated with one or more email addresses.&lt;br /&gt;
 *###&lt;br /&gt;
#macro(getRecipients, $recipientString, $userMaySendToMultiple, $recipientsOut)&lt;br /&gt;
  #if($userMaySendToMultiple)&lt;br /&gt;
    #set($recipientsArray = $recipientString.replaceAll(&amp;#039;, &amp;#039;, &amp;#039; &amp;#039;).split(&amp;#039; &amp;#039;))&lt;br /&gt;
    #set($recipientMap = {})&lt;br /&gt;
    #foreach($recip in $recipientsArray)&lt;br /&gt;
      #set($discard = $recipientMap.put($recip, 0))&lt;br /&gt;
    #end&lt;br /&gt;
    #set($discard = $recipientsOut.addAll($recipientMap.keySet()))&lt;br /&gt;
  #else&lt;br /&gt;
    ## If the user can&amp;#039;t edit this page, we won&amp;#039;t let them sent to multiple addresses.&lt;br /&gt;
    #set($discard = $recipientsOut.add($recipientString))&lt;br /&gt;
  #end&lt;br /&gt;
#end&lt;br /&gt;
{{/velocity}}&lt;/div&gt;</summary>
		<author><name>Administrator</name></author>
	</entry>
</feed>