Last modified by Alex Cotiuga on 2026/07/27 06:09

From version 18.25
edited by Alex Cotiuga
on 2026/07/09 20:47
Change comment: There is no comment for this version
To version 18.30
edited by Alex Cotiuga
on 2026/07/13 06:41
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -135,6 +135,48 @@
135 135   #end
136 136  
137 137   #set ($discard = $contactRequestDoc.saveAsAuthor())
138 + ## Send internal notification email.
139 + ## This is intentionally best-effort: if email fails, the contact request is still saved.
140 + #try('mailException')
141 + #set ($notificationRecipient = 'alex@agnease.com')
142 + #set ($notificationSubject = 'New Agnease contact request')
143 + #set ($notificationBody = "
144 + Name:
145 + $!contactRequestObj.getValue('name')
146 +
147 + Email:
148 + $!contactRequestObj.getValue('email')
149 +
150 + Source page:
151 + $!contactRequestObj.getValue('sourcePage')
152 +
153 + Already uses XWiki:
154 + $!contactRequestObj.get('alreadyUseXWiki')
155 +
156 + Hosting:
157 + $!contactRequestObj.get('hosting')
158 +
159 + Custom development:
160 + $!contactRequestObj.get('customDevelopment')
161 +
162 + Timeline:
163 + $!contactRequestObj.get('timeline')
164 +
165 + Users:
166 + $!contactRequestObj.get('users')
167 +
168 + Message:
169 + $!contactRequestObj.getValue('scope')
170 +
171 + Internal request page:
172 + $contactRequestDoc.getExternalURL()
173 + ")
174 +
175 + #set ($message = $services.mail.sender.createMessage($notificationRecipient, $notificationSubject))
176 + #set ($discard = $message.setType('Agnease Contact Request'))
177 + #set ($discard = $message.addPart('text/plain', $notificationBody))
178 + #set ($mailResult = $services.mail.sender.sendAsynchronously([$message], 'database'))
179 + #end
138 138   #set ($statusCode = 200)
139 139   #set ($message = 'Your request was successfully sent.')
140 140   #end
... ... @@ -159,7 +159,8 @@
159 159  = Tell Us More About Your Project =
160 160  You do not need to have a full specification. A short description is enough to start the conversation.
161 161  {{html clean="false"}}
162 -You can also <a href="https://calendly.com/alex-agnease/30min?back=1&month=2026-06" target="_blank">book a free XWiki review call</a> to discuss your current setup.
204 + You can also <a href="https://calendly.com/alex-agnease/30min?back=1&month=2026-06" target="_blank">book a free XWiki review call</a> to discuss your current setup.
205 + Looking for a starting point first? <a href="$xwiki.getURL('pricing.WebHome')">View XWiki service packages and starting prices</a>.
163 163   <div class="row">
164 164   <div class="xform col-md-7">
165 165   #if ($totalRequests.size() > 50)