- {stringUtils.getLocalizableLabel(
- defaultLanguageId,
- selectedObjectFolder?.label,
- selectedObjectFolder?.name
- )}
+ {stringUtils.getLocalizableLabel({
+ fallbackLabel: selectedObjectFolder?.name,
+ labels: selectedObjectFolder?.label,
+ })}
{selectedObjectFolder && (
diff --git a/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/ObjectFoldersSidebar.tsx b/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/ObjectFoldersSidebar.tsx
index 436f0206976807..1e925c57802ce8 100644
--- a/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/ObjectFoldersSidebar.tsx
+++ b/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/ObjectFoldersSidebar.tsx
@@ -12,7 +12,6 @@ import {stringUtils} from '@liferay/object-js-components-web';
import {createResourceURL} from 'frontend-js-web';
import React, {SetStateAction} from 'react';
-import {defaultLanguageId} from '../../utils/constants';
import {exportObjectEntity} from '../../utils/exportObjectEntity';
import {ModalImportProperties} from './ViewObjectDefinitions';
@@ -179,11 +178,11 @@ export default function ObjectFoldersSideBar({
>
- {stringUtils.getLocalizableLabel(
- defaultLanguageId,
- currentObjectFolder.label,
- currentObjectFolder.name
- )}
+ {stringUtils.getLocalizableLabel({
+ fallbackLabel:
+ currentObjectFolder.name,
+ labels: currentObjectFolder.label,
+ })}
diff --git a/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/ViewObjectDefinitionsModals.tsx b/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/ViewObjectDefinitionsModals.tsx
index c6ec64379ab6be..f843ac85fbc293 100644
--- a/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/ViewObjectDefinitionsModals.tsx
+++ b/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/ViewObjectDefinitionsModals.tsx
@@ -251,9 +251,13 @@ export function ViewObjectDefinitionsModals({
'x-is-being-used-by-a-root-object-and-cannot-be-deleted'
),
`
"${stringUtils.getLocalizableLabel(
- selectedObjectDefinition.defaultLanguageId,
- selectedObjectDefinition.label,
- selectedObjectDefinition.name
+ {
+ fallbackLabel:
+ selectedObjectDefinition.name,
+ fallbackLanguageId:
+ selectedObjectDefinition.defaultLanguageId,
+ labels: selectedObjectDefinition.label,
+ }
)}"`
),
}}
diff --git a/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/objectDefinitionUtil.ts b/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/objectDefinitionUtil.ts
index 3e4d0764001b1d..62bcd18875ac6c 100644
--- a/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/objectDefinitionUtil.ts
+++ b/modules/apps/object/object-web/src/main/resources/META-INF/resources/js/components/ViewObjectDefinitions/objectDefinitionUtil.ts
@@ -4,7 +4,8 @@
*/
import {API} from '@liferay/object-js-components-web';
-import {createResourceURL, openModal, sub} from 'frontend-js-web';
+import {openModal} from 'frontend-js-components-web';
+import {createResourceURL, sub} from 'frontend-js-web';
import {SetStateAction} from 'react';
import {exportObjectEntity} from '../../utils/exportObjectEntity';
diff --git a/modules/apps/object/object-web/src/main/resources/META-INF/resources/object_entries/object_entry/form.jsp b/modules/apps/object/object-web/src/main/resources/META-INF/resources/object_entries/object_entry/form.jsp
index cd39971908ab69..4f21eb5a3d9dc7 100644
--- a/modules/apps/object/object-web/src/main/resources/META-INF/resources/object_entries/object_entry/form.jsp
+++ b/modules/apps/object/object-web/src/main/resources/META-INF/resources/object_entries/object_entry/form.jsp
@@ -252,6 +252,8 @@ portletDisplay.setURLBack(backURL);
method: externalReferenceCode ? 'PATCH' : 'POST',
})
.then((response) => {
+ Liferay.fire('submitButtonClicked');
+
if (response.status === 401) {
window.location.reload();
}
diff --git a/modules/apps/portal-language/portal-language-lang/bnd.bnd b/modules/apps/portal-language/portal-language-lang/bnd.bnd
index e3ffb513eb63db..730f4f4bea1126 100644
--- a/modules/apps/portal-language/portal-language-lang/bnd.bnd
+++ b/modules/apps/portal-language/portal-language-lang/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Language Lang
Bundle-SymbolicName: com.liferay.portal.language.lang
-Bundle-Version: 1.0.248
+Bundle-Version: 1.0.249
Provide-Capability:\
liferay.language.resources;\
resource.bundle.base.name="content.Language";\
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language.properties
index 20079ad706e7e7..fc64de2be3e71b 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language.properties
@@ -17151,6 +17151,7 @@ single-line=Single Line
single-node-memory-clustered=Single Node (Memory Clustered)
single-node-persisted=Single Node (Persisted)
single-production-server-x-x-left=Single Production Server ({0} {1} Left)
+single-select=Single Select
single-selection=Single Selection
single-sign-out=Single Sign Out
single-sign-out-completed-successfully=Single sign out completed successfully.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ar.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ar.properties
index 68fe4d175ca5df..40cebbc1c068c5 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ar.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ar.properties
@@ -17145,6 +17145,7 @@ single-line=سطر واحد
single-node-memory-clustered=عقدة فردية (ذاكرة منظمة في مجموعات)
single-node-persisted=عقدة فردية (مستمرة)
single-production-server-x-x-left=خادم الإنتاج الفردي ({0} {1} متبقي)
+single-select=Single Select (Automatic Copy)
single-selection=تحديد أحادي
single-sign-out=تسجيل الخروج الأحادي
single-sign-out-completed-successfully=اكتمل تسجيل الخروج الأحادي بنجاح.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_bg.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_bg.properties
index b726be142cae9d..1858765fdec39e 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_bg.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_bg.properties
@@ -17145,6 +17145,7 @@ single-line=Единична линия (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Единична селекция (Automatic Translation)
single-sign-out=Изход за един от (Automatic Translation)
single-sign-out-completed-successfully=Еднократната регистрация завърши успешно. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ca.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ca.properties
index 69cd911f94bfec..95cdf137646a34 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ca.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ca.properties
@@ -17147,6 +17147,7 @@ single-line=Una sola línia
single-node-memory-clustered=Node únic (clúster de memòria)
single-node-persisted=Node únic (persistent)
single-production-server-x-x-left=Servidors de producció ({0} de {1})
+single-select=Single Select (Automatic Copy)
single-selection=Selecció simple
single-sign-out=Tancament de sessió únic
single-sign-out-completed-successfully=Tancament de sessió únic completat correctament.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_cs.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_cs.properties
index 1371c6700d3e1c..4fd20eb23d8ade 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_cs.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_cs.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_da.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_da.properties
index 92404ed4d547f2..f9d525ab72630b 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_da.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_da.properties
@@ -17145,6 +17145,7 @@ single-line=Enkelt linje (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Enkelttegn ud (Automatic Translation)
single-sign-out-completed-successfully=Enkelttegn er fuldført. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de.properties
index b4816c6c31575a..f72b14b8e16cf1 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de.properties
@@ -17147,6 +17147,7 @@ single-line=Einzelne Zeile
single-node-memory-clustered=Einzelknoten (Speicher-gruppiert)
single-node-persisted=Einzelknoten (permanent)
single-production-server-x-x-left=Einzelner Produktivserver ({0} {1} verbleibend)
+single-select=Single Select (Automatic Copy)
single-selection=Einfachauswahl
single-sign-out=Single-Sign-Out
single-sign-out-completed-successfully=Single-Sign-Out erfoglreich abgeschlossen
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de_AT.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de_AT.properties
index b4bb357419d120..666518c1afea56 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de_AT.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de_AT.properties
@@ -17147,6 +17147,7 @@ single-line=Einzelne Zeile
single-node-memory-clustered=Einzelknoten (Speicher-gruppiert)
single-node-persisted=Einzelknoten (permanent)
single-production-server-x-x-left=Einzelner Produktivserver ({0} {1} verbleibend)
+single-select=Single Select (Automatic Copy)
single-selection=Einfachauswahl
single-sign-out=Single-Sign-Out
single-sign-out-completed-successfully=Single-Sign-Out erfoglreich abgeschlossen
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de_CH.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de_CH.properties
index b4bb357419d120..666518c1afea56 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de_CH.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_de_CH.properties
@@ -17147,6 +17147,7 @@ single-line=Einzelne Zeile
single-node-memory-clustered=Einzelknoten (Speicher-gruppiert)
single-node-persisted=Einzelknoten (permanent)
single-production-server-x-x-left=Einzelner Produktivserver ({0} {1} verbleibend)
+single-select=Single Select (Automatic Copy)
single-selection=Einfachauswahl
single-sign-out=Single-Sign-Out
single-sign-out-completed-successfully=Single-Sign-Out erfoglreich abgeschlossen
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_el.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_el.properties
index 5499d1f559aa39..05cfc2e76bef1a 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_el.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_el.properties
@@ -17145,6 +17145,7 @@ single-line=Μία γραμμή (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Μία επιλογή (Automatic Translation)
single-sign-out=Έξοδος μονής (Automatic Translation)
single-sign-out-completed-successfully=Η έξοδος κατά μίας σύνδεσης ολοκληρώθηκε με επιτυχία. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en.properties
index 20079ad706e7e7..fc64de2be3e71b 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en.properties
@@ -17151,6 +17151,7 @@ single-line=Single Line
single-node-memory-clustered=Single Node (Memory Clustered)
single-node-persisted=Single Node (Persisted)
single-production-server-x-x-left=Single Production Server ({0} {1} Left)
+single-select=Single Select
single-selection=Single Selection
single-sign-out=Single Sign Out
single-sign-out-completed-successfully=Single sign out completed successfully.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_AU.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_AU.properties
index 6a90e5bdb21f55..570726cde5d24d 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_AU.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_AU.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_CA.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_CA.properties
index 60f3c533f15439..38c4ec2677835e 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_CA.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_CA.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_GB.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_GB.properties
index 6e5b601a16f0e7..f9b48c575b245f 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_GB.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_en_GB.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es.properties
index 6d595230149a87..2b24f62e013c03 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es.properties
@@ -17147,6 +17147,7 @@ single-line=Una línea
single-node-memory-clustered=Nodo único (clúster de memoria)
single-node-persisted=Nodo único (persistente)
single-production-server-x-x-left=Servidor de producción único ({0} {1} Izquierda)
+single-select=Single Select (Automatic Copy)
single-selection=Selección única
single-sign-out=Cierre de sesión único
single-sign-out-completed-successfully=El cierre de sesión único se completó correctamente.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_AR.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_AR.properties
index 091c960ec75c14..a3a010a78697b1 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_AR.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_AR.properties
@@ -17147,6 +17147,7 @@ single-line=Una línea
single-node-memory-clustered=Nodo único (clúster de memoria)
single-node-persisted=Nodo único (persistente)
single-production-server-x-x-left=Servidor de producción único ({0} {1} Izquierda)
+single-select=Single Select (Automatic Copy)
single-selection=Selección única
single-sign-out=Cierre de sesión único
single-sign-out-completed-successfully=El cierre de sesión único se completó correctamente.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_CO.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_CO.properties
index 091c960ec75c14..a3a010a78697b1 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_CO.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_CO.properties
@@ -17147,6 +17147,7 @@ single-line=Una línea
single-node-memory-clustered=Nodo único (clúster de memoria)
single-node-persisted=Nodo único (persistente)
single-production-server-x-x-left=Servidor de producción único ({0} {1} Izquierda)
+single-select=Single Select (Automatic Copy)
single-selection=Selección única
single-sign-out=Cierre de sesión único
single-sign-out-completed-successfully=El cierre de sesión único se completó correctamente.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_MX.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_MX.properties
index 54b431ec46c7e7..f49ca01a440f09 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_MX.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_es_MX.properties
@@ -17147,6 +17147,7 @@ single-line=Una línea
single-node-memory-clustered=Nodo único (clúster de memoria)
single-node-persisted=Nodo único (persistente)
single-production-server-x-x-left=Servidor de producción único ({0} {1} Izquierda)
+single-select=Single Select (Automatic Copy)
single-selection=Selección única
single-sign-out=Cierre de sesión único
single-sign-out-completed-successfully=El cierre de sesión único se completó correctamente.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_et.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_et.properties
index 25244fbb8bd6a7..ea451ee9ab6a5b 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_et.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_et.properties
@@ -17145,6 +17145,7 @@ single-line=Üks rida (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Üks valik (Automatic Translation)
single-sign-out=Ühekordne väljalogimine (Automatic Translation)
single-sign-out-completed-successfully=Ühekordne väljalogimine on edukalt lõpule viidud. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_eu.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_eu.properties
index 50537d56c194d6..e0de23944342c1 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_eu.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_eu.properties
@@ -17145,6 +17145,7 @@ single-line=Lerro bakarra
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Aukera bakarra
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fa.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fa.properties
index 050ffa1daab59b..734cc1bc5bcc2d 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fa.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fa.properties
@@ -17145,6 +17145,7 @@ single-line=تک خط (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=سرور تولید تکی ({0} {1} Left)
+single-select=Single Select (Automatic Copy)
single-selection=انتخاب واحد
single-sign-out=تک امضا کردن (Automatic Translation)
single-sign-out-completed-successfully=ثبت نام تنها با موفقیت به پایان رسید. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fi.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fi.properties
index 30860d63a75fb2..59a0180f5ea3c6 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fi.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fi.properties
@@ -17144,6 +17144,7 @@ single-line=Yksi Rivi
single-node-memory-clustered=Yksittäinen solmu (muistiklusteroitu)
single-node-persisted=Yksittäinen solmu (pysyvä)
single-production-server-x-x-left=Vain yksi tuotantopalvelin ({0} {1} Jäljellä)
+single-select=Single Select (Automatic Copy)
single-selection=Yksittäinen Valinta
single-sign-out=Kertakirjautumisen Uloskirjautuminen
single-sign-out-completed-successfully=Kertakirjautumisen uloskirjautuminen valmistui onnistuneesti.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr.properties
index dfedb2f19e1102..396a44237fe851 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr.properties
@@ -17147,6 +17147,7 @@ single-line=Ligne unique
single-node-memory-clustered=Nœud unique (mémoire en cluster)
single-node-persisted=Nœud unique (persistant)
single-production-server-x-x-left=Serveur de production unique ({0} {1} restant)
+single-select=Single Select (Automatic Copy)
single-selection=Sélection unique
single-sign-out=Déconnexion unique
single-sign-out-completed-successfully=Déconnexion unique réussie.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_BE.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_BE.properties
index 590d3fd4a1c832..2220f466dae02a 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_BE.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_BE.properties
@@ -17147,6 +17147,7 @@ single-line=Ligne unique
single-node-memory-clustered=Nœud unique (mémoire en cluster)
single-node-persisted=Nœud unique (persistant)
single-production-server-x-x-left=Serveur de production unique ({0} {1} restant)
+single-select=Single Select (Automatic Copy)
single-selection=Sélection unique
single-sign-out=Déconnexion unique
single-sign-out-completed-successfully=Déconnexion unique réussie.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_CA.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_CA.properties
index 107bf55380c95a..c43cf2ac177cee 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_CA.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_CA.properties
@@ -17145,6 +17145,7 @@ single-line=Ligne unique
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Serveur de production unique ({0} {1} restant)
+single-select=Single Select (Automatic Copy)
single-selection=Sélection unique
single-sign-out=Déconnexion unique
single-sign-out-completed-successfully=Déconnexion unique réussie.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_CH.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_CH.properties
index 590d3fd4a1c832..2220f466dae02a 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_CH.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_fr_CH.properties
@@ -17147,6 +17147,7 @@ single-line=Ligne unique
single-node-memory-clustered=Nœud unique (mémoire en cluster)
single-node-persisted=Nœud unique (persistant)
single-production-server-x-x-left=Serveur de production unique ({0} {1} restant)
+single-select=Single Select (Automatic Copy)
single-selection=Sélection unique
single-sign-out=Déconnexion unique
single-sign-out-completed-successfully=Déconnexion unique réussie.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_gl.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_gl.properties
index 57715e4add304e..066631eaea6c19 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_gl.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_gl.properties
@@ -17145,6 +17145,7 @@ single-line=Liña única
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Nodo único (persistiu)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Selección única
single-sign-out=Peche de sesión único
single-sign-out-completed-successfully=O peche de sesión único foi concluído correctamente.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hi_IN.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hi_IN.properties
index c4406ed80dd3fa..da84f4acd326ab 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hi_IN.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hi_IN.properties
@@ -17145,6 +17145,7 @@ single-line=सिंगल लाइन (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=एकल चयन (Automatic Translation)
single-sign-out=सिंगल साइन आउट (Automatic Translation)
single-sign-out-completed-successfully=एकल साइन आउट सफलतापूर्वक पूरा हुआ। (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hr.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hr.properties
index f6c0919decb860..e64a206b1cb0fc 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hr.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hr.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hu.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hu.properties
index 14ad0e79940056..11c3970fa6d3d3 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hu.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_hu.properties
@@ -17148,6 +17148,7 @@ single-line=Egyetlen sor
single-node-memory-clustered=Egyetlen csomópont (fürtözött memória)
single-node-persisted=Egyetlen csomópont (állandó)
single-production-server-x-x-left=Egyszerű termelési szerver ({0} {1} maradt)
+single-select=Single Select (Automatic Copy)
single-selection=Egy választás
single-sign-out=Egyszeri kijelentkezés
single-sign-out-completed-successfully=Az egyszeri kijelentkezés sikeresen végrehajtva.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_in.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_in.properties
index 96a90a897841d6..df9f12ad3c1f1e 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_in.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_in.properties
@@ -17145,6 +17145,7 @@ single-line=Baris Tunggal (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Pilihan Tunggal (Automatic Translation)
single-sign-out=Keluar Tunggal (Automatic Translation)
single-sign-out-completed-successfully=Keluar tunggal berhasil diselesaikan. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_it.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_it.properties
index 938e9a1e88bb34..854631b4633f9f 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_it.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_it.properties
@@ -17146,6 +17146,7 @@ single-line=Linea singola (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Singolo Server di Produzione ({0} {1} Rimasti)
+single-select=Single Select (Automatic Copy)
single-selection=Selezione singola (Automatic Translation)
single-sign-out=Disconnetti singola (Automatic Translation)
single-sign-out-completed-successfully=Uscita singola completata. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_it_CH.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_it_CH.properties
index aa39c309689a8b..6f9851103889c4 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_it_CH.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_it_CH.properties
@@ -17147,6 +17147,7 @@ single-line=Linea singola (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Singolo Server di Produzione ({0} {1} Rimasti)
+single-select=Single Select (Automatic Copy)
single-selection=Selezione singola (Automatic Translation)
single-sign-out=Disconnetti singola (Automatic Translation)
single-sign-out-completed-successfully=Uscita singola completata. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_iw.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_iw.properties
index 156c9a52f41028..79122b880d1ad6 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_iw.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_iw.properties
@@ -17145,6 +17145,7 @@ single-line=שורה בודדת (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=שרת Production יחיד (נותרו {0} {1})
+single-select=Single Select (Automatic Copy)
single-selection=בחירה יחידה
single-sign-out=יציאה יחידה
single-sign-out-completed-successfully=יציאה יחידה הושלמה בהצלחה.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ja.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ja.properties
index 5de6aab7fbbb9a..3fef7927f5bd36 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ja.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ja.properties
@@ -17147,6 +17147,7 @@ single-line=一行
single-node-memory-clustered=単一ノード (メモリクラスタ化)
single-node-persisted=単一ノード (永続化)
single-production-server-x-x-left=本番環境用サーバ ({0} 残り{1})
+single-select=Single Select (Automatic Copy)
single-selection=ラジオボタン
single-sign-out=シングルサインアウト
single-sign-out-completed-successfully=シングルサインアウトは正常に完了しました。
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_kk.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_kk.properties
index c6b18c817d2d33..bd9ce0297a3ef3 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_kk.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_kk.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_km.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_km.properties
index be10d6e2901129..af26f0c163458c 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_km.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_km.properties
@@ -17151,6 +17151,7 @@ single-line=Single Line
single-node-memory-clustered=Single Node (Memory Clustered)
single-node-persisted=Single Node (Persisted)
single-production-server-x-x-left=Single Production Server ({0} {1} Left)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection
single-sign-out=Single Sign Out
single-sign-out-completed-successfully=Single sign out completed successfully.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ko.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ko.properties
index c06847a7529fab..8523a026b5f7ff 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ko.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ko.properties
@@ -17145,6 +17145,7 @@ single-line=단일 행
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=단일 운영 서버 ({0} {1} 왼쪽)
+single-select=Single Select (Automatic Copy)
single-selection=단일 선택
single-sign-out=싱글 로그아웃
single-sign-out-completed-successfully=싱글 로그아웃이 성공적으로 완료되었습니다.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_lo.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_lo.properties
index a6f0147d58fed7..3948844a7797f2 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_lo.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_lo.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_lt.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_lt.properties
index a53e31e0395f7a..a29d9bda94b143 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_lt.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_lt.properties
@@ -17145,6 +17145,7 @@ single-line=Viena eilutė (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Vienas pasirinkimas (Automatic Translation)
single-sign-out=Viengubas atsijungimas (Automatic Translation)
single-sign-out-completed-successfully=Vienas atsijungimas sėkmingai baigtas. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_mk.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_mk.properties
index 60f3c533f15439..38c4ec2677835e 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_mk.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_mk.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ms.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ms.properties
index b3c237ff450c2d..b302ea97c6406c 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ms.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ms.properties
@@ -17145,6 +17145,7 @@ single-line=Talian Tunggal (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Pilihan Tunggal (Automatic Translation)
single-sign-out=Bujang Daftar Keluar (Automatic Translation)
single-sign-out-completed-successfully=Daftar keluar tunggal berjaya dilengkapkan. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nb.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nb.properties
index 65205a622ba7a6..09e616d162fd82 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nb.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nb.properties
@@ -17145,6 +17145,7 @@ single-line=Enkel linje
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Enkel produksjonstjener ({0} {1} Venstre)
+single-select=Single Select (Automatic Copy)
single-selection=Enkeltvalg
single-sign-out=Enkel av logg av (Automatic Translation)
single-sign-out-completed-successfully=Enkel pålogging er fullført. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nl.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nl.properties
index 9c738e58290773..e3f0f2c7723455 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nl.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nl.properties
@@ -17148,6 +17148,7 @@ single-line=Eén lijn
single-node-memory-clustered=Enkel knooppunt (geheugen gegroepeerd)
single-node-persisted=Enkel knooppunt (persistent)
single-production-server-x-x-left=Enkele productieserver (nog {0} {1} te gaan)
+single-select=Single Select (Automatic Copy)
single-selection=Enkelvoudige selectie
single-sign-out=Single Sign-out
single-sign-out-completed-successfully=Single Sign-out voltooid.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nl_BE.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nl_BE.properties
index 3136b889050804..9a3abbfb030399 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nl_BE.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_nl_BE.properties
@@ -17148,6 +17148,7 @@ single-line=Eén lijn
single-node-memory-clustered=Enkel knooppunt (geheugen gegroepeerd)
single-node-persisted=Enkel knooppunt (persistent)
single-production-server-x-x-left=Enkele productieserver (nog {0} {1} te gaan)
+single-select=Single Select (Automatic Copy)
single-selection=Enkelvoudige selectie
single-sign-out=Single Sign-out
single-sign-out-completed-successfully=Single Sign-out voltooid.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_no.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_no.properties
index 9949105ed07166..5ec6e9d0945b88 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_no.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_no.properties
@@ -17145,6 +17145,7 @@ single-line=Enkel linje
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Enkel produksjonstjener ({0} {1} Venstre)
+single-select=Single Select (Automatic Copy)
single-selection=Enkeltvalg
single-sign-out=Enkel av logg av (Automatic Translation)
single-sign-out-completed-successfully=Enkel pålogging er fullført. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pl.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pl.properties
index d9278f3e1f0878..67570f70ff03ad 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pl.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pl.properties
@@ -17145,6 +17145,7 @@ single-line=Pojedyncza linia (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Pojedynczy serwer produkcyjny ({0} {1} pozostało)
+single-select=Single Select (Automatic Copy)
single-selection=Pojedynczy wybór (Automatic Translation)
single-sign-out=Wylogowywanie się w jednym wylog (Automatic Translation)
single-sign-out-completed-successfully=Wylogowanie jednokrotne zostało zakończone pomyślnie. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pt_BR.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pt_BR.properties
index 7db4f00b33f29d..d357dfa8596cf3 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pt_BR.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pt_BR.properties
@@ -17145,6 +17145,7 @@ single-line=Linha única
single-node-memory-clustered=Nó único (memória em cluster)
single-node-persisted=Nó único (persistente)
single-production-server-x-x-left=Servidor único de produção ({0} {1} restantes)
+single-select=Single Select (Automatic Copy)
single-selection=Seleção única
single-sign-out=Logout Único
single-sign-out-completed-successfully=O logout único foi concluído com sucesso.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pt_PT.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pt_PT.properties
index 28c31d794d2e8e..f604c6c2aab72f 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pt_PT.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_pt_PT.properties
@@ -17147,6 +17147,7 @@ single-line=Linha Única (Automatic Translation)
single-node-memory-clustered=Nó único (memória em cluster)
single-node-persisted=Nó único (persistente)
single-production-server-x-x-left=Servidor Único de Produção ({0} {1} restantes)
+single-select=Single Select (Automatic Copy)
single-selection=Seleção única
single-sign-out=Saída única (Automatic Translation)
single-sign-out-completed-successfully=Único sinal concluído com sucesso. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ro.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ro.properties
index 0b0d213bdcc18c..55661592f0334a 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ro.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ro.properties
@@ -17145,6 +17145,7 @@ single-line=Linie unică (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Selecție unică (Automatic Translation)
single-sign-out=Deconectare unică (Automatic Translation)
single-sign-out-completed-successfully=Deconectarea unică s-a terminat cu succes. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ru.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ru.properties
index 71d155a0b750fe..e1db2a00cd664a 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ru.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ru.properties
@@ -17145,6 +17145,7 @@ single-line=Единая линия (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Одиночный выбор (Automatic Translation)
single-sign-out=Единый выход (Automatic Translation)
single-sign-out-completed-successfully=Одиночный знак из завершена успешно. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sk.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sk.properties
index 56d517666dc653..bc0cfee9c23b65 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sk.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sk.properties
@@ -17145,6 +17145,7 @@ single-line=Jeden riadok (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Jeden produkčný server ({0} {1} zostáva)
+single-select=Single Select (Automatic Copy)
single-selection=Jediný výber (Automatic Translation)
single-sign-out=Jediné odhlásenie (Automatic Translation)
single-sign-out-completed-successfully=Jednoduché odhlásenie bolo úspešne dokončené. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sl.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sl.properties
index 6acfb890f0b397..f7b333dcf08e75 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sl.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sl.properties
@@ -17145,6 +17145,7 @@ single-line=Enojna vrstica (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Enojni izbor (Automatic Translation)
single-sign-out=Enkratna odjava (Automatic Translation)
single-sign-out-completed-successfully=Enkratna odjava se je uspešno zaključila. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sr_RS.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sr_RS.properties
index 4103d2e7b11d35..a06b404edca8c3 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sr_RS.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sr_RS.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sr_RS_latin.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sr_RS_latin.properties
index 4220712bc55339..551351e8589e00 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sr_RS_latin.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sr_RS_latin.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Single Selection (Automatic Copy)
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sv.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sv.properties
index 267bde9be30fad..8801216f72f1c0 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sv.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_sv.properties
@@ -17145,6 +17145,7 @@ single-line=Enkel rad
single-node-memory-clustered=En nod (klustrat minne)
single-node-persisted=En nod (beständig)
single-production-server-x-x-left=Enskild produktionsserver ({0} {1} kvar)
+single-select=Single Select (Automatic Copy)
single-selection=Ett val
single-sign-out=Enkel utloggning
single-sign-out-completed-successfully=Enkel utloggning har slutförts.
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ta_IN.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ta_IN.properties
index f5dbaa7ed2214c..93c4ee85bf6957 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ta_IN.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_ta_IN.properties
@@ -17145,6 +17145,7 @@ single-line=Single Line (Automatic Copy)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=ஒற்றை தேர்வு
single-sign-out=Single Sign Out (Automatic Copy)
single-sign-out-completed-successfully=Single sign out completed successfully. (Automatic Copy)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_th.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_th.properties
index 30569a0bd1f644..e2171379508437 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_th.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_th.properties
@@ -17145,6 +17145,7 @@ single-line=แถวเดียว
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=เซิร์ฟเวอร์การผลิตเดี่ยว ({0} {1} ซ้าย)
+single-select=Single Select (Automatic Copy)
single-selection=เลือกอย่างเดียว
single-sign-out=ออกจากระบบครั้งเดียว
single-sign-out-completed-successfully=ออกจากระบบครั้งเดียวเสร็จเรียบร้อยแล้ว
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_tr.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_tr.properties
index 5cc9319dd62eff..366ce1d3a259f1 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_tr.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_tr.properties
@@ -17145,6 +17145,7 @@ single-line=Tek Satır (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Tek Seçim (Automatic Translation)
single-sign-out=Tek Oturum Açma (Automatic Translation)
single-sign-out-completed-successfully=Tek oturum açma başarıyla tamamlandı. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_uk.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_uk.properties
index 971e0726eebb94..3a4dd6bbf4497a 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_uk.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_uk.properties
@@ -17145,6 +17145,7 @@ single-line=Одинарна лінія (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Single Production Server ({0} {1} Left) (Automatic Copy)
+single-select=Single Select (Automatic Copy)
single-selection=Одинарне виділення (Automatic Translation)
single-sign-out=Одномісний вихід (Automatic Translation)
single-sign-out-completed-successfully=Єдиний вихід успішно завершено. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_vi.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_vi.properties
index 037e34e98ffcce..c48c24f0bc3576 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_vi.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_vi.properties
@@ -17145,6 +17145,7 @@ single-line=Một dòng (Automatic Translation)
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=Máy chủ ứng dụng đơn ({0} {1} Trái)
+single-select=Single Select (Automatic Copy)
single-selection=Lựa chọn đơn (Automatic Translation)
single-sign-out=Đăng xuất Một lần (Automatic Translation)
single-sign-out-completed-successfully=Đăng xuất đơn đã hoàn tất thành công. (Automatic Translation)
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_zh_CN.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_zh_CN.properties
index a88b101dfb767f..07ab5e276fbf9b 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_zh_CN.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_zh_CN.properties
@@ -17147,6 +17147,7 @@ single-line=单行
single-node-memory-clustered=单节点(内存群集)
single-node-persisted=单节点(持久)
single-production-server-x-x-left=单一生产服务器({0} {1}左边)
+single-select=Single Select (Automatic Copy)
single-selection=单选
single-sign-out=单点退出
single-sign-out-completed-successfully=已成功完成单点退出。
diff --git a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_zh_TW.properties b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_zh_TW.properties
index 76eb38ba0cbd73..5ec157984ca37e 100644
--- a/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_zh_TW.properties
+++ b/modules/apps/portal-language/portal-language-lang/src/main/resources/content/Language_zh_TW.properties
@@ -17146,6 +17146,7 @@ single-line=單行
single-node-memory-clustered=Single Node (Memory Clustered) (Automatic Copy)
single-node-persisted=Single Node (Persisted) (Automatic Copy)
single-production-server-x-x-left=單一Production伺服器({0} {1} 剩下)
+single-select=Single Select (Automatic Copy)
single-selection=單選
single-sign-out=單一登出
single-sign-out-completed-successfully=已成功完成單一登出。
diff --git a/modules/apps/portal-search/portal-search-admin-web/bnd.bnd b/modules/apps/portal-search/portal-search-admin-web/bnd.bnd
index 274c933495a978..904c1970f14579 100644
--- a/modules/apps/portal-search/portal-search-admin-web/bnd.bnd
+++ b/modules/apps/portal-search/portal-search-admin-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Portal Search Admin Web
Bundle-SymbolicName: com.liferay.portal.search.admin.web
-Bundle-Version: 4.0.77
+Bundle-Version: 4.0.78
Web-ContextPath: /portal-search-admin-web
-includeresource: package.json
\ No newline at end of file
diff --git a/modules/apps/portal-search/portal-search-admin-web/package.json b/modules/apps/portal-search/portal-search-admin-web/package.json
index 1288b1921fae50..226c44d7ba75b4 100644
--- a/modules/apps/portal-search/portal-search-admin-web/package.json
+++ b/modules/apps/portal-search/portal-search-admin-web/package.json
@@ -27,5 +27,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "4.0.77"
+ "version": "4.0.78"
}
diff --git a/modules/apps/portal-search/portal-search-web/bnd.bnd b/modules/apps/portal-search/portal-search-web/bnd.bnd
index 557b3104ac1b4c..a7a7591610e492 100644
--- a/modules/apps/portal-search/portal-search-web/bnd.bnd
+++ b/modules/apps/portal-search/portal-search-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Search Web
Bundle-SymbolicName: com.liferay.portal.search.web
-Bundle-Version: 6.0.149
+Bundle-Version: 6.0.150
Import-Package:\
!com.liferay.util.xml,\
\
diff --git a/modules/apps/portal-search/portal-search-web/package.json b/modules/apps/portal-search/portal-search-web/package.json
index 93058bf3826273..30df5b1584a364 100644
--- a/modules/apps/portal-search/portal-search-web/package.json
+++ b/modules/apps/portal-search/portal-search-web/package.json
@@ -42,5 +42,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "6.0.149"
+ "version": "6.0.150"
}
diff --git a/modules/apps/portal-search/portal-search/bnd.bnd b/modules/apps/portal-search/portal-search/bnd.bnd
index 344998e4e4ab5e..8b5cb8da1361ad 100644
--- a/modules/apps/portal-search/portal-search/bnd.bnd
+++ b/modules/apps/portal-search/portal-search/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Portal Search
Bundle-SymbolicName: com.liferay.portal.search
-Bundle-Version: 8.0.108
+Bundle-Version: 8.0.109
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/apps/portal-security/portal-security-script-management-web/bnd.bnd b/modules/apps/portal-security/portal-security-script-management-web/bnd.bnd
index c3b710327b2596..2986d498ff9a2f 100644
--- a/modules/apps/portal-security/portal-security-script-management-web/bnd.bnd
+++ b/modules/apps/portal-security/portal-security-script-management-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Portal Security Script Management Web
Bundle-SymbolicName: com.liferay.portal.security.script.management.web
-Bundle-Version: 1.0.20
+Bundle-Version: 1.0.21
Web-ContextPath: /portal-security-script-management-web
\ No newline at end of file
diff --git a/modules/apps/portal-security/portal-security-script-management-web/package.json b/modules/apps/portal-security/portal-security-script-management-web/package.json
index 3422a553d7ed63..ea71e3146d221a 100644
--- a/modules/apps/portal-security/portal-security-script-management-web/package.json
+++ b/modules/apps/portal-security/portal-security-script-management-web/package.json
@@ -28,5 +28,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "1.0.20"
+ "version": "1.0.21"
}
diff --git a/modules/apps/portal-workflow/portal-workflow-instance-tracker-web/bnd.bnd b/modules/apps/portal-workflow/portal-workflow-instance-tracker-web/bnd.bnd
index 59ed0d28db8f9a..b521b5d90751fc 100644
--- a/modules/apps/portal-workflow/portal-workflow-instance-tracker-web/bnd.bnd
+++ b/modules/apps/portal-workflow/portal-workflow-instance-tracker-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Portal Workflow Instance Tracker Web
Bundle-SymbolicName: com.liferay.portal.workflow.instance.tracker.web
-Bundle-Version: 1.0.50
+Bundle-Version: 1.0.51
Web-ContextPath: /portal-workflow-instance-tracker-web
\ No newline at end of file
diff --git a/modules/apps/portal-workflow/portal-workflow-instance-tracker-web/package.json b/modules/apps/portal-workflow/portal-workflow-instance-tracker-web/package.json
index f497ca3c150da6..59ec3520e897c3 100644
--- a/modules/apps/portal-workflow/portal-workflow-instance-tracker-web/package.json
+++ b/modules/apps/portal-workflow/portal-workflow-instance-tracker-web/package.json
@@ -25,5 +25,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "1.0.50"
+ "version": "1.0.51"
}
diff --git a/modules/apps/portal-workflow/portal-workflow-taglib/bnd.bnd b/modules/apps/portal-workflow/portal-workflow-taglib/bnd.bnd
index 4a055b47382c45..1cd09bc67903bb 100644
--- a/modules/apps/portal-workflow/portal-workflow-taglib/bnd.bnd
+++ b/modules/apps/portal-workflow/portal-workflow-taglib/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Workflow Taglib
Bundle-SymbolicName: com.liferay.portal.workflow.taglib
-Bundle-Version: 2.0.31
+Bundle-Version: 2.0.32
Export-Package: com.liferay.portal.workflow.taglib.servlet.taglib
Provide-Capability:\
osgi.extender;\
diff --git a/modules/apps/portal-workflow/portal-workflow-taglib/package.json b/modules/apps/portal-workflow/portal-workflow-taglib/package.json
index bf0c91ea356bae..aa6186ae53df74 100644
--- a/modules/apps/portal-workflow/portal-workflow-taglib/package.json
+++ b/modules/apps/portal-workflow/portal-workflow-taglib/package.json
@@ -21,5 +21,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "2.0.31"
+ "version": "2.0.32"
}
diff --git a/modules/apps/portal-workflow/portal-workflow-task-web/bnd.bnd b/modules/apps/portal-workflow/portal-workflow-task-web/bnd.bnd
index c0ee02860eae0b..a36e99d17f6a47 100644
--- a/modules/apps/portal-workflow/portal-workflow-task-web/bnd.bnd
+++ b/modules/apps/portal-workflow/portal-workflow-task-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Workflow Task Web
Bundle-SymbolicName: com.liferay.portal.workflow.task.web
-Bundle-Version: 5.0.85
+Bundle-Version: 5.0.86
Liferay-JS-Config: /META-INF/resources/js/config.js
Web-ContextPath: /portal-workflow-task-web
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/apps/portal-workflow/portal-workflow-task-web/package.json b/modules/apps/portal-workflow/portal-workflow-task-web/package.json
index 4a92edf8b10078..5ccdb27a139c6a 100644
--- a/modules/apps/portal-workflow/portal-workflow-task-web/package.json
+++ b/modules/apps/portal-workflow/portal-workflow-task-web/package.json
@@ -1,5 +1,6 @@
{
"dependencies": {
+ "frontend-js-components-web": "*",
"frontend-js-web": "*"
},
"main": "js/index.js",
@@ -9,5 +10,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "5.0.85"
+ "version": "5.0.86"
}
diff --git a/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/js/WorkFlowTaskActionDropdownPropsTransformer.js b/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/js/WorkFlowTaskActionDropdownPropsTransformer.js
index ecad7364a94277..0851428b4674ce 100644
--- a/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/js/WorkFlowTaskActionDropdownPropsTransformer.js
+++ b/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/js/WorkFlowTaskActionDropdownPropsTransformer.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openSimpleInputModal} from 'frontend-js-web';
+import {openSimpleInputModal} from 'frontend-js-components-web';
const ACTIONS = {
taskAssign({assignURL, namespace, title}) {
diff --git a/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/js/index.js b/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/js/index.js
index 1473898708c130..403efe96c5c4d1 100644
--- a/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/js/index.js
+++ b/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/js/index.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openSimpleInputModal} from 'frontend-js-web';
+import {openSimpleInputModal} from 'frontend-js-components-web';
export function WorkflowTaskAction({
namespace: portletNamespace,
diff --git a/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/tsconfig.json b/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/tsconfig.json
index 679c99502d3d4b..eb9f894ead0747 100644
--- a/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/tsconfig.json
+++ b/modules/apps/portal-workflow/portal-workflow-task-web/src/main/resources/META-INF/resources/tsconfig.json
@@ -1,5 +1,5 @@
{
- "@generated": "021cd0bc3c18b6a31ab54b7d273ae010fd9b6c9d",
+ "@generated": "877c13586a283ea124d57d8723c386d0bd354b2a",
"@readonly": "** AUTO-GENERATED: DO NOT EDIT **",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
@@ -12,6 +12,9 @@
"module": "es6",
"moduleResolution": "node",
"paths": {
+ "frontend-js-components-web": [
+ "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/index.ts"
+ ],
"frontend-js-web": [
"../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/index.d.ts"
]
@@ -32,6 +35,9 @@
"../../../../../../../../global.d.ts"
],
"references": [
+ {
+ "path": "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/tsconfig.json"
+ },
{
"path": "../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/tsconfig.json"
}
diff --git a/modules/apps/portal/portal-company-log-web/bnd.bnd b/modules/apps/portal/portal-company-log-web/bnd.bnd
index be232f56e002eb..6feb3fb12d231d 100644
--- a/modules/apps/portal/portal-company-log-web/bnd.bnd
+++ b/modules/apps/portal/portal-company-log-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Portal Company Log Web
Bundle-SymbolicName: com.liferay.portal.company.log.web
-Bundle-Version: 1.0.28
+Bundle-Version: 1.0.29
Web-ContextPath: /portal-company-log-web
\ No newline at end of file
diff --git a/modules/apps/portal/portal-company-log-web/package.json b/modules/apps/portal/portal-company-log-web/package.json
index 5029941160e3e7..9ef95940fcd589 100644
--- a/modules/apps/portal/portal-company-log-web/package.json
+++ b/modules/apps/portal/portal-company-log-web/package.json
@@ -17,5 +17,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "1.0.28"
+ "version": "1.0.29"
}
diff --git a/modules/apps/portlet-configuration/portlet-configuration-css-web/bnd.bnd b/modules/apps/portlet-configuration/portlet-configuration-css-web/bnd.bnd
index 2b5d499ce83c7f..bb19dd5c2f354f 100644
--- a/modules/apps/portlet-configuration/portlet-configuration-css-web/bnd.bnd
+++ b/modules/apps/portlet-configuration/portlet-configuration-css-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Portlet Configuration CSS Web
Bundle-SymbolicName: com.liferay.portlet.configuration.css.web
-Bundle-Version: 6.0.70
+Bundle-Version: 6.0.71
Web-ContextPath: /portlet-configuration-css-web
\ No newline at end of file
diff --git a/modules/apps/portlet-configuration/portlet-configuration-css-web/package.json b/modules/apps/portlet-configuration/portlet-configuration-css-web/package.json
index b9d3528c82a98c..d6b27c6da6c6ec 100644
--- a/modules/apps/portlet-configuration/portlet-configuration-css-web/package.json
+++ b/modules/apps/portlet-configuration/portlet-configuration-css-web/package.json
@@ -10,5 +10,5 @@
"checkFormat": "node-scripts format --check",
"format": "USE_REACT_16=true node-scripts format"
},
- "version": "6.0.70"
+ "version": "6.0.71"
}
diff --git a/modules/apps/portlet-configuration/portlet-configuration-web/bnd.bnd b/modules/apps/portlet-configuration/portlet-configuration-web/bnd.bnd
index 560ca73c64ca83..f1b2d393c073b6 100644
--- a/modules/apps/portlet-configuration/portlet-configuration-web/bnd.bnd
+++ b/modules/apps/portlet-configuration/portlet-configuration-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Portlet Configuration Web
Bundle-SymbolicName: com.liferay.portlet.configuration.web
-Bundle-Version: 5.0.90
+Bundle-Version: 5.0.91
Web-ContextPath: /portlet-configuration-web
\ No newline at end of file
diff --git a/modules/apps/portlet-configuration/portlet-configuration-web/package.json b/modules/apps/portlet-configuration/portlet-configuration-web/package.json
index f2a1c7f42868f0..54be6d6a7951ad 100644
--- a/modules/apps/portlet-configuration/portlet-configuration-web/package.json
+++ b/modules/apps/portlet-configuration/portlet-configuration-web/package.json
@@ -13,5 +13,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "5.0.90"
+ "version": "5.0.91"
}
diff --git a/modules/apps/product-navigation/product-navigation-applications-menu-web/bnd.bnd b/modules/apps/product-navigation/product-navigation-applications-menu-web/bnd.bnd
index 8fd290c5b17ff9..69f4cbc75e26df 100644
--- a/modules/apps/product-navigation/product-navigation-applications-menu-web/bnd.bnd
+++ b/modules/apps/product-navigation/product-navigation-applications-menu-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Product Navigation Applications Menu Web
Bundle-SymbolicName: com.liferay.product.navigation.applications.menu.web
-Bundle-Version: 2.0.73
+Bundle-Version: 2.0.74
Web-ContextPath: /product-navigation-applications-menu-web
\ No newline at end of file
diff --git a/modules/apps/product-navigation/product-navigation-applications-menu-web/package.json b/modules/apps/product-navigation/product-navigation-applications-menu-web/package.json
index 543bb85abeff4c..7b410ea35dfc6a 100644
--- a/modules/apps/product-navigation/product-navigation-applications-menu-web/package.json
+++ b/modules/apps/product-navigation/product-navigation-applications-menu-web/package.json
@@ -23,5 +23,5 @@
"format": "node-scripts format",
"test": "USE_REACT_16=true node-scripts test"
},
- "version": "2.0.73"
+ "version": "2.0.74"
}
diff --git a/modules/apps/product-navigation/product-navigation-applications-menu-web/src/main/resources/META-INF/resources/js/index.js b/modules/apps/product-navigation/product-navigation-applications-menu-web/src/main/resources/META-INF/resources/js/index.js
index 6f9e95e828de32..3bfbcde90c9223 100644
--- a/modules/apps/product-navigation/product-navigation-applications-menu-web/src/main/resources/META-INF/resources/js/index.js
+++ b/modules/apps/product-navigation/product-navigation-applications-menu-web/src/main/resources/META-INF/resources/js/index.js
@@ -12,8 +12,8 @@ import ClaySticker from '@clayui/sticker';
import ClayTabs from '@clayui/tabs';
import {useEventListener} from '@liferay/frontend-js-react-web';
import classNames from 'classnames';
-import {useId} from 'frontend-js-components-web';
-import {fetch, navigate, openSelectionModal} from 'frontend-js-web';
+import {openSelectionModal, useId} from 'frontend-js-components-web';
+import {fetch, navigate} from 'frontend-js-web';
import PropTypes from 'prop-types';
import React, {useEffect, useMemo, useRef, useState} from 'react';
diff --git a/modules/apps/product-navigation/product-navigation-control-menu-web/bnd.bnd b/modules/apps/product-navigation/product-navigation-control-menu-web/bnd.bnd
index 1ca501f24e6b56..68481eeea18fe9 100644
--- a/modules/apps/product-navigation/product-navigation-control-menu-web/bnd.bnd
+++ b/modules/apps/product-navigation/product-navigation-control-menu-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Product Navigation Control Menu Web
Bundle-SymbolicName: com.liferay.product.navigation.control.menu.web
-Bundle-Version: 6.0.102
+Bundle-Version: 6.0.103
Web-ContextPath: /product-navigation-control-menu-web
\ No newline at end of file
diff --git a/modules/apps/product-navigation/product-navigation-control-menu-web/package.json b/modules/apps/product-navigation/product-navigation-control-menu-web/package.json
index b209d4755f7d13..c8836e8b49aa4a 100644
--- a/modules/apps/product-navigation/product-navigation-control-menu-web/package.json
+++ b/modules/apps/product-navigation/product-navigation-control-menu-web/package.json
@@ -24,5 +24,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "6.0.102"
+ "version": "6.0.103"
}
diff --git a/modules/apps/product-navigation/product-navigation-control-menu-web/src/main/resources/META-INF/resources/js/addPortlet.js b/modules/apps/product-navigation/product-navigation-control-menu-web/src/main/resources/META-INF/resources/js/addPortlet.js
index 197f898a47fd83..c06ed87d923d4e 100644
--- a/modules/apps/product-navigation/product-navigation-control-menu-web/src/main/resources/META-INF/resources/js/addPortlet.js
+++ b/modules/apps/product-navigation/product-navigation-control-menu-web/src/main/resources/META-INF/resources/js/addPortlet.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openToast} from 'frontend-js-web';
+import {openToast} from 'frontend-js-components-web';
import addLoadingAnimation from './addLoadingAnimation';
import {LAYOUT_DATA_ITEM_TYPES} from './constants/layoutDataItemTypes';
diff --git a/modules/apps/product-navigation/product-navigation-product-menu-web/bnd.bnd b/modules/apps/product-navigation/product-navigation-product-menu-web/bnd.bnd
index f4b154a1e58484..b8ef751e7de725 100644
--- a/modules/apps/product-navigation/product-navigation-product-menu-web/bnd.bnd
+++ b/modules/apps/product-navigation/product-navigation-product-menu-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Product Navigation Product Menu Web
Bundle-SymbolicName: com.liferay.product.navigation.product.menu.web
-Bundle-Version: 6.0.119
+Bundle-Version: 6.0.120
Web-ContextPath: /product-navigation-product-menu-web
\ No newline at end of file
diff --git a/modules/apps/product-navigation/product-navigation-product-menu-web/package.json b/modules/apps/product-navigation/product-navigation-product-menu-web/package.json
index 0e43f1ff51d1c3..c3fc6cefc03af2 100644
--- a/modules/apps/product-navigation/product-navigation-product-menu-web/package.json
+++ b/modules/apps/product-navigation/product-navigation-product-menu-web/package.json
@@ -19,5 +19,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "6.0.119"
+ "version": "6.0.120"
}
diff --git a/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/LayoutFinder.js b/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/LayoutFinder.js
index bcdaafc8c441dc..2144f47f91b0b8 100644
--- a/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/LayoutFinder.js
+++ b/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/LayoutFinder.js
@@ -5,13 +5,8 @@
import ClayIcon from '@clayui/icon';
import ClayLoadingIndicator from '@clayui/loading-indicator';
-import {
- fetch,
- objectToFormData,
- openToast,
- setSessionValue,
- sub,
-} from 'frontend-js-web';
+import {openToast} from 'frontend-js-components-web';
+import {fetch, objectToFormData, setSessionValue, sub} from 'frontend-js-web';
import PropTypes from 'prop-types';
import React, {useCallback, useState} from 'react';
diff --git a/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/PageTypeSelector.js b/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/PageTypeSelector.js
index ee7c9e0b9cbd0b..7e53ac94a201c0 100644
--- a/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/PageTypeSelector.js
+++ b/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/PageTypeSelector.js
@@ -8,7 +8,8 @@ import {Option, Picker} from '@clayui/core';
import ClayDropDown from '@clayui/drop-down';
import ClayIcon from '@clayui/icon';
import ClayLink from '@clayui/link';
-import {fetch, navigate, openToast, setSessionValue} from 'frontend-js-web';
+import {openToast} from 'frontend-js-components-web';
+import {fetch, navigate, setSessionValue} from 'frontend-js-web';
import PropTypes from 'prop-types';
import React, {useCallback, useState} from 'react';
diff --git a/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/PagesTree.js b/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/PagesTree.js
index 91d151d3603a44..824af2ffd26d5a 100644
--- a/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/PagesTree.js
+++ b/modules/apps/product-navigation/product-navigation-product-menu-web/src/main/resources/META-INF/resources/js/PagesTree.js
@@ -7,7 +7,8 @@ import ClayButton, {ClayButtonWithIcon} from '@clayui/button';
import {TreeView as ClayTreeView} from '@clayui/core';
import {ClayDropDownWithItems} from '@clayui/drop-down';
import ClayIcon from '@clayui/icon';
-import {fetch, navigate, openModal, openToast, sub} from 'frontend-js-web';
+import {openModal, openToast} from 'frontend-js-components-web';
+import {fetch, navigate, sub} from 'frontend-js-web';
import PropTypes from 'prop-types';
import React, {useCallback, useEffect, useState} from 'react';
diff --git a/modules/apps/product-navigation/product-navigation-simulation-device/bnd.bnd b/modules/apps/product-navigation/product-navigation-simulation-device/bnd.bnd
index b668462b18f780..48e6429f3dffad 100644
--- a/modules/apps/product-navigation/product-navigation-simulation-device/bnd.bnd
+++ b/modules/apps/product-navigation/product-navigation-simulation-device/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Product Navigation Simulation Device
Bundle-SymbolicName: com.liferay.product.navigation.simulation.device
-Bundle-Version: 6.0.62
+Bundle-Version: 6.0.63
Web-ContextPath: /product-navigation-simulation-device
\ No newline at end of file
diff --git a/modules/apps/product-navigation/product-navigation-simulation-device/package.json b/modules/apps/product-navigation/product-navigation-simulation-device/package.json
index 3bc85395ba36f2..bd65cceff05fb1 100644
--- a/modules/apps/product-navigation/product-navigation-simulation-device/package.json
+++ b/modules/apps/product-navigation/product-navigation-simulation-device/package.json
@@ -19,5 +19,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "6.0.62"
+ "version": "6.0.63"
}
diff --git a/modules/apps/product-navigation/product-navigation-site-administration/bnd.bnd b/modules/apps/product-navigation/product-navigation-site-administration/bnd.bnd
index 7f42ba9b1e6c9f..d693f0118be144 100644
--- a/modules/apps/product-navigation/product-navigation-site-administration/bnd.bnd
+++ b/modules/apps/product-navigation/product-navigation-site-administration/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Product Navigation Site Administration
Bundle-SymbolicName: com.liferay.product.navigation.site.administration
-Bundle-Version: 6.0.55
+Bundle-Version: 6.0.56
Web-ContextPath: /product-navigation-site-administration
\ No newline at end of file
diff --git a/modules/apps/product-navigation/product-navigation-site-administration/package.json b/modules/apps/product-navigation/product-navigation-site-administration/package.json
index 90193391ca47a4..df1c9826755da0 100644
--- a/modules/apps/product-navigation/product-navigation-site-administration/package.json
+++ b/modules/apps/product-navigation/product-navigation-site-administration/package.json
@@ -1,5 +1,6 @@
{
"dependencies": {
+ "frontend-js-components-web": "*",
"frontend-js-web": "*"
},
"main": "js/index.ts",
@@ -10,5 +11,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "6.0.55"
+ "version": "6.0.56"
}
diff --git a/modules/apps/product-navigation/product-navigation-site-administration/src/main/resources/META-INF/resources/js/index.ts b/modules/apps/product-navigation/product-navigation-site-administration/src/main/resources/META-INF/resources/js/index.ts
index 72ad60db894521..1efa246bbdb469 100644
--- a/modules/apps/product-navigation/product-navigation-site-administration/src/main/resources/META-INF/resources/js/index.ts
+++ b/modules/apps/product-navigation/product-navigation-site-administration/src/main/resources/META-INF/resources/js/index.ts
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {navigate, openSelectionModal} from 'frontend-js-web';
+import {openSelectionModal} from 'frontend-js-components-web';
+import {navigate} from 'frontend-js-web';
// @ts-ignore
diff --git a/modules/apps/product-navigation/product-navigation-site-administration/src/main/resources/META-INF/resources/tsconfig.json b/modules/apps/product-navigation/product-navigation-site-administration/src/main/resources/META-INF/resources/tsconfig.json
index f982b4f28b4dff..b8cf79851d1f5b 100644
--- a/modules/apps/product-navigation/product-navigation-site-administration/src/main/resources/META-INF/resources/tsconfig.json
+++ b/modules/apps/product-navigation/product-navigation-site-administration/src/main/resources/META-INF/resources/tsconfig.json
@@ -1,5 +1,5 @@
{
- "@generated": "dd8139a6603671b99d96b128946391b2f24b4d77",
+ "@generated": "5f1944de77d11f657f627538fac6a35846f9459d",
"@readonly": "** AUTO-GENERATED: DO NOT EDIT **",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
@@ -12,6 +12,9 @@
"module": "es6",
"moduleResolution": "node",
"paths": {
+ "frontend-js-components-web": [
+ "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/index.ts"
+ ],
"frontend-js-web": [
"../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/index.d.ts"
]
@@ -32,6 +35,9 @@
"../../../../../../../../global.d.ts"
],
"references": [
+ {
+ "path": "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/tsconfig.json"
+ },
{
"path": "../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/tsconfig.json"
}
diff --git a/modules/apps/product-navigation/product-navigation-taglib/bnd.bnd b/modules/apps/product-navigation/product-navigation-taglib/bnd.bnd
index 08bb13317fca63..9a47e010ce1119 100644
--- a/modules/apps/product-navigation/product-navigation-taglib/bnd.bnd
+++ b/modules/apps/product-navigation/product-navigation-taglib/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Product Navigation Taglib
Bundle-SymbolicName: com.liferay.product.navigation.taglib
-Bundle-Version: 6.0.79
+Bundle-Version: 6.0.80
Export-Package: com.liferay.product.navigation.taglib.servlet.taglib
Liferay-JS-Config: /META-INF/resources/config.js
Provide-Capability:\
diff --git a/modules/apps/product-navigation/product-navigation-taglib/package.json b/modules/apps/product-navigation/product-navigation-taglib/package.json
index 665dbdc49e080e..d17a4128298a19 100644
--- a/modules/apps/product-navigation/product-navigation-taglib/package.json
+++ b/modules/apps/product-navigation/product-navigation-taglib/package.json
@@ -16,5 +16,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "6.0.79"
+ "version": "6.0.80"
}
diff --git a/modules/apps/questions/questions-web/bnd.bnd b/modules/apps/questions/questions-web/bnd.bnd
index d9fa9f193c782f..72e54926d9276e 100644
--- a/modules/apps/questions/questions-web/bnd.bnd
+++ b/modules/apps/questions/questions-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Questions Web
Bundle-SymbolicName: com.liferay.questions.web
-Bundle-Version: 2.0.125
+Bundle-Version: 2.0.126
Web-ContextPath: /questions-web
\ No newline at end of file
diff --git a/modules/apps/questions/questions-web/package.json b/modules/apps/questions/questions-web/package.json
index 78732a56fe0aa4..b26b063e6c75a6 100644
--- a/modules/apps/questions/questions-web/package.json
+++ b/modules/apps/questions/questions-web/package.json
@@ -50,5 +50,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "2.0.125"
+ "version": "2.0.126"
}
diff --git a/modules/apps/ratings/ratings-taglib/bnd.bnd b/modules/apps/ratings/ratings-taglib/bnd.bnd
index dfb65f4def58b5..6ae03a7d00ef13 100644
--- a/modules/apps/ratings/ratings-taglib/bnd.bnd
+++ b/modules/apps/ratings/ratings-taglib/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Ratings Taglib
Bundle-SymbolicName: com.liferay.ratings.taglib
-Bundle-Version: 3.1.37
+Bundle-Version: 3.1.38
Export-Package: com.liferay.ratings.taglib.servlet.taglib
Provide-Capability:\
osgi.extender;\
diff --git a/modules/apps/ratings/ratings-taglib/package.json b/modules/apps/ratings/ratings-taglib/package.json
index 3b5e33e7dcb918..f1bc37031c7635 100644
--- a/modules/apps/ratings/ratings-taglib/package.json
+++ b/modules/apps/ratings/ratings-taglib/package.json
@@ -27,5 +27,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "3.1.37"
+ "version": "3.1.38"
}
diff --git a/modules/apps/redirect/redirect-web/bnd.bnd b/modules/apps/redirect/redirect-web/bnd.bnd
index f545bd0e62b44f..d3eba571b56a4e 100644
--- a/modules/apps/redirect/redirect-web/bnd.bnd
+++ b/modules/apps/redirect/redirect-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Redirect Web
Bundle-SymbolicName: com.liferay.redirect.web
-Bundle-Version: 2.0.89
+Bundle-Version: 2.0.90
Web-ContextPath: /redirect-web
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/apps/redirect/redirect-web/package.json b/modules/apps/redirect/redirect-web/package.json
index 3b58ec7825fe08..12a1434dacc195 100644
--- a/modules/apps/redirect/redirect-web/package.json
+++ b/modules/apps/redirect/redirect-web/package.json
@@ -6,6 +6,7 @@
"@clayui/icon": "3.111.0",
"@clayui/layout": "3.111.0",
"@clayui/modal": "3.122.0",
+ "frontend-js-components-web": "*",
"frontend-js-web": "*",
"prop-types": "15.7.2",
"react": "18.2.0",
@@ -19,5 +20,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "2.0.89"
+ "version": "2.0.90"
}
diff --git a/modules/apps/redirect/redirect-web/src/main/resources/META-INF/resources/js/editRedirectEntry.js b/modules/apps/redirect/redirect-web/src/main/resources/META-INF/resources/js/editRedirectEntry.js
index 0f60770c610e83..2ea4e6e18ecd45 100644
--- a/modules/apps/redirect/redirect-web/src/main/resources/META-INF/resources/js/editRedirectEntry.js
+++ b/modules/apps/redirect/redirect-web/src/main/resources/META-INF/resources/js/editRedirectEntry.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {createResourceURL, fetch, openToast, postForm} from 'frontend-js-web';
+import {openToast} from 'frontend-js-components-web';
+import {createResourceURL, fetch, postForm} from 'frontend-js-web';
export default function ({getRedirectEntryChainCauseURL, namespace}) {
const form = document[`${namespace}fm`];
diff --git a/modules/apps/redirect/redirect-web/src/main/resources/META-INF/resources/tsconfig.json b/modules/apps/redirect/redirect-web/src/main/resources/META-INF/resources/tsconfig.json
index 7615b9941c55a4..25e36ae9cb388a 100644
--- a/modules/apps/redirect/redirect-web/src/main/resources/META-INF/resources/tsconfig.json
+++ b/modules/apps/redirect/redirect-web/src/main/resources/META-INF/resources/tsconfig.json
@@ -1,5 +1,5 @@
{
- "@generated": "6bccf8bc4cab247b40beec6c7615ba893885b8a9",
+ "@generated": "4d173616e67d3922e100d9217969e3446c77dec3",
"@readonly": "** AUTO-GENERATED: DO NOT EDIT **",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
@@ -12,6 +12,9 @@
"module": "es6",
"moduleResolution": "node",
"paths": {
+ "frontend-js-components-web": [
+ "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/index.ts"
+ ],
"frontend-js-web": [
"../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/index.d.ts"
]
@@ -32,6 +35,9 @@
"../../../../../../../../global.d.ts"
],
"references": [
+ {
+ "path": "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/tsconfig.json"
+ },
{
"path": "../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/tsconfig.json"
}
diff --git a/modules/apps/roles/roles-admin-web/bnd.bnd b/modules/apps/roles/roles-admin-web/bnd.bnd
index 36dd405b89b49f..34281b203059c8 100644
--- a/modules/apps/roles/roles-admin-web/bnd.bnd
+++ b/modules/apps/roles/roles-admin-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Roles Admin Web
Bundle-SymbolicName: com.liferay.roles.admin.web
-Bundle-Version: 5.0.117
+Bundle-Version: 5.0.118
Web-ContextPath: /roles-admin-web
\ No newline at end of file
diff --git a/modules/apps/roles/roles-admin-web/package.json b/modules/apps/roles/roles-admin-web/package.json
index ce29f4e4ff0b4e..a7bf05847d30e8 100644
--- a/modules/apps/roles/roles-admin-web/package.json
+++ b/modules/apps/roles/roles-admin-web/package.json
@@ -16,5 +16,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "5.0.117"
+ "version": "5.0.118"
}
diff --git a/modules/apps/saved-content/saved-content-taglib/bnd.bnd b/modules/apps/saved-content/saved-content-taglib/bnd.bnd
index 5212fa805910ac..c83c55d8c499c1 100644
--- a/modules/apps/saved-content/saved-content-taglib/bnd.bnd
+++ b/modules/apps/saved-content/saved-content-taglib/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Saved Content Taglib
Bundle-SymbolicName: com.liferay.saved.content.taglib
-Bundle-Version: 1.0.14
+Bundle-Version: 1.0.15
Export-Package: com.liferay.saved.content.taglib.servlet.taglib
Provide-Capability:\
osgi.extender;\
diff --git a/modules/apps/saved-content/saved-content-taglib/package.json b/modules/apps/saved-content/saved-content-taglib/package.json
index 5ee76ff0fab473..16ae02f193d915 100644
--- a/modules/apps/saved-content/saved-content-taglib/package.json
+++ b/modules/apps/saved-content/saved-content-taglib/package.json
@@ -19,5 +19,5 @@
"format": "node-scripts format",
"test": "USE_REACT_16=true node-scripts test"
},
- "version": "1.0.14"
+ "version": "1.0.15"
}
diff --git a/modules/apps/segments/segments-simulation-web/bnd.bnd b/modules/apps/segments/segments-simulation-web/bnd.bnd
index 902a31eda47d9d..a3c59f33c603e7 100644
--- a/modules/apps/segments/segments-simulation-web/bnd.bnd
+++ b/modules/apps/segments/segments-simulation-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Segments Simulation Web
Bundle-SymbolicName: com.liferay.segments.simulation.web
-Bundle-Version: 3.0.62
+Bundle-Version: 3.0.63
Web-ContextPath: /segments-simulation-web
\ No newline at end of file
diff --git a/modules/apps/segments/segments-simulation-web/package.json b/modules/apps/segments/segments-simulation-web/package.json
index c12504459e633d..f2691acd0377dd 100644
--- a/modules/apps/segments/segments-simulation-web/package.json
+++ b/modules/apps/segments/segments-simulation-web/package.json
@@ -17,5 +17,5 @@
"format": "node-scripts format",
"test": "USE_REACT_16=true node-scripts test"
},
- "version": "3.0.62"
+ "version": "3.0.63"
}
diff --git a/modules/apps/segments/segments-web/bnd.bnd b/modules/apps/segments/segments-web/bnd.bnd
index d6b9a4a3794774..0f3cc88eaa71a1 100644
--- a/modules/apps/segments/segments-web/bnd.bnd
+++ b/modules/apps/segments/segments-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Segments Web
Bundle-SymbolicName: com.liferay.segments.web
-Bundle-Version: 3.0.136
+Bundle-Version: 3.0.137
Web-ContextPath: /segments-web
\ No newline at end of file
diff --git a/modules/apps/segments/segments-web/package.json b/modules/apps/segments/segments-web/package.json
index ad98f36fc9cc75..15a851eeaf98c4 100644
--- a/modules/apps/segments/segments-web/package.json
+++ b/modules/apps/segments/segments-web/package.json
@@ -41,5 +41,5 @@
"test": "USE_REACT_16=true node-scripts test",
"test:watch": "USE_REACT_16=true node-scripts test --watch"
},
- "version": "3.0.136"
+ "version": "3.0.137"
}
diff --git a/modules/apps/sharing/sharing-taglib/bnd.bnd b/modules/apps/sharing/sharing-taglib/bnd.bnd
index b3b6242fac2731..a75fb7dec9a1b5 100644
--- a/modules/apps/sharing/sharing-taglib/bnd.bnd
+++ b/modules/apps/sharing/sharing-taglib/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Sharing Taglib
Bundle-SymbolicName: com.liferay.sharing.taglib
-Bundle-Version: 3.0.47
+Bundle-Version: 3.0.48
Export-Package: com.liferay.sharing.taglib.servlet.taglib
Provide-Capability:\
osgi.extender;\
diff --git a/modules/apps/sharing/sharing-taglib/package.json b/modules/apps/sharing/sharing-taglib/package.json
index 373de21525e26b..07f81a8f208d0c 100644
--- a/modules/apps/sharing/sharing-taglib/package.json
+++ b/modules/apps/sharing/sharing-taglib/package.json
@@ -18,5 +18,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "3.0.47"
+ "version": "3.0.48"
}
diff --git a/modules/apps/sharing/sharing-web/bnd.bnd b/modules/apps/sharing/sharing-web/bnd.bnd
index 282e46b429eb20..de745cb9d16589 100644
--- a/modules/apps/sharing/sharing-web/bnd.bnd
+++ b/modules/apps/sharing/sharing-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Sharing Web
Bundle-SymbolicName: com.liferay.sharing.web
-Bundle-Version: 3.0.78
+Bundle-Version: 3.0.79
Web-ContextPath: /sharing-web
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/apps/sharing/sharing-web/package.json b/modules/apps/sharing/sharing-web/package.json
index f405e7f5f717ac..e9dcc9062382a4 100644
--- a/modules/apps/sharing/sharing-web/package.json
+++ b/modules/apps/sharing/sharing-web/package.json
@@ -24,5 +24,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "3.0.78"
+ "version": "3.0.79"
}
diff --git a/modules/apps/site-initializer/site-initializer-cms/src/main/resources/site-initializer/site-configuration.json b/modules/apps/site-initializer/site-initializer-cms/src/main/resources/site-initializer/site-configuration.json
new file mode 100644
index 00000000000000..59fcc9d3c72f06
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-cms/src/main/resources/site-initializer/site-configuration.json
@@ -0,0 +1,3 @@
+{
+ "showControlMenuByRole": "true"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/layouts/1_test-objects-layout/page-definition.json b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/layouts/1_test-objects-layout/page-definition.json
index c9ad74822e71a0..493733b90d3bf1 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/layouts/1_test-objects-layout/page-definition.json
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/layouts/1_test-objects-layout/page-definition.json
@@ -113,6 +113,16 @@
"indexed": true
},
"type": "Fragment"
+ },
+ {
+ "definition": {
+ "widgetInstance": {
+ "widgetConfig": {
+ },
+ "widgetName": "[$OBJECT_DEFINITION_PORTLET_ID:TestObjectDefinition3$]"
+ }
+ },
+ "type": "Widget"
}
],
"type": "Root"
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/layouts/3_test-properties-layout/page.json b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/layouts/3_test-properties-layout/page.json
index 7b3dc6c958abba..0b0f3135a0765b 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/layouts/3_test-properties-layout/page.json
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/layouts/3_test-properties-layout/page.json
@@ -4,7 +4,7 @@
"layoutTemplateId": "[$PORTAL_PROPERTY:default.guest.public.layout.template.id$]",
"name": "[$PORTAL_PROPERTY:default.guest.public.layout.name$]",
"name_i18n": {
- "es_ES": "[$PORTAL_PROPERTY:default.user.private.layout.name$]"
+ "es_ES": "[$PORTAL_PROPERTY:default.guest.public.layout.name$]"
},
"priority": "1",
"private": false,
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/site-configuration.json b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/site-configuration.json
index 97b0f22d632172..812fc864343be6 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/site-configuration.json
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-1/src/main/resources/site-initializer/site-configuration.json
@@ -1,5 +1,10 @@
{
+ "accessToControlMenuRoleNames": [
+ "Test Role 1",
+ "Test Role 3"
+ ],
"manualMembership": "true",
"membershipRestriction": "0",
+ "showControlMenuByRole": "true",
"typeSite": "1"
}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/layouts/1_test-objects-layout/page-definition.json b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/layouts/1_test-objects-layout/page-definition.json
index c9ad74822e71a0..493733b90d3bf1 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/layouts/1_test-objects-layout/page-definition.json
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/layouts/1_test-objects-layout/page-definition.json
@@ -113,6 +113,16 @@
"indexed": true
},
"type": "Fragment"
+ },
+ {
+ "definition": {
+ "widgetInstance": {
+ "widgetConfig": {
+ },
+ "widgetName": "[$OBJECT_DEFINITION_PORTLET_ID:TestObjectDefinition3$]"
+ }
+ },
+ "type": "Widget"
}
],
"type": "Root"
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/layouts/3_test-properties-layout/page.json b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/layouts/3_test-properties-layout/page.json
index 7b3dc6c958abba..0b0f3135a0765b 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/layouts/3_test-properties-layout/page.json
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/layouts/3_test-properties-layout/page.json
@@ -4,7 +4,7 @@
"layoutTemplateId": "[$PORTAL_PROPERTY:default.guest.public.layout.template.id$]",
"name": "[$PORTAL_PROPERTY:default.guest.public.layout.name$]",
"name_i18n": {
- "es_ES": "[$PORTAL_PROPERTY:default.user.private.layout.name$]"
+ "es_ES": "[$PORTAL_PROPERTY:default.guest.public.layout.name$]"
},
"priority": "1",
"private": false,
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/site-configuration.json b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/site-configuration.json
new file mode 100644
index 00000000000000..e549afd0b1a19f
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test-bundle-2/src/main/resources/site-initializer/site-configuration.json
@@ -0,0 +1,6 @@
+{
+ "manualMembership": "true",
+ "membershipRestriction": "0",
+ "showControlMenuByRole": "false",
+ "typeSite": "1"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test/src/testIntegration/java/com/liferay/site/initializer/extender/internal/test/BundleSiteInitializerTest.java b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test/src/testIntegration/java/com/liferay/site/initializer/extender/internal/test/BundleSiteInitializerTest.java
index 1ad20546b66128..7ba121ab336329 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test/src/testIntegration/java/com/liferay/site/initializer/extender/internal/test/BundleSiteInitializerTest.java
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test/src/testIntegration/java/com/liferay/site/initializer/extender/internal/test/BundleSiteInitializerTest.java
@@ -120,6 +120,7 @@
import com.liferay.object.admin.rest.resource.v1_0.ObjectRelationshipResource;
import com.liferay.object.constants.ObjectActionExecutorConstants;
import com.liferay.object.constants.ObjectDefinitionConstants;
+import com.liferay.object.constants.ObjectPortletKeys;
import com.liferay.object.model.ObjectAction;
import com.liferay.object.model.ObjectDefinition;
import com.liferay.object.model.ObjectEntry;
@@ -205,6 +206,7 @@
import com.liferay.segments.model.SegmentsExperience;
import com.liferay.segments.service.SegmentsEntryLocalService;
import com.liferay.segments.service.SegmentsExperienceLocalService;
+import com.liferay.site.configuration.manager.MenuAccessConfigurationManager;
import com.liferay.site.initializer.SiteInitializer;
import com.liferay.site.initializer.SiteInitializerFactory;
import com.liferay.site.initializer.SiteInitializerRegistry;
@@ -3221,6 +3223,21 @@ private void _assertPublicLayouts1() throws Exception {
Assert.assertFalse(
pageDefinitionString.contains(
"[$OBJECT_DEFINITION_CLASS_NAME:TestObjectDefinition3$]"));
+ Assert.assertFalse(
+ pageDefinitionString.contains(
+ "[$OBJECT_DEFINITION_PORTLET_ID:TestObjectDefinition3$]"));
+
+ ObjectDefinition objectDefinition =
+ _objectDefinitionLocalService.fetchObjectDefinition(
+ _group.getCompanyId(), "C_TestObjectDefinition3");
+
+ Assert.assertTrue(
+ pageDefinitionString.contains(
+ StringBundler.concat(
+ ObjectPortletKeys.OBJECT_DEFINITIONS, StringPool.UNDERLINE,
+ StringUtil.split(
+ objectDefinition.getClassName(), StringPool.POUND)
+ [1])));
layout = _layoutLocalService.getLayoutByFriendlyURL(
_group.getGroupId(), false, "/test-url-layout");
@@ -3357,6 +3374,21 @@ private void _assertPublicLayouts2() throws Exception {
Assert.assertFalse(
pageDefinitionString.contains(
"[$OBJECT_DEFINITION_CLASS_NAME:TestObjectDefinition3$]"));
+ Assert.assertFalse(
+ pageDefinitionString.contains(
+ "[$OBJECT_DEFINITION_PORTLET_ID:TestObjectDefinition3$]"));
+
+ ObjectDefinition objectDefinition =
+ _objectDefinitionLocalService.fetchObjectDefinition(
+ _group.getCompanyId(), "C_TestObjectDefinition3");
+
+ Assert.assertTrue(
+ pageDefinitionString.contains(
+ StringBundler.concat(
+ ObjectPortletKeys.OBJECT_DEFINITIONS, StringPool.UNDERLINE,
+ StringUtil.split(
+ objectDefinition.getClassName(), StringPool.POUND)
+ [1])));
layout = _layoutLocalService.getLayoutByFriendlyURL(
_group.getGroupId(), false, "/test-url-layout");
@@ -3760,12 +3792,36 @@ private void _assertSegmentsEntries() {
draftLayoutSegmentsExperience2.getSegmentsExperienceId());
}
- private void _assertSiteConfiguration() {
+ private void _assertSiteConfiguration1() throws Exception {
Assert.assertEquals(
GroupConstants.DEFAULT_MEMBERSHIP_RESTRICTION,
_group.getMembershipRestriction());
Assert.assertEquals(GroupConstants.TYPE_SITE_OPEN, _group.getType());
Assert.assertTrue(_group.isManualMembership());
+
+ Assert.assertEquals(
+ 2,
+ _menuAccessConfigurationManager.getAccessToControlMenuRoleIds(
+ _group.getGroupId()).length);
+ Assert.assertTrue(
+ _menuAccessConfigurationManager.isShowControlMenuByRole(
+ _group.getGroupId()));
+ }
+
+ private void _assertSiteConfiguration2() throws Exception {
+ Assert.assertEquals(
+ GroupConstants.DEFAULT_MEMBERSHIP_RESTRICTION,
+ _group.getMembershipRestriction());
+ Assert.assertEquals(GroupConstants.TYPE_SITE_OPEN, _group.getType());
+ Assert.assertTrue(_group.isManualMembership());
+
+ Assert.assertEquals(
+ 0,
+ _menuAccessConfigurationManager.getAccessToControlMenuRoleIds(
+ _group.getGroupId()).length);
+ Assert.assertFalse(
+ _menuAccessConfigurationManager.isShowControlMenuByRole(
+ _group.getGroupId()));
}
private void _assertSiteNavigationMenu1() {
@@ -4446,7 +4502,7 @@ private void _test1(SiteInitializer siteInitializer) throws Exception {
_assertPortletSettings();
_assertSAPEntries();
_assertSegmentsEntries();
- _assertSiteConfiguration();
+ _assertSiteConfiguration1();
_assertSiteSettings();
_assertSiteNavigationMenu1();
_assertStyleBookEntry();
@@ -4485,6 +4541,7 @@ private void _test2(SiteInitializer siteInitializer) throws Exception {
_assertOrganizations2();
_assertPLOEntries2();
_assertResourcePermission2();
+ _assertSiteConfiguration2();
_assertSiteNavigationMenu2();
_assertSXPBlueprint2();
_assertUserAccounts2();
@@ -4641,6 +4698,9 @@ private void _test2(SiteInitializer siteInitializer) throws Exception {
private ListTypeDefinitionResource.Factory
_listTypeDefinitionResourceFactory;
+ @Inject
+ private MenuAccessConfigurationManager _menuAccessConfigurationManager;
+
@Inject
private NotificationTemplateResource.Factory
_notificationTemplateResourceFactory;
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/bnd.bnd b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/bnd.bnd
index 9ae1f07427c94c..cedebaf49cc9b6 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/bnd.bnd
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Site Initializer Extender
Bundle-SymbolicName: com.liferay.site.initializer.extender
-Bundle-Version: 1.0.126
\ No newline at end of file
+Bundle-Version: 1.0.127
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/BundleSiteInitializer.java b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/BundleSiteInitializer.java
index bb1b51da7fd1d5..f329216ff0bd0c 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/BundleSiteInitializer.java
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/BundleSiteInitializer.java
@@ -215,6 +215,7 @@
import com.liferay.segments.model.SegmentsExperience;
import com.liferay.segments.service.SegmentsEntryLocalService;
import com.liferay.segments.service.SegmentsExperienceLocalService;
+import com.liferay.site.configuration.manager.MenuAccessConfigurationManager;
import com.liferay.site.exception.InitializationException;
import com.liferay.site.initializer.SiteInitializer;
import com.liferay.site.initializer.extender.CommerceSiteInitializer;
@@ -316,6 +317,7 @@ public BundleSiteInitializer(
ListTypeEntryLocalService listTypeEntryLocalService,
ListTypeEntryResource listTypeEntryResource,
ListTypeEntryResource.Factory listTypeEntryResourceFactory,
+ MenuAccessConfigurationManager menuAccessConfigurationManager,
NotificationTemplateResource.Factory
notificationTemplateResourceFactory,
ObjectActionLocalService objectActionLocalService,
@@ -410,6 +412,7 @@ public BundleSiteInitializer(
_listTypeEntryLocalService = listTypeEntryLocalService;
_listTypeEntryResource = listTypeEntryResource;
_listTypeEntryResourceFactory = listTypeEntryResourceFactory;
+ _menuAccessConfigurationManager = menuAccessConfigurationManager;
_notificationTemplateResourceFactory =
notificationTemplateResourceFactory;
_objectActionLocalService = objectActionLocalService;
@@ -3577,9 +3580,9 @@ private void _addOrUpdateResourcePermissions(
if (_log.isWarnEnabled()) {
_log.warn(
StringBundler.concat(
- "No resource action found with resourceName ",
+ "No resource action found with name ",
jsonObject.getString("resourceName"),
- " with the actionIds: ",
+ " and action IDs ",
ArrayUtil.toString(actionIds, "")));
}
@@ -4503,9 +4506,8 @@ private void _addSegmentsExperiences(
private void _addSiteConfiguration(ServiceContext serviceContext)
throws Exception {
- String resourcePath = "site-initializer/site-configuration.json";
-
- String json = SiteInitializerUtil.read(resourcePath, _servletContext);
+ String json = SiteInitializerUtil.read(
+ "/site-initializer/site-configuration.json", _servletContext);
if (json == null) {
return;
@@ -4522,6 +4524,43 @@ private void _addSiteConfiguration(ServiceContext serviceContext)
jsonObject.getInt("membershipRestriction"));
_groupLocalService.updateGroup(group);
+
+ JSONArray accessToControlMenuRoleNamesJSONArray =
+ jsonObject.getJSONArray("accessToControlMenuRoleNames");
+
+ if (accessToControlMenuRoleNamesJSONArray == null) {
+ _menuAccessConfigurationManager.updateMenuAccessConfiguration(
+ serviceContext.getScopeGroupId(), new String[0],
+ jsonObject.getBoolean("showControlMenuByRole"));
+
+ return;
+ }
+
+ List
roleIds = new ArrayList<>();
+
+ for (int i = 0; i < accessToControlMenuRoleNamesJSONArray.length();
+ i++) {
+
+ Role role = _roleLocalService.fetchRole(
+ serviceContext.getCompanyId(),
+ accessToControlMenuRoleNamesJSONArray.getString(i));
+
+ if (role == null) {
+ if (_log.isWarnEnabled()) {
+ _log.warn(
+ "No role found with name " +
+ accessToControlMenuRoleNamesJSONArray.getString(i));
+ }
+
+ continue;
+ }
+
+ roleIds.add(role.getRoleId());
+ }
+
+ _menuAccessConfigurationManager.updateMenuAccessConfiguration(
+ serviceContext.getScopeGroupId(), ArrayUtil.toStringArray(roleIds),
+ jsonObject.getBoolean("showControlMenuByRole"));
}
private void _addSiteSettings(ServiceContext serviceContext)
@@ -5339,7 +5378,7 @@ addPortletSettingsR, _dependsOn(addOrUpdateTaxonomyVocabulariesR)
addSegmentsExperiencesR,
_dependsOn(addOrUpdateLayoutsContentR, addOrUpdateSegmentsEntriesR)
).put(
- addSiteConfigurationR, _dependsOn()
+ addSiteConfigurationR, _dependsOn(addOrUpdateRolesR)
).put(
addSiteSettingsR, _dependsOn()
).put(
@@ -6049,6 +6088,8 @@ private void _updateLayoutSets(
private final ListTypeEntryLocalService _listTypeEntryLocalService;
private final ListTypeEntryResource _listTypeEntryResource;
private final ListTypeEntryResource.Factory _listTypeEntryResourceFactory;
+ private final MenuAccessConfigurationManager
+ _menuAccessConfigurationManager;
private final NotificationTemplateResource.Factory
_notificationTemplateResourceFactory;
private final ObjectActionLocalService _objectActionLocalService;
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerExtender.java b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerExtender.java
index 5839b1f7d93bc7..b3db589a4843d5 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerExtender.java
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerExtender.java
@@ -86,6 +86,7 @@
import com.liferay.portal.util.PropsValues;
import com.liferay.segments.service.SegmentsEntryLocalService;
import com.liferay.segments.service.SegmentsExperienceLocalService;
+import com.liferay.site.configuration.manager.MenuAccessConfigurationManager;
import com.liferay.site.initializer.extender.internal.file.backed.osgi.FileBackedBundleDelegate;
import com.liferay.site.initializer.extender.internal.file.backed.servlet.FileBackedServletContextDelegate;
import com.liferay.site.navigation.service.SiteNavigationMenuItemLocalService;
@@ -165,7 +166,7 @@ public SiteInitializerExtension addingBundle(
_layoutUtilityPageEntryLocalService,
_listTypeDefinitionResource, _listTypeDefinitionResourceFactory,
_listTypeEntryLocalService, _listTypeEntryResource,
- _listTypeEntryResourceFactory,
+ _listTypeEntryResourceFactory, _menuAccessConfigurationManager,
_notificationTemplateResourceFactory, _objectActionLocalService,
_objectDefinitionLocalService, _objectDefinitionResourceFactory,
_objectEntryLocalService, _objectEntryManager,
@@ -286,7 +287,7 @@ private void _addFile(File file) throws Exception {
_layoutUtilityPageEntryLocalService,
_listTypeDefinitionResource, _listTypeDefinitionResourceFactory,
_listTypeEntryLocalService, _listTypeEntryResource,
- _listTypeEntryResourceFactory,
+ _listTypeEntryResourceFactory, _menuAccessConfigurationManager,
_notificationTemplateResourceFactory, _objectActionLocalService,
_objectDefinitionLocalService, _objectDefinitionResourceFactory,
_objectEntryLocalService, _objectEntryManager,
@@ -482,6 +483,9 @@ private void _addFile(File file) throws Exception {
@Reference
private ListTypeEntryResource.Factory _listTypeEntryResourceFactory;
+ @Reference
+ private MenuAccessConfigurationManager _menuAccessConfigurationManager;
+
@Reference
private NotificationTemplateResource.Factory
_notificationTemplateResourceFactory;
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerExtension.java b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerExtension.java
index f5ebb396763031..131bd05322c643 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerExtension.java
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerExtension.java
@@ -83,6 +83,7 @@
import com.liferay.portal.security.service.access.policy.service.SAPEntryLocalService;
import com.liferay.segments.service.SegmentsEntryLocalService;
import com.liferay.segments.service.SegmentsExperienceLocalService;
+import com.liferay.site.configuration.manager.MenuAccessConfigurationManager;
import com.liferay.site.initializer.SiteInitializer;
import com.liferay.site.navigation.service.SiteNavigationMenuItemLocalService;
import com.liferay.site.navigation.service.SiteNavigationMenuLocalService;
@@ -155,6 +156,7 @@ public SiteInitializerExtension(
ListTypeEntryLocalService listTypeEntryLocalService,
ListTypeEntryResource listTypeEntryResource,
ListTypeEntryResource.Factory listTypeEntryResourceFactory,
+ MenuAccessConfigurationManager menuAccessConfigurationManager,
NotificationTemplateResource.Factory
notificationTemplateResourceFactory,
ObjectActionLocalService objectActionLocalService,
@@ -224,16 +226,16 @@ public SiteInitializerExtension(
layoutUtilityPageEntryLocalService, listTypeDefinitionResource,
listTypeDefinitionResourceFactory, listTypeEntryLocalService,
listTypeEntryResource, listTypeEntryResourceFactory,
- notificationTemplateResourceFactory, objectActionLocalService,
- objectDefinitionLocalService, objectDefinitionResourceFactory,
- objectEntryLocalService, objectEntryManager,
- objectFieldLocalService, objectFieldResourceFactory,
- objectFolderResourceFactory, objectRelationshipLocalService,
- objectRelationshipResourceFactory, organizationLocalService,
- organizationResourceFactory, ploEntryLocalService, portal,
- portletPreferencesLocalService, resourceActionLocalService,
- resourcePermissionLocalService, roleLocalService,
- sapEntryLocalService, segmentsEntryLocalService,
+ menuAccessConfigurationManager, notificationTemplateResourceFactory,
+ objectActionLocalService, objectDefinitionLocalService,
+ objectDefinitionResourceFactory, objectEntryLocalService,
+ objectEntryManager, objectFieldLocalService,
+ objectFieldResourceFactory, objectFolderResourceFactory,
+ objectRelationshipLocalService, objectRelationshipResourceFactory,
+ organizationLocalService, organizationResourceFactory,
+ ploEntryLocalService, portal, portletPreferencesLocalService,
+ resourceActionLocalService, resourcePermissionLocalService,
+ roleLocalService, sapEntryLocalService, segmentsEntryLocalService,
segmentsExperienceLocalService, siteBundle,
siteInitializerExtenderBundle, siteNavigationMenuItemLocalService,
siteNavigationMenuItemTypeRegistry, siteNavigationMenuLocalService,
diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerFactoryImpl.java b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerFactoryImpl.java
index c8c48010aeb9f3..3e48c344690c1a 100644
--- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerFactoryImpl.java
+++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender/src/main/java/com/liferay/site/initializer/extender/internal/SiteInitializerFactoryImpl.java
@@ -84,6 +84,7 @@
import com.liferay.portal.security.service.access.policy.service.SAPEntryLocalService;
import com.liferay.segments.service.SegmentsEntryLocalService;
import com.liferay.segments.service.SegmentsExperienceLocalService;
+import com.liferay.site.configuration.manager.MenuAccessConfigurationManager;
import com.liferay.site.initializer.SiteInitializer;
import com.liferay.site.initializer.SiteInitializerFactory;
import com.liferay.site.initializer.extender.internal.file.backed.osgi.FileBackedBundleDelegate;
@@ -150,6 +151,7 @@ public SiteInitializer create(File file, String symbolicName)
_layoutUtilityPageEntryLocalService, _listTypeDefinitionResource,
_listTypeDefinitionResourceFactory, _listTypeEntryLocalService,
_listTypeEntryResource, _listTypeEntryResourceFactory,
+ _menuAccessConfigurationManager,
_notificationTemplateResourceFactory, _objectActionLocalService,
_objectDefinitionLocalService, _objectDefinitionResourceFactory,
_objectEntryLocalService, _objectEntryManager,
@@ -338,6 +340,9 @@ protected void activate(BundleContext bundleContext) {
@Reference
private ListTypeEntryResource.Factory _listTypeEntryResourceFactory;
+ @Reference
+ private MenuAccessConfigurationManager _menuAccessConfigurationManager;
+
@Reference
private NotificationTemplateResource.Factory
_notificationTemplateResourceFactory;
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/.lfrbuild-portal b/modules/apps/site-initializer/site-initializer-teaser-showcase/.lfrbuild-releng-ignore
similarity index 100%
rename from modules/apps/site-initializer/site-initializer-teaser-showcase/.lfrbuild-portal
rename to modules/apps/site-initializer/site-initializer-teaser-showcase/.lfrbuild-releng-ignore
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/bnd.bnd b/modules/apps/site-initializer/site-initializer-teaser-showcase/bnd.bnd
index 16815816feff2c..015a983e5e0d45 100644
--- a/modules/apps/site-initializer/site-initializer-teaser-showcase/bnd.bnd
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Site Initializer Teaser Showcase
Bundle-SymbolicName: com.liferay.site.initializer.teaser.showcase
-Bundle-Version: 1.0.5
+Bundle-Version: 1.0.6
Liferay-Site-Initializer-Name: Teaser Showcase
Provide-Capability: liferay.site.initializer
Web-ContextPath: /site-initializer-teaser-showcase
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq.json
new file mode 100644
index 00000000000000..5f70a423b425b2
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "FAQ",
+ "name": "FAQ",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/pricing-and-ordering.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/pricing-and-ordering.json
new file mode 100644
index 00000000000000..62f4a480cf49a7
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/pricing-and-ordering.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "PRICING-AND-ORDERING",
+ "name": "Pricing and Ordering",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/products-and-services.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/products-and-services.json
new file mode 100644
index 00000000000000..ef422d0bbc6867
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/products-and-services.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "PRODUCTS-AND-SERVICES",
+ "name": "Products and Services",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/retail-partners.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/retail-partners.json
new file mode 100644
index 00000000000000..ac4d3f1a9eb80b
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/retail-partners.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "RETAIL-PARTNERS",
+ "name": "Retail Partners",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/returns-and-exchanges.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/returns-and-exchanges.json
new file mode 100644
index 00000000000000..9357e5e8a1cd6a
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/faq/returns-and-exchanges.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "RETURNS-AND-EXCHANGES",
+ "name": "Returns and Exchanges",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields.json
new file mode 100644
index 00000000000000..a4146964357c75
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "FIELDS",
+ "name": "Fields",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/fashion.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/fashion.json
new file mode 100644
index 00000000000000..a27617a05e889d
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/fashion.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "FASHION",
+ "name": "Fashion",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/health.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/health.json
new file mode 100644
index 00000000000000..e1a1095399b1f9
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/health.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "HEALTH",
+ "name": "Health",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/innovation.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/innovation.json
new file mode 100644
index 00000000000000..49c82943892aa4
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/innovation.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "INNOVATION",
+ "name": "Innovation",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/technology.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/technology.json
new file mode 100644
index 00000000000000..8ccdebe88ba77f
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/fields/technology.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "TECHNOLOGY",
+ "name": "Technology",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions.json
new file mode 100644
index 00000000000000..c53ac568bfaeef
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "JOB-POSITIONS",
+ "name": "Job Positions",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/customer-service.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/customer-service.json
new file mode 100644
index 00000000000000..274d9020ec19de
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/customer-service.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "CUSTOMER-SERVICE",
+ "name": "Customer Service",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/finance-and-accounting.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/finance-and-accounting.json
new file mode 100644
index 00000000000000..d46e847e92ce4b
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/finance-and-accounting.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "FINANCE-AND-ACCOUNTING",
+ "name": "Finance and Accounting",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/it-and-tech-support.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/it-and-tech-support.json
new file mode 100644
index 00000000000000..7df25538c30a75
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/it-and-tech-support.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "IT-AND-TECH-SUPPORT",
+ "name": "IT and Tech Support",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/optical-engineers.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/optical-engineers.json
new file mode 100644
index 00000000000000..6fe6e3a9fb3e62
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/optical-engineers.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "OPTICAL-ENGINEERS",
+ "name": "Optical Engineers",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/quality-control-inspectors.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/quality-control-inspectors.json
new file mode 100644
index 00000000000000..f21f4683d2d800
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/quality-control-inspectors.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "QUALITY-CONTROL-INSEPCTORS",
+ "name": "Quality Control Inspectors",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/supply-chain-and-logistics.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/supply-chain-and-logistics.json
new file mode 100644
index 00000000000000..1cf760ad9bf490
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/job-positions/supply-chain-and-logistics.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "SUPPLY-CHAIN-AND-LOGISTICS",
+ "name": "Supply Chain and Logistics",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations.json
new file mode 100644
index 00000000000000..25e0027a7f7da3
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "LOCATIONS",
+ "name": "Locations",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/brazil-recife.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/brazil-recife.json
new file mode 100644
index 00000000000000..b8cb6f4382d9ba
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/brazil-recife.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "BRAZIL-RECIFE",
+ "name": "Brazil, Recife",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/brazil-sao-paulo.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/brazil-sao-paulo.json
new file mode 100644
index 00000000000000..efc937e295ec95
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/brazil-sao-paulo.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "BRAZIL-SAO-PAULO",
+ "name": "Brazil, São Paulo",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/colombia-bogota.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/colombia-bogota.json
new file mode 100644
index 00000000000000..44300ad8d94075
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/colombia-bogota.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "COLOMBIA-BOGOTA",
+ "name": "Colombia, Bogotá",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/germany-eschborn.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/germany-eschborn.json
new file mode 100644
index 00000000000000..186c2fb62ced93
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/germany-eschborn.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "GERMANY-ESCHBORN",
+ "name": "Germany, Eschborn",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/ireland-dublin.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/ireland-dublin.json
new file mode 100644
index 00000000000000..ab3b7c2accbcbd
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/ireland-dublin.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "IRELAND-DUBLIN",
+ "name": "Ireland, Dublin",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/italy-vimercate.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/italy-vimercate.json
new file mode 100644
index 00000000000000..b1f277ccbc4cdf
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/italy-vimercate.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "ITALY-VIMERCATE",
+ "name": "Italy, Vimercate",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/japan-tokyo.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/japan-tokyo.json
new file mode 100644
index 00000000000000..624752855706c9
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/japan-tokyo.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "JAPAN-TOKYO",
+ "name": "Japan, Tokyo",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/remote.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/remote.json
new file mode 100644
index 00000000000000..ba04f781cc6218
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/remote.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "REMOTE",
+ "name": "Remote",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/usa-raleigh.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/usa-raleigh.json
new file mode 100644
index 00000000000000..22a99e6b2096f9
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/locations/usa-raleigh.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "USA-RALEIGH",
+ "name": "USA, Raleigh",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/products.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/products.json
new file mode 100644
index 00000000000000..89dcd433377506
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/products.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "PRODUCTS",
+ "name": "Products",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions.json
new file mode 100644
index 00000000000000..6c3033ad46ba24
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "REGIONS",
+ "name": "Regions",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/asia-pacific.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/asia-pacific.json
new file mode 100644
index 00000000000000..c3ee411403c519
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/asia-pacific.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "ASIA-PACIFIC",
+ "name": "Asia Pacific",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/europe.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/europe.json
new file mode 100644
index 00000000000000..7ef7f856acc95d
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/europe.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "EUROPE",
+ "name": "Europe",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/latin-america.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/latin-america.json
new file mode 100644
index 00000000000000..08afba236a60d9
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/latin-america.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "LATIN-AMERICA",
+ "name": "Latin America",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/north-america.json b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/north-america.json
new file mode 100644
index 00000000000000..9fa1f7b42e0158
--- /dev/null
+++ b/modules/apps/site-initializer/site-initializer-teaser-showcase/src/main/resources/site-initializer/taxonomy-vocabularies/group/regions/north-america.json
@@ -0,0 +1,5 @@
+{
+ "externalReferenceCode": "NORTH-AMERICA",
+ "name": "North America",
+ "viewableBy": "Anyone"
+}
\ No newline at end of file
diff --git a/modules/apps/site-navigation/site-navigation-admin-web/bnd.bnd b/modules/apps/site-navigation/site-navigation-admin-web/bnd.bnd
index 6fda5af6fdf9b6..24b0272b0b9bf3 100644
--- a/modules/apps/site-navigation/site-navigation-admin-web/bnd.bnd
+++ b/modules/apps/site-navigation/site-navigation-admin-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Site Navigation Admin Web
Bundle-SymbolicName: com.liferay.site.navigation.admin.web
-Bundle-Version: 4.0.114
+Bundle-Version: 4.0.115
Web-ContextPath: /site-navigation-admin-web
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/apps/site-navigation/site-navigation-admin-web/package.json b/modules/apps/site-navigation/site-navigation-admin-web/package.json
index 3f8ec9b6994f76..818464e65a4ba9 100644
--- a/modules/apps/site-navigation/site-navigation-admin-web/package.json
+++ b/modules/apps/site-navigation/site-navigation-admin-web/package.json
@@ -29,5 +29,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "4.0.114"
+ "version": "4.0.115"
}
diff --git a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/AddSiteNavigationMenuItem.js b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/AddSiteNavigationMenuItem.js
index 172f5914a524eb..761237238c0c6c 100644
--- a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/AddSiteNavigationMenuItem.js
+++ b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/AddSiteNavigationMenuItem.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {createPortletURL, fetch, getOpener, openToast} from 'frontend-js-web';
+import {openToast} from 'frontend-js-components-web';
+import {createPortletURL, fetch, getOpener} from 'frontend-js-web';
export default function ({namespace, order, parentSiteNavigationMenuItemId}) {
const addButton = document.getElementById(`${namespace}addButton`);
diff --git a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/SiteNavigationManagementToolbarPropsTransformer.js b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/SiteNavigationManagementToolbarPropsTransformer.js
index 99c238dcac2970..d640c0f12eceb4 100644
--- a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/SiteNavigationManagementToolbarPropsTransformer.js
+++ b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/SiteNavigationManagementToolbarPropsTransformer.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openSimpleInputModal} from 'frontend-js-web';
+import {openSimpleInputModal} from 'frontend-js-components-web';
import openDeleteSiteNavigationMenuModal from './openDeleteSiteNavigationMenuModal';
diff --git a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/SiteNavigationMenuDropdownDefaultPropsTransformer.js b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/SiteNavigationMenuDropdownDefaultPropsTransformer.js
index 1c798b757538da..b1e9ccecc49603 100644
--- a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/SiteNavigationMenuDropdownDefaultPropsTransformer.js
+++ b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/SiteNavigationMenuDropdownDefaultPropsTransformer.js
@@ -7,7 +7,7 @@ import {
openConfirmModal,
openModal,
openSimpleInputModal,
-} from 'frontend-js-web';
+} from 'frontend-js-components-web';
import openDeleteSiteNavigationMenuModal from './openDeleteSiteNavigationMenuModal';
diff --git a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/openDeleteSiteNavigationMenuModal.js b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/openDeleteSiteNavigationMenuModal.js
index 5ded2ff90ac9cc..c956f93c8fbf2a 100644
--- a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/openDeleteSiteNavigationMenuModal.js
+++ b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/openDeleteSiteNavigationMenuModal.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openModal, sub} from 'frontend-js-web';
+import {openModal} from 'frontend-js-components-web';
+import {sub} from 'frontend-js-web';
export default function openDeleteSiteNavigationMenuModal({
multiple = false,
diff --git a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/MenuItem.js b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/MenuItem.js
index 1438b427f7b047..1f84aa5e41423f 100644
--- a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/MenuItem.js
+++ b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/MenuItem.js
@@ -9,7 +9,8 @@ import ClayIcon from '@clayui/icon';
import ClayLabel from '@clayui/label';
import ClayLayout from '@clayui/layout';
import classNames from 'classnames';
-import {fetch, objectToFormData, openToast, sub} from 'frontend-js-web';
+import {openToast} from 'frontend-js-components-web';
+import {fetch, objectToFormData, sub} from 'frontend-js-web';
import PropTypes from 'prop-types';
import React, {useMemo} from 'react';
diff --git a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/MenuItemOptions.js b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/MenuItemOptions.js
index afb186741aa71a..93e390c7ea3336 100644
--- a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/MenuItemOptions.js
+++ b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/MenuItemOptions.js
@@ -5,7 +5,8 @@
import {ClayButtonWithIcon} from '@clayui/button';
import {ClayDropDownWithItems} from '@clayui/drop-down';
-import {fetch, objectToFormData, openToast, sub} from 'frontend-js-web';
+import {openToast} from 'frontend-js-components-web';
+import {fetch, objectToFormData, sub} from 'frontend-js-web';
import React, {useState} from 'react';
import {DELETION_TYPES} from '../constants/deletionTypes';
diff --git a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/SidebarPanelContent.js b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/SidebarPanelContent.js
index 5151fd3a19526c..6c3eef5c33bbbc 100644
--- a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/SidebarPanelContent.js
+++ b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/components/SidebarPanelContent.js
@@ -8,12 +8,11 @@ import ClayIcon from '@clayui/icon';
import ClayLayout from '@clayui/layout';
import ClayLoadingIndicator from '@clayui/loading-indicator';
import {useIsMounted} from '@liferay/frontend-js-react-web';
-import {useSessionState} from 'frontend-js-components-web';
+import {openConfirmModal, useSessionState} from 'frontend-js-components-web';
import {
fetch,
getPortletNamespace,
objectToFormData,
- openConfirmModal,
runScriptsInElement,
} from 'frontend-js-web';
import PropTypes from 'prop-types';
diff --git a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/utils/decorateAddSiteNavigationMenuItemOptions.js b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/utils/decorateAddSiteNavigationMenuItemOptions.js
index cb63e35e11d6f0..53849ce3c51fe7 100644
--- a/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/utils/decorateAddSiteNavigationMenuItemOptions.js
+++ b/modules/apps/site-navigation/site-navigation-admin-web/src/main/resources/META-INF/resources/js/site_navigation_menu_editor/utils/decorateAddSiteNavigationMenuItemOptions.js
@@ -3,13 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {
- createPortletURL,
- fetch,
- objectToFormData,
- openModal,
- openSelectionModal,
-} from 'frontend-js-web';
+import {openModal, openSelectionModal} from 'frontend-js-components-web';
+import {createPortletURL, fetch, objectToFormData} from 'frontend-js-web';
export default function decorateAddSiteNavigationMenuItemOptions({
addSiteNavigationMenuItemOptions,
diff --git a/modules/apps/site-navigation/site-navigation-item-selector-web/bnd.bnd b/modules/apps/site-navigation/site-navigation-item-selector-web/bnd.bnd
index 2e1324f828f18e..985d88663e00b6 100644
--- a/modules/apps/site-navigation/site-navigation-item-selector-web/bnd.bnd
+++ b/modules/apps/site-navigation/site-navigation-item-selector-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Site Navigation Item Selector Web
Bundle-SymbolicName: com.liferay.site.navigation.item.selector.web
-Bundle-Version: 4.0.62
+Bundle-Version: 4.0.63
Web-ContextPath: /site-navigation-item-selector-web
\ No newline at end of file
diff --git a/modules/apps/site-navigation/site-navigation-item-selector-web/package.json b/modules/apps/site-navigation/site-navigation-item-selector-web/package.json
index e7fc55df1f023b..1e7aa7cfa9f9ea 100644
--- a/modules/apps/site-navigation/site-navigation-item-selector-web/package.json
+++ b/modules/apps/site-navigation/site-navigation-item-selector-web/package.json
@@ -15,5 +15,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "4.0.62"
+ "version": "4.0.63"
}
diff --git a/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/bnd.bnd b/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/bnd.bnd
index 13f7799c3514ab..68a3c455551e36 100644
--- a/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/bnd.bnd
+++ b/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Site Navigation Menu Item Asset Vocabulary
Bundle-SymbolicName: com.liferay.site.navigation.menu.item.asset.vocabulary
-Bundle-Version: 1.0.36
+Bundle-Version: 1.0.37
Web-ContextPath: /site-navigation-menu-item-asset-vocabulary
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/package.json b/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/package.json
index da940c9d8ea7b5..cbb01b5988f879 100644
--- a/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/package.json
+++ b/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/package.json
@@ -19,5 +19,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "1.0.36"
+ "version": "1.0.37"
}
diff --git a/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/src/main/resources/META-INF/resources/js/index.js b/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/src/main/resources/META-INF/resources/js/index.js
index b303a949c01e8f..3f9b85bbb81999 100644
--- a/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/src/main/resources/META-INF/resources/js/index.js
+++ b/modules/apps/site-navigation/site-navigation-menu-item-asset-vocabulary/src/main/resources/META-INF/resources/js/index.js
@@ -9,8 +9,11 @@ import ClayForm, {ClayCheckbox, ClayInput} from '@clayui/form';
import ClayIcon from '@clayui/icon';
import ClayLabel from '@clayui/label';
import classNames from 'classnames';
-import {TranslationAdminSelector} from 'frontend-js-components-web';
-import {fetch, objectToFormData, openSelectionModal} from 'frontend-js-web';
+import {
+ TranslationAdminSelector,
+ openSelectionModal,
+} from 'frontend-js-components-web';
+import {fetch, objectToFormData} from 'frontend-js-web';
import PropTypes from 'prop-types';
import React, {useEffect, useState} from 'react';
diff --git a/modules/apps/site-navigation/site-navigation-menu-item-display-page/bnd.bnd b/modules/apps/site-navigation/site-navigation-menu-item-display-page/bnd.bnd
index 39029a8862d619..3ada39c74f942c 100644
--- a/modules/apps/site-navigation/site-navigation-menu-item-display-page/bnd.bnd
+++ b/modules/apps/site-navigation/site-navigation-menu-item-display-page/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Site Navigation Menu Item Display Page
Bundle-SymbolicName: com.liferay.site.navigation.menu.item.display.page
-Bundle-Version: 1.0.75
+Bundle-Version: 1.0.76
Web-ContextPath: /site-navigation-menu-item-display-page
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/apps/site-navigation/site-navigation-menu-item-display-page/package.json b/modules/apps/site-navigation/site-navigation-menu-item-display-page/package.json
index bd8a21e4f93bcb..44470f0c73ef70 100644
--- a/modules/apps/site-navigation/site-navigation-menu-item-display-page/package.json
+++ b/modules/apps/site-navigation/site-navigation-menu-item-display-page/package.json
@@ -19,5 +19,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "1.0.75"
+ "version": "1.0.76"
}
diff --git a/modules/apps/site-navigation/site-navigation-menu-item-display-page/src/main/resources/META-INF/resources/js/index.js b/modules/apps/site-navigation/site-navigation-menu-item-display-page/src/main/resources/META-INF/resources/js/index.js
index 23c963920aead6..cbf479ee3d99d8 100644
--- a/modules/apps/site-navigation/site-navigation-menu-item-display-page/src/main/resources/META-INF/resources/js/index.js
+++ b/modules/apps/site-navigation/site-navigation-menu-item-display-page/src/main/resources/META-INF/resources/js/index.js
@@ -9,8 +9,11 @@ import ClayForm, {ClayCheckbox, ClayInput} from '@clayui/form';
import ClayIcon from '@clayui/icon';
import ClayLabel from '@clayui/label';
import classNames from 'classnames';
-import {TranslationAdminSelector} from 'frontend-js-components-web';
-import {fetch, objectToFormData, openSelectionModal} from 'frontend-js-web';
+import {
+ TranslationAdminSelector,
+ openSelectionModal,
+} from 'frontend-js-components-web';
+import {fetch, objectToFormData} from 'frontend-js-web';
import PropTypes from 'prop-types';
import React, {useEffect, useState} from 'react';
diff --git a/modules/apps/site-navigation/site-navigation-menu-item-layout/bnd.bnd b/modules/apps/site-navigation/site-navigation-menu-item-layout/bnd.bnd
index f1740467845d06..9f98db3374046c 100644
--- a/modules/apps/site-navigation/site-navigation-menu-item-layout/bnd.bnd
+++ b/modules/apps/site-navigation/site-navigation-menu-item-layout/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Site Navigation Menu Item Layout
Bundle-SymbolicName: com.liferay.site.navigation.menu.item.layout
-Bundle-Version: 4.0.47
+Bundle-Version: 4.0.48
Web-ContextPath: /site-navigation-menu-item-layout
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/apps/site-navigation/site-navigation-menu-item-layout/package.json b/modules/apps/site-navigation/site-navigation-menu-item-layout/package.json
index 236b0d2259be62..8e84b13dd02451 100644
--- a/modules/apps/site-navigation/site-navigation-menu-item-layout/package.json
+++ b/modules/apps/site-navigation/site-navigation-menu-item-layout/package.json
@@ -1,5 +1,6 @@
{
"dependencies": {
+ "frontend-js-components-web": "*",
"frontend-js-web": "*"
},
"main": "js/index.js",
@@ -9,5 +10,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "4.0.47"
+ "version": "4.0.48"
}
diff --git a/modules/apps/site-navigation/site-navigation-menu-item-layout/src/main/resources/META-INF/resources/js/ChooseLayoutButtonPropsTransformer.js b/modules/apps/site-navigation/site-navigation-menu-item-layout/src/main/resources/META-INF/resources/js/ChooseLayoutButtonPropsTransformer.js
index 7ada6b0a3c5b4b..7c9d254ebad8d4 100644
--- a/modules/apps/site-navigation/site-navigation-menu-item-layout/src/main/resources/META-INF/resources/js/ChooseLayoutButtonPropsTransformer.js
+++ b/modules/apps/site-navigation/site-navigation-menu-item-layout/src/main/resources/META-INF/resources/js/ChooseLayoutButtonPropsTransformer.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {getPortletNamespace, openSelectionModal} from 'frontend-js-web';
+import {openSelectionModal} from 'frontend-js-components-web';
+import {getPortletNamespace} from 'frontend-js-web';
export default function propsTransformer({
additionalProps: {eventName, itemSelectorURL},
diff --git a/modules/apps/site-navigation/site-navigation-menu-item-layout/src/main/resources/META-INF/resources/tsconfig.json b/modules/apps/site-navigation/site-navigation-menu-item-layout/src/main/resources/META-INF/resources/tsconfig.json
index 43d23b1846360d..fe8e3d8911561a 100644
--- a/modules/apps/site-navigation/site-navigation-menu-item-layout/src/main/resources/META-INF/resources/tsconfig.json
+++ b/modules/apps/site-navigation/site-navigation-menu-item-layout/src/main/resources/META-INF/resources/tsconfig.json
@@ -1,5 +1,5 @@
{
- "@generated": "4bf701aae6ff13d2cc58f5a06e06fcf4c5dbfb17",
+ "@generated": "bc9850a771c6f352dde35d06296a15d0a004e616",
"@readonly": "** AUTO-GENERATED: DO NOT EDIT **",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
@@ -12,6 +12,9 @@
"module": "es6",
"moduleResolution": "node",
"paths": {
+ "frontend-js-components-web": [
+ "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/index.ts"
+ ],
"frontend-js-web": [
"../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/index.d.ts"
]
@@ -32,6 +35,9 @@
"../../../../../../../../global.d.ts"
],
"references": [
+ {
+ "path": "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/tsconfig.json"
+ },
{
"path": "../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/tsconfig.json"
}
diff --git a/modules/apps/site-navigation/site-navigation-menu-web/bnd.bnd b/modules/apps/site-navigation/site-navigation-menu-web/bnd.bnd
index 1fe9ab9098ef34..d52c988a5fb760 100644
--- a/modules/apps/site-navigation/site-navigation-menu-web/bnd.bnd
+++ b/modules/apps/site-navigation/site-navigation-menu-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Site Navigation Menu Web
Bundle-SymbolicName: com.liferay.site.navigation.menu.web
-Bundle-Version: 6.0.71
+Bundle-Version: 6.0.72
Web-ContextPath: /site-navigation-menu-web
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/apps/site-navigation/site-navigation-menu-web/package.json b/modules/apps/site-navigation/site-navigation-menu-web/package.json
index b0b92201dfcb0b..f22720c4387f58 100644
--- a/modules/apps/site-navigation/site-navigation-menu-web/package.json
+++ b/modules/apps/site-navigation/site-navigation-menu-web/package.json
@@ -1,5 +1,6 @@
{
"dependencies": {
+ "frontend-js-components-web": "*",
"frontend-js-web": "*"
},
"main": "js/index.js",
@@ -12,5 +13,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "6.0.71"
+ "version": "6.0.72"
}
diff --git a/modules/apps/site-navigation/site-navigation-menu-web/src/main/resources/META-INF/resources/js/index.js b/modules/apps/site-navigation/site-navigation-menu-web/src/main/resources/META-INF/resources/js/index.js
index 1a6579bd39dfb7..80222f810f98dd 100644
--- a/modules/apps/site-navigation/site-navigation-menu-web/src/main/resources/META-INF/resources/js/index.js
+++ b/modules/apps/site-navigation/site-navigation-menu-web/src/main/resources/META-INF/resources/js/index.js
@@ -3,12 +3,12 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
+import {openSelectionModal} from 'frontend-js-components-web';
import {
addParams,
debounce,
delegate,
getFormElement,
- openSelectionModal,
toggleDisabled,
toggleSelectBox,
} from 'frontend-js-web';
diff --git a/modules/apps/site-navigation/site-navigation-menu-web/src/main/resources/META-INF/resources/tsconfig.json b/modules/apps/site-navigation/site-navigation-menu-web/src/main/resources/META-INF/resources/tsconfig.json
index 2705243a14ef8b..db48315c5e3cac 100644
--- a/modules/apps/site-navigation/site-navigation-menu-web/src/main/resources/META-INF/resources/tsconfig.json
+++ b/modules/apps/site-navigation/site-navigation-menu-web/src/main/resources/META-INF/resources/tsconfig.json
@@ -1,5 +1,5 @@
{
- "@generated": "b07ea61818a8e636522ec122a81cfc955bcba78f",
+ "@generated": "095199a4c65ca853c5d048831c9025d7faa33dee",
"@readonly": "** AUTO-GENERATED: DO NOT EDIT **",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
@@ -12,6 +12,9 @@
"module": "es6",
"moduleResolution": "node",
"paths": {
+ "frontend-js-components-web": [
+ "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/index.ts"
+ ],
"frontend-js-web": [
"../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/index.d.ts"
]
@@ -32,6 +35,9 @@
"../../../../../../../../global.d.ts"
],
"references": [
+ {
+ "path": "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/tsconfig.json"
+ },
{
"path": "../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/tsconfig.json"
}
diff --git a/modules/apps/site/site-admin-web/bnd.bnd b/modules/apps/site/site-admin-web/bnd.bnd
index 385622f165a367..bd88c0accb253c 100644
--- a/modules/apps/site/site-admin-web/bnd.bnd
+++ b/modules/apps/site/site-admin-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Site Admin Web
Bundle-SymbolicName: com.liferay.site.admin.web
-Bundle-Version: 5.0.129
+Bundle-Version: 5.0.130
Web-ContextPath: /site-admin-web
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/apps/site/site-admin-web/package.json b/modules/apps/site/site-admin-web/package.json
index 707da50493ea61..18f1376f90fbda 100644
--- a/modules/apps/site/site-admin-web/package.json
+++ b/modules/apps/site/site-admin-web/package.json
@@ -2,6 +2,7 @@
"dependencies": {
"@clayui/alert": "3.111.0",
"@clayui/form": "3.125.0",
+ "frontend-js-components-web": "*",
"frontend-js-web": "*",
"prop-types": "15.7.2",
"react": "18.2.0"
@@ -13,5 +14,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "5.0.129"
+ "version": "5.0.130"
}
diff --git a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/AddGroup.js b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/AddGroup.js
index a4337a4ac2d3ac..5a9f9e18c4d97d 100644
--- a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/AddGroup.js
+++ b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/AddGroup.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {fetch, getOpener, openToast} from 'frontend-js-web';
+import {openToast} from 'frontend-js-components-web';
+import {fetch, getOpener} from 'frontend-js-web';
export default function ({namespace}) {
const addGroupForm = document.querySelector('.add-group-form');
diff --git a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/SelectSiteInitializerVerticalCardPropsTransformer.js b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/SelectSiteInitializerVerticalCardPropsTransformer.js
index 5fb662a6231f42..4f0b3e8bb75eb7 100644
--- a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/SelectSiteInitializerVerticalCardPropsTransformer.js
+++ b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/SelectSiteInitializerVerticalCardPropsTransformer.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openModal} from 'frontend-js-web';
+import {openModal} from 'frontend-js-components-web';
export default function SelectSiteInitializerVerticalCardPropsTransformer({
portletNamespace: namespace,
diff --git a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/SiteDropdownDefaultPropsTransformer.js b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/SiteDropdownDefaultPropsTransformer.js
index 32abe0eb4d7bb5..4d68f4ed54f8e7 100644
--- a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/SiteDropdownDefaultPropsTransformer.js
+++ b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/SiteDropdownDefaultPropsTransformer.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openConfirmModal} from 'frontend-js-web';
+import {openConfirmModal} from 'frontend-js-components-web';
import openDeleteStyleBookModal from './openDeleteSiteModal';
diff --git a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/openDeleteSiteModal.js b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/openDeleteSiteModal.js
index 074d448187b913..4d23b7e21d4208 100644
--- a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/openDeleteSiteModal.js
+++ b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/openDeleteSiteModal.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openModal, sub} from 'frontend-js-web';
+import {openModal} from 'frontend-js-components-web';
+import {sub} from 'frontend-js-web';
export default function openDeleteSiteModal({multiple = false, onDelete}) {
openModal({
diff --git a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/site/Details.js b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/site/Details.js
index 58d80b9d4ad878..b9ed1cf3145a48 100644
--- a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/site/Details.js
+++ b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/site/Details.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {delegate, openSelectionModal} from 'frontend-js-web';
+import {openSelectionModal} from 'frontend-js-components-web';
+import {delegate} from 'frontend-js-web';
export default function ({defaultParentGroupId, namespace, portletURL}) {
const eventDelegates = [];
diff --git a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/site/Ratings.js b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/site/Ratings.js
index fbd345655da847..29228b05a89991 100644
--- a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/site/Ratings.js
+++ b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/js/site/Ratings.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {delegate, openConfirmModal} from 'frontend-js-web';
+import {openConfirmModal} from 'frontend-js-components-web';
+import {delegate} from 'frontend-js-web';
export default function ({namespace}) {
const ratingSettingsContainer = document.getElementById(
diff --git a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/tsconfig.json b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/tsconfig.json
index 23a74d987b491c..473515815a519f 100644
--- a/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/tsconfig.json
+++ b/modules/apps/site/site-admin-web/src/main/resources/META-INF/resources/tsconfig.json
@@ -1,5 +1,5 @@
{
- "@generated": "a8a4e3eacd1d598ab6586013bf9758ca045077ff",
+ "@generated": "044daa4b0698bd8ecaa54422e1cc74f9b0633de6",
"@readonly": "** AUTO-GENERATED: DO NOT EDIT **",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
@@ -12,6 +12,9 @@
"module": "es6",
"moduleResolution": "node",
"paths": {
+ "frontend-js-components-web": [
+ "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/index.ts"
+ ],
"frontend-js-web": [
"../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/index.d.ts"
]
@@ -32,6 +35,9 @@
"../../../../../../../../global.d.ts"
],
"references": [
+ {
+ "path": "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/tsconfig.json"
+ },
{
"path": "../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/tsconfig.json"
}
diff --git a/modules/apps/site/site-cms-site-initializer-test/src/testIntegration/java/com/liferay/site/cms/site/initializer/internal/model/listener/test/GroupModelListenerTest.java b/modules/apps/site/site-cms-site-initializer-test/src/testIntegration/java/com/liferay/site/cms/site/initializer/internal/model/listener/test/GroupModelListenerTest.java
index 39494b1c7bdd38..69d23dd152671f 100644
--- a/modules/apps/site/site-cms-site-initializer-test/src/testIntegration/java/com/liferay/site/cms/site/initializer/internal/model/listener/test/GroupModelListenerTest.java
+++ b/modules/apps/site/site-cms-site-initializer-test/src/testIntegration/java/com/liferay/site/cms/site/initializer/internal/model/listener/test/GroupModelListenerTest.java
@@ -67,7 +67,7 @@ public void testAddDepotEntry() throws Exception {
ListUtil.sort(
ListUtil.toList(
_objectEntryFolderLocalService.getObjectEntryFolders(
- _depotEntry.getCompanyId(), _depotEntry.getGroupId(),
+ _depotEntry.getGroupId(), _depotEntry.getCompanyId(),
ObjectEntryFolderConstants.
PARENT_OBJECT_ENTRY_FOLDER_ID_DEFAULT,
QueryUtil.ALL_POS, QueryUtil.ALL_POS),
diff --git a/modules/apps/site/site-cms-site-initializer/bnd.bnd b/modules/apps/site/site-cms-site-initializer/bnd.bnd
index b3787216bb24e4..b5d84e1cbd751d 100644
--- a/modules/apps/site/site-cms-site-initializer/bnd.bnd
+++ b/modules/apps/site/site-cms-site-initializer/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Site CMS Site Initializer
Bundle-SymbolicName: com.liferay.site.cms.site.initializer
-Bundle-Version: 1.0.4
+Bundle-Version: 1.0.5
Web-ContextPath: /site-cms-site-initializer
\ No newline at end of file
diff --git a/modules/apps/site/site-cms-site-initializer/package.json b/modules/apps/site/site-cms-site-initializer/package.json
index 984786d4fe001c..ae9436ec4489d9 100644
--- a/modules/apps/site/site-cms-site-initializer/package.json
+++ b/modules/apps/site/site-cms-site-initializer/package.json
@@ -13,6 +13,7 @@
"@clayui/link": "3.111.0",
"@clayui/loading-indicator": "3.111.0",
"@clayui/modal": "3.122.0",
+ "@clayui/tabs": "3.119.0",
"@liferay/frontend-js-react-web": "*",
"@liferay/layout-js-components-web": "*",
"@liferay/object-js-components-web": "*",
@@ -35,5 +36,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "1.0.4"
+ "version": "1.0.5"
}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/ERCInput.tsx b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/ERCInput.tsx
new file mode 100644
index 00000000000000..f00ae53dd4a747
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/ERCInput.tsx
@@ -0,0 +1,53 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import ClayForm, {ClayInput} from '@clayui/form';
+import ClayIcon from '@clayui/icon';
+import {useId} from 'frontend-js-components-web';
+import React, {useState} from 'react';
+
+export default function ERCInput({
+ onValueChange,
+ value: initialValue,
+}: {
+ onValueChange: (value: string) => void;
+ value: string;
+}) {
+ const id = useId();
+
+ const [value, setValue] = useState(initialValue);
+
+ return (
+
+
+
+ onValueChange(value)}
+ onChange={(event) => setValue(event.target.value)}
+ type="text"
+ value={value}
+ />
+
+ );
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/ManagementBar.tsx b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/ManagementBar.tsx
index 63cb32acd85cb0..bdbc581879a314 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/ManagementBar.tsx
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/ManagementBar.tsx
@@ -10,14 +10,13 @@ import {API} from '@liferay/object-js-components-web';
import {ManagementToolbar, openToast} from 'frontend-js-components-web';
import React from 'react';
-import {
- useStateDispatch,
- useStructureFields,
- useStructureId,
- useStructureLabel,
- useStructureName,
- useStructureStatus,
-} from '../contexts/StateContext';
+import {useSelector, useStateDispatch} from '../contexts/StateContext';
+import selectStructureERC from '../selectors/selectStructureERC';
+import selectStructureFields from '../selectors/selectStructureFields';
+import selectStructureId from '../selectors/selectStructureId';
+import selectStructureLabel from '../selectors/selectStructureLabel';
+import selectStructureName from '../selectors/selectStructureName';
+import selectStructureStatus from '../selectors/selectStructureStatus';
import StructureService from '../services/StructureService';
export default function ManagementBar() {
@@ -63,17 +62,20 @@ export default function ManagementBar() {
function SaveButton() {
const dispatch = useStateDispatch();
- const fields = useStructureFields();
- const label = useStructureLabel();
- const status = useStructureStatus();
- const structureId = useStructureId();
- const structureName = useStructureName();
+ const fields = useSelector(selectStructureFields);
+ const label = useSelector(selectStructureLabel);
+ const status = useSelector(selectStructureStatus);
+ const structureId = useSelector(selectStructureId);
+ const structureName = useSelector(selectStructureName);
+ const structureERC = useSelector(selectStructureERC);
const create = async () => {
const {id, name, objectFields} = await StructureService.createStructure(
{
+ erc: structureERC,
fields,
label,
+ name: structureName,
}
);
@@ -90,6 +92,7 @@ function SaveButton() {
const update = async () => {
const {objectFields} = await StructureService.updateStructure({
+ erc: structureERC,
fields,
id: structureId,
label,
@@ -136,9 +139,9 @@ function SaveButton() {
function PublishButton() {
const dispatch = useStateDispatch();
- const id = useStructureId();
- const label = useStructureLabel();
- const status = useStructureStatus();
+ const id = useSelector(selectStructureId);
+ const label = useSelector(selectStructureLabel);
+ const status = useSelector(selectStructureStatus);
if (status === 'published') {
return null;
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/StructureFieldSettings.tsx b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/StructureFieldSettings.tsx
index 37ef2de8915b9e..bda0c3168b3de5 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/StructureFieldSettings.tsx
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/StructureFieldSettings.tsx
@@ -4,15 +4,18 @@
*/
import ClayBreadcrumb from '@clayui/breadcrumb';
+import ClayForm, {ClayToggle} from '@clayui/form';
+import ClayLabel from '@clayui/label';
import ClayLayout from '@clayui/layout';
+import ClayTabs from '@clayui/tabs';
import React from 'react';
-import {
- Field,
- useStateDispatch,
- useStructureField,
- useStructureLabel,
-} from '../contexts/StateContext';
+import {useSelector, useStateDispatch} from '../contexts/StateContext';
+import selectStructureField from '../selectors/selectStructureField';
+import selectStructureLabel from '../selectors/selectStructureLabel';
+import {Field} from '../utils/field';
+import ERCInput from './ERCInput';
+import TextInput from './TextInput';
export default function StructureFieldSettings({
fieldName,
@@ -20,12 +23,13 @@ export default function StructureFieldSettings({
fieldName: Field['name'];
}) {
const dispatch = useStateDispatch();
- const structureLabel = useStructureLabel();
- const field = useStructureField(fieldName);
+ const structureLabel = useSelector(selectStructureLabel);
+ const field = useSelector(selectStructureField(fieldName));
return (
-
+
+
+
+
+
+ {Liferay.Language.get('general')}
+
+
+
+ {Liferay.Language.get('search')}
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
+
+function GeneralTab({field}: {field: Field}) {
+ const dispatch = useStateDispatch();
+
+ return (
+ <>
+
+
+ {Liferay.Language.get('field-type')}
+
+
+
{field.type}
+
+
+
+ {}}
+ required
+ value={field.name}
+ />
+
+ {}}
+ value={field.name}
+ />
+
+
+
+
+ {
+ dispatch({
+ name: field.name,
+ required: value,
+ type: 'update-field',
+ });
+ }}
+ toggled={field.required}
+ />
+
+
+
+ {
+ dispatch({
+ localized: value,
+ name: field.name,
+ type: 'update-field',
+ });
+ }}
+ toggled={field.localized}
+ />
+
+
+
+
+ {
+ dispatch({
+ erc: value,
+ name: field.name,
+ type: 'update-field',
+ });
+ }}
+ value={field.erc}
+ />
+
+ >
+ );
+}
+
+function SearchTab() {
+ return (
+ <>
+
+ {}}
+ toggled={false}
+ />
+
+ >
+ );
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/StructureSettings.tsx b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/StructureSettings.tsx
index d42c6150cec1d7..3da8913d1cf038 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/StructureSettings.tsx
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/StructureSettings.tsx
@@ -7,23 +7,26 @@ import ClayAlert from '@clayui/alert';
import ClayForm, {ClayInput} from '@clayui/form';
import ClayLabel from '@clayui/label';
import ClayLayout from '@clayui/layout';
+import ClayTabs from '@clayui/tabs';
import React from 'react';
-import {
- useSelectedItem,
- useStateDispatch,
- useStructureError,
- useStructureLabel,
-} from '../contexts/StateContext';
+import {useSelector, useStateDispatch} from '../contexts/StateContext';
+import selectSelectedItem from '../selectors/selectSelectedItem';
+import selectStructureERC from '../selectors/selectStructureERC';
+import selectStructureError from '../selectors/selectStructureError';
+import selectStructureLabel from '../selectors/selectStructureLabel';
+import selectStructureName from '../selectors/selectStructureName';
+import ERCInput from './ERCInput';
import StructureFieldSettings from './StructureFieldSettings';
+import TextInput from './TextInput';
export function StructureSettings() {
const dispatch = useStateDispatch();
- const error = useStructureError();
- const label = useStructureLabel();
+ const error = useSelector(selectStructureError);
+ const label = useSelector(selectStructureLabel);
return (
-
+
{error ? (
+
+
+
+
+ {Liferay.Language.get('general')}
+
+
+
+ {Liferay.Language.get('validations')}
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
export default function () {
- const selectedItem = useSelectedItem();
+ const selectedItem = useSelector(selectSelectedItem);
if (selectedItem.type === 'structure') {
return ;
@@ -63,3 +88,33 @@ export default function () {
return ;
}
+
+function GeneralTab() {
+ const dispatch = useStateDispatch();
+ const name = useSelector(selectStructureName);
+ const erc = useSelector(selectStructureERC);
+
+ return (
+
+
+ dispatch({name: value, type: 'update-structure'})
+ }
+ required
+ value={name}
+ />
+
+
+ dispatch({erc: value, type: 'update-structure'})
+ }
+ value={erc}
+ />
+
+ );
+}
+
+function ValidationsTab() {
+ return ;
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/TextInput.tsx b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/TextInput.tsx
new file mode 100644
index 00000000000000..cda5c3722e64e8
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/TextInput.tsx
@@ -0,0 +1,52 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import ClayForm, {ClayInput} from '@clayui/form';
+import ClayIcon from '@clayui/icon';
+import {useId} from 'frontend-js-components-web';
+import React, {useState} from 'react';
+
+export default function TextInput({
+ className,
+ label,
+ onValueChange,
+ required = false,
+ value: initialValue,
+}: {
+ className?: string;
+ label: string;
+ onValueChange: (value: string) => void;
+ required?: boolean;
+ value: string;
+}) {
+ const id = useId();
+
+ const [value, setValue] = useState(initialValue);
+
+ return (
+
+
+
+ onValueChange(value)}
+ onChange={(event) => setValue(event.target.value)}
+ type="text"
+ value={value}
+ />
+
+ );
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/AddFieldDropdown.tsx b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/AddFieldDropdown.tsx
index 73a8e8d201b370..2114bf04b12f56 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/AddFieldDropdown.tsx
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/AddFieldDropdown.tsx
@@ -7,11 +7,13 @@ import ClayButton, {ClayButtonWithIcon} from '@clayui/button';
import {ClayDropDownWithItems} from '@clayui/drop-down';
import React from 'react';
+import {useStateDispatch} from '../../../structure_builder/contexts/StateContext';
import {
+ FIELD_TYPES,
+ FIELD_TYPE_LABEL,
Field,
- useStateDispatch,
-} from '../../../structure_builder/contexts/StateContext';
-import {getDefaultField} from '../../../structure_builder/utils/fieldType';
+ getDefaultField,
+} from '../../../structure_builder/utils/field';
export default function AddFieldDropdown({
triggerType = 'text',
@@ -28,12 +30,10 @@ export default function AddFieldDropdown({
return (
addField('text'),
- },
- ]}
+ items={FIELD_TYPES.map((type) => ({
+ label: FIELD_TYPE_LABEL[type],
+ onClick: () => addField(type),
+ }))}
trigger={
triggerType === 'text' ? (
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/FieldsTree.tsx b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/FieldsTree.tsx
index eecc88d2a03b6a..b69601419e9d63 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/FieldsTree.tsx
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/FieldsTree.tsx
@@ -11,12 +11,12 @@ import classNames from 'classnames';
import React, {useMemo} from 'react';
import {
+ FIELD_TYPE_ICON,
Field,
FieldType,
- useStateDispatch,
- useStructureLabel,
-} from '../../../structure_builder/contexts/StateContext';
-import {FIELD_TYPE_ICON} from '../../../structure_builder/utils/fieldType';
+} from '../../../structure_builder/utils/field';
+import {useSelector, useStateDispatch} from '../../contexts/StateContext';
+import selectStructureLabel from '../../selectors/selectStructureLabel';
type TreeItem = {
children?: TreeItem[];
@@ -29,7 +29,7 @@ type TreeItem = {
export default function FieldsTree({fields}: {fields: Field[]}) {
const dispatch = useStateDispatch();
- const structureLabel = useStructureLabel();
+ const structureLabel = useSelector(selectStructureLabel);
const items: TreeItem[] = useMemo(() => {
return [
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/StructureFields.tsx b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/StructureFields.tsx
index d86b4741ef8d33..fcf4ca41e1ad9d 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/StructureFields.tsx
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/components/structure_fields/StructureFields.tsx
@@ -7,13 +7,14 @@ import ClayEmptyState from '@clayui/empty-state';
import {SearchForm} from '@liferay/layout-js-components-web';
import React, {useMemo, useState} from 'react';
-import {useStructureFields} from '../../../structure_builder/contexts/StateContext';
import {getImage} from '../../../structure_builder/utils/getImage';
+import {useSelector} from '../../contexts/StateContext';
+import selectStructureFields from '../../selectors/selectStructureFields';
import AddFieldDropdown from './AddFieldDropdown';
import FieldsTree from './FieldsTree';
export default function StructureFields() {
- const fields = useStructureFields();
+ const fields = useSelector(selectStructureFields);
const [search, setSearch] = useState('');
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/contexts/StateContext.tsx b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/contexts/StateContext.tsx
index 61cf28fc06b506..ef866366be63dd 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/contexts/StateContext.tsx
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/contexts/StateContext.tsx
@@ -13,23 +13,17 @@ import React, {
} from 'react';
import {ObjectField} from '../types/ObjectDefinition';
+import {Field} from '../utils/field';
import findAvailableFieldName from '../utils/findAvailableFieldName';
+import getRandomId from '../utils/getRandomId';
import updateFields from '../utils/updateFields';
const DEFAULT_STRUCTURE_LABEL = Liferay.Language.get('untitled-structure');
-export type FieldType = 'text';
-
type Status = 'new' | 'draft' | 'published';
-export type Field = {
- erc: string;
- label: string;
- name: string;
- type: FieldType;
-};
-
export type State = {
+ erc: string;
error: string | null;
fields: Map;
id: number | null;
@@ -40,6 +34,7 @@ export type State = {
};
const INITIAL_STATE: State = {
+ erc: getRandomId(),
error: null,
fields: new Map(),
id: null,
@@ -71,8 +66,18 @@ type SetErrorAction = {error: string | null; type: 'set-error'};
type SetLabelAction = {label: string; type: 'set-label'};
+type UpdateFieldAction = {
+ erc?: string;
+ localized?: boolean;
+ name: string;
+ required?: boolean;
+ type: 'update-field';
+};
+
type UpdateStructureAction = {
- objectFields: ObjectField[];
+ erc?: string;
+ name?: string;
+ objectFields?: ObjectField[];
type: 'update-structure';
};
@@ -84,6 +89,7 @@ export type Action =
| SelectItemAction
| SetErrorAction
| SetLabelAction
+ | UpdateFieldAction
| UpdateStructureAction;
function reducer(state: State, action: Action) {
@@ -134,13 +140,47 @@ function reducer(state: State, action: Action) {
}
case 'publish-structure':
return {...state, error: null, status: 'published' as Status};
+ case 'update-field': {
+ const {erc, localized, name, required} = action;
+
+ const nextFields = new Map(state.fields);
+
+ const field = nextFields.get(name);
+
+ if (field) {
+ nextFields.set(name, {
+ ...field,
+ erc: erc ?? field.erc,
+ localized: localized ?? field.localized,
+ required: required ?? field.required,
+ });
+ }
+
+ return {...state, fields: nextFields};
+ }
case 'update-structure': {
- const fields = updateFields(state.fields, action.objectFields);
+ let nextErc = state.erc;
+ let nextFields = state.fields;
+ let nextName = state.name;
+
+ if (action.erc) {
+ nextErc = action.erc;
+ }
+
+ if (action.objectFields) {
+ nextFields = updateFields(state.fields, action.objectFields);
+ }
+
+ if (action.name) {
+ nextName = action.name;
+ }
return {
...state,
+ erc: nextErc,
error: null,
- fields,
+ fields: nextFields,
+ name: nextName,
};
}
case 'select-item': {
@@ -179,68 +219,14 @@ export default function StateContextProvider({
);
}
-function useSelectedItem() {
+function useSelector(selector: (state: State) => T) {
const {state} = useContext(StateContext);
- return state.selectedItem;
+ return selector(state);
}
function useStateDispatch() {
return useContext(StateContext).dispatch;
}
-function useStructureError() {
- const {state} = useContext(StateContext);
-
- return state.error;
-}
-
-function useStructureField(name: Field['name']) {
- const {state} = useContext(StateContext);
-
- return state.fields.get(name);
-}
-
-function useStructureFields() {
- const {state} = useContext(StateContext);
-
- return Array.from(state.fields.values());
-}
-
-function useStructureId() {
- const {state} = useContext(StateContext);
-
- return state.id;
-}
-
-function useStructureLabel() {
- const {state} = useContext(StateContext);
-
- return state.label;
-}
-
-function useStructureName() {
- const {state} = useContext(StateContext);
-
- return state.name;
-}
-
-function useStructureStatus() {
- const {state} = useContext(StateContext);
-
- return state.status;
-}
-
-export {
- StateContext,
- StateContextProvider,
- useSelectedItem,
- useStateDispatch,
- useStructureError,
- useStructureField,
- useStructureFields,
- useStructureId,
- useStructureLabel,
- useStructureName,
- useStructureStatus,
-};
+export {StateContext, StateContextProvider, useSelector, useStateDispatch};
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectSelectedItem.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectSelectedItem.ts
new file mode 100644
index 00000000000000..269d1a3c89c0fb
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectSelectedItem.ts
@@ -0,0 +1,10 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {State} from '../contexts/StateContext';
+
+export default function selectSelectedItem(state: State) {
+ return state.selectedItem;
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureERC.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureERC.ts
new file mode 100644
index 00000000000000..77f8618184d849
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureERC.ts
@@ -0,0 +1,10 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {State} from '../contexts/StateContext';
+
+export default function selectStructureERC(state: State) {
+ return state.erc;
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureError.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureError.ts
new file mode 100644
index 00000000000000..5413a9c621e41d
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureError.ts
@@ -0,0 +1,10 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {State} from '../contexts/StateContext';
+
+export default function selectStructureError(state: State) {
+ return state.error;
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureField.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureField.ts
new file mode 100644
index 00000000000000..82428af4f0ba0d
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureField.ts
@@ -0,0 +1,13 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {State} from '../contexts/StateContext';
+import {Field} from '../utils/field';
+
+export default function selectStructureField(name: Field['name']) {
+ return (state: State) => {
+ return state.fields.get(name);
+ };
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureFields.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureFields.ts
new file mode 100644
index 00000000000000..a68c5e4ae1b341
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureFields.ts
@@ -0,0 +1,10 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {State} from '../contexts/StateContext';
+
+export default function selectStructureFields(state: State) {
+ return Array.from(state.fields.values());
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureId.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureId.ts
new file mode 100644
index 00000000000000..adb1f87caaa817
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureId.ts
@@ -0,0 +1,10 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {State} from '../contexts/StateContext';
+
+export default function selectStructureId(state: State) {
+ return state.id;
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureLabel.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureLabel.ts
new file mode 100644
index 00000000000000..3cca124d433cf7
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureLabel.ts
@@ -0,0 +1,10 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {State} from '../contexts/StateContext';
+
+export default function selectStructureLabel(state: State) {
+ return state.label;
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureName.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureName.ts
new file mode 100644
index 00000000000000..4e2a249f209df1
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureName.ts
@@ -0,0 +1,10 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {State} from '../contexts/StateContext';
+
+export default function selectStructureName(state: State) {
+ return state.name;
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureStatus.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureStatus.ts
new file mode 100644
index 00000000000000..cf0ad8e3334053
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/selectors/selectStructureStatus.ts
@@ -0,0 +1,10 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {State} from '../contexts/StateContext';
+
+export default function selectStructureStatus(state: State) {
+ return state.status;
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/services/StructureService.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/services/StructureService.ts
index 95cc0cb2131668..00c81429af2a6c 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/services/StructureService.ts
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/services/StructureService.ts
@@ -3,21 +3,25 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {Field, State} from '../contexts/StateContext';
+import {State} from '../contexts/StateContext';
import buildObjectDefinition from '../utils/buildObjectDefinition';
-import normalizeName from '../utils/normalizeName';
+import {Field} from '../utils/field';
+import getRandomId from '../utils/getRandomId';
import ApiHelper from './ApiHelper';
async function createStructure({
+ erc = getRandomId(),
fields,
label,
- name = normalizeName(label),
+ name,
}: {
+ erc?: string;
fields: Field[];
label: State['label'];
name?: State['name'];
}) {
const objectDefinition = buildObjectDefinition({
+ erc,
fields,
label,
name,
@@ -40,17 +44,25 @@ async function publishStructure({id}: {id: State['id']}) {
}
async function updateStructure({
+ erc,
fields,
id,
label,
name,
}: {
+ erc: string;
fields: Field[];
id: State['id'];
label: State['label'];
name: State['name'];
}) {
- const objectDefinition = buildObjectDefinition({fields, id, label, name});
+ const objectDefinition = buildObjectDefinition({
+ erc,
+ fields,
+ id,
+ label,
+ name,
+ });
return await ApiHelper.put(
`/o/object-admin/v1.0/object-definitions/${id}`,
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/types/ObjectDefinition.d.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/types/ObjectDefinition.ts
similarity index 78%
rename from modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/types/ObjectDefinition.d.ts
rename to modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/types/ObjectDefinition.ts
index a3db8a125eb151..17c79d31cabab2 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/types/ObjectDefinition.d.ts
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/types/ObjectDefinition.ts
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {FieldBusinessType} from '../utils/fieldType';
+import {FieldBusinessType} from '../utils/field';
export type ObjectField = {
businessType: FieldBusinessType;
@@ -13,10 +13,12 @@ export type ObjectField = {
};
localized: boolean;
name: string;
+ objectFieldSettings?: {name: string; value: string | number}[];
required: boolean;
};
export type ObjectDefinition = {
+ externalReferenceCode: string;
id?: number;
label: {
en_US: string;
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/buildObjectDefinition.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/buildObjectDefinition.ts
index b8658a478d920a..751b093a098980 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/buildObjectDefinition.ts
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/buildObjectDefinition.ts
@@ -3,35 +3,29 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {Field, State} from '../contexts/StateContext';
-import {ObjectDefinition} from '../types/ObjectDefinition';
-import {FIELD_TYPE_BUSINESS_TYPE} from './fieldType';
+import {State} from '../contexts/StateContext';
+import {ObjectDefinition, ObjectField} from '../types/ObjectDefinition';
+import {FIELD_TYPE_BUSINESS_TYPE, Field} from './field';
export default function buildObjectDefinition({
+ erc,
fields = [],
id,
label,
name,
}: {
+ erc: string;
fields?: Field[];
id?: State['id'];
label: State['label'];
- name?: string;
+ name?: State['name'];
}): ObjectDefinition {
const objectDefinition: ObjectDefinition = {
+ externalReferenceCode: erc,
label: {
en_US: label,
},
- objectFields: fields.map((field) => ({
- businessType: FIELD_TYPE_BUSINESS_TYPE[field.type],
- externalReferenceCode: field.erc,
- label: {
- en_US: field.label,
- },
- localized: false,
- name: field.name,
- required: false,
- })),
+ objectFields: buildFields(fields),
pluralLabel: {
en_US: label,
},
@@ -48,3 +42,26 @@ export default function buildObjectDefinition({
return objectDefinition;
}
+
+function buildFields(fields: Field[]) {
+ return fields.map((field) => {
+ const objectField: ObjectField = {
+ businessType: FIELD_TYPE_BUSINESS_TYPE[field.type],
+ externalReferenceCode: field.erc,
+ label: {
+ en_US: field.label,
+ },
+ localized: field.localized,
+ name: field.name,
+ required: field.required,
+ };
+
+ if ('settings' in field) {
+ objectField.objectFieldSettings = Object.entries(
+ field.settings
+ ).map(([name, value]) => ({name, value}));
+ }
+
+ return objectField;
+ });
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/field.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/field.ts
new file mode 100644
index 00000000000000..c9c81216fca53c
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/field.ts
@@ -0,0 +1,133 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import getRandomId from './getRandomId';
+import normalizeName from './normalizeName';
+
+// Constants
+
+export const FIELD_TYPES = [
+ 'text',
+ 'long-text',
+ 'rich-text',
+ 'integer',
+ 'decimal',
+ 'single-select',
+ 'multiselect',
+ 'date',
+ 'datetime',
+ 'boolean',
+ 'upload',
+] as const;
+
+export const FIELD_TYPE_LABEL: Record = {
+ 'boolean': Liferay.Language.get('boolean'),
+ 'date': Liferay.Language.get('date'),
+ 'datetime': Liferay.Language.get('date-and-time'),
+ 'decimal': Liferay.Language.get('decimal'),
+ 'integer': Liferay.Language.get('integer'),
+ 'long-text': Liferay.Language.get('long-text'),
+ 'multiselect': Liferay.Language.get('multiselect'),
+ 'rich-text': Liferay.Language.get('rich-text'),
+ 'single-select': Liferay.Language.get('single-select'),
+ 'text': Liferay.Language.get('text'),
+ 'upload': Liferay.Language.get('upload'),
+} as const;
+
+export const FIELD_TYPE_ICON: Record = {
+ 'boolean': 'check-square',
+ 'date': 'calendar',
+ 'datetime': 'date-time',
+ 'decimal': 'decimal',
+ 'integer': 'number',
+ 'long-text': 'field-area',
+ 'multiselect': 'select-from-list',
+ 'rich-text': 'textbox',
+ 'single-select': 'select',
+ 'text': 'custom-field',
+ 'upload': 'upload',
+} as const;
+
+export const FIELD_TYPE_BUSINESS_TYPE: Record = {
+ 'boolean': 'Boolean',
+ 'date': 'Date',
+ 'datetime': 'DateTime',
+ 'decimal': 'Decimal',
+ 'integer': 'Integer',
+ 'long-text': 'LongText',
+ 'multiselect': 'MultiselectPicklist',
+ 'rich-text': 'RichText',
+ 'single-select': 'Picklist',
+ 'text': 'Text',
+ 'upload': 'Attachment',
+} as const;
+
+// Types
+
+type BaseField = {
+ erc: string;
+ label: string;
+ localized: boolean;
+ name: string;
+ required: boolean;
+};
+
+export type Field =
+ | (BaseField & {
+ settings: {timeStorage: 'convertToUTC'};
+ type: 'datetime';
+ })
+ | (BaseField & {
+ settings: {
+ acceptedFileExtensions: string;
+ fileSource: 'userComputer';
+ maximumFileSize: number;
+ };
+ type: 'upload';
+ })
+ | (BaseField & {
+ type: Exclude;
+ });
+
+export type FieldType = (typeof FIELD_TYPES)[number];
+
+export type FieldBusinessType =
+ (typeof FIELD_TYPE_BUSINESS_TYPE)[keyof typeof FIELD_TYPE_BUSINESS_TYPE];
+
+// Functions
+
+export function getDefaultField(type: FieldType): Field {
+ const base = {
+ erc: getRandomId(),
+ label: FIELD_TYPE_LABEL[type],
+ localized: false,
+ name: normalizeName(type),
+ required: false,
+ settings: {},
+ };
+
+ if (type === 'datetime') {
+ return {
+ ...base,
+ settings: {
+ timeStorage: 'convertToUTC',
+ },
+ type: 'datetime',
+ };
+ }
+ else if (type === 'upload') {
+ return {
+ ...base,
+ settings: {
+ acceptedFileExtensions: 'jpeg, jpg, pdf, png',
+ fileSource: 'userComputer',
+ maximumFileSize: 100,
+ },
+ type: 'upload',
+ };
+ }
+
+ return {...base, type};
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/fieldType.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/fieldType.ts
deleted file mode 100644
index c934f7c164f191..00000000000000
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/fieldType.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
- * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
- */
-
-// @ts-nocheck
-
-import {v4 as uuidv4} from 'uuid';
-
-import {Field} from '../contexts/StateContext';
-
-// Constants
-
-const FIELD_TYPE_DEFAULT_FIELD = {
- text: {
- label: Liferay.Language.get('text'),
- name: 'text',
- type: 'text',
- },
-} as const;
-
-export const FIELD_TYPE_ICON = {
- text: 'custom-field',
-} as const;
-
-export const FIELD_TYPE_BUSINESS_TYPE = {
- text: 'Text',
-} as const;
-
-// Types
-
-export type FieldBusinessType =
- (typeof FIELD_TYPE_BUSINESS_TYPE)[keyof typeof FIELD_TYPE_BUSINESS_TYPE];
-
-// Functions
-
-export function getDefaultField(type: Field['type']) {
- return {...FIELD_TYPE_DEFAULT_FIELD[type], erc: uuidv4()};
-}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/getRandomId.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/getRandomId.ts
new file mode 100644
index 00000000000000..a9d7e1ae0b170e
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/getRandomId.ts
@@ -0,0 +1,12 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+// @ts-ignore
+
+import {v4 as uuidv4} from 'uuid';
+
+export default function getRandomId(): string {
+ return uuidv4();
+}
diff --git a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/normalizeName.ts b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/normalizeName.ts
index d0dff26369bb09..50378af5aa59fa 100644
--- a/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/normalizeName.ts
+++ b/modules/apps/site/site-cms-site-initializer/src/main/resources/META-INF/resources/js/structure_builder/utils/normalizeName.ts
@@ -3,15 +3,34 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-export default function normalizeName(name: string) {
+type Options = {
+ style?: 'camel' | 'pascal';
+};
- // Remove special characters
+export default function normalizeName(name: string, {style}: Options = {}) {
- let nextName = name.replace(/[^A-Z0-9]/gi, '');
+ // Remove special characters, replace dashes with spaces and split
- // Capitalize first letter
+ let splits = name
+ .replace(/[^A-Z0-9 -]/gi, '')
+ .replaceAll('-', ' ')
+ .split(' ');
- nextName = nextName.charAt(0).toUpperCase() + nextName.slice(1);
+ // Convert to correct style if specified
- return nextName;
+ if (style === 'pascal') {
+ splits = splits.map(
+ (split) =>
+ split.charAt(0).toUpperCase() + split.slice(1).toLowerCase()
+ );
+ }
+ else if (style === 'camel') {
+ splits = splits.map((split, index) =>
+ index === 0
+ ? split.toLowerCase()
+ : split.charAt(0).toUpperCase() + split.slice(1).toLowerCase()
+ );
+ }
+
+ return splits.join('');
}
diff --git a/modules/apps/site/site-cms-site-initializer/test/js/structure_builder/utils/buildObjectDefinition.test.ts b/modules/apps/site/site-cms-site-initializer/test/js/structure_builder/utils/buildObjectDefinition.test.ts
new file mode 100644
index 00000000000000..19c8368c0caab7
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/test/js/structure_builder/utils/buildObjectDefinition.test.ts
@@ -0,0 +1,91 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import buildObjectDefinition from '../../../../src/main/resources/META-INF/resources/js/structure_builder/utils/buildObjectDefinition';
+import {Field} from '../../../../src/main/resources/META-INF/resources/js/structure_builder/utils/field';
+
+const DATE_TIME_FIELD: Field = {
+ erc: 'datetime-field',
+ label: 'Date and Time Field',
+ localized: true,
+ name: 'datetimeField',
+ required: false,
+ settings: {
+ timeStorage: 'convertToUTC',
+ },
+ type: 'datetime',
+};
+
+const TEXT_FIELD: Field = {
+ erc: 'text-field',
+ label: 'Text Field',
+ localized: false,
+ name: 'textField',
+ required: true,
+ type: 'text',
+};
+
+describe('buildObjectDefinition', () => {
+ it('Builds objectDefinition with a field without settings', () => {
+ const result = buildObjectDefinition({
+ erc: 'structureERC',
+ fields: [TEXT_FIELD],
+ id: 1,
+ label: 'Structure',
+ name: 'myStructure',
+ });
+
+ expect(result).toEqual({
+ externalReferenceCode: 'structureERC',
+ id: 1,
+ label: {en_US: 'Structure'},
+ name: 'myStructure',
+ objectFields: [
+ {
+ businessType: 'Text',
+ externalReferenceCode: 'text-field',
+ label: {en_US: 'Text Field'},
+ localized: false,
+ name: 'textField',
+ required: true,
+ },
+ ],
+ pluralLabel: {en_US: 'Structure'},
+ scope: 'company',
+ });
+ });
+
+ it('Builds objectDefinition with a field with settings', () => {
+ const result = buildObjectDefinition({
+ erc: 'structureERC',
+ fields: [DATE_TIME_FIELD],
+ id: 1,
+ label: 'Structure',
+ name: 'myStructure',
+ });
+
+ expect(result).toEqual({
+ externalReferenceCode: 'structureERC',
+ id: 1,
+ label: {en_US: 'Structure'},
+ name: 'myStructure',
+ objectFields: [
+ {
+ businessType: 'DateTime',
+ externalReferenceCode: 'datetime-field',
+ label: {en_US: 'Date and Time Field'},
+ localized: true,
+ name: 'datetimeField',
+ objectFieldSettings: [
+ {name: 'timeStorage', value: 'convertToUTC'},
+ ],
+ required: false,
+ },
+ ],
+ pluralLabel: {en_US: 'Structure'},
+ scope: 'company',
+ });
+ });
+});
diff --git a/modules/apps/site/site-cms-site-initializer/test/js/structure_builder/utils/normalizeName.test.ts b/modules/apps/site/site-cms-site-initializer/test/js/structure_builder/utils/normalizeName.test.ts
new file mode 100644
index 00000000000000..943530a9e377dc
--- /dev/null
+++ b/modules/apps/site/site-cms-site-initializer/test/js/structure_builder/utils/normalizeName.test.ts
@@ -0,0 +1,33 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import normalizeName from '../../../../src/main/resources/META-INF/resources/js/structure_builder/utils/normalizeName';
+
+describe('normalizeName', () => {
+ it('Normalizes name to camelCase when style is camel', () => {
+ const result = normalizeName('hello-world', {style: 'camel'});
+ expect(result).toBe('helloWorld');
+ });
+
+ it('Normalizes name to PascalCase when style is pascal', () => {
+ const result = normalizeName('hello-world', {style: 'pascal'});
+ expect(result).toBe('HelloWorld');
+ });
+
+ it('Only removes spaces and special characters if no style is provided', () => {
+ const result = normalizeName('hello-world');
+ expect(result).toBe('helloworld');
+ });
+
+ it('Handles empty name input', () => {
+ const result = normalizeName('');
+ expect(result).toBe('');
+ });
+
+ it('Handles names with multiple spaces and dashes', () => {
+ const result = normalizeName('hello---world---test', {style: 'camel'});
+ expect(result).toBe('helloWorldTest');
+ });
+});
diff --git a/modules/apps/site/site-memberships-web/bnd.bnd b/modules/apps/site/site-memberships-web/bnd.bnd
index ffb15b8ac05b57..1e316019ad4d25 100644
--- a/modules/apps/site/site-memberships-web/bnd.bnd
+++ b/modules/apps/site/site-memberships-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Site Memberships Web
Bundle-SymbolicName: com.liferay.site.memberships.web
-Bundle-Version: 5.0.80
+Bundle-Version: 5.0.81
Web-ContextPath: /site-memberships-web
\ No newline at end of file
diff --git a/modules/apps/site/site-memberships-web/package.json b/modules/apps/site/site-memberships-web/package.json
index 8aba652afa40b1..cac5bac804afd6 100644
--- a/modules/apps/site/site-memberships-web/package.json
+++ b/modules/apps/site/site-memberships-web/package.json
@@ -1,5 +1,6 @@
{
"dependencies": {
+ "frontend-js-components-web": "*",
"frontend-js-web": "*"
},
"main": "js/index.js",
@@ -9,5 +10,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "5.0.80"
+ "version": "5.0.81"
}
diff --git a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/OrganizationCardPropsTransformer.js b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/OrganizationCardPropsTransformer.js
index 25e038fef4bd8b..157a8517412dea 100644
--- a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/OrganizationCardPropsTransformer.js
+++ b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/OrganizationCardPropsTransformer.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openConfirmModal} from 'frontend-js-web';
+import {openConfirmModal} from 'frontend-js-components-web';
const ACTIONS = {
deleteGroupOrganizations(itemData) {
diff --git a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/OrganizationsManagementToolbarPropsTransformer.js b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/OrganizationsManagementToolbarPropsTransformer.js
index 4083ff09986813..30c663236a1577 100644
--- a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/OrganizationsManagementToolbarPropsTransformer.js
+++ b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/OrganizationsManagementToolbarPropsTransformer.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openConfirmModal, openSelectionModal, sub} from 'frontend-js-web';
+import {openConfirmModal, openSelectionModal} from 'frontend-js-components-web';
+import {sub} from 'frontend-js-web';
export default function propsTransformer({portletNamespace, ...otherProps}) {
const deleteSelectedOrganizations = () => {
diff --git a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserGroupsDefaultPropsTransformer.js b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserGroupsDefaultPropsTransformer.js
index a9d1c6314715fb..5e3cd714309fd2 100644
--- a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserGroupsDefaultPropsTransformer.js
+++ b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserGroupsDefaultPropsTransformer.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openSelectionModal, setFormValues} from 'frontend-js-web';
+import {openSelectionModal} from 'frontend-js-components-web';
+import {setFormValues} from 'frontend-js-web';
const ACTIONS = {
assignUserGroupRole(itemData, portletNamespace) {
diff --git a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserGroupsManagementToolbarPropsTransformer.js b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserGroupsManagementToolbarPropsTransformer.js
index 6abe48ab6606dd..b40315685826ca 100644
--- a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserGroupsManagementToolbarPropsTransformer.js
+++ b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserGroupsManagementToolbarPropsTransformer.js
@@ -3,12 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {
- addParams,
- openConfirmModal,
- openSelectionModal,
- sub,
-} from 'frontend-js-web';
+import {openConfirmModal, openSelectionModal} from 'frontend-js-components-web';
+import {addParams, sub} from 'frontend-js-web';
export default function propsTransformer({portletNamespace, ...otherProps}) {
const deleteSelectedUserGroups = () => {
diff --git a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserManagementToolbarPropsTransformer.js b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserManagementToolbarPropsTransformer.js
index 9d544a3ceae3ef..14974c53489a0c 100644
--- a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserManagementToolbarPropsTransformer.js
+++ b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/UserManagementToolbarPropsTransformer.js
@@ -3,12 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {
- addParams,
- openConfirmModal,
- openSelectionModal,
- sub,
-} from 'frontend-js-web';
+import {openConfirmModal, openSelectionModal} from 'frontend-js-components-web';
+import {addParams, sub} from 'frontend-js-web';
export default function propsTransformer({portletNamespace, ...otherProps}) {
const deleteSelectedUsers = () => {
diff --git a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/actions.js b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/actions.js
index 811cc4b79e8ea6..99490525313998 100644
--- a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/actions.js
+++ b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/js/actions.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openSelectionModal, setFormValues} from 'frontend-js-web';
+import {openSelectionModal} from 'frontend-js-components-web';
+import {setFormValues} from 'frontend-js-web';
export const ACTIONS = {
assignRoles(itemData, portletNamespace) {
diff --git a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/tsconfig.json b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/tsconfig.json
index abc22772fdf207..ad60f780399497 100644
--- a/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/tsconfig.json
+++ b/modules/apps/site/site-memberships-web/src/main/resources/META-INF/resources/tsconfig.json
@@ -1,5 +1,5 @@
{
- "@generated": "c99e615685418c68788e5b4944798993979a32da",
+ "@generated": "ae7417d220cca1bac79573105d22fd7a3e78f448",
"@readonly": "** AUTO-GENERATED: DO NOT EDIT **",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
@@ -12,6 +12,9 @@
"module": "es6",
"moduleResolution": "node",
"paths": {
+ "frontend-js-components-web": [
+ "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/index.ts"
+ ],
"frontend-js-web": [
"../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/index.d.ts"
]
@@ -32,6 +35,9 @@
"../../../../../../../../global.d.ts"
],
"references": [
+ {
+ "path": "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/tsconfig.json"
+ },
{
"path": "../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/tsconfig.json"
}
diff --git a/modules/apps/site/site-sitemap-web/bnd.bnd b/modules/apps/site/site-sitemap-web/bnd.bnd
index 67799b8c963704..ee1906242abafa 100644
--- a/modules/apps/site/site-sitemap-web/bnd.bnd
+++ b/modules/apps/site/site-sitemap-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Site Sitemap Web
Bundle-SymbolicName: com.liferay.site.sitemap.web
-Bundle-Version: 1.0.16
+Bundle-Version: 1.0.17
Web-ContextPath: /site-sitemap-web
\ No newline at end of file
diff --git a/modules/apps/site/site-sitemap-web/package.json b/modules/apps/site/site-sitemap-web/package.json
index 1024a214aecbed..6840d3a3befb63 100644
--- a/modules/apps/site/site-sitemap-web/package.json
+++ b/modules/apps/site/site-sitemap-web/package.json
@@ -1,6 +1,7 @@
{
"dependencies": {
"@clayui/button": "3.116.0",
+ "frontend-js-components-web": "*",
"frontend-js-web": "*",
"react": "18.2.0",
"react-dom": "18.2.0"
@@ -12,5 +13,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "1.0.16"
+ "version": "1.0.17"
}
diff --git a/modules/apps/site/site-sitemap-web/src/main/resources/META-INF/resources/js/SitemapCompanyConfiguration.ts b/modules/apps/site/site-sitemap-web/src/main/resources/META-INF/resources/js/SitemapCompanyConfiguration.ts
index 0e6b44d6a6fe8e..7fd5ecd8a20cce 100644
--- a/modules/apps/site/site-sitemap-web/src/main/resources/META-INF/resources/js/SitemapCompanyConfiguration.ts
+++ b/modules/apps/site/site-sitemap-web/src/main/resources/META-INF/resources/js/SitemapCompanyConfiguration.ts
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {delegate, openSelectionModal, sub} from 'frontend-js-web';
+import {openSelectionModal} from 'frontend-js-components-web';
+import {delegate, sub} from 'frontend-js-web';
interface Props {
groupSelectorURL: string;
diff --git a/modules/apps/site/site-sitemap-web/src/main/resources/META-INF/resources/tsconfig.json b/modules/apps/site/site-sitemap-web/src/main/resources/META-INF/resources/tsconfig.json
index e852a254be5f8c..1136c85e9e1b37 100644
--- a/modules/apps/site/site-sitemap-web/src/main/resources/META-INF/resources/tsconfig.json
+++ b/modules/apps/site/site-sitemap-web/src/main/resources/META-INF/resources/tsconfig.json
@@ -1,5 +1,5 @@
{
- "@generated": "5685b17a14a6796cce322d960efd964cb7de01dc",
+ "@generated": "515f194287913102e6d0d41ba3599a5863baacaf",
"@readonly": "** AUTO-GENERATED: DO NOT EDIT **",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
@@ -12,6 +12,9 @@
"module": "es6",
"moduleResolution": "node",
"paths": {
+ "frontend-js-components-web": [
+ "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/index.ts"
+ ],
"frontend-js-web": [
"../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/index.d.ts"
]
@@ -32,6 +35,9 @@
"../../../../../../../../global.d.ts"
],
"references": [
+ {
+ "path": "../../../../../../../frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/tsconfig.json"
+ },
{
"path": "../../../../../../../frontend-js/frontend-js-web/src/main/resources/META-INF/resources/tsconfig.json"
}
diff --git a/modules/apps/staging/staging-taglib/bnd.bnd b/modules/apps/staging/staging-taglib/bnd.bnd
index 6dfa574b5992c5..2e6c3408dd33ce 100644
--- a/modules/apps/staging/staging-taglib/bnd.bnd
+++ b/modules/apps/staging/staging-taglib/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Staging Taglib
Bundle-SymbolicName: com.liferay.staging.taglib
-Bundle-Version: 8.0.27
+Bundle-Version: 8.0.28
Export-Package: com.liferay.staging.taglib.servlet.taglib
Liferay-JS-Config: /META-INF/resources/js/config.js
Provide-Capability:\
diff --git a/modules/apps/staging/staging-taglib/package.json b/modules/apps/staging/staging-taglib/package.json
index 9bb2e5f32566b2..07ddeebf141e46 100644
--- a/modules/apps/staging/staging-taglib/package.json
+++ b/modules/apps/staging/staging-taglib/package.json
@@ -17,5 +17,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "8.0.27"
+ "version": "8.0.28"
}
diff --git a/modules/apps/style-book/style-book-web/bnd.bnd b/modules/apps/style-book/style-book-web/bnd.bnd
index 8d904b234f15b3..b1c895a4a552f3 100644
--- a/modules/apps/style-book/style-book-web/bnd.bnd
+++ b/modules/apps/style-book/style-book-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Style Book Web
Bundle-SymbolicName: com.liferay.style.book.web
-Bundle-Version: 2.0.121
+Bundle-Version: 2.0.122
Web-ContextPath: /style-book-web
\ No newline at end of file
diff --git a/modules/apps/style-book/style-book-web/package.json b/modules/apps/style-book/style-book-web/package.json
index 58caf748a4df1b..6e21658a5f4217 100644
--- a/modules/apps/style-book/style-book-web/package.json
+++ b/modules/apps/style-book/style-book-web/package.json
@@ -28,5 +28,5 @@
"format": "node-scripts format",
"test": "USE_REACT_16=true node-scripts test"
},
- "version": "2.0.121"
+ "version": "2.0.122"
}
diff --git a/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/StyleBookManagementToolbarPropsTransformer.js b/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/StyleBookManagementToolbarPropsTransformer.js
index 7764c1a8c13447..722ee6968b313b 100644
--- a/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/StyleBookManagementToolbarPropsTransformer.js
+++ b/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/StyleBookManagementToolbarPropsTransformer.js
@@ -3,11 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {
- getCheckedCheckboxes,
- openModal,
- openSimpleInputModal,
-} from 'frontend-js-web';
+import {openModal, openSimpleInputModal} from 'frontend-js-components-web';
+import {getCheckedCheckboxes} from 'frontend-js-web';
import AddStyleBookModalContent from './AddStyleBookModalContent';
import openDeleteStyleBookModal from './openDeleteStyleBookModal';
diff --git a/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/StylebookEntryActionDropdownPropsTransformer.js b/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/StylebookEntryActionDropdownPropsTransformer.js
index 4a17ad142a6e87..99cd07b2bd04e4 100644
--- a/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/StylebookEntryActionDropdownPropsTransformer.js
+++ b/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/StylebookEntryActionDropdownPropsTransformer.js
@@ -7,8 +7,8 @@ import {
openConfirmModal,
openSelectionModal,
openSimpleInputModal,
- setFormValues,
-} from 'frontend-js-web';
+} from 'frontend-js-components-web';
+import {setFormValues} from 'frontend-js-web';
import openDeleteStyleBookModal from './openDeleteStyleBookModal';
diff --git a/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/openDeleteStyleBookModal.js b/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/openDeleteStyleBookModal.js
index 24809dc98a1548..1ee5bd9c062254 100644
--- a/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/openDeleteStyleBookModal.js
+++ b/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/openDeleteStyleBookModal.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openModal, sub} from 'frontend-js-web';
+import {openModal} from 'frontend-js-components-web';
+import {sub} from 'frontend-js-web';
export default function openDeleteStyleBookModal({multiple = false, onDelete}) {
openModal({
diff --git a/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/style-book-editor/contexts/StyleBookEditorContext.js b/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/style-book-editor/contexts/StyleBookEditorContext.js
index d118a7dae84c8b..cdb1face72ae99 100644
--- a/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/style-book-editor/contexts/StyleBookEditorContext.js
+++ b/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/style-book-editor/contexts/StyleBookEditorContext.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openToast} from 'frontend-js-web';
+import {openToast} from 'frontend-js-components-web';
import React, {useContext, useReducer} from 'react';
import {
diff --git a/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/style-book-editor/openItemSelector.js b/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/style-book-editor/openItemSelector.js
index 697cb635df94ac..7b21e134dfe92e 100644
--- a/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/style-book-editor/openItemSelector.js
+++ b/modules/apps/style-book/style-book-web/src/main/resources/META-INF/resources/js/style-book-editor/openItemSelector.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openSelectionModal} from 'frontend-js-web';
+import {openSelectionModal} from 'frontend-js-components-web';
import {config} from './config';
diff --git a/modules/apps/template/template-taglib/bnd.bnd b/modules/apps/template/template-taglib/bnd.bnd
index 4cab3b4184a25a..7a8c7e844268d0 100644
--- a/modules/apps/template/template-taglib/bnd.bnd
+++ b/modules/apps/template/template-taglib/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Template Taglib
Bundle-SymbolicName: com.liferay.template.taglib
-Bundle-Version: 1.1.10
+Bundle-Version: 1.1.11
Export-Package: com.liferay.template.taglib.servlet.taglib
Provide-Capability:\
osgi.extender;\
diff --git a/modules/apps/template/template-taglib/package.json b/modules/apps/template/template-taglib/package.json
index 4114f101fd552f..41c1a004e201f5 100644
--- a/modules/apps/template/template-taglib/package.json
+++ b/modules/apps/template/template-taglib/package.json
@@ -14,5 +14,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "1.1.10"
+ "version": "1.1.11"
}
diff --git a/modules/apps/template/template-web/bnd.bnd b/modules/apps/template/template-web/bnd.bnd
index aa3fdddf8d1e5e..8e4fa90d27a95f 100644
--- a/modules/apps/template/template-web/bnd.bnd
+++ b/modules/apps/template/template-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Template Web
Bundle-SymbolicName: com.liferay.template.web
-Bundle-Version: 1.0.97
+Bundle-Version: 1.0.98
Web-ContextPath: /template-web
\ No newline at end of file
diff --git a/modules/apps/template/template-web/package.json b/modules/apps/template/template-web/package.json
index 97acc2aa213abd..0149c18c07f714 100644
--- a/modules/apps/template/template-web/package.json
+++ b/modules/apps/template/template-web/package.json
@@ -26,5 +26,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "1.0.97"
+ "version": "1.0.98"
}
diff --git a/modules/apps/translation/translation-web/bnd.bnd b/modules/apps/translation/translation-web/bnd.bnd
index e7c2759b3c0b59..875dcadd2eded7 100644
--- a/modules/apps/translation/translation-web/bnd.bnd
+++ b/modules/apps/translation/translation-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Translation Web
Bundle-SymbolicName: com.liferay.translation.web
-Bundle-Version: 2.0.114
+Bundle-Version: 2.0.115
Web-ContextPath: /translation-web
-includeresource: @com.liferay.util.java-*.jar!/com/liferay/util/JS.class
\ No newline at end of file
diff --git a/modules/apps/translation/translation-web/package.json b/modules/apps/translation/translation-web/package.json
index a8a90a729ddf79..08abb12d732e67 100644
--- a/modules/apps/translation/translation-web/package.json
+++ b/modules/apps/translation/translation-web/package.json
@@ -27,5 +27,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "2.0.114"
+ "version": "2.0.115"
}
diff --git a/modules/apps/users-admin/users-admin-web/bnd.bnd b/modules/apps/users-admin/users-admin-web/bnd.bnd
index 68bab0ef561658..46e8b1e52ce679 100644
--- a/modules/apps/users-admin/users-admin-web/bnd.bnd
+++ b/modules/apps/users-admin/users-admin-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Users Admin Web
Bundle-SymbolicName: com.liferay.users.admin.web
-Bundle-Version: 11.0.25
+Bundle-Version: 11.0.26
Import-Package:\
javax.net.ssl,\
\
diff --git a/modules/apps/users-admin/users-admin-web/package.json b/modules/apps/users-admin/users-admin-web/package.json
index 68e8ab13109229..46338ee734badd 100644
--- a/modules/apps/users-admin/users-admin-web/package.json
+++ b/modules/apps/users-admin/users-admin-web/package.json
@@ -13,5 +13,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "11.0.25"
+ "version": "11.0.26"
}
diff --git a/modules/dxp/apps/analytics/analytics-reports-js-components-web/bnd.bnd b/modules/dxp/apps/analytics/analytics-reports-js-components-web/bnd.bnd
index 71111067ea3c27..ab4e4e1dd198ca 100644
--- a/modules/dxp/apps/analytics/analytics-reports-js-components-web/bnd.bnd
+++ b/modules/dxp/apps/analytics/analytics-reports-js-components-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Analytics Reports JS Components Web
Bundle-SymbolicName: com.liferay.analytics.reports.js.components.web
-Bundle-Version: 1.0.7
+Bundle-Version: 1.0.8
Web-ContextPath: /analytics-reports-js-components-web
\ No newline at end of file
diff --git a/modules/dxp/apps/analytics/analytics-reports-js-components-web/package.json b/modules/dxp/apps/analytics/analytics-reports-js-components-web/package.json
index 28bf2d317bacf9..be79eed287379d 100644
--- a/modules/dxp/apps/analytics/analytics-reports-js-components-web/package.json
+++ b/modules/dxp/apps/analytics/analytics-reports-js-components-web/package.json
@@ -34,5 +34,5 @@
"format": "node-scripts format",
"test": "USE_REACT_16=true node-scripts test"
},
- "version": "1.0.7"
+ "version": "1.0.8"
}
diff --git a/modules/dxp/apps/analytics/analytics-reports-rest-api/bnd.bnd b/modules/dxp/apps/analytics/analytics-reports-rest-api/bnd.bnd
index 0fcda6965e3d0b..bee07109490e44 100644
--- a/modules/dxp/apps/analytics/analytics-reports-rest-api/bnd.bnd
+++ b/modules/dxp/apps/analytics/analytics-reports-rest-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Analytics Reports REST API
Bundle-SymbolicName: com.liferay.analytics.reports.rest.api
-Bundle-Version: 2.1.1
+Bundle-Version: 2.1.2
Export-Package:\
com.liferay.analytics.reports.rest.dto.v1_0,\
com.liferay.analytics.reports.rest.resource.v1_0
\ No newline at end of file
diff --git a/modules/dxp/apps/analytics/analytics-reports-rest-client/bnd.bnd b/modules/dxp/apps/analytics/analytics-reports-rest-client/bnd.bnd
index fd184d1bb1176b..3ca7b9ef3ff59a 100644
--- a/modules/dxp/apps/analytics/analytics-reports-rest-client/bnd.bnd
+++ b/modules/dxp/apps/analytics/analytics-reports-rest-client/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Analytics Reports REST Client
Bundle-SymbolicName: com.liferay.analytics.reports.rest.client
-Bundle-Version: 1.2.1
+Bundle-Version: 1.2.2
Export-Package:\
com.liferay.analytics.reports.rest.client.dto.v1_0,\
com.liferay.analytics.reports.rest.client.http,\
diff --git a/modules/dxp/apps/analytics/analytics-reports-rest-impl/bnd.bnd b/modules/dxp/apps/analytics/analytics-reports-rest-impl/bnd.bnd
index e2baacc0e3b5a4..b1a96f11464feb 100644
--- a/modules/dxp/apps/analytics/analytics-reports-rest-impl/bnd.bnd
+++ b/modules/dxp/apps/analytics/analytics-reports-rest-impl/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Analytics Reports REST Implementation
Bundle-SymbolicName: com.liferay.analytics.reports.rest.impl
-Bundle-Version: 1.0.4
\ No newline at end of file
+Bundle-Version: 1.0.5
\ No newline at end of file
diff --git a/modules/dxp/apps/analytics/analytics-reports-web/bnd.bnd b/modules/dxp/apps/analytics/analytics-reports-web/bnd.bnd
index 255653c6e7aa1b..4d25d893157ed1 100644
--- a/modules/dxp/apps/analytics/analytics-reports-web/bnd.bnd
+++ b/modules/dxp/apps/analytics/analytics-reports-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Analytics Reports Web
Bundle-SymbolicName: com.liferay.analytics.reports.web
-Bundle-Version: 2.0.106
+Bundle-Version: 2.0.107
Web-ContextPath: /analytics-reports-web
\ No newline at end of file
diff --git a/modules/dxp/apps/analytics/analytics-reports-web/package.json b/modules/dxp/apps/analytics/analytics-reports-web/package.json
index b3e72fe58e9ebf..ee4ccfd97abd06 100644
--- a/modules/dxp/apps/analytics/analytics-reports-web/package.json
+++ b/modules/dxp/apps/analytics/analytics-reports-web/package.json
@@ -29,5 +29,5 @@
"format": "node-scripts format",
"test": "USE_REACT_16=true node-scripts test"
},
- "version": "2.0.106"
+ "version": "2.0.107"
}
diff --git a/modules/dxp/apps/antivirus/antivirus-clamd-scanner/bnd.bnd b/modules/dxp/apps/antivirus/antivirus-clamd-scanner/bnd.bnd
index c4081c67674366..720a6f93899048 100644
--- a/modules/dxp/apps/antivirus/antivirus-clamd-scanner/bnd.bnd
+++ b/modules/dxp/apps/antivirus/antivirus-clamd-scanner/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Antivirus Clamd Scanner
Bundle-SymbolicName: com.liferay.antivirus.clamd.scanner
-Bundle-Version: 5.0.11
\ No newline at end of file
+Bundle-Version: 5.0.12
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce-demo-pack/commerce-theme-minium/commerce-theme-minium-full-site-initializer/bnd.bnd b/modules/dxp/apps/commerce-demo-pack/commerce-theme-minium/commerce-theme-minium-full-site-initializer/bnd.bnd
index 943fb4ce757d70..e14b70086385d5 100644
--- a/modules/dxp/apps/commerce-demo-pack/commerce-theme-minium/commerce-theme-minium-full-site-initializer/bnd.bnd
+++ b/modules/dxp/apps/commerce-demo-pack/commerce-theme-minium/commerce-theme-minium-full-site-initializer/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Commerce Theme Minium Full Site Initializer
Bundle-SymbolicName: com.liferay.commerce.theme.minium.full.site.initializer
-Bundle-Version: 4.0.28
+Bundle-Version: 4.0.29
Web-ContextPath: /commerce-theme-minium-full-site-initializer
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce-punchout/commerce-punchout-api/bnd.bnd b/modules/dxp/apps/commerce-punchout/commerce-punchout-api/bnd.bnd
index d0e59a6273a519..1e6232868dc05f 100644
--- a/modules/dxp/apps/commerce-punchout/commerce-punchout-api/bnd.bnd
+++ b/modules/dxp/apps/commerce-punchout/commerce-punchout-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Commerce Punch Out API
Bundle-SymbolicName: com.liferay.commerce.punchout.api
-Bundle-Version: 5.0.14
+Bundle-Version: 5.0.15
Export-Package:\
com.liferay.commerce.punchout.configuration,\
com.liferay.commerce.punchout.constants,\
diff --git a/modules/dxp/apps/commerce-punchout/commerce-punchout-oauth2-provider-api/bnd.bnd b/modules/dxp/apps/commerce-punchout/commerce-punchout-oauth2-provider-api/bnd.bnd
index 238579e37dfda7..b3412313245da9 100644
--- a/modules/dxp/apps/commerce-punchout/commerce-punchout-oauth2-provider-api/bnd.bnd
+++ b/modules/dxp/apps/commerce-punchout/commerce-punchout-oauth2-provider-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Commerce Punch Out OAuth2 Provider API
Bundle-SymbolicName: com.liferay.commerce.punchout.oauth2.provider.api
-Bundle-Version: 5.0.10
+Bundle-Version: 5.0.11
Export-Package:\
com.liferay.commerce.punchout.oauth2.provider,\
com.liferay.commerce.punchout.oauth2.provider.model
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce-punchout/commerce-punchout-oauth2-provider-rest/bnd.bnd b/modules/dxp/apps/commerce-punchout/commerce-punchout-oauth2-provider-rest/bnd.bnd
index 99dc5880ed1fca..840354a3aab54c 100644
--- a/modules/dxp/apps/commerce-punchout/commerce-punchout-oauth2-provider-rest/bnd.bnd
+++ b/modules/dxp/apps/commerce-punchout/commerce-punchout-oauth2-provider-rest/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Commerce Punch Out OAuth2 Provider REST
Bundle-SymbolicName: com.liferay.commerce.punchout.oauth2.provider.rest
-Bundle-Version: 4.0.17
+Bundle-Version: 4.0.18
Import-Package:\
com.liferay.portal.kernel.util;version="[74.0.0,9999.0.0)",\
\
diff --git a/modules/dxp/apps/commerce-punchout/commerce-punchout-portal-security-auto-login/bnd.bnd b/modules/dxp/apps/commerce-punchout/commerce-punchout-portal-security-auto-login/bnd.bnd
index 1243b3c3191758..4d5f1a22c7b2a2 100644
--- a/modules/dxp/apps/commerce-punchout/commerce-punchout-portal-security-auto-login/bnd.bnd
+++ b/modules/dxp/apps/commerce-punchout/commerce-punchout-portal-security-auto-login/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Commerce Punch Out Portal Security Auto Login
Bundle-SymbolicName: com.liferay.commerce.punchout.portal.security.auto.login
-Bundle-Version: 4.0.32
+Bundle-Version: 4.0.33
Import-Package:\
com.liferay.commerce.order;version="[8.0.0,9999.0.0)",\
com.liferay.commerce.product.service;version="[40.1.0,9999.0.0)",\
diff --git a/modules/dxp/apps/commerce-punchout/commerce-punchout-service/bnd.bnd b/modules/dxp/apps/commerce-punchout/commerce-punchout-service/bnd.bnd
index 435f913aeb2fa1..4cc91bbfc6a542 100644
--- a/modules/dxp/apps/commerce-punchout/commerce-punchout-service/bnd.bnd
+++ b/modules/dxp/apps/commerce-punchout/commerce-punchout-service/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Commerce Punch Out Service
Bundle-SymbolicName: com.liferay.commerce.punchout.service
-Bundle-Version: 4.0.24
+Bundle-Version: 4.0.25
Import-Package:\
com.liferay.account.model;version="[5.6.0,9999.0.0)",\
com.liferay.account.service;version="[11.2.0,9999.0.0)",\
diff --git a/modules/dxp/apps/commerce-punchout/commerce-punchout-web/bnd.bnd b/modules/dxp/apps/commerce-punchout/commerce-punchout-web/bnd.bnd
index c834233abc3d6c..73bcb72cbe1046 100644
--- a/modules/dxp/apps/commerce-punchout/commerce-punchout-web/bnd.bnd
+++ b/modules/dxp/apps/commerce-punchout/commerce-punchout-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Commerce Punch Out Web
Bundle-SymbolicName: com.liferay.commerce.punchout.web
-Bundle-Version: 4.0.27
+Bundle-Version: 4.0.28
Import-Package:\
com.liferay.account.model;version="[5.6.0,9999.0.0)",\
com.liferay.commerce.order;version="[8.0.0,9999.0.0)",\
diff --git a/modules/dxp/apps/commerce-punchout/headless/headless-commerce-punchout-api/bnd.bnd b/modules/dxp/apps/commerce-punchout/headless/headless-commerce-punchout-api/bnd.bnd
index b79b96f625f926..52d7d007b89d0e 100644
--- a/modules/dxp/apps/commerce-punchout/headless/headless-commerce-punchout-api/bnd.bnd
+++ b/modules/dxp/apps/commerce-punchout/headless/headless-commerce-punchout-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Headless Commerce Punch Out API
Bundle-SymbolicName: com.liferay.headless.commerce.punchout.api
-Bundle-Version: 13.1.9
+Bundle-Version: 13.1.10
Export-Package:\
com.liferay.headless.commerce.punchout.dto.v1_0,\
com.liferay.headless.commerce.punchout.helper,\
diff --git a/modules/dxp/apps/commerce-punchout/headless/headless-commerce-punchout-impl/bnd.bnd b/modules/dxp/apps/commerce-punchout/headless/headless-commerce-punchout-impl/bnd.bnd
index dfd82e2d6f65bf..218602aeb92a0b 100644
--- a/modules/dxp/apps/commerce-punchout/headless/headless-commerce-punchout-impl/bnd.bnd
+++ b/modules/dxp/apps/commerce-punchout/headless/headless-commerce-punchout-impl/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Headless Commerce Punch Out Implementation
Bundle-SymbolicName: com.liferay.headless.commerce.punchout.impl
-Bundle-Version: 4.0.57
+Bundle-Version: 4.0.58
Import-Package:\
com.liferay.account.model;version="[5.6.0,9999.0.0)",\
com.liferay.account.service;version="[11.2.0,9999.0.0)",\
diff --git a/modules/dxp/apps/commerce/commerce-dashboard-web/bnd.bnd b/modules/dxp/apps/commerce/commerce-dashboard-web/bnd.bnd
index c60007dcecf322..1557b26750d0ad 100644
--- a/modules/dxp/apps/commerce/commerce-dashboard-web/bnd.bnd
+++ b/modules/dxp/apps/commerce/commerce-dashboard-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Commerce Dashboard Web
Bundle-SymbolicName: com.liferay.commerce.dashboard.web
-Bundle-Version: 4.0.53
+Bundle-Version: 4.0.54
Web-ContextPath: /commerce-dashboard-web
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/commerce-dashboard-web/package.json b/modules/dxp/apps/commerce/commerce-dashboard-web/package.json
index 5a7c78ccc0f823..88da4e06f0008a 100644
--- a/modules/dxp/apps/commerce/commerce-dashboard-web/package.json
+++ b/modules/dxp/apps/commerce/commerce-dashboard-web/package.json
@@ -14,5 +14,5 @@
"format": "node-scripts format"
},
"sideEffects": false,
- "version": "4.0.53"
+ "version": "4.0.54"
}
diff --git a/modules/dxp/apps/commerce/commerce-machine-learning-api/bnd.bnd b/modules/dxp/apps/commerce/commerce-machine-learning-api/bnd.bnd
index ad672c392310c4..03e810cad939e2 100644
--- a/modules/dxp/apps/commerce/commerce-machine-learning-api/bnd.bnd
+++ b/modules/dxp/apps/commerce/commerce-machine-learning-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Commerce Machine Learning API
Bundle-SymbolicName: com.liferay.commerce.machine.learning.api
-Bundle-Version: 7.2.6
+Bundle-Version: 7.2.7
Export-Package:\
com.liferay.commerce.machine.learning.forecast,\
com.liferay.commerce.machine.learning.recommendation
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-api/bnd.bnd b/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-api/bnd.bnd
index 1546daf4276b5b..14579ac3118d7a 100644
--- a/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-api/bnd.bnd
+++ b/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Commerce Machine Learning Forecast Alert API
Bundle-SymbolicName: com.liferay.commerce.machine.learning.forecast.alert.api
-Bundle-Version: 9.0.1
+Bundle-Version: 9.0.2
Export-Package:\
com.liferay.commerce.machine.learning.forecast.alert.constants,\
com.liferay.commerce.machine.learning.forecast.alert.exception,\
diff --git a/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-service/bnd.bnd b/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-service/bnd.bnd
index f5d1f1fe5d8178..d2e6beac697942 100644
--- a/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-service/bnd.bnd
+++ b/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-service/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Commerce Machine Learning Forecast Alert Service
Bundle-SymbolicName: com.liferay.commerce.machine.learning.forecast.alert.service
-Bundle-Version: 5.0.40
+Bundle-Version: 5.0.41
Liferay-Require-SchemaVersion: 1.0.0
Liferay-Service: true
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-web/bnd.bnd b/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-web/bnd.bnd
index cac5992e6c6b65..7c52572d7bb4fd 100644
--- a/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-web/bnd.bnd
+++ b/modules/dxp/apps/commerce/commerce-machine-learning-forecast-alert-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Commerce Machine Learning Forecast Alert Web
Bundle-SymbolicName: com.liferay.commerce.machine.learning.forecast.alert.web
-Bundle-Version: 5.0.21
+Bundle-Version: 5.0.22
Web-ContextPath: /commerce-machine-learning-forecast-alert-web
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/commerce-machine-learning-impl/bnd.bnd b/modules/dxp/apps/commerce/commerce-machine-learning-impl/bnd.bnd
index 35bdddca577f2f..25e6a5f98b7e44 100644
--- a/modules/dxp/apps/commerce/commerce-machine-learning-impl/bnd.bnd
+++ b/modules/dxp/apps/commerce/commerce-machine-learning-impl/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Commerce Machine Learning Implementation
Bundle-SymbolicName: com.liferay.commerce.machine.learning.impl
-Bundle-Version: 5.0.55
+Bundle-Version: 5.0.56
Web-ContextPath: /commerce-machine-learning-impl
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/commerce-organization-api/bnd.bnd b/modules/dxp/apps/commerce/commerce-organization-api/bnd.bnd
index 02c135cb052038..b2ca0bf1f4a02f 100644
--- a/modules/dxp/apps/commerce/commerce-organization-api/bnd.bnd
+++ b/modules/dxp/apps/commerce/commerce-organization-api/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Commerce Organization API
Bundle-SymbolicName: com.liferay.commerce.organization.api
-Bundle-Version: 6.2.1
+Bundle-Version: 6.2.2
Export-Package: com.liferay.commerce.organization.constants
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/commerce-organization-web/bnd.bnd b/modules/dxp/apps/commerce/commerce-organization-web/bnd.bnd
index 5df68227c7427e..a6d9f751fb8219 100644
--- a/modules/dxp/apps/commerce/commerce-organization-web/bnd.bnd
+++ b/modules/dxp/apps/commerce/commerce-organization-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Commerce Organization Web
Bundle-SymbolicName: com.liferay.commerce.organization.web
-Bundle-Version: 5.0.78
+Bundle-Version: 5.0.79
Web-ContextPath: /commerce-organization-web
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/commerce-organization-web/package.json b/modules/dxp/apps/commerce/commerce-organization-web/package.json
index 2bc25b12cd1928..961241761c6b7a 100644
--- a/modules/dxp/apps/commerce/commerce-organization-web/package.json
+++ b/modules/dxp/apps/commerce/commerce-organization-web/package.json
@@ -35,5 +35,5 @@
"test": "node-scripts test",
"test:watch": "node-scripts test --watch"
},
- "version": "5.0.78"
+ "version": "5.0.79"
}
diff --git a/modules/dxp/apps/commerce/commerce-shop-by-diagram-web/bnd.bnd b/modules/dxp/apps/commerce/commerce-shop-by-diagram-web/bnd.bnd
index 370d3970262050..a4c4c6bce74d2c 100644
--- a/modules/dxp/apps/commerce/commerce-shop-by-diagram-web/bnd.bnd
+++ b/modules/dxp/apps/commerce/commerce-shop-by-diagram-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Commerce Shop by Diagram Web
Bundle-SymbolicName: com.liferay.commerce.shop.by.diagram.web
-Bundle-Version: 1.0.102
+Bundle-Version: 1.0.103
Web-ContextPath: /commerce-shop-by-diagram-web
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/commerce-shop-by-diagram-web/package.json b/modules/dxp/apps/commerce/commerce-shop-by-diagram-web/package.json
index e0e427c2530871..060cf8e230a61b 100644
--- a/modules/dxp/apps/commerce/commerce-shop-by-diagram-web/package.json
+++ b/modules/dxp/apps/commerce/commerce-shop-by-diagram-web/package.json
@@ -40,5 +40,5 @@
"format": "node-scripts format",
"test": "node-scripts test --passWithNoTests"
},
- "version": "1.0.102"
+ "version": "1.0.103"
}
diff --git a/modules/dxp/apps/commerce/commerce-talend-job-deployer-api/bnd.bnd b/modules/dxp/apps/commerce/commerce-talend-job-deployer-api/bnd.bnd
index 747a2cc5873ed1..58049b18780356 100644
--- a/modules/dxp/apps/commerce/commerce-talend-job-deployer-api/bnd.bnd
+++ b/modules/dxp/apps/commerce/commerce-talend-job-deployer-api/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Commerce Talend Job Deployer API
Bundle-SymbolicName: com.liferay.commerce.talend.job.deployer.api
-Bundle-Version: 4.0.9
+Bundle-Version: 4.0.10
Export-Package: com.liferay.commerce.talend.job.deployer
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-api/bnd.bnd b/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-api/bnd.bnd
index 58180e926bc890..b48ab77c05db86 100644
--- a/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-api/bnd.bnd
+++ b/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Headless Commerce Machine Learning API
Bundle-SymbolicName: com.liferay.headless.commerce.machine.learning.api
-Bundle-Version: 8.2.6
+Bundle-Version: 8.2.7
Export-Package:\
com.liferay.headless.commerce.machine.learning.dto.v1_0,\
com.liferay.headless.commerce.machine.learning.resource.v1_0
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-client/bnd.bnd b/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-client/bnd.bnd
index bc1bcd56298cb0..acbfa289702077 100644
--- a/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-client/bnd.bnd
+++ b/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-client/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Headless Commerce Machine Learning Client
Bundle-SymbolicName: com.liferay.headless.commerce.machine.learning.client
-Bundle-Version: 1.0.27
\ No newline at end of file
+Bundle-Version: 1.0.28
\ No newline at end of file
diff --git a/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-impl/bnd.bnd b/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-impl/bnd.bnd
index 307efa7b0896da..bdc711d14fa7fe 100644
--- a/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-impl/bnd.bnd
+++ b/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-impl/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Headless Commerce Machine Learning Implementation
Bundle-SymbolicName: com.liferay.headless.commerce.machine.learning.impl
-Bundle-Version: 5.0.77
+Bundle-Version: 5.0.78
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/dxp/apps/document-library-opener/document-library-opener-onedrive-web/bnd.bnd b/modules/dxp/apps/document-library-opener/document-library-opener-onedrive-web/bnd.bnd
index 64e46cd47b8cc3..da35475d43dbb4 100644
--- a/modules/dxp/apps/document-library-opener/document-library-opener-onedrive-web/bnd.bnd
+++ b/modules/dxp/apps/document-library-opener/document-library-opener-onedrive-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Document Library Opener OneDrive Web
Bundle-SymbolicName: com.liferay.document.library.opener.onedrive.web
-Bundle-Version: 3.0.67
+Bundle-Version: 3.0.68
Import-Package:\
!android.*,\
\
diff --git a/modules/dxp/apps/document-library-opener/document-library-opener-onedrive-web/package.json b/modules/dxp/apps/document-library-opener/document-library-opener-onedrive-web/package.json
index c762d87c559d7c..f3cb39524efd70 100644
--- a/modules/dxp/apps/document-library-opener/document-library-opener-onedrive-web/package.json
+++ b/modules/dxp/apps/document-library-opener/document-library-opener-onedrive-web/package.json
@@ -13,5 +13,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "3.0.67"
+ "version": "3.0.68"
}
diff --git a/modules/dxp/apps/frontend-theme/frontend-theme-dxp-override/bnd.bnd b/modules/dxp/apps/frontend-theme/frontend-theme-dxp-override/bnd.bnd
index f2af1dbe10e371..dbdeb8c34ee8ed 100644
--- a/modules/dxp/apps/frontend-theme/frontend-theme-dxp-override/bnd.bnd
+++ b/modules/dxp/apps/frontend-theme/frontend-theme-dxp-override/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Frontend Theme DXP Override
Bundle-SymbolicName: com.liferay.frontend.theme.dxp.override
-Bundle-Version: 4.0.68
\ No newline at end of file
+Bundle-Version: 4.0.69
\ No newline at end of file
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-email-otp-api/bnd.bnd b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-email-otp-api/bnd.bnd
index 000767478103da..faca0d8de4ff80 100644
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-email-otp-api/bnd.bnd
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-email-otp-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Multi-Factor Authentication Email OTP API
Bundle-SymbolicName: com.liferay.multi.factor.authentication.email.otp.api
-Bundle-Version: 4.0.1
+Bundle-Version: 4.0.2
Export-Package:\
com.liferay.multi.factor.authentication.email.otp.configuration,\
com.liferay.multi.factor.authentication.email.otp.exception,\
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-credential-api/bnd.bnd b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-credential-api/bnd.bnd
index db410febc5a3ec..f5384c26c6a146 100644
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-credential-api/bnd.bnd
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-credential-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Multi-Factor Authentication FIDO2 Credential API
Bundle-SymbolicName: com.liferay.multi.factor.authentication.fido2.credential.api
-Bundle-Version: 6.0.1
+Bundle-Version: 6.0.2
Export-Package:\
com.liferay.multi.factor.authentication.fido2.credential.exception,\
com.liferay.multi.factor.authentication.fido2.credential.model,\
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-web/bnd.bnd b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-web/bnd.bnd
index 602ca36e09bf0f..4f4b618b096753 100644
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-web/bnd.bnd
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Multi-Factor Authentication FIDO2 Web
Bundle-SymbolicName: com.liferay.multi.factor.authentication.fido2.web
-Bundle-Version: 1.0.47
+Bundle-Version: 1.0.48
Import-Package:\
!sun.security.x509.*,\
\
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-web/package.json b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-web/package.json
index 85a45b465cc7fd..b3da10fcd29a1b 100644
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-web/package.json
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-fido2-web/package.json
@@ -9,5 +9,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "1.0.47"
+ "version": "1.0.48"
}
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-ip-address-impl/bnd.bnd b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-ip-address-impl/bnd.bnd
index 565c4cc72346cf..7e393f250ad925 100755
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-ip-address-impl/bnd.bnd
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-ip-address-impl/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Multi-Factor Authentication IP Address Implementation
Bundle-SymbolicName: com.liferay.multi.factor.authentication.ip.address.impl
-Bundle-Version: 2.0.17
\ No newline at end of file
+Bundle-Version: 2.0.18
\ No newline at end of file
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-spi/bnd.bnd b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-spi/bnd.bnd
index 55e315c5d4ac2d..e2cfc3e624b630 100644
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-spi/bnd.bnd
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-spi/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Multi-Factor Authentication SPI
Bundle-SymbolicName: com.liferay.multi.factor.authentication.spi
-Bundle-Version: 2.0.7
+Bundle-Version: 2.0.8
Export-Package:\
com.liferay.multi.factor.authentication.spi.checker,\
com.liferay.multi.factor.authentication.spi.checker.browser,\
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-api/bnd.bnd b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-api/bnd.bnd
index 633e7593fb0d6e..bbec7635543914 100755
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-api/bnd.bnd
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Multi-Factor Authentication Time-based OTP API
Bundle-SymbolicName: com.liferay.multi.factor.authentication.timebased.otp.api
-Bundle-Version: 4.0.1
+Bundle-Version: 4.0.2
Export-Package:\
com.liferay.multi.factor.authentication.timebased.otp.exception,\
com.liferay.multi.factor.authentication.timebased.otp.model,\
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-service/bnd.bnd b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-service/bnd.bnd
index b0d08a286c7532..7ac80b101b8a44 100755
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-service/bnd.bnd
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-service/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Multi-Factor Authentication Time-based OTP Service
Bundle-SymbolicName: com.liferay.multi.factor.authentication.timebased.otp.service
-Bundle-Version: 2.0.31
+Bundle-Version: 2.0.32
Liferay-Require-SchemaVersion: 1.0.1
Liferay-Service: true
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-web/bnd.bnd b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-web/bnd.bnd
index 7059e8ee681e45..86375b86d280c1 100755
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-web/bnd.bnd
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Multi-Factor Authentication Time-based OTP Web
Bundle-SymbolicName: com.liferay.multi.factor.authentication.timebased.otp.web
-Bundle-Version: 2.0.37
+Bundle-Version: 2.0.38
Web-ContextPath: /multi-factor-authentication-timebased-otp-web
\ No newline at end of file
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-web/package.json b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-web/package.json
index eb21fd721b3580..f4549c62579861 100644
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-web/package.json
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-timebased-otp-web/package.json
@@ -9,5 +9,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "2.0.37"
+ "version": "2.0.38"
}
diff --git a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-web/bnd.bnd b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-web/bnd.bnd
index 076482e33d027d..8c5ceeee9d03a6 100644
--- a/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-web/bnd.bnd
+++ b/modules/dxp/apps/multi-factor-authentication/multi-factor-authentication-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Multi-Factor Authentication Web
Bundle-SymbolicName: com.liferay.multi.factor.authentication.web
-Bundle-Version: 2.0.41
+Bundle-Version: 2.0.42
Web-ContextPath: /multi-factor-authentication-web
\ No newline at end of file
diff --git a/modules/dxp/apps/osb/osb-site-initializer/osb-site-initializer-liferay-online/src/main/resources/site-initializer/layout-set/private/js.js b/modules/dxp/apps/osb/osb-site-initializer/osb-site-initializer-liferay-online/src/main/resources/site-initializer/layout-set/private/js.js
index 1ade5582eed795..c6e48d9314aed9 100644
--- a/modules/dxp/apps/osb/osb-site-initializer/osb-site-initializer-liferay-online/src/main/resources/site-initializer/layout-set/private/js.js
+++ b/modules/dxp/apps/osb/osb-site-initializer/osb-site-initializer-liferay-online/src/main/resources/site-initializer/layout-set/private/js.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {fetch, getOpener, openModal} from 'frontend-js-web';
+import {openModal} from 'frontend-js-components-web';
+import {fetch, getOpener} from 'frontend-js-web';
let copySaved = '';
diff --git a/modules/dxp/apps/osb/osb-site-initializer/osb-site-initializer-liferay-online/src/main/resources/site-initializer/layout-set/public/js.js b/modules/dxp/apps/osb/osb-site-initializer/osb-site-initializer-liferay-online/src/main/resources/site-initializer/layout-set/public/js.js
index 39303fce96a92c..462823dacaa44c 100644
--- a/modules/dxp/apps/osb/osb-site-initializer/osb-site-initializer-liferay-online/src/main/resources/site-initializer/layout-set/public/js.js
+++ b/modules/dxp/apps/osb/osb-site-initializer/osb-site-initializer-liferay-online/src/main/resources/site-initializer/layout-set/public/js.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openModal} from 'frontend-js-web';
+import {openModal} from 'frontend-js-components-web';
let copySaved = '';
diff --git a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-api/bnd.bnd b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-api/bnd.bnd
index 8a0318c0173703..f4dd8d52091427 100644
--- a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-api/bnd.bnd
+++ b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Reports Engine Console API
Bundle-SymbolicName: com.liferay.portal.reports.engine.console.api
-Bundle-Version: 11.0.1
+Bundle-Version: 11.0.2
Export-Package:\
com.liferay.portal.reports.engine.console.configuration,\
com.liferay.portal.reports.engine.console.constants,\
diff --git a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-jasper/bnd.bnd b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-jasper/bnd.bnd
index 296c4ee3659a98..e24eabf2b2f21d 100644
--- a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-jasper/bnd.bnd
+++ b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-jasper/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Reports Engine Console Jasper
Bundle-SymbolicName: com.liferay.portal.reports.engine.console.jasper
-Bundle-Version: 4.0.34
+Bundle-Version: 4.0.36
DynamicImport-Package: *
Import-Package:\
!antlr.*,\
diff --git a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-jasper/build.gradle b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-jasper/build.gradle
index c0ce333a014f66..0e9372b7b24baa 100644
--- a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-jasper/build.gradle
+++ b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-jasper/build.gradle
@@ -21,6 +21,7 @@ dependencies {
compileOnly group: "com.zaxxer", name: "SparseBitSet", version: "1.2"
compileOnly group: "commons-codec", name: "commons-codec", version: "1.15"
compileOnly group: "commons-digester", name: "commons-digester", version: "2.1"
+ compileOnly group: "javax.annotation", name: "javax.annotation-api", version: "1.3.2"
compileOnly group: "org.apache.commons", name: "commons-collections4", version: "4.4"
compileOnly group: "org.apache.commons", name: "commons-compress", version: "1.26.0"
compileOnly group: "org.apache.commons", name: "commons-math3", version: "3.6.1"
diff --git a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-service/bnd.bnd b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-service/bnd.bnd
index faa153e992de5f..38ca2255d52f03 100644
--- a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-service/bnd.bnd
+++ b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-service/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Reports Engine Console Service
Bundle-SymbolicName: com.liferay.portal.reports.engine.console.service
-Bundle-Version: 8.0.53
+Bundle-Version: 8.0.54
DynamicImport-Package: *
Import-Package:\
!net.sf.cglib.proxy.*,\
diff --git a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/bnd.bnd b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/bnd.bnd
index be1a58e88b7f1b..83fc9967841eff 100644
--- a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/bnd.bnd
+++ b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Reports Engine Console Web
Bundle-SymbolicName: com.liferay.portal.reports.engine.console.web
-Bundle-Version: 5.0.63
+Bundle-Version: 5.0.64
Liferay-Releng-Module-Group-Title: Reports Engine Console
Web-ContextPath: /portal-reports-engine-console-web
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/package.json b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/package.json
index ea60227983cd5d..74c0b5d2cd4571 100644
--- a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/package.json
+++ b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/package.json
@@ -1,5 +1,6 @@
{
"dependencies": {
+ "frontend-js-components-web": "*",
"frontend-js-web": "*"
},
"main": "js/index.js",
@@ -10,5 +11,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "5.0.63"
+ "version": "5.0.64"
}
diff --git a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/src/main/resources/META-INF/resources/js/index.js b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/src/main/resources/META-INF/resources/js/index.js
index f24f18af4a22de..d7cb1a14992f25 100644
--- a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/src/main/resources/META-INF/resources/js/index.js
+++ b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/src/main/resources/META-INF/resources/js/index.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {delegate, openConfirmModal, unescapeHTML} from 'frontend-js-web';
+import {openConfirmModal} from 'frontend-js-components-web';
+import {delegate, unescapeHTML} from 'frontend-js-web';
const TPL_TAG_FORM =
'' +
diff --git a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/src/main/resources/META-INF/resources/tsconfig.json b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/src/main/resources/META-INF/resources/tsconfig.json
index 7f4699f6e9642d..458641ab477936 100644
--- a/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/src/main/resources/META-INF/resources/tsconfig.json
+++ b/modules/dxp/apps/portal-reports-engine-console/portal-reports-engine-console-web/src/main/resources/META-INF/resources/tsconfig.json
@@ -1,5 +1,5 @@
{
- "@generated": "79c243ae02879900e701a3f2fb1133bc1d37d2e0",
+ "@generated": "398fbc3760ea281a887863cbc2e4fa832b0e6018",
"@readonly": "** AUTO-GENERATED: DO NOT EDIT **",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
@@ -12,6 +12,9 @@
"module": "es6",
"moduleResolution": "node",
"paths": {
+ "frontend-js-components-web": [
+ "../../../../../../../../../apps/frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/index.ts"
+ ],
"frontend-js-web": [
"../../../../../../../../../apps/frontend-js/frontend-js-web/src/main/resources/META-INF/resources/index.d.ts"
]
@@ -32,6 +35,9 @@
"../../../../../../../../../global.d.ts"
],
"references": [
+ {
+ "path": "../../../../../../../../../apps/frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/tsconfig.json"
+ },
{
"path": "../../../../../../../../../apps/frontend-js/frontend-js-web/src/main/resources/META-INF/resources/tsconfig.json"
}
diff --git a/modules/dxp/apps/portal-rules-engine-drools/portal-rules-engine-drools/bnd.bnd b/modules/dxp/apps/portal-rules-engine-drools/portal-rules-engine-drools/bnd.bnd
index d3dc2111753308..64159008b33da2 100644
--- a/modules/dxp/apps/portal-rules-engine-drools/portal-rules-engine-drools/bnd.bnd
+++ b/modules/dxp/apps/portal-rules-engine-drools/portal-rules-engine-drools/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Rules Engine Drools
Bundle-SymbolicName: com.liferay.portal.rules.engine.drools
-Bundle-Version: 5.0.24
+Bundle-Version: 5.0.25
DynamicImport-Package: *
Import-Package:\
!com.sun.codemodel,\
diff --git a/modules/dxp/apps/portal-search-elasticsearch-monitoring/portal-search-elasticsearch-monitoring-web/bnd.bnd b/modules/dxp/apps/portal-search-elasticsearch-monitoring/portal-search-elasticsearch-monitoring-web/bnd.bnd
index ac931e657f1af4..050bd795ec087a 100644
--- a/modules/dxp/apps/portal-search-elasticsearch-monitoring/portal-search-elasticsearch-monitoring-web/bnd.bnd
+++ b/modules/dxp/apps/portal-search-elasticsearch-monitoring/portal-search-elasticsearch-monitoring-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Search Elasticsearch Monitoring Web
Bundle-SymbolicName: com.liferay.portal.search.elasticsearch.monitoring.web
-Bundle-Version: 2.0.26
+Bundle-Version: 2.0.27
Liferay-Enterprise-App: dxp.only=true;product.id=22b7e30f-34d4-4a63-9696-56987ad66e4e
Liferay-RTL-Support-Required: false
Web-ContextPath: /portal-search-elasticsearch-monitoring
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-search-similar-results/portal-search-similar-results-web/bnd.bnd b/modules/dxp/apps/portal-search-similar-results/portal-search-similar-results-web/bnd.bnd
index 0a41d056d8f051..d1b40397784cbe 100644
--- a/modules/dxp/apps/portal-search-similar-results/portal-search-similar-results-web/bnd.bnd
+++ b/modules/dxp/apps/portal-search-similar-results/portal-search-similar-results-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Portal Search Similar Results Web
Bundle-SymbolicName: com.liferay.portal.search.similar.results.web
-Bundle-Version: 3.0.55
+Bundle-Version: 3.0.56
Web-ContextPath: /portal-search-similar-results-web
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-search-similar-results/portal-search-similar-results-web/package.json b/modules/dxp/apps/portal-search-similar-results/portal-search-similar-results-web/package.json
index 3496066d2b74d8..c805b3509f365b 100644
--- a/modules/dxp/apps/portal-search-similar-results/portal-search-similar-results-web/package.json
+++ b/modules/dxp/apps/portal-search-similar-results/portal-search-similar-results-web/package.json
@@ -5,5 +5,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "3.0.55"
+ "version": "3.0.56"
}
diff --git a/modules/dxp/apps/portal-search-tuning/portal-search-tuning-rankings-web/bnd.bnd b/modules/dxp/apps/portal-search-tuning/portal-search-tuning-rankings-web/bnd.bnd
index 2db62aa5408312..b587f9a3c26497 100644
--- a/modules/dxp/apps/portal-search-tuning/portal-search-tuning-rankings-web/bnd.bnd
+++ b/modules/dxp/apps/portal-search-tuning/portal-search-tuning-rankings-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Portal Search Tuning Rankings Web
Bundle-SymbolicName: com.liferay.portal.search.tuning.rankings.web
-Bundle-Version: 3.0.100
+Bundle-Version: 3.0.101
Web-ContextPath: /portal-search-tuning-rankings-web
-includeresource: package.json
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-search-tuning/portal-search-tuning-rankings-web/package.json b/modules/dxp/apps/portal-search-tuning/portal-search-tuning-rankings-web/package.json
index c0ec6e6c55dfd9..d37f88034df2c2 100644
--- a/modules/dxp/apps/portal-search-tuning/portal-search-tuning-rankings-web/package.json
+++ b/modules/dxp/apps/portal-search-tuning/portal-search-tuning-rankings-web/package.json
@@ -46,5 +46,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "3.0.100"
+ "version": "3.0.101"
}
diff --git a/modules/dxp/apps/portal-search-tuning/portal-search-tuning-synonyms-web/bnd.bnd b/modules/dxp/apps/portal-search-tuning/portal-search-tuning-synonyms-web/bnd.bnd
index 77411edea9f32a..d400e2ec728c7c 100644
--- a/modules/dxp/apps/portal-search-tuning/portal-search-tuning-synonyms-web/bnd.bnd
+++ b/modules/dxp/apps/portal-search-tuning/portal-search-tuning-synonyms-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Portal Search Tuning Synonyms Web
Bundle-SymbolicName: com.liferay.portal.search.tuning.synonyms.web
-Bundle-Version: 3.0.77
+Bundle-Version: 3.0.78
Web-ContextPath: /portal-search-tuning-synonyms-web
-includeresource: package.json
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-search-tuning/portal-search-tuning-synonyms-web/package.json b/modules/dxp/apps/portal-search-tuning/portal-search-tuning-synonyms-web/package.json
index 93bfc01f3a67ed..1f62d3b736769f 100644
--- a/modules/dxp/apps/portal-search-tuning/portal-search-tuning-synonyms-web/package.json
+++ b/modules/dxp/apps/portal-search-tuning/portal-search-tuning-synonyms-web/package.json
@@ -19,5 +19,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "3.0.77"
+ "version": "3.0.78"
}
diff --git a/modules/dxp/apps/portal-search-tuning/portal-search-tuning-web/bnd.bnd b/modules/dxp/apps/portal-search-tuning/portal-search-tuning-web/bnd.bnd
index 34b4c88d9d3b73..61675901cc10b9 100644
--- a/modules/dxp/apps/portal-search-tuning/portal-search-tuning-web/bnd.bnd
+++ b/modules/dxp/apps/portal-search-tuning/portal-search-tuning-web/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Portal Search Tuning Web
Bundle-SymbolicName: com.liferay.portal.search.tuning.web
-Bundle-Version: 3.0.13
\ No newline at end of file
+Bundle-Version: 3.0.14
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-service/bnd.bnd b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-service/bnd.bnd
index 75b045727fed08..09f8b1ca6fcc38 100644
--- a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-service/bnd.bnd
+++ b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-service/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Workflow Kaleo Forms Service
Bundle-SymbolicName: com.liferay.portal.workflow.kaleo.forms.service
-Bundle-Version: 5.0.56
+Bundle-Version: 5.0.57
Import-Package:\
com.liferay.portal.workflow.kaleo.forms.util.comparator,\
\
diff --git a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/bnd.bnd b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/bnd.bnd
index f1d31e81b25bf0..e8d5c858fe116e 100644
--- a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/bnd.bnd
+++ b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Portal Workflow Kaleo Forms Web
Bundle-SymbolicName: com.liferay.portal.workflow.kaleo.forms.web
-Bundle-Version: 5.0.99
+Bundle-Version: 5.0.100
Web-ContextPath: /portal-workflow-kaleo-forms-web
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/package.json b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/package.json
index 160ded2005d289..23300b9616982d 100644
--- a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/package.json
+++ b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/package.json
@@ -1,5 +1,6 @@
{
"dependencies": {
+ "frontend-js-components-web": "*",
"frontend-js-web": "*"
},
"main": "js/index.js",
@@ -10,5 +11,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "5.0.99"
+ "version": "5.0.100"
}
diff --git a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsAdminManagementToolbarPropsTransformer.js b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsAdminManagementToolbarPropsTransformer.js
index 576d207ee634b0..017d6060951f0f 100644
--- a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsAdminManagementToolbarPropsTransformer.js
+++ b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsAdminManagementToolbarPropsTransformer.js
@@ -3,7 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {getCheckedCheckboxes, openConfirmModal} from 'frontend-js-web';
+import {openConfirmModal} from 'frontend-js-components-web';
+import {getCheckedCheckboxes} from 'frontend-js-web';
export default function propsTransformer({
additionalProps: {deleteKaleoProcessURL},
diff --git a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsTemplateSelector.js b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsTemplateSelector.js
index 7796c92f449428..a4dcc8f61345d4 100644
--- a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsTemplateSelector.js
+++ b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsTemplateSelector.js
@@ -3,12 +3,12 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
+import {openSelectionModal} from 'frontend-js-components-web';
import {
createRenderURL,
fetch,
navigate,
objectToFormData,
- openSelectionModal,
} from 'frontend-js-web';
export default function ({
diff --git a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsViewRecordsManagementToolbarPropsTransformer.js b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsViewRecordsManagementToolbarPropsTransformer.js
index 15a429237eed90..3b495befcb74a1 100644
--- a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsViewRecordsManagementToolbarPropsTransformer.js
+++ b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/js/KaleoFormsViewRecordsManagementToolbarPropsTransformer.js
@@ -3,11 +3,8 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {
- getCheckedCheckboxes,
- openConfirmModal,
- postForm,
-} from 'frontend-js-web';
+import {openConfirmModal} from 'frontend-js-components-web';
+import {getCheckedCheckboxes, postForm} from 'frontend-js-web';
export default function propsTransformer({
additionalProps: {deleteDDLRecordURL},
diff --git a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/tsconfig.json b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/tsconfig.json
index afc8b7ac776e1e..729fbae869e167 100644
--- a/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/tsconfig.json
+++ b/modules/dxp/apps/portal-workflow-kaleo-forms/portal-workflow-kaleo-forms-web/src/main/resources/META-INF/resources/tsconfig.json
@@ -1,5 +1,5 @@
{
- "@generated": "838552e7aa1907e2d496b06dd93c6a60a9ee8e05",
+ "@generated": "c93158fb39c1d268353cd42f7afc22331ac9bbee",
"@readonly": "** AUTO-GENERATED: DO NOT EDIT **",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
@@ -12,6 +12,9 @@
"module": "es6",
"moduleResolution": "node",
"paths": {
+ "frontend-js-components-web": [
+ "../../../../../../../../../apps/frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/index.ts"
+ ],
"frontend-js-web": [
"../../../../../../../../../apps/frontend-js/frontend-js-web/src/main/resources/META-INF/resources/index.d.ts"
]
@@ -32,6 +35,9 @@
"../../../../../../../../../global.d.ts"
],
"references": [
+ {
+ "path": "../../../../../../../../../apps/frontend-js/frontend-js-components-web/src/main/resources/META-INF/resources/tsconfig.json"
+ },
{
"path": "../../../../../../../../../apps/frontend-js/frontend-js-web/src/main/resources/META-INF/resources/tsconfig.json"
}
diff --git a/modules/dxp/apps/portal-workflow/portal-workflow-kaleo-designer-web/bnd.bnd b/modules/dxp/apps/portal-workflow/portal-workflow-kaleo-designer-web/bnd.bnd
index b0e655d3855e23..8b7b5f57fcebbd 100644
--- a/modules/dxp/apps/portal-workflow/portal-workflow-kaleo-designer-web/bnd.bnd
+++ b/modules/dxp/apps/portal-workflow/portal-workflow-kaleo-designer-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Workflow Kaleo Designer Web
Bundle-SymbolicName: com.liferay.portal.workflow.kaleo.designer.web
-Bundle-Version: 5.0.146
+Bundle-Version: 5.0.147
Export-Package: com.liferay.portal.workflow.kaleo.designer.web.constants
Liferay-JS-Config: /META-INF/resources/designer/js/legacy/config.js
Web-ContextPath: /portal-workflow-kaleo-designer-web
diff --git a/modules/dxp/apps/portal-workflow/portal-workflow-kaleo-designer-web/package.json b/modules/dxp/apps/portal-workflow/portal-workflow-kaleo-designer-web/package.json
index 21dac75cba8dd2..c37f42cf1f2b0d 100644
--- a/modules/dxp/apps/portal-workflow/portal-workflow-kaleo-designer-web/package.json
+++ b/modules/dxp/apps/portal-workflow/portal-workflow-kaleo-designer-web/package.json
@@ -45,5 +45,5 @@
"format": "node-scripts format",
"test": "node-scripts test"
},
- "version": "5.0.146"
+ "version": "5.0.147"
}
diff --git a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-api/bnd.bnd b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-api/bnd.bnd
index 40af5fc279f0b9..287ffbace213dd 100644
--- a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-api/bnd.bnd
+++ b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Workflow Metrics REST API
Bundle-SymbolicName: com.liferay.portal.workflow.metrics.rest.api
-Bundle-Version: 17.3.11
+Bundle-Version: 17.3.12
Export-Package:\
com.liferay.portal.workflow.metrics.rest.dto.v1_0,\
com.liferay.portal.workflow.metrics.rest.dto.v1_0.util,\
diff --git a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-client/bnd.bnd b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-client/bnd.bnd
index e77daa63906085..96a1e5a72e6938 100644
--- a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-client/bnd.bnd
+++ b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-client/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Portal Workflow Metrics REST Client
Bundle-SymbolicName: com.liferay.portal.workflow.metrics.rest.client
-Bundle-Version: 3.0.40
\ No newline at end of file
+Bundle-Version: 3.0.41
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-impl/bnd.bnd b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-impl/bnd.bnd
index 086046382af432..05ecad5f131631 100644
--- a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-impl/bnd.bnd
+++ b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-impl/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Portal Workflow Metrics REST Implementation
Bundle-SymbolicName: com.liferay.portal.workflow.metrics.rest.impl
-Bundle-Version: 3.0.99
+Bundle-Version: 3.0.100
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-spi/bnd.bnd b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-spi/bnd.bnd
index 4e2ce5a1dae6f0..ddf35bb81ff3e5 100644
--- a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-spi/bnd.bnd
+++ b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-spi/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Portal Workflow Metrics REST SPI
Bundle-SymbolicName: com.liferay.portal.workflow.metrics.rest.spi
-Bundle-Version: 4.0.10
+Bundle-Version: 4.0.11
Export-Package: com.liferay.portal.workflow.metrics.rest.spi.resource
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-service/bnd.bnd b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-service/bnd.bnd
index b0999c3d98597e..62ba08d0a1f076 100644
--- a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-service/bnd.bnd
+++ b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-service/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Portal Workflow Metrics Service
Bundle-SymbolicName: com.liferay.portal.workflow.metrics.service
-Bundle-Version: 3.0.82
+Bundle-Version: 3.0.83
Liferay-Require-SchemaVersion: 2.0.1
Liferay-Service: true
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/bnd.bnd b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/bnd.bnd
index cefa29052c71b0..241f1925402c8b 100644
--- a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/bnd.bnd
+++ b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Portal Workflow Metrics Web
Bundle-SymbolicName: com.liferay.portal.workflow.metrics.web
-Bundle-Version: 3.0.94
+Bundle-Version: 3.0.95
Web-ContextPath: /portal-workflow-metrics-web
\ No newline at end of file
diff --git a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/package.json b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/package.json
index 625b8f0de291e6..3765c53ca92aea 100644
--- a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/package.json
+++ b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/package.json
@@ -60,5 +60,5 @@
"format": "node-scripts format",
"test": "RTL_SKIP_AUTO_CLEANUP=true node-scripts test"
},
- "version": "3.0.94"
+ "version": "3.0.95"
}
diff --git a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/src/main/resources/META-INF/resources/js/shared/util/toast.es.js b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/src/main/resources/META-INF/resources/js/shared/util/toast.es.js
index 3f5429858027a3..f941c924abd2f8 100644
--- a/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/src/main/resources/META-INF/resources/js/shared/util/toast.es.js
+++ b/modules/dxp/apps/portal-workflow/portal-workflow-metrics-web/src/main/resources/META-INF/resources/js/shared/util/toast.es.js
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {openToast as liferayToast} from 'frontend-js-web';
+import {openToast as liferayToast} from 'frontend-js-components-web';
export function openErrorToast({message}) {
openToast(message, Liferay.Language.get('error'), 'danger');
diff --git a/modules/dxp/apps/portal/portal-dao-db/bnd.bnd b/modules/dxp/apps/portal/portal-dao-db/bnd.bnd
index b773b154b9e4cd..0907d105a2468e 100644
--- a/modules/dxp/apps/portal/portal-dao-db/bnd.bnd
+++ b/modules/dxp/apps/portal/portal-dao-db/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Portal DAO DB
Bundle-SymbolicName: com.liferay.portal.dao.db
-Bundle-Version: 5.0.36
\ No newline at end of file
+Bundle-Version: 5.0.37
\ No newline at end of file
diff --git a/modules/dxp/apps/saml/saml-admin-rest-api/bnd.bnd b/modules/dxp/apps/saml/saml-admin-rest-api/bnd.bnd
index f17e7d4e311ae4..978fb392c60536 100644
--- a/modules/dxp/apps/saml/saml-admin-rest-api/bnd.bnd
+++ b/modules/dxp/apps/saml/saml-admin-rest-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay SAML Admin REST API
Bundle-SymbolicName: com.liferay.saml.admin.rest.api
-Bundle-Version: 1.1.6
+Bundle-Version: 1.1.7
Export-Package:\
com.liferay.saml.admin.rest.dto.v1_0,\
com.liferay.saml.admin.rest.resource.v1_0
\ No newline at end of file
diff --git a/modules/dxp/apps/saml/saml-admin-rest-client/bnd.bnd b/modules/dxp/apps/saml/saml-admin-rest-client/bnd.bnd
index 433b60f18483b7..0c9104c628d55f 100644
--- a/modules/dxp/apps/saml/saml-admin-rest-client/bnd.bnd
+++ b/modules/dxp/apps/saml/saml-admin-rest-client/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay SAML Admin REST Client
Bundle-SymbolicName: com.liferay.saml.admin.rest.client
-Bundle-Version: 1.0.12
\ No newline at end of file
+Bundle-Version: 1.0.13
\ No newline at end of file
diff --git a/modules/dxp/apps/saml/saml-admin-rest-impl/bnd.bnd b/modules/dxp/apps/saml/saml-admin-rest-impl/bnd.bnd
index 9b5078d608d806..2996d311062afc 100644
--- a/modules/dxp/apps/saml/saml-admin-rest-impl/bnd.bnd
+++ b/modules/dxp/apps/saml/saml-admin-rest-impl/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay SAML Admin REST Implementation
Bundle-SymbolicName: com.liferay.saml.admin.rest.impl
-Bundle-Version: 1.0.23
\ No newline at end of file
+Bundle-Version: 1.0.24
\ No newline at end of file
diff --git a/modules/dxp/apps/saml/saml-api/bnd.bnd b/modules/dxp/apps/saml/saml-api/bnd.bnd
index f8f767685fcf8b..1bd6d40ad9f3f7 100644
--- a/modules/dxp/apps/saml/saml-api/bnd.bnd
+++ b/modules/dxp/apps/saml/saml-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay SAML API
Bundle-SymbolicName: com.liferay.saml.api
-Bundle-Version: 10.0.1
+Bundle-Version: 10.0.2
Export-Package:\
com.liferay.saml.constants,\
com.liferay.saml.helper,\
diff --git a/modules/dxp/apps/saml/saml-impl/bnd.bnd b/modules/dxp/apps/saml/saml-impl/bnd.bnd
index ea329abb6a8090..3c154fa6b4154e 100644
--- a/modules/dxp/apps/saml/saml-impl/bnd.bnd
+++ b/modules/dxp/apps/saml/saml-impl/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay SAML Implementation
Bundle-SymbolicName: com.liferay.saml.impl
-Bundle-Version: 5.0.53
+Bundle-Version: 5.0.54
Import-Package:\
!com.werken.*,\
\
diff --git a/modules/dxp/apps/saml/saml-opensaml-integration/bnd.bnd b/modules/dxp/apps/saml/saml-opensaml-integration/bnd.bnd
index 4116a9aca2a900..714be7e992b7bb 100644
--- a/modules/dxp/apps/saml/saml-opensaml-integration/bnd.bnd
+++ b/modules/dxp/apps/saml/saml-opensaml-integration/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay SAML OpenSAML Integration
Bundle-SymbolicName: com.liferay.saml.opensaml.integration
-Bundle-Version: 6.2.23
+Bundle-Version: 6.2.24
Export-Package:\
com.liferay.saml.opensaml.integration.field.expression.handler,\
com.liferay.saml.opensaml.integration.field.expression.handler.registry,\
diff --git a/modules/dxp/apps/saml/saml-persistence-service/bnd.bnd b/modules/dxp/apps/saml/saml-persistence-service/bnd.bnd
index 0b930c5bbb346e..c9cec58c5c2133 100644
--- a/modules/dxp/apps/saml/saml-persistence-service/bnd.bnd
+++ b/modules/dxp/apps/saml/saml-persistence-service/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay SAML Persistence Service
Bundle-SymbolicName: com.liferay.saml.persistence.service
-Bundle-Version: 5.0.62
+Bundle-Version: 5.0.63
Import-Package:\
!com.sun.*,\
\
diff --git a/modules/dxp/apps/saml/saml-web/bnd.bnd b/modules/dxp/apps/saml/saml-web/bnd.bnd
index b0cce2094de51d..045ee846e7514f 100644
--- a/modules/dxp/apps/saml/saml-web/bnd.bnd
+++ b/modules/dxp/apps/saml/saml-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay SAML Web
Bundle-SymbolicName: com.liferay.saml.web
-Bundle-Version: 5.0.80
+Bundle-Version: 5.0.81
Import-Package:\
javax.net.ssl;resolution:=optional,\
\
diff --git a/modules/dxp/apps/saml/saml-web/package.json b/modules/dxp/apps/saml/saml-web/package.json
index 0418fd3bb0bdfc..60ddb122e3e6f9 100644
--- a/modules/dxp/apps/saml/saml-web/package.json
+++ b/modules/dxp/apps/saml/saml-web/package.json
@@ -5,5 +5,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "5.0.80"
+ "version": "5.0.81"
}
diff --git a/modules/dxp/apps/scim/scim-configuration-web/bnd.bnd b/modules/dxp/apps/scim/scim-configuration-web/bnd.bnd
index f7d87a2ffc46da..8429b8244a61ae 100644
--- a/modules/dxp/apps/scim/scim-configuration-web/bnd.bnd
+++ b/modules/dxp/apps/scim/scim-configuration-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay SCIM Configuration Web
Bundle-SymbolicName: com.liferay.scim.configuration.web
-Bundle-Version: 1.0.15
+Bundle-Version: 1.0.16
Web-ContextPath: /scim-configuration-web
\ No newline at end of file
diff --git a/modules/dxp/apps/scim/scim-configuration-web/package.json b/modules/dxp/apps/scim/scim-configuration-web/package.json
index dca1b29aedb3de..d6d6c2b074836e 100644
--- a/modules/dxp/apps/scim/scim-configuration-web/package.json
+++ b/modules/dxp/apps/scim/scim-configuration-web/package.json
@@ -13,5 +13,5 @@
"checkFormat": "node-scripts format --check",
"format": "node-scripts format"
},
- "version": "1.0.15"
+ "version": "1.0.16"
}
diff --git a/modules/dxp/apps/scim/scim-rest-api/bnd.bnd b/modules/dxp/apps/scim/scim-rest-api/bnd.bnd
index ca4a466fe7efbd..72bda78cf03459 100644
--- a/modules/dxp/apps/scim/scim-rest-api/bnd.bnd
+++ b/modules/dxp/apps/scim/scim-rest-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay SCIM REST API
Bundle-SymbolicName: com.liferay.scim.rest.api
-Bundle-Version: 4.0.0
+Bundle-Version: 4.0.1
Export-Package:\
com.liferay.scim.rest.dto.v1_0,\
com.liferay.scim.rest.resource.v1_0,\
diff --git a/modules/dxp/apps/scim/scim-rest-client/bnd.bnd b/modules/dxp/apps/scim/scim-rest-client/bnd.bnd
index f6a65d0c10d1fd..c6c0bc385b7cbe 100644
--- a/modules/dxp/apps/scim/scim-rest-client/bnd.bnd
+++ b/modules/dxp/apps/scim/scim-rest-client/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay SCIM REST Client
Bundle-SymbolicName: com.liferay.scim.rest.client
-Bundle-Version: 1.0.11
\ No newline at end of file
+Bundle-Version: 1.0.12
\ No newline at end of file
diff --git a/modules/dxp/apps/scim/scim-rest-impl/bnd.bnd b/modules/dxp/apps/scim/scim-rest-impl/bnd.bnd
index b4d80b0b9bea73..a4ad8b8963609d 100644
--- a/modules/dxp/apps/scim/scim-rest-impl/bnd.bnd
+++ b/modules/dxp/apps/scim/scim-rest-impl/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay SCIM REST Implementation
Bundle-SymbolicName: com.liferay.scim.rest.impl
-Bundle-Version: 1.0.20
\ No newline at end of file
+Bundle-Version: 1.0.21
\ No newline at end of file
diff --git a/modules/dxp/apps/search-experiences/search-experiences-rest-api/bnd.bnd b/modules/dxp/apps/search-experiences/search-experiences-rest-api/bnd.bnd
index 30ed3b5e83696f..70180349bbec1a 100644
--- a/modules/dxp/apps/search-experiences/search-experiences-rest-api/bnd.bnd
+++ b/modules/dxp/apps/search-experiences/search-experiences-rest-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Search Experiences REST API
Bundle-SymbolicName: com.liferay.search.experiences.rest.api
-Bundle-Version: 13.1.1
+Bundle-Version: 13.1.2
Export-Package:\
com.liferay.search.experiences.rest.dto.v1_0,\
com.liferay.search.experiences.rest.dto.v1_0.util,\
diff --git a/modules/dxp/apps/search-experiences/search-experiences-rest-client/bnd.bnd b/modules/dxp/apps/search-experiences/search-experiences-rest-client/bnd.bnd
index d4bd71bf811d6c..637e536f491029 100644
--- a/modules/dxp/apps/search-experiences/search-experiences-rest-client/bnd.bnd
+++ b/modules/dxp/apps/search-experiences/search-experiences-rest-client/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Search Experiences REST Client
Bundle-SymbolicName: com.liferay.search.experiences.rest.client
-Bundle-Version: 3.0.33
+Bundle-Version: 3.0.34
Liferay-Enterprise-App: dxp.only=true;product.id=22b7e30f-34d4-4a63-9696-56987ad66e4e
\ No newline at end of file
diff --git a/modules/dxp/apps/search-experiences/search-experiences-rest-impl/bnd.bnd b/modules/dxp/apps/search-experiences/search-experiences-rest-impl/bnd.bnd
index db92f384b0f41d..1d8bc18dff61a5 100644
--- a/modules/dxp/apps/search-experiences/search-experiences-rest-impl/bnd.bnd
+++ b/modules/dxp/apps/search-experiences/search-experiences-rest-impl/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Search Experiences REST Implementation
Bundle-SymbolicName: com.liferay.search.experiences.rest.impl
-Bundle-Version: 3.0.71
+Bundle-Version: 3.0.72
Liferay-Enterprise-App: dxp.only=true;product.id=22b7e30f-34d4-4a63-9696-56987ad66e4e
\ No newline at end of file
diff --git a/modules/dxp/apps/search-experiences/search-experiences-service/bnd.bnd b/modules/dxp/apps/search-experiences/search-experiences-service/bnd.bnd
index 7f18092cd1381a..15dc92165523d1 100644
--- a/modules/dxp/apps/search-experiences/search-experiences-service/bnd.bnd
+++ b/modules/dxp/apps/search-experiences/search-experiences-service/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Search Experiences Service
Bundle-SymbolicName: com.liferay.search.experiences.service
-Bundle-Version: 3.0.78
+Bundle-Version: 3.0.79
Liferay-Enterprise-App: dxp.only=true;product.id=22b7e30f-34d4-4a63-9696-56987ad66e4e
Liferay-Require-SchemaVersion: 3.1.4
Liferay-Service: true
diff --git a/modules/dxp/apps/search-experiences/search-experiences-web/bnd.bnd b/modules/dxp/apps/search-experiences/search-experiences-web/bnd.bnd
index a64868801894c4..16df744940e55c 100644
--- a/modules/dxp/apps/search-experiences/search-experiences-web/bnd.bnd
+++ b/modules/dxp/apps/search-experiences/search-experiences-web/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Search Experiences Web
Bundle-SymbolicName: com.liferay.search.experiences.web
-Bundle-Version: 3.0.80
+Bundle-Version: 3.0.81
Liferay-Enterprise-App: dxp.only=true;product.id=22b7e30f-34d4-4a63-9696-56987ad66e4e
Web-ContextPath: /search-experiences-web
-dsannotations-options: inherit
\ No newline at end of file
diff --git a/modules/dxp/apps/search-experiences/search-experiences-web/package.json b/modules/dxp/apps/search-experiences/search-experiences-web/package.json
index cb4f8e4a5fe960..e4f2a46949a712 100644
--- a/modules/dxp/apps/search-experiences/search-experiences-web/package.json
+++ b/modules/dxp/apps/search-experiences/search-experiences-web/package.json
@@ -61,5 +61,5 @@
"format": "node-scripts format",
"test": "USE_REACT_16=true node-scripts test"
},
- "version": "3.0.80"
+ "version": "3.0.81"
}
diff --git a/modules/dxp/apps/segments/segments-asah-connector/bnd.bnd b/modules/dxp/apps/segments/segments-asah-connector/bnd.bnd
index e3fa0bc64ed698..fe68b6fbde468c 100644
--- a/modules/dxp/apps/segments/segments-asah-connector/bnd.bnd
+++ b/modules/dxp/apps/segments/segments-asah-connector/bnd.bnd
@@ -1,5 +1,5 @@
Bundle-Name: Liferay Segments Asah Connector
Bundle-SymbolicName: com.liferay.segments.asah.connector
-Bundle-Version: 3.0.64
+Bundle-Version: 3.0.65
Web-ContextPath: /segments-asah-connector
-fixupmessages "Classes found in the wrong directory"; restrict:=error; is:=ignore
\ No newline at end of file
diff --git a/modules/dxp/apps/segments/segments-asah-rest-api/bnd.bnd b/modules/dxp/apps/segments/segments-asah-rest-api/bnd.bnd
index 8c52d16d368b6c..5fe5c2d594a10a 100644
--- a/modules/dxp/apps/segments/segments-asah-rest-api/bnd.bnd
+++ b/modules/dxp/apps/segments/segments-asah-rest-api/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Segments Asah REST API
Bundle-SymbolicName: com.liferay.segments.asah.rest.api
-Bundle-Version: 10.2.6
+Bundle-Version: 10.2.7
Export-Package:\
com.liferay.segments.asah.rest.dto.v1_0,\
com.liferay.segments.asah.rest.resource.v1_0
\ No newline at end of file
diff --git a/modules/dxp/apps/segments/segments-asah-rest-client/bnd.bnd b/modules/dxp/apps/segments/segments-asah-rest-client/bnd.bnd
index 9a6d034ca49f76..fa75b45241f02e 100644
--- a/modules/dxp/apps/segments/segments-asah-rest-client/bnd.bnd
+++ b/modules/dxp/apps/segments/segments-asah-rest-client/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Segments Asah REST Client
Bundle-SymbolicName: com.liferay.segments.asah.rest.client
-Bundle-Version: 3.0.28
\ No newline at end of file
+Bundle-Version: 3.0.29
\ No newline at end of file
diff --git a/modules/dxp/apps/segments/segments-asah-rest-impl/bnd.bnd b/modules/dxp/apps/segments/segments-asah-rest-impl/bnd.bnd
index 2865f5890643ad..048e096ef6fb22 100644
--- a/modules/dxp/apps/segments/segments-asah-rest-impl/bnd.bnd
+++ b/modules/dxp/apps/segments/segments-asah-rest-impl/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Segments Asah REST Implementation
Bundle-SymbolicName: com.liferay.segments.asah.rest.impl
-Bundle-Version: 3.0.67
\ No newline at end of file
+Bundle-Version: 3.0.68
\ No newline at end of file
diff --git a/modules/dxp/apps/segments/segments-experiment-web/bnd.bnd b/modules/dxp/apps/segments/segments-experiment-web/bnd.bnd
index 52235326609fb4..f8603bc5f5dc3a 100644
--- a/modules/dxp/apps/segments/segments-experiment-web/bnd.bnd
+++ b/modules/dxp/apps/segments/segments-experiment-web/bnd.bnd
@@ -1,4 +1,4 @@
Bundle-Name: Liferay Segments Experiment Web
Bundle-SymbolicName: com.liferay.segments.experiment.web
-Bundle-Version: 3.0.102
+Bundle-Version: 3.0.103
Web-ContextPath: /segments-experiment-web
\ No newline at end of file
diff --git a/modules/dxp/apps/segments/segments-experiment-web/package.json b/modules/dxp/apps/segments/segments-experiment-web/package.json
index 9c26f51be46de7..2209d4a9218a65 100644
--- a/modules/dxp/apps/segments/segments-experiment-web/package.json
+++ b/modules/dxp/apps/segments/segments-experiment-web/package.json
@@ -37,5 +37,5 @@
"format": "node-scripts format",
"test": "USE_REACT_16=true node-scripts test"
},
- "version": "3.0.102"
+ "version": "3.0.103"
}
diff --git a/modules/dxp/apps/sharepoint-rest/sharepoint-rest-repository/bnd.bnd b/modules/dxp/apps/sharepoint-rest/sharepoint-rest-repository/bnd.bnd
index f93c6e83d18e62..51b03437028e22 100644
--- a/modules/dxp/apps/sharepoint-rest/sharepoint-rest-repository/bnd.bnd
+++ b/modules/dxp/apps/sharepoint-rest/sharepoint-rest-repository/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Sharepoint REST Repository
Bundle-SymbolicName: com.liferay.sharepoint.rest.repository
-Bundle-Version: 5.0.33
+Bundle-Version: 5.0.34
Import-Package:\
!com.mashape.unirest.*,\
\
diff --git a/modules/dxp/apps/sharepoint-soap/sharepoint-soap-repository/bnd.bnd b/modules/dxp/apps/sharepoint-soap/sharepoint-soap-repository/bnd.bnd
index 263ddd27d833cd..7b390fcfdbeb0e 100644
--- a/modules/dxp/apps/sharepoint-soap/sharepoint-soap-repository/bnd.bnd
+++ b/modules/dxp/apps/sharepoint-soap/sharepoint-soap-repository/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: Liferay Sharepoint SOAP Repository
Bundle-SymbolicName: com.liferay.sharepoint.soap.repository
-Bundle-Version: 5.0.23
+Bundle-Version: 5.0.24
Import-Package:\
!com.ibm.wsdl.util.xml.*,\
\
diff --git a/modules/modules.properties b/modules/modules.properties
index 852a2730cf0dba..bbd6c32eee3133 100644
--- a/modules/modules.properties
+++ b/modules/modules.properties
@@ -272,9 +272,9 @@ bundle.symbolic.name[user-associated-data-web]=com.liferay.user.associated.data.
bundle.symbolic.name[user-groups-admin-web]=com.liferay.user.groups.admin.web
bundle.symbolic.name[users-admin-web]=com.liferay.users.admin.web
bundle.symbolic.name[wiki-web]=com.liferay.wiki.web
-bundle.version[com.liferay.accessibility.menu.web]=1.0.26
+bundle.version[com.liferay.accessibility.menu.web]=1.0.27
bundle.version[com.liferay.accessibility.settings.state.web]=1.0.13
-bundle.version[com.liferay.account.admin.web]=2.0.136
+bundle.version[com.liferay.account.admin.web]=2.0.137
bundle.version[com.liferay.account.api]=28.0.1
bundle.version[com.liferay.account.service]=2.0.137
bundle.version[com.liferay.account.test]=1.0.0
@@ -315,14 +315,14 @@ bundle.version[com.liferay.adaptive.media.journal.web.test]=1.0.0
bundle.version[com.liferay.adaptive.media.journal.web]=5.0.19
bundle.version[com.liferay.adaptive.media.test.util]=4.0.8
bundle.version[com.liferay.adaptive.media.upload]=4.0.13
-bundle.version[com.liferay.adaptive.media.web]=5.0.92
+bundle.version[com.liferay.adaptive.media.web]=5.0.93
bundle.version[com.liferay.address.impl]=1.0.31
bundle.version[com.liferay.address.test]=1.0.0
bundle.version[com.liferay.address.web]=1.0.35
bundle.version[com.liferay.ai.creator.openai.api]=3.0.1
bundle.version[com.liferay.ai.creator.openai.impl]=1.0.7
bundle.version[com.liferay.ai.creator.openai.test]=1.0.0
-bundle.version[com.liferay.ai.creator.openai.web]=1.0.33
+bundle.version[com.liferay.ai.creator.openai.web]=1.0.34
bundle.version[com.liferay.akismet.api]=1.0.0
bundle.version[com.liferay.akismet.service]=1.0.0
bundle.version[com.liferay.akismet.web]=1.0.0
@@ -348,24 +348,24 @@ bundle.version[com.liferay.analytics.reports.document.library.test]=1.0.0
bundle.version[com.liferay.analytics.reports.impl]=2.0.10
bundle.version[com.liferay.analytics.reports.journal.impl]=2.0.16
bundle.version[com.liferay.analytics.reports.journal.test]=1.0.0
-bundle.version[com.liferay.analytics.reports.js.components.web]=1.0.7
+bundle.version[com.liferay.analytics.reports.js.components.web]=1.0.8
bundle.version[com.liferay.analytics.reports.layout.display.page.impl]=1.0.21
bundle.version[com.liferay.analytics.reports.layout.display.page.test]=1.0.0
bundle.version[com.liferay.analytics.reports.layout.impl]=1.0.18
bundle.version[com.liferay.analytics.reports.layout.test]=1.0.0
-bundle.version[com.liferay.analytics.reports.rest.api]=2.1.1
-bundle.version[com.liferay.analytics.reports.rest.client]=1.2.1
-bundle.version[com.liferay.analytics.reports.rest.impl]=1.0.4
+bundle.version[com.liferay.analytics.reports.rest.api]=2.1.2
+bundle.version[com.liferay.analytics.reports.rest.client]=1.2.2
+bundle.version[com.liferay.analytics.reports.rest.impl]=1.0.5
bundle.version[com.liferay.analytics.reports.rest.test]=1.0.0
bundle.version[com.liferay.analytics.reports.test]=1.0.0
-bundle.version[com.liferay.analytics.reports.web]=2.0.106
+bundle.version[com.liferay.analytics.reports.web]=2.0.107
bundle.version[com.liferay.analytics.settings.api]=11.3.1
bundle.version[com.liferay.analytics.settings.impl]=9.0.14
bundle.version[com.liferay.analytics.settings.rest.api]=6.0.2
bundle.version[com.liferay.analytics.settings.rest.client]=1.0.29
bundle.version[com.liferay.analytics.settings.rest.impl]=1.0.53
bundle.version[com.liferay.analytics.settings.rest.test]=1.0.0
-bundle.version[com.liferay.analytics.settings.web]=5.0.93
+bundle.version[com.liferay.analytics.settings.web]=5.0.94
bundle.version[com.liferay.analytics.web]=4.0.27
bundle.version[com.liferay.announcements.api]=5.0.6
bundle.version[com.liferay.announcements.test]=1.0.0
@@ -374,10 +374,10 @@ bundle.version[com.liferay.announcements.uad]=6.0.16
bundle.version[com.liferay.announcements.web]=6.0.72
bundle.version[com.liferay.antivirus.async.store.test]=1.0.0
bundle.version[com.liferay.antivirus.async.store]=5.0.1
-bundle.version[com.liferay.antivirus.clamd.scanner]=5.0.11
+bundle.version[com.liferay.antivirus.clamd.scanner]=5.0.12
bundle.version[com.liferay.application.list.api]=13.1.4
bundle.version[com.liferay.application.list.my.account.permissions]=5.0.13
-bundle.version[com.liferay.application.list.taglib]=7.0.22
+bundle.version[com.liferay.application.list.taglib]=7.0.23
bundle.version[com.liferay.application.list.test]=1.0.0
bundle.version[com.liferay.application.list.user.personal.site.permissions]=6.0.16
bundle.version[com.liferay.arquillian.extension.junit.bridge.connector]=1.0.2
@@ -401,7 +401,7 @@ bundle.version[com.liferay.asset.categories.admin.web.api]=2.0.13
bundle.version[com.liferay.asset.categories.admin.web]=5.0.113
bundle.version[com.liferay.asset.categories.api]=3.1.7
bundle.version[com.liferay.asset.categories.item.selector.api]=1.0.15
-bundle.version[com.liferay.asset.categories.item.selector.web]=1.0.74
+bundle.version[com.liferay.asset.categories.item.selector.web]=1.0.75
bundle.version[com.liferay.asset.categories.navigation.api]=5.0.13
bundle.version[com.liferay.asset.categories.navigation.web]=6.0.44
bundle.version[com.liferay.asset.categories.service]=5.0.59
@@ -430,14 +430,14 @@ bundle.version[com.liferay.asset.list.api]=18.1.4
bundle.version[com.liferay.asset.list.item.selector.web]=2.0.40
bundle.version[com.liferay.asset.list.service]=3.0.90
bundle.version[com.liferay.asset.list.test]=1.0.0
-bundle.version[com.liferay.asset.list.web]=3.0.127
+bundle.version[com.liferay.asset.list.web]=3.0.128
bundle.version[com.liferay.asset.publisher.api]=6.3.3
bundle.version[com.liferay.asset.publisher.layout.prototype]=5.0.26
bundle.version[com.liferay.asset.publisher.test]=1.0.0
-bundle.version[com.liferay.asset.publisher.web]=5.0.149
+bundle.version[com.liferay.asset.publisher.web]=5.0.150
bundle.version[com.liferay.asset.service]=5.0.70
bundle.version[com.liferay.asset.taglib.test]=1.0.0
-bundle.version[com.liferay.asset.taglib]=11.1.8
+bundle.version[com.liferay.asset.taglib]=11.1.9
bundle.version[com.liferay.asset.tags.admin.web]=5.0.55
bundle.version[com.liferay.asset.tags.api]=5.0.14
bundle.version[com.liferay.asset.tags.compiler.web]=6.0.25
@@ -453,17 +453,17 @@ bundle.version[com.liferay.asset.test]=1.0.0
bundle.version[com.liferay.asset.vocabulary.item.selector.api]=1.0.11
bundle.version[com.liferay.asset.vocabulary.item.selector.web]=1.0.17
bundle.version[com.liferay.asset.web]=6.0.21
-bundle.version[com.liferay.batch.engine.api]=28.0.1
-bundle.version[com.liferay.batch.engine.service]=4.0.118
+bundle.version[com.liferay.batch.engine.api]=29.0.1
+bundle.version[com.liferay.batch.engine.service]=4.0.119
bundle.version[com.liferay.batch.engine.test]=1.0.0
bundle.version[com.liferay.batch.planner.api]=15.0.1
bundle.version[com.liferay.batch.planner.rest.api]=5.2.2
bundle.version[com.liferay.batch.planner.rest.client]=1.0.36
-bundle.version[com.liferay.batch.planner.rest.impl]=1.0.56
+bundle.version[com.liferay.batch.planner.rest.impl]=1.0.57
bundle.version[com.liferay.batch.planner.rest.test]=1.0.0
bundle.version[com.liferay.batch.planner.service]=1.0.65
bundle.version[com.liferay.batch.planner.test]=1.0.0
-bundle.version[com.liferay.batch.planner.web]=1.0.105
+bundle.version[com.liferay.batch.planner.web]=1.0.106
bundle.version[com.liferay.bean.portlet.api]=4.0.8
bundle.version[com.liferay.bean.portlet.cdi.extension]=4.0.22
bundle.version[com.liferay.bean.portlet.extension.api]=2.0.9
@@ -487,7 +487,7 @@ bundle.version[com.liferay.blogs.test]=1.0.0
bundle.version[com.liferay.blogs.uad.test]=1.0.0
bundle.version[com.liferay.blogs.uad]=6.0.15
bundle.version[com.liferay.blogs.web.test]=1.0.0
-bundle.version[com.liferay.blogs.web]=6.0.138
+bundle.version[com.liferay.blogs.web]=6.0.139
bundle.version[com.liferay.bookmarks.api]=13.0.1
bundle.version[com.liferay.bookmarks.service]=5.0.64
bundle.version[com.liferay.bookmarks.test.util]=5.0.6
@@ -529,7 +529,7 @@ bundle.version[com.liferay.change.tracking.store.service]=2.0.42
bundle.version[com.liferay.change.tracking.store.test]=1.0.0
bundle.version[com.liferay.change.tracking.test.util]=2.1.1
bundle.version[com.liferay.change.tracking.test]=1.0.0
-bundle.version[com.liferay.change.tracking.web]=2.0.143
+bundle.version[com.liferay.change.tracking.web]=2.0.144
bundle.version[com.liferay.changeset.api]=6.0.2
bundle.version[com.liferay.changeset.service]=4.0.34
bundle.version[com.liferay.changeset.test]=1.0.0
@@ -545,7 +545,7 @@ bundle.version[com.liferay.client.extension.type.item.selector.web]=1.0.16
bundle.version[com.liferay.client.extension.uad]=1.0.7
bundle.version[com.liferay.client.extension.util.spring.boot2]=1.0.1
bundle.version[com.liferay.client.extension.util.spring.boot3]=1.0.1
-bundle.version[com.liferay.client.extension.web]=1.0.77
+bundle.version[com.liferay.client.extension.web]=1.0.78
bundle.version[com.liferay.comment.analytics]=4.0.11
bundle.version[com.liferay.comment.api]=7.1.1
bundle.version[com.liferay.comment.demo.data.creator.api]=5.0.6
@@ -554,7 +554,7 @@ bundle.version[com.liferay.comment.editor.configuration]=5.0.9
bundle.version[com.liferay.comment.page.comments.web]=5.0.21
bundle.version[com.liferay.comment.ratings.definition]=6.0.7
bundle.version[com.liferay.comment.sanitizer]=6.0.15
-bundle.version[com.liferay.comment.taglib]=4.1.7
+bundle.version[com.liferay.comment.taglib]=4.1.8
bundle.version[com.liferay.comment.test]=1.0.0
bundle.version[com.liferay.comment.web.test]=1.0.0
bundle.version[com.liferay.comment.web]=6.1.11
@@ -565,7 +565,7 @@ bundle.version[com.liferay.commerce.account.test]=1.0.0
bundle.version[com.liferay.commerce.account.web]=4.0.51
bundle.version[com.liferay.commerce.address.content.web]=4.0.40
bundle.version[com.liferay.commerce.address.web]=4.0.61
-bundle.version[com.liferay.commerce.api]=94.1.2
+bundle.version[com.liferay.commerce.api]=95.0.1
bundle.version[com.liferay.commerce.application.list]=6.1.2
bundle.version[com.liferay.commerce.availability.estimate.web]=4.0.45
bundle.version[com.liferay.commerce.avalara.connector.api]=1.0.0
@@ -574,19 +574,19 @@ bundle.version[com.liferay.commerce.avalara.connector]=1.0.0
bundle.version[com.liferay.commerce.avalara.dispatch.web]=1.0.0
bundle.version[com.liferay.commerce.avalara.tax.engine.fixed.web]=1.0.0
bundle.version[com.liferay.commerce.avalara.tax.engine.fixed]=1.0.0
-bundle.version[com.liferay.commerce.cart.content.web]=4.0.70
+bundle.version[com.liferay.commerce.cart.content.web]=4.0.71
bundle.version[com.liferay.commerce.cart.taglib]=5.0.41
bundle.version[com.liferay.commerce.catalog.web]=4.0.61
-bundle.version[com.liferay.commerce.channel.web]=4.0.90
+bundle.version[com.liferay.commerce.channel.web]=4.0.91
bundle.version[com.liferay.commerce.checkout.web]=5.0.103
-bundle.version[com.liferay.commerce.client.extension.web]=1.0.11
+bundle.version[com.liferay.commerce.client.extension.web]=1.0.12
bundle.version[com.liferay.commerce.currency.api]=19.0.2
bundle.version[com.liferay.commerce.currency.service]=4.0.57
bundle.version[com.liferay.commerce.currency.test.util]=5.0.10
bundle.version[com.liferay.commerce.currency.test]=1.0.0
bundle.version[com.liferay.commerce.currency.web]=4.0.58
bundle.version[com.liferay.commerce.dashboard.test]=1.0.0
-bundle.version[com.liferay.commerce.dashboard.web]=4.0.53
+bundle.version[com.liferay.commerce.dashboard.web]=4.0.54
bundle.version[com.liferay.commerce.discount.api]=23.1.2
bundle.version[com.liferay.commerce.discount.content.web]=4.0.23
bundle.version[com.liferay.commerce.discount.service]=4.0.86
@@ -596,8 +596,8 @@ bundle.version[com.liferay.commerce.fragment.collection.contributor.account]=1.0
bundle.version[com.liferay.commerce.fragment.collection.contributor.cart]=1.0.4
bundle.version[com.liferay.commerce.frontend.api]=20.0.2
bundle.version[com.liferay.commerce.frontend.impl]=4.0.66
-bundle.version[com.liferay.commerce.frontend.js]=4.0.129
-bundle.version[com.liferay.commerce.frontend.taglib]=23.2.12
+bundle.version[com.liferay.commerce.frontend.js]=4.0.130
+bundle.version[com.liferay.commerce.frontend.taglib]=23.2.13
bundle.version[com.liferay.commerce.geocoder.bing]=4.0.16
bundle.version[com.liferay.commerce.google.merchant]=4.0.33
bundle.version[com.liferay.commerce.health.status.web]=4.0.45
@@ -609,12 +609,12 @@ bundle.version[com.liferay.commerce.inventory.test]=1.0.0
bundle.version[com.liferay.commerce.inventory.web]=4.0.57
bundle.version[com.liferay.commerce.item.selector.api]=6.0.1
bundle.version[com.liferay.commerce.item.selector.web]=4.0.31
-bundle.version[com.liferay.commerce.machine.learning.api]=7.2.6
-bundle.version[com.liferay.commerce.machine.learning.forecast.alert.api]=9.0.1
-bundle.version[com.liferay.commerce.machine.learning.forecast.alert.service]=5.0.40
+bundle.version[com.liferay.commerce.machine.learning.api]=7.2.7
+bundle.version[com.liferay.commerce.machine.learning.forecast.alert.api]=9.0.2
+bundle.version[com.liferay.commerce.machine.learning.forecast.alert.service]=5.0.41
bundle.version[com.liferay.commerce.machine.learning.forecast.alert.test]=1.0.0
-bundle.version[com.liferay.commerce.machine.learning.forecast.alert.web]=5.0.21
-bundle.version[com.liferay.commerce.machine.learning.impl]=5.0.55
+bundle.version[com.liferay.commerce.machine.learning.forecast.alert.web]=5.0.22
+bundle.version[com.liferay.commerce.machine.learning.impl]=5.0.56
bundle.version[com.liferay.commerce.machine.learning.test]=1.0.0
bundle.version[com.liferay.commerce.media.api]=7.0.2
bundle.version[com.liferay.commerce.media.impl]=4.0.31
@@ -624,15 +624,15 @@ bundle.version[com.liferay.commerce.notification.service]=4.0.69
bundle.version[com.liferay.commerce.notification.test.util]=4.1.1
bundle.version[com.liferay.commerce.notification.test]=1.0.0
bundle.version[com.liferay.commerce.notification.web]=4.0.39
-bundle.version[com.liferay.commerce.order.content.web]=4.0.136
+bundle.version[com.liferay.commerce.order.content.web]=4.0.137
bundle.version[com.liferay.commerce.order.rule.api]=10.0.2
bundle.version[com.liferay.commerce.order.rule.service]=1.0.64
bundle.version[com.liferay.commerce.order.rule.test]=1.0.0
bundle.version[com.liferay.commerce.order.rule.web]=1.0.47
bundle.version[com.liferay.commerce.order.web]=5.0.121
-bundle.version[com.liferay.commerce.organization.api]=6.2.1
+bundle.version[com.liferay.commerce.organization.api]=6.2.2
bundle.version[com.liferay.commerce.organization.test]=1.0.0
-bundle.version[com.liferay.commerce.organization.web]=5.0.78
+bundle.version[com.liferay.commerce.organization.web]=5.0.79
bundle.version[com.liferay.commerce.payment.api]=19.3.2
bundle.version[com.liferay.commerce.payment.method.authorize.net]=4.0.37
bundle.version[com.liferay.commerce.payment.method.mercanet]=4.0.42
@@ -648,20 +648,20 @@ bundle.version[com.liferay.commerce.price.list.test]=1.0.0
bundle.version[com.liferay.commerce.pricing.api]=17.0.2
bundle.version[com.liferay.commerce.pricing.service]=4.0.71
bundle.version[com.liferay.commerce.pricing.test]=1.0.0
-bundle.version[com.liferay.commerce.pricing.web]=4.0.113
+bundle.version[com.liferay.commerce.pricing.web]=4.0.114
bundle.version[com.liferay.commerce.product.api]=88.2.1
bundle.version[com.liferay.commerce.product.asset.categories.navigation.web]=4.0.37
bundle.version[com.liferay.commerce.product.asset.categories.web]=4.0.67
bundle.version[com.liferay.commerce.product.content.api]=13.0.2
bundle.version[com.liferay.commerce.product.content.category.web]=4.0.31
bundle.version[com.liferay.commerce.product.content.search.web]=4.0.80
-bundle.version[com.liferay.commerce.product.content.web]=4.0.132
-bundle.version[com.liferay.commerce.product.definitions.web]=7.0.151
+bundle.version[com.liferay.commerce.product.content.web]=4.0.133
+bundle.version[com.liferay.commerce.product.definitions.web]=7.0.152
bundle.version[com.liferay.commerce.product.item.selector.api]=5.0.1
bundle.version[com.liferay.commerce.product.item.selector.web]=4.0.44
bundle.version[com.liferay.commerce.product.measurement.unit.web]=4.0.49
-bundle.version[com.liferay.commerce.product.options.web]=4.0.84
-bundle.version[com.liferay.commerce.product.service]=6.0.156
+bundle.version[com.liferay.commerce.product.options.web]=4.0.85
+bundle.version[com.liferay.commerce.product.service]=6.0.157
bundle.version[com.liferay.commerce.product.subscription.type.web]=4.0.23
bundle.version[com.liferay.commerce.product.taglib]=5.0.3
bundle.version[com.liferay.commerce.product.tax.category.web]=4.0.49
@@ -681,18 +681,18 @@ bundle.version[com.liferay.commerce.product.type.virtual.service]=4.0.57
bundle.version[com.liferay.commerce.product.type.virtual.test.util]=5.0.1
bundle.version[com.liferay.commerce.product.type.virtual.test]=1.0.0
bundle.version[com.liferay.commerce.product.type.virtual.web]=4.0.55
-bundle.version[com.liferay.commerce.punchout.api]=5.0.14
-bundle.version[com.liferay.commerce.punchout.oauth2.provider.api]=5.0.10
-bundle.version[com.liferay.commerce.punchout.oauth2.provider.rest]=4.0.17
-bundle.version[com.liferay.commerce.punchout.portal.security.auto.login]=4.0.32
-bundle.version[com.liferay.commerce.punchout.service]=4.0.24
-bundle.version[com.liferay.commerce.punchout.web]=4.0.27
+bundle.version[com.liferay.commerce.punchout.api]=5.0.15
+bundle.version[com.liferay.commerce.punchout.oauth2.provider.api]=5.0.11
+bundle.version[com.liferay.commerce.punchout.oauth2.provider.rest]=4.0.18
+bundle.version[com.liferay.commerce.punchout.portal.security.auto.login]=4.0.33
+bundle.version[com.liferay.commerce.punchout.service]=4.0.25
+bundle.version[com.liferay.commerce.punchout.web]=4.0.28
bundle.version[com.liferay.commerce.qualifier.api]=1.0.0
bundle.version[com.liferay.commerce.qualifier.service]=1.0.0
bundle.version[com.liferay.commerce.qualifier.test]=1.0.0
bundle.version[com.liferay.commerce.report.api]=2.1.5
bundle.version[com.liferay.commerce.report.impl]=1.0.27
-bundle.version[com.liferay.commerce.service]=11.0.194
+bundle.version[com.liferay.commerce.service]=11.0.195
bundle.version[com.liferay.commerce.shipment.content.web]=4.0.30
bundle.version[com.liferay.commerce.shipment.web]=4.0.75
bundle.version[com.liferay.commerce.shipping.engine.fixed.api]=13.1.2
@@ -706,12 +706,12 @@ bundle.version[com.liferay.commerce.shipping.web]=6.0.37
bundle.version[com.liferay.commerce.shop.by.diagram.api]=9.0.2
bundle.version[com.liferay.commerce.shop.by.diagram.service]=1.0.51
bundle.version[com.liferay.commerce.shop.by.diagram.test]=1.0.0
-bundle.version[com.liferay.commerce.shop.by.diagram.web]=1.0.102
+bundle.version[com.liferay.commerce.shop.by.diagram.web]=1.0.103
bundle.version[com.liferay.commerce.site.initializer.extender]=1.0.4
bundle.version[com.liferay.commerce.site.initializer]=1.0.24
bundle.version[com.liferay.commerce.subscription.web]=4.0.59
bundle.version[com.liferay.commerce.taglib]=7.0.8
-bundle.version[com.liferay.commerce.talend.job.deployer.api]=4.0.9
+bundle.version[com.liferay.commerce.talend.job.deployer.api]=4.0.10
bundle.version[com.liferay.commerce.tax.api]=8.0.2
bundle.version[com.liferay.commerce.tax.engine.fixed.api]=9.0.2
bundle.version[com.liferay.commerce.tax.engine.fixed.service]=4.0.47
@@ -728,7 +728,7 @@ bundle.version[com.liferay.commerce.term.web]=1.0.52
bundle.version[com.liferay.commerce.test.util]=27.1.1
bundle.version[com.liferay.commerce.test]=1.0.0
bundle.version[com.liferay.commerce.theme.minium.api]=5.1.9
-bundle.version[com.liferay.commerce.theme.minium.full.site.initializer]=4.0.28
+bundle.version[com.liferay.commerce.theme.minium.full.site.initializer]=4.0.29
bundle.version[com.liferay.commerce.theme.minium.impl]=5.0.30
bundle.version[com.liferay.commerce.theme.minium.site.initializer]=5.0.56
bundle.version[com.liferay.commerce.theme.speedwell.site.initializer]=4.0.40
@@ -741,7 +741,7 @@ bundle.version[com.liferay.company.sample.data.generation.test]=1.0.0
bundle.version[com.liferay.company.test]=1.0.0
bundle.version[com.liferay.configuration.admin.api]=4.4.1
bundle.version[com.liferay.configuration.admin.test]=1.0.0
-bundle.version[com.liferay.configuration.admin.web]=5.0.93
+bundle.version[com.liferay.configuration.admin.web]=5.0.94
bundle.version[com.liferay.connected.app.api]=3.0.6
bundle.version[com.liferay.connected.app.web]=3.0.20
bundle.version[com.liferay.contacts.api]=8.0.2
@@ -758,7 +758,7 @@ bundle.version[com.liferay.content.dashboard.document.library.test]=1.0.0
bundle.version[com.liferay.content.dashboard.journal.impl]=2.0.40
bundle.version[com.liferay.content.dashboard.journal.test]=1.0.0
bundle.version[com.liferay.content.dashboard.test]=1.0.0
-bundle.version[com.liferay.content.dashboard.web]=2.0.139
+bundle.version[com.liferay.content.dashboard.web]=2.0.140
bundle.version[com.liferay.cookies.api]=1.2.2
bundle.version[com.liferay.cookies.banner.web]=1.0.27
bundle.version[com.liferay.cookies.impl]=6.0.14
@@ -770,14 +770,14 @@ bundle.version[com.liferay.css.builder]=3.1.7
bundle.version[com.liferay.data.cleanup.test]=1.0.0
bundle.version[com.liferay.data.cleanup]=2.0.45
bundle.version[com.liferay.data.engine.api]=8.2.1
-bundle.version[com.liferay.data.engine.js.components.web]=1.0.147
+bundle.version[com.liferay.data.engine.js.components.web]=1.0.148
bundle.version[com.liferay.data.engine.rest.api]=31.3.2
bundle.version[com.liferay.data.engine.rest.client]=3.0.35
bundle.version[com.liferay.data.engine.rest.impl]=3.0.123
bundle.version[com.liferay.data.engine.rest.test.util]=2.0.2
bundle.version[com.liferay.data.engine.rest.test]=1.0.0
bundle.version[com.liferay.data.engine.service]=3.0.60
-bundle.version[com.liferay.data.engine.taglib]=4.1.1
+bundle.version[com.liferay.data.engine.taglib]=4.1.2
bundle.version[com.liferay.data.engine.test]=1.0.0
bundle.version[com.liferay.data.guard.connector]=1.0.0
bundle.version[com.liferay.dependency.manager.integrity.test]=1.0.0
@@ -785,7 +785,7 @@ bundle.version[com.liferay.deployment.helper]=1.0.5
bundle.version[com.liferay.depot.api]=7.1.1
bundle.version[com.liferay.depot.service]=3.0.68
bundle.version[com.liferay.depot.test]=1.0.0
-bundle.version[com.liferay.depot.web]=2.0.119
+bundle.version[com.liferay.depot.web]=2.0.120
bundle.version[com.liferay.diff.api]=1.0.3
bundle.version[com.liferay.diff.impl]=1.0.10
bundle.version[com.liferay.digital.signature.api]=4.0.1
@@ -795,7 +795,7 @@ bundle.version[com.liferay.digital.signature.rest.client]=1.0.30
bundle.version[com.liferay.digital.signature.rest.impl]=1.0.60
bundle.version[com.liferay.digital.signature.rest.test]=1.0.0
bundle.version[com.liferay.digital.signature.test]=1.0.0
-bundle.version[com.liferay.digital.signature.web]=1.0.79
+bundle.version[com.liferay.digital.signature.web]=1.0.80
bundle.version[com.liferay.dispatch.api]=19.1.2
bundle.version[com.liferay.dispatch.executor.sample]=1.0.15
bundle.version[com.liferay.dispatch.rest.api]=1.2.7
@@ -830,7 +830,7 @@ bundle.version[com.liferay.document.library.opener.api]=5.0.2
bundle.version[com.liferay.document.library.opener.google.drive.test]=1.0.0
bundle.version[com.liferay.document.library.opener.google.drive.web]=3.0.56
bundle.version[com.liferay.document.library.opener.onedrive.test]=1.0.0
-bundle.version[com.liferay.document.library.opener.onedrive.web]=3.0.67
+bundle.version[com.liferay.document.library.opener.onedrive.web]=3.0.68
bundle.version[com.liferay.document.library.opener.service]=3.0.36
bundle.version[com.liferay.document.library.opener.test]=1.0.0
bundle.version[com.liferay.document.library.opener.uad.test]=1.0.0
@@ -839,8 +839,8 @@ bundle.version[com.liferay.document.library.preview.api]=3.0.4
bundle.version[com.liferay.document.library.preview.audio.test]=1.0.0
bundle.version[com.liferay.document.library.preview.audio]=3.0.34
bundle.version[com.liferay.document.library.preview.css]=1.0.25
-bundle.version[com.liferay.document.library.preview.document]=3.0.38
-bundle.version[com.liferay.document.library.preview.image]=3.0.40
+bundle.version[com.liferay.document.library.preview.document]=3.0.39
+bundle.version[com.liferay.document.library.preview.image]=3.0.41
bundle.version[com.liferay.document.library.preview.pdf]=1.0.22
bundle.version[com.liferay.document.library.preview.video]=3.0.7
bundle.version[com.liferay.document.library.repository.authorization.api]=5.1.7
@@ -863,18 +863,18 @@ bundle.version[com.liferay.document.library.test]=1.0.0
bundle.version[com.liferay.document.library.uad.test]=1.0.0
bundle.version[com.liferay.document.library.uad]=6.0.19
bundle.version[com.liferay.document.library.video.test]=1.0.0
-bundle.version[com.liferay.document.library.video]=1.0.85
+bundle.version[com.liferay.document.library.video]=1.0.86
bundle.version[com.liferay.document.library.web.test]=1.0.0
-bundle.version[com.liferay.document.library.web]=6.0.199
+bundle.version[com.liferay.document.library.web]=6.0.200
bundle.version[com.liferay.dynamic.data.lists.api]=10.0.1
bundle.version[com.liferay.dynamic.data.lists.service]=5.0.75
bundle.version[com.liferay.dynamic.data.lists.test]=1.0.0
bundle.version[com.liferay.dynamic.data.lists.uad]=1.0.5
-bundle.version[com.liferay.dynamic.data.lists.web]=6.0.104
+bundle.version[com.liferay.dynamic.data.lists.web]=6.0.105
bundle.version[com.liferay.dynamic.data.mapping.api]=33.2.1
bundle.version[com.liferay.dynamic.data.mapping.data.provider.impl]=5.0.42
bundle.version[com.liferay.dynamic.data.mapping.data.provider.instance]=4.0.24
-bundle.version[com.liferay.dynamic.data.mapping.data.provider.web]=5.0.62
+bundle.version[com.liferay.dynamic.data.mapping.data.provider.web]=5.0.63
bundle.version[com.liferay.dynamic.data.mapping.demo.data.creator.api]=2.0.6
bundle.version[com.liferay.dynamic.data.mapping.demo.data.creator.impl]=2.0.8
bundle.version[com.liferay.dynamic.data.mapping.expression]=6.0.28
@@ -882,13 +882,13 @@ bundle.version[com.liferay.dynamic.data.mapping.form.analytics]=5.0.13
bundle.version[com.liferay.dynamic.data.mapping.form.builder]=4.0.67
bundle.version[com.liferay.dynamic.data.mapping.form.evaluator.impl]=4.0.79
bundle.version[com.liferay.dynamic.data.mapping.form.field.type.api]=1.6.2
-bundle.version[com.liferay.dynamic.data.mapping.form.field.type]=6.0.188
+bundle.version[com.liferay.dynamic.data.mapping.form.field.type]=6.0.189
bundle.version[com.liferay.dynamic.data.mapping.form.item.selector.api]=2.1.2
bundle.version[com.liferay.dynamic.data.mapping.form.renderer]=6.0.76
bundle.version[com.liferay.dynamic.data.mapping.form.taglib]=5.0.8
bundle.version[com.liferay.dynamic.data.mapping.form.values.factory]=6.0.24
bundle.version[com.liferay.dynamic.data.mapping.form.values.query]=6.0.13
-bundle.version[com.liferay.dynamic.data.mapping.form.web]=4.0.181
+bundle.version[com.liferay.dynamic.data.mapping.form.web]=4.0.182
bundle.version[com.liferay.dynamic.data.mapping.item.selector.api]=1.2.1
bundle.version[com.liferay.dynamic.data.mapping.item.selector.web]=1.0.13
bundle.version[com.liferay.dynamic.data.mapping.service]=8.1.3
@@ -900,7 +900,7 @@ bundle.version[com.liferay.dynamic.data.mapping.uad.test]=1.0.0
bundle.version[com.liferay.dynamic.data.mapping.uad]=2.0.24
bundle.version[com.liferay.dynamic.data.mapping.validator]=6.0.34
bundle.version[com.liferay.dynamic.data.mapping.web.test]=1.0.0
-bundle.version[com.liferay.dynamic.data.mapping.web]=5.0.116
+bundle.version[com.liferay.dynamic.data.mapping.web]=5.0.117
bundle.version[com.liferay.enterprise.product.notification.web]=1.0.20
bundle.version[com.liferay.expando.api]=4.1.3
bundle.version[com.liferay.expando.exportimport]=4.0.17
@@ -929,10 +929,10 @@ bundle.version[com.liferay.external.reference.service]=4.0.20
bundle.version[com.liferay.feature.flag.test.util]=1.0.2
bundle.version[com.liferay.feature.flag.test]=1.0.0
bundle.version[com.liferay.feature.flag.web.test]=1.0.0
-bundle.version[com.liferay.feature.flag.web]=1.0.46
+bundle.version[com.liferay.feature.flag.web]=1.0.47
bundle.version[com.liferay.flags.api]=7.0.1
bundle.version[com.liferay.flags.service]=6.0.31
-bundle.version[com.liferay.flags.taglib]=6.1.28
+bundle.version[com.liferay.flags.taglib]=6.1.29
bundle.version[com.liferay.flags.test]=1.0.0
bundle.version[com.liferay.flags.web]=6.0.24
bundle.version[com.liferay.fragment.api]=52.0.1
@@ -944,8 +944,8 @@ bundle.version[com.liferay.fragment.collection.contributor.inputs]=1.0.50
bundle.version[com.liferay.fragment.collection.contributor.navigation.bars]=2.0.13
bundle.version[com.liferay.fragment.collection.contributor.test]=1.0.0
bundle.version[com.liferay.fragment.collection.filter.api]=2.0.2
-bundle.version[com.liferay.fragment.collection.filter.category]=1.0.54
-bundle.version[com.liferay.fragment.collection.filter.date]=1.0.47
+bundle.version[com.liferay.fragment.collection.filter.category]=1.0.55
+bundle.version[com.liferay.fragment.collection.filter.date]=1.0.48
bundle.version[com.liferay.fragment.collection.filter.impl]=1.0.12
bundle.version[com.liferay.fragment.collection.filter.keyword]=1.0.25
bundle.version[com.liferay.fragment.collection.filter.tags]=1.0.19
@@ -965,7 +965,7 @@ bundle.version[com.liferay.fragment.entry.processor.portlet]=4.0.46
bundle.version[com.liferay.fragment.entry.processor.resources]=3.0.12
bundle.version[com.liferay.fragment.entry.processor.styles]=1.0.18
bundle.version[com.liferay.fragment.entry.processor.test]=1.0.0
-bundle.version[com.liferay.fragment.impl]=4.0.112
+bundle.version[com.liferay.fragment.impl]=4.0.113
bundle.version[com.liferay.fragment.item.selector.api]=5.0.3
bundle.version[com.liferay.fragment.item.selector.web]=2.0.8
bundle.version[com.liferay.fragment.renderer.categorization.inputs.impl.test]=1.0.0
@@ -977,30 +977,30 @@ bundle.version[com.liferay.fragment.renderer.react.impl]=2.0.31
bundle.version[com.liferay.fragment.service]=4.0.123
bundle.version[com.liferay.fragment.test]=1.0.0
bundle.version[com.liferay.fragment.video.streaming]=1.0.16
-bundle.version[com.liferay.fragment.web]=4.0.123
+bundle.version[com.liferay.fragment.web]=4.0.124
bundle.version[com.liferay.freemarker.osgi.bridge]=2.0.1
bundle.version[com.liferay.friendly.url.api]=10.2.1
bundle.version[com.liferay.friendly.url.service]=4.0.96
-bundle.version[com.liferay.friendly.url.taglib]=1.6.18
+bundle.version[com.liferay.friendly.url.taglib]=1.6.19
bundle.version[com.liferay.friendly.url.test.util]=1.0.3
bundle.version[com.liferay.friendly.url.test]=1.0.0
-bundle.version[com.liferay.friendly.url.web]=1.0.35
+bundle.version[com.liferay.friendly.url.web]=1.0.36
bundle.version[com.liferay.frontend.css.cadmin.sample.web]=1.0.30
bundle.version[com.liferay.frontend.css.cadmin.web]=1.0.41
bundle.version[com.liferay.frontend.css.common]=6.0.19
bundle.version[com.liferay.frontend.css.rtl.servlet]=5.0.16
bundle.version[com.liferay.frontend.css.variables.api]=2.0.8
bundle.version[com.liferay.frontend.css.variables.web]=2.0.12
-bundle.version[com.liferay.frontend.data.set.admin.web]=1.0.14
+bundle.version[com.liferay.frontend.data.set.admin.web]=1.0.15
bundle.version[com.liferay.frontend.data.set.api]=18.0.1
-bundle.version[com.liferay.frontend.data.set.impl]=1.0.35
+bundle.version[com.liferay.frontend.data.set.impl]=1.0.36
bundle.version[com.liferay.frontend.data.set.sample.web]=1.0.0
bundle.version[com.liferay.frontend.data.set.taglib]=1.2.1
-bundle.version[com.liferay.frontend.data.set.web]=1.0.112
+bundle.version[com.liferay.frontend.data.set.web]=1.0.113
bundle.version[com.liferay.frontend.editor.alloyeditor.web]=5.0.57
bundle.version[com.liferay.frontend.editor.api]=6.0.6
bundle.version[com.liferay.frontend.editor.ckeditor.sample.web]=1.0.0
-bundle.version[com.liferay.frontend.editor.ckeditor.web]=5.0.109
+bundle.version[com.liferay.frontend.editor.ckeditor.web]=5.0.110
bundle.version[com.liferay.frontend.editor.taglib]=4.1.8
bundle.version[com.liferay.frontend.editor.test]=1.0.0
bundle.version[com.liferay.frontend.icons.web]=1.0.35
@@ -1009,10 +1009,10 @@ bundle.version[com.liferay.frontend.js.a11y.web]=1.0.3
bundle.version[com.liferay.frontend.js.aui.web]=5.0.107
bundle.version[com.liferay.frontend.js.bootstrap.support.web]=1.0.2
bundle.version[com.liferay.frontend.js.bundle.config.extender]=5.0.25
-bundle.version[com.liferay.frontend.js.clay.sample.web]=2.0.34
+bundle.version[com.liferay.frontend.js.clay.sample.web]=2.0.35
bundle.version[com.liferay.frontend.js.codemirror.web]=1.0.11
bundle.version[com.liferay.frontend.js.components.sample.web]=1.0.0
-bundle.version[com.liferay.frontend.js.components.web]=2.0.82
+bundle.version[com.liferay.frontend.js.components.web]=2.0.83
bundle.version[com.liferay.frontend.js.dependencies.web]=1.0.29
bundle.version[com.liferay.frontend.js.importmaps.extender.api]=2.0.4
bundle.version[com.liferay.frontend.js.importmaps.extender.test]=1.0.0
@@ -1021,33 +1021,33 @@ bundle.version[com.liferay.frontend.js.loader.modules.extender.api]=10.0.3
bundle.version[com.liferay.frontend.js.loader.modules.extender]=6.0.60
bundle.version[com.liferay.frontend.js.lodash.web]=4.0.30
bundle.version[com.liferay.frontend.js.portlet.extender]=4.0.16
-bundle.version[com.liferay.frontend.js.react.web]=5.0.55
+bundle.version[com.liferay.frontend.js.react.web]=5.0.56
bundle.version[com.liferay.frontend.js.recharts]=2.0.21
bundle.version[com.liferay.frontend.js.spa.web]=5.0.62
bundle.version[com.liferay.frontend.js.state.web]=1.0.31
bundle.version[com.liferay.frontend.js.svg4everybody.web]=2.0.27
-bundle.version[com.liferay.frontend.js.tooltip.support.web]=4.0.41
+bundle.version[com.liferay.frontend.js.tooltip.support.web]=4.0.42
bundle.version[com.liferay.frontend.js.top.head.extender.api]=2.0.7
bundle.version[com.liferay.frontend.js.top.head.extender]=4.0.16
-bundle.version[com.liferay.frontend.js.walkthrough.sample.web]=1.0.31
-bundle.version[com.liferay.frontend.js.walkthrough.web]=1.0.43
-bundle.version[com.liferay.frontend.js.web]=5.0.124
+bundle.version[com.liferay.frontend.js.walkthrough.sample.web]=1.0.32
+bundle.version[com.liferay.frontend.js.walkthrough.web]=1.0.44
+bundle.version[com.liferay.frontend.js.web]=5.0.125
bundle.version[com.liferay.frontend.taglib.aui.form.extension.sample]=1.0.0
bundle.version[com.liferay.frontend.taglib.clay.sample.web.test]=1.0.0
bundle.version[com.liferay.frontend.taglib.clay.sample.web]=1.0.0
bundle.version[com.liferay.frontend.taglib.clay.test.alert.toast.sample.web]=1.0.0
-bundle.version[com.liferay.frontend.taglib.clay]=15.1.5
+bundle.version[com.liferay.frontend.taglib.clay]=15.1.6
bundle.version[com.liferay.frontend.taglib.dynamic.section]=5.0.10
bundle.version[com.liferay.frontend.taglib.form.navigator]=6.3.2
bundle.version[com.liferay.frontend.taglib.react]=6.0.4
bundle.version[com.liferay.frontend.taglib.sample.web]=1.0.0
bundle.version[com.liferay.frontend.taglib.util]=4.0.11
-bundle.version[com.liferay.frontend.taglib]=13.8.1
+bundle.version[com.liferay.frontend.taglib]=13.8.2
bundle.version[com.liferay.frontend.theme.browser.support]=2.0.69
-bundle.version[com.liferay.frontend.theme.classic.style.guide.sample.web]=2.0.79
+bundle.version[com.liferay.frontend.theme.classic.style.guide.sample.web]=2.0.80
bundle.version[com.liferay.frontend.theme.contributor.extender]=6.0.73
-bundle.version[com.liferay.frontend.theme.dialect.style.guide.sample.web]=2.0.72
-bundle.version[com.liferay.frontend.theme.dxp.override]=4.0.68
+bundle.version[com.liferay.frontend.theme.dialect.style.guide.sample.web]=2.0.73
+bundle.version[com.liferay.frontend.theme.dxp.override]=4.0.69
bundle.version[com.liferay.frontend.theme.favicon.servlet]=5.0.70
bundle.version[com.liferay.frontend.theme.service.test]=1.0.0
bundle.version[com.liferay.frontend.theme.styled]=6.0.93
@@ -1077,7 +1077,7 @@ bundle.version[com.liferay.headless.admin.list.type.impl]=1.0.80
bundle.version[com.liferay.headless.admin.list.type.test]=1.0.0
bundle.version[com.liferay.headless.admin.site.api]=6.0.1
bundle.version[com.liferay.headless.admin.site.client]=1.0.8
-bundle.version[com.liferay.headless.admin.site.impl]=1.0.8
+bundle.version[com.liferay.headless.admin.site.impl]=1.0.9
bundle.version[com.liferay.headless.admin.site.test]=1.0.0
bundle.version[com.liferay.headless.admin.taxonomy.api]=16.3.1
bundle.version[com.liferay.headless.admin.taxonomy.client]=4.0.39
@@ -1100,65 +1100,65 @@ bundle.version[com.liferay.headless.batch.engine.client]=1.0.30
bundle.version[com.liferay.headless.batch.engine.impl]=4.0.63
bundle.version[com.liferay.headless.batch.engine.test]=1.0.0
bundle.version[com.liferay.headless.builder.api]=11.0.1
-bundle.version[com.liferay.headless.builder.impl]=1.0.41
+bundle.version[com.liferay.headless.builder.impl]=1.0.42
bundle.version[com.liferay.headless.builder.test]=1.0.0
-bundle.version[com.liferay.headless.builder.web]=1.0.35
+bundle.version[com.liferay.headless.builder.web]=1.0.36
bundle.version[com.liferay.headless.commerce.admin.account.api]=24.0.7
bundle.version[com.liferay.headless.commerce.admin.account.client]=4.0.39
-bundle.version[com.liferay.headless.commerce.admin.account.impl]=4.0.98
+bundle.version[com.liferay.headless.commerce.admin.account.impl]=4.0.99
bundle.version[com.liferay.headless.commerce.admin.account.test]=1.0.0
bundle.version[com.liferay.headless.commerce.admin.catalog.api]=37.0.2
bundle.version[com.liferay.headless.commerce.admin.catalog.client]=4.0.70
-bundle.version[com.liferay.headless.commerce.admin.catalog.impl]=4.0.139
+bundle.version[com.liferay.headless.commerce.admin.catalog.impl]=4.0.140
bundle.version[com.liferay.headless.commerce.admin.catalog.test]=1.0.0
bundle.version[com.liferay.headless.commerce.admin.channel.api]=11.10.2
bundle.version[com.liferay.headless.commerce.admin.channel.client]=4.0.42
-bundle.version[com.liferay.headless.commerce.admin.channel.impl]=4.0.94
+bundle.version[com.liferay.headless.commerce.admin.channel.impl]=4.0.95
bundle.version[com.liferay.headless.commerce.admin.channel.test]=1.0.0
bundle.version[com.liferay.headless.commerce.admin.inventory.api]=19.2.2
bundle.version[com.liferay.headless.commerce.admin.inventory.client]=4.0.39
-bundle.version[com.liferay.headless.commerce.admin.inventory.impl]=4.0.87
+bundle.version[com.liferay.headless.commerce.admin.inventory.impl]=4.0.88
bundle.version[com.liferay.headless.commerce.admin.inventory.test]=1.0.0
bundle.version[com.liferay.headless.commerce.admin.order.api]=31.0.1
bundle.version[com.liferay.headless.commerce.admin.order.client]=4.0.48
-bundle.version[com.liferay.headless.commerce.admin.order.impl]=4.0.117
+bundle.version[com.liferay.headless.commerce.admin.order.impl]=4.0.118
bundle.version[com.liferay.headless.commerce.admin.order.test]=1.0.0
bundle.version[com.liferay.headless.commerce.admin.payment.api]=1.3.2
bundle.version[com.liferay.headless.commerce.admin.payment.client]=1.0.13
-bundle.version[com.liferay.headless.commerce.admin.payment.impl]=1.0.17
+bundle.version[com.liferay.headless.commerce.admin.payment.impl]=1.0.18
bundle.version[com.liferay.headless.commerce.admin.payment.test]=1.0.0
bundle.version[com.liferay.headless.commerce.admin.pricing.api]=30.4.2
bundle.version[com.liferay.headless.commerce.admin.pricing.client]=4.0.42
-bundle.version[com.liferay.headless.commerce.admin.pricing.impl]=4.0.97
+bundle.version[com.liferay.headless.commerce.admin.pricing.impl]=4.0.98
bundle.version[com.liferay.headless.commerce.admin.pricing.test]=1.0.0
bundle.version[com.liferay.headless.commerce.admin.shipment.api]=4.1.2
bundle.version[com.liferay.headless.commerce.admin.shipment.client]=1.0.36
-bundle.version[com.liferay.headless.commerce.admin.shipment.impl]=1.0.85
+bundle.version[com.liferay.headless.commerce.admin.shipment.impl]=1.0.86
bundle.version[com.liferay.headless.commerce.admin.shipment.test]=1.0.0
bundle.version[com.liferay.headless.commerce.admin.site.setting.api]=16.3.2
bundle.version[com.liferay.headless.commerce.admin.site.setting.client]=4.0.37
-bundle.version[com.liferay.headless.commerce.admin.site.setting.impl]=4.0.79
+bundle.version[com.liferay.headless.commerce.admin.site.setting.impl]=4.0.80
bundle.version[com.liferay.headless.commerce.admin.site.setting.test]=1.0.0
bundle.version[com.liferay.headless.commerce.core.api]=6.1.2
bundle.version[com.liferay.headless.commerce.core.impl]=4.0.11
bundle.version[com.liferay.headless.commerce.delivery.cart.api]=23.1.2
bundle.version[com.liferay.headless.commerce.delivery.cart.client]=4.0.48
-bundle.version[com.liferay.headless.commerce.delivery.cart.impl]=4.0.115
+bundle.version[com.liferay.headless.commerce.delivery.cart.impl]=4.0.116
bundle.version[com.liferay.headless.commerce.delivery.cart.test]=1.0.0
bundle.version[com.liferay.headless.commerce.delivery.catalog.api]=22.1.1
bundle.version[com.liferay.headless.commerce.delivery.catalog.client]=4.0.58
-bundle.version[com.liferay.headless.commerce.delivery.catalog.impl]=4.0.121
+bundle.version[com.liferay.headless.commerce.delivery.catalog.impl]=4.0.122
bundle.version[com.liferay.headless.commerce.delivery.catalog.test]=1.0.0
bundle.version[com.liferay.headless.commerce.delivery.order.api]=5.0.3
bundle.version[com.liferay.headless.commerce.delivery.order.client]=1.0.29
-bundle.version[com.liferay.headless.commerce.delivery.order.impl]=1.0.68
+bundle.version[com.liferay.headless.commerce.delivery.order.impl]=1.0.69
bundle.version[com.liferay.headless.commerce.delivery.order.test]=1.0.0
-bundle.version[com.liferay.headless.commerce.machine.learning.api]=8.2.6
-bundle.version[com.liferay.headless.commerce.machine.learning.client]=1.0.27
-bundle.version[com.liferay.headless.commerce.machine.learning.impl]=5.0.77
+bundle.version[com.liferay.headless.commerce.machine.learning.api]=8.2.7
+bundle.version[com.liferay.headless.commerce.machine.learning.client]=1.0.28
+bundle.version[com.liferay.headless.commerce.machine.learning.impl]=5.0.78
bundle.version[com.liferay.headless.commerce.machine.learning.test]=1.0.0
-bundle.version[com.liferay.headless.commerce.punchout.api]=13.1.9
-bundle.version[com.liferay.headless.commerce.punchout.impl]=4.0.57
+bundle.version[com.liferay.headless.commerce.punchout.api]=13.1.10
+bundle.version[com.liferay.headless.commerce.punchout.impl]=4.0.58
bundle.version[com.liferay.headless.common.spi]=9.0.1
bundle.version[com.liferay.headless.delivery.api]=50.0.1
bundle.version[com.liferay.headless.delivery.client]=4.0.93
@@ -1166,7 +1166,7 @@ bundle.version[com.liferay.headless.delivery.impl]=5.0.167
bundle.version[com.liferay.headless.delivery.test]=1.0.0
bundle.version[com.liferay.headless.discovery.impl]=4.0.37
bundle.version[com.liferay.headless.discovery.test]=1.0.0
-bundle.version[com.liferay.headless.discovery.web]=4.0.54
+bundle.version[com.liferay.headless.discovery.web]=4.0.55
bundle.version[com.liferay.headless.form.api]=15.2.7
bundle.version[com.liferay.headless.form.client]=4.0.31
bundle.version[com.liferay.headless.form.impl]=5.0.71
@@ -1205,7 +1205,7 @@ bundle.version[com.liferay.integration.point.test]=1.0.0
bundle.version[com.liferay.invitation.invite.members.api]=8.0.1
bundle.version[com.liferay.invitation.invite.members.service]=7.0.43
bundle.version[com.liferay.invitation.invite.members.test]=1.0.0
-bundle.version[com.liferay.invitation.invite.members.web]=5.0.52
+bundle.version[com.liferay.invitation.invite.members.web]=5.0.53
bundle.version[com.liferay.ip.geocoder.api]=2.0.2
bundle.version[com.liferay.ip.geocoder.impl]=1.0.14
bundle.version[com.liferay.ip.geocoder.sample.web]=3.0.4
@@ -1214,19 +1214,19 @@ bundle.version[com.liferay.item.selector.criteria.api]=11.3.1
bundle.version[com.liferay.item.selector.criteria.impl]=4.0.10
bundle.version[com.liferay.item.selector.editor.configuration]=6.0.14
bundle.version[com.liferay.item.selector.impl]=4.0.17
-bundle.version[com.liferay.item.selector.taglib]=6.0.25
+bundle.version[com.liferay.item.selector.taglib]=6.0.26
bundle.version[com.liferay.item.selector.test]=1.0.0
bundle.version[com.liferay.item.selector.upload.web]=6.0.29
-bundle.version[com.liferay.item.selector.url.web]=6.0.38
+bundle.version[com.liferay.item.selector.url.web]=6.0.39
bundle.version[com.liferay.item.selector.web]=7.0.64
bundle.version[com.liferay.javadoc.formatter]=1.0.38
bundle.version[com.liferay.jaxrs.resource.test]=1.0.0
bundle.version[com.liferay.jaxws.osgi.bridge]=5.0.5
bundle.version[com.liferay.jenkins.plugin.events]=1.0.6
-bundle.version[com.liferay.jenkins.results.parser]=1.0.1548
+bundle.version[com.liferay.jenkins.results.parser]=1.0.1549
bundle.version[com.liferay.journal.api]=37.2.1
bundle.version[com.liferay.journal.article.dynamic.data.mapping.form.field.type.api]=1.0.7
-bundle.version[com.liferay.journal.article.dynamic.data.mapping.form.field.type]=2.0.47
+bundle.version[com.liferay.journal.article.dynamic.data.mapping.form.field.type]=2.0.48
bundle.version[com.liferay.journal.content.web]=6.0.88
bundle.version[com.liferay.journal.editor.configuration]=5.0.12
bundle.version[com.liferay.journal.image.service]=1.0.6
@@ -1235,13 +1235,13 @@ bundle.version[com.liferay.journal.item.selector.web]=5.0.18
bundle.version[com.liferay.journal.lang]=6.0.25
bundle.version[com.liferay.journal.ratings.definition]=6.0.8
bundle.version[com.liferay.journal.service]=7.0.166
-bundle.version[com.liferay.journal.taglib]=6.2.26
+bundle.version[com.liferay.journal.taglib]=6.2.27
bundle.version[com.liferay.journal.terms.of.use]=6.0.17
bundle.version[com.liferay.journal.test.util]=13.3.2
bundle.version[com.liferay.journal.test]=1.0.0
bundle.version[com.liferay.journal.uad]=8.0.3
bundle.version[com.liferay.journal.web.test]=1.0.0
-bundle.version[com.liferay.journal.web]=5.0.187
+bundle.version[com.liferay.journal.web]=5.0.188
bundle.version[com.liferay.json.server.test]=1.0.0
bundle.version[com.liferay.json.server]=1.0.0
bundle.version[com.liferay.json.storage.api]=3.0.1
@@ -1257,34 +1257,34 @@ bundle.version[com.liferay.knowledge.base.service]=5.0.103
bundle.version[com.liferay.knowledge.base.test.util]=1.2.1
bundle.version[com.liferay.knowledge.base.test]=1.0.0
bundle.version[com.liferay.knowledge.base.web.test]=1.0.0
-bundle.version[com.liferay.knowledge.base.web]=5.0.140
+bundle.version[com.liferay.knowledge.base.web]=5.0.141
bundle.version[com.liferay.lang.builder]=1.0.56
bundle.version[com.liferay.lang.sanitizer]=1.0.1
bundle.version[com.liferay.layout.admin.api]=4.3.1
bundle.version[com.liferay.layout.admin.web.test]=1.0.0
-bundle.version[com.liferay.layout.admin.web]=5.0.188
+bundle.version[com.liferay.layout.admin.web]=5.0.189
bundle.version[com.liferay.layout.api]=52.0.1
bundle.version[com.liferay.layout.content.page.editor.api]=6.0.1
bundle.version[com.liferay.layout.content.page.editor.web.test]=1.0.0
-bundle.version[com.liferay.layout.content.page.editor.web]=3.0.214
+bundle.version[com.liferay.layout.content.page.editor.web]=3.0.215
bundle.version[com.liferay.layout.display.page.api]=5.1.1
bundle.version[com.liferay.layout.display.page.impl]=2.0.14
bundle.version[com.liferay.layout.display.page.test]=1.0.0
bundle.version[com.liferay.layout.dynamic.data.mapping.form.field.type.api]=1.0.7
-bundle.version[com.liferay.layout.dynamic.data.mapping.form.field.type]=2.0.48
+bundle.version[com.liferay.layout.dynamic.data.mapping.form.field.type]=2.0.49
bundle.version[com.liferay.layout.impl]=6.0.148
bundle.version[com.liferay.layout.item.selector.api]=6.0.1
bundle.version[com.liferay.layout.item.selector.web]=5.0.22
-bundle.version[com.liferay.layout.js.components.web]=1.0.35
+bundle.version[com.liferay.layout.js.components.web]=1.0.36
bundle.version[com.liferay.layout.locked.layouts.web.test]=1.0.0
bundle.version[com.liferay.layout.locked.layouts.web]=1.0.25
bundle.version[com.liferay.layout.page.template.admin.api]=2.0.6
bundle.version[com.liferay.layout.page.template.admin.web.test]=1.0.0
-bundle.version[com.liferay.layout.page.template.admin.web]=2.0.134
-bundle.version[com.liferay.layout.page.template.api]=31.0.1
+bundle.version[com.liferay.layout.page.template.admin.web]=2.0.135
+bundle.version[com.liferay.layout.page.template.api]=31.1.1
bundle.version[com.liferay.layout.page.template.item.selector.api]=3.0.1
-bundle.version[com.liferay.layout.page.template.item.selector.web]=1.0.40
-bundle.version[com.liferay.layout.page.template.service]=4.0.117
+bundle.version[com.liferay.layout.page.template.item.selector.web]=1.0.41
+bundle.version[com.liferay.layout.page.template.service]=4.0.118
bundle.version[com.liferay.layout.page.template.test.util]=1.0.2
bundle.version[com.liferay.layout.page.template.test]=1.0.0
bundle.version[com.liferay.layout.portlets.web]=3.0.27
@@ -1292,18 +1292,18 @@ bundle.version[com.liferay.layout.prototype.api]=5.0.6
bundle.version[com.liferay.layout.prototype.impl]=5.0.13
bundle.version[com.liferay.layout.prototype.test]=1.0.0
bundle.version[com.liferay.layout.reports.test]=1.0.0
-bundle.version[com.liferay.layout.reports.web]=1.0.90
+bundle.version[com.liferay.layout.reports.web]=1.0.91
bundle.version[com.liferay.layout.seo.api]=8.0.1
bundle.version[com.liferay.layout.seo.service]=3.0.68
bundle.version[com.liferay.layout.seo.test]=1.0.0
bundle.version[com.liferay.layout.seo.web.test]=1.0.0
-bundle.version[com.liferay.layout.seo.web]=2.0.96
-bundle.version[com.liferay.layout.service]=2.0.75
+bundle.version[com.liferay.layout.seo.web]=2.0.97
+bundle.version[com.liferay.layout.service]=2.0.76
bundle.version[com.liferay.layout.set.prototype.api]=7.1.1
bundle.version[com.liferay.layout.set.prototype.impl]=6.0.22
bundle.version[com.liferay.layout.set.prototype.test]=1.0.0
-bundle.version[com.liferay.layout.set.prototype.web]=5.0.68
-bundle.version[com.liferay.layout.taglib]=16.1.30
+bundle.version[com.liferay.layout.set.prototype.web]=5.0.69
+bundle.version[com.liferay.layout.taglib]=16.1.31
bundle.version[com.liferay.layout.test.util]=11.0.4
bundle.version[com.liferay.layout.test]=1.0.0
bundle.version[com.liferay.layout.theme.item.selector.api]=1.0.3
@@ -1317,7 +1317,7 @@ bundle.version[com.liferay.layout.type.controller.embedded]=2.0.21
bundle.version[com.liferay.layout.type.controller.full.page.application]=6.0.21
bundle.version[com.liferay.layout.type.controller.link.to.page]=4.0.23
bundle.version[com.liferay.layout.type.controller.node]=6.0.19
-bundle.version[com.liferay.layout.type.controller.panel]=2.0.49
+bundle.version[com.liferay.layout.type.controller.panel]=2.0.50
bundle.version[com.liferay.layout.type.controller.portlet]=2.0.27
bundle.version[com.liferay.layout.type.controller.test]=1.0.0
bundle.version[com.liferay.layout.type.controller.url]=2.0.17
@@ -1363,9 +1363,9 @@ bundle.version[com.liferay.map.openstreetmap]=6.0.44
bundle.version[com.liferay.map.taglib]=5.0.24
bundle.version[com.liferay.marketplace.api]=12.0.2
bundle.version[com.liferay.marketplace.app.manager.web]=5.0.52
-bundle.version[com.liferay.marketplace.js.components.web]=1.0.2
+bundle.version[com.liferay.marketplace.js.components.web]=1.0.3
bundle.version[com.liferay.marketplace.service]=7.0.59
-bundle.version[com.liferay.marketplace.settings.web]=1.0.4
+bundle.version[com.liferay.marketplace.settings.web]=1.0.5
bundle.version[com.liferay.marketplace.store.web]=7.0.50
bundle.version[com.liferay.marketplace.test]=1.0.0
bundle.version[com.liferay.maven.executor]=1.0.3
@@ -1397,20 +1397,20 @@ bundle.version[com.liferay.module.configuration.configurator.test]=1.0.0
bundle.version[com.liferay.module.configuration.localization.test]=1.0.0
bundle.version[com.liferay.module.dependency.closure.test]=1.0.0
bundle.version[com.liferay.monitoring.web]=5.0.36
-bundle.version[com.liferay.multi.factor.authentication.email.otp.api]=4.0.1
+bundle.version[com.liferay.multi.factor.authentication.email.otp.api]=4.0.2
bundle.version[com.liferay.multi.factor.authentication.email.otp.service]=2.0.28
bundle.version[com.liferay.multi.factor.authentication.email.otp.web]=2.0.35
-bundle.version[com.liferay.multi.factor.authentication.fido2.credential.api]=6.0.1
+bundle.version[com.liferay.multi.factor.authentication.fido2.credential.api]=6.0.2
bundle.version[com.liferay.multi.factor.authentication.fido2.credential.service]=4.0.34
-bundle.version[com.liferay.multi.factor.authentication.fido2.web]=1.0.47
-bundle.version[com.liferay.multi.factor.authentication.ip.address.impl]=2.0.17
+bundle.version[com.liferay.multi.factor.authentication.fido2.web]=1.0.48
+bundle.version[com.liferay.multi.factor.authentication.ip.address.impl]=2.0.18
bundle.version[com.liferay.multi.factor.authentication.sample]=1.0.0
-bundle.version[com.liferay.multi.factor.authentication.spi]=2.0.7
-bundle.version[com.liferay.multi.factor.authentication.timebased.otp.api]=4.0.1
-bundle.version[com.liferay.multi.factor.authentication.timebased.otp.service]=2.0.31
-bundle.version[com.liferay.multi.factor.authentication.timebased.otp.web]=2.0.37
+bundle.version[com.liferay.multi.factor.authentication.spi]=2.0.8
+bundle.version[com.liferay.multi.factor.authentication.timebased.otp.api]=4.0.2
+bundle.version[com.liferay.multi.factor.authentication.timebased.otp.service]=2.0.32
+bundle.version[com.liferay.multi.factor.authentication.timebased.otp.web]=2.0.38
bundle.version[com.liferay.multi.factor.authentication.web.test]=1.0.0
-bundle.version[com.liferay.multi.factor.authentication.web]=2.0.41
+bundle.version[com.liferay.multi.factor.authentication.web]=2.0.42
bundle.version[com.liferay.my.subscriptions.web]=5.0.45
bundle.version[com.liferay.nested.portlets.test]=1.0.0
bundle.version[com.liferay.nested.portlets.web]=6.0.44
@@ -1421,10 +1421,10 @@ bundle.version[com.liferay.notification.rest.api]=7.2.7
bundle.version[com.liferay.notification.rest.client]=1.0.35
bundle.version[com.liferay.notification.rest.impl]=1.0.58
bundle.version[com.liferay.notification.rest.test]=1.0.0
-bundle.version[com.liferay.notification.service]=1.0.88
+bundle.version[com.liferay.notification.service]=1.0.89
bundle.version[com.liferay.notification.test.util]=1.0.2
bundle.version[com.liferay.notification.test]=1.0.0
-bundle.version[com.liferay.notification.web]=1.0.93
+bundle.version[com.liferay.notification.web]=1.0.94
bundle.version[com.liferay.notifications.service]=1.0.16
bundle.version[com.liferay.notifications.uad.test]=1.0.0
bundle.version[com.liferay.notifications.uad]=6.0.14
@@ -1448,33 +1448,33 @@ bundle.version[com.liferay.oauth2.provider.scope.spi]=4.0.7
bundle.version[com.liferay.oauth2.provider.service]=4.0.97
bundle.version[com.liferay.oauth2.provider.shortcut]=4.0.22
bundle.version[com.liferay.oauth2.provider.test]=1.0.0
-bundle.version[com.liferay.oauth2.provider.web]=4.0.89
+bundle.version[com.liferay.oauth2.provider.web]=4.0.90
bundle.version[com.liferay.object.admin.rest.api]=21.0.1
bundle.version[com.liferay.object.admin.rest.client]=1.0.76
-bundle.version[com.liferay.object.admin.rest.impl]=1.0.135
+bundle.version[com.liferay.object.admin.rest.impl]=1.0.136
bundle.version[com.liferay.object.admin.rest.test]=1.0.0
-bundle.version[com.liferay.object.api]=101.0.1
+bundle.version[com.liferay.object.api]=102.0.1
bundle.version[com.liferay.object.dynamic.data.mapping.form.field.type.api]=1.2.1
-bundle.version[com.liferay.object.dynamic.data.mapping.form.field.type]=1.0.64
-bundle.version[com.liferay.object.dynamic.data.mapping]=1.0.36
-bundle.version[com.liferay.object.info.api]=2.0.6
-bundle.version[com.liferay.object.js.components.web]=1.0.89
-bundle.version[com.liferay.object.rest.api]=19.9.0
-bundle.version[com.liferay.object.rest.impl]=1.0.157
-bundle.version[com.liferay.object.rest.test.util]=2.0.4
+bundle.version[com.liferay.object.dynamic.data.mapping.form.field.type]=1.0.65
+bundle.version[com.liferay.object.dynamic.data.mapping]=1.0.37
+bundle.version[com.liferay.object.info.api]=2.0.7
+bundle.version[com.liferay.object.js.components.web]=1.0.90
+bundle.version[com.liferay.object.rest.api]=19.10.2
+bundle.version[com.liferay.object.rest.impl]=1.0.158
+bundle.version[com.liferay.object.rest.test.util]=2.0.5
bundle.version[com.liferay.object.rest.test]=1.0.0
bundle.version[com.liferay.object.scripting.api]=3.0.1
bundle.version[com.liferay.object.scripting.impl]=1.0.10
-bundle.version[com.liferay.object.service]=1.0.209
+bundle.version[com.liferay.object.service]=1.0.210
bundle.version[com.liferay.object.storage.salesforce.api]=1.0.4
bundle.version[com.liferay.object.storage.salesforce.test]=1.0.0
bundle.version[com.liferay.object.storage.salesforce]=1.0.40
bundle.version[com.liferay.object.storage.sugarcrm.api]=1.0.2
bundle.version[com.liferay.object.storage.sugarcrm.test]=1.0.0
bundle.version[com.liferay.object.storage.sugarcrm]=1.0.3
-bundle.version[com.liferay.object.test.util]=5.1.2
+bundle.version[com.liferay.object.test.util]=5.1.3
bundle.version[com.liferay.object.test]=1.0.0
-bundle.version[com.liferay.object.web]=1.0.218
+bundle.version[com.liferay.object.web]=1.0.219
bundle.version[com.liferay.on.demand.admin.api]=2.1.1
bundle.version[com.liferay.on.demand.admin.impl]=1.0.19
bundle.version[com.liferay.on.demand.admin.test]=1.0.0
@@ -1486,7 +1486,7 @@ bundle.version[com.liferay.organizations.service]=4.0.45
bundle.version[com.liferay.organizations.test]=1.0.0
bundle.version[com.liferay.osb.site.initializer.liferay.online]=1.0.0
bundle.version[com.liferay.osb.site.initializer]=1.0.0
-bundle.version[com.liferay.osb.spring.boot.client.zendesk]=1.0.4
+bundle.version[com.liferay.osb.spring.boot.client.zendesk]=1.0.5
bundle.version[com.liferay.osb.testray.api]=1.0.0
bundle.version[com.liferay.osb.testray.rest.api]=1.0.0
bundle.version[com.liferay.osb.testray.rest.client]=1.0.0
@@ -1558,7 +1558,7 @@ bundle.version[com.liferay.portal.classloader.tracker]=5.0.7
bundle.version[com.liferay.portal.cluster.multiple.sample.web]=1.0.0
bundle.version[com.liferay.portal.cluster.multiple]=5.0.48
bundle.version[com.liferay.portal.company.log.web.test]=1.0.0
-bundle.version[com.liferay.portal.company.log.web]=1.0.28
+bundle.version[com.liferay.portal.company.log.web]=1.0.29
bundle.version[com.liferay.portal.component.blacklist.impl]=5.0.23
bundle.version[com.liferay.portal.compound.session.id]=6.0.9
bundle.version[com.liferay.portal.configuration.cluster]=7.0.23
@@ -1588,7 +1588,7 @@ bundle.version[com.liferay.portal.crypto.hash.provider.message.digest]=1.0.0
bundle.version[com.liferay.portal.crypto.hash.spi]=1.0.0
bundle.version[com.liferay.portal.crypto.hash.test]=1.0.0
bundle.version[com.liferay.portal.custom.jsp.bag.api]=5.0.7
-bundle.version[com.liferay.portal.dao.db]=5.0.36
+bundle.version[com.liferay.portal.dao.db]=5.0.37
bundle.version[com.liferay.portal.dao.orm.custom.sql.api]=4.1.6
bundle.version[com.liferay.portal.dao.orm.custom.sql.impl]=4.0.16
bundle.version[com.liferay.portal.dao.test]=1.0.0
@@ -1615,7 +1615,7 @@ bundle.version[com.liferay.portal.hibernate.dependencies]=1.0.6
bundle.version[com.liferay.portal.html.parser.impl]=1.0.6
bundle.version[com.liferay.portal.http.impl]=1.0.13
bundle.version[com.liferay.portal.i18n.filter]=1.0.6
-bundle.version[com.liferay.portal.impl]=110.0.2
+bundle.version[com.liferay.portal.impl]=110.0.3
bundle.version[com.liferay.portal.inactive.request.handler]=4.0.19
bundle.version[com.liferay.portal.init.servlet.filter]=6.0.12
bundle.version[com.liferay.portal.instance.lifecycle.api]=5.1.3
@@ -1634,9 +1634,9 @@ bundle.version[com.liferay.portal.k8s.agent.impl]=3.0.44
bundle.version[com.liferay.portal.k8s.agent.test]=1.0.0
bundle.version[com.liferay.portal.kernel.instance.test]=1.0.0
bundle.version[com.liferay.portal.kernel.jsonwebservice.test]=1.0.0
-bundle.version[com.liferay.portal.kernel]=158.0.1
+bundle.version[com.liferay.portal.kernel]=159.0.1
bundle.version[com.liferay.portal.language.extender]=6.0.25
-bundle.version[com.liferay.portal.language.lang]=1.0.248
+bundle.version[com.liferay.portal.language.lang]=1.0.249
bundle.version[com.liferay.portal.language.override.api]=4.0.1
bundle.version[com.liferay.portal.language.override.service]=1.0.41
bundle.version[com.liferay.portal.language.override.test]=1.0.0
@@ -1724,16 +1724,16 @@ bundle.version[com.liferay.portal.remote.soap.extender.api]=5.0.7
bundle.version[com.liferay.portal.remote.soap.extender.impl]=5.0.26
bundle.version[com.liferay.portal.remote.soap.extender.test]=1.0.0
bundle.version[com.liferay.portal.reports.engine.api]=9.0.2
-bundle.version[com.liferay.portal.reports.engine.console.api]=11.0.1
+bundle.version[com.liferay.portal.reports.engine.console.api]=11.0.2
bundle.version[com.liferay.portal.reports.engine.console.jasper.test]=1.0.0
-bundle.version[com.liferay.portal.reports.engine.console.jasper]=4.0.34
-bundle.version[com.liferay.portal.reports.engine.console.service]=8.0.53
+bundle.version[com.liferay.portal.reports.engine.console.jasper]=4.0.36
+bundle.version[com.liferay.portal.reports.engine.console.service]=8.0.54
bundle.version[com.liferay.portal.reports.engine.console.test]=1.0.0
-bundle.version[com.liferay.portal.reports.engine.console.web]=5.0.63
+bundle.version[com.liferay.portal.reports.engine.console.web]=5.0.64
bundle.version[com.liferay.portal.repository]=1.0.4
bundle.version[com.liferay.portal.rules.engine.api]=7.0.2
bundle.version[com.liferay.portal.rules.engine.drools.test]=1.0.0
-bundle.version[com.liferay.portal.rules.engine.drools]=5.0.24
+bundle.version[com.liferay.portal.rules.engine.drools]=5.0.25
bundle.version[com.liferay.portal.rules.engine.sample.web]=6.0.24
bundle.version[com.liferay.portal.scheduler.multiple]=5.0.26
bundle.version[com.liferay.portal.scheduler.quartz.test]=1.0.0
@@ -1745,10 +1745,10 @@ bundle.version[com.liferay.portal.scripting.groovy.context.api]=4.0.10
bundle.version[com.liferay.portal.scripting.groovy]=6.0.14
bundle.version[com.liferay.portal.scripting.impl]=4.0.14
bundle.version[com.liferay.portal.search.admin.web.test]=1.0.0
-bundle.version[com.liferay.portal.search.admin.web]=4.0.77
+bundle.version[com.liferay.portal.search.admin.web]=4.0.78
bundle.version[com.liferay.portal.search.api]=17.1.1
bundle.version[com.liferay.portal.search.elasticsearch.cross.cluster.replication.impl]=8.0.18
-bundle.version[com.liferay.portal.search.elasticsearch.monitoring.web]=2.0.26
+bundle.version[com.liferay.portal.search.elasticsearch.monitoring.web]=2.0.27
bundle.version[com.liferay.portal.search.elasticsearch7.api]=8.0.2
bundle.version[com.liferay.portal.search.elasticsearch7.impl]=6.0.126
bundle.version[com.liferay.portal.search.engine.adapter.api]=5.7.1
@@ -1762,7 +1762,7 @@ bundle.version[com.liferay.portal.search.rest.impl]=1.0.58
bundle.version[com.liferay.portal.search.rest.test]=1.0.0
bundle.version[com.liferay.portal.search.similar.results.web.spi]=4.0.2
bundle.version[com.liferay.portal.search.similar.results.web.test]=1.0.0
-bundle.version[com.liferay.portal.search.similar.results.web]=3.0.55
+bundle.version[com.liferay.portal.search.similar.results.web]=3.0.56
bundle.version[com.liferay.portal.search.solr8.api]=5.0.2
bundle.version[com.liferay.portal.search.solr8.impl]=5.0.38
bundle.version[com.liferay.portal.search.spi]=14.0.2
@@ -1770,16 +1770,16 @@ bundle.version[com.liferay.portal.search.test.util]=11.1.6
bundle.version[com.liferay.portal.search.test]=1.0.0
bundle.version[com.liferay.portal.search.tuning.rankings.api]=1.1.1
bundle.version[com.liferay.portal.search.tuning.rankings.web.test]=1.0.0
-bundle.version[com.liferay.portal.search.tuning.rankings.web]=3.0.100
+bundle.version[com.liferay.portal.search.tuning.rankings.web]=3.0.101
bundle.version[com.liferay.portal.search.tuning.synonyms.api]=2.1.4
bundle.version[com.liferay.portal.search.tuning.synonyms.web.test]=1.0.0
-bundle.version[com.liferay.portal.search.tuning.synonyms.web]=3.0.77
+bundle.version[com.liferay.portal.search.tuning.synonyms.web]=3.0.78
bundle.version[com.liferay.portal.search.tuning.web.api]=3.0.8
-bundle.version[com.liferay.portal.search.tuning.web]=3.0.13
+bundle.version[com.liferay.portal.search.tuning.web]=3.0.14
bundle.version[com.liferay.portal.search.web.api]=12.2.1
bundle.version[com.liferay.portal.search.web.test]=1.0.0
-bundle.version[com.liferay.portal.search.web]=6.0.149
-bundle.version[com.liferay.portal.search]=8.0.108
+bundle.version[com.liferay.portal.search.web]=6.0.150
+bundle.version[com.liferay.portal.search]=8.0.109
bundle.version[com.liferay.portal.security.antisamy]=6.0.40
bundle.version[com.liferay.portal.security.api]=2.0.10
bundle.version[com.liferay.portal.security.audit.api]=8.1.1
@@ -1814,7 +1814,7 @@ bundle.version[com.liferay.portal.security.permission.test]=1.0.0
bundle.version[com.liferay.portal.security.script.management.api]=3.0.3
bundle.version[com.liferay.portal.security.script.management.test.util]=2.0.1
bundle.version[com.liferay.portal.security.script.management.test]=1.0.0
-bundle.version[com.liferay.portal.security.script.management.web]=1.0.20
+bundle.version[com.liferay.portal.security.script.management.web]=1.0.21
bundle.version[com.liferay.portal.security.service.access.policy.api]=9.0.1
bundle.version[com.liferay.portal.security.service.access.policy.service]=6.0.51
bundle.version[com.liferay.portal.security.service.access.policy.test]=1.0.0
@@ -1925,17 +1925,17 @@ bundle.version[com.liferay.portal.webdav.test]=1.0.0
bundle.version[com.liferay.portal.weblogic.support]=6.0.9
bundle.version[com.liferay.portal.webserver.test]=1.0.0
bundle.version[com.liferay.portal.workflow.api]=12.0.2
-bundle.version[com.liferay.portal.workflow.instance.tracker.web]=1.0.50
+bundle.version[com.liferay.portal.workflow.instance.tracker.web]=1.0.51
bundle.version[com.liferay.portal.workflow.kaleo.api]=18.0.2
bundle.version[com.liferay.portal.workflow.kaleo.definition.api]=13.0.3
bundle.version[com.liferay.portal.workflow.kaleo.definition.impl]=6.0.33
bundle.version[com.liferay.portal.workflow.kaleo.demo.data.creator.api]=2.0.6
bundle.version[com.liferay.portal.workflow.kaleo.demo.data.creator.impl]=2.0.19
-bundle.version[com.liferay.portal.workflow.kaleo.designer.web]=5.0.146
+bundle.version[com.liferay.portal.workflow.kaleo.designer.web]=5.0.147
bundle.version[com.liferay.portal.workflow.kaleo.forms.api]=8.0.6
-bundle.version[com.liferay.portal.workflow.kaleo.forms.service]=5.0.56
+bundle.version[com.liferay.portal.workflow.kaleo.forms.service]=5.0.57
bundle.version[com.liferay.portal.workflow.kaleo.forms.test]=1.0.0
-bundle.version[com.liferay.portal.workflow.kaleo.forms.web]=5.0.99
+bundle.version[com.liferay.portal.workflow.kaleo.forms.web]=5.0.100
bundle.version[com.liferay.portal.workflow.kaleo.metrics.integration]=2.0.31
bundle.version[com.liferay.portal.workflow.kaleo.runtime.api]=16.1.1
bundle.version[com.liferay.portal.workflow.kaleo.runtime.form.impl]=4.0.9
@@ -1949,23 +1949,23 @@ bundle.version[com.liferay.portal.workflow.metrics.api]=15.0.5
bundle.version[com.liferay.portal.workflow.metrics.demo.data.creator.api]=2.0.17
bundle.version[com.liferay.portal.workflow.metrics.demo.data.creator.impl]=2.0.20
bundle.version[com.liferay.portal.workflow.metrics.demo]=2.0.24
-bundle.version[com.liferay.portal.workflow.metrics.rest.api]=17.3.11
-bundle.version[com.liferay.portal.workflow.metrics.rest.client]=3.0.40
-bundle.version[com.liferay.portal.workflow.metrics.rest.impl]=3.0.99
-bundle.version[com.liferay.portal.workflow.metrics.rest.spi]=4.0.10
+bundle.version[com.liferay.portal.workflow.metrics.rest.api]=17.3.12
+bundle.version[com.liferay.portal.workflow.metrics.rest.client]=3.0.41
+bundle.version[com.liferay.portal.workflow.metrics.rest.impl]=3.0.100
+bundle.version[com.liferay.portal.workflow.metrics.rest.spi]=4.0.11
bundle.version[com.liferay.portal.workflow.metrics.rest.test]=1.0.0
-bundle.version[com.liferay.portal.workflow.metrics.service]=3.0.82
+bundle.version[com.liferay.portal.workflow.metrics.service]=3.0.83
bundle.version[com.liferay.portal.workflow.metrics.sla.api]=7.0.9
bundle.version[com.liferay.portal.workflow.metrics.test]=1.0.0
-bundle.version[com.liferay.portal.workflow.metrics.web]=3.0.94
-bundle.version[com.liferay.portal.workflow.taglib]=2.0.31
-bundle.version[com.liferay.portal.workflow.task.web]=5.0.85
+bundle.version[com.liferay.portal.workflow.metrics.web]=3.0.95
+bundle.version[com.liferay.portal.workflow.taglib]=2.0.32
+bundle.version[com.liferay.portal.workflow.task.web]=5.0.86
bundle.version[com.liferay.portal.workflow.test]=1.0.0
bundle.version[com.liferay.portal.workflow.uad.test]=1.0.0
bundle.version[com.liferay.portal.workflow.uad]=6.0.13
bundle.version[com.liferay.portal.workflow.web]=4.0.91
bundle.version[com.liferay.portal.zip]=1.0.2
-bundle.version[com.liferay.portlet.configuration.css.web]=6.0.70
+bundle.version[com.liferay.portlet.configuration.css.web]=6.0.71
bundle.version[com.liferay.portlet.configuration.icon.close]=6.0.13
bundle.version[com.liferay.portlet.configuration.icon.edit.defaults]=6.0.10
bundle.version[com.liferay.portlet.configuration.icon.edit.guest]=6.0.10
@@ -1979,7 +1979,7 @@ bundle.version[com.liferay.portlet.configuration.icon.refresh]=6.0.12
bundle.version[com.liferay.portlet.configuration.sharing.web]=6.0.30
bundle.version[com.liferay.portlet.configuration.test]=1.0.0
bundle.version[com.liferay.portlet.configuration.toolbar.contributor.locator.impl]=4.0.11
-bundle.version[com.liferay.portlet.configuration.web]=5.0.90
+bundle.version[com.liferay.portlet.configuration.web]=5.0.91
bundle.version[com.liferay.portlet.dependency.factory.impl]=4.0.11
bundle.version[com.liferay.portlet.display.template.api]=5.0.1
bundle.version[com.liferay.portlet.display.template.impl]=4.0.24
@@ -1996,24 +1996,24 @@ bundle.version[com.liferay.poshi.runner.resources]=1.0.18
bundle.version[com.liferay.poshi.runner]=1.0.497
bundle.version[com.liferay.product.navigation.applications.menu.api]=2.0.10
bundle.version[com.liferay.product.navigation.applications.menu.web.test]=1.0.0
-bundle.version[com.liferay.product.navigation.applications.menu.web]=2.0.73
+bundle.version[com.liferay.product.navigation.applications.menu.web]=2.0.74
bundle.version[com.liferay.product.navigation.control.menu.api]=12.0.2
bundle.version[com.liferay.product.navigation.control.menu.impl]=4.0.19
bundle.version[com.liferay.product.navigation.control.menu.test]=1.0.0
bundle.version[com.liferay.product.navigation.control.menu.theme.contributor]=6.0.43
-bundle.version[com.liferay.product.navigation.control.menu.web]=6.0.102
+bundle.version[com.liferay.product.navigation.control.menu.web]=6.0.103
bundle.version[com.liferay.product.navigation.control.panel]=6.0.15
bundle.version[com.liferay.product.navigation.personal.menu.api]=5.1.3
bundle.version[com.liferay.product.navigation.personal.menu.web]=3.0.38
bundle.version[com.liferay.product.navigation.product.menu.api]=8.0.4
bundle.version[com.liferay.product.navigation.product.menu.impl]=2.0.13
bundle.version[com.liferay.product.navigation.product.menu.theme.contributor]=6.0.28
-bundle.version[com.liferay.product.navigation.product.menu.web]=6.0.119
+bundle.version[com.liferay.product.navigation.product.menu.web]=6.0.120
bundle.version[com.liferay.product.navigation.simulation.api]=5.0.6
-bundle.version[com.liferay.product.navigation.simulation.device]=6.0.62
+bundle.version[com.liferay.product.navigation.simulation.device]=6.0.63
bundle.version[com.liferay.product.navigation.simulation.web]=7.0.40
-bundle.version[com.liferay.product.navigation.site.administration]=6.0.55
-bundle.version[com.liferay.product.navigation.taglib]=6.0.79
+bundle.version[com.liferay.product.navigation.site.administration]=6.0.56
+bundle.version[com.liferay.product.navigation.taglib]=6.0.80
bundle.version[com.liferay.product.navigation.user.personal.bar.web]=6.0.36
bundle.version[com.liferay.push.notifications.api]=8.0.1
bundle.version[com.liferay.push.notifications.sender.apple]=5.0.28
@@ -2024,12 +2024,12 @@ bundle.version[com.liferay.push.notifications.service]=5.0.40
bundle.version[com.liferay.push.notifications.test]=1.0.0
bundle.version[com.liferay.push.notifications.web]=5.0.31
bundle.version[com.liferay.questions.test]=1.0.0
-bundle.version[com.liferay.questions.web]=2.0.125
+bundle.version[com.liferay.questions.web]=2.0.126
bundle.version[com.liferay.ratings.analytics]=4.0.12
bundle.version[com.liferay.ratings.api]=6.0.6
bundle.version[com.liferay.ratings.page.ratings.web]=6.0.19
bundle.version[com.liferay.ratings.service]=5.0.14
-bundle.version[com.liferay.ratings.taglib]=3.1.37
+bundle.version[com.liferay.ratings.taglib]=3.1.38
bundle.version[com.liferay.ratings.test.util]=3.0.6
bundle.version[com.liferay.ratings.test]=1.0.0
bundle.version[com.liferay.reading.time.api]=9.0.1
@@ -2041,7 +2041,7 @@ bundle.version[com.liferay.reading.time.web]=4.0.21
bundle.version[com.liferay.redirect.api]=13.0.1
bundle.version[com.liferay.redirect.service]=2.0.80
bundle.version[com.liferay.redirect.test]=1.0.0
-bundle.version[com.liferay.redirect.web]=2.0.89
+bundle.version[com.liferay.redirect.web]=2.0.90
bundle.version[com.liferay.release.feature.flag.api]=1.1.2
bundle.version[com.liferay.release.feature.flag.web]=1.0.18
bundle.version[com.liferay.release.util]=1.0.1
@@ -2055,7 +2055,7 @@ bundle.version[com.liferay.roles.admin.demo.data.creator.api]=5.0.6
bundle.version[com.liferay.roles.admin.demo.data.creator.impl]=5.0.10
bundle.version[com.liferay.roles.admin.impl]=5.0.22
bundle.version[com.liferay.roles.admin.test]=1.0.0
-bundle.version[com.liferay.roles.admin.web]=5.0.117
+bundle.version[com.liferay.roles.admin.web]=5.0.118
bundle.version[com.liferay.roles.item.selector.api]=4.1.7
bundle.version[com.liferay.roles.item.selector.web]=4.0.20
bundle.version[com.liferay.roles.selector.web]=5.0.31
@@ -2070,47 +2070,47 @@ bundle.version[com.liferay.rss.web]=7.0.52
bundle.version[com.liferay.ruby.gems]=1.0.4
bundle.version[com.liferay.salesforce.connector]=1.0.15
bundle.version[com.liferay.saml.addon.keep.alive.web]=5.0.26
-bundle.version[com.liferay.saml.admin.rest.api]=1.1.6
-bundle.version[com.liferay.saml.admin.rest.client]=1.0.12
-bundle.version[com.liferay.saml.admin.rest.impl]=1.0.23
-bundle.version[com.liferay.saml.api]=10.0.1
-bundle.version[com.liferay.saml.impl]=5.0.53
-bundle.version[com.liferay.saml.opensaml.integration]=6.2.23
+bundle.version[com.liferay.saml.admin.rest.api]=1.1.7
+bundle.version[com.liferay.saml.admin.rest.client]=1.0.13
+bundle.version[com.liferay.saml.admin.rest.impl]=1.0.24
+bundle.version[com.liferay.saml.api]=10.0.2
+bundle.version[com.liferay.saml.impl]=5.0.54
+bundle.version[com.liferay.saml.opensaml.integration]=6.2.24
bundle.version[com.liferay.saml.persistence.api]=13.0.1
-bundle.version[com.liferay.saml.persistence.service]=5.0.62
+bundle.version[com.liferay.saml.persistence.service]=5.0.63
bundle.version[com.liferay.saml.persistence.test]=1.0.0
bundle.version[com.liferay.saml.test]=1.0.0
-bundle.version[com.liferay.saml.web]=5.0.80
+bundle.version[com.liferay.saml.web]=5.0.81
bundle.version[com.liferay.sass.compiler.api]=2.0.2
bundle.version[com.liferay.sass.compiler.dart]=1.0.3
bundle.version[com.liferay.saved.content.api]=3.1.1
bundle.version[com.liferay.saved.content.service]=1.0.12
-bundle.version[com.liferay.saved.content.taglib]=1.0.14
+bundle.version[com.liferay.saved.content.taglib]=1.0.15
bundle.version[com.liferay.saved.content.test]=1.0.0
bundle.version[com.liferay.saved.content.web]=1.0.10
bundle.version[com.liferay.scim.configuration.web.test]=1.0.0
-bundle.version[com.liferay.scim.configuration.web]=1.0.15
-bundle.version[com.liferay.scim.rest.api]=4.0.0
-bundle.version[com.liferay.scim.rest.client]=1.0.11
-bundle.version[com.liferay.scim.rest.impl]=1.0.20
+bundle.version[com.liferay.scim.configuration.web]=1.0.16
+bundle.version[com.liferay.scim.rest.api]=4.0.1
+bundle.version[com.liferay.scim.rest.client]=1.0.12
+bundle.version[com.liferay.scim.rest.impl]=1.0.21
bundle.version[com.liferay.scim.rest.test]=1.0.0
bundle.version[com.liferay.scr.reference.dynamic.greedy.test.api]=1.0.0
bundle.version[com.liferay.scr.reference.dynamic.greedy.test.impl]=1.0.0
bundle.version[com.liferay.scr.reference.dynamic.greedy.test.test]=1.0.0
bundle.version[com.liferay.search.experiences.api]=31.0.1
-bundle.version[com.liferay.search.experiences.rest.api]=13.1.1
-bundle.version[com.liferay.search.experiences.rest.client]=3.0.33
-bundle.version[com.liferay.search.experiences.rest.impl]=3.0.71
+bundle.version[com.liferay.search.experiences.rest.api]=13.1.2
+bundle.version[com.liferay.search.experiences.rest.client]=3.0.34
+bundle.version[com.liferay.search.experiences.rest.impl]=3.0.72
bundle.version[com.liferay.search.experiences.rest.test]=1.0.0
-bundle.version[com.liferay.search.experiences.service]=3.0.78
+bundle.version[com.liferay.search.experiences.service]=3.0.79
bundle.version[com.liferay.search.experiences.test]=1.0.0
-bundle.version[com.liferay.search.experiences.web]=3.0.80
+bundle.version[com.liferay.search.experiences.web]=3.0.81
bundle.version[com.liferay.segments.api]=28.0.1
bundle.version[com.liferay.segments.asah.connector.test]=1.0.0
-bundle.version[com.liferay.segments.asah.connector]=3.0.64
-bundle.version[com.liferay.segments.asah.rest.api]=10.2.6
-bundle.version[com.liferay.segments.asah.rest.client]=3.0.28
-bundle.version[com.liferay.segments.asah.rest.impl]=3.0.67
+bundle.version[com.liferay.segments.asah.connector]=3.0.65
+bundle.version[com.liferay.segments.asah.rest.api]=10.2.7
+bundle.version[com.liferay.segments.asah.rest.client]=3.0.29
+bundle.version[com.liferay.segments.asah.rest.impl]=3.0.68
bundle.version[com.liferay.segments.asah.rest.test]=1.0.0
bundle.version[com.liferay.segments.content.targeting.upgrade.test]=1.0.0
bundle.version[com.liferay.segments.content.targeting.upgrade]=3.0.26
@@ -2119,14 +2119,14 @@ bundle.version[com.liferay.segments.context.vocabulary.test]=1.0.0
bundle.version[com.liferay.segments.context.vocabulary]=2.0.31
bundle.version[com.liferay.segments.dxp.web]=1.0.14
bundle.version[com.liferay.segments.experiment.test]=1.0.0
-bundle.version[com.liferay.segments.experiment.web]=3.0.102
+bundle.version[com.liferay.segments.experiment.web]=3.0.103
bundle.version[com.liferay.segments.item.selector.api]=1.2.2
bundle.version[com.liferay.segments.item.selector.web]=1.0.8
bundle.version[com.liferay.segments.service]=3.0.111
-bundle.version[com.liferay.segments.simulation.web]=3.0.62
+bundle.version[com.liferay.segments.simulation.web]=3.0.63
bundle.version[com.liferay.segments.test.util]=6.0.2
bundle.version[com.liferay.segments.test]=1.0.0
-bundle.version[com.liferay.segments.web]=3.0.136
+bundle.version[com.liferay.segments.web]=3.0.137
bundle.version[com.liferay.semantic.versioning.test]=1.0.0
bundle.version[com.liferay.server.admin.web.test]=1.0.0
bundle.version[com.liferay.server.admin.web]=5.0.93
@@ -2171,8 +2171,8 @@ bundle.version[com.liferay.sharepoint.rest.oauth2.api]=7.0.1
bundle.version[com.liferay.sharepoint.rest.oauth2.service]=5.0.35
bundle.version[com.liferay.sharepoint.rest.oauth2.test]=1.0.0
bundle.version[com.liferay.sharepoint.rest.oauth2.web]=3.0.13
-bundle.version[com.liferay.sharepoint.rest.repository]=5.0.33
-bundle.version[com.liferay.sharepoint.soap.repository]=5.0.23
+bundle.version[com.liferay.sharepoint.rest.repository]=5.0.34
+bundle.version[com.liferay.sharepoint.soap.repository]=5.0.24
bundle.version[com.liferay.sharing.api]=11.1.1
bundle.version[com.liferay.sharing.blogs.test]=1.0.0
bundle.version[com.liferay.sharing.blogs]=3.0.10
@@ -2183,17 +2183,17 @@ bundle.version[com.liferay.sharing.notifications]=3.0.28
bundle.version[com.liferay.sharing.search.test]=1.0.0
bundle.version[com.liferay.sharing.search]=3.0.10
bundle.version[com.liferay.sharing.service]=3.0.53
-bundle.version[com.liferay.sharing.taglib]=3.0.47
+bundle.version[com.liferay.sharing.taglib]=3.0.48
bundle.version[com.liferay.sharing.test.util]=3.0.11
bundle.version[com.liferay.sharing.test]=1.0.0
-bundle.version[com.liferay.sharing.web]=3.0.78
+bundle.version[com.liferay.sharing.web]=3.0.79
bundle.version[com.liferay.shielded.container.api]=1.0.5
bundle.version[com.liferay.shielded.container.impl]=1.0.13
bundle.version[com.liferay.site.admin.test]=1.0.0
-bundle.version[com.liferay.site.admin.web]=5.0.129
+bundle.version[com.liferay.site.admin.web]=5.0.130
bundle.version[com.liferay.site.api]=23.0.2
bundle.version[com.liferay.site.cms.site.initializer.test]=1.0.0
-bundle.version[com.liferay.site.cms.site.initializer]=1.0.4
+bundle.version[com.liferay.site.cms.site.initializer]=1.0.5
bundle.version[com.liferay.site.demo.data.creator.api]=5.0.6
bundle.version[com.liferay.site.demo.data.creator.impl]=5.0.9
bundle.version[com.liferay.site.impl]=4.0.38
@@ -2203,49 +2203,49 @@ bundle.version[com.liferay.site.initializer.extender.test.bundle.1]=1.0.0
bundle.version[com.liferay.site.initializer.extender.test.bundle.2]=1.0.0
bundle.version[com.liferay.site.initializer.extender.test]=1.0.0
bundle.version[com.liferay.site.initializer.extender.web]=1.0.16
-bundle.version[com.liferay.site.initializer.extender]=1.0.126
+bundle.version[com.liferay.site.initializer.extender]=1.0.127
bundle.version[com.liferay.site.initializer.jobzz]=1.0.0
bundle.version[com.liferay.site.initializer.liferay.marketplace]=1.0.0
bundle.version[com.liferay.site.initializer.masterclass]=1.0.72
bundle.version[com.liferay.site.initializer.team.extranet]=1.0.0
-bundle.version[com.liferay.site.initializer.teaser.showcase]=1.0.5
+bundle.version[com.liferay.site.initializer.teaser.showcase]=1.0.6
bundle.version[com.liferay.site.initializer.welcome.test]=1.0.0
bundle.version[com.liferay.site.initializer.welcome]=1.0.25
bundle.version[com.liferay.site.item.selector.api]=7.0.2
bundle.version[com.liferay.site.item.selector.web]=6.0.41
bundle.version[com.liferay.site.memberships.api]=2.0.6
bundle.version[com.liferay.site.memberships.test]=1.0.0
-bundle.version[com.liferay.site.memberships.web]=5.0.80
+bundle.version[com.liferay.site.memberships.web]=5.0.81
bundle.version[com.liferay.site.my.sites.web]=6.0.47
bundle.version[com.liferay.site.navigation.admin.api]=4.0.6
-bundle.version[com.liferay.site.navigation.admin.web]=4.0.114
+bundle.version[com.liferay.site.navigation.admin.web]=4.0.115
bundle.version[com.liferay.site.navigation.api]=10.1.1
bundle.version[com.liferay.site.navigation.breadcrumb.web.test]=1.0.0
bundle.version[com.liferay.site.navigation.breadcrumb.web]=7.0.39
bundle.version[com.liferay.site.navigation.directory.web]=6.0.32
bundle.version[com.liferay.site.navigation.item.selector.api]=4.0.7
-bundle.version[com.liferay.site.navigation.item.selector.web]=4.0.62
+bundle.version[com.liferay.site.navigation.item.selector.web]=4.0.63
bundle.version[com.liferay.site.navigation.language.api]=5.0.7
bundle.version[com.liferay.site.navigation.language.web.test]=1.0.0
bundle.version[com.liferay.site.navigation.language.web]=7.0.42
bundle.version[com.liferay.site.navigation.menu.item.api]=5.1.3
bundle.version[com.liferay.site.navigation.menu.item.asset.vocabulary.test]=1.0.0
-bundle.version[com.liferay.site.navigation.menu.item.asset.vocabulary]=1.0.36
+bundle.version[com.liferay.site.navigation.menu.item.asset.vocabulary]=1.0.37
bundle.version[com.liferay.site.navigation.menu.item.display.page.test]=1.0.0
-bundle.version[com.liferay.site.navigation.menu.item.display.page]=1.0.75
+bundle.version[com.liferay.site.navigation.menu.item.display.page]=1.0.76
bundle.version[com.liferay.site.navigation.menu.item.layout.test]=1.0.0
-bundle.version[com.liferay.site.navigation.menu.item.layout]=4.0.47
+bundle.version[com.liferay.site.navigation.menu.item.layout]=4.0.48
bundle.version[com.liferay.site.navigation.menu.item.node]=4.0.14
bundle.version[com.liferay.site.navigation.menu.item.url.test]=1.0.0
bundle.version[com.liferay.site.navigation.menu.item.url]=4.0.16
-bundle.version[com.liferay.site.navigation.menu.web]=6.0.71
+bundle.version[com.liferay.site.navigation.menu.web]=6.0.72
bundle.version[com.liferay.site.navigation.service]=4.0.56
bundle.version[com.liferay.site.navigation.site.map.web.test]=1.0.0
bundle.version[com.liferay.site.navigation.site.map.web]=6.0.33
bundle.version[com.liferay.site.navigation.taglib]=7.1.5
bundle.version[com.liferay.site.navigation.test]=1.0.0
bundle.version[com.liferay.site.service]=4.0.38
-bundle.version[com.liferay.site.sitemap.web]=1.0.16
+bundle.version[com.liferay.site.sitemap.web]=1.0.17
bundle.version[com.liferay.site.taglib]=5.0.3
bundle.version[com.liferay.site.teams.item.selector.api]=1.0.3
bundle.version[com.liferay.site.teams.item.selector.web]=1.0.4
@@ -2276,13 +2276,13 @@ bundle.version[com.liferay.staging.configuration.web]=5.0.53
bundle.version[com.liferay.staging.impl]=4.0.24
bundle.version[com.liferay.staging.portlet.data.handler]=7.0.7
bundle.version[com.liferay.staging.processes.web]=5.0.66
-bundle.version[com.liferay.staging.taglib]=8.0.27
+bundle.version[com.liferay.staging.taglib]=8.0.28
bundle.version[com.liferay.staging.test]=1.0.0
bundle.version[com.liferay.style.book.api]=9.1.1
bundle.version[com.liferay.style.book.service]=2.0.55
bundle.version[com.liferay.style.book.test]=1.0.0
bundle.version[com.liferay.style.book.web.test]=1.0.0
-bundle.version[com.liferay.style.book.web]=2.0.121
+bundle.version[com.liferay.style.book.web]=2.0.122
bundle.version[com.liferay.subscription.api]=8.0.1
bundle.version[com.liferay.subscription.service]=4.0.44
bundle.version[com.liferay.subscription.test.util]=4.0.1
@@ -2290,10 +2290,10 @@ bundle.version[com.liferay.subscription.test]=1.0.0
bundle.version[com.liferay.subscription.web]=4.0.38
bundle.version[com.liferay.template.api]=6.0.1
bundle.version[com.liferay.template.service]=1.0.57
-bundle.version[com.liferay.template.taglib]=1.1.10
+bundle.version[com.liferay.template.taglib]=1.1.11
bundle.version[com.liferay.template.test.util]=1.0.3
bundle.version[com.liferay.template.test]=1.0.0
-bundle.version[com.liferay.template.web]=1.0.97
+bundle.version[com.liferay.template.web]=1.0.98
bundle.version[com.liferay.testray.rest.api]=1.0.0
bundle.version[com.liferay.testray.rest.impl]=1.0.0
bundle.version[com.liferay.text.localizer.address.api]=4.0.7
@@ -2307,7 +2307,7 @@ bundle.version[com.liferay.translation.translator.aws]=1.0.22
bundle.version[com.liferay.translation.translator.azure]=1.0.16
bundle.version[com.liferay.translation.translator.deepl]=1.0.14
bundle.version[com.liferay.translation.translator.google.cloud]=1.0.21
-bundle.version[com.liferay.translation.web]=2.0.114
+bundle.version[com.liferay.translation.web]=2.0.115
bundle.version[com.liferay.trash.api]=10.0.2
bundle.version[com.liferay.trash.service]=5.0.45
bundle.version[com.liferay.trash.taglib]=6.0.32
@@ -2343,7 +2343,7 @@ bundle.version[com.liferay.users.admin.test.util]=7.0.1
bundle.version[com.liferay.users.admin.test]=1.0.0
bundle.version[com.liferay.users.admin.uad.test]=1.0.0
bundle.version[com.liferay.users.admin.uad]=6.0.12
-bundle.version[com.liferay.users.admin.web]=11.0.25
+bundle.version[com.liferay.users.admin.web]=11.0.26
bundle.version[com.liferay.util.bridges]=10.0.4
bundle.version[com.liferay.util.java]=20.0.1
bundle.version[com.liferay.util.slf4j]=6.0.12
diff --git a/modules/sdk/ant-secure-property/build.gradle b/modules/sdk/ant-secure-property/build.gradle
index ac6b4cf9c294e1..beb52fc60091a4 100644
--- a/modules/sdk/ant-secure-property/build.gradle
+++ b/modules/sdk/ant-secure-property/build.gradle
@@ -8,7 +8,7 @@ clean {
}
dependencies {
- compileOnly group: "com.liferay", name: "com.liferay.jenkins.results.parser", version: "1.0.1548"
+ compileOnly group: "com.liferay", name: "com.liferay.jenkins.results.parser", version: "1.0.1549"
compileOnly group: "org.apache.ant", name: "ant", transitive: false, version: "1.10.14"
}
diff --git a/modules/sdk/gradle-plugins-workspace/src/main/resources/com/liferay/gradle/plugins/workspace/internal/client/extension/client-extension.properties b/modules/sdk/gradle-plugins-workspace/src/main/resources/com/liferay/gradle/plugins/workspace/internal/client/extension/client-extension.properties
index 1e82667a62e9a0..dc3c0b9546172f 100644
--- a/modules/sdk/gradle-plugins-workspace/src/main/resources/com/liferay/gradle/plugins/workspace/internal/client/extension/client-extension.properties
+++ b/modules/sdk/gradle-plugins-workspace/src/main/resources/com/liferay/gradle/plugins/workspace/internal/client/extension/client-extension.properties
@@ -7,6 +7,8 @@ commercePaymentIntegration.classification=microservice
commercePaymentIntegration.pid=com.liferay.commerce.payment.internal.configuration.FunctionCommercePaymentIntegrationConfiguration
commerceShippingEngine.classification=microservice
commerceShippingEngine.pid=com.liferay.commerce.shipping.engine.internal.configuration.FunctionCommerceShippingEngineConfiguration
+commerceTaxEngine.classification=microservice
+commerceTaxEngine.pid=com.liferay.commerce.tax.engine.internal.configuration.FunctionCommerceTaxEngineConfiguration
customElement.classification=frontend
customElement.pid=com.liferay.client.extension.type.configuration.CETConfiguration
editorConfigContributor.classification=frontend
diff --git a/modules/test/jenkins-results-parser/bnd.bnd b/modules/test/jenkins-results-parser/bnd.bnd
index de0c27fcad422c..fc803cb7c1956a 100644
--- a/modules/test/jenkins-results-parser/bnd.bnd
+++ b/modules/test/jenkins-results-parser/bnd.bnd
@@ -1,3 +1,3 @@
Bundle-Name: Liferay Jenkins Results Parser
Bundle-SymbolicName: com.liferay.jenkins.results.parser
-Bundle-Version: 1.0.1549
\ No newline at end of file
+Bundle-Version: 1.0.1550
\ No newline at end of file
diff --git a/modules/test/jenkins-results-parser/src/main/java/com/liferay/jenkins/results/parser/GitUtil.java b/modules/test/jenkins-results-parser/src/main/java/com/liferay/jenkins/results/parser/GitUtil.java
index 6c3df0880ce0af..1f7b4156fb26a6 100644
--- a/modules/test/jenkins-results-parser/src/main/java/com/liferay/jenkins/results/parser/GitUtil.java
+++ b/modules/test/jenkins-results-parser/src/main/java/com/liferay/jenkins/results/parser/GitUtil.java
@@ -103,10 +103,22 @@ public static String getPublicRepositoryName(String repositoryName) {
public static RemoteGitBranch getRemoteGitBranch(
String remoteGitBranchName, File workingDirectory, String remoteURL) {
+ return getRemoteGitBranch(
+ remoteGitBranchName, workingDirectory, remoteURL, true);
+ }
+
+ public static RemoteGitBranch getRemoteGitBranch(
+ String remoteGitBranchName, File workingDirectory, String remoteURL,
+ boolean required) {
+
RemoteGitRef remoteGitRef = getRemoteGitRef(
- remoteGitBranchName, workingDirectory, remoteURL);
+ remoteGitBranchName, workingDirectory, remoteURL, required);
if (!(remoteGitRef instanceof RemoteGitBranch)) {
+ if (!required) {
+ return null;
+ }
+
throw new RuntimeException(
JenkinsResultsParserUtil.combine(
"Unable to find remote Git branch ", remoteGitBranchName,
@@ -134,6 +146,12 @@ public static List
getRemoteGitBranches(
}
public static RemoteGitRef getRemoteGitRef(String gitHubURL) {
+ return getRemoteGitRef(gitHubURL, true);
+ }
+
+ public static RemoteGitRef getRemoteGitRef(
+ String gitHubURL, boolean required) {
+
Matcher matcher = _gitHubRefURLPattern.matcher(gitHubURL);
if (!matcher.find()) {
@@ -145,12 +163,21 @@ public static RemoteGitRef getRemoteGitRef(String gitHubURL) {
matcher.group("gitRepositoryName"), ".git");
return getRemoteGitRef(
- matcher.group("refName"), new File("."), remoteGitRepositoryURL);
+ matcher.group("refName"), new File("."), remoteGitRepositoryURL,
+ required);
}
public static RemoteGitRef getRemoteGitRef(
String remoteGitBranchName, File workingDirectory, String remoteURL) {
+ return getRemoteGitRef(
+ remoteGitBranchName, workingDirectory, remoteURL, true);
+ }
+
+ public static RemoteGitRef getRemoteGitRef(
+ String remoteGitBranchName, File workingDirectory, String remoteURL,
+ boolean required) {
+
String key = JenkinsResultsParserUtil.combine(
remoteURL, "#", remoteGitBranchName);
@@ -159,6 +186,11 @@ public static RemoteGitRef getRemoteGitRef(
RemoteGitRef gitHubRemoteGitRef = _gitHubRemoteGitRefs.get(key);
if (gitHubRemoteGitRef != null) {
+ System.out.println(
+ JenkinsResultsParserUtil.combine(
+ "Using cached Git ref from ", remoteURL, " for ",
+ remoteGitBranchName));
+
return gitHubRemoteGitRef;
}
}
@@ -201,6 +233,10 @@ public static RemoteGitRef getRemoteGitRef(
}
if ((remoteGitRefs == null) || remoteGitRefs.isEmpty()) {
+ if (!required) {
+ return null;
+ }
+
throw new RuntimeException(
JenkinsResultsParserUtil.combine(
"Unable to find remote Git ref ", remoteGitBranchName,
diff --git a/modules/test/jenkins-results-parser/src/main/java/com/liferay/jenkins/results/parser/GitWorkingDirectory.java b/modules/test/jenkins-results-parser/src/main/java/com/liferay/jenkins/results/parser/GitWorkingDirectory.java
index c27e8436863e10..0f75c7561cb4ee 100644
--- a/modules/test/jenkins-results-parser/src/main/java/com/liferay/jenkins/results/parser/GitWorkingDirectory.java
+++ b/modules/test/jenkins-results-parser/src/main/java/com/liferay/jenkins/results/parser/GitWorkingDirectory.java
@@ -1767,13 +1767,11 @@ public RemoteGitBranch getRemoteGitBranch(
public RemoteGitBranch getRemoteGitBranch(
String remoteGitBranchName, String remoteURL, boolean required) {
- List remoteGitBranches = getRemoteGitBranches(
- remoteGitBranchName, remoteURL);
+ RemoteGitBranch remoteGitBranch = GitUtil.getRemoteGitBranch(
+ remoteGitBranchName, getWorkingDirectory(), remoteURL, required);
- for (RemoteGitBranch remoteGitBranch : remoteGitBranches) {
- if (remoteGitBranchName.equals(remoteGitBranch.getName())) {
- return remoteGitBranch;
- }
+ if (remoteGitBranch != null) {
+ return remoteGitBranch;
}
if (required) {
@@ -1915,13 +1913,11 @@ public RemoteGitRef getRemoteGitRef(
public RemoteGitRef getRemoteGitRef(
String remoteGitRefName, String remoteURL, boolean required) {
- List remoteGitRefs = GitUtil.getRemoteGitRefs(
- remoteGitRefName, getWorkingDirectory(), remoteURL);
+ RemoteGitRef remoteGitRef = GitUtil.getRemoteGitRef(
+ remoteGitRefName, getWorkingDirectory(), remoteURL, required);
- for (RemoteGitRef remoteGitRef : remoteGitRefs) {
- if (remoteGitRefName.equals(remoteGitRef.getName())) {
- return remoteGitRef;
- }
+ if (remoteGitRef != null) {
+ return remoteGitRef;
}
if (required) {
diff --git a/modules/test/persistence-test/src/testIntegration/java/com/liferay/portal/service/persistence/test/UserPersistenceTest.java b/modules/test/persistence-test/src/testIntegration/java/com/liferay/portal/service/persistence/test/UserPersistenceTest.java
index cab4f657367185..7725b673b09931 100644
--- a/modules/test/persistence-test/src/testIntegration/java/com/liferay/portal/service/persistence/test/UserPersistenceTest.java
+++ b/modules/test/persistence-test/src/testIntegration/java/com/liferay/portal/service/persistence/test/UserPersistenceTest.java
@@ -761,12 +761,6 @@ private void _assertOriginalValues(User user) {
user, "getColumnOriginalValue", new Class>[] {String.class},
"contactId"));
- Assert.assertEquals(
- Long.valueOf(user.getPortraitId()),
- ReflectionTestUtil.invoke(
- user, "getColumnOriginalValue", new Class>[] {String.class},
- "portraitId"));
-
Assert.assertEquals(
Long.valueOf(user.getCompanyId()),
ReflectionTestUtil.invoke(
diff --git a/modules/test/playwright/fixtures/rolesPagesTest.ts b/modules/test/playwright/fixtures/rolesPagesTest.ts
index 1c2938f6dbd146..261771450f5b9c 100644
--- a/modules/test/playwright/fixtures/rolesPagesTest.ts
+++ b/modules/test/playwright/fixtures/rolesPagesTest.ts
@@ -5,21 +5,51 @@
import {test} from '@playwright/test';
+import {RoleAssigneesPage} from '../pages/roles-admin-web/RoleAssigneesPage';
import {RoleDefinePermissionsPage} from '../pages/roles-admin-web/RoleDefinePermissionsPage';
+import {RoleOrganizationSelectorPage} from '../pages/roles-admin-web/RoleOrganizationSelectorPage';
import {RolePage} from '../pages/roles-admin-web/RolePage';
+import {RoleSegmentSelectorPage} from '../pages/roles-admin-web/RoleSegmentSelectorPage';
+import {RoleSiteSelectorPage} from '../pages/roles-admin-web/RoleSiteSelectorPage';
+import {RoleUserGroupSelectorPage} from '../pages/roles-admin-web/RoleUserGroupSelectorPage';
+import {RoleUserSelectorPage} from '../pages/roles-admin-web/RoleUserSelectorPage';
import {RolesPage} from '../pages/roles-admin-web/RolesPage';
const rolesPagesTest = test.extend<{
+ roleAssigneesPage: RoleAssigneesPage;
roleDefinePermissionsPage: RoleDefinePermissionsPage;
+ roleOrganizationSelectorPage: RoleOrganizationSelectorPage;
rolePage: RolePage;
+ roleSegmentSelectorPage: RoleSegmentSelectorPage;
+ roleSiteSelectorPage: RoleSiteSelectorPage;
+ roleUserGroupSelectorPage: RoleUserGroupSelectorPage;
+ roleUserSelectorPage: RoleUserSelectorPage;
rolesPage: RolesPage;
}>({
+ roleAssigneesPage: async ({page}, use) => {
+ await use(new RoleAssigneesPage(page));
+ },
roleDefinePermissionsPage: async ({page}, use) => {
await use(new RoleDefinePermissionsPage(page));
},
+ roleOrganizationSelectorPage: async ({page}, use) => {
+ await use(new RoleOrganizationSelectorPage(page));
+ },
rolePage: async ({page}, use) => {
await use(new RolePage(page));
},
+ roleSegmentSelectorPage: async ({page}, use) => {
+ await use(new RoleSegmentSelectorPage(page));
+ },
+ roleSiteSelectorPage: async ({page}, use) => {
+ await use(new RoleSiteSelectorPage(page));
+ },
+ roleUserGroupSelectorPage: async ({page}, use) => {
+ await use(new RoleUserGroupSelectorPage(page));
+ },
+ roleUserSelectorPage: async ({page}, use) => {
+ await use(new RoleUserSelectorPage(page));
+ },
rolesPage: async ({page}, use) => {
await use(new RolesPage(page));
},
diff --git a/modules/test/playwright/helpers/ApiHelpers.ts b/modules/test/playwright/helpers/ApiHelpers.ts
index a0af3e4f93cc02..e34a1b47626a20 100644
--- a/modules/test/playwright/helpers/ApiHelpers.ts
+++ b/modules/test/playwright/helpers/ApiHelpers.ts
@@ -65,6 +65,7 @@ import {JSONWebServicesOSBFaroApiHelper} from './json-web-services/JSONWebServic
import {JSONWebServicesResourcePermissionApiHelper} from './json-web-services/JSONWebServicesResourcePermissionApiHelper';
import {JSONWebServicesSegmentsEntryApiHelper} from './json-web-services/JSONWebServicesSegmentsEntryApiHelper';
import {JSONWebServicesSiteNavigationMenuApiHelper} from './json-web-services/JSONWebServicesSiteNavigationMenuApiHelper';
+import {JSONWebServicesStagingApiHelper} from './json-web-services/JSONWebServicesStagingApiHelper';
import {JSONWebServicesUserApiHelper} from './json-web-services/JSONWebServicesUserApiHelper';
type ContentType = 'application/json' | 'application/x-www-form-urlencoded';
@@ -152,6 +153,7 @@ export class ApiHelpers {
readonly jsonWebServicesResourcePermissionApiHelper: JSONWebServicesResourcePermissionApiHelper;
readonly jsonWebServicesSegmentsEntry: JSONWebServicesSegmentsEntryApiHelper;
readonly jsonWebServicesSiteNavigationMenu: JSONWebServicesSiteNavigationMenuApiHelper;
+ readonly jsonWebServicesStaging: JSONWebServicesStagingApiHelper;
readonly jsonWebServicesUser: JSONWebServicesUserApiHelper;
readonly listTypeAdmin: ListTypeAdminApiHelper;
readonly notification: NotificationApiHelper;
@@ -240,6 +242,7 @@ export class ApiHelpers {
new JSONWebServicesSegmentsEntryApiHelper(this);
this.jsonWebServicesSiteNavigationMenu =
new JSONWebServicesSiteNavigationMenuApiHelper(this);
+ this.jsonWebServicesStaging = new JSONWebServicesStagingApiHelper(this);
this.jsonWebServicesUser = new JSONWebServicesUserApiHelper(this);
this.listTypeAdmin = new ListTypeAdminApiHelper(this);
this.notification = new NotificationApiHelper(this);
diff --git a/modules/test/playwright/helpers/HeadlessAdminUserApiHelper.ts b/modules/test/playwright/helpers/HeadlessAdminUserApiHelper.ts
index 1196b502962d3a..0b67edf405a691 100644
--- a/modules/test/playwright/helpers/HeadlessAdminUserApiHelper.ts
+++ b/modules/test/playwright/helpers/HeadlessAdminUserApiHelper.ts
@@ -48,6 +48,9 @@ export type TRole = {
externalReferenceCode?: string;
id?: number;
name: string;
+ name_i18n?: {
+ [key: string]: string;
+ };
rolePermissions?: Array;
roleType?: number | string;
};
diff --git a/modules/test/playwright/helpers/HeadlessCommerceAdminCatalogApiHelper.ts b/modules/test/playwright/helpers/HeadlessCommerceAdminCatalogApiHelper.ts
index 3a82961a5ea7dd..394f9a37c9e089 100644
--- a/modules/test/playwright/helpers/HeadlessCommerceAdminCatalogApiHelper.ts
+++ b/modules/test/playwright/helpers/HeadlessCommerceAdminCatalogApiHelper.ts
@@ -179,12 +179,14 @@ type TRelatedProduct = {
type TSku = {
cost: number;
+ discontinued?: boolean;
gtin?: string;
id?: number;
manufacturerPartNumber?: string;
price: number;
published: boolean;
purchasable: boolean;
+ replacementSkuId?: number;
sku: string;
};
@@ -370,6 +372,14 @@ export class HeadlessCommerceAdminCatalogApiHelper {
);
}
+ async getSkuByName(name: string) {
+ const skus = await this.apiHelpers.get(
+ `${this.apiHelpers.baseUrl}${this.basePath}/skus?search=${name}`
+ );
+
+ return skus.items[0];
+ }
+
async getSpecification(specificationId: string) {
return this.apiHelpers.get(
`${this.apiHelpers.baseUrl}${this.basePath}/specifications/${specificationId}`
diff --git a/modules/test/playwright/helpers/HeadlessDeliveryApiHelper.ts b/modules/test/playwright/helpers/HeadlessDeliveryApiHelper.ts
index c76ceae2157aea..48b388c84edfa9 100644
--- a/modules/test/playwright/helpers/HeadlessDeliveryApiHelper.ts
+++ b/modules/test/playwright/helpers/HeadlessDeliveryApiHelper.ts
@@ -108,6 +108,12 @@ export class HeadlessDeliveryApiHelper {
);
}
+ async getDocument(documentId: string) {
+ return this.apiHelpers.get(
+ `${this.apiHelpers.baseUrl}${this.basePath}/documents/${documentId}`
+ );
+ }
+
async getSiteDocumentsPage(siteId: string, sort: string = 'id') {
return this.apiHelpers.get(
`${this.apiHelpers.baseUrl}${this.basePath}/sites/${siteId}/documents?sort=${sort}`
diff --git a/modules/test/playwright/helpers/ListTypeAdminApiHelper.ts b/modules/test/playwright/helpers/ListTypeAdminApiHelper.ts
index 57d5baa905519c..8e95148640ba2d 100644
--- a/modules/test/playwright/helpers/ListTypeAdminApiHelper.ts
+++ b/modules/test/playwright/helpers/ListTypeAdminApiHelper.ts
@@ -40,12 +40,14 @@ export class ListTypeAdminApiHelper {
async postListTypeEntry(
listTypeDefinitionExternalReferenceCode: string,
- listTypeEntryName: string
+ englishListTypeEntryName: string,
+ translatedNames?: LocalizedValue
): Promise {
const requestBody = {
- key: listTypeEntryName.toLocaleLowerCase(),
+ key: englishListTypeEntryName.toLocaleLowerCase(),
name_i18n: {
- en_US: listTypeEntryName,
+ en_US: englishListTypeEntryName,
+ ...translatedNames,
},
};
diff --git a/modules/test/playwright/helpers/json-web-services/JSONWebServicesStagingApiHelper.ts b/modules/test/playwright/helpers/json-web-services/JSONWebServicesStagingApiHelper.ts
new file mode 100644
index 00000000000000..fc5a3f83af8b07
--- /dev/null
+++ b/modules/test/playwright/helpers/json-web-services/JSONWebServicesStagingApiHelper.ts
@@ -0,0 +1,69 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {liferayConfig} from '../../liferay.config';
+import {ApiHelpers} from '../ApiHelpers';
+
+export class JSONWebServicesStagingApiHelper {
+ readonly apiHelpers: ApiHelpers;
+ readonly basePath: string;
+
+ constructor(apiHelpers: ApiHelpers) {
+ this.apiHelpers = apiHelpers;
+ this.basePath = '/api/jsonws/staging';
+ }
+
+ /**
+ * Enables local staging for a given site (group).
+ *
+ * @param branchingPrivate
+ * Whether private pages should support branching.
+ *
+ * @param branchingPublic
+ * Whether public pages should support branching.
+ *
+ * @param groupId
+ * The ID of the group (site) for which staging should be enabled.
+ *
+ * @param unCheckedContent
+ * Content to exclude from staging (optional).
+ */
+ async enableLocalStaging({
+ branchingPrivate = false,
+ branchingPublic = false,
+ groupId,
+ unCheckedContent = null,
+ }: {
+ branchingPrivate?: boolean;
+ branchingPublic?: boolean;
+ groupId: number | string;
+ unCheckedContent?: any;
+ }): Promise {
+ const portalURL = liferayConfig.environment.baseUrl;
+ const serviceContext = JSON.stringify({});
+
+ const urlSearchParams = new URLSearchParams();
+ urlSearchParams.append('groupId', groupId.toString());
+ urlSearchParams.append('branchingPublic', String(branchingPublic));
+ urlSearchParams.append('branchingPrivate', String(branchingPrivate));
+ urlSearchParams.append('serviceContext', serviceContext);
+
+ if (unCheckedContent !== null) {
+ urlSearchParams.append(
+ 'unCheckedContent',
+ JSON.stringify(unCheckedContent)
+ );
+ }
+
+ await this.apiHelpers.post(
+ `${portalURL}${this.basePath}/enable-local-staging`,
+ {
+ data: urlSearchParams.toString(),
+ failOnStatusCode: true,
+ headers: await this.apiHelpers.getJSONWebServicesHeaders(),
+ }
+ );
+ }
+}
diff --git a/modules/test/playwright/pages/account-admin-web/DataTablePage.ts b/modules/test/playwright/pages/account-admin-web/DataTablePage.ts
index 807a90d89a99b4..0be1e60d50427d 100644
--- a/modules/test/playwright/pages/account-admin-web/DataTablePage.ts
+++ b/modules/test/playwright/pages/account-admin-web/DataTablePage.ts
@@ -120,6 +120,7 @@ export class DataTablePage {
};
this.newButton = page
.getByTestId('creationMenuNewButton')
+ .or(page.locator('.management-bar'))
.getByText('New');
this.orderButton = page.getByLabel('Order');
this.orderMenuItem = (option: string) => {
@@ -173,14 +174,28 @@ export class DataTablePage {
}
async changeView(view: string) {
- await this.selectViewButton.click();
-
if (view === 'List') {
+ await expect(async () => {
+ await this.selectViewButton.click();
+
+ await expect(this.selectViewListButton).toBeVisible({
+ timeout: 100,
+ });
+ }).toPass();
+
await this.selectViewListButton.click();
return;
}
+ await expect(async () => {
+ await this.selectViewButton.click();
+
+ await expect(this.selectViewTableButton).toBeVisible({
+ timeout: 100,
+ });
+ }).toPass();
+
await this.selectViewTableButton.click();
}
diff --git a/modules/test/playwright/pages/commerce/commerce-product-content-web/productDetailsPage.ts b/modules/test/playwright/pages/commerce/commerce-product-content-web/productDetailsPage.ts
index a3f2ae271e2134..615e9b4f81d6b9 100644
--- a/modules/test/playwright/pages/commerce/commerce-product-content-web/productDetailsPage.ts
+++ b/modules/test/playwright/pages/commerce/commerce-product-content-web/productDetailsPage.ts
@@ -55,6 +55,7 @@ export class ProductDetailsPage {
readonly optionSelector: (optionName: string) => Promise;
readonly page: Page;
readonly pageTitle: Locator;
+ readonly paginationText: (text: string) => Locator;
readonly pinAddToCartButton: Locator;
readonly priceContainer: Locator;
readonly priceField: (
@@ -66,6 +67,10 @@ export class ProductDetailsPage {
promoPrice: string,
container?: Locator | Page
) => Promise;
+ readonly replacementsSearchBar: Locator;
+ readonly replacementsSearchButton: Locator;
+ readonly replacementsTab: Locator;
+ readonly replacementsTableCell: (cellValue: string) => Locator;
readonly saveButtonEditFrame: Locator;
readonly selectOption: (
optionLabel: string,
@@ -178,6 +183,7 @@ export class ProductDetailsPage {
return page.getByLabel(optionName);
};
this.page = page;
+ this.paginationText = (text: string) => page.getByText(text);
this.pinAddToCartButton = page
.locator("[class='diagram-tooltip']")
.getByRole('button');
@@ -194,6 +200,15 @@ export class ProductDetailsPage {
) => {
return container.getByText(promoPrice);
};
+ this.replacementsSearchBar = page
+ .getByTestId('management-toolbar')
+ .getByPlaceholder('Search');
+ this.replacementsSearchButton = page.getByRole('button', {
+ name: 'Search',
+ });
+ this.replacementsTab = page.getByRole('tab', {name: 'Replacements'});
+ this.replacementsTableCell = (cellValue: string) =>
+ page.getByRole('cell', {name: cellValue});
this.saveButtonEditFrame =
this.ellipsisFrameProductSpecification.getByRole('button', {
name: 'Save',
diff --git a/modules/test/playwright/pages/journal-content-web/WebContentDisplayPage.ts b/modules/test/playwright/pages/journal-content-web/WebContentDisplayPage.ts
index 8687e1d4a60127..1826615d18e884 100644
--- a/modules/test/playwright/pages/journal-content-web/WebContentDisplayPage.ts
+++ b/modules/test/playwright/pages/journal-content-web/WebContentDisplayPage.ts
@@ -5,6 +5,7 @@
import {FrameLocator, Locator, Page} from '@playwright/test';
+import {PORTLET_URLS} from '../../utils/portletUrls';
import {UIElementsPage} from '../uielements/UIElementsPage';
export class WebContentDisplayPage {
@@ -14,6 +15,8 @@ export class WebContentDisplayPage {
readonly configurationFrame: FrameLocator;
readonly configurationFrameSelectButton: Locator;
readonly configurationOption: Locator;
+ readonly scopeTab: Locator;
+ readonly scopeOptions: Locator;
readonly saveButton: Locator;
readonly selectButton: Locator;
readonly selectWebContentButton: Locator;
@@ -30,10 +33,13 @@ export class WebContentDisplayPage {
readonly webContentToSelect: Locator;
constructor(page: Page) {
- this.app = page.getByTestId('app-loaded');
+ this.page = page;
this.configurationFrame = page.frameLocator(
- 'iframe[title="Configuration"]'
+ 'iframe[title*="Configuration"]'
);
+
+ this.app = page.getByTestId('app-loaded');
+
this.configurationFrameSelectButton = this.configurationFrame.getByRole(
'button',
{
@@ -44,12 +50,17 @@ export class WebContentDisplayPage {
exact: true,
name: 'Configuration',
});
- this.page = page;
+ this.scopeOptions = this.configurationFrame.locator(
+ '[id="_com_liferay_portlet_configuration_web_portlet_PortletConfigurationPortlet_scope"]'
+ );
this.saveButton = page
.frameLocator('iframe[title*="Web Content Display"]')
.getByRole('button', {
name: 'Save',
});
+ this.scopeTab = this.configurationFrame.getByRole('link', {
+ name: 'Scope Deprecated',
+ });
this.selectButton = this.app.getByRole('button', {
name: 'Select',
});
@@ -94,13 +105,31 @@ export class WebContentDisplayPage {
this.selectWebContentFrame.locator('[data-qa-id="row"]');
}
+ async gotoWebContentAdmin(pageScopeId: string) {
+ await this.page.goto(`/group/${pageScopeId}${PORTLET_URLS.journal}`, {
+ waitUntil: 'domcontentloaded',
+ });
+ }
+
+ async goToConfiguration() {
+ await this.webContentDisplay.waitFor({state: 'visible'});
+ await this.webContentDisplayContent.hover();
+ await this.webContentDisplayContent.click();
+
+ await this.page
+ .locator('[id*="JournalContentPortlet"]')
+ .getByRole('button', {name: 'Options'})
+ .click();
+ await this.configurationOption.click();
+ }
+
async addWebContentWithDisplay(webContentName?: string) {
await this.webContentDisplay.waitFor({state: 'visible'});
await this.webContentDisplayContent.hover();
await this.webContentDisplayContent.click();
await this.page
- .locator('#wrapper')
+ .locator('[id*="JournalContentPortlet"]')
.getByRole('button', {name: 'Options'})
.click();
await this.configurationOption.click();
@@ -159,6 +188,11 @@ export class WebContentDisplayPage {
await this.saveConfigurationFrameOptions();
}
+ async setScope(scope: string) {
+ await this.scopeTab.click();
+ await this.scopeOptions.selectOption(`layout,${scope}`);
+ }
+
async addWebContentWithWidget(webContentName: string) {
await this.webContentDisplayAddButton.click();
await this.uiElementsPage.pageCreatedAlert.waitFor({state: 'hidden'});
diff --git a/modules/test/playwright/pages/object-web/object-entries/ViewObjectEntriesPage.ts b/modules/test/playwright/pages/object-web/object-entries/ViewObjectEntriesPage.ts
index 5afb30e18a9b85..071040819924ed 100644
--- a/modules/test/playwright/pages/object-web/object-entries/ViewObjectEntriesPage.ts
+++ b/modules/test/playwright/pages/object-web/object-entries/ViewObjectEntriesPage.ts
@@ -5,6 +5,7 @@
import {ObjectField} from '@liferay/object-admin-rest-client-js';
import {FrameLocator, Locator, Page, expect} from '@playwright/test';
+import path from 'path';
import {PORTLET_URLS} from '../../../utils/portletUrls';
@@ -181,6 +182,20 @@ export class ViewObjectEntriesPage {
.click();
}
+ async selectFileFromUserComputer(dirName: string, fileName: string) {
+ const fileChooserPromise = this.page.waitForEvent('filechooser');
+
+ await this.selectFileButton.click();
+
+ const fileChooser = await fileChooserPromise;
+
+ await fileChooser.setFiles(
+ path.join(dirName, 'dependencies', fileName)
+ );
+
+ await this.page.getByText(fileName).waitFor({state: 'visible'});
+ }
+
async goto(
objectDefinitionClassName: string,
regionalCode?: string,
diff --git a/modules/test/playwright/pages/roles-admin-web/RoleAssigneesPage.ts b/modules/test/playwright/pages/roles-admin-web/RoleAssigneesPage.ts
new file mode 100644
index 00000000000000..b0ad31c2a6545d
--- /dev/null
+++ b/modules/test/playwright/pages/roles-admin-web/RoleAssigneesPage.ts
@@ -0,0 +1,41 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {Locator, Page} from '@playwright/test';
+
+import {DataTablePage} from '../account-admin-web/DataTablePage';
+
+export class RoleAssigneesPage {
+ readonly assigneesTable: DataTablePage;
+ readonly backButton: Locator;
+ readonly noDataMessage: (type: string) => Locator;
+ readonly organizationsLink: Locator;
+ readonly page: Page;
+ readonly removeButton: Locator;
+ readonly segmentsLink: Locator;
+ readonly sitesLink: Locator;
+ readonly userGroupsLink: Locator;
+ readonly usersLink: Locator;
+
+ constructor(page: Page) {
+ this.assigneesTable = new DataTablePage(
+ page,
+ page.locator(
+ '#_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_fm'
+ )
+ );
+ this.backButton = page.getByRole('link', {name: 'Go to Roles'});
+ this.noDataMessage = (type) => page.getByText(`No ${type} were found.`);
+ this.organizationsLink = page.getByRole('link', {
+ name: 'Organizations',
+ });
+ this.page = page;
+ this.removeButton = page.getByRole('button', {name: 'Remove'});
+ this.segmentsLink = page.getByRole('link', {name: 'Segments'});
+ this.sitesLink = page.getByRole('link', {name: 'Sites'});
+ this.userGroupsLink = page.getByRole('link', {name: 'User Groups'});
+ this.usersLink = page.getByRole('link', {name: 'Users'});
+ }
+}
diff --git a/modules/test/playwright/pages/roles-admin-web/RoleOrganizationSelectorPage.ts b/modules/test/playwright/pages/roles-admin-web/RoleOrganizationSelectorPage.ts
new file mode 100644
index 00000000000000..377e568d5d0bac
--- /dev/null
+++ b/modules/test/playwright/pages/roles-admin-web/RoleOrganizationSelectorPage.ts
@@ -0,0 +1,44 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {FrameLocator, Locator, Page, expect} from '@playwright/test';
+
+import {waitForAlert} from '../../utils/waitForAlert';
+import {DataTablePage} from '../account-admin-web/DataTablePage';
+
+export class RoleOrganizationSelectorPage {
+ readonly addButton: Locator;
+ readonly frame: FrameLocator;
+ readonly page: Page;
+ readonly organizationsTable: DataTablePage;
+
+ constructor(page: Page) {
+ this.addButton = page.getByRole('button', {
+ exact: true,
+ name: 'Add',
+ });
+ this.frame = page.frameLocator(
+ 'iframe[id="_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_selectAssignees_iframe_"]'
+ );
+ this.organizationsTable = new DataTablePage(
+ this.frame,
+ this.frame.locator(
+ '#p_p_id_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_'
+ )
+ );
+ this.page = page;
+ }
+
+ async assignOrganizations(names: string[]) {
+ await expect(this.organizationsTable.searchInput).toBeEditable();
+
+ for (const name of names) {
+ await (await this.organizationsTable.rowCheckbox(name)).check();
+ }
+ await this.addButton.click();
+
+ await waitForAlert(this.page);
+ }
+}
diff --git a/modules/test/playwright/pages/roles-admin-web/RolePage.ts b/modules/test/playwright/pages/roles-admin-web/RolePage.ts
index e8ef4c84f4d83e..08ef86bce1fb43 100644
--- a/modules/test/playwright/pages/roles-admin-web/RolePage.ts
+++ b/modules/test/playwright/pages/roles-admin-web/RolePage.ts
@@ -5,14 +5,68 @@
import {Locator, Page} from '@playwright/test';
+import {DataApiHelpers} from '../../helpers/ApiHelpers';
+import {TRole} from '../../helpers/HeadlessAdminUserApiHelper';
+import getRandomString from '../../utils/getRandomString';
+import {waitForAlert} from '../../utils/waitForAlert';
+
export class RolePage {
+ readonly assigneesLink: Locator;
+ readonly backButton: Locator;
readonly definePermissionsLink: Locator;
+ readonly descriptionInput: Locator;
+ readonly keyInput: Locator;
+ readonly nameInput: Locator;
readonly page: Page;
+ readonly saveButton: Locator;
+ readonly uniqueNameError: Locator;
constructor(page: Page) {
+ this.assigneesLink = page.getByRole('link', {
+ name: 'Assignees',
+ });
+ this.backButton = page.getByRole('link', {name: 'Go to Roles'});
this.definePermissionsLink = page.getByRole('link', {
name: 'Define Permissions',
});
+ this.descriptionInput = page.getByLabel('Description');
+ this.keyInput = page.locator(
+ '#_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_name'
+ );
+ this.nameInput = page.getByLabel('Name');
this.page = page;
+ this.saveButton = page.getByRole('button', {name: 'Save'});
+ this.uniqueNameError = page.getByText('Please enter a unique name');
+ }
+
+ async addRole(
+ apiHelpers: DataApiHelpers,
+ {
+ description = '',
+ name = getRandomString(),
+ title = '',
+ }: {description?: string; name?: string; title?: string}
+ ) {
+ await this.keyInput.fill(name);
+ await this.descriptionInput.fill(description);
+ await this.nameInput.fill(title || name);
+
+ await this.saveButton.click();
+
+ await waitForAlert(this.page, `${name} was created successfully`);
+
+ const roles = await apiHelpers.headlessAdminUser.getRoles(
+ name,
+ 'rolePermissions'
+ );
+
+ if (roles && roles.items) {
+ (roles.items as Array).map((role) => {
+ apiHelpers.data.push({
+ id: role.id,
+ type: 'role',
+ });
+ });
+ }
}
}
diff --git a/modules/test/playwright/pages/roles-admin-web/RoleSegmentSelectorPage.ts b/modules/test/playwright/pages/roles-admin-web/RoleSegmentSelectorPage.ts
new file mode 100644
index 00000000000000..9e6cc34ca4e502
--- /dev/null
+++ b/modules/test/playwright/pages/roles-admin-web/RoleSegmentSelectorPage.ts
@@ -0,0 +1,44 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {FrameLocator, Locator, Page, expect} from '@playwright/test';
+
+import {waitForAlert} from '../../utils/waitForAlert';
+import {DataTablePage} from '../account-admin-web/DataTablePage';
+
+export class RoleSegmentSelectorPage {
+ readonly addButton: Locator;
+ readonly frame: FrameLocator;
+ readonly page: Page;
+ readonly segmentsTable: DataTablePage;
+
+ constructor(page: Page) {
+ this.addButton = page.getByRole('button', {
+ exact: true,
+ name: 'Add',
+ });
+ this.frame = page.frameLocator(
+ 'iframe[id="_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_selectAssignees_iframe_"]'
+ );
+ this.segmentsTable = new DataTablePage(
+ this.frame,
+ this.frame.locator(
+ '#p_p_id_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_'
+ )
+ );
+ this.page = page;
+ }
+
+ async assignSegments(names: string[]) {
+ await expect(this.segmentsTable.searchInput).toBeEditable();
+
+ for (const name of names) {
+ await (await this.segmentsTable.rowCheckbox(name)).check();
+ }
+ await this.addButton.click();
+
+ await waitForAlert(this.page);
+ }
+}
diff --git a/modules/test/playwright/pages/roles-admin-web/RoleSiteSelectorPage.ts b/modules/test/playwright/pages/roles-admin-web/RoleSiteSelectorPage.ts
new file mode 100644
index 00000000000000..a78dc7dd153184
--- /dev/null
+++ b/modules/test/playwright/pages/roles-admin-web/RoleSiteSelectorPage.ts
@@ -0,0 +1,44 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {FrameLocator, Locator, Page, expect} from '@playwright/test';
+
+import {waitForAlert} from '../../utils/waitForAlert';
+import {DataTablePage} from '../account-admin-web/DataTablePage';
+
+export class RoleSiteSelectorPage {
+ readonly addButton: Locator;
+ readonly frame: FrameLocator;
+ readonly page: Page;
+ readonly sitesTable: DataTablePage;
+
+ constructor(page: Page) {
+ this.addButton = page.getByRole('button', {
+ exact: true,
+ name: 'Add',
+ });
+ this.frame = page.frameLocator(
+ 'iframe[id="_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_selectAssignees_iframe_"]'
+ );
+ this.sitesTable = new DataTablePage(
+ this.frame,
+ this.frame.locator(
+ '#p_p_id_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_'
+ )
+ );
+ this.page = page;
+ }
+
+ async assignSite(names: string[]) {
+ await expect(this.sitesTable.searchInput).toBeEditable();
+
+ for (const name of names) {
+ await (await this.sitesTable.rowCheckbox(name)).check();
+ }
+ await this.addButton.click();
+
+ await waitForAlert(this.page);
+ }
+}
diff --git a/modules/test/playwright/pages/roles-admin-web/RoleUserGroupSelectorPage.ts b/modules/test/playwright/pages/roles-admin-web/RoleUserGroupSelectorPage.ts
new file mode 100644
index 00000000000000..169738eb87cb1e
--- /dev/null
+++ b/modules/test/playwright/pages/roles-admin-web/RoleUserGroupSelectorPage.ts
@@ -0,0 +1,44 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {FrameLocator, Locator, Page, expect} from '@playwright/test';
+
+import {waitForAlert} from '../../utils/waitForAlert';
+import {DataTablePage} from '../account-admin-web/DataTablePage';
+
+export class RoleUserGroupSelectorPage {
+ readonly addButton: Locator;
+ readonly frame: FrameLocator;
+ readonly page: Page;
+ readonly userGroupsTable: DataTablePage;
+
+ constructor(page: Page) {
+ this.addButton = page.getByRole('button', {
+ exact: true,
+ name: 'Add',
+ });
+ this.frame = page.frameLocator(
+ 'iframe[id="_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_selectAssignees_iframe_"]'
+ );
+ this.userGroupsTable = new DataTablePage(
+ this.frame,
+ this.frame.locator(
+ '#p_p_id_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_'
+ )
+ );
+ this.page = page;
+ }
+
+ async assignUserGroups(names: string[]) {
+ await expect(this.userGroupsTable.searchInput).toBeEditable();
+
+ for (const name of names) {
+ await (await this.userGroupsTable.rowCheckbox(name)).check();
+ }
+ await this.addButton.click();
+
+ await waitForAlert(this.page);
+ }
+}
diff --git a/modules/test/playwright/pages/roles-admin-web/RoleUserSelectorPage.ts b/modules/test/playwright/pages/roles-admin-web/RoleUserSelectorPage.ts
new file mode 100644
index 00000000000000..10c47f2cb69367
--- /dev/null
+++ b/modules/test/playwright/pages/roles-admin-web/RoleUserSelectorPage.ts
@@ -0,0 +1,44 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {FrameLocator, Locator, Page, expect} from '@playwright/test';
+
+import {waitForAlert} from '../../utils/waitForAlert';
+import {DataTablePage} from '../account-admin-web/DataTablePage';
+
+export class RoleUserSelectorPage {
+ readonly addButton: Locator;
+ readonly frame: FrameLocator;
+ readonly page: Page;
+ readonly usersTable: DataTablePage;
+
+ constructor(page: Page) {
+ this.addButton = page.getByRole('button', {
+ exact: true,
+ name: 'Add',
+ });
+ this.frame = page.frameLocator(
+ 'iframe[id="_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_selectAssignees_iframe_"]'
+ );
+ this.usersTable = new DataTablePage(
+ this.frame,
+ this.frame.locator(
+ '#p_p_id_com_liferay_roles_admin_web_portlet_RolesAdminPortlet_'
+ )
+ );
+ this.page = page;
+ }
+
+ async assignUsers(names: string[]) {
+ await expect(this.usersTable.searchInput).toBeEditable();
+
+ for (const name of names) {
+ await (await this.usersTable.rowCheckbox(name)).check();
+ }
+ await this.addButton.click();
+
+ await waitForAlert(this.page);
+ }
+}
diff --git a/modules/test/playwright/pages/roles-admin-web/RolesPage.ts b/modules/test/playwright/pages/roles-admin-web/RolesPage.ts
index 15fac6a271b468..465fb8b1768d54 100644
--- a/modules/test/playwright/pages/roles-admin-web/RolesPage.ts
+++ b/modules/test/playwright/pages/roles-admin-web/RolesPage.ts
@@ -10,11 +10,15 @@ import {ApplicationsMenuPage} from '../product-navigation-applications-menu/Appl
export class RolesPage {
readonly accountRolesLink: Locator;
+ readonly applicationsMenuButton: Locator;
readonly applicationsMenuPage: ApplicationsMenuPage;
readonly deleteButton: Locator;
readonly optionsButton: Locator;
+ readonly organizationRolesLink: Locator;
readonly page: Page;
+ readonly roleCell: (value: string, exact?: boolean) => Locator;
readonly rolesTable: DataTablePage;
+ readonly siteRolesLink: Locator;
readonly userLink: Locator;
constructor(page: Page) {
@@ -22,10 +26,24 @@ export class RolesPage {
exact: true,
name: 'Account Roles',
});
+ this.applicationsMenuButton = page.getByLabel(
+ 'Open Applications MenuCtrl+'
+ );
this.applicationsMenuPage = new ApplicationsMenuPage(page);
- this.deleteButton = page.getByRole('menuitem', {name: 'Delete'});
+ this.deleteButton = page
+ .getByRole('menuitem', {name: 'Delete'})
+ .or(page.getByRole('link', {name: 'Delete'}));
this.optionsButton = page.getByLabel('Options', {exact: true});
+ this.organizationRolesLink = page.getByRole('link', {
+ exact: true,
+ name: 'Organization Roles',
+ });
this.page = page;
+ this.roleCell = (value, exact = true) =>
+ this.page.getByRole('cell', {
+ exact,
+ name: value,
+ });
this.rolesTable = new DataTablePage(
page,
page
@@ -34,6 +52,10 @@ export class RolesPage {
)
.first()
);
+ this.siteRolesLink = page.getByRole('link', {
+ exact: true,
+ name: 'Site Roles',
+ });
this.userLink = page.getByRole('link', {exact: true, name: 'User'});
}
diff --git a/modules/test/playwright/pages/uielements/UIElementsPage.ts b/modules/test/playwright/pages/uielements/UIElementsPage.ts
index 0c0fd860bee968..b587e3c92af6ec 100644
--- a/modules/test/playwright/pages/uielements/UIElementsPage.ts
+++ b/modules/test/playwright/pages/uielements/UIElementsPage.ts
@@ -31,7 +31,7 @@ export class UIElementsPage {
this.setupUpdatedAlert = page.getByText(
'Success:You have successfully updated the setup.'
);
- this.anySuccessAlert = page.getByText('successfully.');
+ this.anySuccessAlert = page.locator('.alert-success');
this.closeClickable = page.getByLabel('close', {exact: true});
this.publishButton = page.getByLabel('Publish', {exact: true});
}
diff --git a/modules/test/playwright/pages/user-associated-data-web/PersonalDataErasurePage.ts b/modules/test/playwright/pages/user-associated-data-web/PersonalDataErasurePage.ts
index 2dd6f115543661..82a27ff9a0f38f 100644
--- a/modules/test/playwright/pages/user-associated-data-web/PersonalDataErasurePage.ts
+++ b/modules/test/playwright/pages/user-associated-data-web/PersonalDataErasurePage.ts
@@ -12,10 +12,14 @@ export class PersonalDataErasurePage {
readonly actionsButton: Locator;
readonly allSelectedButton: Locator;
readonly anonymizeButton: Locator;
+ readonly anonymizeLink: Locator;
readonly anonymizeMenuItem: Locator;
readonly applicationsMenuPage: ApplicationsMenuPage;
+ readonly blogsRadioButton: Locator;
readonly deleteMenuItem: Locator;
readonly documentsAndMediaRadioButton: Locator;
+ readonly infoPanelButton: Locator;
+ readonly infoPanelEllipsisButton: (name: string) => Locator;
readonly journalArticleCheckBox: (
articleId: string,
articleUrlTitle: string,
@@ -50,13 +54,29 @@ export class PersonalDataErasurePage {
.getByRole('button');
this.applicationsMenuPage = new ApplicationsMenuPage(page);
this.anonymizeButton = page.getByRole('button', {name: 'Anonymize'});
+ this.anonymizeLink = page.getByRole('link', {
+ exact: true,
+ name: 'Anonymize',
+ });
this.anonymizeMenuItem = page.getByRole('menuitem', {
name: 'Anonymize',
});
+ this.blogsRadioButton = page.locator(
+ 'input[type="radio"][value="com.liferay.blogs.uad"]'
+ );
this.deleteMenuItem = page.getByRole('menuitem', {name: 'Delete'});
this.documentsAndMediaRadioButton = page.locator(
'input[type="radio"][value="com.liferay.document.library.uad"]'
);
+ this.infoPanelButton = page.getByRole('button', {
+ name: 'Toggle Info Panel',
+ });
+ this.infoPanelEllipsisButton = (name: string) =>
+ page
+ .locator('.sidebar-header')
+ .filter({hasText: name})
+ .locator('.component-action svg.lexicon-icon-ellipsis-v')
+ .first();
this.journalArticleCheckBox = (
articleId: string,
articleUrlTitle: string,
diff --git a/modules/test/playwright/tests/commerce/commerce-product-content-web/commerceReplacementProducts.spec.ts b/modules/test/playwright/tests/commerce/commerce-product-content-web/commerceReplacementProducts.spec.ts
new file mode 100644
index 00000000000000..f272a5b081c8aa
--- /dev/null
+++ b/modules/test/playwright/tests/commerce/commerce-product-content-web/commerceReplacementProducts.spec.ts
@@ -0,0 +1,164 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {expect, mergeTests} from '@playwright/test';
+
+import {commercePagesTest} from '../../../fixtures/commercePagesTest';
+import {dataApiHelpersTest} from '../../../fixtures/dataApiHelpersTest';
+import {loginTest} from '../../../fixtures/loginTest';
+import getRandomString from '../../../utils/getRandomString';
+import {
+ performLoginViaApi,
+ performLogout,
+ userData,
+} from '../../../utils/performLogin';
+import {miniumSetUp} from '../utils/commerce';
+
+export const test = mergeTests(
+ commercePagesTest,
+ dataApiHelpersTest,
+ loginTest()
+);
+
+test(
+ 'Can view discontinued replacement SKUs in product details',
+ {tag: '@LPD-49015'},
+ async ({apiHelpers, page, productDetailsPage}) => {
+ test.setTimeout(120000);
+
+ const {site} = await miniumSetUp(apiHelpers);
+
+ const account = await apiHelpers.headlessAdminUser.postAccount({
+ name: getRandomString(),
+ type: 'business',
+ });
+
+ apiHelpers.data.push({id: account.id, type: 'account'});
+
+ const user = await apiHelpers.headlessAdminUser.postUserAccount();
+
+ userData[user.alternateName] = {
+ name: user.givenName,
+ password: 'test',
+ surname: user.familyName,
+ };
+
+ await apiHelpers.headlessAdminUser.assignUserToAccountByEmailAddress(
+ account.id,
+ [user.emailAddress]
+ );
+
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: 'Buyer ' + getRandomString(),
+ rolePermissions: [
+ {
+ actionIds: ['MANAGE_ADDRESSES', 'VIEW_ADDRESSES'],
+ primaryKey: '0',
+ resourceName: 'com.liferay.account.model.AccountEntry',
+ scope: 3,
+ },
+ {
+ actionIds: ['VIEW'],
+ primaryKey: await page.evaluate(() => {
+ return Liferay.ThemeDisplay.getCompanyId();
+ }),
+ resourceName:
+ 'com.liferay.commerce.model.CommerceOrderType',
+ scope: 1,
+ },
+ {
+ actionIds: [
+ 'ADD_COMMERCE_ORDER',
+ 'CHECKOUT_OPEN_COMMERCE_ORDERS',
+ 'MANAGE_COMMERCE_ORDER_DELIVERY_TERMS',
+ 'MANAGE_COMMERCE_ORDER_PAYMENT_METHODS',
+ 'MANAGE_COMMERCE_ORDER_PAYMENT_TERMS',
+ 'MANAGE_COMMERCE_ORDER_SHIPPING_OPTIONS',
+ 'VIEW_BILLING_ADDRESS',
+ 'VIEW_COMMERCE_ORDERS',
+ 'VIEW_OPEN_COMMERCE_ORDERS',
+ ],
+ primaryKey: '0',
+ resourceName: 'com.liferay.commerce.order',
+ scope: 3,
+ },
+ ],
+ });
+
+ await apiHelpers.headlessAdminUser.postRoleUserAccountAssociation(
+ role.id,
+ Number(user.id)
+ );
+
+ apiHelpers.data.push({
+ id: `${role.id}_${user.id}`,
+ type: 'roleUserAccountAssociation',
+ });
+
+ await apiHelpers.jsonWebServicesUser.addGroupUsers(site.id, [user.id]);
+
+ const replacementSku =
+ await apiHelpers.headlessCommerceAdminCatalog.getSkuByName(
+ 'MIN93015'
+ );
+
+ const skuList = [
+ 'MIN93016A',
+ 'MIN93016B',
+ 'MIN93016C',
+ 'MIN93027',
+ 'MIN93021',
+ ];
+
+ for (const skuName of skuList) {
+ const sku =
+ await apiHelpers.headlessCommerceAdminCatalog.getSkuByName(
+ skuName
+ );
+
+ await apiHelpers.headlessCommerceAdminCatalog.patchSku(sku.id, {
+ cost: sku.cost,
+ discontinued: true,
+ price: sku.price,
+ published: true,
+ purchasable: sku.purchasable,
+ replacementSkuId: replacementSku.id,
+ sku: sku.sku,
+ });
+ }
+
+ await performLogout(page);
+ await performLoginViaApi(page, user.alternateName);
+
+ await page.goto(`/web/${site.name}/p/abs-sensor`);
+
+ await productDetailsPage.replacementsTab.click();
+
+ for (const skuName of skuList) {
+ await expect(
+ productDetailsPage.replacementsTableCell(skuName)
+ ).toBeVisible();
+ }
+ await expect(
+ productDetailsPage.paginationText('Showing 1 to 5 of 5 entries.')
+ ).toBeVisible();
+
+ await productDetailsPage.replacementsSearchBar.fill('Wear Sensors');
+ await productDetailsPage.replacementsSearchButton.click();
+
+ for (const skuName of skuList) {
+ if (skuName === 'MIN93027') {
+ await expect(
+ productDetailsPage.replacementsTableCell(skuName)
+ ).toBeVisible();
+ }
+ else {
+ await expect(
+ productDetailsPage.replacementsTableCell(skuName)
+ ).not.toBeVisible();
+ }
+ }
+ }
+);
diff --git a/modules/test/playwright/tests/object-web/dependencies/astronaut.png b/modules/test/playwright/tests/object-web/dependencies/astronaut.png
new file mode 100644
index 00000000000000..b520eb3f2bb312
Binary files /dev/null and b/modules/test/playwright/tests/object-web/dependencies/astronaut.png differ
diff --git a/modules/test/playwright/tests/object-web/objectEntries.spec.ts b/modules/test/playwright/tests/object-web/objectEntries.spec.ts
index 19bf44d3b10039..d44790cbf9e887 100644
--- a/modules/test/playwright/tests/object-web/objectEntries.spec.ts
+++ b/modules/test/playwright/tests/object-web/objectEntries.spec.ts
@@ -1455,6 +1455,126 @@ test.describe('Manage object entries through View Object Entries', () => {
'Entry A'
);
});
+
+ test('Verify that temporary files are deleted from the database if the object creation is not completed', async ({
+ apiHelpers,
+ page,
+ viewObjectEntriesPage,
+ }) => {
+
+ // Create object definition with attachment object field
+
+ const objectDefinition =
+ await apiHelpers.objectAdmin.postRandomObjectDefinition({
+ objectFields: [mockedObjectFields.attachmentFieldUserComputer],
+ objectFolderExternalReferenceCode: 'default',
+ status: {code: 0},
+ });
+
+ apiHelpers.data.push({
+ id: objectDefinition.id,
+ type: 'objectDefinition',
+ });
+
+ await viewObjectEntriesPage.goto(objectDefinition.className);
+
+ await viewObjectEntriesPage.clickAddObjectEntry(objectDefinition.name);
+
+ // Upload first file from user computer
+
+ await viewObjectEntriesPage.selectFileFromUserComputer(
+ __dirname,
+ 'sampleFile.txt'
+ );
+
+ const fileEntryId1 = await page.getAttribute(
+ 'input[data-field-name^="testAttachment"]',
+ 'value'
+ );
+
+ expect(
+ await apiHelpers.headlessDelivery.getDocument(fileEntryId1)
+ ).toEqual(
+ expect.objectContaining({
+ id: Number(fileEntryId1),
+ })
+ );
+
+ // Verify that the first file is removed after the second file is uploaded
+
+ await viewObjectEntriesPage.selectFileFromUserComputer(
+ __dirname,
+ 'astronaut.png'
+ );
+
+ expect(
+ await apiHelpers.headlessDelivery.getDocument(fileEntryId1)
+ ).toEqual({status: 'NOT_FOUND'});
+
+ const fileEntryId2 = await page.getAttribute(
+ 'input[data-field-name^="testAttachment"]',
+ 'value'
+ );
+
+ expect(
+ await apiHelpers.headlessDelivery.getDocument(fileEntryId2)
+ ).toEqual(
+ expect.objectContaining({
+ id: Number(fileEntryId2),
+ })
+ );
+
+ // Verify that the delete button removes the second file
+
+ await viewObjectEntriesPage.deleteFileButton.click();
+
+ expect(
+ await apiHelpers.headlessDelivery.getDocument(fileEntryId2)
+ ).toEqual({status: 'NOT_FOUND'});
+
+ // Verify that the file is removed after page reload
+
+ await viewObjectEntriesPage.selectFileFromUserComputer(
+ __dirname,
+ 'sampleFile.txt'
+ );
+
+ const fileEntryId3 = await page.getAttribute(
+ 'input[data-field-name^="testAttachment"]',
+ 'value'
+ );
+
+ await page.reload();
+
+ expect(
+ await apiHelpers.headlessDelivery.getDocument(fileEntryId3)
+ ).toEqual({status: 'NOT_FOUND'});
+
+ // Verify that the file is saved successfully when clicking submit
+
+ await viewObjectEntriesPage.selectFileFromUserComputer(
+ __dirname,
+ 'astronaut.png'
+ );
+
+ await viewObjectEntriesPage.saveObjectEntryButton.click();
+
+ await expect(viewObjectEntriesPage.successMessage).toBeVisible();
+ await expect(
+ viewObjectEntriesPage.page.getByText('astronaut.png')
+ ).toBeVisible();
+
+ await viewObjectEntriesPage.selectFileFromUserComputer(
+ __dirname,
+ 'sampleFile.txt'
+ );
+
+ await page.reload();
+
+ await expect(
+ viewObjectEntriesPage.page.getByText('astronaut.png')
+ ).toBeVisible();
+ });
});
test.describe('Manage object entries through Workflow', () => {
diff --git a/modules/test/playwright/tests/object-web/objectEntriesLocalized.spec.ts b/modules/test/playwright/tests/object-web/objectEntriesLocalized.spec.ts
index b18a321fe6ef09..fec5112a4b628e 100644
--- a/modules/test/playwright/tests/object-web/objectEntriesLocalized.spec.ts
+++ b/modules/test/playwright/tests/object-web/objectEntriesLocalized.spec.ts
@@ -521,15 +521,20 @@ test.describe('Localized object entries are saved correctly', () => {
const objectDefinitionLabel = 'ObjectDefinitionLabel' + getRandomInt();
const objectDefinitionName = 'ObjectDefinitionName' + getRandomInt();
- const {listTypeDefinitionItems, objectFields, titleObjectFieldName} =
- await mockObjectFields({
- apiHelpers,
- localizeAllLocalizable: true,
- objectFieldBusinessTypes: [
- 'multiselectPicklist',
- 'multiselectPicklist',
- ],
- });
+ const {
+ listTypeDefinitionItems,
+ objectFields,
+ titleObjectFieldName,
+ translatedListTypeDefinitionItems,
+ } = await mockObjectFields({
+ apiHelpers,
+ localeToTranslateListTypeItems: 'ca_ES',
+ localizeAllLocalizable: true,
+ objectFieldBusinessTypes: [
+ 'multiselectPicklist',
+ 'multiselectPicklist',
+ ],
+ });
const objectDefinitionAPIClient =
await apiHelpers.buildRestClient(ObjectDefinitionApi);
@@ -650,11 +655,15 @@ test.describe('Localized object entries are saved correctly', () => {
await catalanOption.first().click();
- expect(itemLocators[0]).toHaveCount(1);
+ const catalanItemLocators = translatedListTypeDefinitionItems.map(
+ (item) => page.getByRole('row', {name: `Remove ${item}`})
+ );
+
+ expect(catalanItemLocators[0]).toHaveCount(1);
for (let index = 1; index <= 2; index++) {
- await expect(itemLocators[index].nth(0)).toBeVisible();
- await expect(itemLocators[index].nth(1)).toBeVisible();
+ await expect(catalanItemLocators[index].nth(0)).toBeVisible();
+ await expect(catalanItemLocators[index].nth(1)).toBeVisible();
}
// remove some of the items from catalan entry
@@ -675,8 +684,8 @@ test.describe('Localized object entries are saved correctly', () => {
// expect only the remaining to be visible
async function expectFinalCatalanState() {
- await expect(itemLocators[0]).toBeVisible();
- await expect(itemLocators[1]).toBeVisible();
+ await expect(catalanItemLocators[0]).toBeVisible();
+ await expect(catalanItemLocators[1]).toBeVisible();
}
await expectFinalCatalanState();
diff --git a/modules/test/playwright/tests/object-web/objectFields.spec.ts b/modules/test/playwright/tests/object-web/objectFields.spec.ts
index 81d642b90d727d..6af2d96acdf9ef 100644
--- a/modules/test/playwright/tests/object-web/objectFields.spec.ts
+++ b/modules/test/playwright/tests/object-web/objectFields.spec.ts
@@ -164,6 +164,41 @@ test.describe('Manage object fields through Model Builder', () => {
);
});
+ test('assert that field entry translation is disabled by default', async ({
+ modelBuilderDiagramPage,
+ modelBuilderLeftSidebarPage,
+ modelBuilderObjectDefinitionNodePage,
+ page,
+ }) => {
+ const {objectDefinitions} = createdEntities;
+
+ const [objectDefinition] = objectDefinitions;
+
+ await modelBuilderDiagramPage.goto({objectFolderName: 'Default'});
+
+ await modelBuilderLeftSidebarPage.sidebarItems
+ .filter({hasText: objectDefinition.name})
+ .click();
+
+ await modelBuilderObjectDefinitionNodePage.openAddNewObjectFieldOrRelationshipModal(
+ objectDefinition.name,
+ modelBuilderDiagramPage.objectDefinitionNodes,
+ modelBuilderObjectDefinitionNodePage.addObjectFieldButton
+ );
+
+ await modelBuilderObjectDefinitionNodePage.fillObjectFieldLabelInput(
+ 'objectFieldLabel' + getRandomInt()
+ );
+
+ await modelBuilderObjectDefinitionNodePage.selectNewObjectFieldBusinessTypeOption(
+ 'Decimal'
+ );
+
+ await expect(
+ page.getByRole('switch', {name: 'Enable Entry Translation'})
+ ).not.toBeChecked();
+ });
+
test('can add picklist object field to object definition node', async ({
apiHelpers,
modelBuilderDiagramPage,
diff --git a/modules/test/playwright/tests/object-web/utils/mockObjectFields.ts b/modules/test/playwright/tests/object-web/utils/mockObjectFields.ts
index 82e86b29f12b9b..062e7b8adae009 100644
--- a/modules/test/playwright/tests/object-web/utils/mockObjectFields.ts
+++ b/modules/test/playwright/tests/object-web/utils/mockObjectFields.ts
@@ -19,6 +19,7 @@ interface MockObjectFieldsReturn {
objectEntry: ObjectEntry;
objectFields: Partial[];
titleObjectFieldName?: string;
+ translatedListTypeDefinitionItems?: string[];
}
type ObjectFieldBusinessTypesLabelName = {
@@ -226,17 +227,20 @@ function getRandomObjectFieldEntryValue(
export async function mockObjectFields({
apiHelpers,
+ localeToTranslateListTypeItems,
localizeAllLocalizable,
objectEntryReturn,
objectFieldBusinessTypes,
titleObjectFieldName,
}: {
apiHelpers: DataApiHelpers;
+ localeToTranslateListTypeItems?: Locale;
localizeAllLocalizable?: boolean;
objectEntryReturn?: {format: 'API' | 'UI'};
objectFieldBusinessTypes: ObjectFieldBusinessTypes[];
titleObjectFieldName?: ObjectFieldBusinessTypes;
}): Promise {
+ let translatedListTypeDefinitionItems: string[];
let listTypeDefinition: ListTypeDefinition;
let listTypeDefinitionItems: string[];
@@ -252,14 +256,28 @@ export async function mockObjectFields({
type: 'listTypeDefinition',
});
- listTypeDefinitionItems = new Array(3)
+ const numberOfListTypeDefinitionItems = 3;
+
+ listTypeDefinitionItems = new Array(numberOfListTypeDefinitionItems)
.fill('')
.map(() => getRandomInt().toString());
- for (const lisTypeEntry of listTypeDefinitionItems) {
+ if (localeToTranslateListTypeItems) {
+ translatedListTypeDefinitionItems = listTypeDefinitionItems.map(
+ () => getRandomInt().toString()
+ );
+ }
+
+ for (let i = 0; i < numberOfListTypeDefinitionItems; i++) {
await apiHelpers.listTypeAdmin.postListTypeEntry(
listTypeDefinition.externalReferenceCode,
- lisTypeEntry
+ listTypeDefinitionItems[i],
+ translatedListTypeDefinitionItems
+ ? {
+ [localeToTranslateListTypeItems]:
+ translatedListTypeDefinitionItems[i],
+ }
+ : {}
);
}
}
@@ -389,5 +407,6 @@ export async function mockObjectFields({
titleObjectFieldName: titleObjectFieldName
? objectFieldBusinessTypesLabelName[titleObjectFieldName][0].name
: undefined,
+ translatedListTypeDefinitionItems,
};
}
diff --git a/modules/test/playwright/tests/roles-admin-web/roles.spec.ts b/modules/test/playwright/tests/roles-admin-web/roles.spec.ts
new file mode 100644
index 00000000000000..c4063804a3acb8
--- /dev/null
+++ b/modules/test/playwright/tests/roles-admin-web/roles.spec.ts
@@ -0,0 +1,1116 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {expect, mergeTests} from '@playwright/test';
+
+import {dataApiHelpersTest} from '../../fixtures/dataApiHelpersTest';
+import {isolatedSiteTest} from '../../fixtures/isolatedSiteTest';
+import {loginTest} from '../../fixtures/loginTest';
+import {rolesPagesTest} from '../../fixtures/rolesPagesTest';
+import {usersAndOrganizationsPagesTest} from '../../fixtures/usersAndOrganizationsPagesTest';
+import {TRole} from '../../helpers/HeadlessAdminUserApiHelper';
+import getRandomString from '../../utils/getRandomString';
+import {setItemsPerPage} from '../../utils/pagination';
+import {
+ performLoginViaApi,
+ performLogout,
+ userData,
+} from '../../utils/performLogin';
+import {waitForAlert} from '../../utils/waitForAlert';
+
+export const test = mergeTests(
+ dataApiHelpersTest,
+ isolatedSiteTest,
+ loginTest(),
+ rolesPagesTest,
+ usersAndOrganizationsPagesTest
+);
+
+test(
+ 'Can add roles with same title but different key',
+ {tag: ['@LPD-50065']},
+ async ({apiHelpers, page, rolePage, rolesPage}) => {
+ const key1 = getRandomString();
+ const key2 = getRandomString();
+ const title = getRandomString();
+
+ await rolesPage.goto();
+
+ await expect(rolesPage.rolesTable.searchInput).toBeEditable();
+
+ await rolesPage.rolesTable.newButton.click();
+ await rolePage.addRole(apiHelpers, {name: key1, title});
+ await rolePage.backButton.click();
+
+ await rolesPage.rolesTable.newButton.click();
+ await rolePage.addRole(apiHelpers, {name: key2, title});
+ await rolePage.backButton.click();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(key1);
+
+ await expect(rolesPage.rolesTable.cell(title)).toHaveCount(1);
+
+ await rolesPage.rolesTable.search(key2);
+
+ await expect(rolesPage.rolesTable.cell(title)).toHaveCount(1);
+
+ await rolesPage.rolesTable.search(title);
+
+ await expect(rolesPage.roleCell(title)).toHaveCount(2);
+ }
+);
+
+test(
+ 'Can not add roles with same key',
+ {tag: ['@LPD-50065']},
+ async ({apiHelpers, page, rolePage, rolesPage}) => {
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ roleType: 'regular',
+ });
+
+ await rolesPage.goto();
+
+ await expect(rolesPage.rolesTable.searchInput).toBeEditable();
+
+ await rolesPage.rolesTable.newButton.click();
+
+ const title = getRandomString();
+
+ await rolePage.keyInput.fill(role.name);
+ await rolePage.nameInput.fill(title);
+ await rolePage.saveButton.click();
+
+ await waitForAlert(page, 'Your request failed to complete', {
+ type: 'danger',
+ });
+
+ await expect(rolePage.uniqueNameError).toBeVisible();
+
+ await rolePage.backButton.click();
+ await rolesPage.rolesTable.search(title);
+
+ await expect(rolesPage.rolesTable.cell(title)).toHaveCount(0);
+ }
+);
+
+test(
+ 'Can edit a role',
+ {tag: ['@LPD-50065']},
+ async ({apiHelpers, page, rolePage, rolesPage}) => {
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ roleType: 'regular',
+ });
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toBeVisible();
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+
+ const description = getRandomString();
+ const name = getRandomString();
+ const title = getRandomString();
+
+ await rolePage.descriptionInput.fill(description);
+ await rolePage.keyInput.fill(name);
+ await rolePage.nameInput.fill(title);
+ await rolePage.saveButton.click();
+
+ await waitForAlert(page);
+
+ await rolePage.backButton.click();
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toHaveCount(0);
+
+ await rolesPage.rolesTable.search(title);
+
+ await expect(
+ (await rolesPage.rolesTable.row(1, title, true)).row
+ ).toBeVisible();
+ await expect(
+ (await rolesPage.rolesTable.row(2, description, true)).row
+ ).toBeVisible();
+
+ await (await rolesPage.rolesTable.cellLink(title)).click();
+
+ await expect(rolePage.descriptionInput).toHaveValue(description);
+ await expect(rolePage.keyInput).toHaveValue(name);
+ await expect(rolePage.nameInput).toHaveValue(title);
+ }
+);
+
+test(
+ 'Can add a role without a title',
+ {tag: ['@LPD-50065', '@LPS-104999', '@LPS-105001']},
+ async ({apiHelpers, page, rolePage, rolesPage}) => {
+ const key = getRandomString();
+
+ await rolesPage.goto();
+
+ await expect(rolesPage.rolesTable.searchInput).toBeEditable();
+
+ await rolesPage.rolesTable.newButton.click();
+
+ await rolePage.keyInput.fill(key);
+ await rolePage.saveButton.click();
+
+ await waitForAlert(page, `${key} was created successfully`);
+
+ const roles = await apiHelpers.headlessAdminUser.getRoles(
+ key,
+ 'rolePermissions'
+ );
+
+ if (roles && roles.items) {
+ (roles.items as Array).map((role) => {
+ apiHelpers.data.push({
+ id: role.id,
+ type: 'role',
+ });
+ });
+ }
+
+ await rolePage.backButton.click();
+
+ await expect(rolesPage.rolesTable.cell(key)).toBeVisible();
+
+ await (await rolesPage.rolesTable.cellLink(key)).click();
+
+ await expect(rolePage.keyInput).toHaveValue(key);
+ await expect(rolePage.nameInput).toHaveValue('');
+ }
+);
+
+test(
+ 'Can search a role',
+ {tag: ['@LPD-50065']},
+ async ({apiHelpers, page, rolesPage}) => {
+ const role1 = await apiHelpers.headlessAdminUser.postRole({
+ name: `A${getRandomString()}`,
+ name_i18n: {'en-US': `A${getRandomString()}`},
+ roleType: 'regular',
+ });
+
+ const role2 = await apiHelpers.headlessAdminUser.postRole({
+ name: `A${getRandomString()}`,
+ name_i18n: {'en-US': `A${getRandomString()}`},
+ roleType: 'regular',
+ });
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+
+ await expect(rolesPage.rolesTable.cell('Title')).toBeVisible();
+
+ await page.reload();
+
+ await expect(async () => {
+ await rolesPage.rolesTable.search(getRandomString());
+
+ await expect(
+ rolesPage.rolesTable.cell(role1.name_i18n['en-US'])
+ ).toHaveCount(0);
+ await expect(
+ rolesPage.rolesTable.cell(role2.name_i18n['en-US'])
+ ).toHaveCount(0);
+ }).toPass();
+
+ await rolesPage.rolesTable.search(role1.name);
+
+ await expect(
+ rolesPage.rolesTable.cell(role1.name_i18n['en-US'])
+ ).toBeVisible();
+ await expect(
+ rolesPage.rolesTable.cell(role2.name_i18n['en-US'])
+ ).toHaveCount(0);
+
+ await rolesPage.rolesTable.search(role2.name);
+
+ await expect(
+ rolesPage.rolesTable.cell(role1.name_i18n['en-US'])
+ ).toHaveCount(0);
+ await expect(
+ rolesPage.rolesTable.cell(role2.name_i18n['en-US'])
+ ).toBeVisible();
+
+ await rolesPage.rolesTable.search(role1.name_i18n['en-US']);
+
+ await expect(
+ rolesPage.rolesTable.cell(role1.name_i18n['en-US'])
+ ).toBeVisible();
+ await expect(
+ rolesPage.rolesTable.cell(role2.name_i18n['en-US'])
+ ).toHaveCount(0);
+
+ await rolesPage.rolesTable.search(role2.name_i18n['en-US']);
+
+ await expect(
+ rolesPage.rolesTable.cell(role1.name_i18n['en-US'])
+ ).toHaveCount(0);
+ await expect(
+ rolesPage.rolesTable.cell(role2.name_i18n['en-US'])
+ ).toBeVisible();
+
+ await rolesPage.rolesTable.search('');
+
+ await expect(
+ rolesPage.rolesTable.cell(role1.name_i18n['en-US'])
+ ).toBeVisible();
+ await expect(
+ rolesPage.rolesTable.cell(role2.name_i18n['en-US'])
+ ).toBeVisible();
+ }
+);
+
+test(
+ 'Can sort the roles',
+ {tag: ['@LPD-50065']},
+ async ({apiHelpers, page, rolesPage}) => {
+ const role1 = await apiHelpers.headlessAdminUser.postRole({
+ name: `A${getRandomString()}`,
+ roleType: 'regular',
+ });
+
+ const role2 = await apiHelpers.headlessAdminUser.postRole({
+ name: `Z${getRandomString()}`,
+ roleType: 'regular',
+ });
+
+ await rolesPage.goto();
+
+ await expect(rolesPage.rolesTable.searchInput).toBeEditable();
+
+ await rolesPage.rolesTable.changeView('Table');
+
+ await expect(rolesPage.rolesTable.cell('Title')).toBeVisible();
+
+ await page.reload();
+
+ await expect(async () => {
+ await setItemsPerPage(page, 4);
+
+ await expect(page.getByText('Showing 1 to 4')).toBeVisible();
+ }).toPass();
+
+ await expect(async () => {
+ await rolesPage.rolesTable.orderButton.click();
+
+ await expect(rolesPage.rolesTable.cell(role1.name)).toBeVisible({
+ timeout: 300,
+ });
+ await expect(rolesPage.rolesTable.cell(role2.name)).toHaveCount(0, {
+ timeout: 300,
+ });
+ }).toPass();
+
+ await rolesPage.rolesTable.orderButton.click();
+
+ await expect(rolesPage.rolesTable.cell(role1.name)).toHaveCount(0);
+ await expect(rolesPage.rolesTable.cell(role2.name)).toBeVisible();
+
+ await rolesPage.rolesTable.orderButton.click();
+ }
+);
+
+test(
+ 'Roles can be viewed in table view',
+ {tag: ['@LPD-50065']},
+ async ({page, rolesPage}) => {
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+
+ await expect(rolesPage.rolesTable.cell('Title')).toBeVisible();
+ await expect(rolesPage.rolesTable.cell('Description')).toBeVisible();
+ await expect(
+ rolesPage.rolesTable.cell('Number of Assignees')
+ ).toBeVisible();
+ }
+);
+
+test(
+ 'Regular role can be deleted',
+ {tag: ['@LPD-50065']},
+ async ({apiHelpers, page, rolesPage}) => {
+ page.on('dialog', (dialog) => dialog.accept());
+
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ roleType: 'regular',
+ });
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toBeVisible();
+
+ await expect(async () => {
+ await (await rolesPage.rolesTable.rowActions(role.name)).click();
+
+ await expect(rolesPage.deleteButton).toBeVisible({timeout: 100});
+ }).toPass();
+
+ await rolesPage.deleteButton.click();
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toHaveCount(0);
+
+ await page.reload();
+
+ await rolesPage.rolesTable.search(role.name);
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toHaveCount(0);
+ }
+);
+
+test(
+ 'Organization role can be deleted',
+ {tag: ['@LPD-50065']},
+ async ({apiHelpers, page, rolesPage}) => {
+ page.on('dialog', (dialog) => dialog.accept());
+
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ roleType: 'organization',
+ });
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toHaveCount(0);
+
+ await rolesPage.organizationRolesLink.click();
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toBeVisible();
+
+ await expect(async () => {
+ await (await rolesPage.rolesTable.rowActions(role.name)).click();
+
+ await expect(rolesPage.deleteButton).toBeVisible({timeout: 100});
+ }).toPass();
+
+ await rolesPage.deleteButton.click();
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toHaveCount(0);
+
+ await page.reload();
+
+ await rolesPage.rolesTable.search(role.name);
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toHaveCount(0);
+ }
+);
+
+test(
+ 'Site role can be deleted',
+ {tag: ['@LPD-50065']},
+ async ({apiHelpers, page, rolesPage}) => {
+ page.on('dialog', (dialog) => dialog.accept());
+
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ roleType: 'site',
+ });
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toHaveCount(0);
+
+ await rolesPage.siteRolesLink.click();
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toBeVisible();
+
+ await expect(async () => {
+ await (await rolesPage.rolesTable.rowActions(role.name)).click();
+
+ await expect(rolesPage.deleteButton).toBeVisible({timeout: 100});
+ }).toPass();
+
+ await rolesPage.deleteButton.click();
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toHaveCount(0);
+
+ await page.reload();
+
+ await rolesPage.rolesTable.search(role.name);
+
+ await expect(rolesPage.rolesTable.cell(role.name)).toHaveCount(0);
+ }
+);
+
+test(
+ 'User can be assigned to a regular role',
+ {tag: ['@LPD-50065', '@LPS-109572']},
+ async ({apiHelpers, page, roleAssigneesPage, rolePage, rolesPage}) => {
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ roleType: 'regular',
+ });
+
+ const user = await apiHelpers.headlessAdminUser.postUserAccount();
+
+ await apiHelpers.headlessAdminUser.assignUserToRole(
+ role.externalReferenceCode,
+ user.id
+ );
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(user.name)
+ ).toBeVisible();
+ }
+);
+
+test(
+ 'User can be assigned / unassigned from a regular role',
+ {tag: ['@LPD-50065', '@LPS-109572']},
+ async ({
+ apiHelpers,
+ page,
+ roleAssigneesPage,
+ rolePage,
+ roleUserSelectorPage,
+ rolesPage,
+ }) => {
+ test.setTimeout(120000);
+
+ const companyId = await page.evaluate(() => {
+ return Liferay.ThemeDisplay.getCompanyId();
+ });
+
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ rolePermissions: [
+ {
+ actionIds: ['VIEW_CONTROL_PANEL'],
+ primaryKey: companyId,
+ resourceName: '90',
+ scope: 1,
+ },
+ {
+ actionIds: ['ACCESS_IN_CONTROL_PANEL'],
+ primaryKey: companyId,
+ resourceName:
+ 'com_liferay_user_groups_admin_web_portlet_UserGroupsAdminPortlet',
+ scope: 1,
+ },
+ ],
+ roleType: 'regular',
+ });
+
+ const user = await apiHelpers.headlessAdminUser.postUserAccount();
+
+ userData[user.alternateName] = {
+ name: user.givenName,
+ password: 'test',
+ surname: user.familyName,
+ };
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(user.name)
+ ).toHaveCount(0);
+
+ await roleAssigneesPage.assigneesTable.newButton.click();
+
+ await expect(
+ roleUserSelectorPage.usersTable.cell(user.name)
+ ).toBeVisible();
+
+ await roleUserSelectorPage.assignUsers([user.name]);
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(user.name)
+ ).toBeVisible();
+
+ await performLogout(page);
+ await performLoginViaApi(page, user.alternateName);
+
+ await expect(rolesPage.applicationsMenuButton).toBeVisible();
+
+ await performLogout(page);
+ await performLoginViaApi(page, 'test');
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(user.name)
+ ).toBeVisible();
+
+ await (
+ await roleAssigneesPage.assigneesTable.rowCheckbox(user.name)
+ ).check();
+ await roleAssigneesPage.removeButton.click();
+
+ await waitForAlert(page);
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(user.name)
+ ).toHaveCount(0);
+
+ await performLogout(page);
+ await performLoginViaApi(page, user.alternateName);
+
+ await expect(rolesPage.applicationsMenuButton).toHaveCount(0);
+ }
+);
+
+test(
+ 'User Group can be assigned / unassigned from a regular role',
+ {tag: ['@LPD-50065', '@LPS-109572']},
+ async ({
+ apiHelpers,
+ page,
+ roleAssigneesPage,
+ rolePage,
+ roleUserGroupSelectorPage,
+ rolesPage,
+ }) => {
+ test.setTimeout(120000);
+
+ const companyId = await page.evaluate(() => {
+ return Liferay.ThemeDisplay.getCompanyId();
+ });
+
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ rolePermissions: [
+ {
+ actionIds: ['VIEW_CONTROL_PANEL'],
+ primaryKey: companyId,
+ resourceName: '90',
+ scope: 1,
+ },
+ {
+ actionIds: ['ACCESS_IN_CONTROL_PANEL'],
+ primaryKey: companyId,
+ resourceName:
+ 'com_liferay_user_groups_admin_web_portlet_UserGroupsAdminPortlet',
+ scope: 1,
+ },
+ ],
+ roleType: 'regular',
+ });
+
+ const userGroup = await apiHelpers.headlessAdminUser.postUserGroup();
+
+ const user = await apiHelpers.headlessAdminUser.postUserAccount();
+
+ userData[user.alternateName] = {
+ name: user.givenName,
+ password: 'test',
+ surname: user.familyName,
+ };
+
+ await apiHelpers.headlessAdminUser.assignUsersToUserGroup(
+ userGroup.id,
+ [user.id]
+ );
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(userGroup.name)
+ ).toHaveCount(0);
+
+ await roleAssigneesPage.userGroupsLink.click();
+
+ await expect(
+ roleAssigneesPage.noDataMessage('user groups')
+ ).toBeVisible();
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(userGroup.name)
+ ).toHaveCount(0);
+
+ await roleAssigneesPage.assigneesTable.newButton.click();
+
+ await expect(
+ roleUserGroupSelectorPage.userGroupsTable.cell(userGroup.name)
+ ).toBeVisible();
+
+ await roleUserGroupSelectorPage.assignUserGroups([userGroup.name]);
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(userGroup.name)
+ ).toBeVisible();
+
+ await performLogout(page);
+ await performLoginViaApi(page, user.alternateName);
+
+ await expect(rolesPage.applicationsMenuButton).toBeVisible();
+
+ await performLogout(page);
+ await performLoginViaApi(page, 'test');
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+ await roleAssigneesPage.userGroupsLink.click();
+
+ await expect(
+ roleAssigneesPage.noDataMessage('user groups')
+ ).toHaveCount(0);
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(userGroup.name)
+ ).toBeVisible();
+
+ await (
+ await roleAssigneesPage.assigneesTable.rowCheckbox(userGroup.name)
+ ).check();
+ await roleAssigneesPage.removeButton.click();
+
+ await waitForAlert(page);
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(userGroup.name)
+ ).toHaveCount(0);
+
+ await performLogout(page);
+ await performLoginViaApi(page, user.alternateName);
+
+ await expect(rolesPage.applicationsMenuButton).toHaveCount(0);
+ }
+);
+
+test(
+ 'Organization can be assigned / unassigned from a regular role',
+ {tag: ['@LPD-50065']},
+ async ({
+ apiHelpers,
+ page,
+ roleAssigneesPage,
+ roleOrganizationSelectorPage,
+ rolePage,
+ rolesPage,
+ }) => {
+ test.setTimeout(120000);
+
+ const companyId = await page.evaluate(() => {
+ return Liferay.ThemeDisplay.getCompanyId();
+ });
+
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ rolePermissions: [
+ {
+ actionIds: ['VIEW_CONTROL_PANEL'],
+ primaryKey: companyId,
+ resourceName: '90',
+ scope: 1,
+ },
+ {
+ actionIds: ['ACCESS_IN_CONTROL_PANEL'],
+ primaryKey: companyId,
+ resourceName:
+ 'com_liferay_user_groups_admin_web_portlet_UserGroupsAdminPortlet',
+ scope: 1,
+ },
+ ],
+ roleType: 'regular',
+ });
+
+ const organization =
+ await apiHelpers.headlessAdminUser.postOrganization();
+
+ const user = await apiHelpers.headlessAdminUser.postUserAccount();
+
+ userData[user.alternateName] = {
+ name: user.givenName,
+ password: 'test',
+ surname: user.familyName,
+ };
+
+ await apiHelpers.headlessAdminUser.assignUserToOrganizationByEmailAddress(
+ organization.id,
+ user.emailAddress
+ );
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(organization.name)
+ ).toHaveCount(0);
+
+ await roleAssigneesPage.organizationsLink.click();
+
+ await expect(
+ roleAssigneesPage.noDataMessage('organizations')
+ ).toBeVisible();
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(organization.name)
+ ).toHaveCount(0);
+
+ await roleAssigneesPage.assigneesTable.newButton.click();
+
+ await expect(
+ roleOrganizationSelectorPage.organizationsTable.cell(
+ organization.name
+ )
+ ).toBeVisible();
+
+ await roleOrganizationSelectorPage.assignOrganizations([
+ organization.name,
+ ]);
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(organization.name)
+ ).toBeVisible();
+
+ await performLogout(page);
+ await performLoginViaApi(page, user.alternateName);
+
+ await expect(rolesPage.applicationsMenuButton).toBeVisible();
+
+ await performLogout(page);
+ await performLoginViaApi(page, 'test');
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+ await roleAssigneesPage.organizationsLink.click();
+
+ await expect(
+ roleAssigneesPage.noDataMessage('organizations')
+ ).toHaveCount(0);
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(organization.name)
+ ).toBeVisible();
+
+ await (
+ await roleAssigneesPage.assigneesTable.rowCheckbox(
+ organization.name
+ )
+ ).check();
+ await roleAssigneesPage.removeButton.click();
+
+ await waitForAlert(page);
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(organization.name)
+ ).toHaveCount(0);
+
+ await performLogout(page);
+ await performLoginViaApi(page, user.alternateName);
+
+ await expect(rolesPage.applicationsMenuButton).toHaveCount(0);
+ }
+);
+
+test(
+ 'Segment can be assigned / unassigned from a regular role',
+ {tag: ['@LPD-50065']},
+ async ({
+ apiHelpers,
+ page,
+ roleAssigneesPage,
+ rolePage,
+ roleSegmentSelectorPage,
+ rolesPage,
+ }) => {
+ test.setTimeout(120000);
+
+ const companyId = await page.evaluate(() => {
+ return Liferay.ThemeDisplay.getCompanyId();
+ });
+
+ const globalSite = await apiHelpers.jsonWebServicesGroup.getGroupByKey(
+ companyId,
+ companyId
+ );
+
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ roleType: 'regular',
+ });
+
+ const segmentsEntry =
+ await apiHelpers.jsonWebServicesSegmentsEntry.addSegmentsEntry({
+ criteria: {
+ criteria: {
+ user: {
+ conjunction: 'and',
+ filterString: `(emailAddress eq 'liferay.com')`,
+ typeValue: 'model',
+ },
+ },
+ filterString: {
+ model: `(emailAddress eq 'liferay.com')`,
+ },
+ },
+ groupId: globalSite.groupId,
+ name: getRandomString(),
+ });
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(
+ segmentsEntry.nameCurrentValue
+ )
+ ).toHaveCount(0);
+
+ await roleAssigneesPage.segmentsLink.click();
+
+ await expect(roleAssigneesPage.noDataMessage('segments')).toBeVisible();
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(
+ segmentsEntry.nameCurrentValue
+ )
+ ).toHaveCount(0);
+
+ await roleAssigneesPage.assigneesTable.newButton.click();
+
+ await expect(
+ roleSegmentSelectorPage.segmentsTable.cell(
+ segmentsEntry.nameCurrentValue
+ )
+ ).toBeVisible();
+
+ await roleSegmentSelectorPage.assignSegments([
+ segmentsEntry.nameCurrentValue,
+ ]);
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(
+ segmentsEntry.nameCurrentValue
+ )
+ ).toBeVisible();
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+ await roleAssigneesPage.segmentsLink.click();
+
+ await expect(roleAssigneesPage.noDataMessage('segments')).toHaveCount(
+ 0
+ );
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(
+ segmentsEntry.nameCurrentValue
+ )
+ ).toBeVisible();
+
+ await (
+ await roleAssigneesPage.assigneesTable.rowCheckbox(
+ segmentsEntry.nameCurrentValue
+ )
+ ).check();
+ await roleAssigneesPage.removeButton.click();
+
+ await waitForAlert(page);
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(
+ segmentsEntry.nameCurrentValue
+ )
+ ).toHaveCount(0);
+ }
+);
+
+test(
+ 'Site can be assigned / unassigned from a regular role',
+ {tag: ['@LPD-50065']},
+ async ({
+ apiHelpers,
+ page,
+ roleAssigneesPage,
+ rolePage,
+ roleSiteSelectorPage,
+ rolesPage,
+ site,
+ }) => {
+ test.setTimeout(120000);
+
+ const companyId = await page.evaluate(() => {
+ return Liferay.ThemeDisplay.getCompanyId();
+ });
+
+ const role = await apiHelpers.headlessAdminUser.postRole({
+ name: getRandomString(),
+ rolePermissions: [
+ {
+ actionIds: ['VIEW_CONTROL_PANEL'],
+ primaryKey: companyId,
+ resourceName: '90',
+ scope: 1,
+ },
+ {
+ actionIds: ['ACCESS_IN_CONTROL_PANEL'],
+ primaryKey: companyId,
+ resourceName:
+ 'com_liferay_user_groups_admin_web_portlet_UserGroupsAdminPortlet',
+ scope: 1,
+ },
+ ],
+ roleType: 'regular',
+ });
+
+ const user = await apiHelpers.headlessAdminUser.postUserAccount();
+
+ userData[user.alternateName] = {
+ name: user.givenName,
+ password: 'test',
+ surname: user.familyName,
+ };
+
+ await apiHelpers.jsonWebServicesUser.addGroupUsers(site.id, [user.id]);
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(site.name)
+ ).toHaveCount(0);
+
+ await roleAssigneesPage.sitesLink.click();
+
+ await expect(roleAssigneesPage.noDataMessage('sites')).toBeVisible();
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(site.name)
+ ).toHaveCount(0);
+
+ await roleAssigneesPage.assigneesTable.newButton.click();
+
+ await expect(
+ roleSiteSelectorPage.sitesTable.cell(site.name)
+ ).toBeVisible();
+
+ await roleSiteSelectorPage.assignSite([site.name]);
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(site.name)
+ ).toBeVisible();
+
+ await performLogout(page);
+ await performLoginViaApi(page, user.alternateName);
+
+ await expect(rolesPage.applicationsMenuButton).toBeVisible();
+
+ await performLogout(page);
+ await performLoginViaApi(page, 'test');
+
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search(role.name);
+ await (await rolesPage.rolesTable.cellLink(role.name)).click();
+ await rolePage.assigneesLink.click();
+ await roleAssigneesPage.sitesLink.click();
+
+ await expect(roleAssigneesPage.noDataMessage('sites')).toHaveCount(0);
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(site.name)
+ ).toBeVisible();
+
+ await (
+ await roleAssigneesPage.assigneesTable.rowCheckbox(site.name)
+ ).check();
+ await roleAssigneesPage.removeButton.click();
+
+ await waitForAlert(page);
+
+ await expect(
+ roleAssigneesPage.assigneesTable.cell(site.name)
+ ).toHaveCount(0);
+
+ await performLogout(page);
+ await performLoginViaApi(page, user.alternateName);
+
+ await expect(rolesPage.applicationsMenuButton).toHaveCount(0);
+ }
+);
+
+test(
+ 'Segments assignee tab is not available for Administrator role',
+ {tag: ['@LPD-50065', '@LPS-202614']},
+ async ({page, roleAssigneesPage, rolePage, rolesPage}) => {
+ await rolesPage.goto();
+
+ await rolesPage.rolesTable.changeView('Table');
+ await page.waitForLoadState('networkidle');
+ await rolesPage.rolesTable.search('Administrator');
+ await (await rolesPage.rolesTable.cellLink('Administrator')).click();
+ await rolePage.assigneesLink.click();
+
+ await expect(roleAssigneesPage.noDataMessage('users')).toHaveCount(0);
+ await expect(roleAssigneesPage.organizationsLink).toBeVisible();
+ await expect(roleAssigneesPage.segmentsLink).toHaveCount(0);
+ await expect(roleAssigneesPage.sitesLink).toBeVisible();
+ await expect(roleAssigneesPage.userGroupsLink).toBeVisible();
+ await expect(roleAssigneesPage.usersLink).toBeVisible();
+ }
+);
diff --git a/modules/test/playwright/tests/site-cms-site-initializer/pages/StructureBuilderPage.ts b/modules/test/playwright/tests/site-cms-site-initializer/pages/StructureBuilderPage.ts
index ce876ab9b3013d..9eae99f889dd41 100644
--- a/modules/test/playwright/tests/site-cms-site-initializer/pages/StructureBuilderPage.ts
+++ b/modules/test/playwright/tests/site-cms-site-initializer/pages/StructureBuilderPage.ts
@@ -3,13 +3,29 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
+import {ObjectDefinitionApi} from '@liferay/object-admin-rest-client-js';
import {Locator, Page, expect} from '@playwright/test';
+import {ApiHelpers} from '../../../helpers/ApiHelpers';
import {clickAndExpectToBeVisible} from '../../../utils/clickAndExpectToBeVisible';
import {PORTLET_URLS} from '../../../utils/portletUrls';
import {waitForAlert} from '../../../utils/waitForAlert';
-type FieldType = 'Text';
+export const FIELD_TYPES = [
+ 'Text',
+ 'Long Text',
+ 'Rich Text',
+ 'Integer',
+ 'Decimal',
+ 'Single Select',
+ 'Multiselect',
+ 'Date',
+ 'Date and Time',
+ 'Boolean',
+ 'Upload',
+] as const;
+
+type FieldType = (typeof FIELD_TYPES)[number];
export class StructureBuilderPage {
readonly page: Page;
@@ -48,7 +64,7 @@ export class StructureBuilderPage {
await clickAndExpectToBeVisible({
autoClick: true,
- target: this.page.getByRole('menuitem', {name: type}),
+ target: this.page.getByRole('menuitem', {exact: true, name: type}),
trigger,
});
}
@@ -89,6 +105,18 @@ export class StructureBuilderPage {
}
}
+ async deleteStructure(id: number) {
+ const apiHelpers = new ApiHelpers(this.page);
+
+ const APIClient = await apiHelpers.buildRestClient(ObjectDefinitionApi);
+
+ const {
+ response: {statusCode},
+ } = await APIClient.deleteObjectDefinition(id);
+
+ expect(statusCode).toBe(204);
+ }
+
async publishStructure() {
await this.publishButton.click();
@@ -98,8 +126,23 @@ export class StructureBuilderPage {
}
async saveStructure() {
- await this.saveButton.click();
+ const save = async () => {
+ await this.saveButton.click();
+
+ await waitForAlert(this.page, 'successfully', {timeout: 1000});
+ };
+
+ const [response] = await Promise.all([
+ this.page.waitForResponse(
+ (response) =>
+ response.url().includes('object-definitions') &&
+ response.status() === 200
+ ),
+ await save(),
+ ]);
+
+ const {id} = await response.json();
- await waitForAlert(this.page, 'successfully', {timeout: 1000});
+ return {id};
}
}
diff --git a/modules/test/playwright/tests/site-cms-site-initializer/structureBuilder.spec.ts b/modules/test/playwright/tests/site-cms-site-initializer/structureBuilder.spec.ts
index c23cdf20c3f8df..162d0b4cb20c29 100644
--- a/modules/test/playwright/tests/site-cms-site-initializer/structureBuilder.spec.ts
+++ b/modules/test/playwright/tests/site-cms-site-initializer/structureBuilder.spec.ts
@@ -3,18 +3,16 @@
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
-import {ObjectDefinitionApi} from '@liferay/object-admin-rest-client-js';
import {expect, mergeTests} from '@playwright/test';
-import {apiHelpersTest} from '../../fixtures/apiHelpersTest';
import {loginTest} from '../../fixtures/loginTest';
import {getRandomInt} from '../../utils/getRandomInt';
import {cmsPagesTest} from './fixtures/cmsPagesTest';
+import {FIELD_TYPES} from './pages/StructureBuilderPage';
-const test = mergeTests(apiHelpersTest, cmsPagesTest, loginTest());
+const test = mergeTests(cmsPagesTest, loginTest());
test('Structures can be saved and published', async ({
- apiHelpers,
page,
structureBuilderPage,
}) => {
@@ -23,32 +21,15 @@ test('Structures can be saved and published', async ({
await structureBuilderPage.goto();
- // Check invalid labels don't work
-
- await structureBuilderPage.changeStructureLabel('1');
-
- await expect(async () => {
- await structureBuilderPage.saveStructure();
- }).not.toPass();
-
- // Put valid label
+ // Change label
const label = `Structure ${getRandomInt()}`;
await structureBuilderPage.changeStructureLabel(label);
- // Save structure and capture object definition id
-
- const [response] = await Promise.all([
- page.waitForResponse(
- (response) =>
- response.url().includes('object-definitions') &&
- response.status() === 200
- ),
- await structureBuilderPage.saveStructure(),
- ]);
+ // Save structure
- const {id} = await response.json();
+ const {id} = await structureBuilderPage.saveStructure();
await expect(page.locator('.alert-danger')).not.toBeVisible();
@@ -74,11 +55,37 @@ test('Structures can be saved and published', async ({
// Delete structure
- const APIClient = await apiHelpers.buildRestClient(ObjectDefinitionApi);
+ await structureBuilderPage.deleteStructure(id);
+});
+
+test('Structures can be saved with all type of fields', async ({
+ structureBuilderPage,
+}) => {
+
+ // Go to the Structure Builder
+
+ await structureBuilderPage.goto();
+
+ // Change label
+
+ const label = `Structure ${getRandomInt()}`;
+
+ await structureBuilderPage.changeStructureLabel(label);
+
+ // Add a field of each type
- const {
- response: {statusCode},
- } = await APIClient.deleteObjectDefinition(id);
+ for (const type of FIELD_TYPES) {
+ await structureBuilderPage.addField(type);
+ }
+
+ // Save and publish the structure
+
+ const {id} = await structureBuilderPage.saveStructure();
+ await structureBuilderPage.publishStructure();
+
+ // Delete the structure
+
+ // Delete structure
- expect(statusCode).toBe(204);
+ await structureBuilderPage.deleteStructure(id);
});
diff --git a/modules/test/playwright/tests/staging-configuration-web/pages/StagingConfigurationPage.ts b/modules/test/playwright/tests/staging-configuration-web/pages/StagingConfigurationPage.ts
index 05a76bf5e43121..3f1eecde715372 100644
--- a/modules/test/playwright/tests/staging-configuration-web/pages/StagingConfigurationPage.ts
+++ b/modules/test/playwright/tests/staging-configuration-web/pages/StagingConfigurationPage.ts
@@ -28,7 +28,8 @@ export class StagingConfigurationPage {
async gotoStagingConfiguration(siteUrl?: Site['friendlyUrlPath']) {
await this.page.goto(
- `/group${siteUrl || '/guest'}${PORTLET_URLS.staging}`
+ `/group${siteUrl || '/guest'}${PORTLET_URLS.staging}`,
+ {waitUntil: 'domcontentloaded'}
);
}
diff --git a/modules/test/playwright/tests/staging-configuration-web/stagingConfiguration.spec.ts b/modules/test/playwright/tests/staging-configuration-web/stagingConfiguration.spec.ts
index 6873a8db6ef060..6f065b1034010e 100644
--- a/modules/test/playwright/tests/staging-configuration-web/stagingConfiguration.spec.ts
+++ b/modules/test/playwright/tests/staging-configuration-web/stagingConfiguration.spec.ts
@@ -7,17 +7,42 @@ import {mergeTests} from '@playwright/test';
import {apiHelpersTest} from '../../fixtures/apiHelpersTest';
import {applicationsMenuPageTest} from '../../fixtures/applicationsMenuPageTest';
+import {dataApiHelpersTest} from '../../fixtures/dataApiHelpersTest';
+import {featureFlagsTest} from '../../fixtures/featureFlagsTest';
import {loginTest} from '../../fixtures/loginTest';
+import {pageEditorPagesTest} from '../../fixtures/pageEditorPagesTest';
+import {portletConfigurationPermissionsPageTest} from '../../fixtures/portletConfigurationPermissionsPagesTest';
+import {uiElementsPageTest} from '../../fixtures/uiElementsTest';
+import {webContentDisplayPageTest} from '../../fixtures/webContentDisplayPageTest';
import getRandomString from '../../utils/getRandomString';
+import getBasicWebContentStructureId from '../../utils/structured-content/getBasicWebContentStructureId';
+import {stagingPageTest} from '../export-import-web/fixtures/stagingPageTest';
import {stagingConfigurationPageTest} from './fixtures/stagingConfigurationPageTest';
export const test = mergeTests(
applicationsMenuPageTest,
apiHelpersTest,
loginTest(),
+ pageEditorPagesTest,
stagingConfigurationPageTest
);
+export const testFlagsEnabled = mergeTests(
+ apiHelpersTest,
+ featureFlagsTest({
+ 'LPD-11131': {enabled: true},
+ 'LPD-35013': {enabled: true},
+ 'LPD-39304': {enabled: true},
+ }),
+ dataApiHelpersTest,
+ loginTest(),
+ portletConfigurationPermissionsPageTest,
+ stagingPageTest,
+ test,
+ webContentDisplayPageTest,
+ uiElementsPageTest
+);
+
test('Check if local staging can be enabled', async ({
apiHelpers,
applicationsMenuPage,
@@ -37,3 +62,84 @@ test('Check if local staging can be enabled', async ({
await stagingConfigurationPage.enableLocalStaging({});
});
+
+testFlagsEnabled(
+ 'Check if local staging with page-scoped Web Content can be enabled',
+ {tag: ['@LPS-83147']},
+ async ({
+ apiHelpers,
+ page,
+ pageEditorPage,
+ uiElementsPage,
+ webContentDisplayPage,
+ }) => {
+ const siteName = getRandomString();
+ const layoutName = getRandomString();
+ const webContentName = getRandomString();
+
+ const site = await apiHelpers.headlessSite.createSite({
+ name: siteName,
+ });
+
+ apiHelpers.data.push({id: site.id, type: 'site'});
+
+ const layout = await apiHelpers.jsonWebServicesLayout.addLayout({
+ groupId: site.id,
+ options: {type: 'portlet'},
+ title: layoutName,
+ });
+
+ await pageEditorPage.goto(layout, site.friendlyUrlPath);
+
+ await page.getByLabel('Add', {exact: true}).click();
+
+ await pageEditorPage.addWidgetToWidgetPageTemplate(
+ 'Content Management',
+ 'Web Content Display'
+ );
+
+ await uiElementsPage.anySuccessAlert.waitFor({state: 'visible'});
+ await uiElementsPage.anySuccessAlert.waitFor({state: 'hidden'});
+
+ await webContentDisplayPage.goToConfiguration();
+ await webContentDisplayPage.setScope(layout.uuid);
+ await webContentDisplayPage.saveConfigurationFrameOptions();
+
+ const basicWebContentStructureId =
+ await getBasicWebContentStructureId(apiHelpers);
+
+ const company =
+ await apiHelpers.jsonWebServicesCompany.getCompanyByWebId(
+ 'liferay.com'
+ );
+
+ const group = await apiHelpers.jsonWebServicesGroup.getGroupByKey(
+ company.companyId,
+ layout.plid
+ );
+
+ const webContent =
+ await apiHelpers.jsonWebServicesJournal.addWebContent({
+ content: getRandomString(),
+ ddmStructureId: basicWebContentStructureId,
+ groupId: group.groupId,
+ titleMap: {en_US: webContentName},
+ });
+
+ apiHelpers.data.push({
+ id: `${group.groupId}_${webContent.articleId}`,
+ type: 'webContent',
+ });
+
+ await webContentDisplayPage.addWebContentWithDisplay(webContentName);
+
+ await apiHelpers.jsonWebServicesStaging.enableLocalStaging({
+ groupId: site.id,
+ });
+
+ await webContentDisplayPage.gotoWebContentAdmin(layout.plid);
+ await page
+ .getByRole('link', {name: webContentName})
+ .waitFor({state: 'visible'});
+ }
+);
diff --git a/modules/test/playwright/tests/users-admin-web/gdpr.spec.ts b/modules/test/playwright/tests/users-admin-web/gdpr.spec.ts
index 0821bb7341ff9d..7f0c47401e38d3 100644
--- a/modules/test/playwright/tests/users-admin-web/gdpr.spec.ts
+++ b/modules/test/playwright/tests/users-admin-web/gdpr.spec.ts
@@ -57,6 +57,8 @@ export const testAdmin = mergeTests(
usersAndOrganizationsPagesTest
);
+const anonymousUserName = 'Anonymous Anonymous';
+
async function checkUsernameAssociatedWithObjects(
counters: {
blog: number;
@@ -580,7 +582,7 @@ testAdmin(
).toHaveCount(1);
await expect(
userAssociatedDataJournalPage.articleCreator(
- 'Anonymous Anonymous',
+ anonymousUserName,
webContent1Name
)
).toBeVisible();
@@ -610,7 +612,7 @@ testAdmin(
).toHaveCount(1);
await expect(
userAssociatedDataJournalPage.articleCreator(
- 'Anonymous Anonymous',
+ anonymousUserName,
webContent2Name
)
).toBeVisible();
@@ -852,27 +854,25 @@ testAdmin(
await page.goto(`/group/${site.name}${PORTLET_URLS.documentLibrary}`);
- const anonymousUser = 'Anonymous Anonymous';
-
- await expect(page.getByText(anonymousUser)).toHaveCount(2);
+ await expect(page.getByText(anonymousUserName)).toHaveCount(2);
await userAssociatedDataDocumentLibraryPage.checkFolderCreator(
folder,
- anonymousUser
+ anonymousUserName
);
await page.goto(`/group/${site.name}${PORTLET_URLS.documentLibrary}`);
await userAssociatedDataDocumentLibraryPage.checkDocumentCreator(
attachment1,
- anonymousUser
+ anonymousUserName
);
await page.goto(`/group/${site.name}${PORTLET_URLS.documentLibrary}`);
await userAssociatedDataDocumentLibraryPage.checkDocumentCreator(
attachment2,
- anonymousUser
+ anonymousUserName
);
}
);
@@ -1009,8 +1009,6 @@ testAdmin(
await page.goto(`/group/${site.name}${PORTLET_URLS.documentLibrary}`);
- const anonymousUserName = 'Anonymous Anonymous';
-
await expect(page.getByText(anonymousUserName)).toHaveCount(0);
await userAssociatedDataDocumentLibraryPage.checkFolderCreator(
@@ -1062,3 +1060,105 @@ testAdmin(
);
}
);
+
+testAdmin(
+ 'Can anonymize via info panel',
+ {tag: '@LPD-50002'},
+ async ({
+ apiHelpers,
+ blogsPage,
+ page,
+ personalDataErasurePage,
+ usersAndOrganizationsPage,
+ }) => {
+ page.on('dialog', (dialog) => {
+ dialog.accept();
+ });
+
+ const userAccount =
+ await apiHelpers.headlessAdminUser.postUserAccount();
+
+ userData[userAccount.alternateName] = {
+ name: userAccount.givenName,
+ password: 'test',
+ surname: userAccount.familyName,
+ };
+
+ const site = await apiHelpers.headlessSite.createSite({
+ name: 'Site' + getRandomInt(),
+ });
+
+ apiHelpers.data.push({id: site.id, type: 'site'});
+
+ const layout = await apiHelpers.headlessDelivery.createSitePage({
+ siteId: site.id,
+ title: 'Page' + getRandomInt(),
+ });
+
+ const role =
+ await apiHelpers.headlessAdminUser.getRoleByName('Administrator');
+
+ await apiHelpers.headlessAdminUser.postRoleByExternalReferenceCodeUserAccountAssociation(
+ role.externalReferenceCode,
+ userAccount.id
+ );
+
+ await performLogout(page);
+ await performLoginViaApi(page, userAccount.alternateName);
+
+ const blog1Name = 'Blog' + getRandomInt();
+ const blog2Name = 'Blog' + getRandomInt();
+
+ const blog1 = await apiHelpers.headlessDelivery.postBlog(site.id, {
+ headline: blog1Name,
+ });
+
+ await apiHelpers.headlessDelivery.postBlog(site.id, {
+ headline: blog2Name,
+ });
+
+ await page.goto(`/group/${site.name}/${layout.friendlyUrlPath}`);
+
+ await performLogout(page);
+ await performLoginViaApi(page, 'test');
+
+ await usersAndOrganizationsPage.goToUsers(false);
+ await (
+ await usersAndOrganizationsPage.usersTableRowActions(
+ userAccount.alternateName
+ )
+ ).click();
+
+ await usersAndOrganizationsPage.deletePersonalDataMenuItem.click();
+
+ await waitForAlert(page);
+
+ await expect(
+ personalDataErasurePage.selectAllItemsOnPageCheckbox
+ ).toBeVisible();
+
+ await personalDataErasurePage.blogsRadioButton.check();
+ await personalDataErasurePage
+ .objectCheckBox(blog1.id, blog1Name, true)
+ .check();
+
+ await expect(async () => {
+ await personalDataErasurePage.infoPanelButton.click();
+ await personalDataErasurePage
+ .infoPanelEllipsisButton(blog1Name)
+ .click();
+ }).toPass();
+
+ await personalDataErasurePage.anonymizeLink.click();
+
+ await expect(
+ personalDataErasurePage.objectLink(blog1.headline)
+ ).not.toBeVisible();
+
+ await page.goto(`/group/${site.name}${PORTLET_URLS.blogs}`);
+
+ await expect(blogsPage.blogName(blog1Name)).toHaveCount(1);
+ await expect(blogsPage.blogName(blog2Name)).toHaveCount(1);
+ await expect(page.getByText(anonymousUserName)).toHaveCount(1);
+ }
+);
diff --git a/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/pages/publisher-dashboard/publisherAppPage.ts b/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/pages/publisher-dashboard/publisherAppPage.ts
index 4bfdbc9a2e0749..0ca315e1dd21f6 100644
--- a/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/pages/publisher-dashboard/publisherAppPage.ts
+++ b/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/pages/publisher-dashboard/publisherAppPage.ts
@@ -12,9 +12,10 @@ import {PublishProductPayload, Steps} from '../../types';
export class PublisherAppPage {
readonly addPackagesButton: Locator;
readonly backButton: Locator;
- readonly cloudCompatibleRadio: Locator;
+ readonly cloudDropdownOption: Locator;
readonly confirmButton: Locator;
readonly continueButton: Locator;
+ readonly dxpDropdownOption: Locator;
readonly form: {
build: {
cpu: Locator;
@@ -36,10 +37,12 @@ export class PublisherAppPage {
version: Locator;
};
};
+ readonly fragmentDropdownOption: Locator;
protected publishProductPayload: PublishProductPayload;
readonly logoUploadButton: Locator;
readonly page: Page;
readonly paidPriceModel: Locator;
+ readonly selectAppTypeDropdown: Locator;
readonly selectFileButton: Locator;
readonly standardLicenses: Locator;
readonly submissionCheckbox: Locator;
@@ -51,10 +54,14 @@ export class PublisherAppPage {
name: 'Add Package(s)',
});
this.backButton = page.getByRole('button', {name: 'Back'});
- this.cloudCompatibleRadio = page.locator('.radio-card-button-icon');
-
+ this.cloudDropdownOption = page.getByRole('menuitem', {
+ name: 'Cloud App Backend client',
+ });
this.confirmButton = page.getByRole('button', {name: 'Confirm'});
this.continueButton = page.getByRole('button', {name: 'Continue'});
+ this.dxpDropdownOption = page.getByRole('menuitem', {
+ name: 'DXP App Module-based apps',
+ });
this.form = {
build: {
cpu: page.getByPlaceholder('Enter the number of CPUs'),
@@ -80,12 +87,18 @@ export class PublisherAppPage {
version: page.getByPlaceholder('0.0.0'),
},
};
+ this.fragmentDropdownOption = page.getByRole('menuitem', {
+ name: 'Fragment/Collection of',
+ });
this.logoUploadButton = page.getByText('Upload Image');
this.page = page;
this.paidPriceModel = page
.locator('div')
.filter({hasText: /^Paid$/})
.first();
+ this.selectAppTypeDropdown = page.getByRole('button', {
+ name: 'Choose an option',
+ });
this.selectFileButton = page.getByRole('button', {
name: 'Select a file',
});
@@ -165,8 +178,10 @@ export class PublisherAppPage {
async fillBuild() {
expect(this.continueButton).toBeDisabled();
- if (this.publishProductPayload.cloudCompatible) {
- await this.cloudCompatibleRadio.first().click();
+ if (this.publishProductPayload.appType === 'cloud') {
+ await this.selectAppTypeDropdown.click();
+
+ await this.cloudDropdownOption.first().click();
await this.form.build.cpu.fill(
this.publishProductPayload.resourceRequirements.cpus.toString()
@@ -175,8 +190,17 @@ export class PublisherAppPage {
this.publishProductPayload.resourceRequirements.ram.toString()
);
}
- else {
- await this.cloudCompatibleRadio.last().click();
+
+ if (this.publishProductPayload.appType === 'dxp') {
+ await this.selectAppTypeDropdown.click();
+
+ await this.dxpDropdownOption.first().click();
+ }
+
+ if (this.publishProductPayload.appType === 'fragment') {
+ await this.selectAppTypeDropdown.click();
+
+ await this.fragmentDropdownOption.first().click();
}
for (const compatibleOffering of this.publishProductPayload
diff --git a/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/types/index.ts b/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/types/index.ts
index 67a69f8c7df628..354afca94ec106 100644
--- a/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/types/index.ts
+++ b/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/types/index.ts
@@ -20,8 +20,8 @@ type ContactUs = {
};
export type PublishProductPayload = {
+ appType: string;
categories: string[];
- cloudCompatible: boolean;
compatibleOfferings: string[];
description: string;
dxpVersions: string[];
diff --git a/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/utils/constants.ts b/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/utils/constants.ts
index 3aa2988ba003aa..b3aca65a7da83f 100644
--- a/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/utils/constants.ts
+++ b/modules/test/playwright/tests/workspaces/liferay-workspace-marketplace/utils/constants.ts
@@ -19,9 +19,9 @@ export const ORDER_ITEMS = {
export const products = {
cloud_free: {
+ appType: 'cloud',
categories: ['Analytics and Optimization'],
- cloudCompatible: true,
- compatibleOfferings: ['Liferay SaaS'],
+ compatibleOfferings: ['Liferay PaaS', 'Liferay SaaS'],
description: 'My free cloud app',
dxpVersions: ['7.3'],
logo: path.join(dependenciesFolder, 'marketplace-icon.png'),
@@ -39,9 +39,9 @@ export const products = {
zipFiles: [path.join(dependenciesFolder, 'folder.marketplace.zip')],
},
cloud_paid: {
+ appType: 'cloud',
categories: ['Customer Data Management'],
- cloudCompatible: true,
- compatibleOfferings: ['Liferay SaaS'],
+ compatibleOfferings: ['Liferay PaaS', 'Liferay SaaS'],
description: 'My paid cloud app',
dxpVersions: ['7.3'],
logo: path.join(dependenciesFolder, 'marketplace-icon.png'),
@@ -68,8 +68,8 @@ export const products = {
zipFiles: [path.join(dependenciesFolder, 'folder.marketplace.zip')],
},
dxp_free: {
+ appType: 'dxp',
categories: ['Analytics and Optimization'],
- cloudCompatible: false,
compatibleOfferings: ['Liferay Self-Hosted', 'Liferay PaaS'],
description: 'My free Dxp app',
dxpVersions: ['7.3'],
@@ -84,8 +84,8 @@ export const products = {
zipFiles: [path.join(dependenciesFolder, 'folder.marketplace.zip')],
},
dxp_paid: {
+ appType: 'dxp',
categories: ['Customer Data Management'],
- cloudCompatible: false,
compatibleOfferings: ['Liferay Self-Hosted', 'Liferay PaaS'],
description: 'My paid cloud app',
dxpVersions: ['7.3'],
@@ -112,6 +112,59 @@ export const products = {
},
zipFiles: [path.join(dependenciesFolder, 'folder.marketplace.zip')],
},
+ fragment_free: {
+ appType: 'fragment',
+ categories: ['Fragment'],
+ compatibleOfferings: [
+ 'Liferay Self-Hosted',
+ 'Liferay PaaS',
+ 'Liferay SaaS',
+ ],
+ description: 'My free Fragment app',
+ dxpVersions: ['7.3'],
+ logo: path.join(dependenciesFolder, 'marketplace-icon.png'),
+ name: 'Fragment - Free',
+ priceModel: 'free',
+ tags: ['Business Use'],
+ version: {
+ notes: 'Lorem Ipsum...',
+ version: '1.0.0',
+ },
+ zipFiles: [path.join(dependenciesFolder, 'folder.fragment.zip')],
+ },
+ fragment_paid: {
+ appType: 'fragment',
+ categories: ['Fragment'],
+ compatibleOfferings: [
+ 'Liferay Self-Hosted',
+ 'Liferay PaaS',
+ 'Liferay SaaS',
+ ],
+ description: 'My paid Fragment app',
+ dxpVersions: ['7.3'],
+ logo: path.join(dependenciesFolder, 'marketplace-icon.png'),
+ name: 'Fragment - Paid',
+ price: {
+ developer: 50,
+ standard: 150,
+ },
+ priceModel: 'paid',
+ resourceRequirements: {
+ cpus: 0,
+ ram: 0,
+ },
+ support: {
+ publisherWebsiteUrl: 'www.liferay.com',
+ supportEmail: 'test@liferay.com',
+ supportPhone: '+00 00 000000000',
+ },
+ tags: ['Client Extension Type'],
+ version: {
+ notes: 'Lorem Ipsum...',
+ version: '1.0.0',
+ },
+ zipFiles: [path.join(dependenciesFolder, 'folder.fragment.zip')],
+ },
} as const;
export const solutions: {
diff --git a/modules/test/playwright/types/segments.d.ts b/modules/test/playwright/types/segments.d.ts
index 80f746bae7ea6c..d98d544bd9a716 100644
--- a/modules/test/playwright/types/segments.d.ts
+++ b/modules/test/playwright/types/segments.d.ts
@@ -18,5 +18,6 @@ type Segment = {
type SegmentsEntry = {
groupId: string;
+ nameCurrentValue: string;
segmentsEntryId: string;
};
diff --git a/modules/util/source-formatter/src/main/resources/dependencies/imports.txt b/modules/util/source-formatter/src/main/resources/dependencies/imports.txt
index a5399eb5624c04..c0a698adc75818 100644
--- a/modules/util/source-formatter/src/main/resources/dependencies/imports.txt
+++ b/modules/util/source-formatter/src/main/resources/dependencies/imports.txt
@@ -178,6 +178,7 @@ com.liferay.journal.model.JournalFolderConstants=com.liferay.journal.constants.J
com.liferay.journal.model.JournalStructureConstants=com.liferay.journal.constants.JournalStructureConstants
com.liferay.layout.admin.kernel.util.Sitemap=com.liferay.site.util.Sitemap
com.liferay.layout.admin.kernel.util.SitemapURLProvider=com.liferay.site.util.SitemapURLProvider
+com.liferay.layout.admin.kernel.util.SitemapUtil=com.liferay.site.manager.SitemapManager
com.liferay.layout.display.page.LayoutDisplayPageProviderTracker=com.liferay.layout.display.page.LayoutDisplayPageProviderRegistry
com.liferay.layout.page.template.LayoutPageTemplateEntryTypeConstants=com.liferay.layout.page.template.constants.LayoutPageTemplateEntryTypeConstants
com.liferay.mail.model.FileAttachment=com.liferay.mail.kernel.model.FileAttachment
diff --git a/modules/util/source-formatter/src/main/resources/dependencies/replacements.json b/modules/util/source-formatter/src/main/resources/dependencies/replacements.json
index 80a2162d323a34..840872aa3e1901 100644
--- a/modules/util/source-formatter/src/main/resources/dependencies/replacements.json
+++ b/modules/util/source-formatter/src/main/resources/dependencies/replacements.json
@@ -3720,6 +3720,12 @@
"issueKey": "LPD-49281",
"to": "updateCPAttachmentFileEntry(param#0#, param#1#, param#2#, false, null, param#3#, param#4#, param#5#, param#6#, param#7#, param#8#, param#9#, param#10#, param#11#, param#12#, param#13#, true, param#14#, param#15#, param#16#, param#17#, param#18#)"
},
+ {
+ "from": "SitemapManager.addURLElement",
+ "issueKey": "LPD-50074",
+ "newReference": "SitemapManager _sitemapManager",
+ "to": "_sitemapManager.addURLElement"
+ },
{
"from": "CookieKeys.COMMERCE_CONTINUE_AS_GUEST",
"issueKey": "LPS-159679",
diff --git a/modules/util/source-formatter/src/test/resources/com/liferay/source/formatter/dependencies/expected/upgrade/upgrade-catch-all-check/LPD_50074.testjava b/modules/util/source-formatter/src/test/resources/com/liferay/source/formatter/dependencies/expected/upgrade/upgrade-catch-all-check/LPD_50074.testjava
new file mode 100644
index 00000000000000..047d790053379c
--- /dev/null
+++ b/modules/util/source-formatter/src/test/resources/com/liferay/source/formatter/dependencies/expected/upgrade/upgrade-catch-all-check/LPD_50074.testjava
@@ -0,0 +1,24 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2024 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+package com.liferay.source.formatter.dependencies.upgrade;
+
+import com.liferay.site.manager.SitemapManager;
+
+import org.osgi.service.component.annotations.Reference;
+
+/**
+ * @author Regisson Aguiar
+ */
+public class LPD_50074 {
+
+ public void method() {
+ _sitemapManager.addURLElement(null, "test123", null, null, "test123", null);
+ }
+
+ @Reference
+ private SitemapManager _sitemapManager;
+
+}
\ No newline at end of file
diff --git a/modules/util/source-formatter/src/test/resources/com/liferay/source/formatter/dependencies/upgrade/upgrade-catch-all-check/LPD_50074.testjava b/modules/util/source-formatter/src/test/resources/com/liferay/source/formatter/dependencies/upgrade/upgrade-catch-all-check/LPD_50074.testjava
new file mode 100644
index 00000000000000..c271a3678563a2
--- /dev/null
+++ b/modules/util/source-formatter/src/test/resources/com/liferay/source/formatter/dependencies/upgrade/upgrade-catch-all-check/LPD_50074.testjava
@@ -0,0 +1,19 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2024 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+package com.liferay.source.formatter.dependencies.upgrade;
+
+import com.liferay.layout.admin.kernel.util.SitemapUtil;
+
+/**
+ * @author Regisson Aguiar
+ */
+public class LPD_50074 {
+
+ public void method() {
+ SitemapUtil.addURLElement(null, "test123", null, null, "test123", null);
+ }
+
+}
\ No newline at end of file
diff --git a/portal-impl/bnd.bnd b/portal-impl/bnd.bnd
index 4bd5355626c078..3cc3839ca1d05e 100644
--- a/portal-impl/bnd.bnd
+++ b/portal-impl/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: ${manifest.bundle.name}
Bundle-SymbolicName: ${manifest.bundle.symbolic.name}
-Bundle-Version: 110.0.2
+Bundle-Version: 110.0.3
Export-Package:\
com.liferay.portal.bean,\
com.liferay.portal.dao.orm.hibernate,\
diff --git a/portal-impl/src/com/liferay/portal/service.xml b/portal-impl/src/com/liferay/portal/service.xml
index 4ccdc424a49b42..c4683181ca79d8 100644
--- a/portal-impl/src/com/liferay/portal/service.xml
+++ b/portal-impl/src/com/liferay/portal/service.xml
@@ -2548,7 +2548,7 @@
-
+
diff --git a/portal-impl/src/com/liferay/portal/service/impl/UserLocalServiceImpl.java b/portal-impl/src/com/liferay/portal/service/impl/UserLocalServiceImpl.java
index 84fa68cbce0ff3..69e9a2a2ac625b 100644
--- a/portal-impl/src/com/liferay/portal/service/impl/UserLocalServiceImpl.java
+++ b/portal-impl/src/com/liferay/portal/service/impl/UserLocalServiceImpl.java
@@ -2305,7 +2305,22 @@ public User fetchUserById(long userId) {
*/
@Override
public User fetchUserByPortraitId(long portraitId) {
- return userPersistence.fetchByPortraitId(portraitId);
+ if (portraitId <= 0) {
+ return null;
+ }
+
+ List users = userPersistence.findByPortraitId(portraitId);
+
+ if (users.isEmpty()) {
+ return null;
+ }
+
+ if (users.size() > 1) {
+ _log.error(
+ "Portrait ID " + portraitId + " is used by more than one user");
+ }
+
+ return users.get(users.size() - 1);
}
/**
@@ -2928,17 +2943,6 @@ public User getUserById(long companyId, long userId)
return userPersistence.findByC_U(companyId, userId);
}
- /**
- * Returns the user with the portrait ID.
- *
- * @param portraitId the user's portrait ID
- * @return the user with the portrait ID
- */
- @Override
- public User getUserByPortraitId(long portraitId) throws PortalException {
- return userPersistence.findByPortraitId(portraitId);
- }
-
/**
* Returns the user with the screen name.
*
diff --git a/portal-impl/src/com/liferay/portal/service/persistence/impl/UserPersistenceImpl.java b/portal-impl/src/com/liferay/portal/service/persistence/impl/UserPersistenceImpl.java
index aefb1c7532495a..40ab7f20a914db 100644
--- a/portal-impl/src/com/liferay/portal/service/persistence/impl/UserPersistenceImpl.java
+++ b/portal-impl/src/com/liferay/portal/service/persistence/impl/UserPersistenceImpl.java
@@ -53,7 +53,6 @@
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.ProxyUtil;
import com.liferay.portal.kernel.util.SetUtil;
-import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
import com.liferay.portal.model.impl.UserImpl;
@@ -2441,91 +2440,142 @@ public int countByEmailAddress(String emailAddress) {
private static final String _FINDER_COLUMN_EMAILADDRESS_EMAILADDRESS_3 =
"(user.emailAddress IS NULL OR user.emailAddress = '')";
- private FinderPath _finderPathFetchByPortraitId;
+ private FinderPath _finderPathWithPaginationFindByPortraitId;
+ private FinderPath _finderPathWithoutPaginationFindByPortraitId;
+ private FinderPath _finderPathCountByPortraitId;
/**
- * Returns the user where portraitId = ? or throws a NoSuchUserException
if it could not be found.
+ * Returns all the users where portraitId = ?.
*
* @param portraitId the portrait ID
- * @return the matching user
- * @throws NoSuchUserException if a matching user could not be found
+ * @return the matching users
*/
@Override
- public User findByPortraitId(long portraitId) throws NoSuchUserException {
- User user = fetchByPortraitId(portraitId);
-
- if (user == null) {
- StringBundler sb = new StringBundler(4);
-
- sb.append(_NO_SUCH_ENTITY_WITH_KEY);
-
- sb.append("portraitId=");
- sb.append(portraitId);
-
- sb.append("}");
-
- if (_log.isDebugEnabled()) {
- _log.debug(sb.toString());
- }
-
- throw new NoSuchUserException(sb.toString());
- }
+ public List findByPortraitId(long portraitId) {
+ return findByPortraitId(
+ portraitId, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
+ }
- return user;
+ /**
+ * Returns a range of all the users where portraitId = ?.
+ *
+ *
+ * Useful when paginating results. Returns a maximum of end - start
instances. start
and end
are not primary keys, they are indexes in the result set. Thus, 0
refers to the first result in the set. Setting both start
and end
to QueryUtil#ALL_POS
will return the full result set. If orderByComparator
is specified, then the query will include the given ORDER BY logic. If orderByComparator
is absent, then the query will include the default ORDER BY logic from UserModelImpl
.
+ *
+ *
+ * @param portraitId the portrait ID
+ * @param start the lower bound of the range of users
+ * @param end the upper bound of the range of users (not inclusive)
+ * @return the range of matching users
+ */
+ @Override
+ public List findByPortraitId(long portraitId, int start, int end) {
+ return findByPortraitId(portraitId, start, end, null);
}
/**
- * Returns the user where portraitId = ? or returns null
if it could not be found. Uses the finder cache.
+ * Returns an ordered range of all the users where portraitId = ?.
+ *
+ *
+ * Useful when paginating results. Returns a maximum of end - start
instances. start
and end
are not primary keys, they are indexes in the result set. Thus, 0
refers to the first result in the set. Setting both start
and end
to QueryUtil#ALL_POS
will return the full result set. If orderByComparator
is specified, then the query will include the given ORDER BY logic. If orderByComparator
is absent, then the query will include the default ORDER BY logic from UserModelImpl
.
+ *
*
* @param portraitId the portrait ID
- * @return the matching user, or null
if a matching user could not be found
+ * @param start the lower bound of the range of users
+ * @param end the upper bound of the range of users (not inclusive)
+ * @param orderByComparator the comparator to order the results by (optionally null
)
+ * @return the ordered range of matching users
*/
@Override
- public User fetchByPortraitId(long portraitId) {
- return fetchByPortraitId(portraitId, true);
+ public List findByPortraitId(
+ long portraitId, int start, int end,
+ OrderByComparator orderByComparator) {
+
+ return findByPortraitId(
+ portraitId, start, end, orderByComparator, true);
}
/**
- * Returns the user where portraitId = ? or returns null
if it could not be found, optionally using the finder cache.
+ * Returns an ordered range of all the users where portraitId = ?.
+ *
+ *
+ * Useful when paginating results. Returns a maximum of end - start
instances. start
and end
are not primary keys, they are indexes in the result set. Thus, 0
refers to the first result in the set. Setting both start
and end
to QueryUtil#ALL_POS
will return the full result set. If orderByComparator
is specified, then the query will include the given ORDER BY logic. If orderByComparator
is absent, then the query will include the default ORDER BY logic from UserModelImpl
.
+ *
*
* @param portraitId the portrait ID
+ * @param start the lower bound of the range of users
+ * @param end the upper bound of the range of users (not inclusive)
+ * @param orderByComparator the comparator to order the results by (optionally null
)
* @param useFinderCache whether to use the finder cache
- * @return the matching user, or null
if a matching user could not be found
+ * @return the ordered range of matching users
*/
@Override
- public User fetchByPortraitId(long portraitId, boolean useFinderCache) {
+ public List findByPortraitId(
+ long portraitId, int start, int end,
+ OrderByComparator orderByComparator, boolean useFinderCache) {
+
try (SafeCloseable safeCloseable =
CTPersistenceHelperUtil.setCTCollectionIdWithSafeCloseable(
User.class)) {
+ FinderPath finderPath = null;
Object[] finderArgs = null;
- if (useFinderCache) {
- finderArgs = new Object[] {portraitId};
+ if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) &&
+ (orderByComparator == null)) {
+
+ if (useFinderCache) {
+ finderPath = _finderPathWithoutPaginationFindByPortraitId;
+ finderArgs = new Object[] {portraitId};
+ }
+ }
+ else if (useFinderCache) {
+ finderPath = _finderPathWithPaginationFindByPortraitId;
+ finderArgs = new Object[] {
+ portraitId, start, end, orderByComparator
+ };
}
- Object result = null;
+ List list = null;
if (useFinderCache) {
- result = FinderCacheUtil.getResult(
- _finderPathFetchByPortraitId, finderArgs, this);
- }
+ list = (List)FinderCacheUtil.getResult(
+ finderPath, finderArgs, this);
- if (result instanceof User) {
- User user = (User)result;
+ if ((list != null) && !list.isEmpty()) {
+ for (User user : list) {
+ if (portraitId != user.getPortraitId()) {
+ list = null;
- if (portraitId != user.getPortraitId()) {
- result = null;
+ break;
+ }
+ }
}
}
- if (result == null) {
- StringBundler sb = new StringBundler(3);
+ if (list == null) {
+ StringBundler sb = null;
+
+ if (orderByComparator != null) {
+ sb = new StringBundler(
+ 3 + (orderByComparator.getOrderByFields().length * 2));
+ }
+ else {
+ sb = new StringBundler(3);
+ }
sb.append(_SQL_SELECT_USER_WHERE);
sb.append(_FINDER_COLUMN_PORTRAITID_PORTRAITID_2);
+ if (orderByComparator != null) {
+ appendOrderByComparator(
+ sb, _ORDER_BY_ENTITY_ALIAS, orderByComparator);
+ }
+ else {
+ sb.append(UserModelImpl.ORDER_BY_JPQL);
+ }
+
String sql = sb.toString();
Session session = null;
@@ -2539,35 +2589,13 @@ public User fetchByPortraitId(long portraitId, boolean useFinderCache) {
queryPos.add(portraitId);
- List list = query.list();
-
- if (list.isEmpty()) {
- if (useFinderCache) {
- FinderCacheUtil.putResult(
- _finderPathFetchByPortraitId, finderArgs, list);
- }
- }
- else {
- if (list.size() > 1) {
- Collections.sort(list, Collections.reverseOrder());
-
- if (_log.isWarnEnabled()) {
- if (!useFinderCache) {
- finderArgs = new Object[] {portraitId};
- }
-
- _log.warn(
- "UserPersistenceImpl.fetchByPortraitId(long, boolean) with parameters (" +
- StringUtil.merge(finderArgs) +
- ") yields a result set with more than 1 result. This violates the logical unique restriction. There is no order guarantee on which result is returned by this finder.");
- }
- }
-
- User user = list.get(0);
+ list = (List)QueryUtil.list(
+ query, getDialect(), start, end);
- result = user;
+ cacheResult(list);
- cacheResult(user);
+ if (useFinderCache) {
+ FinderCacheUtil.putResult(finderPath, finderArgs, list);
}
}
catch (Exception exception) {
@@ -2578,26 +2606,282 @@ public User fetchByPortraitId(long portraitId, boolean useFinderCache) {
}
}
- if (result instanceof List>) {
- return null;
+ return list;
+ }
+ }
+
+ /**
+ * Returns the first user in the ordered set where portraitId = ?.
+ *
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the first matching user
+ * @throws NoSuchUserException if a matching user could not be found
+ */
+ @Override
+ public User findByPortraitId_First(
+ long portraitId, OrderByComparator orderByComparator)
+ throws NoSuchUserException {
+
+ User user = fetchByPortraitId_First(portraitId, orderByComparator);
+
+ if (user != null) {
+ return user;
+ }
+
+ StringBundler sb = new StringBundler(4);
+
+ sb.append(_NO_SUCH_ENTITY_WITH_KEY);
+
+ sb.append("portraitId=");
+ sb.append(portraitId);
+
+ sb.append("}");
+
+ throw new NoSuchUserException(sb.toString());
+ }
+
+ /**
+ * Returns the first user in the ordered set where portraitId = ?.
+ *
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the first matching user, or null
if a matching user could not be found
+ */
+ @Override
+ public User fetchByPortraitId_First(
+ long portraitId, OrderByComparator orderByComparator) {
+
+ List list = findByPortraitId(portraitId, 0, 1, orderByComparator);
+
+ if (!list.isEmpty()) {
+ return list.get(0);
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns the last user in the ordered set where portraitId = ?.
+ *
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the last matching user
+ * @throws NoSuchUserException if a matching user could not be found
+ */
+ @Override
+ public User findByPortraitId_Last(
+ long portraitId, OrderByComparator orderByComparator)
+ throws NoSuchUserException {
+
+ User user = fetchByPortraitId_Last(portraitId, orderByComparator);
+
+ if (user != null) {
+ return user;
+ }
+
+ StringBundler sb = new StringBundler(4);
+
+ sb.append(_NO_SUCH_ENTITY_WITH_KEY);
+
+ sb.append("portraitId=");
+ sb.append(portraitId);
+
+ sb.append("}");
+
+ throw new NoSuchUserException(sb.toString());
+ }
+
+ /**
+ * Returns the last user in the ordered set where portraitId = ?.
+ *
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the last matching user, or null
if a matching user could not be found
+ */
+ @Override
+ public User fetchByPortraitId_Last(
+ long portraitId, OrderByComparator orderByComparator) {
+
+ int count = countByPortraitId(portraitId);
+
+ if (count == 0) {
+ return null;
+ }
+
+ List list = findByPortraitId(
+ portraitId, count - 1, count, orderByComparator);
+
+ if (!list.isEmpty()) {
+ return list.get(0);
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns the users before and after the current user in the ordered set where portraitId = ?.
+ *
+ * @param userId the primary key of the current user
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the previous, current, and next user
+ * @throws NoSuchUserException if a user with the primary key could not be found
+ */
+ @Override
+ public User[] findByPortraitId_PrevAndNext(
+ long userId, long portraitId,
+ OrderByComparator orderByComparator)
+ throws NoSuchUserException {
+
+ User user = findByPrimaryKey(userId);
+
+ Session session = null;
+
+ try {
+ session = openSession();
+
+ User[] array = new UserImpl[3];
+
+ array[0] = getByPortraitId_PrevAndNext(
+ session, user, portraitId, orderByComparator, true);
+
+ array[1] = user;
+
+ array[2] = getByPortraitId_PrevAndNext(
+ session, user, portraitId, orderByComparator, false);
+
+ return array;
+ }
+ catch (Exception exception) {
+ throw processException(exception);
+ }
+ finally {
+ closeSession(session);
+ }
+ }
+
+ protected User getByPortraitId_PrevAndNext(
+ Session session, User user, long portraitId,
+ OrderByComparator orderByComparator, boolean previous) {
+
+ StringBundler sb = null;
+
+ if (orderByComparator != null) {
+ sb = new StringBundler(
+ 4 + (orderByComparator.getOrderByConditionFields().length * 3) +
+ (orderByComparator.getOrderByFields().length * 3));
+ }
+ else {
+ sb = new StringBundler(3);
+ }
+
+ sb.append(_SQL_SELECT_USER_WHERE);
+
+ sb.append(_FINDER_COLUMN_PORTRAITID_PORTRAITID_2);
+
+ if (orderByComparator != null) {
+ String[] orderByConditionFields =
+ orderByComparator.getOrderByConditionFields();
+
+ if (orderByConditionFields.length > 0) {
+ sb.append(WHERE_AND);
}
- else {
- return (User)result;
+
+ for (int i = 0; i < orderByConditionFields.length; i++) {
+ sb.append(_ORDER_BY_ENTITY_ALIAS);
+ sb.append(orderByConditionFields[i]);
+
+ if ((i + 1) < orderByConditionFields.length) {
+ if (orderByComparator.isAscending() ^ previous) {
+ sb.append(WHERE_GREATER_THAN_HAS_NEXT);
+ }
+ else {
+ sb.append(WHERE_LESSER_THAN_HAS_NEXT);
+ }
+ }
+ else {
+ if (orderByComparator.isAscending() ^ previous) {
+ sb.append(WHERE_GREATER_THAN);
+ }
+ else {
+ sb.append(WHERE_LESSER_THAN);
+ }
+ }
}
+
+ sb.append(ORDER_BY_CLAUSE);
+
+ String[] orderByFields = orderByComparator.getOrderByFields();
+
+ for (int i = 0; i < orderByFields.length; i++) {
+ sb.append(_ORDER_BY_ENTITY_ALIAS);
+ sb.append(orderByFields[i]);
+
+ if ((i + 1) < orderByFields.length) {
+ if (orderByComparator.isAscending() ^ previous) {
+ sb.append(ORDER_BY_ASC_HAS_NEXT);
+ }
+ else {
+ sb.append(ORDER_BY_DESC_HAS_NEXT);
+ }
+ }
+ else {
+ if (orderByComparator.isAscending() ^ previous) {
+ sb.append(ORDER_BY_ASC);
+ }
+ else {
+ sb.append(ORDER_BY_DESC);
+ }
+ }
+ }
+ }
+ else {
+ sb.append(UserModelImpl.ORDER_BY_JPQL);
+ }
+
+ String sql = sb.toString();
+
+ Query query = session.createQuery(sql);
+
+ query.setFirstResult(0);
+ query.setMaxResults(2);
+
+ QueryPos queryPos = QueryPos.getInstance(query);
+
+ queryPos.add(portraitId);
+
+ if (orderByComparator != null) {
+ for (Object orderByConditionValue :
+ orderByComparator.getOrderByConditionValues(user)) {
+
+ queryPos.add(orderByConditionValue);
+ }
+ }
+
+ List list = query.list();
+
+ if (list.size() == 2) {
+ return list.get(1);
+ }
+ else {
+ return null;
}
}
/**
- * Removes the user where portraitId = ? from the database.
+ * Removes all the users where portraitId = ? from the database.
*
* @param portraitId the portrait ID
- * @return the user that was removed
*/
@Override
- public User removeByPortraitId(long portraitId) throws NoSuchUserException {
- User user = findByPortraitId(portraitId);
+ public void removeByPortraitId(long portraitId) {
+ for (User user :
+ findByPortraitId(
+ portraitId, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null)) {
- return remove(user);
+ remove(user);
+ }
}
/**
@@ -2608,13 +2892,51 @@ public User removeByPortraitId(long portraitId) throws NoSuchUserException {
*/
@Override
public int countByPortraitId(long portraitId) {
- User user = fetchByPortraitId(portraitId);
+ try (SafeCloseable safeCloseable =
+ CTPersistenceHelperUtil.setCTCollectionIdWithSafeCloseable(
+ User.class)) {
- if (user == null) {
- return 0;
- }
+ FinderPath finderPath = _finderPathCountByPortraitId;
- return 1;
+ Object[] finderArgs = new Object[] {portraitId};
+
+ Long count = (Long)FinderCacheUtil.getResult(
+ finderPath, finderArgs, this);
+
+ if (count == null) {
+ StringBundler sb = new StringBundler(2);
+
+ sb.append(_SQL_COUNT_USER_WHERE);
+
+ sb.append(_FINDER_COLUMN_PORTRAITID_PORTRAITID_2);
+
+ String sql = sb.toString();
+
+ Session session = null;
+
+ try {
+ session = openSession();
+
+ Query query = session.createQuery(sql);
+
+ QueryPos queryPos = QueryPos.getInstance(query);
+
+ queryPos.add(portraitId);
+
+ count = (Long)query.uniqueResult();
+
+ FinderCacheUtil.putResult(finderPath, finderArgs, count);
+ }
+ catch (Exception exception) {
+ throw processException(exception);
+ }
+ finally {
+ closeSession(session);
+ }
+ }
+
+ return count.intValue();
+ }
}
private static final String _FINDER_COLUMN_PORTRAITID_PORTRAITID_2 =
@@ -7879,10 +8201,6 @@ public void cacheResult(User user) {
_finderPathFetchByContactId, new Object[] {user.getContactId()},
user);
- FinderCacheUtil.putResult(
- _finderPathFetchByPortraitId,
- new Object[] {user.getPortraitId()}, user);
-
FinderCacheUtil.putResult(
_finderPathFetchByC_U,
new Object[] {user.getCompanyId(), user.getUserId()}, user);
@@ -7995,11 +8313,6 @@ protected void cacheUniqueFindersCache(UserModelImpl userModelImpl) {
FinderCacheUtil.putResult(
_finderPathFetchByContactId, args, userModelImpl);
- args = new Object[] {userModelImpl.getPortraitId()};
-
- FinderCacheUtil.putResult(
- _finderPathFetchByPortraitId, args, userModelImpl);
-
args = new Object[] {
userModelImpl.getCompanyId(), userModelImpl.getUserId()
};
@@ -10576,11 +10889,24 @@ public void afterPropertiesSet() {
new String[] {String.class.getName()},
new String[] {"emailAddress"}, false);
- _finderPathFetchByPortraitId = new FinderPath(
- FINDER_CLASS_NAME_ENTITY, "fetchByPortraitId",
+ _finderPathWithPaginationFindByPortraitId = new FinderPath(
+ FINDER_CLASS_NAME_LIST_WITH_PAGINATION, "findByPortraitId",
+ new String[] {
+ Long.class.getName(), Integer.class.getName(),
+ Integer.class.getName(), OrderByComparator.class.getName()
+ },
+ new String[] {"portraitId"}, true);
+
+ _finderPathWithoutPaginationFindByPortraitId = new FinderPath(
+ FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "findByPortraitId",
new String[] {Long.class.getName()}, new String[] {"portraitId"},
true);
+ _finderPathCountByPortraitId = new FinderPath(
+ FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "countByPortraitId",
+ new String[] {Long.class.getName()}, new String[] {"portraitId"},
+ false);
+
_finderPathWithPaginationFindByGtU_C = new FinderPath(
FINDER_CLASS_NAME_LIST_WITH_PAGINATION, "findByGtU_C",
new String[] {
diff --git a/portal-impl/src/com/liferay/portal/webserver/WebServerServlet.java b/portal-impl/src/com/liferay/portal/webserver/WebServerServlet.java
index 259fa77efd8878..9b88cd3c092d2f 100644
--- a/portal-impl/src/com/liferay/portal/webserver/WebServerServlet.java
+++ b/portal-impl/src/com/liferay/portal/webserver/WebServerServlet.java
@@ -25,6 +25,7 @@
import com.liferay.petra.string.StringBundler;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.image.ImageToolUtil;
+import com.liferay.portal.kernel.exception.NoSuchUserException;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.image.ImageBag;
@@ -796,7 +797,12 @@ protected Image getUserPortraitImageResized(Image image, long imageId)
((usersImageMaxWidth > 0) &&
(image.getWidth() > usersImageMaxWidth))) {
- User user = UserLocalServiceUtil.getUserByPortraitId(imageId);
+ User user = UserLocalServiceUtil.fetchUserByPortraitId(imageId);
+
+ if (user == null) {
+ throw new NoSuchUserException(
+ "No user with portrait ID " + imageId);
+ }
UserLocalServiceUtil.updatePortrait(
user.getUserId(), image.getTextObj());
diff --git a/portal-kernel/bnd.bnd b/portal-kernel/bnd.bnd
index 341c9c975acbfe..06d46197960510 100644
--- a/portal-kernel/bnd.bnd
+++ b/portal-kernel/bnd.bnd
@@ -1,6 +1,6 @@
Bundle-Name: ${manifest.bundle.name}
Bundle-SymbolicName: ${manifest.bundle.symbolic.name}
-Bundle-Version: 158.0.1
+Bundle-Version: 159.0.1
Export-Package:\
!com.liferay.portal.kernel.internal.*,\
!com.liferay.portal.kernel.module.util,\
diff --git a/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalService.java b/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalService.java
index 4a52e987784a79..f14d5594926837 100644
--- a/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalService.java
+++ b/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalService.java
@@ -1360,15 +1360,6 @@ public User getUserByExternalReferenceCode(
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public User getUserById(long companyId, long userId) throws PortalException;
- /**
- * Returns the user with the portrait ID.
- *
- * @param portraitId the user's portrait ID
- * @return the user with the portrait ID
- */
- @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
- public User getUserByPortraitId(long portraitId) throws PortalException;
-
/**
* Returns the user with the screen name.
*
diff --git a/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalServiceUtil.java b/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalServiceUtil.java
index 0ef36dfdf68f30..1ae6f8bcc6a710 100644
--- a/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalServiceUtil.java
+++ b/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalServiceUtil.java
@@ -1683,18 +1683,6 @@ public static User getUserById(long companyId, long userId)
return getService().getUserById(companyId, userId);
}
- /**
- * Returns the user with the portrait ID.
- *
- * @param portraitId the user's portrait ID
- * @return the user with the portrait ID
- */
- public static User getUserByPortraitId(long portraitId)
- throws PortalException {
-
- return getService().getUserByPortraitId(portraitId);
- }
-
/**
* Returns the user with the screen name.
*
diff --git a/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalServiceWrapper.java b/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalServiceWrapper.java
index 8e6d289a4f2f65..3073956f93a2fe 100644
--- a/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalServiceWrapper.java
+++ b/portal-kernel/src/com/liferay/portal/kernel/service/UserLocalServiceWrapper.java
@@ -1869,19 +1869,6 @@ public User getUserById(long companyId, long userId)
return _userLocalService.getUserById(companyId, userId);
}
- /**
- * Returns the user with the portrait ID.
- *
- * @param portraitId the user's portrait ID
- * @return the user with the portrait ID
- */
- @Override
- public User getUserByPortraitId(long portraitId)
- throws com.liferay.portal.kernel.exception.PortalException {
-
- return _userLocalService.getUserByPortraitId(portraitId);
- }
-
/**
* Returns the user with the screen name.
*
diff --git a/portal-kernel/src/com/liferay/portal/kernel/service/packageinfo b/portal-kernel/src/com/liferay/portal/kernel/service/packageinfo
index 169e2b363346a3..31501d07dd0c5b 100644
--- a/portal-kernel/src/com/liferay/portal/kernel/service/packageinfo
+++ b/portal-kernel/src/com/liferay/portal/kernel/service/packageinfo
@@ -1 +1 @@
-version 39.0.0
\ No newline at end of file
+version 40.0.0
\ No newline at end of file
diff --git a/portal-kernel/src/com/liferay/portal/kernel/service/persistence/UserPersistence.java b/portal-kernel/src/com/liferay/portal/kernel/service/persistence/UserPersistence.java
index f2161dcbe9424e..c965ae1028750b 100644
--- a/portal-kernel/src/com/liferay/portal/kernel/service/persistence/UserPersistence.java
+++ b/portal-kernel/src/com/liferay/portal/kernel/service/persistence/UserPersistence.java
@@ -659,38 +659,139 @@ public User[] findByEmailAddress_PrevAndNext(
public int countByEmailAddress(String emailAddress);
/**
- * Returns the user where portraitId = ? or throws a NoSuchUserException
if it could not be found.
+ * Returns all the users where portraitId = ?.
*
* @param portraitId the portrait ID
- * @return the matching user
- * @throws NoSuchUserException if a matching user could not be found
+ * @return the matching users
*/
- public User findByPortraitId(long portraitId) throws NoSuchUserException;
+ public java.util.List findByPortraitId(long portraitId);
/**
- * Returns the user where portraitId = ? or returns null
if it could not be found. Uses the finder cache.
+ * Returns a range of all the users where portraitId = ?.
+ *
+ *
+ * Useful when paginating results. Returns a maximum of end - start
instances. start
and end
are not primary keys, they are indexes in the result set. Thus, 0
refers to the first result in the set. Setting both start
and end
to QueryUtil#ALL_POS
will return the full result set. If orderByComparator
is specified, then the query will include the given ORDER BY logic. If orderByComparator
is absent, then the query will include the default ORDER BY logic from UserModelImpl
.
+ *
*
* @param portraitId the portrait ID
- * @return the matching user, or null
if a matching user could not be found
+ * @param start the lower bound of the range of users
+ * @param end the upper bound of the range of users (not inclusive)
+ * @return the range of matching users
+ */
+ public java.util.List findByPortraitId(
+ long portraitId, int start, int end);
+
+ /**
+ * Returns an ordered range of all the users where portraitId = ?.
+ *
+ *
+ * Useful when paginating results. Returns a maximum of end - start
instances. start
and end
are not primary keys, they are indexes in the result set. Thus, 0
refers to the first result in the set. Setting both start
and end
to QueryUtil#ALL_POS
will return the full result set. If orderByComparator
is specified, then the query will include the given ORDER BY logic. If orderByComparator
is absent, then the query will include the default ORDER BY logic from UserModelImpl
.
+ *
+ *
+ * @param portraitId the portrait ID
+ * @param start the lower bound of the range of users
+ * @param end the upper bound of the range of users (not inclusive)
+ * @param orderByComparator the comparator to order the results by (optionally null
)
+ * @return the ordered range of matching users
*/
- public User fetchByPortraitId(long portraitId);
+ public java.util.List findByPortraitId(
+ long portraitId, int start, int end,
+ com.liferay.portal.kernel.util.OrderByComparator
+ orderByComparator);
/**
- * Returns the user where portraitId = ? or returns null
if it could not be found, optionally using the finder cache.
+ * Returns an ordered range of all the users where portraitId = ?.
+ *
+ *
+ * Useful when paginating results. Returns a maximum of end - start
instances. start
and end
are not primary keys, they are indexes in the result set. Thus, 0
refers to the first result in the set. Setting both start
and end
to QueryUtil#ALL_POS
will return the full result set. If orderByComparator
is specified, then the query will include the given ORDER BY logic. If orderByComparator
is absent, then the query will include the default ORDER BY logic from UserModelImpl
.
+ *
*
* @param portraitId the portrait ID
+ * @param start the lower bound of the range of users
+ * @param end the upper bound of the range of users (not inclusive)
+ * @param orderByComparator the comparator to order the results by (optionally null
)
* @param useFinderCache whether to use the finder cache
- * @return the matching user, or null
if a matching user could not be found
+ * @return the ordered range of matching users
*/
- public User fetchByPortraitId(long portraitId, boolean useFinderCache);
+ public java.util.List findByPortraitId(
+ long portraitId, int start, int end,
+ com.liferay.portal.kernel.util.OrderByComparator
+ orderByComparator,
+ boolean useFinderCache);
/**
- * Removes the user where portraitId = ? from the database.
+ * Returns the first user in the ordered set where portraitId = ?.
+ *
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the first matching user
+ * @throws NoSuchUserException if a matching user could not be found
+ */
+ public User findByPortraitId_First(
+ long portraitId,
+ com.liferay.portal.kernel.util.OrderByComparator
+ orderByComparator)
+ throws NoSuchUserException;
+
+ /**
+ * Returns the first user in the ordered set where portraitId = ?.
+ *
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the first matching user, or null
if a matching user could not be found
+ */
+ public User fetchByPortraitId_First(
+ long portraitId,
+ com.liferay.portal.kernel.util.OrderByComparator
+ orderByComparator);
+
+ /**
+ * Returns the last user in the ordered set where portraitId = ?.
+ *
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the last matching user
+ * @throws NoSuchUserException if a matching user could not be found
+ */
+ public User findByPortraitId_Last(
+ long portraitId,
+ com.liferay.portal.kernel.util.OrderByComparator
+ orderByComparator)
+ throws NoSuchUserException;
+
+ /**
+ * Returns the last user in the ordered set where portraitId = ?.
+ *
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the last matching user, or null
if a matching user could not be found
+ */
+ public User fetchByPortraitId_Last(
+ long portraitId,
+ com.liferay.portal.kernel.util.OrderByComparator
+ orderByComparator);
+
+ /**
+ * Returns the users before and after the current user in the ordered set where portraitId = ?.
+ *
+ * @param userId the primary key of the current user
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the previous, current, and next user
+ * @throws NoSuchUserException if a user with the primary key could not be found
+ */
+ public User[] findByPortraitId_PrevAndNext(
+ long userId, long portraitId,
+ com.liferay.portal.kernel.util.OrderByComparator
+ orderByComparator)
+ throws NoSuchUserException;
+
+ /**
+ * Removes all the users where portraitId = ? from the database.
*
* @param portraitId the portrait ID
- * @return the user that was removed
*/
- public User removeByPortraitId(long portraitId) throws NoSuchUserException;
+ public void removeByPortraitId(long portraitId);
/**
* Returns the number of users where portraitId = ?.
diff --git a/portal-kernel/src/com/liferay/portal/kernel/service/persistence/UserUtil.java b/portal-kernel/src/com/liferay/portal/kernel/service/persistence/UserUtil.java
index 48c7d54a06bb11..ddb6eb4c4fc0f8 100644
--- a/portal-kernel/src/com/liferay/portal/kernel/service/persistence/UserUtil.java
+++ b/portal-kernel/src/com/liferay/portal/kernel/service/persistence/UserUtil.java
@@ -845,51 +845,161 @@ public static int countByEmailAddress(String emailAddress) {
}
/**
- * Returns the user where portraitId = ? or throws a NoSuchUserException
if it could not be found.
+ * Returns all the users where portraitId = ?.
*
* @param portraitId the portrait ID
- * @return the matching user
+ * @return the matching users
+ */
+ public static List findByPortraitId(long portraitId) {
+ return getPersistence().findByPortraitId(portraitId);
+ }
+
+ /**
+ * Returns a range of all the users where portraitId = ?.
+ *
+ *
+ * Useful when paginating results. Returns a maximum of end - start
instances. start
and end
are not primary keys, they are indexes in the result set. Thus, 0
refers to the first result in the set. Setting both start
and end
to QueryUtil#ALL_POS
will return the full result set. If orderByComparator
is specified, then the query will include the given ORDER BY logic. If orderByComparator
is absent, then the query will include the default ORDER BY logic from UserModelImpl
.
+ *
+ *
+ * @param portraitId the portrait ID
+ * @param start the lower bound of the range of users
+ * @param end the upper bound of the range of users (not inclusive)
+ * @return the range of matching users
+ */
+ public static List findByPortraitId(
+ long portraitId, int start, int end) {
+
+ return getPersistence().findByPortraitId(portraitId, start, end);
+ }
+
+ /**
+ * Returns an ordered range of all the users where portraitId = ?.
+ *
+ *
+ * Useful when paginating results. Returns a maximum of end - start
instances. start
and end
are not primary keys, they are indexes in the result set. Thus, 0
refers to the first result in the set. Setting both start
and end
to QueryUtil#ALL_POS
will return the full result set. If orderByComparator
is specified, then the query will include the given ORDER BY logic. If orderByComparator
is absent, then the query will include the default ORDER BY logic from UserModelImpl
.
+ *
+ *
+ * @param portraitId the portrait ID
+ * @param start the lower bound of the range of users
+ * @param end the upper bound of the range of users (not inclusive)
+ * @param orderByComparator the comparator to order the results by (optionally null
)
+ * @return the ordered range of matching users
+ */
+ public static List findByPortraitId(
+ long portraitId, int start, int end,
+ OrderByComparator orderByComparator) {
+
+ return getPersistence().findByPortraitId(
+ portraitId, start, end, orderByComparator);
+ }
+
+ /**
+ * Returns an ordered range of all the users where portraitId = ?.
+ *
+ *
+ * Useful when paginating results. Returns a maximum of end - start
instances. start
and end
are not primary keys, they are indexes in the result set. Thus, 0
refers to the first result in the set. Setting both start
and end
to QueryUtil#ALL_POS
will return the full result set. If orderByComparator
is specified, then the query will include the given ORDER BY logic. If orderByComparator
is absent, then the query will include the default ORDER BY logic from UserModelImpl
.
+ *
+ *
+ * @param portraitId the portrait ID
+ * @param start the lower bound of the range of users
+ * @param end the upper bound of the range of users (not inclusive)
+ * @param orderByComparator the comparator to order the results by (optionally null
)
+ * @param useFinderCache whether to use the finder cache
+ * @return the ordered range of matching users
+ */
+ public static List findByPortraitId(
+ long portraitId, int start, int end,
+ OrderByComparator orderByComparator, boolean useFinderCache) {
+
+ return getPersistence().findByPortraitId(
+ portraitId, start, end, orderByComparator, useFinderCache);
+ }
+
+ /**
+ * Returns the first user in the ordered set where portraitId = ?.
+ *
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the first matching user
* @throws NoSuchUserException if a matching user could not be found
*/
- public static User findByPortraitId(long portraitId)
+ public static User findByPortraitId_First(
+ long portraitId, OrderByComparator orderByComparator)
throws com.liferay.portal.kernel.exception.NoSuchUserException {
- return getPersistence().findByPortraitId(portraitId);
+ return getPersistence().findByPortraitId_First(
+ portraitId, orderByComparator);
}
/**
- * Returns the user where portraitId = ? or returns null
if it could not be found. Uses the finder cache.
+ * Returns the first user in the ordered set where portraitId = ?.
*
* @param portraitId the portrait ID
- * @return the matching user, or null
if a matching user could not be found
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the first matching user, or null
if a matching user could not be found
*/
- public static User fetchByPortraitId(long portraitId) {
- return getPersistence().fetchByPortraitId(portraitId);
+ public static User fetchByPortraitId_First(
+ long portraitId, OrderByComparator orderByComparator) {
+
+ return getPersistence().fetchByPortraitId_First(
+ portraitId, orderByComparator);
}
/**
- * Returns the user where portraitId = ? or returns null
if it could not be found, optionally using the finder cache.
+ * Returns the last user in the ordered set where portraitId = ?.
*
* @param portraitId the portrait ID
- * @param useFinderCache whether to use the finder cache
- * @return the matching user, or null
if a matching user could not be found
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the last matching user
+ * @throws NoSuchUserException if a matching user could not be found
*/
- public static User fetchByPortraitId(
- long portraitId, boolean useFinderCache) {
+ public static User findByPortraitId_Last(
+ long portraitId, OrderByComparator orderByComparator)
+ throws com.liferay.portal.kernel.exception.NoSuchUserException {
- return getPersistence().fetchByPortraitId(portraitId, useFinderCache);
+ return getPersistence().findByPortraitId_Last(
+ portraitId, orderByComparator);
}
/**
- * Removes the user where portraitId = ? from the database.
+ * Returns the last user in the ordered set where portraitId = ?.
*
* @param portraitId the portrait ID
- * @return the user that was removed
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the last matching user, or null
if a matching user could not be found
+ */
+ public static User fetchByPortraitId_Last(
+ long portraitId, OrderByComparator orderByComparator) {
+
+ return getPersistence().fetchByPortraitId_Last(
+ portraitId, orderByComparator);
+ }
+
+ /**
+ * Returns the users before and after the current user in the ordered set where portraitId = ?.
+ *
+ * @param userId the primary key of the current user
+ * @param portraitId the portrait ID
+ * @param orderByComparator the comparator to order the set by (optionally null
)
+ * @return the previous, current, and next user
+ * @throws NoSuchUserException if a user with the primary key could not be found
*/
- public static User removeByPortraitId(long portraitId)
+ public static User[] findByPortraitId_PrevAndNext(
+ long userId, long portraitId,
+ OrderByComparator orderByComparator)
throws com.liferay.portal.kernel.exception.NoSuchUserException {
- return getPersistence().removeByPortraitId(portraitId);
+ return getPersistence().findByPortraitId_PrevAndNext(
+ userId, portraitId, orderByComparator);
+ }
+
+ /**
+ * Removes all the users where portraitId = ? from the database.
+ *
+ * @param portraitId the portrait ID
+ */
+ public static void removeByPortraitId(long portraitId) {
+ getPersistence().removeByPortraitId(portraitId);
}
/**
diff --git a/portal-kernel/src/com/liferay/portal/kernel/service/persistence/packageinfo b/portal-kernel/src/com/liferay/portal/kernel/service/persistence/packageinfo
index e55754a37e385c..721693be091811 100644
--- a/portal-kernel/src/com/liferay/portal/kernel/service/persistence/packageinfo
+++ b/portal-kernel/src/com/liferay/portal/kernel/service/persistence/packageinfo
@@ -1 +1 @@
-version 26.0.0
\ No newline at end of file
+version 27.0.0
\ No newline at end of file
diff --git a/portal-web/test/functional/com/liferay/portalweb/tests/coreinfrastructure/administration/rolesandpermissions/cproles/RolesAdmin.testcase b/portal-web/test/functional/com/liferay/portalweb/tests/coreinfrastructure/administration/rolesandpermissions/cproles/RolesAdmin.testcase
index 32651f49d44ba4..7044f1b4bf06a2 100644
--- a/portal-web/test/functional/com/liferay/portalweb/tests/coreinfrastructure/administration/rolesandpermissions/cproles/RolesAdmin.testcase
+++ b/portal-web/test/functional/com/liferay/portalweb/tests/coreinfrastructure/administration/rolesandpermissions/cproles/RolesAdmin.testcase
@@ -43,99 +43,6 @@ definition {
locator1 = "RolesPermissions#PERMISSION_CHECKBOX");
}
- @priority = 4
- test CanAddRoleWithSameNameDifferentKey {
- Role.openRolesAdmin();
-
- Role.add(roleTitle = "Role Name");
-
- Role.openRolesAdmin();
-
- LexiconEntry.gotoAdd();
-
- PortletEntry.inputTitle(title = "Role Name");
-
- Type(
- locator1 = "TextInput#KEY",
- value1 = "Role Name-2");
-
- AssertClick(
- locator1 = "Button#SUBMIT",
- value1 = "Save");
-
- Alert.viewSuccessMessage();
-
- Role.openRolesAdmin();
-
- Search.searchCP(searchTerm = "Name-2");
-
- LexiconEntry.gotoEntry(rowEntry = "Role Name");
-
- AssertTextEquals(
- locator1 = "TextInput#KEY",
- value1 = "Role Name-2");
- }
-
- @priority = 4
- test CanEditTheRoleTitle {
- JSONRole.addRegularRole(
- roleKey = "Update Role Title",
- roleTitle = "Update Role Title");
-
- Role.openRolesAdmin();
-
- RoleNavigator.gotoRoleType();
-
- LexiconEntry.gotoEntry(rowEntry = "Update Role Title");
-
- Role.editRole(
- roleDescriptionEdit = "This is an updated role description.",
- roleKeyEdit = "This is an updated Role Key",
- roleTitleEdit = "This is an updated Role Title");
-
- Role.openRolesAdmin();
-
- RoleNavigator.gotoRoleType();
-
- Role.viewCP(
- roleDescription = "This is an updated role description.",
- roleKey = "This is an updated Role Key",
- roleTitle = "This is an updated Role Title");
- }
-
- @priority = 4
- test CannotAddRoleIfSimilarKeyExists {
- Role.openRolesAdmin();
-
- Role.add(roleTitle = "Role Name");
-
- Role.openRolesAdmin();
-
- LexiconEntry.gotoAdd();
-
- PortletEntry.inputTitle(title = "Role Name2");
-
- Type(
- locator1 = "TextInput#KEY",
- value1 = "Role Name");
-
- AssertClick(
- locator1 = "Button#SUBMIT",
- value1 = "Save");
-
- Alert.viewRequestFailedToComplete();
-
- Alert.viewDuplicateErrorMessage();
-
- Role.openRolesAdmin();
-
- Search.searchCP(searchTerm = "Name2");
-
- AssertTextEquals.assertPartialText(
- locator1 = "Message#EMPTY_INFO",
- value1 = "No roles were found.");
- }
-
@priority = 4
test CanRemoveSiteInScope {
property test.liferay.virtual.instance = "false";
@@ -189,46 +96,6 @@ definition {
siteNameScope = "All Sites and Asset Libraries");
}
- @description = "This test asserts that user can search role with different title and key."
- @priority = 4
- test CanSearchRoleWithDifferentTitleAndKey {
- task ("Given a new role with different title and key is created") {
- Role.openRolesAdmin();
-
- Role.add(
- roleKey = "Role2 Key",
- roleTitle = "Role1 Name");
- }
-
- task ("When searching for role title") {
- Role.openRolesAdmin();
-
- Search.searchCP(searchTerm = "Role1 Name");
- }
-
- task ("Then only one result is displayed and the result is the newly created role") {
- AssertTextEquals(
- locator1 = "Search#SEARCH_INFO",
- value1 = "1 Result Found for \"Role1 Name\"");
-
- LexiconEntry.viewEntryName(rowEntry = "Role1 Name");
- }
-
- task ("When clearing search results and searching for role key") {
- Search.clearSearchResult();
-
- Search.searchCP(searchTerm = "Role2 Key");
- }
-
- task ("Then only one result is displayed and the result is the newly created role") {
- AssertTextEquals(
- locator1 = "Search#SEARCH_INFO",
- value1 = "1 Result Found for \"Role2 Key\"");
-
- LexiconEntry.viewEntryName(rowEntry = "Role1 Name");
- }
- }
-
@description = "This is a use case for LPS-116055."
@priority = 4
test ChangeScope {
@@ -319,47 +186,6 @@ definition {
}
}
- @priority = 4
- test ExistingSegmentCanBeAssignedToARegularRole {
- ProductMenu.gotoSite(site = "Global");
-
- ProductMenu.gotoPortlet(
- category = "People",
- portlet = "Segments");
-
- LexiconEntry.gotoAdd();
-
- Segmentation.addProperties(propertyOption = "Email Address");
-
- Segmentation.fillTitle(titleField = "RoleSegment Test");
-
- Segmentation.changeCriterionInput(criterionInputOption = "Contains");
-
- Segmentation.fillProperty(propertyField = "liferay");
-
- Button.clickSave();
-
- Alert.viewSuccessMessage();
-
- JSONRole.addRegularRole(
- roleKey = "Roles Regrole Name",
- roleTitle = "Roles Regrole Name");
-
- Role.openRolesAdmin();
-
- Role.addAssignee(
- assigneeName = "RoleSegment Test",
- assigneeType = "Segments",
- roleTitle = "Roles Regrole Name");
-
- Role.openRolesAdmin();
-
- Role.viewAssignee(
- assigneeName = "RoleSegment Test",
- assigneeType = "Segments",
- roleTitle = "Roles Regrole Name");
- }
-
@priority = 4
test NewSegmentCanBeAssignedToARegularRole {
JSONRole.addRegularRole(
@@ -407,509 +233,6 @@ definition {
roleTitle = "Roles Regrole Name");
}
- @description = "This test assigns and unassigns an organization to a regular role via UI."
- @priority = 4
- test OrganizationCanBeRemovedFromRegularRole {
- property custom.properties = "jsonws.web.service.paths.excludes=";
-
- JSONOrganization.addOrganization(
- organizationName = "Organization Name",
- organizationSite = "true");
-
- JSONUser.addUser(
- userEmailAddress = "userea@liferay.com",
- userFirstName = "userfn",
- userLastName = "userln",
- userScreenName = "usersn");
-
- JSONUser.setFirstPassword(
- agreeToTermsAndAnswerReminderQuery = "true",
- requireReset = "false",
- userEmailAddress = "userea@liferay.com");
-
- JSONOrganization.assignUserToOrganization(
- organizationName = "Organization Name",
- userEmailAddress = "userea@liferay.com");
-
- JSONRole.addRegularRole(
- roleKey = "Remove Org Assignee",
- roleTitle = "Remove Org Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "VIEW_CONTROL_PANEL",
- resourceName = 90,
- roleTitle = "Remove Org Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "VIEW",
- resourceName = "com.liferay.portal.kernel.model.UserGroup",
- roleTitle = "Remove Org Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "ACCESS_IN_CONTROL_PANEL",
- resourceName = "com_liferay_user_groups_admin_web_portlet_UserGroupsAdminPortlet",
- roleTitle = "Remove Org Assignee");
-
- Role.openRolesAdmin();
-
- Role.addAssignee(
- assigneeName = "Organization Name",
- assigneeType = "Organizations",
- roleTitle = "Remove Org Assignee");
-
- User.logoutPG();
-
- User.loginUserPG(
- password = PropsUtil.get("default.admin.password"),
- userEmailAddress = "userea@liferay.com");
-
- UserGroup.openUserGroupsAdmin();
-
- AssertElementNotPresent(
- locator1 = "Message#ERROR",
- value1 = "You do not have the roles required to access this portlet.");
-
- User.logoutAndLoginPG(
- userLoginEmailAddress = "test@liferay.com",
- userLoginFullName = "test test");
-
- Role.openRolesAdmin();
-
- Role.removeAssignee(
- assigneeName = "Organization Name",
- assigneeType = "Organizations",
- roleTitle = "Remove Org Assignee");
-
- User.logoutPG();
-
- User.loginUserPG(
- password = PropsUtil.get("default.admin.password"),
- userEmailAddress = "userea@liferay.com");
-
- UserGroup.openUserGroupsAdmin();
-
- AssertElementPresent(
- locator1 = "Message#ERROR",
- value1 = "You do not have the roles required to access this portlet.");
- }
-
- @priority = 4
- test OrganizationRoleCanBeDeleted {
- property portal.acceptance = "true";
-
- Role.openRolesAdmin();
-
- RoleNavigator.gotoRoleType(roleType = "Organization");
-
- Role.add(roleTitle = "Roles Orgrole Name");
-
- Role.openRolesAdmin();
-
- Role.viewCP(
- roleTitle = "Roles Orgrole Name",
- roleType = "Organization");
-
- Role.openRolesAdmin();
-
- RoleNavigator.gotoRoleType(roleType = "Organization");
-
- LexiconEntry.delete(rowEntry = "Roles Orgrole Name");
-
- Role.openRolesAdmin();
-
- RoleNavigator.gotoRoleType(roleType = "Organization");
-
- Role.viewDefaultCP(roleTitle = "Roles Orgrole Name");
- }
-
- @priority = 4
- test RegularRoleCanBeDeleted {
- property app.server.types = "jboss,tomcat,weblogic,wildfly";
- property database.types = "db2,hypersonic,mariadb,mysql,oracle,postgresql,sqlserver";
- property environment.acceptance = "true";
- property operating.system.types = "alpine,amazonlinux,centos,debian,fedora,orcllinux,osx,redhat,rockylinux,solaris,suse,ubuntu,windows";
- property portal.acceptance = "true";
-
- Role.openRolesAdmin();
-
- Role.add(roleTitle = "Roles Regrole Name");
-
- Role.openRolesAdmin();
-
- Role.viewCP(
- roleTitle = "Roles Regrole Name",
- roleType = "Regular");
-
- Role.openRolesAdmin();
-
- LexiconEntry.delete(rowEntry = "Roles Regrole Name");
-
- Role.openRolesAdmin();
-
- Role.viewDefaultCP(roleTitle = "Roles Regrole Name");
- }
-
- @description = "This is a test for LPS-202614."
- @priority = 3
- test RemoveSegmentsOptionInAdministratorRole {
- task ("When navigates to administrator role -> Assignees tab") {
- Role.openRolesAdmin();
-
- LexiconEntry.gotoEntryMenuItem(
- menuItem = "Edit",
- rowEntry = "Administrator");
-
- Click(
- key_tabName = "Assignees",
- locator1 = "ObjectAdmin#ENTRY_RELATIONSHIP_TAB");
- }
-
- task ("Then the Segments tab is removed") {
- AssertElementNotPresent(
- key_tabName = "Segments",
- locator1 = "ObjectAdmin#ENTRY_RELATIONSHIP_TAB");
- }
- }
-
- @priority = 4
- test RolesCanBeOrderedByTitle {
- Role.openRolesAdmin();
-
- Pagination.changePagination(itemsPerPage = 4);
-
- AssertElementPresent(
- key_itemName = "Administrator",
- locator1 = "ListGroupItem#ITEM_NAME_LINK",
- value1 = "Administrator");
-
- AssertElementNotPresent(
- key_itemName = "User",
- locator1 = "ListGroupItem#ITEM_NAME_LINK",
- value1 = "User");
-
- Click.clickNoMouseOver(locator1 = "ManagementBar#ORDER_ICON_GENERIC");
-
- AssertElementPresent(
- key_itemName = "User",
- locator1 = "ListGroupItem#ITEM_NAME_LINK",
- value1 = "User");
-
- AssertElementNotPresent(
- key_itemName = "Administrator",
- locator1 = "ListGroupItem#ITEM_NAME_LINK",
- value1 = "Administrator");
- }
-
- @priority = 4
- test RolesCanBeViewedInTableView {
- Role.openRolesAdmin();
-
- LexiconEntry.changeDisplayStyle(displayStyle = "table");
-
- AssertTextEquals(
- key_tableEntry = "Administrator",
- locator1 = "LexiconTable#TABLE_ENTRY_TITLE_LINK",
- value1 = "Administrator");
-
- AssertTextEquals(
- key_columnName = "description",
- key_tableEntry = "Administrators",
- locator1 = "LexiconTable#TABLE_ENTRY_COLUMN_LINK",
- value1 = "Administrators are super users who can do anything.");
-
- AssertTextEquals(
- key_columnName = "assignees",
- key_tableEntry = "Administrators",
- locator1 = "LexiconTable#TABLE_ENTRY_COLUMN_LINK",
- value1 = 1);
- }
-
- @priority = 4
- test SegmentCanBeRemovedFromRegularRole {
- ProductMenu.gotoSite(site = "Global");
-
- ProductMenu.gotoPortlet(
- category = "People",
- portlet = "Segments");
-
- LexiconEntry.gotoAdd();
-
- Segmentation.addProperties(propertyOption = "Email Address");
-
- Segmentation.fillTitle(titleField = "Role Assignee Test");
-
- Segmentation.changeCriterionInput(criterionInputOption = "Contains");
-
- Segmentation.fillProperty(propertyField = "liferay");
-
- Button.clickSave();
-
- Alert.viewSuccessMessage();
-
- JSONRole.addRegularRole(
- roleKey = "Remove Regrole Assignee",
- roleTitle = "Remove Regrole Assignee");
-
- Role.openRolesAdmin();
-
- Role.addAssignee(
- assigneeName = "Role Assignee Test",
- assigneeType = "Segments",
- roleTitle = "Remove Regrole Assignee");
-
- Role.openRolesAdmin();
-
- Role.removeAssignee(
- assigneeName = "Role Assignee Test",
- assigneeType = "Segments",
- roleTitle = "Remove Regrole Assignee");
- }
-
- @description = "This test assigns and unassigns a site to a regular role via UI."
- @priority = 4
- test SiteCanBeRemovedFromRegularRole {
- property custom.properties = "jsonws.web.service.paths.excludes=";
-
- HeadlessSite.addSite(siteName = "Site Name");
-
- JSONUser.addUser(
- userEmailAddress = "userea@liferay.com",
- userFirstName = "userfn",
- userLastName = "userln",
- userScreenName = "usersn");
-
- JSONUser.setFirstPassword(
- agreeToTermsAndAnswerReminderQuery = "true",
- requireReset = "false",
- userEmailAddress = "userea@liferay.com");
-
- Site.openSiteSettingsAdmin(siteURLKey = "site-name");
-
- Site.manageMembershipOptions(allowManualMembershipManagement = "true");
-
- User.openUsersAdmin();
-
- User.editUserSiteCP(
- siteName = "Site Name",
- userScreenName = "usersn");
-
- JSONRole.addRegularRole(
- roleKey = "Remove Site Assignee",
- roleTitle = "Remove Site Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "VIEW_CONTROL_PANEL",
- resourceName = 90,
- roleTitle = "Remove Site Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "VIEW",
- resourceName = "com.liferay.portal.kernel.model.UserGroup",
- roleTitle = "Remove Site Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "ACCESS_IN_CONTROL_PANEL",
- resourceName = "com_liferay_user_groups_admin_web_portlet_UserGroupsAdminPortlet",
- roleTitle = "Remove Site Assignee");
-
- Role.openRolesAdmin();
-
- Role.addAssignee(
- assigneeName = "Site Name",
- assigneeType = "Sites",
- roleTitle = "Remove Site Assignee");
-
- User.logoutPG();
-
- User.loginUserPG(
- password = PropsUtil.get("default.admin.password"),
- userEmailAddress = "userea@liferay.com");
-
- UserGroup.openUserGroupsAdmin();
-
- AssertElementNotPresent(
- locator1 = "Message#ERROR",
- value1 = "You do not have the roles required to access this portlet.");
-
- User.logoutAndLoginPG(
- userLoginEmailAddress = "test@liferay.com",
- userLoginFullName = "test test");
-
- Role.openRolesAdmin();
-
- Role.removeAssignee(
- assigneeName = "Site Name",
- assigneeType = "Sites",
- roleTitle = "Remove Site Assignee");
-
- User.logoutPG();
-
- User.loginUserPG(
- password = PropsUtil.get("default.admin.password"),
- userEmailAddress = "userea@liferay.com");
-
- UserGroup.openUserGroupsAdmin();
-
- AssertElementPresent(
- locator1 = "Message#ERROR",
- value1 = "You do not have the roles required to access this portlet.");
- }
-
- @priority = 4
- test SiteRoleCanBeDeleted {
- property portal.acceptance = "true";
-
- Role.openRolesAdmin();
-
- RoleNavigator.gotoRoleType(roleType = "Site");
-
- Role.add(roleTitle = "Roles Siterole Name");
-
- Role.openRolesAdmin();
-
- Role.viewCP(
- roleTitle = "Roles Siterole Name",
- roleType = "Site");
-
- Role.openRolesAdmin();
-
- RoleNavigator.gotoRoleType(roleType = "Site");
-
- LexiconEntry.delete(rowEntry = "Roles Siterole Name");
-
- Role.openRolesAdmin();
-
- RoleNavigator.gotoRoleType(roleType = "Site");
-
- Role.viewDefaultCP(roleTitle = "Roles Siterole Name");
- }
-
- @description = "This is a use case for LPS-105001 and LPS-104999."
- @priority = 4
- test UserCanAddARoleWithoutATitle {
- Role.openRolesAdmin();
-
- Role.viewCP(roleKey = "Administrator");
-
- Role.openRolesAdmin();
-
- Role.add(roleKey = "Role Key Value");
-
- Role.openRolesAdmin();
-
- Role.viewCP(roleKey = "Role Key Value");
- }
-
- @description = "This is a use case for LPS-109572."
- @priority = 4
- test UserCanBeAssignedToARegularRole {
- property app.server.types = "jboss,tomcat,weblogic,wildfly";
- property database.types = "db2,hypersonic,mariadb,mysql,oracle,postgresql,sqlserver";
- property portal.acceptance = "true";
- property test.liferay.virtual.instance = "false";
-
- JSONRole.addRegularRole(
- roleKey = "Regular Role",
- roleTitle = "Regular Role");
-
- JSONUser.addUser(
- userEmailAddress = "userea@liferay.com",
- userFirstName = "userfn",
- userLastName = "userln",
- userScreenName = "usersn");
-
- Role.openRolesAdmin();
-
- JSONRole.assignRoleToUser(
- roleTitle = "Regular Role",
- userEmailAddress = "userea@liferay.com");
-
- Role.openRolesAdmin();
-
- Role.viewAssignee(
- assigneeName = "userfn userln",
- assigneeType = "Users",
- roleTitle = "Regular Role");
- }
-
- @description = "This test assigns and unassigns a user to a regular role via UI."
- @priority = 4
- test UserCanBeRemovedFromRegularRole {
- property custom.properties = "jsonws.web.service.paths.excludes=";
-
- JSONUser.addUser(
- userEmailAddress = "userea@liferay.com",
- userFirstName = "userfn",
- userLastName = "userln",
- userScreenName = "usersn");
-
- JSONUser.setFirstPassword(
- agreeToTermsAndAnswerReminderQuery = "true",
- requireReset = "false",
- userEmailAddress = "userea@liferay.com");
-
- JSONRole.addRegularRole(
- roleKey = "Remove User Assignee",
- roleTitle = "Remove User Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "VIEW_CONTROL_PANEL",
- resourceName = 90,
- roleTitle = "Remove User Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "VIEW",
- resourceName = "com.liferay.portal.kernel.model.UserGroup",
- roleTitle = "Remove User Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "ACCESS_IN_CONTROL_PANEL",
- resourceName = "com_liferay_user_groups_admin_web_portlet_UserGroupsAdminPortlet",
- roleTitle = "Remove User Assignee");
-
- Role.openRolesAdmin();
-
- Role.addAssignee(
- assigneeName = "userfn userln",
- assigneeType = "Users",
- roleTitle = "Remove User Assignee");
-
- User.logoutPG();
-
- User.loginUserPG(
- password = PropsUtil.get("default.admin.password"),
- userEmailAddress = "userea@liferay.com");
-
- UserGroup.openUserGroupsAdmin();
-
- AssertElementNotPresent(
- locator1 = "Message#ERROR",
- value1 = "You do not have the roles required to access this portlet.");
-
- User.logoutAndLoginPG(
- userLoginEmailAddress = "test@liferay.com",
- userLoginFullName = "test test");
-
- Role.openRolesAdmin();
-
- Role.removeAssignee(
- assigneeName = "userfn userln",
- assigneeType = "Users",
- roleTitle = "Remove User Assignee");
-
- User.logoutPG();
-
- User.loginUserPG(
- password = PropsUtil.get("default.admin.password"),
- userEmailAddress = "userea@liferay.com");
-
- UserGroup.openUserGroupsAdmin();
-
- AssertElementPresent(
- locator1 = "Message#ERROR",
- value1 = "You do not have the roles required to access this portlet.");
- }
-
@description = "This test asserts that Organization Role table is empty and select button does not display if user is not a member of an organization."
@priority = 4
test UserCanNotSelectOrgRoleIfUserIsNotAnOrgMember {
@@ -960,90 +283,6 @@ definition {
value1 = "Select");
}
- @description = "This test assigns and unassigns a user group to a regular role via UI."
- @priority = 4
- test UserGroupCanBeRemovedFromRegularRole {
- property custom.properties = "jsonws.web.service.paths.excludes=";
-
- JSONUserGroup.addUserGroup(userGroupName = "UG UserGroup Name");
-
- JSONUser.addUser(
- userEmailAddress = "userea@liferay.com",
- userFirstName = "userfn",
- userLastName = "userln",
- userScreenName = "usersn");
-
- JSONUser.setFirstPassword(
- agreeToTermsAndAnswerReminderQuery = "true",
- requireReset = "false",
- userEmailAddress = "userea@liferay.com");
-
- JSONUser.addUserToUserGroup(
- userEmailAddress = "userea@liferay.com",
- userGroupName = "UG UserGroup Name");
-
- JSONRole.addRegularRole(
- roleKey = "Remove User Group Assignee",
- roleTitle = "Remove User Group Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "VIEW_CONTROL_PANEL",
- resourceName = 90,
- roleTitle = "Remove User Group Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "VIEW",
- resourceName = "com.liferay.portal.kernel.model.UserGroup",
- roleTitle = "Remove User Group Assignee");
-
- Permissions.definePermissionViaJSONAPI(
- resourceAction = "ACCESS_IN_CONTROL_PANEL",
- resourceName = "com_liferay_user_groups_admin_web_portlet_UserGroupsAdminPortlet",
- roleTitle = "Remove User Group Assignee");
-
- Role.openRolesAdmin();
-
- Role.addAssignee(
- assigneeName = "UG UserGroup Name",
- assigneeType = "User Groups",
- roleTitle = "Remove User Group Assignee");
-
- User.logoutPG();
-
- User.loginUserPG(
- password = PropsUtil.get("default.admin.password"),
- userEmailAddress = "userea@liferay.com");
-
- UserGroup.openUserGroupsAdmin();
-
- AssertElementNotPresent(
- locator1 = "Message#ERROR",
- value1 = "You do not have the roles required to access this portlet.");
-
- User.logoutAndLoginPG(
- userLoginEmailAddress = "test@liferay.com",
- userLoginFullName = "test test");
-
- Role.openRolesAdmin();
-
- Role.removeAssignee(
- assigneeName = "UG UserGroup Name",
- assigneeType = "User Groups",
- roleTitle = "Remove User Group Assignee");
-
- User.logoutPG();
-
- User.loginUserPG(
- password = PropsUtil.get("default.admin.password"),
- userEmailAddress = "userea@liferay.com");
-
- UserGroup.openUserGroupsAdmin();
-
- AssertElementPresent(
- locator1 = "Message#ERROR",
- value1 = "You do not have the roles required to access this portlet.");
- }
-
@description = "This is a use case for LPS-97321. All subdirectories in Define Permissions should display."
@priority = 4
test ViewDefinePermissionsSubdirectoriesDisplay {
diff --git a/portal-web/test/functional/com/liferay/portalweb/tests/coreinfrastructure/administration/users/gdpr/GDPR.testcase b/portal-web/test/functional/com/liferay/portalweb/tests/coreinfrastructure/administration/users/gdpr/GDPR.testcase
index 5936e473552e3b..aab2954370e219 100644
--- a/portal-web/test/functional/com/liferay/portalweb/tests/coreinfrastructure/administration/users/gdpr/GDPR.testcase
+++ b/portal-web/test/functional/com/liferay/portalweb/tests/coreinfrastructure/administration/users/gdpr/GDPR.testcase
@@ -321,45 +321,6 @@ definition {
value1 = "Anonymous Anonymous");
}
- @description = "This test anonymizes only one entry from an application via the Info panel"
- @priority = 4
- test CanAnonymizeViaInfoPanel {
- BlogsNavigator.openBlogsAdmin(siteURLKey = "guest");
-
- Blogs.addEntry(
- entryContent = "Blogs Entry Content",
- entryTitle = "Blogs Entry 1");
-
- Blogs.addEntry(
- entryContent = "Blogs Entry Content",
- entryTitle = "Blogs Entry 2");
-
- User.logoutAndLoginPG(
- userLoginEmailAddress = "test@liferay.com",
- userLoginFullName = "Test Test");
-
- User.openUsersAdmin();
-
- User.deletePersonalDataCP(
- userFirstName = "userfn",
- userLastName = "userln");
-
- GDPR.filterByApplications(
- applicationItemsCount = 2,
- applications = "Blogs",
- totalItemsCount = 2);
-
- GDPR.anonymizeSingleEntryViaInfoPanel(rowEntry = "Blogs Entry 1");
-
- BlogsNavigator.openBlogsAdmin(siteURLKey = "guest");
-
- LexiconEntry.changeDisplayStyle(displayStyle = "table");
-
- BlogsEntry.viewEntryAuthorCP(
- entryAuthorFullName = "Anonymous Anonymous",
- entryTitle = "Blogs Entry 1");
- }
-
@description = "This test covers LPS-168719. It ensures that changing the password length does not affect anonymization"
@priority = 4
test CanAnonymizeWithPasswordLengthChange {
diff --git a/portal-web/test/functional/com/liferay/portalweb/tests/enduser/staging/usecase/Staging.testcase b/portal-web/test/functional/com/liferay/portalweb/tests/enduser/staging/usecase/Staging.testcase
index 24f09c9a0d7d80..5eb2877a78f864 100644
--- a/portal-web/test/functional/com/liferay/portalweb/tests/enduser/staging/usecase/Staging.testcase
+++ b/portal-web/test/functional/com/liferay/portalweb/tests/enduser/staging/usecase/Staging.testcase
@@ -120,59 +120,6 @@ definition {
groupName = "Site Name");
}
- @description = "This is a use case for LPS-83147."
- @priority = 3
- test ActivateStagingWithPageScopedWebContent {
- task ("Enable Scope Configuration") {
- Portlet.enableScopeConfiguration();
- }
-
- JSONLayout.addWidgetToPublicLayout(
- groupName = "Site Name",
- layoutName = "Staging Test Page",
- widgetName = "Web Content Display");
-
- Navigator.openSiteURL(siteName = "Site Name");
-
- MouseOver(locator1 = "Portlet#PORTLET_CONTENT");
-
- WebContentDisplayPortlet.configureScope(scopeSelection = "Staging Test Page");
-
- Navigator.openSiteURL(siteName = "Site Name");
-
- MouseOver(locator1 = "Portlet#PORTLET_CONTENT");
-
- WebContentDisplayPortlet.viewConfigureScope(scopeSelection = "Staging Test Page");
-
- var pageScopeId = JSONLayout.getPageScopeIdByGroupName(groupName = "Site Name");
-
- echo("Page Scope ID is: ${pageScopeId}");
-
- WebContentNavigator.openWebContentAdmin(siteURLKey = ${pageScopeId});
-
- WebContentNavigator.gotoAddCP();
-
- WebContent.addCP(
- webContentContent = "WC WebContent Content",
- webContentTitle = "WC WebContent Title");
-
- WebContent.publishWithPermissions();
-
- JSONStaging.enableLocalStaging(groupName = "Site Name");
-
- AssertConsoleTextNotPresent(value1 = "DataIntegrityViolationException");
-
- AssertConsoleTextNotPresent(value1 = "SystemException");
-
- WebContentNavigator.openWebContentAdmin(siteURLKey = ${pageScopeId});
-
- var key_webContentTitle = "WC WebContent Title";
-
- AssertTextEquals.assertPartialText(
- locator1 = "WC#ENTRY_LIST_TITLE_ON_LIVE",
- value1 = "WC WebContent Title");
- }
-
@description = "This is a use case for LPS-94325."
@priority = 3
test ActivateStagingWithWCDOnFragment {
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/client-extension.yaml b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/client-extension.yaml
index ea172eda510d59..9e93f756f0db84 100644
--- a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/client-extension.yaml
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/client-extension.yaml
@@ -16,7 +16,7 @@ liferay-customer-custom-element:
article-getting-started-with-liferay-enterprise-search-url: https://help.liferay.com/hc/en-us/articles/13528042483597
article-notified-when-my-activation-key-is-about-to-expire-url: https://help.liferay.com/hc/en-us/articles/19716265300493
article-what-is-my-instance-sizing-value-url: https://help.liferay.com/hc/en-us/articles/360025762932#h_01H3YAFQ7B5H1ZHCXZX7E64SJ1
- feature-flags: ISSD-100,ISSD-119,ISSD-78,LPS-148342,LPS-148366,LPS-153478,LPS-159127,LPS-159359,LPS-180001,LPS-181031,LPS-185004,LPS-185063,LPS-186175,LPS-187767,LPS-191380,LPS-192494,LPS-194304,LPS-194304,LRSD-5119,LRSD-6322
+ feature-flags: ISSD-100,ISSD-119,ISSD-78,LPS-148342,LPS-148366,LPS-153478,LPS-159127,LPS-159359,LPS-180001,LPS-181031,LPS-185004,LPS-185063,LPS-186175,LPS-187767,LPS-191380,LPS-192494,LPS-194304,LPS-194304,LRSD-5119,LRSD-6322,LRSD-7805
gravatar-api: https://www.gravatar.com/avatar
import-date: 2022/11/17
provisioning-server-api: https://webserver-lrprovisioning-uat.lfr.cloud/o/provisioning-rest/v1.0
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/package.json b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/package.json
index a01b52f71b5cca..5649a2011a4961 100644
--- a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/package.json
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/package.json
@@ -17,6 +17,7 @@
"@clayui/modal": "3.122.0",
"@clayui/multi-select": "3.127.0",
"@clayui/nav": "3.127.0",
+ "@clayui/navigation-bar": "^3.128.0",
"@clayui/pagination-bar": "3.127.0",
"@clayui/popover": "3.119.0",
"@clayui/tooltip": "3.119.0",
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/BusinessEvents.tsx b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/BusinessEvents.tsx
index a316603732e583..f2f02a149186c4 100644
--- a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/BusinessEvents.tsx
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/BusinessEvents.tsx
@@ -8,12 +8,14 @@ import i18n from '~/utils/I18n';
import './BusinessEvents.css';
import {ButtonWithIcon} from '@clayui/core';
-import {useEffect, useMemo, useState} from 'react';
+import {useCallback, useEffect, useMemo, useState} from 'react';
+import {useNavigate} from 'react-router-dom';
import {ButtonDropDown} from '~/components';
import {IFilterOption} from '~/components/Filter/Filter';
import Table, {IRow} from '~/components/Table';
import TableHeader from '~/components/Table/TableHeader';
import {hasAdminUserAccount} from '~/features/project/containers/ActivationKeysTable/utils/hasAdminUserAccount';
+import {useCustomerPortal} from '~/features/project/context';
import {getFormattedDate} from '~/features/project/utils/getFormattedDate';
import useCurrentKoroneikiAccount from '~/hooks/useCurrentKoroneikiAccount';
import {getBusinessEvents} from '~/services/liferay/api';
@@ -23,12 +25,15 @@ import {IOrganizationBrief} from '~/utils/types';
import useMyUserAccountByAccountExternalReferenceCode from '../TeamMembers/components/TeamMembersTable/hooks/useMyUserAccountByAccountExternalReferenceCode';
import {INITIAL_FILTER} from './utils/constants/initialFilter';
-interface IBusinessEventTicket {
+export interface IBusinessEventTicket {
associatedTickets: string;
+ currentLiferayVersion: Record;
description: string;
eventStatus: Record;
eventType: Record;
+ id: number;
name: string;
+ newLiferayVersion: Record;
targetGoLiveDateTime: string;
}
@@ -67,26 +72,27 @@ const columns = [
];
const BusinessEvents = () => {
- const [businessEventsTickets, setBusinessEventsTickets] = useState<
- IBusinessEventTicket[]
- >([]);
+ const [{project}] = useCustomerPortal();
const [filters, setFilters] = useState({
availableFilters: INITIAL_FILTER,
searchTerm: '',
selectedFilters: [],
});
-
const {data, loading} = useCurrentKoroneikiAccount();
const koroneikiAccount = data?.koroneikiAccountByExternalReferenceCode;
const {data: myUserAccountData} =
useMyUserAccountByAccountExternalReferenceCode(
- loading,
- koroneikiAccount?.accountKey
+ koroneikiAccount?.accountKey,
+ loading
);
const loggedUserAccount = myUserAccountData?.myUserAccount;
+ const [businessEventsTickets, setBusinessEventsTickets] = useState<
+ IBusinessEventTicket[]
+ >([]);
+
const isAdminUserAccount = hasAdminUserAccount(myUserAccountData);
const hasProjectAdminOrRequesterRole =
loggedUserAccount?.selectedAccountSummary?.hasSupportSeatRole;
@@ -106,6 +112,19 @@ const BusinessEvents = () => {
isLiferayStaff ||
hasFLSOrganizationAssociated;
+ const navigate = useNavigate();
+
+ const handleEditEvent = useCallback(
+ (eventTicketId: number) => {
+ if (eventTicketId) {
+ navigate(
+ `/${project?.accountKey}/business-events/${eventTicketId}`
+ );
+ }
+ },
+ [navigate, project?.accountKey]
+ );
+
const generateFilterQuery = (filters: IState) => {
const queryParams = Object.entries(filters)
.map(([key, {value}]) => {
@@ -182,108 +201,114 @@ const BusinessEvents = () => {
}, [filterQuery]);
const rows = useMemo(() => {
- const userOptions = [
- {
- customOptionStyle: 'pr-5',
- label: i18n.translate('view-details'),
- onClick: () => {},
- },
- ];
-
- if (hasAllEventsPermissions) {
- userOptions.push(
- {
- customOptionStyle: 'pr-5',
- label: i18n.translate('edit-event'),
- onClick: () => {},
- },
- {
- customOptionStyle: 'pr-5',
- label: i18n.translate('record-actual-go-live'),
- onClick: () => {},
- },
- {
- customOptionStyle: 'pr-5 be-cancel-event-option',
- label: i18n.translate('cancel-event'),
- onClick: () => {},
- }
- );
- }
-
if (businessEventsTickets?.length > 0) {
- return businessEventsTickets.map((eventTicket) => ({
- actions: (
-
-
- }
- items={userOptions}
- label="Options"
- />
-
- ),
- associatedTickets: (
-
- {eventTicket?.associatedTickets}
-
- ),
- details: (
-
- {eventTicket?.description}
-
- ),
- eventName: (
-
-
- {eventTicket?.name}
-
+ return businessEventsTickets.map((eventTicket) => {
+ const userOptions = [
+ {
+ customOptionStyle: 'pr-5',
+ label: i18n.translate('view-details'),
+ onClick: () => {
+ handleEditEvent(eventTicket?.id);
+ },
+ },
+ ];
+
+ if (hasAllEventsPermissions) {
+ userOptions.push(
+ {
+ customOptionStyle: 'pr-5',
+ label: i18n.translate('edit-event'),
+ onClick: () => {
+ handleEditEvent(eventTicket?.id);
+ },
+ },
+ {
+ customOptionStyle: 'pr-5',
+ label: i18n.translate('record-actual-go-live'),
+ onClick: () => {},
+ },
+ {
+ customOptionStyle: 'pr-5 be-cancel-event-option',
+ label: i18n.translate('cancel-event'),
+ onClick: () => {},
+ }
+ );
+ }
-
- {eventTicket?.eventType?.name}
+ return {
+ actions: (
+
+
+ }
+ items={userOptions}
+ label="Options"
+ />
-
- ),
- status: (
-
-
- {eventTicket?.eventStatus?.name}
+ ),
+ associatedTickets: (
+
+ {eventTicket?.associatedTickets}
-
- ),
- targetGoLiveDate: (
-
+ ),
+ details: (
- {getFormattedDate(
- eventTicket?.targetGoLiveDateTime,
- 'day2DMonthSYearN'
- )}
+ {eventTicket?.description}
-
-
- {getFormattedTime(
- eventTicket?.targetGoLiveDateTime
- )}
+ ),
+ eventName: (
+
+
+ {eventTicket?.name}
+
+
+
+ {eventTicket?.eventType?.name}
+
+
+ ),
+ status: (
+
+
+ {eventTicket?.eventStatus?.name}
+
+
+ ),
+ targetGoLiveDate: (
+
+
+ {getFormattedDate(
+ eventTicket?.targetGoLiveDateTime,
+ 'day2DMonthSYearN'
+ )}
+
+
+
+ {getFormattedTime(
+ eventTicket?.targetGoLiveDateTime
+ )}
+
-
- ),
- }));
+ ),
+ };
+ });
}
return [];
- }, [businessEventsTickets, hasAllEventsPermissions]);
+ }, [businessEventsTickets, hasAllEventsPermissions, handleEditEvent]);
return (
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/BusinessEventsItem.css b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/BusinessEventsItem.css
new file mode 100644
index 00000000000000..33979c59d8b0d6
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/BusinessEventsItem.css
@@ -0,0 +1,24 @@
+.be-breadcrumbs a {
+ color: var(--color-action-neutral-default);
+ font-size: 0.875rem;
+ text-decoration: none;
+}
+
+.be-status {
+ background-color: var(--color-neutral-5);
+ border-radius: var(--border-radius-sm);
+ color: var(--color-neutral-0);
+ font-size: var(--font-size-sm);
+}
+
+.be-status-canceled {
+ background-color: var(--color-state-error);
+}
+
+.be-status-open {
+ background-color: var(--color-state-success);
+}
+
+.be-status-overdue {
+ background-color: var(--color-state-warning);
+}
\ No newline at end of file
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/BusinessEventsItem.tsx b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/BusinessEventsItem.tsx
new file mode 100644
index 00000000000000..f8b92c074ed8c5
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/BusinessEventsItem.tsx
@@ -0,0 +1,182 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import {Nav} from '@clayui/core';
+import ClayIcon from '@clayui/icon';
+import NavigationBar from '@clayui/navigation-bar';
+import {useEffect, useState} from 'react';
+import {Link, useParams} from 'react-router-dom';
+import {ButtonDropDown} from '~/components';
+import i18n from '~/utils/I18n';
+import {IBusinessEvent} from '~/utils/types';
+
+import BusinessEventsItemActivityHistory from './components/BusinessEventsItemActivityHistory';
+import BusinessEventsItemDetails from './components/BusinessEventsItemDetails';
+import BusinessEventsItemEdition from './components/BusinessEventsItemEdition';
+
+import './BusinessEventsItem.css';
+
+import ClayLoadingIndicator from '@clayui/loading-indicator';
+import {getBusinessEventById} from '~/services/liferay/api';
+
+const BusinessEventsItem = () => {
+ const {accountKey, id} = useParams<{accountKey: string; id: string}>();
+ const [businessEvent, setBusinessEvent] = useState
(
+ null
+ );
+ const [loading, setLoading] = useState(true);
+
+ useEffect(() => {
+ if (id) {
+ const fetchEvent = async () => {
+ try {
+ setLoading(true);
+
+ const eventData = await getBusinessEventById(id);
+
+ setBusinessEvent(eventData);
+ }
+ catch (error) {
+ console.error('Error', error);
+
+ setBusinessEvent(null);
+ }
+ finally {
+ setLoading(false);
+ }
+ };
+
+ fetchEvent();
+ }
+ }, [id]);
+
+ const [activeTab, setActiveTab] = useState('event-details');
+ const [currentIndex, setCurrentIndex] = useState(0);
+ const [isEditing, setIsEditing] = useState(false);
+
+ if (loading) {
+ return (
+
+
+
+ );
+ }
+
+ if (!businessEvent) {
+ return {i18n.translate('no-data-found')}
;
+ }
+
+ const userOptions = [
+ {
+ customOptionStyle: 'pr-5',
+ icon: ,
+ label: i18n.translate('edit-event-details'),
+ onClick: () => {
+ setIsEditing(true);
+ },
+ },
+ {
+ customOptionStyle: 'pr-5',
+ icon: ,
+ label: i18n.translate('record-actual-go-live'),
+ onClick: () => {},
+ },
+ {
+ customOptionStyle: 'pr-5',
+ icon: ,
+ label: i18n.translate('cancel-event'),
+ onClick: () => {},
+ },
+ ];
+
+ const handleOnClick = (index: number) => {
+ setCurrentIndex(index);
+
+ if (index === 0) {
+ setActiveTab('event-details');
+ }
+ else if (index === 1) {
+ setActiveTab('activity-history');
+ }
+ };
+
+ const getNavItems = () => {
+ const items = [
+ {key: 'event-details', label: 'event-details'},
+ {key: 'activity-history', label: 'activity-history'},
+ ];
+
+ return items.map((item, index) => (
+ handleOnClick(index)}
+ >
+
+ {i18n.translate(item.label)}
+
+
+ ));
+ };
+
+ return (
+
+
+
+
+
+
+ {i18n.translate('back-to-business-events')}
+
+
+
+
+
+
+ {businessEvent?.eventStatus?.name}
+
+
+
+
+
{businessEvent.name}
+
+
+
+
+
+
+
+
+
+
+ {getNavItems()}
+
+
+
+
+ {activeTab === 'event-details' &&
+ (!isEditing ? (
+
+ ) : (
+
+ ))}
+ {activeTab === 'activity-history' && (
+
+
+
+ )}
+
+
+ );
+};
+
+export default BusinessEventsItem;
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemActivityHistory/BusinessEventsItemActivityHistory.tsx b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemActivityHistory/BusinessEventsItemActivityHistory.tsx
new file mode 100644
index 00000000000000..890ba5edfbf2de
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemActivityHistory/BusinessEventsItemActivityHistory.tsx
@@ -0,0 +1,10 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+const BusinessEventsItemActivityHistory = () => {
+ return ;
+};
+
+export default BusinessEventsItemActivityHistory;
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemActivityHistory/index.ts b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemActivityHistory/index.ts
new file mode 100644
index 00000000000000..1cfce3481dfd51
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemActivityHistory/index.ts
@@ -0,0 +1,6 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+export {default} from './BusinessEventsItemActivityHistory';
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemDetails/BusinessEventsItemDetails.css b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemDetails/BusinessEventsItemDetails.css
new file mode 100644
index 00000000000000..935e0ecbd710f8
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemDetails/BusinessEventsItemDetails.css
@@ -0,0 +1,10 @@
+.event-detail-container {
+ .event-detail-title {
+ font-size: 0.813rem;
+ }
+
+ .event-detail-value {
+ background-color: var(--color-neutral-1);
+ padding: 0.5rem 0.75rem;
+ }
+}
\ No newline at end of file
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemDetails/BusinessEventsItemDetails.tsx b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemDetails/BusinessEventsItemDetails.tsx
new file mode 100644
index 00000000000000..5f7bf8f7c7c00c
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemDetails/BusinessEventsItemDetails.tsx
@@ -0,0 +1,81 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+import i18n from '~/utils/I18n';
+import {IBusinessEvent} from '~/utils/types';
+
+import './BusinessEventsItemDetails.css';
+
+interface IProps {
+ businessEvent: IBusinessEvent;
+}
+
+const BusinessEventsItemDetails = ({businessEvent}: IProps) => {
+ return (
+
+ {businessEvent?.eventType?.name && (
+
+
+ {i18n.translate('event-type')}
+
+
+
+ {businessEvent?.eventType.name}
+
+
+ )}
+
+ {businessEvent?.currentLiferayVersion?.name && (
+
+
+ {i18n.translate('current-version')}
+
+
+
+ {businessEvent?.currentLiferayVersion.name}
+
+
+ )}
+
+ {businessEvent?.newLiferayVersion?.name && (
+
+
+ {i18n.translate('new-version')}
+
+
+
+ {businessEvent?.newLiferayVersion.name}
+
+
+ )}
+
+ {businessEvent?.targetGoLiveDateTime && (
+
+
+ {i18n.translate('target-go-live-date')}
+
+
+
+ {businessEvent?.targetGoLiveDateTime?.toString()}
+
+
+ )}
+
+ {businessEvent?.associatedTickets && (
+
+
+ {i18n.translate('associated-tickets')}
+
+
+
+ {businessEvent?.associatedTickets}
+
+
+ )}
+
+ );
+};
+
+export default BusinessEventsItemDetails;
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemDetails/index.ts b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemDetails/index.ts
new file mode 100644
index 00000000000000..7a9a39ba795db4
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemDetails/index.ts
@@ -0,0 +1,6 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+export {default} from './BusinessEventsItemDetails';
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemEdition/BusinessEventsItemEdition.tsx b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemEdition/BusinessEventsItemEdition.tsx
new file mode 100644
index 00000000000000..6e5464bef04949
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemEdition/BusinessEventsItemEdition.tsx
@@ -0,0 +1,10 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+const BusinessEventsItemEdition = () => {
+ return ;
+};
+
+export default BusinessEventsItemEdition;
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemEdition/index.ts b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemEdition/index.ts
new file mode 100644
index 00000000000000..e07952fd9b606e
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/components/BusinessEventsItemEdition/index.ts
@@ -0,0 +1,6 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+export {default} from './BusinessEventsItemEdition';
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/index.ts b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/index.ts
new file mode 100644
index 00000000000000..b0ce46926e136d
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/BusinessEvent/pages/BusinessEventsItem/index.ts
@@ -0,0 +1,6 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+export {default} from './BusinessEventsItem';
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/routes/project.routes.jsx b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/routes/project.routes.jsx
index 911e0f20224558..673a40c582b452 100644
--- a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/routes/project.routes.jsx
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/features/project/pages/Project/routes/project.routes.jsx
@@ -32,6 +32,7 @@ import ProjectUsage from '../ProjectUsage';
import useCurrentKoroneikiAccount from '~/hooks/useCurrentKoroneikiAccount';
import useMyUserAccountByAccountExternalReferenceCode from '~/features/project/pages/Project/TeamMembers/components/TeamMembersTable/hooks/useMyUserAccountByAccountExternalReferenceCode';
import BusinessEvents from '../BusinessEvent';
+import BusinessEventsItem from '../BusinessEvent/pages/BusinessEventsItem/BusinessEventsItem';
const ProjectRoutes = () => {
const [hasComplimentaryKey, setHasComplimentaryKey] = useState(false);
@@ -267,7 +268,10 @@ const ProjectRoutes = () => {
} path="team-members" />
{featureFlags.includes('LRSD-5119') && (
- } path="business-events" />
+
+ } index />
+ } path=":id"/>
+
)}
{((featureFlags.includes('LRSD-6322') && loggedUserAccount?.isLiferayStaff) ||
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/services/liferay/api.ts b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/services/liferay/api.ts
index 802e97ce48ce48..7edacea5dad33f 100644
--- a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/services/liferay/api.ts
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/services/liferay/api.ts
@@ -33,6 +33,17 @@ const fetchHeadless = async ({
return response;
};
+const getBusinessEventById = async (id: string | number) => {
+ return fetcher(`${HEADLESS_BASE_URL}${`c/businessevents/${id}`}`, {
+ headers: {
+ 'Accept-Language': Liferay.ThemeDisplay.getBCP47LanguageId(),
+ 'Content-Type': 'application/json',
+ 'x-csrf-token': Liferay.authToken,
+ },
+ method: 'GET',
+ });
+};
+
const getBusinessEvents = async (filters: string) => {
return fetcher(`${HEADLESS_BASE_URL}${`c/businessevents?${filters}`}`, {
headers: {
@@ -77,6 +88,7 @@ const getTicketAttachments = async (filter: string) => {
export {
getBusinessEvents,
+ getBusinessEventById,
getHighPriorityContacts,
getTicketAttachments,
fetchHeadless,
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/utils/I18n/Language.json b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/utils/I18n/Language.json
index c5e7bb6eb9e832..6504372285f5a8 100644
--- a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/utils/I18n/Language.json
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/utils/I18n/Language.json
@@ -16,6 +16,7 @@
"activation-status": "Activation Status",
"active": "Active",
"active-subscriptions": "Active Subscriptions",
+ "activity-history": "Activity History",
"add-a-description-of-the-file-related-to-this-ticket": "Add a description of the file related to this ticket.",
"add-activation-key": "Add Activation Key",
"add-another-admin": "Add Another Admin",
@@ -70,6 +71,7 @@
"authenticated-logins-malus": "Authenticated Logins (MALU's)",
"available": "available",
"available-x-of-x": "available: {0} of {1}",
+ "back-to-business-events": "Back to Business Events",
"backup": "Backup",
"be-aware-that-adding-new-users-from-outside-your-organization-may-compromise-the-security-of-your-project": "Be aware that adding new users from outside your organization may compromise the security of your project",
"belgium": "Belgium",
@@ -121,6 +123,7 @@
"csp": "CSP",
"csp-up-to-10-k-users": "CSP - Up to 10K Users",
"current": "Current",
+ "current-version": "Current Version",
"dammam-saudi-arabia": "Dammam, Saudi Arabia",
"danger": "Danger",
"data-center-location": "Data Center Location",
@@ -173,6 +176,7 @@
"dxp-unlimited-enterprise-wide": "DXP Unlimited Enterprise-Wide",
"edit": "Edit",
"edit-event": "Edit Event",
+ "edit-event-details": "Edit Event Details",
"email": "Email",
"email-domain-not-allowed": "Email domain not allowed.",
"enable-notifications-through-email-when-this-activation-key-is-about-to-expire-x-days-before-x-days-before-and-on-the-day-of-expiration-you-can-unsubscribe-at-any-time": "Enable notifications through email when this Activation Key is about to expire {0} days before, {1} days before, and on the day of expiration. You can unsubscribe at any time.",
@@ -193,6 +197,7 @@
"error": "Error",
"error-fetching-high-priority-contacts": "Error fetching high priority contacts",
"error-high-priority-contacts": "Error high priority contacts",
+ "event-details": "Event Details",
"event-name": "Event Name",
"event-status": "Event Status",
"event-type": "Event Type",
@@ -343,10 +348,12 @@
"name-this-environment-this-cannot-be-edited-later": "Name this environment. This cannot be edited later.",
"need-more-project-resources": "Need more project resources?",
"netherlands": "Netherlands",
+ "new-version": "New version",
"newest": "Newest",
"next": "Next",
"no-activation-keys-found-with-this-search-criteria": "No activation keys found with this search criteria.",
"no-attachments-yet": "No Attachments Yet",
+ "no-data-found": "No data found",
"no-projects-match-that-name": "No projects match that name",
"no-projects-match-these-criteria": "No projects match these criteria.",
"no-subscriptions-match-these-criteria": "No subscriptions match these criteria.",
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/utils/types.ts b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/utils/types.ts
index 48633a0b0639ed..c454fdac97a99d 100644
--- a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/utils/types.ts
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-custom-element/src/utils/types.ts
@@ -23,6 +23,18 @@ export interface IAccountSubscriptionGroup {
name?: string;
}
+export interface IBusinessEvent {
+ associatedTickets?: any;
+ currentLiferayVersion?: {name: string};
+ details?: string;
+ eventStatus?: {name: string};
+ eventType?: {name: string};
+ id?: number;
+ name?: string;
+ newLiferayVersion?: {name: string};
+ targetGoLiveDateTime?: Date | string;
+}
+
export interface IKoroneikiAccount {
accountKey: string;
code: string;
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/AccountBusinessEventsRestController.java b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/AccountBusinessEventsRestController.java
new file mode 100644
index 00000000000000..9d8de425ca7747
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/AccountBusinessEventsRestController.java
@@ -0,0 +1,215 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+package com.liferay.customer;
+
+import com.liferay.client.extension.util.spring.boot3.BaseRestController;
+import com.liferay.customer.constants.ExternalLinkConstants;
+import com.liferay.customer.service.KoroneikiService;
+import com.liferay.osb.koroneiki.phloem.rest.client.dto.v1_0.ExternalLink;
+import com.liferay.osb.spring.boot.client.zendesk.model.ZendeskTicket;
+import com.liferay.osb.spring.boot.client.zendesk.search.SearchHits;
+import com.liferay.osb.spring.boot.client.zendesk.search.ZendeskTicketQuery;
+import com.liferay.osb.spring.boot.client.zendesk.service.ZendeskService;
+import com.liferay.portal.kernel.util.ArrayUtil;
+import com.liferay.portal.kernel.util.GetterUtil;
+import com.liferay.portal.kernel.util.StringUtil;
+import com.liferay.portal.kernel.util.Validator;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Jenny Chen
+ */
+@RestController
+public class AccountBusinessEventsRestController extends BaseRestController {
+
+ @RequestMapping(
+ method = RequestMethod.POST,
+ path = "/accounts/{externalReferenceCode}/business-events"
+ )
+ public ResponseEntity post(
+ @PathVariable("externalReferenceCode") String externalReferenceCode,
+ @RequestBody String json)
+ throws Exception {
+
+ try {
+ JSONObject jsonObject = new JSONObject(json);
+
+ JSONArray jsonArray = jsonObject.getJSONArray("businessEvents");
+
+ _updateZendesk(
+ _fetchZendeskOrganizationId(externalReferenceCode),
+ _getBusinessEvents(jsonArray),
+ _getImpactedZendeskTicketIds(jsonArray));
+
+ return new ResponseEntity<>(HttpStatus.OK);
+ }
+ catch (Exception exception) {
+ _log.error(
+ "Unable to update Zendesk business events for " +
+ externalReferenceCode,
+ exception);
+
+ return new ResponseEntity(
+ exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+ }
+
+ private long _fetchZendeskOrganizationId(String externalReferenceCode)
+ throws Exception {
+
+ List externalLinks = _koroneikiService.fetchExternalLinks(
+ externalReferenceCode, 1, 1000);
+
+ for (ExternalLink externalLink : externalLinks) {
+ String domain = externalLink.getDomain();
+ String entityName = externalLink.getEntityName();
+
+ if (domain.equals(ExternalLinkConstants.DOMAIN_ZENDESK) &&
+ entityName.equals(
+ ExternalLinkConstants.ENTITY_NAME_ZENDESK_ORGANIZATION)) {
+
+ return GetterUtil.getLong(externalLink.getEntityId());
+ }
+ }
+
+ return 0;
+ }
+
+ private String _getBusinessEvents(JSONArray jsonArray) {
+ List businessEvents = new ArrayList<>();
+
+ for (int i = 0; i < jsonArray.length(); i++) {
+ JSONObject jsonObject = jsonArray.getJSONObject(i);
+
+ List businessEventFieldValues = new ArrayList<>();
+
+ Iterator iterator = jsonObject.keys();
+
+ while (iterator.hasNext()) {
+ String key = iterator.next();
+
+ if (key.equals("impactedZendeskTicketIds")) {
+ continue;
+ }
+
+ if (Validator.isNotNull(jsonObject.optString(key))) {
+ businessEventFieldValues.add(
+ key + ": " + jsonObject.getString(key));
+ }
+ }
+
+ if (!businessEventFieldValues.isEmpty()) {
+ businessEvents.add(
+ StringUtil.merge(businessEventFieldValues, ",\n"));
+ }
+ }
+
+ return StringUtil.merge(businessEvents, "\n\n");
+ }
+
+ private Long[] _getImpactedZendeskTicketIds(JSONArray jsonArray) {
+ Set zendeskTicketIds = new HashSet<>();
+
+ for (int i = 0; i < jsonArray.length(); i++) {
+ JSONObject jsonObject = jsonArray.getJSONObject(i);
+
+ JSONArray impactedZendeskTicketIdsJSONArray =
+ jsonObject.getJSONArray("impactedZendeskTicketIds");
+
+ for (int j = 0; j < impactedZendeskTicketIdsJSONArray.length();
+ j++) {
+
+ zendeskTicketIds.add(
+ impactedZendeskTicketIdsJSONArray.getLong(j));
+ }
+ }
+
+ return zendeskTicketIds.toArray(new Long[0]);
+ }
+
+ private void _updateZendesk(
+ long zendeskOrganizationId, String businessEvents,
+ Long[] impactedZendeskTicketIds)
+ throws Exception {
+
+ _zendeskService.updateZendeskOrganization(
+ zendeskOrganizationId, businessEvents);
+
+ ZendeskTicketQuery zendeskTicketQuery = new ZendeskTicketQuery();
+
+ zendeskTicketQuery.addCriterion(
+ "organization:" + zendeskOrganizationId);
+ zendeskTicketQuery.addCriterion("status 0) {
+ zendeskTicketQuery.setPage(page);
+
+ SearchHits searchHits = _zendeskService.search(
+ zendeskTicketQuery);
+
+ for (ZendeskTicket zendeskTicket : searchHits.getResults()) {
+ Map customFields =
+ zendeskTicket.getCustomFields();
+
+ customFields.put(
+ _zendeskBusinessEventTicketFieldId, businessEvents);
+
+ Set tags = zendeskTicket.getTags();
+
+ if (ArrayUtil.contains(
+ impactedZendeskTicketIds,
+ zendeskTicket.getZendeskTicketId())) {
+
+ tags.add("impacting_business_event");
+ }
+
+ _zendeskService.updateZendeskTicket(
+ zendeskTicket.getZendeskTicketId(), zendeskOrganizationId,
+ zendeskTicket.getRequesterId(), zendeskTicket.getStatus(),
+ customFields, tags);
+ }
+
+ page = searchHits.getNextPage();
+ }
+ }
+
+ private static final Log _log = LogFactory.getLog(
+ AccountBusinessEventsRestController.class);
+
+ @Autowired
+ private KoroneikiService _koroneikiService;
+
+ @Value("${liferay.customer.zendesk.business.event.ticket.field.id}")
+ private long _zendeskBusinessEventTicketFieldId;
+
+ @Autowired
+ private ZendeskService _zendeskService;
+
+}
\ No newline at end of file
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/AccountTicketsRestController.java b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/AccountTicketsRestController.java
new file mode 100644
index 00000000000000..f5d1523d02f4af
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/AccountTicketsRestController.java
@@ -0,0 +1,147 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+package com.liferay.customer;
+
+import com.liferay.client.extension.util.spring.boot3.BaseRestController;
+import com.liferay.customer.constants.ExternalLinkConstants;
+import com.liferay.customer.service.KoroneikiService;
+import com.liferay.osb.koroneiki.phloem.rest.client.dto.v1_0.ExternalLink;
+import com.liferay.osb.spring.boot.client.zendesk.model.ZendeskTicket;
+import com.liferay.osb.spring.boot.client.zendesk.search.SearchHits;
+import com.liferay.osb.spring.boot.client.zendesk.search.ZendeskTicketQuery;
+import com.liferay.osb.spring.boot.client.zendesk.service.ZendeskService;
+import com.liferay.portal.kernel.security.auth.PrincipalException;
+import com.liferay.portal.kernel.util.GetterUtil;
+
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Jenny Chen
+ */
+@RestController
+public class AccountTicketsRestController extends BaseRestController {
+
+ @RequestMapping(
+ method = RequestMethod.GET,
+ path = "/accounts/{externalReferenceCode}/tickets/{ticketId}"
+ )
+ public ResponseEntity getZendeskTicket(
+ @PathVariable("externalReferenceCode") String externalReferenceCode,
+ @PathVariable("ticketId") long ticketId)
+ throws Exception {
+
+ try {
+ long zendeskOrganizationId = _fetchZendeskOrganizationId(
+ externalReferenceCode);
+ ZendeskTicket zendeskTicket = _zendeskService.getZendeskTicket(
+ ticketId);
+
+ if (zendeskOrganizationId !=
+ zendeskTicket.getZendeskOrganizationId()) {
+
+ throw new PrincipalException();
+ }
+
+ JSONObject jsonObject = zendeskTicket.toJSONObject();
+
+ return new ResponseEntity<>(jsonObject.toString(), HttpStatus.OK);
+ }
+ catch (Exception exception) {
+ _log.error(exception, exception);
+
+ return new ResponseEntity(
+ exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+ }
+
+ @RequestMapping(
+ method = RequestMethod.GET,
+ path = "/accounts/{externalReferenceCode}/tickets"
+ )
+ public ResponseEntity getZendeskTickets(
+ @PathVariable("externalReferenceCode") String externalReferenceCode)
+ throws Exception {
+
+ try {
+ ZendeskTicketQuery zendeskTicketQuery = new ZendeskTicketQuery();
+
+ zendeskTicketQuery.addCriterion(
+ "organization:" +
+ _fetchZendeskOrganizationId(externalReferenceCode));
+ zendeskTicketQuery.addCriterion("status 0) {
+ zendeskTicketQuery.setPage(page);
+
+ SearchHits searchHits = _zendeskService.search(
+ zendeskTicketQuery);
+
+ for (ZendeskTicket zendeskTicket : searchHits.getResults()) {
+ jsonArray.put(zendeskTicket.toJSONObject());
+ }
+
+ page = searchHits.getNextPage();
+ }
+
+ return new ResponseEntity<>(jsonArray.toString(), HttpStatus.OK);
+ }
+ catch (Exception exception) {
+ _log.error(exception, exception);
+
+ return new ResponseEntity(
+ exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+ }
+
+ private long _fetchZendeskOrganizationId(String externalReferenceCode)
+ throws Exception {
+
+ List externalLinks = _koroneikiService.fetchExternalLinks(
+ externalReferenceCode, 1, 1000);
+
+ for (ExternalLink externalLink : externalLinks) {
+ String domain = externalLink.getDomain();
+ String entityName = externalLink.getEntityName();
+
+ if (domain.equals(ExternalLinkConstants.DOMAIN_ZENDESK) &&
+ entityName.equals(
+ ExternalLinkConstants.ENTITY_NAME_ZENDESK_ORGANIZATION)) {
+
+ return GetterUtil.getLong(externalLink.getEntityId());
+ }
+ }
+
+ return 0;
+ }
+
+ private static final Log _log = LogFactory.getLog(
+ AccountTicketsRestController.class);
+
+ @Autowired
+ private KoroneikiService _koroneikiService;
+
+ @Autowired
+ private ZendeskService _zendeskService;
+
+}
\ No newline at end of file
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/CacheConfiguration.java b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/CacheConfiguration.java
index 92bd96f24e05fe..d78dffc2fabb97 100644
--- a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/CacheConfiguration.java
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/CacheConfiguration.java
@@ -21,8 +21,8 @@ public class CacheConfiguration {
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager(
- "accountUsage", "affectedVersions", "issue", "issues",
- "productPurchases");
+ "accountUsage", "affectedVersions", "externalLinks", "issue",
+ "issues", "productPurchases");
caffeineCacheManager.setCaffeine(
Caffeine.newBuilder(
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/constants/ExternalLinkConstants.java b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/constants/ExternalLinkConstants.java
new file mode 100644
index 00000000000000..a268626263f5e6
--- /dev/null
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/constants/ExternalLinkConstants.java
@@ -0,0 +1,18 @@
+/**
+ * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
+ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
+ */
+
+package com.liferay.customer.constants;
+
+/**
+ * @author Jenny Chen
+ */
+public class ExternalLinkConstants {
+
+ public static final String DOMAIN_ZENDESK = "zendesk";
+
+ public static final String ENTITY_NAME_ZENDESK_ORGANIZATION =
+ "organization";
+
+}
\ No newline at end of file
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/service/KoroneikiService.java b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/service/KoroneikiService.java
index f9ac3a9c8f4483..0347bc92d64faa 100644
--- a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/service/KoroneikiService.java
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/java/com/liferay/customer/service/KoroneikiService.java
@@ -5,9 +5,11 @@
package com.liferay.customer.service;
+import com.liferay.osb.koroneiki.phloem.rest.client.dto.v1_0.ExternalLink;
import com.liferay.osb.koroneiki.phloem.rest.client.dto.v1_0.ProductPurchase;
import com.liferay.osb.koroneiki.phloem.rest.client.pagination.Page;
import com.liferay.osb.koroneiki.phloem.rest.client.pagination.Pagination;
+import com.liferay.osb.koroneiki.phloem.rest.client.resource.v1_0.ExternalLinkResource;
import com.liferay.osb.koroneiki.phloem.rest.client.resource.v1_0.ProductPurchaseResource;
import com.liferay.petra.string.StringPool;
@@ -29,11 +31,39 @@
@Component
public class KoroneikiService {
- @CacheEvict(allEntries = true, value = "productPurchases")
+ @CacheEvict(
+ allEntries = true, value = {"externalLinks", "productPurchases"}
+ )
@Scheduled(cron = "0 0 * * * *")
public void cacheEvict() throws Exception {
}
+ @Cacheable("externalLinks")
+ public List fetchExternalLinks(
+ String accountKey, int page, int pageSize)
+ throws Exception {
+
+ ExternalLinkResource externalLinkResource =
+ ExternalLinkResource.builder(
+ ).header(
+ "API_TOKEN", _koroneikiAuthToken
+ ).endpoint(
+ new URL(_koroneikiURL)
+ ).build();
+
+ Page externalLinkPage =
+ externalLinkResource.getAccountAccountKeyExternalLinksPage(
+ accountKey, Pagination.of(page, pageSize));
+
+ if ((externalLinkPage != null) &&
+ (externalLinkPage.getItems() != null)) {
+
+ return new ArrayList<>(externalLinkPage.getItems());
+ }
+
+ return Collections.emptyList();
+ }
+
@Cacheable("productPurchases")
public List searchProductPurchases(
String filterString, int page, int pageSize, String sortString)
diff --git a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/resources/application-default.properties b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/resources/application-default.properties
index cc15c3c0d62a53..a11aee64ffcdf3 100644
--- a/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/resources/application-default.properties
+++ b/workspaces/liferay-customer-workspace/client-extensions/liferay-customer-etc-spring-boot/src/main/resources/application-default.properties
@@ -26,6 +26,7 @@ liferay.customer.jira.security.vulnerability.project=LSV
liferay.customer.jira.url=${LIFERAY_CUSTOMER_JIRA_URL}
liferay.customer.koroneiki.auth.token=${LIFERAY_CUSTOMER_KORONEIKI_AUTH_TOKEN}
liferay.customer.koroneiki.url=${LIFERAY_CUSTOMER_KORONEIKI_URL}
+liferay.customer.zendesk.business.event.ticket.field.id=${LIFERAY_CUSTOMER_ZENDESK_BUSINESS_EVENT_TICKET_FIELD_ID}
liferay.osb.spring.boot.client.zendesk.api.email.address=${LIFERAY_OSB_SPRING_BOOT_CLIENT_ZENDESK_API_EMAIL_ADDRESS}
liferay.osb.spring.boot.client.zendesk.api.token=${LIFERAY_OSB_SPRING_BOOT_CLIENT_ZENDESK_API_TOKEN}
liferay.osb.spring.boot.client.zendesk.url=${LIFERAY_OSB_SPRING_BOOT_CLIENT_ZENDESK_URL}
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/certifications-details/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/certifications-details/display-page-template.json
new file mode 100644
index 00000000000000..45225b6b30c7eb
--- /dev/null
+++ b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/certifications-details/display-page-template.json
@@ -0,0 +1,9 @@
+{
+ "contentSubtype": {
+ "subtypeKey": "P2S3_CERTIFICATION"
+ },
+ "contentType": {
+ "className": "com.liferay.object.model.ObjectDefinition#[$OBJECT_DEFINITION_ID:P2S3Certification$]"
+ },
+ "name": "Certifications Details"
+}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/certifications-details/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/certifications-details/page-definition.json
new file mode 100644
index 00000000000000..02b68544ddcb1c
--- /dev/null
+++ b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/certifications-details/page-definition.json
@@ -0,0 +1,349 @@
+{
+ "pageElement": {
+ "id": "7dac487c-1cca-6bdf-12f5-a5a9590ef97b",
+ "pageElements": [
+ {
+ "definition": {
+ "customCSS": ".[$FRAGMENT_CLASS$] {\n}",
+ "fragmentStyle": {
+ "borderRadius": "20px",
+ "fontFamily": "\"Source Sans 3\", system-ui",
+ "hidden": true,
+ "paddingBottom": "4",
+ "paddingLeft": "16px",
+ "paddingRight": "16px",
+ "paddingTop": "4",
+ "width": "100%"
+ },
+ "indexed": true,
+ "layout": {
+ "paddingBottom": 2,
+ "paddingTop": 2
+ },
+ "name": "Header Container"
+ },
+ "id": "2b511e7c-d7cd-6426-5b18-bf5f3c090f1b",
+ "pageElements": [
+ {
+ "definition": {
+ "customCSS": ".[$FRAGMENT_CLASS$] {\nbackground: linear-gradient(91.07deg, #001742 0%, #0011A8 24.6%, #0B5FFF 49%, #0B5FFF 74.5%, #0B5FFF 100%),\nradial-gradient(26.56% 43.82% at 0% 0%, #00256B 20.83%, rgba(0, 37, 107, 0) 100%) /* warning: gradient uses a rotation that is not supported by CSS and may not behave as expected */,\nradial-gradient(14.55% 34.6% at 100% 34.6%, rgba(55, 124, 255, 0.68) 0%, rgba(55, 124, 255, 0) 100%);\n\n}",
+ "fragmentStyle": {
+ "borderRadius": "10px",
+ "height": "216px"
+ },
+ "indexed": true,
+ "layout": {
+ "contentDisplay": "FlexRow",
+ "justify": "SpaceBetween"
+ },
+ "name": "Header Banner"
+ },
+ "id": "05bac50a-0416-f633-7b53-62f2be687410",
+ "pageElements": [
+ {
+ "definition": {
+ "customCSS": ".[$FRAGMENT_CLASS$] {\n @media(max-width: 799px) {\n h1 {\n \tfont-size: 1.6rem;\n }\n\t}\n \n @media(max-width: 651px) {\n h1 {\n \tfont-size: 1.3rem;\n }\n }\n}",
+ "fragmentStyle": {
+ "maxHeight": "216px",
+ "paddingBottom": "4",
+ "paddingLeft": "4",
+ "paddingRight": "4",
+ "paddingTop": "4",
+ "width": "100%"
+ },
+ "indexed": true,
+ "layout": {
+ "paddingBottom": 2,
+ "paddingLeft": 2,
+ "paddingRight": 2,
+ "paddingTop": 2
+ },
+ "name": "Header Content"
+ },
+ "id": "a3e8afe8-52bb-96c0-c491-ab7adf77fd93",
+ "pageElements": [
+ {
+ "definition": {
+ "fragmentStyle": {
+ "backgroundColor": "#F7F6F9",
+ "borderRadius": "50rem",
+ "height": "40px",
+ "marginBottom": "2rem",
+ "width": "165px"
+ },
+ "indexed": true,
+ "layout": {
+ "align": "Center",
+ "contentDisplay": "FlexRow",
+ "justify": "Center"
+ },
+ "name": "Assessment Tag"
+ },
+ "id": "92cca0ac-ea69-2055-84a8-76b6bc8267db",
+ "pageElements": [
+ {
+ "definition": {
+ "fragment": {
+ "key": "BASIC_COMPONENT-image"
+ },
+ "fragmentConfig": {
+ "imageSize": "w-0"
+ },
+ "fragmentFields": [
+ {
+ "id": "image-square",
+ "value": {
+ "fragmentImage": {
+ "description": {
+ "value_i18n": {
+ "en_US": ""
+ }
+ },
+ "url": {
+ "value_i18n": {
+ "en_US": "/documents/d/guest/clip-path-group-png?imagePreview=1"
+ }
+ }
+ },
+ "fragmentLink": {
+ }
+ }
+ }
+ ],
+ "fragmentStyle": {
+ "marginRight": "1"
+ },
+ "indexed": true
+ },
+ "id": "ee7edc7f-c7e8-9c53-4f39-ad6cf3957df3",
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "fragment": {
+ "key": "dialect-text",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ "textType": "h5",
+ "truncateText": false
+ },
+ "fragmentFields": [
+ {
+ "id": "element-text",
+ "value": {
+ "fragmentLink": {
+ },
+ "text": {
+ "value_i18n": {
+ "en_US": "Certification"
+ }
+ }
+ }
+ }
+ ],
+ "fragmentStyle": {
+ "fontWeight": "600",
+ "textColor": "#0B5FFF"
+ },
+ "indexed": true
+ },
+ "id": "cc71ca07-9f86-f93e-0f4f-38471dc66041",
+ "type": "Fragment"
+ }
+ ],
+ "type": "Section"
+ },
+ {
+ "definition": {
+ "cssClasses": [
+ "title-banner"
+ ],
+ "fragment": {
+ "key": "dialect-text",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ "textType": "h1",
+ "truncateText": false
+ },
+ "fragmentFields": [
+ {
+ "id": "element-text",
+ "value": {
+ "fragmentLink": {
+ },
+ "text": {
+ "mapping": {
+ "fieldKey": "ObjectField_title",
+ "itemReference": {
+ "contextSource": "DisplayPageItem"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "fragmentStyle": {
+ "fontWeight": "700",
+ "paddingBottom": "32px",
+ "textColor": "#FFFFFF"
+ },
+ "indexed": true
+ },
+ "id": "1eebb4de-8a5a-5ea3-b994-c75e7d88125a",
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "cssClasses": [
+ "course-info-tag"
+ ],
+ "fragmentStyle": {
+ "backgroundColor": "#E6EBF5",
+ "borderRadius": "4px",
+ "height": "24px",
+ "paddingBottom": "2",
+ "paddingTop": "2",
+ "textColor": "#1C3667",
+ "width": "105px"
+ },
+ "indexed": true,
+ "layout": {
+ "align": "Center",
+ "contentDisplay": "FlexRow",
+ "justify": "Center"
+ },
+ "name": "Tag Persona"
+ },
+ "id": "62f98900-c461-4740-626f-a0c7f56744ef",
+ "pageElements": [
+ {
+ "definition": {
+ "cssClasses": [
+ "card-tag__persona"
+ ],
+ "fragment": {
+ "key": "dialect-text",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ "textType": "text-paragraph-sm",
+ "truncateText": false
+ },
+ "fragmentFields": [
+ {
+ "id": "element-text",
+ "value": {
+ "fragmentLink": {
+ },
+ "text": {
+ "mapping": {
+ "fieldKey": "ObjectField_persona",
+ "itemReference": {
+ "contextSource": "DisplayPageItem"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "indexed": true
+ },
+ "id": "45fdcb3f-5fe2-cb87-6665-652ac75ed906",
+ "type": "Fragment"
+ }
+ ],
+ "type": "Section"
+ }
+ ],
+ "type": "Section"
+ },
+ {
+ "definition": {
+ "customCSS": ".[$FRAGMENT_CLASS$] {\n position: relative;\n overflow: hidden;\n}",
+ "fragment": {
+ "key": "BASIC_COMPONENT-image"
+ },
+ "fragmentConfig": {
+ "imageSize": "w-0"
+ },
+ "fragmentFields": [
+ {
+ "id": "image-square",
+ "value": {
+ "fragmentImage": {
+ "description": {
+ "value_i18n": {
+ "en_US": ""
+ }
+ },
+ "url": {
+ "value_i18n": {
+ "en_US": "/documents/d/guest/waves-svg?imagePreview=1"
+ }
+ }
+ },
+ "fragmentLink": {
+ }
+ }
+ }
+ ],
+ "indexed": true
+ },
+ "id": "84116938-93e4-7ba2-d52e-905ab5fd52db",
+ "type": "Fragment"
+ }
+ ],
+ "type": "Section"
+ }
+ ],
+ "type": "Section"
+ },
+ {
+ "definition": {
+ "fragmentStyle": {
+ "width": "100%"
+ },
+ "indexed": true,
+ "layout": {
+ }
+ },
+ "id": "27f40d9f-5a8f-ffab-ab85-968e937ba444",
+ "pageElements": [
+ {
+ "definition": {
+ "fragmentStyle": {
+ "marginLeft": "auto",
+ "marginRight": "auto",
+ "maxWidth": " var(--container-max-xl);"
+ },
+ "widgetInstance": {
+ "widgetConfig": {
+ },
+ "widgetName": "com_liferay_client_extension_web_internal_portlet_ClientExtensionEntryPortlet_84997331558403_LXC_liferay_lms_certifications_details"
+ }
+ },
+ "type": "Widget"
+ }
+ ],
+ "type": "Section"
+ }
+ ],
+ "type": "Root"
+ },
+ "settings": {
+ "colorSchemeName": "01",
+ "masterPage": {
+ "key": "liferay-learn"
+ },
+ "themeName": "Dialect",
+ "themeSettings": {
+ "lfr-theme:regular:show-footer": "false",
+ "lfr-theme:regular:show-header": "false",
+ "lfr-theme:regular:show-header-search": "false",
+ "lfr-theme:regular:wrap-widget-page-content": "false"
+ }
+ },
+ "version": 1.1
+}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-category/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-category/display-page-template.json
deleted file mode 100644
index e0a6489c32b014..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-category/display-page-template.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "contentType": {
- "className": "com.liferay.asset.kernel.model.AssetCategory"
- },
- "defaultTemplate": true,
- "name": "Learn Category"
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-category/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-category/page-definition.json
deleted file mode 100644
index 2801e1bbf8e8cc..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-category/page-definition.json
+++ /dev/null
@@ -1,398 +0,0 @@
-{
- "pageElement": {
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nbackground: linear-gradient(180deg, #00256C 0%, #6399FF 100%);\n}",
- "indexed": true,
- "layout": {
- }
- },
- "pageElements": [
- {
- "definition": {
- "fragmentStyle": {
- "textColor": "colorNeutral0"
- },
- "indexed": true,
- "layout": {
- "widthType": "Fixed"
- }
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "text-paragraph-lg",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "AssetCategory_vocabulary",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "backgroundColor": ""
- },
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow"
- }
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-image"
- },
- "fragmentConfig": {
- "imageSize": "w-100"
- },
- "fragmentFields": [
- {
- "id": "image-square",
- "value": {
- "fragmentImage": {
- "url": {
- "mapping": {
- "fieldKey": "AssetCategory_mainImage",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- },
- "fragmentLink": {
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "h1",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "AssetCategory_name",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "backgroundColor": ""
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "fragmentStyle": {
- "maxWidth": "var(--container-max-lg)"
- },
- "indexed": true,
- "layout": {
- "widthType": "Fixed"
- }
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "text-paragraph-lg",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "AssetCategory_description",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "backgroundColor": ""
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\ngap: var(--spacer-4);\n}",
- "fragmentStyle": {
- "textAlign": "center"
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "widthType": "Fixed"
- }
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nflex: 0 0 300px;\n}",
- "fragmentStyle": {
- "maxWidth": "300px"
- },
- "indexed": true,
- "layout": {
- "widthType": "Fixed"
- }
- },
- "pageElements": [
- {
- "definition": {
- "fragmentStyle": {
- "backgroundColor": "colorNeutral1",
- "marginBottom": "4",
- "paddingBottom": "3",
- "paddingLeft": "3",
- "paddingRight": "3",
- "paddingTop": "3"
- },
- "indexed": true,
- "layout": {
- "marginBottom": 2,
- "paddingBottom": 1,
- "paddingLeft": 1,
- "paddingRight": 1,
- "paddingTop": 1
- }
- },
- "pageElements": [
- {
- "definition": {
- "widgetInstance": {
- "widgetConfig": {
- "displayStyle": "default",
- "fields": "[{\"field\": \"\", \"label\": \"relevance\"}, {\"field\": \"title+\", \"label\": \"Alphabetical (A-Z)\"}, {\"field\": \"title-\", \"label\": \"Alphabetical (Z-A)\"}, {\"field\": \"publishedDate-\", \"label\": \"published-date\"}]"
- },
- "widgetName": "com_liferay_portal_search_web_internal_sort_portlet_SortPortlet"
- }
- },
- "type": "Widget"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "fragmentStyle": {
- "backgroundColor": "colorNeutral1",
- "marginBottom": "4",
- "paddingBottom": "3",
- "paddingLeft": "3",
- "paddingRight": "3",
- "paddingTop": "3"
- },
- "indexed": true,
- "layout": {
- "marginBottom": 2,
- "paddingBottom": 1,
- "paddingLeft": 1,
- "paddingRight": 1,
- "paddingTop": 1
- }
- },
- "pageElements": [
- {
- "definition": {
- "widgetInstance": {
- "widgetConfig": {
- "displayStyle": "ddmTemplate_LEARN_SEARCH_CATEGORY_FACET",
- "frequenciesVisible": "false",
- "frequencyThreshold": "1",
- "maxTerms": "100",
- "order": "key:asc",
- "parameterName": "feature",
- "vocabularyIds": "[$TAXONOMY_VOCABULARY_ID:Feature$]"
- },
- "widgetName": "com_liferay_portal_search_web_category_facet_portlet_CategoryFacetPortlet"
- }
- },
- "type": "Widget"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "fragmentStyle": {
- "backgroundColor": "colorNeutral1",
- "marginBottom": "4",
- "paddingBottom": "3",
- "paddingLeft": "3",
- "paddingRight": "3",
- "paddingTop": "3"
- },
- "indexed": true,
- "layout": {
- "marginBottom": 2,
- "paddingBottom": 1,
- "paddingLeft": 1,
- "paddingRight": 1,
- "paddingTop": 1
- }
- },
- "pageElements": [
- {
- "definition": {
- "widgetInstance": {
- "widgetConfig": {
- "displayStyle": "ddmTemplate_LEARN_SEARCH_CATEGORY_FACET",
- "frequenciesVisible": "false",
- "frequencyThreshold": "1",
- "maxTerms": "100",
- "order": "key:asc",
- "parameterName": "deployment-approach",
- "vocabularyIds": "[$TAXONOMY_VOCABULARY_ID:Deployment Approach$]"
- },
- "widgetName": "com_liferay_portal_search_web_category_facet_portlet_CategoryFacetPortlet"
- }
- },
- "type": "Widget"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "fragmentStyle": {
- "width": "100%"
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "justify": "Center",
- "widthType": "Fixed"
- }
- },
- "pageElements": [
- {
- "definition": {
- "fragmentStyle": {
- "maxWidth": "var(--container-max-lg)",
- "width": "100%"
- },
- "indexed": true,
- "layout": {
- }
- },
- "pageElements": [
- {
- "definition": {
- "widgetInstance": {
- "widgetConfig": {
- },
- "widgetName": "com_liferay_portal_search_web_search_results_portlet_SearchResultsPortlet"
- }
- },
- "type": "Widget"
- },
- {
- "definition": {
- "fragmentStyle": {
- "hidden": true
- },
- "widgetInstance": {
- "widgetConfig": {
- "allowEmptySearches": "true",
- "basicFacetSelection": "false",
- "federatedSearchKey": ""
- },
- "widgetName": "com_liferay_portal_search_web_search_options_portlet_SearchOptionsPortlet"
- }
- },
- "type": "Widget"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Root"
- },
- "settings": {
- "masterPage": {
- "key": "liferay-learn"
- }
- },
- "version": 1.0
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-congratulations/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-congratulations/display-page-template.json
deleted file mode 100644
index d3ffea6e75a973..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-congratulations/display-page-template.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "contentSubtype": {
- "subtypeKey": "LEARN-COURSE"
- },
- "contentType": {
- "className": "com.liferay.journal.model.JournalArticle"
- },
- "name": "Learn Course Congratulations"
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-congratulations/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-congratulations/page-definition.json
deleted file mode 100644
index 95f5e395371df6..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-congratulations/page-definition.json
+++ /dev/null
@@ -1,712 +0,0 @@
-{
- "pageElement": {
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\n}",
- "customCSSViewports": [
- {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\nflex-wrap: wrap;\n}",
- "id": "landscapeMobile"
- }
- ],
- "fragmentStyle": {
- "paddingBottom": "4",
- "paddingLeft": "4",
- "paddingRight": "4",
- "paddingTop": "4"
- },
- "indexed": true,
- "layout": {
- "paddingBottom": 2,
- "paddingLeft": 2,
- "paddingRight": 2,
- "paddingTop": 2,
- "widthType": "Fixed"
- },
- "name": "Header Container"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n background: linear-gradient(91.07deg, #001742 0%, #0011A8 24.6%, #0B5FFF 49%, #0B5FFF 74.5%, #0B5FFF 100%),\n radial-gradient(26.56% 43.82% at 0% 0%, #00256B 20.83%, rgba(0, 37, 107, 0) 100%) /* warning: gradient uses a rotation that is not supported by CSS and may not behave as expected */,\n radial-gradient(14.55% 34.6% at 100% 34.6%, rgba(55, 124, 255, 0.68) 0%, rgba(55, 124, 255, 0) 100%);\n}",
- "fragmentStyle": {
- "borderRadius": "borderRadiusLg",
- "height": "64px",
- "paddingBottom": "4",
- "paddingLeft": "4",
- "paddingRight": "4",
- "paddingTop": "4"
- },
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow",
- "justify": "SpaceBetween",
- "paddingBottom": 2,
- "paddingLeft": 2,
- "paddingRight": 2,
- "paddingTop": 2
- },
- "name": "Header Banner"
- },
- "pageElements": [
- {
- "definition": {
- "fragmentStyle": {
- "width": "100%"
- },
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow",
- "justify": "SpaceBetween"
- },
- "name": "Header Contents"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n gap: var(--spacer-3, 1rem);\n}",
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow"
- },
- "name": "Header Left-Side Contents"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n gap: 8px;\n}",
- "fragmentStyle": {
- "backgroundColor": "colorBrandPrimaryLighten6",
- "borderRadius": "999px",
- "borderWidth": "",
- "paddingBottom": "6px",
- "paddingLeft": "6px",
- "paddingRight": "20px",
- "paddingTop": "6px",
- "textColor": "colorBrandPrimary"
- },
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow",
- "justify": "Center"
- },
- "name": "Course Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-image"
- },
- "fragmentConfig": {
- "imageSize": "w-100"
- },
- "fragmentFields": [
- {
- "id": "image-square",
- "value": {
- "fragmentImage": {
- "url": {
- "value_i18n": {
- "en_US": "[$DOCUMENT_URL:/site-initializer/documents/group/icons/education_courses_blue.svg$]"
- }
- }
- },
- "fragmentLink": {
- }
- }
- }
- ],
- "fragmentStyle": {
- "height": "28px",
- "marginLeft": "1",
- "width": "28px"
- },
- "indexed": true,
- "name": "Course Icon"
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n\tfont-family: 'Source Sans 3';\n\tfont-size: 1rem;\n font-weight: 600;\n\tline-height: 1.5rem;\n}",
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "h5",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "value_i18n": {
- "en_US": "Course"
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "borderColor": "colorBrandPrimary",
- "fontSize": "24px",
- "fontWeight": "600",
- "textColor": "colorBrandPrimary"
- },
- "indexed": true,
- "name": "Course Text"
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "DDMStructure_course",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "fontSize": "1.5rem",
- "fontWeight": "700",
- "textColor": "colorBrandPrimaryLighten6"
- },
- "indexed": true,
- "name": "Course Description"
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n gap: 1rem;\n z-index: 1;\n \n .course-info-tag {\n color: var(--color-state-info-darken-2, #1C3667);\n background: var(--color-state-info-lighten-2, #E6EBF5);\n padding: 4px 8px;\n border-radius: 4px;\n }\n \n .card-tag__persona p::before {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-right: 4px; \n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzIyMzdfNDg1NSIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMiIgeT0iMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE2Ij4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMSAzLjk0MDY3QzExIDUuNTk3NTMgOS42NTY4NSA2Ljk0MDY3IDggNi45NDA2N0M2LjM0MzE1IDYuOTQwNjcgNSA1LjU5NzUzIDUgMy45NDA2N0M1IDIuMjgzODIgNi4zNDMxIDAuOTQwNjc0IDggMC45NDA2NzRDOS42NTY4NSAwLjk0MDY3NCAxMSAyLjI4MzgyIDExIDMuOTQwNjdMMTQgMTIuNDQwNkMxNCAxNS45NDA2IDIgMTUuOTQwNiAyIDEyLjQ0MDZDMiA2LjI1MzA4IDE0IDYuMzE1NTggMTQgMTIuNDQwNloiIGZpbGw9IiM2QjZDN0UiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzIyMzdfNDg1NSkiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiMxQzM2NjciLz4KPC9nPgo8L3N2Zz4K');\n background-size: cover;\n vertical-align: middle;\n }\n \n .card-tag__expertise p::before {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-right: 4px;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeT0iNy45OTgwNSIgd2lkdGg9IjQiIGhlaWdodD0iNiIgcng9IjEiIGZpbGw9IiMxQzM2NjciLz4KPHJlY3Qgb3BhY2l0eT0iMC41IiB4PSI2IiB5PSI0Ljk5ODA1IiB3aWR0aD0iNCIgaGVpZ2h0PSI5IiByeD0iMSIgZmlsbD0iIzFDMzY2NyIvPgo8cmVjdCBvcGFjaXR5PSIwLjUiIHg9IjEyIiB5PSIxLjk5ODA1IiB3aWR0aD0iNCIgaGVpZ2h0PSIxMiIgcng9IjEiIGZpbGw9IiMxQzM2NjciLz4KPC9zdmc+Cg==');\n background-size: cover;\n vertical-align: middle;\n }\n \n .card-tag__content-type p::after {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-left: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_150_2838' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='3' y='1' width='10' height='14'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.4004 6.99706H11V3.99401C11 0.0129299 5 -0.00892067 5 3.99401V6.99706H4.40039C3.51855 6.99706 3 7.71581 3 8.59704V13.4C3 14.2812 3.51855 15 4.40039 15H11.4004C12.2812 15 13 14.2812 13 13.4V8.59704C13 7.71581 12.2812 6.99706 11.4004 6.99706ZM6 3.99413C6 1.36913 10 1.34728 10 3.99413V6.99718H6V3.99413ZM7 13.0001H9V9.99706H7V13.0001Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_150_2838)'%3E%3Crect width='16' height='16' fill='%2354555F'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n \n .card-tag__time p::before {\n content: '';\n display: inline-block;\n width: 14px;\n height: 14px;\n margin-bottom: 2px;\n margin-right: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_2278_5196' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='0' y='0' width='16' height='16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13.6562 2.34375C12.1465 0.831299 10.1377 0 8 0C5.8623 0 3.85352 0.831299 2.34375 2.34375C0.831055 3.85315 0 5.86255 0 8C0 10.1375 0.831055 12.1469 2.34375 13.6562C3.85645 15.1687 5.8623 16 8 16C10.1377 16 12.1465 15.1687 13.6562 13.6562C15.1689 12.1438 16 10.1375 16 8C16 5.86255 15.1689 3.85315 13.6562 2.34375ZM8 14C4.69043 14 2 11.3093 2 8C2 4.69067 4.69043 2 8 2C11.3096 2 14 4.69067 14 8C14 11.3093 11.3096 14 8 14ZM6 11C5.87207 11 5.74316 10.95 5.64648 10.8531C5.4502 10.6594 5.4502 10.3406 5.64648 10.1469L7.14648 8.64685C7.05273 8.44995 7 8.2312 7 8C7 7.34692 7.41895 6.79065 8 6.58435V3.5C8 3.22498 8.22461 3 8.5 3C8.77441 3 9 3.22498 9 3.5V6.58435C9.58105 6.79065 10 7.34692 10 8C10 8.82812 9.32812 9.5 8.5 9.5C8.26855 9.5 8.0498 9.4469 7.85254 9.35315L6.35254 10.8531C6.25586 10.95 6.12793 11 6 11Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_2278_5196)'%3E%3Crect width='16' height='16' fill='%231C3667'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n}",
- "fragmentStyle": {
- "backgroundColor": ""
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "flexWrap": "Wrap"
- },
- "name": "Course Info Tags"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "course-info-tag"
- ],
- "customCSS": ".[$FRAGMENT_CLASS$] {\n \n .course-info-tag {\n color: var(--color-state-info-darken-2, #1C3667)\n background: var(--color-state-info-lighten-2, #E6EBF5);\n padding: 4px 8px;\n border-radius: 4px;\n }\n \n .card-tag__time p::before {\n content: '';\n display: inline-block;\n width: 14px;\n height: 14px;\n margin-bottom: 2px;\n margin-right: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_2278_5196' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='0' y='0' width='16' height='16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13.6562 2.34375C12.1465 0.831299 10.1377 0 8 0C5.8623 0 3.85352 0.831299 2.34375 2.34375C0.831055 3.85315 0 5.86255 0 8C0 10.1375 0.831055 12.1469 2.34375 13.6562C3.85645 15.1687 5.8623 16 8 16C10.1377 16 12.1465 15.1687 13.6562 13.6562C15.1689 12.1438 16 10.1375 16 8C16 5.86255 15.1689 3.85315 13.6562 2.34375ZM8 14C4.69043 14 2 11.3093 2 8C2 4.69067 4.69043 2 8 2C11.3096 2 14 4.69067 14 8C14 11.3093 11.3096 14 8 14ZM6 11C5.87207 11 5.74316 10.95 5.64648 10.8531C5.4502 10.6594 5.4502 10.3406 5.64648 10.1469L7.14648 8.64685C7.05273 8.44995 7 8.2312 7 8C7 7.34692 7.41895 6.79065 8 6.58435V3.5C8 3.22498 8.22461 3 8.5 3C8.77441 3 9 3.22498 9 3.5V6.58435C9.58105 6.79065 10 7.34692 10 8C10 8.82812 9.32812 9.5 8.5 9.5C8.26855 9.5 8.0498 9.4469 7.85254 9.35315L6.35254 10.8531C6.25586 10.95 6.12793 11 6 11Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_2278_5196)'%3E%3Crect width='16' height='16' fill='%231C3667'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n}\n",
- "indexed": true,
- "layout": {
- },
- "name": "Time Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "card-tag__time"
- ],
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "text-paragraph",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "DDMStructure_courseTime",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "textColor": "color-state-info-darken-2"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "cssClasses": [
- "course-info-tag"
- ],
- "indexed": true,
- "layout": {
- },
- "name": "Persona Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "card-tag__persona"
- ],
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "text-paragraph",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "DDMStructure_selectPersona",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "cssClasses": [
- "course-info-tag"
- ],
- "indexed": true,
- "layout": {
- },
- "name": "Expertise Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "card-tag__expertise"
- ],
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "_ddmTemplate_LEARN_COURSE_EXPERTISE",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "textColor": "color-state-info-darken-2"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "indexed": true,
- "layout": {
- },
- "name": "Waves Background"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n\tposition: absolute;\n\tright: 20px;\n\ttop: -36px;\n}",
- "fragment": {
- "key": "BASIC_COMPONENT-image"
- },
- "fragmentConfig": {
- "imageSize": "w-100"
- },
- "fragmentFields": [
- {
- "id": "image-square",
- "value": {
- "fragmentImage": {
- "url": {
- "value_i18n": {
- "en_US": "[$DOCUMENT_URL:/site-initializer/documents/group/vectors/waves.svg$]"
- }
- }
- },
- "fragmentLink": {
- }
- }
- }
- ],
- "indexed": true,
- "name": "Waves Image"
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\n}",
- "customCSSViewports": [
- {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\nflex-wrap: wrap;\n}",
- "id": "landscapeMobile"
- }
- ],
- "fragmentStyle": {
- "paddingBottom": "4",
- "paddingLeft": "4",
- "paddingRight": "4"
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "paddingBottom": 2,
- "paddingLeft": 2,
- "paddingRight": 2,
- "widthType": "Fixed"
- },
- "name": "Content Container"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n\theight: 100%;\n}",
- "fragmentStyle": {
- "backgroundColor": "colorNeutral1",
- "borderRadius": "borderRadiusLg",
- "marginRight": "4",
- "maxWidth": "320px",
- "minWidth": "320px",
- "paddingBottom": "1",
- "paddingLeft": "1",
- "paddingRight": "1",
- "paddingTop": "1",
- "width": "100%"
- },
- "indexed": true,
- "layout": {
- "marginRight": 2
- },
- "name": "Side Menu Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "_ddmTemplate_LEARN_COURSE_SIDE_NAV",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n.course-bottom-nav:hover {\n border: 2px solid white;\n cursor: pointer;\n outline: 2px solid var(--color-brand-primary-lighten-2, #6399ff);\n}\n \n .course-bottom-nav {\n background-image: url('[$DOCUMENT_URL:/site-initializer/documents/group/vectors/waves_sm.svg$]');\n background-repeat: no-repeat;\n background-position: calc(100% + 60px) center;\n background-size: 220px 220px;\n }\n \n}",
- "indexed": true,
- "layout": {
- "widthType": "Fixed"
- },
- "name": "Main Content Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-heading"
- },
- "fragmentConfig": {
- "headingLevel": "h2"
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "value_i18n": {
- "en_US": "Congratulations! You've Completed the Course"
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "fragmentStyle": {
- "height": "338px",
- "marginTop": "4",
- "width": "763px"
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "justify": "Center",
- "marginTop": 2
- },
- "name": "Image Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-image"
- },
- "fragmentConfig": {
- "imageSize": "w-0"
- },
- "fragmentFields": [
- {
- "id": "image-square",
- "value": {
- "fragmentImage": {
- "description": {
- "value_i18n": {
- "en_US": ""
- }
- },
- "url": {
- "value_i18n": {
- "en_US": "[$DOCUMENT_URL:/site-initializer/documents/group/images/course-congrats-image.png$]"
- }
- }
- },
- "fragmentLink": {
- }
- }
- }
- ],
- "fragmentStyle": {
- "height": "298px",
- "width": "553px"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "_ddmTemplate_LEARN_COURSE_CONGRATS_MESSAGE",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "fontFamily": "fontFamilySansSerif",
- "marginBottom": "5",
- "textColor": "colorNeutral8"
- },
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "cssClasses": [
- "course-bottom-nav"
- ],
- "customCSS": ".[$FRAGMENT_CLASS$] {\nbackground: var(--color-brand-primary, #0b5fff);\nborder-radius: 10px;\nlist-style-type: none;\n\n .course-bottom-nav-cta {\n background: #064DD4;\n padding: 10px;\n border-radius: 8px;\n margin-right: 1rem;\n}\n\nul {\n list-style-type: none; \n width: 100%\n}\n\nul a {\n color: white;\n}\n}",
- "fragmentStyle": {
- "height": "64px",
- "marginTop": "3",
- "maxWidth": "620px",
- "paddingLeft": "3",
- "paddingRight": "4"
- },
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow",
- "justify": "SpaceBetween",
- "marginTop": 1,
- "paddingLeft": 1,
- "paddingRight": 2
- },
- "name": "Course Bottom Nav"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "_ddmTemplate_LEARN_COURSE_INTRO_CONGRATS_BOTTOM_NAV",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\na {\nmargin-right: .2rem;\ntext-decoration: underline;\n}\n}",
- "fragment": {
- "key": "sign-in",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- ],
- "fragmentStyle": {
- "fontSize": "0.875rem",
- "fontWeight": "fontWeightBold",
- "marginTop": "2"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Root"
- },
- "settings": {
- "colorSchemeName": "01",
- "masterPage": {
- "key": "liferay-learn"
- },
- "themeName": "Dialect"
- },
- "version": 1.1
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-introduction/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-introduction/display-page-template.json
deleted file mode 100644
index a3e2e8c4cb0a31..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-introduction/display-page-template.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "contentSubtype": {
- "subtypeKey": "LEARN-COURSE"
- },
- "contentType": {
- "className": "com.liferay.journal.model.JournalArticle"
- },
- "name": "Learn Course Introduction"
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-introduction/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-introduction/page-definition.json
deleted file mode 100644
index 9858fbef8b11db..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course-introduction/page-definition.json
+++ /dev/null
@@ -1,721 +0,0 @@
-{
- "pageElement": {
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "learn-education"
- ],
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\n}",
- "customCSSViewports": [
- {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\nflex-wrap: wrap;\n}",
- "id": "landscapeMobile"
- }
- ],
- "fragmentStyle": {
- "paddingBottom": "4",
- "paddingLeft": "4",
- "paddingRight": "4",
- "paddingTop": "4"
- },
- "indexed": true,
- "layout": {
- "paddingBottom": 2,
- "paddingLeft": 2,
- "paddingRight": 2,
- "paddingTop": 2,
- "widthType": "Fixed"
- },
- "name": "Header Container"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nbackground: linear-gradient(91.07deg, #001742 0%, #0011A8 24.6%, #0B5FFF 49%, #0B5FFF 74.5%, #0B5FFF 100%),\nradial-gradient(26.56% 43.82% at 0% 0%, #00256B 20.83%, rgba(0, 37, 107, 0) 100%) /* warning: gradient uses a rotation that is not supported by CSS and may not behave as expected */,\nradial-gradient(14.55% 34.6% at 100% 34.6%, rgba(55, 124, 255, 0.68) 0%, rgba(55, 124, 255, 0) 100%);\n\n}",
- "fragmentStyle": {
- "borderRadius": "borderRadiusLg",
- "height": "216px"
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "justify": "SpaceBetween"
- },
- "name": "Header Banner"
- },
- "pageElements": [
- {
- "definition": {
- "fragmentStyle": {
- "paddingBottom": "4",
- "paddingLeft": "4",
- "paddingRight": "4",
- "paddingTop": "4"
- },
- "indexed": true,
- "layout": {
- "paddingBottom": 2,
- "paddingLeft": 2,
- "paddingRight": 2,
- "paddingTop": 2
- },
- "name": "Header Content"
- },
- "pageElements": [
- {
- "definition": {
- "fragmentStyle": {
- "backgroundColor": "colorNeutral1",
- "borderRadius": "50rem",
- "height": "40px",
- "marginBottom": "2rem",
- "width": "116px"
- },
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow",
- "justify": "Center"
- },
- "name": "Course Tag"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-image"
- },
- "fragmentConfig": {
- "imageSize": "w-0"
- },
- "fragmentFields": [
- {
- "id": "image-square",
- "value": {
- "fragmentImage": {
- "description": {
- "value_i18n": {
- "en_US": ""
- }
- },
- "url": {
- "value_i18n": {
- "en_US": "[$DOCUMENT_URL:/site-initializer/documents/group/icons/education_courses_blue.svg$]"
- }
- }
- },
- "fragmentLink": {
- }
- }
- }
- ],
- "fragmentStyle": {
- "marginRight": "1"
- },
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "h5",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "value_i18n": {
- "en_US": "Course"
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "fontFamily": "fontFamilySansSerif",
- "fontWeight": "fontWeightNormal",
- "textColor": "colorBrandPrimary"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "DDMStructure_course",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "fontFamily": "fontFamilySansSerif",
- "fontSize": "32px",
- "fontWeight": "fontWeightBold",
- "height": "40px",
- "marginBottom": "2rem",
- "textColor": "colorBrandPrimaryLighten6"
- },
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n gap: 1rem;\n \n .course-info-tag {\n color: var(--color-state-info-darken-2, #1C3667);\n background: var(--color-state-info-lighten-2, #E6EBF5);\n padding: 4px 8px;\n border-radius: 4px;\n }\n \n .card-tag__persona p::before {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-right: 4px; \n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzIyMzdfNDg1NSIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMiIgeT0iMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE2Ij4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMSAzLjk0MDY3QzExIDUuNTk3NTMgOS42NTY4NSA2Ljk0MDY3IDggNi45NDA2N0M2LjM0MzE1IDYuOTQwNjcgNSA1LjU5NzUzIDUgMy45NDA2N0M1IDIuMjgzODIgNi4zNDMxIDAuOTQwNjc0IDggMC45NDA2NzRDOS42NTY4NSAwLjk0MDY3NCAxMSAyLjI4MzgyIDExIDMuOTQwNjdMMTQgMTIuNDQwNkMxNCAxNS45NDA2IDIgMTUuOTQwNiAyIDEyLjQ0MDZDMiA2LjI1MzA4IDE0IDYuMzE1NTggMTQgMTIuNDQwNloiIGZpbGw9IiM2QjZDN0UiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzIyMzdfNDg1NSkiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiMxQzM2NjciLz4KPC9nPgo8L3N2Zz4K');\n background-size: cover;\n vertical-align: middle;\n }\n \n .card-tag__expertise p::before {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-right: 4px;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeT0iNy45OTgwNSIgd2lkdGg9IjQiIGhlaWdodD0iNiIgcng9IjEiIGZpbGw9IiMxQzM2NjciLz4KPHJlY3Qgb3BhY2l0eT0iMC41IiB4PSI2IiB5PSI0Ljk5ODA1IiB3aWR0aD0iNCIgaGVpZ2h0PSI5IiByeD0iMSIgZmlsbD0iIzFDMzY2NyIvPgo8cmVjdCBvcGFjaXR5PSIwLjUiIHg9IjEyIiB5PSIxLjk5ODA1IiB3aWR0aD0iNCIgaGVpZ2h0PSIxMiIgcng9IjEiIGZpbGw9IiMxQzM2NjciLz4KPC9zdmc+Cg==');\n background-size: cover;\n vertical-align: middle;\n }\n \n .card-tag__content-type p::after {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-left: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_150_2838' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='3' y='1' width='10' height='14'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.4004 6.99706H11V3.99401C11 0.0129299 5 -0.00892067 5 3.99401V6.99706H4.40039C3.51855 6.99706 3 7.71581 3 8.59704V13.4C3 14.2812 3.51855 15 4.40039 15H11.4004C12.2812 15 13 14.2812 13 13.4V8.59704C13 7.71581 12.2812 6.99706 11.4004 6.99706ZM6 3.99413C6 1.36913 10 1.34728 10 3.99413V6.99718H6V3.99413ZM7 13.0001H9V9.99706H7V13.0001Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_150_2838)'%3E%3Crect width='16' height='16' fill='%2354555F'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n \n .card-tag__time p::before {\n content: '';\n display: inline-block;\n width: 14px;\n height: 14px;\n margin-bottom: 2px;\n margin-right: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_2278_5196' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='0' y='0' width='16' height='16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13.6562 2.34375C12.1465 0.831299 10.1377 0 8 0C5.8623 0 3.85352 0.831299 2.34375 2.34375C0.831055 3.85315 0 5.86255 0 8C0 10.1375 0.831055 12.1469 2.34375 13.6562C3.85645 15.1687 5.8623 16 8 16C10.1377 16 12.1465 15.1687 13.6562 13.6562C15.1689 12.1438 16 10.1375 16 8C16 5.86255 15.1689 3.85315 13.6562 2.34375ZM8 14C4.69043 14 2 11.3093 2 8C2 4.69067 4.69043 2 8 2C11.3096 2 14 4.69067 14 8C14 11.3093 11.3096 14 8 14ZM6 11C5.87207 11 5.74316 10.95 5.64648 10.8531C5.4502 10.6594 5.4502 10.3406 5.64648 10.1469L7.14648 8.64685C7.05273 8.44995 7 8.2312 7 8C7 7.34692 7.41895 6.79065 8 6.58435V3.5C8 3.22498 8.22461 3 8.5 3C8.77441 3 9 3.22498 9 3.5V6.58435C9.58105 6.79065 10 7.34692 10 8C10 8.82812 9.32812 9.5 8.5 9.5C8.26855 9.5 8.0498 9.4469 7.85254 9.35315L6.35254 10.8531C6.25586 10.95 6.12793 11 6 11Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_2278_5196)'%3E%3Crect width='16' height='16' fill='%231C3667'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n}",
- "fragmentStyle": {
- "backgroundColor": ""
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "flexWrap": "Wrap"
- },
- "name": "Couse Info Tags"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "course-info-tag"
- ],
- "customCSS": ".[$FRAGMENT_CLASS$] {\n \n .course-info-tag {\n color: var(--color-state-info-darken-2, #1C3667);\n background: var(--color-state-info-lighten-2, #E6EBF5);\n padding: 4px 8px;\n border-radius: 4px;\n }\n \n .card-tag__time p::before {\n content: '';\n display: inline-block;\n width: 14px;\n height: 14px;\n margin-bottom: 2px;\n margin-right: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_2278_5196' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='0' y='0' width='16' height='16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13.6562 2.34375C12.1465 0.831299 10.1377 0 8 0C5.8623 0 3.85352 0.831299 2.34375 2.34375C0.831055 3.85315 0 5.86255 0 8C0 10.1375 0.831055 12.1469 2.34375 13.6562C3.85645 15.1687 5.8623 16 8 16C10.1377 16 12.1465 15.1687 13.6562 13.6562C15.1689 12.1438 16 10.1375 16 8C16 5.86255 15.1689 3.85315 13.6562 2.34375ZM8 14C4.69043 14 2 11.3093 2 8C2 4.69067 4.69043 2 8 2C11.3096 2 14 4.69067 14 8C14 11.3093 11.3096 14 8 14ZM6 11C5.87207 11 5.74316 10.95 5.64648 10.8531C5.4502 10.6594 5.4502 10.3406 5.64648 10.1469L7.14648 8.64685C7.05273 8.44995 7 8.2312 7 8C7 7.34692 7.41895 6.79065 8 6.58435V3.5C8 3.22498 8.22461 3 8.5 3C8.77441 3 9 3.22498 9 3.5V6.58435C9.58105 6.79065 10 7.34692 10 8C10 8.82812 9.32812 9.5 8.5 9.5C8.26855 9.5 8.0498 9.4469 7.85254 9.35315L6.35254 10.8531C6.25586 10.95 6.12793 11 6 11Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_2278_5196)'%3E%3Crect width='16' height='16' fill='%231C3667'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n}\n",
- "indexed": true,
- "layout": {
- },
- "name": "Time Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "card-tag__time"
- ],
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "text-paragraph",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "DDMStructure_courseTime",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "textColor": "color-state-info-darken-2"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "cssClasses": [
- "course-info-tag"
- ],
- "indexed": true,
- "layout": {
- },
- "name": "Persona Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "card-tag__persona"
- ],
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "text-paragraph",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "DDMStructure_selectPersona",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "cssClasses": [
- "course-info-tag"
- ],
- "indexed": true,
- "layout": {
- },
- "name": "Expertise Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "card-tag__expertise"
- ],
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "_ddmTemplate_LEARN_COURSE_EXPERTISE",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "textColor": "color-state-info-darken-2"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-image"
- },
- "fragmentConfig": {
- "imageSize": "w-0"
- },
- "fragmentFields": [
- {
- "id": "image-square",
- "value": {
- "fragmentImage": {
- "description": {
- "value_i18n": {
- "en_US": ""
- }
- },
- "url": {
- "value_i18n": {
- "en_US": "[$DOCUMENT_URL:/site-initializer/documents/group/vectors/waves.svg$]"
- }
- }
- },
- "fragmentLink": {
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\n}",
- "customCSSViewports": [
- {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\nflex-wrap: wrap;\n}",
- "id": "landscapeMobile"
- }
- ],
- "fragmentStyle": {
- "paddingBottom": "4",
- "paddingLeft": "4",
- "paddingRight": "4"
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "paddingBottom": 2,
- "paddingLeft": 2,
- "paddingRight": 2,
- "widthType": "Fixed"
- },
- "name": "Content Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragmentStyle": {
- "backgroundColor": "colorNeutral1",
- "borderRadius": "borderRadiusLg",
- "height": "100%",
- "marginRight": "4",
- "maxWidth": "320px",
- "minWidth": "320px",
- "paddingBottom": "1",
- "paddingLeft": "1",
- "paddingRight": "1",
- "paddingTop": "1",
- "width": "100%"
- },
- "indexed": true,
- "layout": {
- "marginRight": 2
- },
- "name": "Side Menu Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "_ddmTemplate_LEARN_COURSE_SIDE_NAV",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n .course-bottom-nav {\n background-image: url('[$DOCUMENT_URL:/site-initializer/documents/group/vectors/waves_sm.svg$]');\n background-repeat: no-repeat;\n background-position: calc(100% + 60px) center;\n background-size: 220px 220px;\n }\n}",
- "indexed": true,
- "layout": {
- "widthType": "Fixed"
- },
- "name": "Main Content Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "h2",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "value_i18n": {
- "en_US": "Introduction"
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "fontFamily": "fontFamilySansSerif",
- "fontWeight": "fontWeightBold"
- },
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n gap: 1rem;\n \n .course-info-tag {\n color: var(--color-state-info-darken-2, #1C3667);\n background: var(--color-state-info-lighten-2, #E6EBF5;)\n padding: 4px 8px;\n border-radius: 4px;\n }\n \n .card-tag__persona p::before {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-right: 4px; \n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzIyMzdfNDg1NSIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMiIgeT0iMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE2Ij4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMSAzLjk0MDY3QzExIDUuNTk3NTMgOS42NTY4NSA2Ljk0MDY3IDggNi45NDA2N0M2LjM0MzE1IDYuOTQwNjcgNSA1LjU5NzUzIDUgMy45NDA2N0M1IDIuMjgzODIgNi4zNDMxIDAuOTQwNjc0IDggMC45NDA2NzRDOS42NTY4NSAwLjk0MDY3NCAxMSAyLjI4MzgyIDExIDMuOTQwNjdMMTQgMTIuNDQwNkMxNCAxNS45NDA2IDIgMTUuOTQwNiAyIDEyLjQ0MDZDMiA2LjI1MzA4IDE0IDYuMzE1NTggMTQgMTIuNDQwNloiIGZpbGw9IiM2QjZDN0UiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzIyMzdfNDg1NSkiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiMxQzM2NjciLz4KPC9nPgo8L3N2Zz4K');\n background-size: cover;\n vertical-align: middle;\n }\n \n .card-tag__expertise p::before {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-right: 4px;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeT0iNy45OTgwNSIgd2lkdGg9IjQiIGhlaWdodD0iNiIgcng9IjEiIGZpbGw9IiMxQzM2NjciLz4KPHJlY3Qgb3BhY2l0eT0iMC41IiB4PSI2IiB5PSI0Ljk5ODA1IiB3aWR0aD0iNCIgaGVpZ2h0PSI5IiByeD0iMSIgZmlsbD0iIzFDMzY2NyIvPgo8cmVjdCBvcGFjaXR5PSIwLjUiIHg9IjEyIiB5PSIxLjk5ODA1IiB3aWR0aD0iNCIgaGVpZ2h0PSIxMiIgcng9IjEiIGZpbGw9IiMxQzM2NjciLz4KPC9zdmc+Cg==');\n background-size: cover;\n vertical-align: middle;\n }\n \n .card-tag__content-type p::after {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-left: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_150_2838' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='3' y='1' width='10' height='14'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.4004 6.99706H11V3.99401C11 0.0129299 5 -0.00892067 5 3.99401V6.99706H4.40039C3.51855 6.99706 3 7.71581 3 8.59704V13.4C3 14.2812 3.51855 15 4.40039 15H11.4004C12.2812 15 13 14.2812 13 13.4V8.59704C13 7.71581 12.2812 6.99706 11.4004 6.99706ZM6 3.99413C6 1.36913 10 1.34728 10 3.99413V6.99718H6V3.99413ZM7 13.0001H9V9.99706H7V13.0001Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_150_2838)'%3E%3Crect width='16' height='16' fill='%2354555F'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n \n .card-tag__time p::before {\n content: '';\n display: inline-block;\n width: 14px;\n height: 14px;\n margin-bottom: 2px;\n margin-right: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_2278_5196' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='0' y='0' width='16' height='16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13.6562 2.34375C12.1465 0.831299 10.1377 0 8 0C5.8623 0 3.85352 0.831299 2.34375 2.34375C0.831055 3.85315 0 5.86255 0 8C0 10.1375 0.831055 12.1469 2.34375 13.6562C3.85645 15.1687 5.8623 16 8 16C10.1377 16 12.1465 15.1687 13.6562 13.6562C15.1689 12.1438 16 10.1375 16 8C16 5.86255 15.1689 3.85315 13.6562 2.34375ZM8 14C4.69043 14 2 11.3093 2 8C2 4.69067 4.69043 2 8 2C11.3096 2 14 4.69067 14 8C14 11.3093 11.3096 14 8 14ZM6 11C5.87207 11 5.74316 10.95 5.64648 10.8531C5.4502 10.6594 5.4502 10.3406 5.64648 10.1469L7.14648 8.64685C7.05273 8.44995 7 8.2312 7 8C7 7.34692 7.41895 6.79065 8 6.58435V3.5C8 3.22498 8.22461 3 8.5 3C8.77441 3 9 3.22498 9 3.5V6.58435C9.58105 6.79065 10 7.34692 10 8C10 8.82812 9.32812 9.5 8.5 9.5C8.26855 9.5 8.0498 9.4469 7.85254 9.35315L6.35254 10.8531C6.25586 10.95 6.12793 11 6 11Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_2278_5196)'%3E%3Crect width='16' height='16' fill='%231C3667'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n}",
- "fragmentStyle": {
- "backgroundColor": "",
- "marginBottom": "4",
- "marginTop": "2"
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "marginBottom": 2
- },
- "name": "Couse Time Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "course-info-tag"
- ],
- "customCSS": ".[$FRAGMENT_CLASS$] {\n \n .course-info-tag {\n color: var(--color-state-info-darken-2, #1C3667);\n background: var(--color-state-info-lighten-2, #E6EBF5);\n padding: 4px 8px;\n border-radius: 4px;\n }\n \n .card-tag__time p::before {\n content: '';\n display: inline-block;\n width: 14px;\n height: 14px;\n margin-bottom: 2px;\n margin-right: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_2278_5196' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='0' y='0' width='16' height='16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13.6562 2.34375C12.1465 0.831299 10.1377 0 8 0C5.8623 0 3.85352 0.831299 2.34375 2.34375C0.831055 3.85315 0 5.86255 0 8C0 10.1375 0.831055 12.1469 2.34375 13.6562C3.85645 15.1687 5.8623 16 8 16C10.1377 16 12.1465 15.1687 13.6562 13.6562C15.1689 12.1438 16 10.1375 16 8C16 5.86255 15.1689 3.85315 13.6562 2.34375ZM8 14C4.69043 14 2 11.3093 2 8C2 4.69067 4.69043 2 8 2C11.3096 2 14 4.69067 14 8C14 11.3093 11.3096 14 8 14ZM6 11C5.87207 11 5.74316 10.95 5.64648 10.8531C5.4502 10.6594 5.4502 10.3406 5.64648 10.1469L7.14648 8.64685C7.05273 8.44995 7 8.2312 7 8C7 7.34692 7.41895 6.79065 8 6.58435V3.5C8 3.22498 8.22461 3 8.5 3C8.77441 3 9 3.22498 9 3.5V6.58435C9.58105 6.79065 10 7.34692 10 8C10 8.82812 9.32812 9.5 8.5 9.5C8.26855 9.5 8.0498 9.4469 7.85254 9.35315L6.35254 10.8531C6.25586 10.95 6.12793 11 6 11Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_2278_5196)'%3E%3Crect width='16' height='16' fill='%231C3667'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n}\n",
- "indexed": true,
- "layout": {
- },
- "name": "Time Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "card-tag__time"
- ],
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "text-paragraph",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "DDMStructure_articleTime",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSSViewports": [
- {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n .learn-article {\n padding: var(--spacer-4) var(--spacer-2, 0.5rem);\n }\n .learn-article-page-nav {\n display: none;\n }\n}",
- "id": "landscapeMobile"
- }
- ],
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "widthType": "Fixed"
- },
- "name": "Content Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "DDMStructure_content",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "fontSize": "21px"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "cssClasses": [
- "course-bottom-nav"
- ],
- "customCSS": ".[$FRAGMENT_CLASS$] {\nbackground: var(--color-action-primary-default, #0B5FFF);\nborder-radius: 10px;\nlist-style-type: none;\n\n .course-bottom-nav-cta {\n background: #064DD4;\n padding: 10px;\n border-radius: 8px;\n margin-right: 1rem;\n}\n\nul {\n list-style-type: none; \n width: 100%\n}\n\nul a {\n color: white;\n}\n}",
- "fragmentStyle": {
- "height": "64px",
- "marginTop": "3",
- "maxWidth": "620px"
- },
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow",
- "marginTop": 1
- },
- "name": "Course Bottom Nav"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "_ddmTemplate_LEARN_COURSE_INTRO_CONGRATS_BOTTOM_NAV",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "fontWeight": "fontWeightBold",
- "paddingLeft": "1",
- "paddingRight": "4",
- "textColor": "colorNeutral0"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\na {\nmargin-right: .2rem;\ntext-decoration: underline;\n}\n}",
- "fragment": {
- "key": "sign-in",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- ],
- "fragmentStyle": {
- "fontSize": "0.875rem",
- "fontWeight": "fontWeightBold",
- "marginTop": "2"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Root"
- },
- "settings": {
- "colorSchemeName": "01",
- "masterPage": {
- "key": "liferay-learn"
- },
- "themeName": "Dialect"
- },
- "version": 1.1
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course/display-page-template.json
deleted file mode 100644
index be7afe2217ef54..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course/display-page-template.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "contentSubtype": {
- "subtypeKey": "LEARN-COURSE"
- },
- "contentType": {
- "className": "com.liferay.journal.model.JournalArticle"
- },
- "name": "Learn Course"
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course/page-definition.json
deleted file mode 100644
index 9ed878d929cb3b..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learn-course/page-definition.json
+++ /dev/null
@@ -1,628 +0,0 @@
-{
- "pageElement": {
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "learn-education"
- ],
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\n}",
- "customCSSViewports": [
- {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\nflex-wrap: wrap;\n}",
- "id": "landscapeMobile"
- }
- ],
- "fragmentStyle": {
- "paddingBottom": "4",
- "paddingLeft": "4",
- "paddingRight": "4",
- "paddingTop": "4"
- },
- "indexed": true,
- "layout": {
- "paddingBottom": 2,
- "paddingLeft": 2,
- "paddingRight": 2,
- "paddingTop": 2,
- "widthType": "Fixed"
- },
- "name": "Header Container"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n background: linear-gradient(91.07deg, #001742 0%, #0011A8 24.6%, #0B5FFF 49%, #0B5FFF 74.5%, #0B5FFF 100%),\n radial-gradient(26.56% 43.82% at 0% 0%, #00256B 20.83%, rgba(0, 37, 107, 0) 100%) /* warning: gradient uses a rotation that is not supported by CSS and may not behave as expected */,\n radial-gradient(14.55% 34.6% at 100% 34.6%, rgba(55, 124, 255, 0.68) 0%, rgba(55, 124, 255, 0) 100%);\n}",
- "fragmentStyle": {
- "borderRadius": "borderRadiusLg",
- "height": "64px",
- "paddingBottom": "4",
- "paddingLeft": "4",
- "paddingRight": "4",
- "paddingTop": "4"
- },
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow",
- "justify": "SpaceBetween",
- "paddingBottom": 2,
- "paddingLeft": 2,
- "paddingRight": 2,
- "paddingTop": 2
- },
- "name": "Header Banner"
- },
- "pageElements": [
- {
- "definition": {
- "fragmentStyle": {
- "width": "100%"
- },
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow",
- "justify": "SpaceBetween"
- },
- "name": "Header Contents"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n gap: var(--spacer-3, 1rem);\n}",
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow"
- },
- "name": "Header Left-Side Contents"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n gap: 8px;\n}",
- "fragmentStyle": {
- "backgroundColor": "colorBrandPrimaryLighten6",
- "borderRadius": "999px",
- "borderWidth": "",
- "paddingBottom": "6px",
- "paddingLeft": "6px",
- "paddingRight": "20px",
- "paddingTop": "6px",
- "textColor": "colorBrandPrimary"
- },
- "indexed": true,
- "layout": {
- "align": "Center",
- "contentDisplay": "FlexRow",
- "justify": "Center"
- },
- "name": "Course Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-image"
- },
- "fragmentConfig": {
- "imageSize": "w-100"
- },
- "fragmentFields": [
- {
- "id": "image-square",
- "value": {
- "fragmentImage": {
- "url": {
- "value_i18n": {
- "en_US": "[$DOCUMENT_URL:/site-initializer/documents/group/icons/education_courses_blue.svg$]"
- }
- }
- },
- "fragmentLink": {
- }
- }
- }
- ],
- "fragmentStyle": {
- "height": "28px",
- "width": "28px"
- },
- "indexed": true,
- "name": "Course Icon"
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n\tfont-family: 'Source Sans 3';\n\tfont-size: 1rem;\n font-weight: 600;\n\tline-height: 1.5rem;\n}",
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "h5",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "value_i18n": {
- "en_US": "Course"
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "borderColor": "colorBrandPrimary",
- "fontSize": "24px",
- "fontWeight": "600",
- "textColor": "colorBrandPrimary"
- },
- "indexed": true,
- "name": "Course Text"
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "DDMStructure_course",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "fontSize": "1.5rem",
- "fontWeight": "700",
- "textColor": "colorBrandPrimaryLighten6"
- },
- "indexed": true,
- "name": "Course Description"
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n gap: 1rem;\n z-index: 1;\n \n .course-info-tag {\n color: var(--color-state-info-darken-2, #1C3667);\n background: var(--color-state-info-lighten-2, #E6EBF5);\n padding: 4px 8px;\n border-radius: 4px;\n }\n \n .card-tag__persona p::before {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-right: 4px; \n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzIyMzdfNDg1NSIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMiIgeT0iMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE2Ij4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMSAzLjk0MDY3QzExIDUuNTk3NTMgOS42NTY4NSA2Ljk0MDY3IDggNi45NDA2N0M2LjM0MzE1IDYuOTQwNjcgNSA1LjU5NzUzIDUgMy45NDA2N0M1IDIuMjgzODIgNi4zNDMxIDAuOTQwNjc0IDggMC45NDA2NzRDOS42NTY4NSAwLjk0MDY3NCAxMSAyLjI4MzgyIDExIDMuOTQwNjdMMTQgMTIuNDQwNkMxNCAxNS45NDA2IDIgMTUuOTQwNiAyIDEyLjQ0MDZDMiA2LjI1MzA4IDE0IDYuMzE1NTggMTQgMTIuNDQwNloiIGZpbGw9IiM2QjZDN0UiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzIyMzdfNDg1NSkiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiMxQzM2NjciLz4KPC9nPgo8L3N2Zz4K');\n background-size: cover;\n vertical-align: middle;\n }\n \n .card-tag__expertise p::before {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-right: 4px;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeT0iNy45OTgwNSIgd2lkdGg9IjQiIGhlaWdodD0iNiIgcng9IjEiIGZpbGw9IiMxQzM2NjciLz4KPHJlY3Qgb3BhY2l0eT0iMC41IiB4PSI2IiB5PSI0Ljk5ODA1IiB3aWR0aD0iNCIgaGVpZ2h0PSI5IiByeD0iMSIgZmlsbD0iIzFDMzY2NyIvPgo8cmVjdCBvcGFjaXR5PSIwLjUiIHg9IjEyIiB5PSIxLjk5ODA1IiB3aWR0aD0iNCIgaGVpZ2h0PSIxMiIgcng9IjEiIGZpbGw9IiMxQzM2NjciLz4KPC9zdmc+Cg==');\n background-size: cover;\n vertical-align: middle;\n }\n \n .card-tag__content-type p::after {\n content: '';\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-bottom: 4px;\n margin-left: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_150_2838' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='3' y='1' width='10' height='14'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.4004 6.99706H11V3.99401C11 0.0129299 5 -0.00892067 5 3.99401V6.99706H4.40039C3.51855 6.99706 3 7.71581 3 8.59704V13.4C3 14.2812 3.51855 15 4.40039 15H11.4004C12.2812 15 13 14.2812 13 13.4V8.59704C13 7.71581 12.2812 6.99706 11.4004 6.99706ZM6 3.99413C6 1.36913 10 1.34728 10 3.99413V6.99718H6V3.99413ZM7 13.0001H9V9.99706H7V13.0001Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_150_2838)'%3E%3Crect width='16' height='16' fill='%2354555F'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n \n .card-tag__time p::before {\n content: '';\n display: inline-block;\n width: 14px;\n height: 14px;\n margin-bottom: 2px;\n margin-right: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_2278_5196' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='0' y='0' width='16' height='16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13.6562 2.34375C12.1465 0.831299 10.1377 0 8 0C5.8623 0 3.85352 0.831299 2.34375 2.34375C0.831055 3.85315 0 5.86255 0 8C0 10.1375 0.831055 12.1469 2.34375 13.6562C3.85645 15.1687 5.8623 16 8 16C10.1377 16 12.1465 15.1687 13.6562 13.6562C15.1689 12.1438 16 10.1375 16 8C16 5.86255 15.1689 3.85315 13.6562 2.34375ZM8 14C4.69043 14 2 11.3093 2 8C2 4.69067 4.69043 2 8 2C11.3096 2 14 4.69067 14 8C14 11.3093 11.3096 14 8 14ZM6 11C5.87207 11 5.74316 10.95 5.64648 10.8531C5.4502 10.6594 5.4502 10.3406 5.64648 10.1469L7.14648 8.64685C7.05273 8.44995 7 8.2312 7 8C7 7.34692 7.41895 6.79065 8 6.58435V3.5C8 3.22498 8.22461 3 8.5 3C8.77441 3 9 3.22498 9 3.5V6.58435C9.58105 6.79065 10 7.34692 10 8C10 8.82812 9.32812 9.5 8.5 9.5C8.26855 9.5 8.0498 9.4469 7.85254 9.35315L6.35254 10.8531C6.25586 10.95 6.12793 11 6 11Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_2278_5196)'%3E%3Crect width='16' height='16' fill='%231C3667'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n}",
- "fragmentStyle": {
- "backgroundColor": ""
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "flexWrap": "Wrap"
- },
- "name": "Course Info Tags"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "course-info-tag"
- ],
- "customCSS": ".[$FRAGMENT_CLASS$] {\n \n .course-info-tag {\n color: var(--color-state-info-darken-2, #1C3667)\n background: var(--color-state-info-lighten-2, #E6EBF5);\n padding: 4px 8px;\n border-radius: 4px;\n }\n \n .card-tag__time p::before {\n content: '';\n display: inline-block;\n width: 14px;\n height: 14px;\n margin-bottom: 2px;\n margin-right: 4px; \n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.7'%3E%3Cmask id='mask0_2278_5196' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='0' y='0' width='16' height='16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13.6562 2.34375C12.1465 0.831299 10.1377 0 8 0C5.8623 0 3.85352 0.831299 2.34375 2.34375C0.831055 3.85315 0 5.86255 0 8C0 10.1375 0.831055 12.1469 2.34375 13.6562C3.85645 15.1687 5.8623 16 8 16C10.1377 16 12.1465 15.1687 13.6562 13.6562C15.1689 12.1438 16 10.1375 16 8C16 5.86255 15.1689 3.85315 13.6562 2.34375ZM8 14C4.69043 14 2 11.3093 2 8C2 4.69067 4.69043 2 8 2C11.3096 2 14 4.69067 14 8C14 11.3093 11.3096 14 8 14ZM6 11C5.87207 11 5.74316 10.95 5.64648 10.8531C5.4502 10.6594 5.4502 10.3406 5.64648 10.1469L7.14648 8.64685C7.05273 8.44995 7 8.2312 7 8C7 7.34692 7.41895 6.79065 8 6.58435V3.5C8 3.22498 8.22461 3 8.5 3C8.77441 3 9 3.22498 9 3.5V6.58435C9.58105 6.79065 10 7.34692 10 8C10 8.82812 9.32812 9.5 8.5 9.5C8.26855 9.5 8.0498 9.4469 7.85254 9.35315L6.35254 10.8531C6.25586 10.95 6.12793 11 6 11Z' fill='%236B6C7E'/%3E%3C/mask%3E%3Cg mask='url(%23mask0_2278_5196)'%3E%3Crect width='16' height='16' fill='%231C3667'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n background-size: cover;\n vertical-align: middle; \n }\n}\n",
- "indexed": true,
- "layout": {
- },
- "name": "Time Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "card-tag__time"
- ],
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "text-paragraph",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "DDMStructure_courseTime",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "textColor": "color-state-info-darken-2"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "cssClasses": [
- "course-info-tag"
- ],
- "indexed": true,
- "layout": {
- },
- "name": "Persona Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "card-tag__persona"
- ],
- "fragment": {
- "key": "dialect-text",
- "siteKey": "Liferay Learn"
- },
- "fragmentConfig": {
- "textType": "text-paragraph",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "DDMStructure_selectPersona",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "cssClasses": [
- "course-info-tag"
- ],
- "indexed": true,
- "layout": {
- },
- "name": "Expertise Tag"
- },
- "pageElements": [
- {
- "definition": {
- "cssClasses": [
- "card-tag__expertise"
- ],
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "_ddmTemplate_LEARN_COURSE_EXPERTISE",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "textColor": "color-state-info-darken-2"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "indexed": true,
- "layout": {
- },
- "name": "Waves Background"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n\tposition: absolute;\n\tright: 20px;\n\ttop: -36px;\n}",
- "fragment": {
- "key": "BASIC_COMPONENT-image"
- },
- "fragmentConfig": {
- "imageSize": "w-100"
- },
- "fragmentFields": [
- {
- "id": "image-square",
- "value": {
- "fragmentImage": {
- "url": {
- "value_i18n": {
- "en_US": "[$DOCUMENT_URL:/site-initializer/documents/group/vectors/waves.svg$]"
- }
- }
- },
- "fragmentLink": {
- }
- }
- }
- ],
- "indexed": true,
- "name": "Waves Image"
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\n}",
- "customCSSViewports": [
- {
- "customCSS": ".[$FRAGMENT_CLASS$] {\nposition: relative;\nflex-wrap: wrap;\n}",
- "id": "landscapeMobile"
- }
- ],
- "fragmentStyle": {
- "paddingBottom": "4",
- "paddingLeft": "4",
- "paddingRight": "4",
- "paddingTop": "4"
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "justify": "Center",
- "paddingBottom": 2,
- "paddingLeft": 2,
- "paddingRight": 2,
- "paddingTop": 2,
- "widthType": "Fixed"
- },
- "name": "Bottom Banner Container"
- },
- "pageElements": [
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n\theight: 100%;\n}",
- "fragmentStyle": {
- "backgroundColor": "colorNeutral1",
- "borderRadius": "borderRadiusLg",
- "marginRight": "4",
- "maxWidth": "320px",
- "minWidth": "320px",
- "paddingBottom": "1",
- "paddingLeft": "1",
- "paddingRight": "1",
- "paddingTop": "1",
- "width": "100%"
- },
- "indexed": true,
- "layout": {
- "marginRight": 2
- },
- "name": "Side Menu Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "_ddmTemplate_LEARN_COURSE_SIDE_NAV",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "indexed": true,
- "layout": {
- },
- "name": "Main Content Container"
- },
- "pageElements": [
- {
- "definition": {
- "customCSSViewports": [
- {
- "customCSS": ".[$FRAGMENT_CLASS$] {\n .learn-article {\n padding: var(--spacer-4) var(--spacer-2, 0.5rem);\n }\n .learn-article-page-nav {\n display: none;\n }\n}",
- "id": "landscapeMobile"
- }
- ],
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexRow",
- "widthType": "Fixed"
- },
- "name": "Content Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "DDMStructure_content",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- },
- {
- "definition": {
- "customCSS": ".[$FRAGMENT_CLASS$] .course-nav-bottom__banner {\n background-image: url('[$DOCUMENT_URL:/site-initializer/documents/group/vectors/waves_sm.svg$]');\n background-repeat: no-repeat;\n background-position: calc(100% + 60px) center;\n background-size: 220px 220px;\n }\n\n",
- "fragmentStyle": {
- "backgroundColor": "colorNeutral1",
- "borderRadius": "borderRadiusLg",
- "marginTop": "4",
- "maxWidth": "763px",
- "paddingBottom": "4",
- "paddingLeft": "4",
- "paddingRight": "4",
- "paddingTop": "4"
- },
- "indexed": true,
- "layout": {
- "contentDisplay": "FlexColumn",
- "marginTop": 2,
- "paddingBottom": 2,
- "paddingLeft": 2,
- "paddingRight": 2,
- "paddingTop": 2,
- "widthType": "Fixed"
- },
- "name": "Bottom Nav Container"
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "BASIC_COMPONENT-html"
- },
- "fragmentConfig": {
- },
- "fragmentFields": [
- {
- "id": "element-html",
- "value": {
- "html": {
- "mapping": {
- "fieldKey": "_ddmTemplate_LEARN_COURSE_NAV_BOTTOM",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Root"
- },
- "settings": {
- "colorSchemeName": "01",
- "masterPage": {
- "key": "liferay-learn"
- },
- "themeName": "Dialect"
- },
- "version": 1.0
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-external-media-video/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-external-media-video/display-page-template.json
new file mode 100644
index 00000000000000..3ac4b66d398537
--- /dev/null
+++ b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-external-media-video/display-page-template.json
@@ -0,0 +1,9 @@
+{
+ "contentSubtype": {
+ "subtypeKey": "T4T14_EXTERNAL_MEDIA"
+ },
+ "contentType": {
+ "className": "com.liferay.object.model.ObjectDefinition#[$OBJECT_DEFINITION_ID:ExternalMedia$]"
+ },
+ "name": "Learning Path External Media Video"
+}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-external-media-video/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-external-media-video/page-definition.json
new file mode 100644
index 00000000000000..536c97324b251a
--- /dev/null
+++ b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-external-media-video/page-definition.json
@@ -0,0 +1,261 @@
+{
+ "pageElement": {
+ "id": "885ebf5c-fdff-7df9-4306-a613edad3f45",
+ "pageElements": [
+ {
+ "definition": {
+ "cssClasses": [
+ "breadcrumb-container"
+ ],
+ "fragmentStyle": {
+ "paddingBottom": "4",
+ "paddingLeft": "4",
+ "paddingRight": "4",
+ "paddingTop": "4"
+ },
+ "indexed": true,
+ "layout": {
+ "contentDisplay": "FlexRow",
+ "justify": "SpaceBetween",
+ "paddingBottom": 2,
+ "paddingLeft": 2,
+ "paddingRight": 2,
+ "paddingTop": 2,
+ "widthType": "Fixed"
+ }
+ },
+ "id": "7b372d6e-588d-b667-aaa1-6abb6fb33416",
+ "pageElements": [
+ {
+ "definition": {
+ "fragment": {
+ "key": "dialect-text",
+ "siteKey": "Guest"
+ },
+ "fragmentConfig": {
+ "textType": "h1",
+ "truncateText": false
+ },
+ "fragmentFields": [
+ {
+ "id": "element-text",
+ "value": {
+ "fragmentLink": {
+ },
+ "text": {
+ "mapping": {
+ "fieldKey": "ddmTemplate__ddmTemplate_34407743",
+ "itemReference": {
+ "contextSource": "DisplayPageItem"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "indexed": true
+ },
+ "id": "ee2af129-6ca9-1b5e-5b23-68af4fe2156b",
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "cssClasses": [
+ "submit-button"
+ ],
+ "fragment": {
+ "key": "dialect-button",
+ "siteKey": "Guest"
+ },
+ "fragmentConfig": {
+ "buttonSize": "",
+ "inverted": true,
+ "style": "primary",
+ "type": "solid",
+ "uppercase": false
+ },
+ "fragmentFields": [
+ {
+ "id": "link",
+ "value": {
+ "fragmentLink": {
+ "value": {
+ "href": {
+ "value_i18n": {
+ "en_US": "https://liferay.dev/ask/questions/liferay-learn-feedback/new"
+ }
+ }
+ }
+ },
+ "text": {
+ "value_i18n": {
+ "en_US": "Submit Feedback"
+ }
+ }
+ }
+ }
+ ],
+ "fragmentStyle": {
+ "borderColor": "#3F404B00",
+ "fontFamily": "fontFamilySansSerif",
+ "fontWeight": "600"
+ },
+ "indexed": true
+ },
+ "id": "e95e9c97-05bc-be30-4604-a3b1033f1ea0",
+ "type": "Fragment"
+ }
+ ],
+ "type": "Section"
+ },
+ {
+ "definition": {
+ "fragmentStyle": {
+ "paddingBottom": "4",
+ "paddingLeft": "4",
+ "paddingRight": "4",
+ "paddingTop": "4"
+ },
+ "indexed": true,
+ "layout": {
+ "contentDisplay": "FlexColumn",
+ "justify": "SpaceBetween",
+ "paddingBottom": 2,
+ "paddingLeft": 2,
+ "paddingRight": 2,
+ "paddingTop": 2,
+ "widthType": "Fixed"
+ }
+ },
+ "id": "65f9d517-8f5c-7813-4ee2-3402fd94a971",
+ "pageElements": [
+ {
+ "definition": {
+ "fragment": {
+ "key": "dialect-text",
+ "siteKey": "Guest"
+ },
+ "fragmentConfig": {
+ "textType": "h1",
+ "truncateText": false
+ },
+ "fragmentFields": [
+ {
+ "id": "element-text",
+ "value": {
+ "fragmentLink": {
+ },
+ "text": {
+ "mapping": {
+ "fieldKey": "ObjectField_title",
+ "itemReference": {
+ "contextSource": "DisplayPageItem"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "fragmentStyle": {
+ "marginBottom": "3"
+ },
+ "indexed": true
+ },
+ "id": "72ceee61-61f7-84af-6a3c-cd95b8692181",
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "fragment": {
+ "key": "mappable-video",
+ "siteKey": "Guest"
+ },
+ "fragmentConfig": {
+ "align": "flex-start",
+ "autoPlay": false,
+ "hideControls": false,
+ "loop": false,
+ "mute": true,
+ "url": "",
+ "useMappableUrl": true,
+ "videoHeight": "",
+ "videoWidth": ""
+ },
+ "fragmentFields": [
+ {
+ "id": "mappableUrl",
+ "value": {
+ "fragmentLink": {
+ },
+ "text": {
+ "mapping": {
+ "fieldKey": "ObjectField_url",
+ "itemReference": {
+ "contextSource": "DisplayPageItem"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "indexed": true
+ },
+ "id": "47703749-45d8-8338-bb0e-a4302026911a",
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "fragment": {
+ "key": "dialect-text",
+ "siteKey": "Guest"
+ },
+ "fragmentConfig": {
+ "textType": "text-paragraph",
+ "truncateText": false
+ },
+ "fragmentFields": [
+ {
+ "id": "element-text",
+ "value": {
+ "fragmentLink": {
+ },
+ "text": {
+ "mapping": {
+ "fieldKey": "ObjectField_description",
+ "itemReference": {
+ "contextSource": "DisplayPageItem"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "fragmentStyle": {
+ "marginTop": "3"
+ },
+ "indexed": true
+ },
+ "id": "7c99e4c7-6b38-4eff-cefb-b5d698f91bf5",
+ "type": "Fragment"
+ }
+ ],
+ "type": "Section"
+ }
+ ],
+ "type": "Root"
+ },
+ "settings": {
+ "colorSchemeName": "01",
+ "masterPage": {
+ "key": "liferay-learn"
+ },
+ "themeName": "Dialect",
+ "themeSettings": {
+ "lfr-theme:regular:show-footer": "false",
+ "lfr-theme:regular:show-header": "false",
+ "lfr-theme:regular:show-header-search": "false",
+ "lfr-theme:regular:wrap-widget-page-content": "false"
+ }
+ },
+ "version": 1.1
+}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-demo/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-demo/display-page-template.json
deleted file mode 100644
index a71bb20c9a6037..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-demo/display-page-template.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "contentSubtype": {
- "subtypeKey": "LEARNING-PATH-VIDEO-DEMO"
- },
- "contentType": {
- "className": "com.liferay.portal.kernel.repository.model.FileEntry"
- },
- "defaultTemplate": true,
- "name": "Learning Path Video - Demo"
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-demo/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-demo/page-definition.json
deleted file mode 100644
index 474625285921e7..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-demo/page-definition.json
+++ /dev/null
@@ -1,142 +0,0 @@
-{
- "pageElement": {
- "pageElements": [
- {
- "definition": {
- "fragmentStyle": {
- "paddingTop": "3"
- },
- "indexed": true,
- "layout": {
- "paddingTop": 1
- }
- },
- "pageElements": [
- {
- "definition": {
- "indexed": true,
- "layout": {
- "widthType": "Fixed"
- }
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "dialect-text"
- },
- "fragmentConfig": {
- "textType": "h1",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "FileEntry_title",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "paddingBottom": "3"
- },
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "fragment": {
- "key": "mappable-video",
- "siteKey": "Guest"
- },
- "fragmentConfig": {
- "align": "flex-start",
- "autoPlay": false,
- "hideControls": false,
- "loop": false,
- "mute": true,
- "url": "",
- "useMappableUrl": true,
- "videoHeight": "",
- "videoWidth": ""
- },
- "fragmentFields": [
- {
- "id": "mappableUrl",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "FileEntry_downloadURL",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "fragment": {
- "key": "dialect-text"
- },
- "fragmentConfig": {
- "textType": "text-paragraph",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "ddmTemplate__ddmTemplate_24225291",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "paddingTop": "3"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Root"
- },
- "settings": {
- "masterPage": {
- "key": "liferay-learn"
- }
- },
- "version": 1.0
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-webinar/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-webinar/display-page-template.json
deleted file mode 100644
index ac11d109f4377d..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-webinar/display-page-template.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "contentSubtype": {
- "subtypeKey": "LEARNING-PATH-VIDEO-WEBINAR"
- },
- "contentType": {
- "className": "com.liferay.portal.kernel.repository.model.FileEntry"
- },
- "defaultTemplate": true,
- "name": "Learning Path Video - Webinar"
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-webinar/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-webinar/page-definition.json
deleted file mode 100644
index c8f64379945dec..00000000000000
--- a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path-video-webinar/page-definition.json
+++ /dev/null
@@ -1,142 +0,0 @@
-{
- "pageElement": {
- "pageElements": [
- {
- "definition": {
- "fragmentStyle": {
- "paddingTop": "3"
- },
- "indexed": true,
- "layout": {
- "paddingTop": 1
- }
- },
- "pageElements": [
- {
- "definition": {
- "indexed": true,
- "layout": {
- "widthType": "Fixed"
- }
- },
- "pageElements": [
- {
- "definition": {
- "fragment": {
- "key": "dialect-text"
- },
- "fragmentConfig": {
- "textType": "h1",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "FileEntry_title",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "paddingBottom": "3"
- },
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "fragment": {
- "key": "mappable-video",
- "siteKey": "Guest"
- },
- "fragmentConfig": {
- "align": "flex-start",
- "autoPlay": false,
- "hideControls": false,
- "loop": false,
- "mute": true,
- "url": "",
- "useMappableUrl": true,
- "videoHeight": "",
- "videoWidth": ""
- },
- "fragmentFields": [
- {
- "id": "mappableUrl",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "FileEntry_downloadURL",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "indexed": true
- },
- "type": "Fragment"
- },
- {
- "definition": {
- "fragment": {
- "key": "dialect-text"
- },
- "fragmentConfig": {
- "textType": "text-paragraph",
- "truncateText": false
- },
- "fragmentFields": [
- {
- "id": "element-text",
- "value": {
- "fragmentLink": {
- },
- "text": {
- "mapping": {
- "fieldKey": "ddmTemplate__ddmTemplate_24229726",
- "itemReference": {
- "contextSource": "DisplayPageItem"
- }
- }
- }
- }
- }
- ],
- "fragmentStyle": {
- "paddingTop": "3"
- },
- "indexed": true
- },
- "type": "Fragment"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Section"
- }
- ],
- "type": "Root"
- },
- "settings": {
- "masterPage": {
- "key": "liferay-learn"
- }
- },
- "version": 1.0
-}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path/display-page-template.json
new file mode 100644
index 00000000000000..c0ea8769968327
--- /dev/null
+++ b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path/display-page-template.json
@@ -0,0 +1,9 @@
+{
+ "contentSubtype": {
+ "subtypeKey": "T4T13_LEARNING_PATH"
+ },
+ "contentType": {
+ "className": "com.liferay.object.model.ObjectDefinition#[$OBJECT_DEFINITION_ID:LearningPath$]"
+ },
+ "name": "Learning Path"
+}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path/page-definition.json
new file mode 100644
index 00000000000000..4f86da46890c41
--- /dev/null
+++ b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/learning-path/page-definition.json
@@ -0,0 +1,96 @@
+{
+ "pageElement": {
+ "pageElements": [
+ {
+ "definition": {
+ "fragment": {
+ "key": "lms-init",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ },
+ "fragmentFields": [
+ ],
+ "indexed": true
+ },
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "fragment": {
+ "key": "lms-page-loading",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ "loadingTextKey": "loading-knowledge-label"
+ },
+ "fragmentFields": [
+ ],
+ "indexed": true
+ },
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "cssClasses": [
+ "learning-path-steps-page"
+ ],
+ "fragmentStyle": {
+ "marginTop": "2rem",
+ "width": "100%"
+ },
+ "fragmentViewports": [
+ {
+ "fragmentViewportStyle": {
+ "paddingLeft": "0",
+ "paddingRight": "0",
+ "width": "90%"
+ },
+ "id": "tablet"
+ }
+ ],
+ "indexed": true,
+ "layout": {
+ },
+ "name": "Main"
+ },
+ "id": "4358742c-bea2-c2e4-26b4-0f310c31bcc1",
+ "pageElements": [
+ {
+ "definition": {
+ "fragmentStyle": {
+ "marginLeft": "auto",
+ "marginRight": "auto",
+ "maxWidth": "1600px",
+ "paddingLeft": "4",
+ "paddingRight": "4"
+ },
+ "widgetInstance": {
+ "widgetConfig": {
+ },
+ "widgetName": "com_liferay_client_extension_web_internal_portlet_ClientExtensionEntryPortlet_84997331558403_LXC_liferay_lms_learning_path_steps"
+ }
+ },
+ "type": "Widget"
+ }
+ ],
+ "type": "Section"
+ }
+ ],
+ "type": "Root"
+ },
+ "settings": {
+ "colorSchemeName": "01",
+ "masterPage": {
+ "key": "liferay-learn"
+ },
+ "themeName": "Dialect",
+ "themeSettings": {
+ "lfr-theme:regular:show-footer": "false",
+ "lfr-theme:regular:show-header": "false",
+ "lfr-theme:regular:show-header-search": "false",
+ "lfr-theme:regular:wrap-widget-page-content": "false"
+ }
+ },
+ "version": 1.1
+}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/lesson/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/lesson/display-page-template.json
new file mode 100644
index 00000000000000..42d0e0b3b42944
--- /dev/null
+++ b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/lesson/display-page-template.json
@@ -0,0 +1,9 @@
+{
+ "contentSubtype": {
+ "subtypeKey": "T4T14_LESSON"
+ },
+ "contentType": {
+ "className": "com.liferay.object.model.ObjectDefinition#[$OBJECT_DEFINITION_ID:Lesson$]"
+ },
+ "name": "Lesson"
+}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/lesson/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/lesson/page-definition.json
new file mode 100644
index 00000000000000..b19cfc356417ff
--- /dev/null
+++ b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/lesson/page-definition.json
@@ -0,0 +1,214 @@
+{
+ "pageElement": {
+ "id": "3141aa58-7a47-37a8-1aff-cbcabe07e150",
+ "pageElements": [
+ {
+ "definition": {
+ "cssClasses": [
+ "learn-education"
+ ],
+ "fragmentStyle": {
+ "paddingTop": "4",
+ "width": "99%"
+ },
+ "fragmentViewports": [
+ {
+ "fragmentViewportStyle": {
+ "paddingLeft": "0",
+ "paddingRight": "0",
+ "width": "90%"
+ },
+ "id": "tablet"
+ }
+ ],
+ "indexed": true,
+ "layout": {
+ "contentDisplay": "FlexColumn",
+ "paddingTop": 2,
+ "widthType": "Fixed"
+ }
+ },
+ "id": "77c2db7c-f520-317a-10b5-ec87bc0c9145",
+ "pageElements": [
+ {
+ "definition": {
+ "fragment": {
+ "key": "lms-course-top-banner",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ "assetType": "lesson"
+ },
+ "fragmentFields": [
+ ],
+ "indexed": true
+ },
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "customCSS": ".[$FRAGMENT_CLASS$] {\n \n}\n\n\n ",
+ "fragment": {
+ "key": "lms-lesson-display-page-layout",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ },
+ "fragmentFields": [
+ ],
+ "fragmentStyle": {
+ "marginTop": "4",
+ "width": "100%"
+ },
+ "indexed": true
+ },
+ "id": "d2c09153-369e-340c-0961-e0f79c86ba0a",
+ "pageElements": [
+ {
+ "definition": {
+ },
+ "id": "f6c32937-513d-6336-d0e0-b579f48e2200",
+ "pageElements": [
+ {
+ "definition": {
+ "cssClasses": [
+ "course-lesson__content"
+ ],
+ "fragment": {
+ "key": "BASIC_COMPONENT-html"
+ },
+ "fragmentConfig": {
+ },
+ "fragmentFields": [
+ {
+ "id": "element-html",
+ "value": {
+ "html": {
+ "mapping": {
+ "fieldKey": "ObjectField_content",
+ "itemReference": {
+ "contextSource": "DisplayPageItem"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "fragmentStyle": {
+ "width": "100%"
+ },
+ "indexed": true
+ },
+ "id": "cc371220-d297-5368-ddcf-4372cb4d3fa7",
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "cssClasses": [
+ "course-lesson__bottom-navigation"
+ ],
+ "widgetInstance": {
+ "widgetConfig": {
+ },
+ "widgetName": "com_liferay_client_extension_web_internal_portlet_ClientExtensionEntryPortlet_84997331558403_LXC_liferay_lms_lesson_navigation"
+ }
+ },
+ "type": "Widget"
+ },
+ {
+ "definition": {
+ "customCSS": ".[$FRAGMENT_CLASS$] {\n bottom: 12px;\n position: fixed;\n width: 1150px !important;\nz-index: 100;\n \n @media(max-width: 1652px) {\n \twidth: 68% !important;\n }\n \n @media(max-width: 1560px) {\n width: 65% !important; \n }\n@media(max-width: 1292px) {width: 51% !important;}\n}",
+ "fragmentStyle": {
+ "hidden": true,
+ "width": "100%"
+ },
+ "indexed": true,
+ "layout": {
+ "align": "Center",
+ "contentDisplay": "FlexRow",
+ "justify": "Center"
+ }
+ },
+ "id": "37cc112f-99ac-99aa-f61e-fcc10e3b6c57",
+ "pageElements": [
+ {
+ "definition": {
+ "customCSS": ".[$FRAGMENT_CLASS$] {\nz-index: 100;\n}",
+ "fragment": {
+ "key": "sign-in-banner",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ },
+ "fragmentFields": [
+ {
+ "id": "image-editable-product-facebook",
+ "value": {
+ "fragmentLink": {
+ }
+ }
+ },
+ {
+ "id": "text1",
+ "value": {
+ "fragmentLink": {
+ }
+ }
+ }
+ ],
+ "fragmentStyle": {
+ "width": "100%"
+ },
+ "indexed": true
+ },
+ "id": "09458d53-958b-7c1a-be3a-f46b4cd38623",
+ "type": "Fragment"
+ }
+ ],
+ "type": "Section"
+ }
+ ],
+ "type": "FragmentDropZone"
+ }
+ ],
+ "type": "Fragment"
+ }
+ ],
+ "type": "Section"
+ },
+ {
+ "definition": {
+ "fragment": {
+ "key": "lms-page-loading",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ "loadingTextKey": "loading-knowledge-label"
+ },
+ "fragmentFields": [
+ ],
+ "fragmentStyle": {
+ "hidden": true
+ },
+ "indexed": true
+ },
+ "type": "Fragment"
+ }
+ ],
+ "type": "Root"
+ },
+ "settings": {
+ "colorSchemeName": "01",
+ "masterPage": {
+ "key": "liferay-learn"
+ },
+ "themeName": "Dialect",
+ "themeSettings": {
+ "lfr-theme:regular:show-footer": "false",
+ "lfr-theme:regular:show-header": "false",
+ "lfr-theme:regular:show-header-search": "false",
+ "lfr-theme:regular:wrap-widget-page-content": "false"
+ }
+ },
+ "version": 1.1
+}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/quiz/display-page-template.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/quiz/display-page-template.json
new file mode 100644
index 00000000000000..d7018bcab8589b
--- /dev/null
+++ b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/quiz/display-page-template.json
@@ -0,0 +1,9 @@
+{
+ "contentSubtype": {
+ "subtypeKey": "T4T14_QUIZ"
+ },
+ "contentType": {
+ "className": "com.liferay.object.model.ObjectDefinition#[$OBJECT_DEFINITION_ID:Quiz$]"
+ },
+ "name": "Quiz"
+}
\ No newline at end of file
diff --git a/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/quiz/page-definition.json b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/quiz/page-definition.json
new file mode 100644
index 00000000000000..434d96b3fa8e19
--- /dev/null
+++ b/workspaces/liferay-learn-workspace/client-extensions/liferay-learn-site-initializer/site-initializer/layout-page-templates/display-page-templates/quiz/page-definition.json
@@ -0,0 +1,134 @@
+{
+ "pageElement": {
+ "id": "597760e9-637f-1c54-932e-bc45d0a5e6a2",
+ "pageElements": [
+ {
+ "definition": {
+ "fragment": {
+ "key": "com.liferay.knowledge.base.web.internal.fragment.renderer.KBArticleNavigationFragmentRenderer"
+ },
+ "fragmentConfig": {
+ },
+ "fragmentFields": [
+ ],
+ "indexed": true
+ },
+ "id": "050ef39c-623f-4559-59ad-23c7f5b1fd7e",
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "cssClasses": [
+ "learn-education"
+ ],
+ "customCSS": ".[$FRAGMENT_CLASS$] {\n \n}",
+ "fragmentStyle": {
+ "paddingTop": "4"
+ },
+ "fragmentViewports": [
+ {
+ "fragmentViewportStyle": {
+ "paddingLeft": "0",
+ "paddingRight": "0",
+ "width": "90%"
+ },
+ "id": "tablet"
+ }
+ ],
+ "indexed": true,
+ "layout": {
+ "contentDisplay": "FlexColumn",
+ "paddingTop": 2,
+ "widthType": "Fixed"
+ }
+ },
+ "id": "9ef05974-35ba-0679-d930-90899ccdb7e4",
+ "pageElements": [
+ {
+ "definition": {
+ "fragment": {
+ "key": "lms-course-top-banner",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ "assetType": "quiz"
+ },
+ "fragmentFields": [
+ ],
+ "indexed": true
+ },
+ "type": "Fragment"
+ },
+ {
+ "definition": {
+ "customCSS": ".[$FRAGMENT_CLASS$] {\n \n}",
+ "fragment": {
+ "key": "lms-quiz-display-page-layout",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ },
+ "fragmentFields": [
+ ],
+ "fragmentStyle": {
+ "borderColor": "#282934",
+ "fontFamily": "fontFamilySansSerif",
+ "fontWeight": "600",
+ "marginTop": "4",
+ "maxWidth": "1600px",
+ "minHeight": "300px",
+ "textColor": "#282934"
+ },
+ "indexed": true
+ },
+ "pageElements": [
+ {
+ "definition": {
+ },
+ "pageElements": [
+ {
+ "definition": {
+ "cssClasses": [
+ "learn-quiz-view"
+ ],
+ "fragment": {
+ "key": "lms-quiz-view",
+ "siteKey": "Liferay Learn"
+ },
+ "fragmentConfig": {
+ "badgePageUrl": "/user-dashboard",
+ "educationPageUrl": "/education"
+ },
+ "fragmentFields": [
+ ],
+ "indexed": true
+ },
+ "type": "Fragment"
+ }
+ ],
+ "type": "FragmentDropZone"
+ }
+ ],
+ "type": "Fragment"
+ }
+ ],
+ "type": "Section"
+ }
+ ],
+ "type": "Root"
+ },
+ "settings": {
+ "colorSchemeName": "01",
+ "masterPage": {
+ "key": "liferay-learn"
+ },
+ "themeName": "Dialect",
+ "themeSettings": {
+ "lfr-theme:regular:show-footer": "false",
+ "lfr-theme:regular:show-header": "false",
+ "lfr-theme:regular:show-header-search": "false",
+ "lfr-theme:regular:wrap-widget-page-content": "false"
+ }
+ },
+ "version": 1.1
+}
\ No newline at end of file
diff --git a/workspaces/liferay-marketplace-workspace/client-extensions/liferay-marketplace-custom-element/src/pages/PublisherDashboard/pages/Apps/AppCreationFlow/ProvideAppBuildPage/ProvideAppBuildPage.tsx b/workspaces/liferay-marketplace-workspace/client-extensions/liferay-marketplace-custom-element/src/pages/PublisherDashboard/pages/Apps/AppCreationFlow/ProvideAppBuildPage/ProvideAppBuildPage.tsx
index 236e27889dffa3..8ec1c4d99d7da7 100755
--- a/workspaces/liferay-marketplace-workspace/client-extensions/liferay-marketplace-custom-element/src/pages/PublisherDashboard/pages/Apps/AppCreationFlow/ProvideAppBuildPage/ProvideAppBuildPage.tsx
+++ b/workspaces/liferay-marketplace-workspace/client-extensions/liferay-marketplace-custom-element/src/pages/PublisherDashboard/pages/Apps/AppCreationFlow/ProvideAppBuildPage/ProvideAppBuildPage.tsx
@@ -324,8 +324,6 @@ export function ProvideAppBuildPage({
},
virtualSettingId,
});
-
- return;
}
};