diff --git a/.github/renovate.json5 b/.github/renovate.json5
index b25cec76bf08..0eb39e28c67a 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -30,16 +30,36 @@
"ignoreDeps": ["org.eclipse.m2e:lifecycle-mapping"],
"packageRules": [
- // Indicate the URL to the XWiki Nexus public proxy for non-Central Maven dependencies
+ // Add the URL to the XWiki Nexus public proxy for non-Central Maven dependencies
{
"matchDatasources": ["maven"],
- "registryUrls": ["https://nexus.xwiki.org/nexus/content/repositories/public/"]
+ "registryUrls": ["https://repo1.maven.org/maven2/", "https://nexus.xwiki.org/nexus/content/repositories/public/"]
},
// There is no point trying to find updates for commons, rendering and platform dependencies
{
"matchPackagePrefixes": ["org.xwiki.commons:", "org.xwiki.rendering:", "org.xwiki.platform:", "org.xwiki.enterprise:"],
"enabled": false
+ },
+
+ // Automatically assign npm packages to @manuelleduc
+ {
+ "matchDatasources": ["npm"],
+ "assignees": ["manuelleduc"]
+ },
+
+ // Automatically assign webjars packages to @mflorea
+ {
+ "matchDatasources": ["maven"],
+ "matchPackageNames": ["org.webjars*"],
+ "assignees": ["mflorea"]
+ },
+
+ // Automatically assign other Maven dependencies to @tmortagne
+ {
+ "matchDatasources": ["maven"],
+ "matchPackageNames": ["!org.webjars*"],
+ "assignees": ["tmortagne"]
}
]
}
diff --git a/.gitignore b/.gitignore
index ef32a379f2c3..7d98000558ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,8 +53,9 @@ nbproject
# Visual Studio Code
.vscode
-# Gradle Enterprise
+# Gradle Enterprise/Develocity
.mvn/.gradle-enterprise
+.mvn/.develocity
# Debugging stuff to not commit
xwiki-platform-core/xwiki-platform-search/xwiki-platform-search-solr/xwiki-platform-search-solr-api/src/main/resources/xwiki-platform-search-solr-server-core.zip
diff --git a/.mvn/gradle-enterprise-custom-user-data.groovy b/.mvn/develocity-custom-user-data.groovy
similarity index 90%
rename from .mvn/gradle-enterprise-custom-user-data.groovy
rename to .mvn/develocity-custom-user-data.groovy
index 153c8d0bc849..898ad836da63 100644
--- a/.mvn/gradle-enterprise-custom-user-data.groovy
+++ b/.mvn/develocity-custom-user-data.groovy
@@ -17,19 +17,14 @@
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
-import com.gradle.maven.extension.api.scan.BuildScanApi
+import com.gradle.develocity.agent.maven.adapters.BuildScanApiAdapter
/**
* Captures the Maven active profiles and add them as tags to the Build Scan. The goal is to make it simpler to
* filter builds on https://ge.xwiki.org by filtering on Maven profiles.
*/
-BuildScanApi buildScan = session.lookup('com.gradle.maven.extension.api.scan.BuildScanApi')
-if (!buildScan) {
- return
-}
-
-buildScan.executeOnce('tag-profiles') { BuildScanApi buildScanApi ->
+buildScan.executeOnce('tag-profiles') { BuildScanApiAdapter buildScanApi ->
// Add all maven profile names as tags
project.activeProfiles.each { buildScanApi.tag(it.id) }
@@ -55,5 +50,3 @@ buildScan.executeOnce('tag-profiles') { BuildScanApi buildScanApi ->
buildScanApi.tag(browser.toLowerCase())
}
}
-
-
diff --git a/.mvn/gradle-enterprise.xml b/.mvn/develocity.xml
similarity index 76%
rename from .mvn/gradle-enterprise.xml
rename to .mvn/develocity.xml
index 4646b5ae439b..b89cde487925 100644
--- a/.mvn/gradle-enterprise.xml
+++ b/.mvn/develocity.xml
@@ -20,26 +20,27 @@
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
-
+
https://ge.xwiki.org
- true
- #{env['CI'] == null ? 'ON_DEMAND' : 'ALWAYS'}
+
+
+
true
- #{env['CI'] == null}
+
@@ -48,19 +49,19 @@
true
- #{isTrue(env['CI']) and isTrue(env['GRADLE_ENTERPRISE_ACCESS_KEY'])}
+ #{env['CI'] != null}
-
- gradleEnterpriseCache
+
+ develocityCache
https://eu-build-cache-ge.xwiki.org/cache/
-
+
diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml
index 8d77fefe456d..adfffe5c7097 100644
--- a/.mvn/extensions.xml
+++ b/.mvn/extensions.xml
@@ -20,15 +20,16 @@
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
-
+
com.gradle
- gradle-enterprise-maven-extension
- 1.20.1
+ develocity-maven-extension
+ 1.22.2
com.gradle
common-custom-user-data-maven-extension
- 1.13
+ 2.0.1
diff --git a/Jenkinsfile b/Jenkinsfile
index 5bc48fd26ef9..d1c3278b9aa6 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -114,19 +114,29 @@ def builds = [
)
},
'Quality' : {
- // Run the quality checks.
- // Sonar notes:
- // - we need sonar:sonar to perform the analysis and push the results to Sonarcloud
- // - we need jacoco:report to execute jacoco and compute test coverage
- // - we need -Pcoverage and -Dxwiki.jacoco.itDestFile to tell Jacoco to compute a single global Jacoco
- // coverage for the full reactor (so that the coverage percentage computed takes into account module tests
- // which cover code in other modules)
- build(
- name: 'Quality',
- goals: 'clean install jacoco:report sonar:sonar',
- profiles: 'quality,legacy,coverage',
- properties: '-Dxwiki.jacoco.itDestFile=`pwd`/target/jacoco-it.exec'
- )
+ node() {
+ // Run the quality checks.
+ // Notes for step 1:
+ // - The build executes jacoco to generate a single jacoco exec file containing the results of the coverage
+ // for all tests from all modules. This why we need -Pcoverage and -Dxwiki.jacoco.itDestFile.
+ buildInsideNode(
+ name: 'Quality Step 1',
+ goals: 'clean install',
+ profiles: 'repository-snapshots,quality,legacy,coverage',
+ properties: '-Dxwiki.jacoco.itDestFile=`pwd`/target/jacoco-it.exec'
+ )
+ // Notes for step 2:
+ // - We generate the jacoco reports for all modules (all from the single jacoco-it.exec file)
+ // - We then generate the sonar analysis and upload to Sonarcloud with the sonar:sonar goal.
+ // - Sonar uses the jacoco report files and it's thus important that the sonar:sonar goal is executed after
+ // the jacoco:report one.
+ buildInsideNode(
+ name: 'Quality Step 2',
+ goals: 'jacoco:report sonar:sonar',
+ profiles: 'repository-snapshots,quality,legacy,coverage',
+ properties: '-Dxwiki.jacoco.itDestFile=`pwd`/target/jacoco-it.exec'
+ )
+ }
}
]
@@ -284,6 +294,8 @@ private void buildInsideNode(map)
// Keep builds for 30 days since we want to be able to see all builds if there are a lot at a given time, to be
// able to identify flickers, etc.
daysToKeepStr = '30'
+ // We don't need to trigger xwiki-platform monthly since it's already the case of xwiki-commons
+ monthlyTrigger = false
if (map.pom != null) {
pom = map.pom
}
diff --git a/pom.xml b/pom.xml
index fae5e9c5f126..44f68329bf00 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
org.xwiki.commons
xwiki-commons-pom
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
@@ -50,34 +50,37 @@
${commons.version}
- 3.4.1
- 1.17
+ 1.18
2.3.12
- 2.9.1
- 2.0.30
+ 2.9.2
+ 2.0.31
2.1.5
- 10.0.20
- ${jetty.server.version}
+ 12.0.12
+ 10.0.24
${jetty.client.version}
- 4.1.108.Final
+
+ 2.0.13
+ 4.1.114.Final
5.6.15.Final
- 3.3.6
- 1.4.2
+ 3.4.0
+ 1.4.3
9
9.4.1
9.8.0
- 2.42
+ 2.45
2.6.1
3.9.2
- 1.19.7
+ 1.20.2
- 7.6.5
+ 24.2.6
false
@@ -105,26 +108,26 @@
org.hsqldb
hsqldb
- 2.7.2
+ 2.7.3
com.mysql
mysql-connector-j
- 8.3.0
+ 9.0.0
org.mariadb.jdbc
mariadb-java-client
- 3.3.3
+ 3.4.1
org.apache.derby
derby
10.14.2.0
org.postgresql
postgresql
- 42.7.2
+ 42.7.4
com.oracle.database.jdbc
ojdbc11
- 21.11.0.0
+ 21.15.0.0
- v20.11.1
- 10.4.0
+ v20.12.0
+ 10.5.1
scm:git:git://github.com/xwiki/xwiki-platform.git
@@ -147,12 +150,12 @@
com.mchange
mchange-commons-java
- 0.3.0
+ 0.3.1
com.mchange
c3p0
- 0.9.5.5
+ 0.10.1
@@ -179,7 +182,7 @@
org.liquibase
liquibase-core
- 4.26.0
+ 4.29.2
@@ -195,7 +198,7 @@
org.python
jython-slim
- 2.7.3
+ 2.7.4
@@ -438,13 +441,13 @@
joda-time
joda-time
- 2.12.7
+ 2.13.0
org.webjars
requirejs
- 2.3.6
+ 2.3.7
runtime
@@ -453,6 +456,18 @@
3.7.1
runtime
+
+ org.webjars
+ jquery-ui
+ 1.13.3
+ runtime
+
+
+ org.webjars
+ jquery-ui-touch-punch
+ 0.2.3-2
+ runtime
+
org.webjars
prototype
@@ -470,6 +485,12 @@
bootstrap-select
1.13.18
runtime
+
+
+ org.webjars
+ bootstrap
+
+
org.webjars.npm
@@ -477,12 +498,6 @@
4.0.2
runtime
-
- org.webjars
- bootstrap
- ${bootstrap.version}
- runtime
-
org.webjars
Keypress
@@ -500,12 +515,24 @@
bootstrap-daterangepicker
3.1
runtime
+
+
+ org.webjars
+ bootstrap
+
+
org.webjars
selectize.js
0.13.3
runtime
+
+
+ org.webjars
+ bootstrap
+
+
@@ -583,12 +610,12 @@
net.java.dev.jna
jna
- 5.14.0
+ 5.15.0
net.java.dev.jna
jna-platform
- 5.14.0
+ 5.15.0
@@ -605,7 +632,7 @@
org.jsoup
jsoup
- 1.17.2
+ 1.18.1
@@ -670,7 +697,7 @@
org.apache.xmlgraphics
xmlgraphics-commons
- 2.9
+ 2.10
@@ -685,6 +712,12 @@
bootstrap-switch
3.3.4
runtime
+
+
+ org.webjars
+ bootstrap
+
+
@@ -729,7 +762,7 @@
io.sf.carte
css4j
- 4.2.2
+ 5.0
io.sf.carte
@@ -741,7 +774,7 @@
io.sf.carte
css4j-dom4j
- 4.2
+ 5.0
@@ -749,7 +782,7 @@
io.sf.carte
xml-dtd
- 4.2.1
+ 4.3
@@ -973,6 +1006,11 @@
+
+ org.apache.solr
+ solr-analysis-extras
+ ${solr.version}
+
org.apache.lucene
lucene-backward-codecs
@@ -981,22 +1019,22 @@
org.xerial.snappy
snappy-java
- 1.1.10.5
+ 1.1.10.7
org.apache.calcite
calcite-core
- 1.36.0
+ 1.37.0
org.apache.calcite
calcite-linq4j
- 1.36.0
+ 1.37.0
org.apache.calcite.avatica
avatica-core
- 1.24.0
+ 1.25.0
org.apache.zookeeper
@@ -1330,8 +1368,8 @@
- com.tdunning:json
- org.json:json/20180130
+ org.json:json
+ com.tdunning:json
@@ -1530,6 +1568,13 @@
aopalliance:aopalliance
org.glassfish.hk2.external:aopalliance-repackaged
+
+ jakarta.ws.rs:jakarta.ws.rs-api
+
+ javax.ws.rs:jsr311-api,
+ org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec
+
+
@@ -1547,7 +1592,7 @@
com.github.eirslett
frontend-maven-plugin
- 1.15.0
+ 1.15.1
@@ -1641,6 +1686,26 @@
+
+
+ enforce-bootstrap-platform
+
+ enforce
+
+
+
+
+ true
+
+ Do not use the official org.webjar:bootstrap extension. Is it now packaged in xwiki platform.
+
+
+ org.webjars:bootstrap
+
+
+
+
+
enforcer-banneddependencytype-xar
@@ -1726,7 +1791,6 @@
org.xwiki.platform:xwiki-platform-livetable
flaviusolaru:navigation-menu-wiki-macro
lucaa:navigationmenuconfigapplication
- xwiki-platform-messagestream
org.xwiki.platform:xwiki-platform-model
org.xwiki.platform:xwiki-platform-filter-instance-oldcore
org.xwiki.platform:xwiki-platform-panels
@@ -1830,8 +1894,8 @@
xwiki-snapshots
- XWiki Nexus Plugin Snapshot Repository Proxy
- https://nexus.xwiki.org/nexus/content/groups/public-snapshots
+ XWiki Nexus Plugin Snapshot Repository
+ https://nexus-snapshots.xwiki.org/repository/snapshots
false
@@ -1854,8 +1918,8 @@
xwiki-snapshots
- XWiki Nexus Snapshot Repository Proxy
- https://nexus.xwiki.org/nexus/content/groups/public-snapshots
+ XWiki Nexus Snapshot Repository
+ https://nexus-snapshots.xwiki.org/repository/snapshots
false
diff --git a/xwiki-platform-core/pom.xml b/xwiki-platform-core/pom.xml
index ba1ce18923e5..12d6a5a6335f 100644
--- a/xwiki-platform-core/pom.xml
+++ b/xwiki-platform-core/pom.xml
@@ -23,7 +23,7 @@
org.xwiki.platform
xwiki-platform
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
xwiki-platform-core
XWiki Platform - Core - Parent POM
@@ -138,130 +138,10 @@
Single justification example:
-->
-
- Was never meant to be an API.
- highlight
-
- -
- true
-
java.field.removed
- field org.xwiki.search.solr.AbstractSolrCoreInitializer.fields
-
- -
- true
-
java.field.removed
- field org.xwiki.search.solr.AbstractSolrCoreInitializer.types
-
- -
- true
-
java.field.visibilityReduced
- field org.xwiki.search.solr.AbstractSolrCoreInitializer.solrSchemaUtils
- field org.xwiki.search.solr.AbstractSolrCoreInitializer.solrSchemaUtils
- protected
- private
-
-
-
-
- Should have never been public in the first place and is deprecated since 9.8RC1.
- highlight
-
- -
- true
-
java.class.removed
- class org.xwiki.rest.Constants
-
-
-
-
- Not runtime breakages from REST API point of view and not supposed to be called in Java
- highlight
-
- -
- true
-
java.method.numberOfParametersChanged
- method javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::postNotifications() throws java.lang.Exception
- method javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::postNotifications(java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
-
- -
- true
-
java.method.returnTypeChanged
- method java.util.Map<java.lang.String, java.lang.String> org.xwiki.image.style.rest.ImageStylesResource::getDefaultStyleIdentifier(java.lang.String, java.lang.String) throws org.xwiki.image.style.ImageStyleException
- method javax.ws.rs.core.Response org.xwiki.image.style.rest.ImageStylesResource::getDefaultStyleIdentifier(java.lang.String, java.lang.String) throws org.xwiki.image.style.ImageStyleException
-
- -
- true
-
java.annotation.added
- parameter javax.ws.rs.core.Response org.xwiki.rest.resources.attachments.AttachmentsResource::addAttachment(java.lang.String, java.lang.String, java.lang.String, ===javax.mail.Multipart===, java.lang.Boolean, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException, org.xwiki.attachment.validation.AttachmentValidationException
- parameter javax.ws.rs.core.Response org.xwiki.rest.resources.attachments.AttachmentsResource::addAttachment(java.lang.String, java.lang.String, java.lang.String, ===java.lang.Boolean===, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException, org.xwiki.attachment.validation.AttachmentValidationException
- @javax.ws.rs.DefaultValue("false")
-
- -
- true
-
java.annotation.added
- parameter javax.ws.rs.core.Response org.xwiki.rest.resources.attachments.AttachmentsResource::addAttachment(java.lang.String, java.lang.String, java.lang.String, ===javax.mail.Multipart===, java.lang.Boolean, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException, org.xwiki.attachment.validation.AttachmentValidationException
- parameter javax.ws.rs.core.Response org.xwiki.rest.resources.attachments.AttachmentsResource::addAttachment(java.lang.String, java.lang.String, java.lang.String, ===java.lang.Boolean===, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException, org.xwiki.attachment.validation.AttachmentValidationException
- @javax.ws.rs.QueryParam("prettyNames")
-
- -
- true
-
java.annotation.attributeValueChanged
- parameter javax.ws.rs.core.Response org.xwiki.rest.resources.attachments.AttachmentsResource::addAttachment(java.lang.String, java.lang.String, java.lang.String, javax.mail.Multipart, ===java.lang.Boolean===, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException, org.xwiki.attachment.validation.AttachmentValidationException
- parameter javax.ws.rs.core.Response org.xwiki.rest.resources.attachments.AttachmentsResource::addAttachment(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, ===java.lang.Boolean===) throws org.xwiki.rest.XWikiRestException, org.xwiki.attachment.validation.AttachmentValidationException
- javax.ws.rs.QueryParam
- value
- "prettyNames"
- "createPage"
-
- -
- true
-
java.method.numberOfParametersChanged
- method javax.ws.rs.core.Response org.xwiki.rest.resources.attachments.AttachmentsResource::addAttachment(java.lang.String, java.lang.String, java.lang.String, javax.mail.Multipart, java.lang.Boolean, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException, org.xwiki.attachment.validation.AttachmentValidationException
- method javax.ws.rs.core.Response org.xwiki.rest.resources.attachments.AttachmentsResource::addAttachment(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException, org.xwiki.attachment.validation.AttachmentValidationException
-
-
-
-
- Very specific to Restlet and not supposed to be called in Java
- highlight
-
- -
- true
-
java.method.removed
- method java.lang.String org.xwiki.rest.XWikiResource::getUriTemplate()
-
-
-
-
- Was actually internal classes exposed through public APIs
- highlight
-
- -
- true
-
java.class.removed
- class org.xwiki.captcha.script.CaptchaScriptSafeProvider
-
- -
- true
-
java.class.removed
- class org.xwiki.captcha.script.WrappedScriptCaptcha
-
- -
- true
- true
-
java.field.typeChanged
- field org.xwiki.extension.script.AbstractExtensionScriptService.scriptProvider.*
- field org.xwiki.extension.script.AbstractExtensionScriptService.scriptProvider.*
-
- -
- true
- true
-
java.field.typeChanged
- field org.xwiki.filter.script.AbstractFilterScriptService.scriptProvider.*
- field org.xwiki.filter.script.AbstractFilterScriptService.scriptProvider.*
-
-
-
+
+
+
+
@@ -276,6 +156,7 @@
xwiki-platform-application
xwiki-platform-appwithinminutes
xwiki-platform-attachment
+ xwiki-platform-bootstrap
xwiki-platform-bridge
xwiki-platform-captcha
xwiki-platform-chart
@@ -319,7 +200,6 @@
xwiki-platform-mailsender
xwiki-platform-mentions
xwiki-platform-menu
- xwiki-platform-messagestream
xwiki-platform-minimaldependencies
xwiki-platform-model
xwiki-platform-netflux
@@ -385,7 +265,7 @@
org.codehaus.gmavenplus
gmavenplus-plugin
- 3.0.2
+ 4.0.1
set-system-properties-file
diff --git a/xwiki-platform-core/xwiki-platform-activeinstalls2/pom.xml b/xwiki-platform-core/xwiki-platform-activeinstalls2/pom.xml
index 849120e16b3e..0522d66eae62 100644
--- a/xwiki-platform-core/xwiki-platform-activeinstalls2/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-activeinstalls2/pom.xml
@@ -25,7 +25,7 @@
org.xwiki.platform
xwiki-platform-core
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
xwiki-platform-activeinstalls2
XWiki Platform - Active Installs 2 - Parent POM
@@ -33,7 +33,7 @@
Parent POM for the Active Installs 2 modules
- 8.12.2
+ 8.14.3
diff --git a/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-api/pom.xml b/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-api/pom.xml
index 8cb50490ab6b..8e03de1d6562 100644
--- a/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-api/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-api/pom.xml
@@ -25,7 +25,7 @@
org.xwiki.platform
xwiki-platform-activeinstalls2
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
xwiki-platform-activeinstalls2-api
XWiki Platform - Active Installs 2 - API
diff --git a/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-api/src/main/java/org/xwiki/activeinstalls2/internal/data/Ping.java b/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-api/src/main/java/org/xwiki/activeinstalls2/internal/data/Ping.java
index 88b1a5d73dd5..4aeb73363c45 100644
--- a/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-api/src/main/java/org/xwiki/activeinstalls2/internal/data/Ping.java
+++ b/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-api/src/main/java/org/xwiki/activeinstalls2/internal/data/Ping.java
@@ -35,7 +35,7 @@ public class Ping
private Collection extensions;
- private JavaPing java;
+ private JavaPing javaPing;
private DatabasePing database;
@@ -112,15 +112,15 @@ public void setExtensions(Collection extensions)
*/
public JavaPing getJava()
{
- return this.java;
+ return this.javaPing;
}
/**
- * @param java see {@link #getJava()}
+ * @param javaPing see {@link #getJava()}
*/
- public void setJava(JavaPing java)
+ public void setJava(JavaPing javaPing)
{
- this.java = java;
+ this.javaPing = javaPing;
}
/**
diff --git a/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-test/pom.xml b/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-test/pom.xml
index 75ed2d51847d..c2e6a5007da9 100644
--- a/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-test/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-test/pom.xml
@@ -25,7 +25,7 @@
org.xwiki.platform
xwiki-platform-activeinstalls2
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
xwiki-platform-activeinstalls2-test
XWiki Platform - Active Installs 2 - Tests - Parent POM
diff --git a/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-test/xwiki-platform-activeinstalls2-test-docker/pom.xml b/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-test/xwiki-platform-activeinstalls2-test-docker/pom.xml
index 468575efa5f5..a12729f630e3 100644
--- a/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-test/xwiki-platform-activeinstalls2-test-docker/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-activeinstalls2/xwiki-platform-activeinstalls2-test/xwiki-platform-activeinstalls2-test-docker/pom.xml
@@ -25,7 +25,7 @@
org.xwiki.platform
xwiki-platform-activeinstalls2-test
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
xwiki-platform-activeinstalls2-test-docker
XWiki Platform - Active Installs 2 - Tests - Functional Docker Tests
diff --git a/xwiki-platform-core/xwiki-platform-administration/pom.xml b/xwiki-platform-core/xwiki-platform-administration/pom.xml
index cba9dc823abb..eaf12a9d2de3 100644
--- a/xwiki-platform-core/xwiki-platform-administration/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/pom.xml
@@ -25,13 +25,14 @@
org.xwiki.platform
xwiki-platform-core
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
xwiki-platform-administration
XWiki Platform - Administration - Parent POM
pom
Application for administrating wiki features like users, groups, rights etc.
+ xwiki-platform-administration-api
xwiki-platform-administration-ui
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/pom.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/pom.xml
new file mode 100644
index 000000000000..1ab616dc97f3
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/pom.xml
@@ -0,0 +1,50 @@
+
+
+
+ 4.0.0
+
+ org.xwiki.platform
+ xwiki-platform-administration
+ 16.9.0-SNAPSHOT
+
+ xwiki-platform-administration-api
+ XWiki Platform - Administration - API
+ jar
+ XWiki Platform - Administration - API
+
+
+ org.xwiki.platform
+ xwiki-platform-oldcore
+ ${project.version}
+
+
+ org.xwiki.commons
+ xwiki-commons-component-api
+ ${commons.version}
+
+
+ org.xwiki.commons
+ xwiki-commons-tool-test-component
+ ${commons.version}
+ test
+
+
+
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/src/main/java/org/xwiki/administration/api/ConfigurableObjectEvaluator.java b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/src/main/java/org/xwiki/administration/api/ConfigurableObjectEvaluator.java
new file mode 100644
index 000000000000..30d85bbd09af
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/src/main/java/org/xwiki/administration/api/ConfigurableObjectEvaluator.java
@@ -0,0 +1,62 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.administration.api;
+
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.xwiki.component.annotation.Component;
+import org.xwiki.evaluation.ObjectEvaluator;
+import org.xwiki.evaluation.ObjectEvaluatorException;
+import org.xwiki.evaluation.ObjectPropertyEvaluator;
+
+import com.xpn.xwiki.objects.BaseObject;
+
+/**
+ * Evaluator for objects of class {@code XWiki.ConfigurableClass}.
+ * Returns a Map storing the evaluated content for "heading" and "linkPrefix" properties.
+ *
+ * @version $Id$
+ * @since 15.10.9
+ * @since 16.3.0
+ */
+@Component
+@Singleton
+@Named(ConfigurableObjectEvaluator.ROLE_HINT)
+public class ConfigurableObjectEvaluator implements ObjectEvaluator
+{
+ /**
+ * The role hint of this component.
+ */
+ public static final String ROLE_HINT = "XWiki.ConfigurableClass";
+
+ @Inject
+ @Named("velocity")
+ private ObjectPropertyEvaluator velocityPropertyEvaluator;
+
+ @Override
+ public Map evaluate(BaseObject object) throws ObjectEvaluatorException
+ {
+ return this.velocityPropertyEvaluator.evaluateProperties(object, "heading", "linkPrefix");
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/src/main/resources/META-INF/components.txt b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/src/main/resources/META-INF/components.txt
new file mode 100644
index 000000000000..149adf7174ed
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/src/main/resources/META-INF/components.txt
@@ -0,0 +1 @@
+org.xwiki.administration.api.ConfigurableObjectEvaluator
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/src/test/java/org/xwiki/administration/api/ConfigurableObjectEvaluatorTest.java b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/src/test/java/org/xwiki/administration/api/ConfigurableObjectEvaluatorTest.java
new file mode 100644
index 000000000000..c3dd835085f1
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-api/src/test/java/org/xwiki/administration/api/ConfigurableObjectEvaluatorTest.java
@@ -0,0 +1,80 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.administration.api;
+
+import java.util.Map;
+
+import javax.inject.Named;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.xwiki.evaluation.ObjectEvaluatorException;
+import org.xwiki.evaluation.ObjectPropertyEvaluator;
+import org.xwiki.test.junit5.mockito.ComponentTest;
+import org.xwiki.test.junit5.mockito.InjectMockComponents;
+import org.xwiki.test.junit5.mockito.MockComponent;
+
+import com.xpn.xwiki.objects.BaseObject;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+/**
+ * Validate {@link ConfigurableObjectEvaluator}.
+ *
+ * @version $Id$
+ */
+@ComponentTest
+class ConfigurableObjectEvaluatorTest
+{
+ @InjectMockComponents
+ private ConfigurableObjectEvaluator configurableObjectEvaluator;
+
+ @MockComponent
+ @Named("velocity")
+ private ObjectPropertyEvaluator velocityObjectPropertyEvaluator;
+
+ @Mock
+ private BaseObject baseObject;
+
+ @BeforeEach
+ void setUp() throws ObjectEvaluatorException
+ {
+ when(this.baseObject.getStringValue("heading")).thenReturn("unevaluated heading");
+ when(this.baseObject.getStringValue("linkPrefix")).thenReturn("unevaluated linkPrefix");
+
+ Map evaluatedVelocityProperties =
+ Map.of("heading", "evaluated heading", "linkPrefix", "evaluated linkPrefix");
+
+ when(this.velocityObjectPropertyEvaluator.evaluateProperties(this.baseObject, "heading", "linkPrefix"))
+ .thenReturn(evaluatedVelocityProperties);
+ }
+
+ @Test
+ void checkEvaluationThroughPropertyEvaluator() throws ObjectEvaluatorException
+ {
+ Map evaluationResults = this.configurableObjectEvaluator.evaluate(this.baseObject);
+ verify(this.velocityObjectPropertyEvaluator).evaluateProperties(this.baseObject, "heading", "linkPrefix");
+ assertEquals("evaluated heading", evaluationResults.get("heading"));
+ assertEquals("evaluated linkPrefix", evaluationResults.get("linkPrefix"));
+ }
+}
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/pom.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/pom.xml
index 0feae392b921..ee806925a975 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/pom.xml
@@ -25,7 +25,7 @@
org.xwiki.platform
xwiki-platform-administration
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
xwiki-platform-administration-test
XWiki Platform - Administration - Tests - Parent POM
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/pom.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/pom.xml
index 35725e4a26c1..ce021cdca976 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/pom.xml
@@ -25,7 +25,7 @@
org.xwiki.platform
xwiki-platform-administration-test
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
xwiki-platform-administration-test-docker
XWiki Platform - Administration - Tests - Functional Docker Tests
@@ -86,16 +86,6 @@
${project.version}
test
-
- com.icegreen
- greenmail-junit5
- test
-
-
- com.sun.mail
- jakarta.mail
- test
-
org.xwiki.platform
xwiki-platform-flamingo-skin-test-pageobjects
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/AllIT.java b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/AllIT.java
index 44434ce6aebd..cdaa12e2dce4 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/AllIT.java
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/AllIT.java
@@ -38,12 +38,6 @@ class NestedAdministrationIT extends AdministrationIT
{
}
- @Nested
- @DisplayName("Reset Password")
- class NestedResetPasswordIT extends ResetPasswordIT
- {
- }
-
@Nested
@DisplayName("ConfigurableClass")
class NestedConfigurableClassIT extends ConfigurableClassIT
@@ -56,12 +50,6 @@ class NestedUsersGroupsRightsManagementIT extends UsersGroupsRightsManagementIT
{
}
- @Nested
- @DisplayName("Forgot Username")
- class NestedForgotUsernameIT extends ForgotUsernameIT
- {
- }
-
@Nested
@DisplayName("XAR Import")
class NestedXARImportIT extends XARImportIT
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/ConfigurableClassIT.java b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/ConfigurableClassIT.java
index 68e9dc1be3bf..68e0bd0b2567 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/ConfigurableClassIT.java
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/ConfigurableClassIT.java
@@ -560,6 +560,38 @@ void testLockingAndUnlocking(TestUtils setup, TestReference testReference)
setup.getDriver().switchTo().window(firstTab);
}
+ /**
+ * Make sure a user with only ADMIN right on a space can access a Configurable section.
+ */
+ @Test
+ @Order(11)
+ void testSpaceAdminUserAcess(TestUtils setup, TestReference testReference) throws Exception
+ {
+ // Create the admin page in a space where normal users are not allowed to edit
+ DocumentReference adminSheet = new DocumentReference("xwiki", "XWiki", "testSpaceAdminUserAcess");
+
+ // Cleanup
+ setup.rest().delete(adminSheet);
+ setup.deleteSpace(testReference.getLastSpaceReference());
+
+ // Create an admin page available in a page administration
+ String section = "testSpaceAdminUserAcess";
+ setupConfigurableApplication(setup, adminSheet,
+ "displayInSection", section,
+ "scope", "WIKI+ALL_SPACES",
+ "codeToExecute", "OK
");
+
+ // Create a normal user with ADMIN right on the test space
+ setup.setRightsOnSpace(testReference.getLastSpaceReference(), "", "XWiki.spaceadmin", "admin", true);
+ setup.createUserAndLogin("spaceadmin", "spaceadmin");
+
+ // Make sure the user has access to the space admin section
+ AdministrationSectionPage adminPage =
+ AdministrationSectionPage.gotoSpaceAdministration(testReference.getLastSpaceReference(), section);
+ adminPage.waitUntilActionButtonIsLoaded();
+ assertFalse(setup.getDriver().hasElementWithoutWaiting(By.id("testSpaceAdminUserAcess")));
+ }
+
private void setupConfigurableApplication(TestUtils setup, DocumentReference testReference,
Object... configurableClassProperties)
{
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/RegisterIT.java b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/RegisterIT.java
index be9b7165de35..9ce64e18065e 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/RegisterIT.java
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/RegisterIT.java
@@ -346,7 +346,10 @@ void registerWikiSyntaxName(boolean isModal, boolean closedWiki, boolean withReg
assertTrue(validateAndRegister(testUtils, isModal, registrationPage), String.format("isModal: %s close "
+ "wiki: %s withRegistrationConfig: %s", isModal, closedWiki, withRegistrationConfig));
- assertEquals(String.format("%s %s (%s): Registration successful.", firstName, lastName,
+ // TODO: looks like a pretty strange behavior, there might be a message box title missing somewhere
+ String messagePrefix = closedWiki ? "" : "Information ";
+
+ assertEquals(String.format("%s%s %s (%s): Registration successful.", messagePrefix, firstName, lastName,
AbstractRegistrationPage.JOHN_SMITH_USERNAME),
((RegistrationPage) registrationPage).getRegistrationSuccessMessage().orElseThrow());
}
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/UsersGroupsRightsManagementIT.java b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/UsersGroupsRightsManagementIT.java
index d89655f0d309..e75c5973da1f 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/UsersGroupsRightsManagementIT.java
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-docker/src/test/it/org/xwiki/administration/test/ui/UsersGroupsRightsManagementIT.java
@@ -35,6 +35,7 @@
import org.xwiki.test.docker.junit5.UITest;
import org.xwiki.test.ui.TestUtils;
import org.xwiki.test.ui.po.ConfirmationModal;
+import org.xwiki.test.ui.po.DeletePageOutcomePage;
import org.xwiki.test.ui.po.EditRightsPane;
import org.xwiki.test.ui.po.ViewPage;
import org.xwiki.test.ui.po.editor.RightsEditPage;
@@ -251,6 +252,7 @@ void createGroupWhenGroupAlreadyExists(TestUtils setup, TestReference testRefere
* Validate user disable/enable
* Validate user deletion.
* Validate groups automatically cleaned from deleted users.
+ * Validate default groups are updated when a deleted user is restored.
*
*/
@Test
@@ -303,6 +305,13 @@ void createAndDeleteUser(TestUtils setup, TestReference testReference)
// Verify that when a user is removed, they are removed from the groups they belong to.
groupsPage = GroupsPage.gotoPage();
assertEquals(0, groupsPage.clickEditGroup("XWikiAllGroup").filterMembers(userName).countRows());
+
+ // Verify that when a user is restored, it's put back in the default group
+ setup.gotoPage("XWiki", userName);
+ DeletePageOutcomePage deletePageOutcomePage = new DeletePageOutcomePage();
+ deletePageOutcomePage.getDeletedTerminalPagesEntries().get(0).clickRestore();
+ groupsPage = GroupsPage.gotoPage();
+ assertEquals(1, groupsPage.clickEditGroup("XWikiAllGroup").filterMembers(userName).countRows());
}
/**
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/pom.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/pom.xml
index 635df353ff69..6792a71406ce 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/pom.xml
@@ -25,7 +25,7 @@
org.xwiki.platform
xwiki-platform-administration-test
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
xwiki-platform-administration-test-pageobjects
XWiki Platform - Administration - Tests - Page Objects
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/AdministrationSectionPage.java b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/AdministrationSectionPage.java
index a17baf769d58..60540918dbab 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/AdministrationSectionPage.java
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/AdministrationSectionPage.java
@@ -35,9 +35,6 @@
*/
public class AdministrationSectionPage extends ViewPage
{
- @FindBy(xpath = "//input[@type='submit'][@name='formactionsac']")
- private WebElement saveButton;
-
/**
* There's no id to get only the admin page content so getting the main content area (which includes the
* breadcrumb and title) is the best we can do, until we add some id for the content of admin pages.
@@ -52,11 +49,29 @@ public class AdministrationSectionPage extends ViewPage
@FindBy(xpath = "//div[@id='admin-page-content']")
private WebElement formContainer;
- private final String section;
+ private String section;
+
+ /**
+ * See {@link #AdministrationSectionPage(String, boolean)}.
+ */
+ private boolean asyncSave;
public AdministrationSectionPage(String section)
+ {
+ this(section, false);
+ }
+
+ /**
+ * @param section the name of the section in the Admin UI vertical menu
+ * @param asyncSave whether the save button in the administration section page executes the save async or not. If
+ * you're not using a {@code ConfigurableClass} with a custom {@code codeToExecute} then asyncSave should
+ * be false. This is until we make all admin sections save async.
+ * @since 16.6.0RC1
+ */
+ public AdministrationSectionPage(String section, boolean asyncSave)
{
this.section = section;
+ this.asyncSave = asyncSave;
}
public static AdministrationSectionPage gotoPage(String section)
@@ -113,14 +128,25 @@ public String getURL()
public void clickSave()
{
- // Many administration sections are still submitted synchronously so we can't wait by default. There are also
- // some administration sections that are submitted asynchronously but they use a custom success message.
- clickSave(false);
+ // Note: There are some administration sections that are submitted asynchronously, but they use a custom
+ // success message. For these cases, their PO should override the {@link #clickSave(boolean)} method to perform
+ // the wait themselves.
+ clickSave(this.asyncSave);
}
+ /**
+ * The only reason to call with wait as false is when the admin section is using a custom success message. See
+ * {@link #clickSave()}'s implementation.
+ */
public void clickSave(boolean wait)
{
- this.saveButton.click();
+ WebElement saveButton;
+ if (this.asyncSave) {
+ saveButton = getDriver().findElement(By.xpath("//input[@type='submit'][@name='action_saveandcontinue']"));
+ } else {
+ saveButton = getDriver().findElement(By.xpath("//input[@type='submit'][@name='formactionsac']"));
+ }
+ saveButton.click();
if (wait) {
// Wait until the page is really saved.
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/GroupEditPage.java b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/GroupEditPage.java
index 1268ade4676d..391ba2dda774 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/GroupEditPage.java
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/GroupEditPage.java
@@ -95,6 +95,8 @@ public GroupEditPage removeMembers(String... members)
for (WebElement row : getMembersTable().getRows()) {
if (Objects.equals(getRowUserName(row), member)) {
getMembersTable().clickAction(index, "delete");
+ // Wait for the confirmation message before moving to the next member.
+ waitForNotificationSuccessMessage("Member successfully removed from group");
break;
}
index++;
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/ImportAdministrationSectionPage.java b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/ImportAdministrationSectionPage.java
index 36cd51237e6c..eabca965f09d 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/ImportAdministrationSectionPage.java
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-test/xwiki-platform-administration-test-pageobjects/src/main/java/org/xwiki/administration/test/po/ImportAdministrationSectionPage.java
@@ -116,7 +116,8 @@ public void importPackage()
// Click submit
this.importPackageLink.click();
// Wait for the "Import successful message"
- getDriver().waitUntilElementIsVisible(By.xpath("//div[@id='packagecontainer']/div[@class='infomessage']"));
+ getDriver().waitUntilElementIsVisible(By.xpath(
+ "//div[@id='packagecontainer']/div[contains(@class, 'infomessage')]"));
}
public ViewPage clickImportedPage(String pageName)
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/pom.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/pom.xml
index de03cedd0462..eed616333dc6 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/pom.xml
@@ -25,7 +25,7 @@
org.xwiki.platform
xwiki-platform-administration
- 16.3.0-SNAPSHOT
+ 16.9.0-SNAPSHOT
xwiki-platform-administration-ui
XWiki Platform - Administration - UI
@@ -104,6 +104,12 @@
${project.version}
runtime
+
+ org.xwiki.platform
+ xwiki-platform-administration-api
+ ${project.version}
+
+
org.xwiki.platform
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminLocalizationSheet.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminLocalizationSheet.xml
index 4aaa605a49dc..bc7518b81d8a 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminLocalizationSheet.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminLocalizationSheet.xml
@@ -549,8 +549,8 @@ require(['jquery', 'xwiki-l10n!xwiki-administration-localization', 'xwiki-locale
/* Do not display the supported language field (we assume it's the following one)
when the multilingual option is set to No. */
-form#localization dd:has(> div.dropdown > select[name="XWiki.XWikiPreferences_0_multilingual"] > option[value="0"]:checked) + dt,
-form#localization dd:has(> div.dropdown > select[name="XWiki.XWikiPreferences_0_multilingual"] > option[value="0"]:checked) + dt + dd {
+form#localization dd:has(> div.dropdown > select[name="XWiki.XWikiPreferences_0_multilingual"] > option[value="0"]:checked) + dt,
+form#localization dd:has(> div.dropdown > select[name="XWiki.XWikiPreferences_0_multilingual"] > option[value="0"]:checked) + dt + dd {
display: none;
}
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminSheet.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminSheet.xml
index e056dae41e70..5d77477f3bc4 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminSheet.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminSheet.xml
@@ -894,6 +894,10 @@ require(['jquery'], function($) {
vertical-align: middle;
}
+#admin-page-content .usersorgroupsnames label > input[type="radio"] {
+ vertical-align: unset;
+}
+
/**
* Category Overview
*/
@@ -937,6 +941,19 @@ require(['jquery'], function($) {
border-color: transparent;
}
+#admin-page-content .usersorgroupsnames {
+ white-space: nowrap;
+ /* Triple of the value for the .right column. This is useful to make sure the columns are somewhat balanced when
+ there is only one right (e.g., extension rights with a default flavor).
+ Keeping them balanced is useful to make sure the filters are displayed properly, which is especially important
+ on a subwiki where we have to find a place to display the scope selector. */
+ width: 27%;
+}
+
+#usersandgroupstable-filters-scope {
+ white-space: nowrap;
+}
+
#usersandgroupstable-filters #name {
width: 65%;
}
@@ -955,6 +972,10 @@ require(['jquery'], function($) {
vertical-align: top;
}
+.xform #usersandgroupstable select {
+ width: unset;
+}
+
/**
* Bootstrap's Accordion Menu
*/
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.de.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.de.xml
index 44d576cfccfc..069133d7e835 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.de.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.de.xml
@@ -55,8 +55,6 @@ XWiki.XWikiPreferences_confirmation_email_content.hint=Die E-Mail-Vorlage, die d
XWiki.XWikiPreferences_invitation_email_content.hint=Die E-Mail-Vorlage, die an Benutzer gesendet wird, die zur Registrierung eingeladen werden.
XWiki.Registration_heading.hint=Dies ist die Zeile oben auf der Seite, die den Personen angezeigt wird, die sich registrieren und die sich gerade registriert haben. Velocity und Wiki-Syntax können verwendet werden.
XWiki.Registration_welcomeMessage.hint=Dies wird nur angezeigt, wenn Personen das Formular ausfüllen. Velocity und Wiki-Syntax können verwendet werden.
-XWiki.Registration_liveValidation_enabled.hint=Setzen Sie dies auf false, um den JavaScript-Code der Live-Validierung zu deaktivieren (Felder werden serverseitig noch validiert).
-XWiki.Registration_liveValidation_defaultFieldOkMessage.hint=Die Live-Validierung zeigt eine Meldung an, die den Benutzern anzeigt, dass sie das Feld zufriedenstellend ausgefüllt haben. Dies ist die Nachricht, die sie erhalten, wenn sie nicht für ein bestimmtes Feld überschrieben wird. Es kann ein Velocity-Code verwendet werden.
XWiki.Registration_loginButton_enabled.hint=Wenn der Benutzer sich registriert hat, bieten wir ihm eine Schaltfläche an, auf die er klicken kann, die seinen Benutzernamen und sein Passwort in die Login-Aktion einträgt und ihn sofort einloggen lässt. Dies führt jedoch dazu, dass der Benutzername und das Passwort im HTML-Format zurückgegeben werden, was je nach Ihren Sicherheitsanforderungen inakzeptabel sein kann.
XWiki.Registration_loginButton_autoLogin_enabled.hint=Wenn die Login-Taste aktiviert ist, dann können Sie ein Stück JavaScript verwenden, indem Sie die Login-Taste für den Benutzer drücken.
XWiki.Registration_defaultRedirect.hint=Dies ist die URL, zu der der Benutzer nach dem Drücken der Login-Taste umgeleitet wird, wenn der xredirect-Parameter nicht angegeben ist. Es kann ein Velocity-Code verwendet werden.
@@ -142,6 +140,11 @@ administration.section.users.deleteUser.newAuthor.programming=Programmieren
administration.section.users.deleteUser.newAuthor.script=Script
admin.usersgroups.extensionrights=Extension Rechte
+# Groups section
+administration.section.groups.deleteUserFromGroup.loading=Mitglied aus der Gruppe entfernen
+administration.section.groups.deleteUserFromGroup.success=Mitglied erfolgreich aus der Gruppe entfernt
+administration.section.groups.deleteUserFromGroup.failure=Das Mitglied konnte nicht aus der Gruppe entfernt werden
+
# Other Category
admin.other=Andere
admin.other.description=Verschiedene Konfigurationen für Erweiterungen.
@@ -180,6 +183,8 @@ administration.section.users.deleteUser.markInactiveMessage=Anstatt den Benutzer
## Deprecated since 11.8RC1
administration.section.users.deleteUser.markDisabledMessage=Anstatt den Benutzer zu löschen, kannst du sein Profil als deaktiviert markieren. Dies verhindert, dass sie sich anmelden, und bewahrt die Zugriffsrechte, die mit den von ihnen geschriebenen Skripten verbunden sind.
+XWiki.Registration_liveValidation_enabled.hint=Setzen Sie dies auf false, um den JavaScript-Code der Live-Validierung zu deaktivieren (Felder werden serverseitig noch validiert).
+XWiki.Registration_liveValidation_defaultFieldOkMessage.hint=Die Live-Validierung zeigt eine Meldung an, die den Benutzern anzeigt, dass sie das Feld zufriedenstellend ausgefüllt haben. Dies ist die Nachricht, die sie erhalten, wenn sie nicht für ein bestimmtes Feld überschrieben wird. Es kann ein Velocity-Code verwendet werden.
## Used to indicate where deprecated keys end
#@deprecatedend
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.ru.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.ru.xml
index d59ad9531032..f4f7b30d75b6 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.ru.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.ru.xml
@@ -55,8 +55,6 @@ XWiki.XWikiPreferences_confirmation_email_content.hint=Шаблон письма
XWiki.XWikiPreferences_invitation_email_content.hint=Шаблон письма, которое будет отправлено пользователям, приглашенным зарегистрироваться.
XWiki.Registration_heading.hint=Это строка в верхней части страницы, которая показывается людям, которые регистрируются и когда они только что зарегистрировались. Может использоваться вики-разметка и velocity-код.
XWiki.Registration_welcomeMessage.hint=Отображается только тогда, когда люди заполняют форму. Можно использовать velocity-код и вики-разметку.
-XWiki.Registration_liveValidation_enabled.hint=Установите значение false, чтобы отключить JavaScript-код проверки на лету (поля будут по-прежнему проверяться на стороне сервера).
-XWiki.Registration_liveValidation_defaultFieldOkMessage.hint=Проверка на лету показывает пользователям сообщение о правильном заполнении поля. Они получат это сообщение, если оно не будет переопределено для конкретного поля. Можно использовать velocity-код.
XWiki.Registration_loginButton_enabled.hint=Когда пользователь зарегистрировался, мы предоставляем кнопку, после нажатия на которую, его имя пользователя и пароль будут переданы действию входа, чтобы пользователь сразу вошёл в систему. Однако это приводит к тому, что имя пользователя и пароль передаются обратно в HTML, что может быть неприемлемо в зависимости от ваших требований безопасности.
XWiki.Registration_loginButton_autoLogin_enabled.hint=Если кнопка входа в систему включена, то Вы можете добавить фрагмент JavaScript для нажатия этой кнопки за пользователя.
XWiki.Registration_defaultRedirect.hint=URL, на который пользователь будет перенаправлен после нажатия кнопки входа в систему, если не указан параметр xredirect. Можно использовать velocity-код.
@@ -142,6 +140,11 @@ administration.section.users.deleteUser.newAuthor.programming=программи
administration.section.users.deleteUser.newAuthor.script=скрипт
admin.usersgroups.extensionrights=Права расширений
+# Groups section
+administration.section.groups.deleteUserFromGroup.loading=Исключение участника из группы
+administration.section.groups.deleteUserFromGroup.success=Участник успешно исключен из группы
+administration.section.groups.deleteUserFromGroup.failure=Не удалось исключить участника из группы
+
# Other Category
admin.other=Прочее
admin.other.description=Различные настройки для расширений.
@@ -180,6 +183,8 @@ administration.section.users.deleteUser.markInactiveMessage=Вместо уда
## Deprecated since 11.8RC1
administration.section.users.deleteUser.markDisabledMessage=Вместо удаления пользователя вы можете пометить его профиль как отключенный. Это не позволит ему войти в систему, но сохранит права доступа, связанные с написанными им скриптами.
+XWiki.Registration_liveValidation_enabled.hint=Установите значение false, чтобы отключить JavaScript-код проверки на лету (поля будут по-прежнему проверяться на стороне сервера).
+XWiki.Registration_liveValidation_defaultFieldOkMessage.hint=Проверка на лету показывает пользователям сообщение о правильном заполнении поля. Они получат это сообщение, если оно не будет переопределено для конкретного поля. Можно использовать velocity-код.
## Used to indicate where deprecated keys end
#@deprecatedend
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.uk.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.uk.xml
index 15f7840add28..e81fab4c7d2a 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.uk.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminTranslations.uk.xml
@@ -55,8 +55,6 @@ XWiki.XWikiPreferences_confirmation_email_content.hint=Шаблон електр
XWiki.XWikiPreferences_invitation_email_content.hint=Шаблон електронного листа, який буде надіслано користувачам, яких запросили зареєструватися.
XWiki.Registration_heading.hint=Це рядок у верхній частині сторінки, який бачать люди, які реєструються, і коли вони щойно зареєструвалися. Допускається використання коду синтаксису Velocity та wiki.
XWiki.Registration_welcomeMessage.hint=Це відображається, лише коли користувачі заповнюють форму. Допускається використання коду синтаксису Velocity та wiki.
-XWiki.Registration_liveValidation_enabled.hint=Встановіть для цього значення false, щоб вимкнути активну перевірку коду JavaScript (поля все одно перевірятимуться на сервері).
-XWiki.Registration_liveValidation_defaultFieldOkMessage.hint=Перевірка в режимі реального часу показує користувачам повідомлення про те, що вони правильно заповнили поле. Це повідомлення, яке вони отримають, якщо його не перевизначено для певного поля. Допускається використання коду Velocity.
XWiki.Registration_loginButton_enabled.hint=Коли користувач зареєструвався, ми надаємо йому кнопку, яку він може натиснути, яка опублікує його ім’я користувача та пароль у дії входу, і він одразу ввійде в систему. Однак це спричиняє повернення імені користувача та пароля в HTML, що може бути неприйнятним залежно від ваших потреб безпеки.
XWiki.Registration_loginButton_autoLogin_enabled.hint=Якщо ввімкнуто кнопку входу, ви можете мати фрагмент коду JavaScript, який виконує натискання кнопку входу для користувача.
XWiki.Registration_defaultRedirect.hint=Це URL-адреса, на яку користувач буде переспрямований після натискання кнопки входу, якщо параметр xredirect не вказано. Допускається використання коду Velocity.
@@ -142,6 +140,11 @@ administration.section.users.deleteUser.newAuthor.programming=програмув
administration.section.users.deleteUser.newAuthor.script=скрипт
admin.usersgroups.extensionrights=Права розширення
+# Groups section
+administration.section.groups.deleteUserFromGroup.loading=Видалення учасника з групи
+administration.section.groups.deleteUserFromGroup.success=Учасника успішно видалено з групи
+administration.section.groups.deleteUserFromGroup.failure=Не вдалося видалити учасника з групи
+
# Other Category
admin.other=Інше
admin.other.description=Різні налаштування для розширень.
@@ -180,6 +183,8 @@ administration.section.users.deleteUser.markInactiveMessage=Замість то
## Deprecated since 11.8RC1
administration.section.users.deleteUser.markDisabledMessage=Замість того, щоб видаляти користувачів, ви можете вимкнути їх профілі. Це не дозволить їм увійти в систему та збереже права доступу, пов'язані з написаними ними скриптами.
+XWiki.Registration_liveValidation_enabled.hint=Встановіть для цього значення false, щоб вимкнути активну перевірку коду JavaScript (поля все одно перевірятимуться на сервері).
+XWiki.Registration_liveValidation_defaultFieldOkMessage.hint=Перевірка в режимі реального часу показує користувачам повідомлення про те, що вони правильно заповнили поле. Це повідомлення, яке вони отримають, якщо його не перевизначено для певного поля. Допускається використання коду Velocity.
## Used to indicate where deprecated keys end
#@deprecatedend
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminUsersSheet.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminUsersSheet.xml
index b1824f5b4d82..1f6b50f1a328 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminUsersSheet.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminUsersSheet.xml
@@ -108,13 +108,15 @@
'id': 'disable',
'icon': 'lock',
'allowProperty': 'doc.hasdisable',
- 'urlProperty': 'doc.disable_url'
+ 'urlProperty': 'doc.disable_url',
+ 'extraIconClasses': 'text-warning'
},
{
'id': 'enable',
'icon': 'unlock',
'allowProperty': 'doc.hasenable',
- 'urlProperty': 'doc.enable_url'
+ 'urlProperty': 'doc.enable_url',
+ 'extraIconClasses': 'text-success'
}
]
}
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClass.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClass.xml
index 4c856dc7a298..322c77c2a4cd 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClass.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClass.xml
@@ -107,7 +107,8 @@ $xwiki.jsfx.use('js/xwiki/actionbuttons/actionButtons.js', true)
#foreach($appName in $outputList)
##
## Make sure the current user has permission to edit the configurable application.
- #set($userHasAccessToDocument = $xcontext.hasAccessLevel('edit', $appName))
+ ## Unless we are in the page administration which is never about modifying the application configuration page
+ #set($userHasAccessToDocument = $level == '.page' || $xcontext.hasAccessLevel('edit', $appName))
##
## If the document was not last saved by a user with edit privilege on this page
## then we can't safely display the page but we should warn the viewer.
@@ -195,32 +196,23 @@ $xwiki.jsfx.use('js/xwiki/actionbuttons/actionButtons.js', true)
#set($formId = "${section.toLowerCase()}_${app.getFullName()}")
#set($escapedAppName = $escapetool.xml($app.getFullName()))
#foreach($configurableObj in $configurableObjs)
- ## Execute the content code if any
- ## FIXME: we have to do that before the title before of the dropPermissions
- #set($codeToExecute = "$!app.getValue('codeToExecute', $configurableObj)")
- #if($codeToExecute != '')
- #set($codeToExecuteResult = $configurableObj.display('codeToExecute', 'view', false))
+ #set ($heading = $app.getValue('heading', $configurableObj))
+ #set ($codeToExecute = "$!app.getValue('codeToExecute', $configurableObj)")
+ ## If linkPrefix is set, then we will make each property label a link which starts with that prefix.
+ #set ($linkPrefix = "$!app.getValue('linkPrefix', $configurableObj)")
+ #if (!$app.restricted)
+ #set ($evaluatedConfigurableObj = $configurableObj.evaluate())
+ #set ($heading = $evaluatedConfigurableObj.heading)
+ #set ($linkPrefix = $evaluatedConfigurableObj.linkPrefix)
#end
## Display the header if one exists.
- #set($heading = $app.getValue('heading', $configurableObj))
#if($heading && $heading != '')
- ## This application should not run with programming rights because it evaluates code which may not be trustworthy.
- ## Removing the next line will open a security hole.
- ## Can't use $configurableObj.display('heading', 'view', false) to have proper heading id (because of the html macro)
- ## FIXME: find a cleaner solution
- #set($void = $doc.dropPermissions())
- #if ($services.security.authorization.hasAccess("script",
- $app.authors.effectiveMetadataAuthor, $app.documentReference) && !$app.restricted)
- #set($evaluatedHeading = "#evaluate($heading)")
- #else
- #set($evaluatedHeading = $heading)
- #end
- == $services.rendering.escape($evaluatedHeading, 'xwiki/2.1') ==
+ == $services.rendering.escape($heading, 'xwiki/2.1') ==
#end
## Display code to execute
- #if($codeToExecute != '')
+ #if ($codeToExecute != '')
(%class="codeToExecute"%)(((##
- $codeToExecuteResult
+ $configurableObj.display('codeToExecute', 'view', false)
)))
#end
##
@@ -230,9 +222,6 @@ $xwiki.jsfx.use('js/xwiki/actionbuttons/actionButtons.js', true)
#set($propertiesToShow = [])
#end
##
- ## If linkPrefix is set, then we will make each property label a link which starts with that prefix.
- #set($linkPrefix = "$!app.getValue('linkPrefix', $configurableObj)")
- ##
## If the Configurable object specifies a configuration class, use it,
## otherwise assume custom forms are used instead.
#set($configClassName = "$!app.getValue('configurationClass', $configurableObj)")
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClassMacros.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClassMacros.xml
index bf4ee72ae7a1..e6e3857d0cdd 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClassMacros.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClassMacros.xml
@@ -339,8 +339,6 @@
#if($propertiesToShow.size() > 0 && !$propertiesToShow.contains($propName))
## Silently skip over this property.
#else
- #set($prettyName = "#evaluate($app.displayPrettyName($propName, $obj))")
- ##
#set($hintKey = "${obj.xWikiClass.name}_${propName}.hint")
#set($hint = $services.localization.render($hintKey))
#if($hint == $hintKey)
@@ -364,11 +362,10 @@
$out ##
#set ($out = '')
#end
- $escapetool.xml($prettyName)
+ $escapetool.xml($app.displayPrettyName($propName, $obj))
</label>
#if($linkPrefix != '')
- #set($linkScript = "$linkPrefix$propName")
- <a href="$escapetool.xml("#evaluate($linkScript)")" class="xHelp" title="$services.localization.render('admin.documentation')">$services.localization.render('admin.documentation')</a>
+ <a href="$escapetool.xml($linkPrefix + $propName)" class="xHelp" title="$services.localization.render('admin.documentation')">$services.localization.render('admin.documentation')</a>
#end
#if ($hint)
<span class="xHint">$hint</span>
diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ForgotUsernameMailContent.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ForgotUsernameMailContent.xml
index fce2357fbb05..059e581828ba 100644
--- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ForgotUsernameMailContent.xml
+++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ForgotUsernameMailContent.xml
@@ -20,7 +20,7 @@
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
-
+
XWiki
ForgotUsernameMailContent
@@ -58,6 +58,7 @@
html
4
HTML
+ 0
15
80
0
@@ -88,6 +89,7 @@
text
3
Text
+ 0
15
80
0
@@ -96,28 +98,21 @@
<h2>Hello,</h2>
-#set ($wikiurl = $xwiki.getURL($services.model.resolveDocument('', 'default', $doc.documentReference.extractReference('WIKI'))))
+#set ($wikiURL = $xwiki.getURL($services.model.resolveDocument('', 'default', $doc.documentReference.extractReference('WIKI'))))
#set ($xwikiLoginURL = $xwiki.getURL('XWiki.XWikiLogin', 'login'))
-#set ($wikiname = $request.serverName)
-#set ($severalUsernames = ($usernames.size() > 0))
-<p>A forgot username request has been performed on <a href="$wikiurl">$wikiname</a>.
+#set ($wikiName = $request.serverName)
+<p>A forgot username request has been made on <a href="$escapetool.xml($wikiURL)">$escapetool.xml($wikiName)</a>.
If you did not make the request, please ignore this message.</p>
-<p>We found the following username#if($severalUsernames)s#end related to this email address:
-:<br/>
-#if ($severalUsernames)
+<p>We found the following usernames related to this email address:</p>
<ul>
#foreach ($username in $usernames)
- <li>$username</li>
+ <li>$escapetool.xml($username)</li>
#end
</ul>
-#else
-<strong>$usernames.get(0)</strong>
-#end
<p>
-You can login from this page: <a href="$xwikiLoginURL">XWiki Login</a>.
-</p>
-
+You can login from this page: <a href="$escapetool.xml($xwikiLoginURL)">XWiki Login</a>.
+</p>