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

From version 18.7
edited by Alex Cotiuga
on 2026/07/09 19:57
Change comment: There is no comment for this version
To version 18.23
edited by Alex Cotiuga
on 2026/07/09 20:39
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -121,12 +121,15 @@
121 121  
122 122   ## Save only known ContactRequest fields.
123 123   #foreach ($parameterName in $request.parameterNames)
124 + #if ($parameterName == 'sourcePage')
125 + #set ($discard = $contactRequestObj.set($parameterName, $stringtool.trim($request.get($parameterName))))
126 + #end
124 124   #set ($propertyParts = $parameterName.split('_0_'))
125 125   #if ($propertyParts.size() > 1)
126 126   #set ($propertyName = $propertyParts[1])
127 127  
128 128   #if ($allowedProperties.contains($propertyName))
129 - #set ($discard = $contactRequestObj.set($propertyName, $request.get($parameterName)))
132 + #set ($discard = $contactRequestObj.set($propertyName, $stringtool.trim($request.get($parameterName))))
130 130   #end
131 131   #end
132 132   #end
... ... @@ -167,9 +167,9 @@
167 167   <form id="contactForm">
168 168   <dl>
169 169   #foreach ($property in $xclass.properties)
170 - #set ($hiddenPropertiesCSSClass = '')
173 + #set ($hiddenPropertiesCSS = '')
171 171   #if ($hiddenProperties.contains($property.name))
172 - #set ($hiddenPropertiesCSSClass = 'hidden')
175 + #set ($hiddenPropertiesCSS = 'class="hidden"')
173 173   #end
174 174   #if ($property.name == 'hosting')
175 175   <hr>
... ... @@ -176,7 +176,7 @@
176 176   <h3>Optional project details</h3>
177 177   <p>These details help us understand the scope and suggest practical next steps.</p>
178 178   #end
179 - <dt #if (!$editing && $hasEdit)
182 + <dt $hiddenPropertiesCSS #if (!$editing && $hasEdit)
180 180   class="editableProperty"
181 181   #set ($xobjectPropertyReference = $xobject.getPropertyReference($property.name))
182 182   data-property="$escapetool.xml($services.model.serialize($xobjectPropertyReference))"
... ... @@ -189,7 +189,7 @@
189 189   ## Support for specifying a translation key as hint in the property definition.
190 190   <span class="xHint">$!escapetool.xml($services.localization.render($property.hint))</span>
191 191   </dt>
192 - <dd>$doc.display($property.name, 'edit').replace('{{html clean="false" wiki="false"}}', '').replace("{{/html}}", '')</dd>
195 + <dd $hiddenPropertiesCSS>$doc.display($property.name, 'edit').replace('{{html clean="false" wiki="false"}}', '').replace("{{/html}}", '')</dd>
193 193   #end
194 194   #if (!$xclass.properties || $xclass.properties.size() == 0)
195 195   ## Keep the empty definition term in order to have valid HTML.
... ... @@ -210,6 +210,7 @@
210 210   />
211 211   </div>
212 212   <input type="hidden" name="Agnease.Code.ContactRequest.ContactRequestClass_0_contactStartedAt" value="$datetool.systemDate.time" />
216 + <input type="hidden" name="sourcePage" value="" />
213 213   <input id="contactSubmit" type="submit" class="btn btn-primary" value="Send my request">
214 214   </form>
215 215   #end
XWiki.JavaScriptExtension[1]
cache
... ... @@ -1,0 +1,1 @@
1 +long
code
... ... @@ -1,0 +1,32 @@
1 +require(['jquery'], function ($) {
2 + $(function () {
3 + var sourcePageField = $('input[name="sourcePage"]');
4 +
5 + if (!sourcePageField.length || sourcePageField.val()) {
6 + return;
7 + }
8 +
9 + if (!document.referrer) {
10 + return;
11 + }
12 +
13 + try {
14 + var referrerUrl = new URL(document.referrer);
15 +
16 + if (referrerUrl.origin !== window.location.origin) {
17 + return;
18 + }
19 +
20 + var sourcePage = referrerUrl.pathname
21 + .replace(/^\/bin\//, '')
22 + .replace(/\/$/, '')
23 + .replace(/\//g, '.');
24 +
25 + if (sourcePage) {
26 + sourcePageField.val(sourcePage);
27 + }
28 + } catch (e) {
29 + // Ignore invalid referrer values.
30 + }
31 + });
32 +});
name
... ... @@ -1,0 +1,1 @@
1 +document referrer catcher
use
... ... @@ -1,0 +1,1 @@
1 +currentPage