Wiki source code of Public Web Site

Version 4.9 by Alex Cotiugă on 2026/05/01 13:05

Show last authors
1 {{velocity}}
2 #macro (displayPublicContent)
3 #set ($discard = $xwiki.ssx.use('PublicWebSite.WebHome'))
4 {{html clean="false"}}
5
6 ## LANDING HERO
7 <section class="landing-hero" aria-labelledby="hero-title">
8 <div class="container landing-hero-inner">
9 <h1 id="hero-title">Keep Your XWiki Platform Secure, Stable and Up-to-Date</h1>
10 <p class="lead">
11 Helping organizations safely upgrade, maintain, customize, and integrate their XWiki environments.
12 </p>
13
14 <ul class="benefits">
15 <li><a href="/services/xwiki-upgrades">Smooth upgrades</a></li>
16 <li>Reliable support plans</li>
17 <li>Custom integrations</li>
18 <li>Secure, optimized platforms</li>
19 </ul>
20
21 <div class="cta-row">
22 <a class="btn-main" href="mailto:alex@agnease.com">Contact Agnease</a>
23 <a class="btn-secondary" href="/services">View services</a>
24 </div>
25 </div>
26 </section>
27
28 ## WHY CHOOSE
29 #set ($whySectionData = [{
30 'title': 'Stability & security',
31 'icon': 'shield',
32 'content': 'Proven upgrade steps, rollback safety, and proactive hardening keep your wiki reliable.',
33 'url': '/services/xwiki-upgrades'
34 },{
35 'title': 'Predictable delivery',
36 'icon': 'check-square-o',
37 'content': 'Clear scope, defined steps, and documented results to avoid surprises.',
38 'url': ''
39 },{
40 'title': 'Clean integrations',
41 'icon': 'link',
42 'content': 'Maintainable SSO, API, and system connections tailored to your environment.',
43 'url': '/services/xwiki-integrations'
44 },{
45 'title': 'Long-term support',
46 'icon': 'life-ring',
47 'content': 'Guaranteed response times, regular checks, and fast assistance when needed.',
48 'url': '/services/xwiki-maintenance-support'
49 }])
50
51 <section aria-labelledby="why-title">
52 <div class="container">
53 <h2 id="why-title">Why choose Agnease</h2>
54 <p class="lead">10+ years of XWiki expertise with structured delivery and lasting collaboration</p>
55
56 <div class="widgets">
57 #foreach ($entry in $whySectionData)
58 <article class="widget">
59 <div class="icon" aria-hidden="true">
60 <i class="fa fa-$entry.icon"></i>
61 <h4>$entry.title</h4>
62 </div>
63 <p>$entry.content</p>
64 #if ($entry.url && $entry.url != '')
65 <p class="card-link"><a href="$entry.url">Learn more</a></p>
66 #end
67 </article>
68 #end
69 </div>
70 </div>
71 </section>
72
73 ## SERVICES
74 #set ($servicesSectionData = [{
75 'title': 'XWiki Upgrades',
76 'icon': 'refresh',
77 'url': '/services/xwiki-upgrades',
78 'content': 'Stay current with the latest XWiki LTS and reduce security, stability, and compatibility risks.',
79 'items': [
80 'Audit setup, extensions, and configurations',
81 'Test upgrades with backups and validation',
82 'Safe production rollout with minimal downtime'
83 ]
84 },{
85 'title': 'Maintenance, Support & Recovery',
86 'icon': 'stethoscope',
87 'url': '/services/xwiki-maintenance-support',
88 'content': 'Ensure long-term stability and quick response when issues appear.',
89 'items': [
90 'Monitoring and performance checks',
91 'Security patching, log analysis, triage',
92 'Issue recovery, data repair, hardening'
93 ]
94 },{
95 'title': 'Development & Integrations',
96 'icon': 'cogs',
97 'url': '/services/xwiki-development-integrations',
98 'content': 'Extend and connect XWiki to fit your workflow and systems.',
99 'items': [
100 'Custom apps, macros, automation',
101 'SSO, REST APIs, LDAP, CRM links',
102 'Maintainable extensions for long-term use'
103 ]
104 },{
105 'title': 'Hosting & Deployment',
106 'icon': 'cloud',
107 'url': '/services/xwiki-hosting-deployment',
108 'content': 'Cloud-ready environments designed for reliability and performance.',
109 'items': [
110 'Containerized deployment and TLS',
111 'Backups, restore strategy, observability',
112 'Optimization and load tuning'
113 ]
114 },{
115 'title': 'Migrations to XWiki',
116 'icon': 'exchange',
117 'url': '/services/xwiki-migrations',
118 'content': 'Move from Confluence, SharePoint, or MediaWiki to XWiki with full data integrity and structure.',
119 'items': [
120 'Preserve hierarchy, attachments, and permissions',
121 'Convert macros, categories, and metadata for XWiki',
122 'Redirect old URLs and maintain SEO consistency'
123 ]
124 }])
125
126 <section class="services" aria-labelledby="services-title">
127 <div class="container">
128 <h2 id="services-title">Services</h2>
129 <p class="lead">All the XWiki services you need, delivered with precision and care</p>
130
131 <div class="services-grid">
132 #foreach ($entry in $servicesSectionData)
133 <article class="service">
134 <div class="service-icon">
135 <i class="fa fa-$entry.icon" aria-hidden="true"></i>
136 </div>
137 <div class="service-body">
138 <h4>
139 #if ($entry.url && $entry.url != '')
140 <a href="$entry.url">$entry.title</a>
141 #else
142 $entry.title
143 #end
144 </h4>
145 <p>$entry.content</p>
146 <ul>
147 #foreach ($item in $entry.items)
148 <li>$item</li>
149 #end
150 </ul>
151 #if ($entry.url && $entry.url != '')
152 <p class="service-link"><a href="$entry.url">Learn more</a></p>
153 #end
154 </div>
155 </article>
156 #end
157 </div>
158 </div>
159 </section>
160
161 ## CTA
162 <section id="contact" class="cta-section">
163 <div class="container">
164 <p class="text-center contact-inline">
165 Need help with your XWiki? <a href="mailto:alex@agnease.com">Contact Agnease</a>.
166 </p>
167 </div>
168 </section>
169 {{/html}}
170 #end
171
172 #macro(requestConsultationModal)
173 <div class="modal fade" id="requestConsultation" tabindex="-1" role="dialog">
174 <div class="modal-dialog">
175 <div class="modal-content">
176 <div class="modal-header">
177 <button type="button" class="close" data-dismiss="modal">&times;</button>
178 <h4 class="modal-title">Request a consultation</h4>
179 </div>
180 <div class="modal-body">
181 <div>
182 ##Need help with your XWiki? <a href="mailto:alex@agnease.com">Contact Agnease</a>
183 #displayFormFromSheetCode()
184 </div>
185 </div>
186 <div class="modal-footer">
187 ##<input id="continueCategorySelection" type="button" class="btn btn-default" data-dismiss="modal"
188 ## value="$escapetool.xml($services.localization.render('yesno_1'))">
189 </div>
190 </div>
191 </div>
192 </div>
193 #end
194
195 #macro (stripHTMLMacro $displayOutput)
196 $stringtool.removeEnd($stringtool.removeStart($displayOutput, '{{html clean="false" wiki="false"}}'), '{{/html}}').replace('Agnease.Code.Lead.LeadClass_0_', 'acl-')
197 #end
198
199 #macro (displayFormFromSheetCode)
200 #set ($editing = true)
201 ## The object to display.
202 #set ($xobject = $doc.newObject('Agnease.Code.Lead.LeadClass'))
203 ## The class that describes the object properties.
204 #set ($xclass = $xwiki.getClass('Agnease.Code.Lead.LeadClass'))
205 ## Make sure the following display* method calls use the right object.
206 #set ($discard = $doc.use($xobject))
207 ## Using the xform vertical form layout.
208 <div class="xform">
209 <dl>
210 #foreach ($property in $xclass.properties)
211 #if ($property.name != 'status')
212 <dt #if (!$editing)
213 class="editableProperty"
214 #set ($xobjectPropertyReference = $xobject.getPropertyReference($property.name))
215 data-property="$escapetool.xml($services.model.serialize($xobjectPropertyReference))"
216 data-property-type="object"#end>
217 ## This must match the id generated by the $doc.display() method below.
218 #set ($propertyId = "acl-$property.name")
219 <label#if ($editing) for="$escapetool.xml($propertyId)"#end>
220 $escapetool.xml($property.translatedPrettyName)
221 </label>
222 ## Support for specifying a translation key as hint in the property definition.
223 <span class="xHint">$!escapetool.xml($services.localization.render($property.hint))</span>
224 </dt>
225 #set ($displayOutput = $doc.display($property.name, 'edit'))
226 <dd>#stripHTMLMacro($displayOutput)</dd>
227 #end
228 #end
229 #if (!$xclass.properties || $xclass.properties.size() == 0)
230 ## Keep the empty definition term in order to have valid HTML.
231 <dt></dt>
232 <dd>$escapetool.xml($services.localization.render('xclass.defaultObjectSheet.noProperties'))</dd>
233 #end
234 </dl>
235 </div>
236 #end
237 {{/velocity}}