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> en @@ -128,14 +123,15 @@ You can login from this page: <a href="$xwikiLoginURL">XWiki Login</a&g Hello, -A forgot username request has been made on ${request.getServerName()}. -We found the following username(s) related to this email address: +A forgot username request has been made on ${request.getServerName()}. If you did not make the request, please ignore this message. + +We found the following usernames related to this email address: #foreach ($username in $usernames) $usernames #end -You can login with this username from this URL: $xwiki.getURL('XWiki.XWikiLogin', 'login'). +You can login from this URL: $xwiki.getURL('XWiki.XWikiLogin', 'login'). diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/test/java/org/xwiki/administration/ConfigurableClassPageTest.java b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/test/java/org/xwiki/administration/ConfigurableClassPageTest.java index d0a54072542c..47493119ed3c 100644 --- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/test/java/org/xwiki/administration/ConfigurableClassPageTest.java +++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/test/java/org/xwiki/administration/ConfigurableClassPageTest.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.Callable; import org.apache.http.client.utils.URLEncodedUtils; import org.jsoup.nodes.Document; @@ -32,6 +33,9 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mock; +import org.xwiki.administration.api.ConfigurableObjectEvaluator; +import org.xwiki.evaluation.internal.DefaultObjectEvaluator; +import org.xwiki.evaluation.internal.VelocityObjectPropertyEvaluator; import org.xwiki.localization.macro.internal.TranslationMacro; import org.xwiki.model.reference.DocumentReference; import org.xwiki.query.internal.ScriptQuery; @@ -41,6 +45,7 @@ import org.xwiki.rendering.internal.macro.message.ErrorMessageMacro; import org.xwiki.rendering.internal.macro.message.WarningMessageMacro; import org.xwiki.script.service.ScriptService; +import org.xwiki.security.authorization.AuthorExecutor; import org.xwiki.security.authorization.Right; import org.xwiki.security.script.SecurityScriptServiceComponentList; import org.xwiki.test.annotation.ComponentList; @@ -51,10 +56,13 @@ import org.xwiki.user.UserReferenceComponentList; import org.xwiki.user.internal.converter.DocumentUserReferenceConverter; import org.xwiki.user.internal.document.DocumentUserReference; +import org.xwiki.velocity.VelocityEngine; +import org.xwiki.velocity.VelocityManager; import com.xpn.xwiki.doc.XWikiDocument; import com.xpn.xwiki.internal.model.reference.DocumentReferenceConverter; import com.xpn.xwiki.objects.BaseObject; +import com.xpn.xwiki.objects.classes.BaseClass; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; @@ -62,6 +70,9 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** @@ -81,7 +92,10 @@ ErrorMessageMacro.class, WarningMessageMacro.class, DocumentUserReferenceConverter.class, - DocumentReferenceConverter.class + DocumentReferenceConverter.class, + DefaultObjectEvaluator.class, + VelocityObjectPropertyEvaluator.class, + ConfigurableObjectEvaluator.class }) class ConfigurableClassPageTest extends PageTest { @@ -100,6 +114,8 @@ class ConfigurableClassPageTest extends PageTest private static final String MY_SECTION_SERIALIZED = "XWiki.]],{{noscript /}}"; + private static final String CONFIG_CLASS_NAME = "TestClass"; + private static final String WEB_HOME = "WebHome"; @Mock @@ -108,6 +124,10 @@ class ConfigurableClassPageTest extends PageTest @Mock private ScriptQuery query; + private AuthorExecutor authorExecutor; + + private VelocityEngine velocityEngine; + @BeforeEach void setUp() throws Exception { @@ -122,6 +142,21 @@ void setUp() throws Exception when(this.query.setOffset(anyInt())).thenReturn(this.query); when(this.query.bindValues(any(Map.class))).thenReturn(this.query); when(this.query.bindValues(any(List.class))).thenReturn(this.query); + + this.authorExecutor = this.componentManager.registerMockComponent(AuthorExecutor.class, true); + + // Spy Velocity Engine. + VelocityManager velocityManager = this.componentManager.getInstance(VelocityManager.class); + this.velocityEngine = velocityManager.getVelocityEngine(); + this.velocityEngine = spy(this.velocityEngine); + velocityManager = spy(velocityManager); + this.componentManager.registerComponent(VelocityManager.class, velocityManager); + when(velocityManager.getVelocityEngine()).thenReturn(this.velocityEngine); + + when(this.authorExecutor.call(any(), any(), any())).thenAnswer(invocation -> { + Callable callable = invocation.getArgument(0); + return callable.call(); + }); } @Test @@ -167,12 +202,23 @@ void checkScriptRight(boolean hasScript) throws Exception when(this.oldcore.getMockRightService() .hasAccessLevel(eq("edit"), any(), any(), any())).thenReturn(true); + DocumentReference configClassRef = new DocumentReference("xwiki", SPACE_NAME, CONFIG_CLASS_NAME); + XWikiDocument configClassDoc = new XWikiDocument(configClassRef); + BaseClass configClass = new BaseClass(); + configClass.addTextField("test", "Test", 10); + configClassDoc.setXClass(configClass); + this.xwiki.saveDocument(configClassDoc, this.context); + XWikiDocument mySectionDoc = new XWikiDocument(MY_SECTION); + BaseObject configObject = mySectionDoc.newXObject(configClassRef, this.context); BaseObject object = mySectionDoc.newXObject(CONFIGURABLE_CLASS, this.context); object.setStringValue("displayInCategory", "other"); object.setStringValue("displayInSection", "other"); + object.setStringValue("configurationClass", SPACE_NAME + "." + CONFIG_CLASS_NAME); String originalHeading = "$appName {{noscript /}}"; object.setStringValue("heading", originalHeading); + String originalLinkPrefix = "\"prefix/$appName/{{noscript /}}/"; + object.setStringValue("linkPrefix", originalLinkPrefix); object.set("scope", "WIKI+ALL_SPACES", this.context); DocumentReference userReference = new DocumentReference(WIKI_NAME, SPACE_NAME, "Admin"); mySectionDoc.getAuthors().setEffectiveMetadataAuthor(new DocumentUserReference(userReference, true)); @@ -181,13 +227,25 @@ void checkScriptRight(boolean hasScript) throws Exception userReference, mySectionDoc.getDocumentReference())).thenReturn(hasScript); Document htmlPage = renderHTMLPage(CONFIGURABLE_CLASS); - String expected; + verify(this.oldcore.getMockAuthorizationManager()).hasAccess(Right.SCRIPT, userReference, MY_SECTION); + + String expectedHeading; + String expectedLink; if (hasScript) { - expected = String.format("%s {{noscript /}}", MY_SECTION_SERIALIZED); + expectedHeading = String.format("%s {{noscript /}}", MY_SECTION_SERIALIZED); + expectedLink = String.format("\"prefix/%s/{{noscript /}}/test", MY_SECTION_SERIALIZED); + verify(this.authorExecutor).call(any(), eq(userReference), eq(MY_SECTION)); + verify(this.velocityEngine).evaluate(any(), any(), any(), eq(originalHeading)); + verify(this.velocityEngine).evaluate(any(), any(), any(), eq(originalLinkPrefix)); } else { - expected = originalHeading; + expectedHeading = originalHeading; + expectedLink = originalLinkPrefix + "test"; + verify(this.velocityEngine, never()).evaluate(any(), any(), any(), eq(originalHeading)); + verify(this.velocityEngine, never()).evaluate(any(), any(), any(), eq(originalLinkPrefix)); } - assertEquals(expected, htmlPage.selectFirst("h2").text()); + + assertEquals(expectedHeading, Objects.requireNonNull(htmlPage.selectFirst("h2")).text()); + assertEquals(expectedLink, Objects.requireNonNull(htmlPage.selectFirst("a")).attr("href")); } @Test diff --git a/xwiki-platform-core/xwiki-platform-alerts/pom.xml b/xwiki-platform-core/xwiki-platform-alerts/pom.xml index 008f14e8892d..b20aed6922cd 100644 --- a/xwiki-platform-core/xwiki-platform-alerts/pom.xml +++ b/xwiki-platform-core/xwiki-platform-alerts/pom.xml @@ -25,10 +25,10 @@ org.xwiki.platform xwiki-platform-core - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-alerts - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT XWiki Platform - Alerts - Parent POM pom Application that adds an "alert" menu in the skin. diff --git a/xwiki-platform-core/xwiki-platform-alerts/xwiki-platform-alerts-ui/pom.xml b/xwiki-platform-core/xwiki-platform-alerts/xwiki-platform-alerts-ui/pom.xml index fb52727b6592..2d6e7f65e9c8 100644 --- a/xwiki-platform-core/xwiki-platform-alerts/xwiki-platform-alerts-ui/pom.xml +++ b/xwiki-platform-core/xwiki-platform-alerts/xwiki-platform-alerts-ui/pom.xml @@ -25,10 +25,10 @@ org.xwiki.platform xwiki-platform-alerts - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-alerts-ui - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT XWiki Platform - Alerts - UI xar diff --git a/xwiki-platform-core/xwiki-platform-annotation/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/pom.xml index 2f01dc1890ad..554beada39f6 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/pom.xml @@ -23,7 +23,7 @@ org.xwiki.platform xwiki-platform-core - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation XWiki Platform - Annotations - Parent POM diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-core/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-core/pom.xml index 6be43b87d0c5..5c78d6463181 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-core/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-core/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-annotation - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation-core XWiki Platform - Annotations - Core Services diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-io/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-io/pom.xml index a6b554c69bd6..dcf4074bd0e7 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-io/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-io/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-annotation - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation-io XWiki Platform - Annotations - XWiki Storage Implementation diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-maintainer/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-maintainer/pom.xml index 6d1dee51ee97..b618b3ba4175 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-maintainer/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-maintainer/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-annotation - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation-maintainer XWiki Platform - Annotations - Maintainer @@ -95,6 +95,12 @@ ${commons.version} test + + org.xwiki.commons + xwiki-commons-tool-test-jmock + ${commons.version} + test + org.xwiki.rendering xwiki-rendering-transformation-macro diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-reference/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-reference/pom.xml index ce4dd1547939..c22ab3461f55 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-reference/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-reference/pom.xml @@ -23,7 +23,7 @@ org.xwiki.platform xwiki-platform-annotation - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation-reference XWiki Platform - Annotations - References Manipulation diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/pom.xml index a3641a82408b..2ff82da9a724 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-annotation - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation-rest XWiki Platform - Annotations - REST Services @@ -38,11 +38,25 @@ org.xwiki.platform xwiki-platform-rest-server ${project.version} + + + + xerces + xercesImpl + + org.xwiki.platform xwiki-platform-annotation-core ${project.version} + + + + xerces + xercesImpl + + org.xwiki.platform @@ -57,6 +71,13 @@ org.xwiki.platform xwiki-platform-wysiwyg-api ${project.version} + + + + xerces + xercesImpl + + diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/AnnotationsRESTResource.java b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/AnnotationsRESTResource.java index 5cd4c4501fe5..4eb0205491f3 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/AnnotationsRESTResource.java +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/AnnotationsRESTResource.java @@ -21,6 +21,7 @@ import javax.inject.Named; import javax.inject.Singleton; +import javax.ws.rs.Encoded; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -45,7 +46,7 @@ public class AnnotationsRESTResource extends AbstractAnnotationsRESTResource { /** * @param wiki the wiki of the document to get annotations for - * @param space the space of the document to get annotations for + * @param spaceNames the space names of the document to get annotations for * @param page the name of the document to get annotation for * @return annotations of a given XWiki page. Note that we're returning a response holding the AnnotatedContent * instead of an AnnotatedContent object because we need to be able to set custom expire fields to prevent @@ -53,10 +54,10 @@ public class AnnotationsRESTResource extends AbstractAnnotationsRESTResource * @throws XWikiRestException when failing to parse space */ @GET - public Response doGetAnnotatedContent(@PathParam("spaceName") String space, @PathParam("pageName") String page, - @PathParam("wikiName") String wiki) throws XWikiRestException + public Response doGetAnnotatedContent(@PathParam("spaceName") @Encoded String spaceNames, + @PathParam("pageName") String page, @PathParam("wikiName") String wiki) throws XWikiRestException { - DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(space), page); + DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(spaceNames), page); return getAnnotatedContent(documentReference); } @@ -64,17 +65,18 @@ public Response doGetAnnotatedContent(@PathParam("spaceName") String space, @Pat * Add annotation to a given page. * * @param wiki the wiki of the document to add annotation on - * @param space the space of the document to add annotation on + * @param spaceNames the space names of the document to add annotation on * @param page the name of the document to add annotation on * @param request the request object with the annotation to be added * @return AnnotationRequestResponse, responseCode = 0 if no error * @throws XWikiRestException when failing to parse space */ @POST - public AnnotationResponse doPostAnnotation(@PathParam("wikiName") String wiki, @PathParam("spaceName") String space, - @PathParam("pageName") String page, AnnotationAddRequest request) throws XWikiRestException + public AnnotationResponse doPostAnnotation(@PathParam("wikiName") String wiki, + @PathParam("spaceName") @Encoded String spaceNames, @PathParam("pageName") String page, + AnnotationAddRequest request) throws XWikiRestException { - DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(space), page); + DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(spaceNames), page); return postAnnotation(documentReference, request); } } diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/AnnotationsTranslationRESTResource.java b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/AnnotationsTranslationRESTResource.java index 9b53f2427294..a4ee36055511 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/AnnotationsTranslationRESTResource.java +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/AnnotationsTranslationRESTResource.java @@ -23,6 +23,7 @@ import javax.inject.Named; import javax.inject.Singleton; +import javax.ws.rs.Encoded; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -49,7 +50,7 @@ public class AnnotationsTranslationRESTResource extends AbstractAnnotationsRESTR { /** * @param wiki the wiki of the document to get annotations for - * @param space the space of the document to get annotations for + * @param spaceNames the space names of the document to get annotations for * @param page the name of the document to get annotation for * @param language the language of the translation of the document to get the annotation for * @return annotations of a given XWiki page. Note that we're returning a response holding the AnnotatedContent @@ -58,11 +59,12 @@ public class AnnotationsTranslationRESTResource extends AbstractAnnotationsRESTR * @throws XWikiRestException when failing to parse space */ @GET - public Response doGetAnnotatedContent(@PathParam("spaceName") String space, @PathParam("pageName") String page, - @PathParam("wikiName") String wiki, @PathParam("language") String language) throws XWikiRestException + public Response doGetAnnotatedContent(@PathParam("spaceName") @Encoded String spaceNames, + @PathParam("pageName") String page, @PathParam("wikiName") String wiki, @PathParam("language") String language) + throws XWikiRestException { - DocumentReference documentReference = - new DocumentReference(wiki, parseSpaceSegments(space), page, LocaleUtils.toLocale(language, Locale.ROOT)); + DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(spaceNames), page, + LocaleUtils.toLocale(language, Locale.ROOT)); return getAnnotatedContent(documentReference); } @@ -70,7 +72,7 @@ public Response doGetAnnotatedContent(@PathParam("spaceName") String space, @Pat * Add annotation to a given page. * * @param wiki the wiki of the document to add annotation on - * @param space the space of the document to add annotation on + * @param spaceNames the space names of the document to add annotation on * @param page the name of the document to add annotation on * @param language he language of the translation of the document to add the annotation on * @param request the request object with the annotation to be added @@ -78,11 +80,11 @@ public Response doGetAnnotatedContent(@PathParam("spaceName") String space, @Pat * @throws XWikiRestException when failing to parse space */ @POST - public AnnotationResponse doPostAnnotation(@PathParam("wikiName") String wiki, @PathParam("spaceName") String space, - @PathParam("pageName") String page, @PathParam("language") String language, AnnotationAddRequest request) - throws XWikiRestException + public AnnotationResponse doPostAnnotation(@PathParam("wikiName") String wiki, + @PathParam("spaceName") @Encoded String spaceNames, @PathParam("pageName") String page, + @PathParam("language") String language, AnnotationAddRequest request) throws XWikiRestException { - DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(space), page); + DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(spaceNames), page); return postAnnotation(documentReference, request); } } diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/SingleAnnotationRESTResource.java b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/SingleAnnotationRESTResource.java index 4025047abd63..d46eed56864f 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/SingleAnnotationRESTResource.java +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-rest/src/main/java/org/xwiki/annotation/rest/internal/SingleAnnotationRESTResource.java @@ -26,6 +26,7 @@ import javax.inject.Named; import javax.inject.Singleton; import javax.ws.rs.DELETE; +import javax.ws.rs.Encoded; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -59,7 +60,7 @@ public class SingleAnnotationRESTResource extends AbstractAnnotationRESTResource /** * Deletes the specified annotation. * - * @param space the space of the document to delete the annotation from + * @param spaceNames the space names of the document to delete the annotation from * @param page the name of the document to delete the annotation from * @param wiki the wiki of the document to delete the annotation from * @param id the id of the annotation to delete @@ -69,12 +70,12 @@ public class SingleAnnotationRESTResource extends AbstractAnnotationRESTResource * @throws XWikiRestException when failing to parse space */ @DELETE - public AnnotationResponse doDelete(@PathParam("spaceName") String space, @PathParam("pageName") String page, - @PathParam("wikiName") String wiki, @PathParam("id") String id, AnnotationRequest request) - throws XWikiRestException + public AnnotationResponse doDelete(@PathParam("spaceName") @Encoded String spaceNames, + @PathParam("pageName") String page, @PathParam("wikiName") String wiki, @PathParam("id") String id, + AnnotationRequest request) throws XWikiRestException { try { - DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(space), page); + DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(spaceNames), page); // Initialize the context with the correct value. updateContext(documentReference); @@ -102,7 +103,7 @@ public AnnotationResponse doDelete(@PathParam("spaceName") String space, @PathPa /** * Updates the specified annotation with the values of the fields in received collection. * - * @param space the space of the document to update the annotation from + * @param spaceNames the space names of the document to update the annotation from * @param page the name of the document to update the annotation from * @param wiki the wiki of the document to update the annotation from * @param id the id of the annotation to update @@ -111,12 +112,12 @@ public AnnotationResponse doDelete(@PathParam("spaceName") String space, @PathPa * @throws XWikiRestException when failing to parse space */ @PUT - public AnnotationResponse doUpdate(@PathParam("spaceName") String space, @PathParam("pageName") String page, - @PathParam("wikiName") String wiki, @PathParam("id") String id, AnnotationUpdateRequest updateRequest) - throws XWikiRestException + public AnnotationResponse doUpdate(@PathParam("spaceName") @Encoded String spaceNames, + @PathParam("pageName") String page, @PathParam("wikiName") String wiki, @PathParam("id") String id, + AnnotationUpdateRequest updateRequest) throws XWikiRestException { try { - DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(space), page); + DocumentReference documentReference = new DocumentReference(wiki, parseSpaceSegments(spaceNames), page); // Initialize the context with the correct value. updateContext(documentReference); diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-scripting/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-scripting/pom.xml index aa4f6d197d15..a23278667d69 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-scripting/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-scripting/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-annotation - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation-scripting XWiki Platform - Annotations - Scripting APIs diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/pom.xml index c4b816aa2515..0847933c9064 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-annotation - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation-test XWiki Platform - Annotations - Tests - Parent POM diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/xwiki-platform-annotation-test-docker/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/xwiki-platform-annotation-test-docker/pom.xml index 96d949bca97f..9b75386d0997 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/xwiki-platform-annotation-test-docker/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/xwiki-platform-annotation-test-docker/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-annotation-test - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation-test-docker XWiki Platform - Annotation - Test - Functional Docker Tests diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/xwiki-platform-annotation-test-pageobjects/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/xwiki-platform-annotation-test-pageobjects/pom.xml index 39c96b5d0427..f5e1d7142a11 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/xwiki-platform-annotation-test-pageobjects/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-test/xwiki-platform-annotation-test-pageobjects/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-annotation-test - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation-test-pageobjects XWiki Platform - Annotations - Page Objects diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/pom.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/pom.xml index 7f0f4b39b6a1..ecdeb75537e7 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/pom.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/pom.xml @@ -23,15 +23,17 @@ org.xwiki.platform xwiki-platform-annotation - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-annotation-ui XWiki Platform - Annotations - UI xar - Annotations application for XWiki, to provide interface for the core annotations feature. + Add annotations to wiki pages Annotation Application + + application diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Translations.ko.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Translations.ko.xml index 98201ee0c26f..ae4a4dc58bdf 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Translations.ko.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Translations.ko.xml @@ -50,12 +50,12 @@ annotations.annotated.error.noannotatedelement=컨텐츠를 사용할 수 없기 annotations.annotated.error.wrongsyntax=XWiki/1.0 구문으로 작성된 페이지에는 주석을 사용할 수 없습니다. annotations.action.edit.text=[편집] annotations.action.edit.tooltip=주석 편집 -annotations.action.edit.submit.text=수정 +annotations.action.edit.submit.text=업데이트 annotations.action.edit.cancel.text=취소 annotations.action.edit.success=주석이 수정되었습니다. annotations.action.edit.loaderror=실패함: annotations.action.edit.error.notfound=이 주석은 더 이상 존재하지 않습니다. 업데이트된 보기를 보려면 페이지를 새로 고치세요. -annotations.action.delete.text=삭제 +annotations.action.delete.text=[삭제] annotations.action.delete.tooltip=주석 삭제 annotations.action.delete.confirm=이 주석을 삭제하시겠습니까? annotations.action.delete.inProgress=주석 삭제 중... @@ -78,14 +78,14 @@ annotations.action.view.error.notfound=이 주석은 더 이상 존재하지 않 annotations.action.view.thread=쓰레드 보기 annotations.altered.text=주석이 달린 텍스트를 페이지에서 찾을 수 없기 때문에 이 주석을 표시할 수 없습니다: annotations.updated.text=페이지가 갱신된 후 이 주석은 자동적으로 재배치 되었습니다. 원본: -annotations.action.validate.text=[확인] +annotations.action.validate.text=[검증] annotations.action.validate.tooltip=이 주석에서 선택한 텍스트의 자동 업데이트를 확인하세요 annotations.action.validate.success=주석 승인됨. annotations.action.validate.loaderror=실패함: annotations.filters.show=필터 annotations.filters.nooption="{0}"에 대해 필터링할 값이 없습니다 annotations.filters.anyvalue=모든 값 -annotations.filters.clearvalue=분명한 +annotations.filters.clearvalue=초기화 annotations.config.title=주석 구성 패널 annotations.config.display.title=주석 보이기 annotations.config.type.title=주석 타입 diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Translations.pt_BR.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Translations.pt_BR.xml index 611d1f8e2e23..1f70db176270 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Translations.pt_BR.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Translations.pt_BR.xml @@ -40,61 +40,52 @@ annotations.menu.loading=Carregando as configurações de anotações annotations.menu.loaderror=Falha\: annotations.tab.info.noannotations=Nenhuma anotação para esse documento - annotations.settings.display=Mostrar anotações -annotations.settings.error.wrongsyntax=Anotações não estão disponíveis para documentos com sintaxe XWiki/1.0 +annotations.settings.error.wrongsyntax=As anotações não estão disponíveis para páginas escritas na sintaxe XWiki/1.0. annotations.settings.error.notarget=Nenhum documento especificado para definir as configurações de anotações. - annotations.annotated.loading=Carregando documento anotado -annotations.annotated.loaderror=Falha +annotations.annotated.loaderror=Falha: annotations.annotated.loaderror.wrongresponse=Resposta do servidor formatada erroneamente annotations.annotated.error.noannotatedelement=As anotações não puderam ser carregadas porque o conteúdo não está disponível. annotations.annotated.error.wrongsyntax=Anotações não estão disponíveis para documentos com a sintaxe XWiki/1.0. - annotations.action.edit.text=[Editar] annotations.action.edit.tooltip=Editar essa anotação annotations.action.edit.submit.text=Atualizar annotations.action.edit.cancel.text=Cancelar -annotations.action.edit.success=A anotação foi atualizada com sucesso +annotations.action.edit.success=Anotação atualizada. annotations.action.edit.loaderror=Falha\: annotations.action.edit.error.notfound=Essa anotação não existe mais. Por favor, atualize a página para uma visão real do conteúdo. - annotations.action.delete.text=[Apagar] annotations.action.delete.tooltip=Apagar essa anotação annotations.action.delete.confirm=Você tem certeza que deseja apagar essa anotação? annotations.action.delete.inProgress=Apagando anotação... annotations.action.delete.done=Anotação apagada -annotations.action.delete.failed=Falha ao tentar apagar anotação - +annotations.action.delete.failed=Falha ao excluir anotação: annotations.action.create.submit.text=Adicionar anotação annotations.action.create.cancel.text=Cancelar annotations.action.create.selection.invalid=Por favor, selecione um texto não vazio no conteúdo do documento. annotations.action.create.form.loaderror=Falha\: -annotations.action.create.success=A anotação foi acrescentada com sucesso +annotations.action.create.success=Anotação adicionada. annotations.action.create.loaderror=Falha\: annotations.action.create.error.unauthorized=Você não está autorizado a acrescentar anotações nesse documento. annotations.action.create.error.unauthorizedguest=Você não está autorizado a acrescentar anotações nesse documento. Tente acessar com sua senha inicialmente. annotations.action.create.helpmessage=Para comentar uma parte do texto, selecione-o e digite {0}. annotations.action.create.error.wrongsyntax=Anotações não estão disponíveis para documentos com sintaxe XWiki/1.0. annotations.action.create.error.notarget=Alvo (documento) não especificado para criação de anotações. - annotations.action.view.hide.text=esconder -annotations.action.view.form.loaderror=Falha +annotations.action.view.form.loaderror=Falha: annotations.action.view.error.notfound=Essa anotação não existe mais. Por favor, atualize a página para uma visão real do conteúdo. annotations.action.view.thread=Veja thread - annotations.altered.text=Essa anotação não pode ser mostrada porque o texto anotado não foi encontrado no documento\: annotations.updated.text=Essa anotação foi reposicionada automaticamente depois de uma atualização de um documento. Originalmente\: annotations.action.validate.text=[Validar] annotations.action.validate.tooltip=Valida a atualização automática do texto selecionado dessa anotação -annotations.action.validate.success=A anotação foi validada com sucesso -annotations.action.validate.loaderror=Falha - +annotations.action.validate.success=Anotação validada. +annotations.action.validate.loaderror=Falha: annotations.filters.show=Refine o critério para exibição annotations.filters.nooption=Não existem valores para filtrar para "{0}" annotations.filters.anyvalue=qualquer valor annotations.filters.clearvalue=limpar - annotations.config.title=Painel de configuração de anotações annotations.config.display.title=Configurações de exibição das anotações annotations.config.type.title=Configurações de tipo de anotações @@ -102,15 +93,15 @@ annotations.config.activate.title=Configurações de ativação das anotações annotations.config.activate.explanation=As duas configurações seguintes possibilitam configurar quais espaços são anotações ativas. A primeira configuração especifica a regra geral, enquanto que a segunda lista especifica os espaços para os quais a regra não será aplicada. Por exemplo\: ativando "sim" e excetuando "XWiki" e "Principal" significa que as anotações estarão ativas em todos os espaços com exceção de "XWiki" e "Principal", enquanto que ativando "não" e excetuando "Documentos" significa que as anotações estarão ativas apenas para o espaço "Documentos". annotations.config.type.explanation=Adicione propriedades para essa classe se você deseja propriedades extras para suas anotações. admin.annotations=Anotações -### Missing: admin.annotations.description=Configure the page annotations - +admin.annotations.description=Configurar as anotações da página AnnotationCode.AnnotationConfig_activated=Anotações estão ativadas -### Missing: AnnotationCode.AnnotationConfig_activated.hint=Decide if annotations are active on the wiki +AnnotationCode.AnnotationConfig_activated.hint=Decida se as anotações estão ativas no wiki AnnotationCode.AnnotationConfig_exceptionSpaces=Exceto para os seguintes espaços -### Missing: AnnotationCode.AnnotationConfig_exceptionSpaces.hint=Deactivate annotations for the following subset of locations: +AnnotationCode.AnnotationConfig_exceptionSpaces.hint=Desative anotações para o seguinte subconjunto de locais: AnnotationCode.AnnotationConfig_displayed=Mostra anotações por padrão -### Missing: AnnotationCode.AnnotationConfig_displayed.hint=Decide if annotations are displayed by default or only when "Show annotations" is checked on each page +AnnotationCode.AnnotationConfig_displayed.hint=Decida se as anotações serão exibidas por padrão ou apenas quando "Mostrar anotações" estiver marcado em cada página AnnotationCode.AnnotationConfig_displayHighlight=Mostra anotações destacadas por padrão -### Missing: AnnotationCode.AnnotationConfig_displayHighlight.hint=Decide if highlighting of an annotation should be displayed always or only when hovering over an annotation or a structure of annotations -AnnotationCode.AnnotationConfig_annotationClass=Classe XWiki definindo a estrutura das anotações +AnnotationCode.AnnotationConfig_displayHighlight.hint=Decida se o destaque de uma anotação deve ser exibido sempre ou somente ao passar o mouse sobre uma anotação ou estrutura de anotações +AnnotationCode.AnnotationConfig_annotationClass=Classe XWiki definindo a estrutura das anotações + diff --git a/xwiki-platform-core/xwiki-platform-application/pom.xml b/xwiki-platform-core/xwiki-platform-application/pom.xml index b45bb0f74d20..6391c3becbe0 100644 --- a/xwiki-platform-core/xwiki-platform-application/pom.xml +++ b/xwiki-platform-core/xwiki-platform-application/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-core - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-application XWiki Platform - Application - Parent POM diff --git a/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-test/pom.xml b/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-test/pom.xml index 38a68c3ee9a9..5cbac853726b 100644 --- a/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-test/pom.xml +++ b/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-test/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-application - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-application-test XWiki Platform - Application - Tests - Parent POM diff --git a/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-test/xwiki-platform-application-test-pageobjects/pom.xml b/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-test/xwiki-platform-application-test-pageobjects/pom.xml index 22e2c5818ce6..1c268953c65e 100644 --- a/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-test/xwiki-platform-application-test-pageobjects/pom.xml +++ b/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-test/xwiki-platform-application-test-pageobjects/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-application-test - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-application-test-pageobjects XWiki Platform - Application - Tests - Page Objects diff --git a/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-ui/pom.xml b/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-ui/pom.xml index 10be1bb093e1..729ef93985c9 100644 --- a/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-ui/pom.xml +++ b/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-ui/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-application - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-application-ui XWiki Platform - Application - UI diff --git a/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-ui/src/main/resources/Applications/Translations.tr.xml b/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-ui/src/main/resources/Applications/Translations.tr.xml new file mode 100644 index 000000000000..24cbd4fb6ee7 --- /dev/null +++ b/xwiki-platform-core/xwiki-platform-application/xwiki-platform-application-ui/src/main/resources/Applications/Translations.tr.xml @@ -0,0 +1,45 @@ + + + + + + Applications + Translations + tr + en + 1 + Applications.WebHome + xwiki:XWiki.Admin + xwiki:XWiki.Admin + + xwiki:XWiki.Admin + 1.1 + Translations + + + + false + plain/1.0 + true + application.index.title=Uygulama İndeksi +application.index.drawer=Uygulama İndeksi + + diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/pom.xml b/xwiki-platform-core/xwiki-platform-appwithinminutes/pom.xml index 5c8602456ec8..b5ccecd0c1a3 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/pom.xml +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-core - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-appwithinminutes XWiki Platform - App Within Minutes diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/pom.xml b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/pom.xml index 54461b82c4ea..89fd63a9de26 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/pom.xml +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-appwithinminutes - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-appwithinminutes-test XWiki Platform - App Within Minutes - Test - Parent diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/pom.xml b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/pom.xml index 5cc90b206297..76b6215a719c 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/pom.xml +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-appwithinminutes-test - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-appwithinminutes-test-docker XWiki Platform - AppWithinMinutes - Tests - Functional Docker Tests diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/src/test/it/org/xwiki/appwithinminutes/test/ui/AddEntryIT.java b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/src/test/it/org/xwiki/appwithinminutes/test/ui/AddEntryIT.java index b651c4058411..cd54f9e4cc94 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/src/test/it/org/xwiki/appwithinminutes/test/ui/AddEntryIT.java +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/src/test/it/org/xwiki/appwithinminutes/test/ui/AddEntryIT.java @@ -22,7 +22,6 @@ import java.util.HashMap; import java.util.Map; -import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.xwiki.appwithinminutes.test.po.ApplicationHomeEditPage; @@ -34,6 +33,7 @@ import org.xwiki.test.ui.TestUtils; import org.xwiki.test.ui.po.LiveTableElement; +import static org.apache.commons.lang3.RandomStringUtils.secure; import static org.junit.jupiter.api.Assertions.assertTrue; /** @@ -77,7 +77,7 @@ void entryNameWithURLSpecialCharacters(TestReference testReference, TestUtils te // Test EntryNamePane entryNamePane = homePage.clickAddNewEntry(); - String entryName = "A?b=c&d#" + RandomStringUtils.randomAlphanumeric(3); + String entryName = "A?b=c&d#" + secure().nextAlphanumeric(3); entryNamePane.setName(entryName); EntryEditPage entryEditPage = entryNamePane.clickAdd(); entryEditPage.setValue("description", "This is a test panel."); diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/src/test/it/org/xwiki/appwithinminutes/test/ui/DocumentFieldsIT.java b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/src/test/it/org/xwiki/appwithinminutes/test/ui/DocumentFieldsIT.java index 405356a4035a..4eae2a2ca11a 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/src/test/it/org/xwiki/appwithinminutes/test/ui/DocumentFieldsIT.java +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-docker/src/test/it/org/xwiki/appwithinminutes/test/ui/DocumentFieldsIT.java @@ -59,7 +59,7 @@ "xwikiPropertiesAdditionalProperties=test.prchecker.excludePattern=.*:AppWithinMinutes\\.(ClassEditSheet|DynamicMessageTool|LiveTableEditSheet)"}) class DocumentFieldsIT { - private String appName = RandomStringUtils.randomAlphabetic(6); + private String appName = RandomStringUtils.secure().nextAlphabetic(6); @BeforeAll static void beforeAll(TestUtils setup) diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-pageobjects/pom.xml b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-pageobjects/pom.xml index e4220e259b14..246fda4a6beb 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-pageobjects/pom.xml +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-pageobjects/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-appwithinminutes-test - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-appwithinminutes-test-pageobjects XWiki Platform - App Within Minutes - Page Objects diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-pageobjects/src/main/java/org/xwiki/appwithinminutes/test/po/ApplicationHomeEditPage.java b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-pageobjects/src/main/java/org/xwiki/appwithinminutes/test/po/ApplicationHomeEditPage.java index 3159717ad671..929540649a2f 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-pageobjects/src/main/java/org/xwiki/appwithinminutes/test/po/ApplicationHomeEditPage.java +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-test/xwiki-platform-appwithinminutes-test-pageobjects/src/main/java/org/xwiki/appwithinminutes/test/po/ApplicationHomeEditPage.java @@ -170,7 +170,7 @@ public void removeLiveTableColumn(String columnLabel) // FIXME: This doesn't trigger the :hover CSS pseudo class. The click still works because the delete X (text) is // not really hidden: it is displayed with white color (the page background-color). new Actions(getDriver().getWrappedDriver()).moveToElement(column).perform(); - column.findElement(By.className("delete")).click(); + getDriver().scrollTo(column.findElement(By.className("delete"))).click(); } /** diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/pom.xml b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/pom.xml index 061204c3d018..e818d2ec8aae 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/pom.xml +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-appwithinminutes - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-appwithinminutes-ui XWiki Platform - App Within Minutes - UI diff --git a/xwiki-platform-core/xwiki-platform-attachment/pom.xml b/xwiki-platform-core/xwiki-platform-attachment/pom.xml index b56e82456ad6..7f7048661acc 100644 --- a/xwiki-platform-core/xwiki-platform-attachment/pom.xml +++ b/xwiki-platform-core/xwiki-platform-attachment/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-core - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-attachment XWiki Platform - Attachment - Parent POM diff --git a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/pom.xml b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/pom.xml index 370d895b7af3..78202ea7a7e6 100644 --- a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/pom.xml +++ b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/pom.xml @@ -25,7 +25,7 @@ org.xwiki.platform xwiki-platform-attachment - 16.3.0-SNAPSHOT + 16.9.0-SNAPSHOT xwiki-platform-attachment-api XWiki Platform - Attachment - API diff --git a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/configuration/AttachmentConfiguration.java b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/configuration/AttachmentConfiguration.java new file mode 100644 index 000000000000..012fe1cc1ef8 --- /dev/null +++ b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/configuration/AttachmentConfiguration.java @@ -0,0 +1,39 @@ +/* + * 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.attachment.configuration; + +import org.xwiki.component.annotation.Role; +import org.xwiki.stability.Unstable; + +/** + * General configuration values for attachments. + * + * @version $Id$ + * @since 16.3.0RC1 + */ +@Unstable +@Role +public interface AttachmentConfiguration +{ + /** + * @return whether or not comments for attachment uploads should be settable and displayed from UI + */ + boolean isCommentsEnabled(); +} diff --git a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/internal/configuration/DefaultAttachmentConfiguration.java b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/internal/configuration/DefaultAttachmentConfiguration.java new file mode 100644 index 000000000000..0c67449d2b1c --- /dev/null +++ b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/internal/configuration/DefaultAttachmentConfiguration.java @@ -0,0 +1,51 @@ +/* + * 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.attachment.internal.configuration; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import org.xwiki.attachment.configuration.AttachmentConfiguration; +import org.xwiki.component.annotation.Component; +import org.xwiki.configuration.ConfigurationSource; + +/** + * Default implementation for attachment configuration. + * + * @version $Id$ + * @since 16.3.0RC1 + */ +@Component +@Singleton +public class DefaultAttachmentConfiguration implements AttachmentConfiguration +{ + private static final String ATTACHMENT_MIMETYPE_ENABLE_COMMENTS_PROPERTY = "attachment.upload.enableComments"; + + @Inject + @Named("xwikiproperties") + private ConfigurationSource xwikiPropertiesConfigurationSource; + + @Override + public boolean isCommentsEnabled() + { + return this.xwikiPropertiesConfigurationSource.getProperty(ATTACHMENT_MIMETYPE_ENABLE_COMMENTS_PROPERTY, false); + } +} diff --git a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/internal/listener/MovedAttachmentListener.java b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/internal/listener/MovedAttachmentListener.java index a545bb1c2f40..a6294e47cc16 100644 --- a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/internal/listener/MovedAttachmentListener.java +++ b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/internal/listener/MovedAttachmentListener.java @@ -23,10 +23,12 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.function.Predicate; import javax.inject.Inject; import javax.inject.Named; +import javax.inject.Provider; import javax.inject.Singleton; import org.slf4j.Logger; @@ -41,6 +43,7 @@ import org.xwiki.refactoring.RefactoringException; import org.xwiki.refactoring.internal.ModelBridge; import org.xwiki.refactoring.internal.ReferenceUpdater; +import org.xwiki.refactoring.internal.listener.LinkIndexingWaitingHelper; import org.xwiki.security.authorization.AuthorizationManager; import org.xwiki.security.authorization.Right; @@ -75,6 +78,10 @@ public class MovedAttachmentListener implements EventListener @Inject private Logger logger; + // Use a Provider to avoid early initialization of dependencies. + @Inject + private Provider linkIndexingHelper; + @Override public String getName() { @@ -111,6 +118,8 @@ private void updateBackLinks(AttachmentMovedEvent event, Predicate documentsList = diff --git a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/script/AttachmentScriptService.java b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/script/AttachmentScriptService.java index 3b76105f15d8..db61b20bb6d7 100644 --- a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/script/AttachmentScriptService.java +++ b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/java/org/xwiki/attachment/script/AttachmentScriptService.java @@ -28,6 +28,7 @@ import org.slf4j.Logger; import org.xwiki.attachment.AttachmentException; +import org.xwiki.attachment.configuration.AttachmentConfiguration; import org.xwiki.attachment.internal.AttachmentsManager; import org.xwiki.attachment.internal.refactoring.job.MoveAttachmentJob; import org.xwiki.attachment.refactoring.MoveAttachmentRequest; @@ -39,6 +40,7 @@ import org.xwiki.model.reference.AttachmentReference; import org.xwiki.model.reference.DocumentReference; import org.xwiki.script.service.ScriptService; +import org.xwiki.stability.Unstable; import com.xpn.xwiki.XWikiContext; import com.xpn.xwiki.XWikiException; @@ -74,6 +76,9 @@ public class AttachmentScriptService implements ScriptService @Named("readonly") private Provider xWikiContextProvider; + @Inject + private AttachmentConfiguration attachmentConfiguration; + @Inject private Logger logger; @@ -156,4 +161,16 @@ public long backlinksCount(AttachmentReference attachmentReference) throws Attac String.format("Failed to get the backlinks for attachment [%s]", attachmentReference), e); } } + + /** + * Gets the current configuration for attachments. + * + * @return the current configuration for attachments + * @since 16.3.0RC1 + */ + @Unstable + public AttachmentConfiguration getConfiguration() + { + return this.attachmentConfiguration; + } } diff --git a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/resources/ApplicationResources_az.properties b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/resources/ApplicationResources_az.properties new file mode 100644 index 000000000000..0d60d55a0eb7 --- /dev/null +++ b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/resources/ApplicationResources_az.properties @@ -0,0 +1,48 @@ +# --------------------------------------------------------------------------- +# 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. +# --------------------------------------------------------------------------- +### Missing: attachment.move.nonExisting=This attachment does not exist. +attachment.move.emptyName=L\u00FCtf\u0259n, etibarl\u0131 qo\u015Fma ad\u0131 daxil edin. +### Missing: attachment.move.alreadyExists=An attachment with the given name ({0}) already exists on {1}. Please provide a different name. +### Missing: attachment.move.title=Move {0} from {1} +attachment.move.source.label=M\u0259nb\u0259 +### Missing: attachment.move.source.hint=The attachment that is going to be moved. +### Missing: attachment.move.links.label=Update links +### Missing: attachment.move.links.hint=Update the target of {0} {0,choice,0#incoming links|1#incoming link|1{1}. Forne\u00E7a um nome diferente. +attachment.move.title=Mover {0} de {1} +attachment.move.source.label=Fonte +attachment.move.source.hint=O anexo que ser\u00E1 movido. +attachment.move.links.label=Atualizar links +attachment.move.links.hint=Atualize o alvo de {0} {0,choice,0#incoming links|1#incoming link|1