diff --git a/component/api/src/main/java/org/exoplatform/portal/config/model/Page.java b/component/api/src/main/java/org/exoplatform/portal/config/model/Page.java
index e3506fbd9a..99867d0f6e 100644
--- a/component/api/src/main/java/org/exoplatform/portal/config/model/Page.java
+++ b/component/api/src/main/java/org/exoplatform/portal/config/model/Page.java
@@ -49,10 +49,22 @@ public class Page extends Container {
private boolean showMaxWindow = false;
+ /**
+ * Whether to 'hide' shared layout or not even when the site 'displays' the
+ * shared layout
+ */
@Getter
@Setter
private boolean hideSharedLayout = false;
+ /**
+ * Whether to 'show' shared layout or not even when the site 'hides' the
+ * shared layout layout
+ */
+ @Getter
+ @Setter
+ private boolean showSharedLayout = false;
+
private String type;
private String link;
@@ -74,6 +86,8 @@ public Page(PageData data) {
this.ownerId = data.getOwnerId();
this.editPermission = data.getEditPermission();
this.showMaxWindow = data.isShowMaxWindow();
+ this.hideSharedLayout = data.isHideSharedLayout();
+ this.showSharedLayout = data.isShowSharedLayout();
this.type = data.getType();
this.link = data.getLink();
}
@@ -180,6 +194,7 @@ public PageData build() {
editPermission,
showMaxWindow,
hideSharedLayout,
+ showSharedLayout,
type,
link);
}
diff --git a/component/api/src/main/java/org/exoplatform/portal/mop/Utils.java b/component/api/src/main/java/org/exoplatform/portal/mop/Utils.java
index 6d6e2745de..6cf57a2800 100644
--- a/component/api/src/main/java/org/exoplatform/portal/mop/Utils.java
+++ b/component/api/src/main/java/org/exoplatform/portal/mop/Utils.java
@@ -76,6 +76,7 @@ public static PageState toPageState(Page page) {
page.getDescription(),
page.isShowMaxWindow(),
page.isHideSharedLayout(),
+ page.isShowSharedLayout(),
page.getFactoryId(),
page.getProfiles(),
page.getAccessPermissions() != null ? Arrays.asList(page.getAccessPermissions()) : null,
@@ -91,6 +92,7 @@ public static PageState toPageState(PageData page) {
page.getDescription(),
page.isShowMaxWindow(),
page.isHideSharedLayout(),
+ page.isShowSharedLayout(),
page.getFactoryId(),
page.getProfiles(),
page.getAccessPermissions(),
diff --git a/component/api/src/main/java/org/exoplatform/portal/mop/page/PageContext.java b/component/api/src/main/java/org/exoplatform/portal/mop/page/PageContext.java
index 3fefdf919c..5668fd3a66 100644
--- a/component/api/src/main/java/org/exoplatform/portal/mop/page/PageContext.java
+++ b/component/api/src/main/java/org/exoplatform/portal/mop/page/PageContext.java
@@ -10,83 +10,85 @@
@Data
public class PageContext {
- /** . */
- final PageKey key;
+ /** . */
+ final PageKey key;
- /** The new state if any. */
- PageState state;
+ /** The new state if any. */
+ PageState state;
- /** A data snapshot. */
- PageData data;
+ /** A data snapshot. */
+ PageData data;
- PageContext(PageData data) {
- this.key = data.key;
- this.state = null;
- this.data = data;
- }
+ PageContext(PageData data) {
+ this.key = data.key;
+ this.state = null;
+ this.data = data;
+ }
- public PageContext(PageKey key, PageState state) {
- this.key = key;
- this.state = state;
- this.data = null;
- }
+ public PageContext(PageKey key, PageState state) {
+ this.key = key;
+ this.state = state;
+ this.data = null;
+ }
- /**
- * Returns the navigation key.
- *
- * @return the navigation key
- */
- public PageKey getKey() {
- return key;
- }
+ /**
+ * Returns the navigation key.
+ *
+ * @return the navigation key
+ */
+ public PageKey getKey() {
+ return key;
+ }
- /**
- * Returns the navigation state.
- *
- * @return the navigation state
- */
- public PageState getState() {
- if (state != null) {
- return state;
- } else if (data != null) {
- return data.state;
- } else {
- return null;
- }
+ /**
+ * Returns the navigation state.
+ *
+ * @return the navigation state
+ */
+ public PageState getState() {
+ if (state != null) {
+ return state;
+ } else if (data != null) {
+ return data.state;
+ } else {
+ return null;
}
+ }
- /**
- * Updates the page state the behavior is not the same wether or not the page is persistent:
- * When the page is persistent, any state is allowed:
- *
- * - A non null state overrides the current persistent state.
- * - The null state means to reset the state to the persistent state.
- * - When the page is transient, only a non null state is allowed as it will be used for creation purpose.
- *
- *
- * @param state the new state
- * @throws IllegalStateException when the state is cleared and the navigation is not persistent
- */
- public void setState(PageState state) throws IllegalStateException {
- if (data == null && state == null) {
- throw new IllegalStateException("Cannot clear state on a transient page");
- }
- this.state = state;
+ /**
+ * Updates the page state the behavior is not the same wether or not the page
+ * is persistent: When the page is persistent, any state is allowed:
+ *
+ * - A non null state overrides the current persistent state.
+ * - The null state means to reset the state to the persistent state.
+ * - When the page is transient, only a non null state is allowed as it will
+ * be used for creation purpose.
+ *
+ *
+ * @param state the new state
+ * @throws IllegalStateException when the state is cleared and the navigation
+ * is not persistent
+ */
+ public void setState(PageState state) throws IllegalStateException {
+ if (data == null && state == null) {
+ throw new IllegalStateException("Cannot clear state on a transient page");
}
+ this.state = state;
+ }
- public void update(Page page) throws NullPointerException {
- if (page == null) {
- throw new NullPointerException();
- }
- PageState s = getState();
- page.setTitle(s.displayName);
- page.setDescription(s.description);
- page.setFactoryId(s.factoryId);
- page.setShowMaxWindow(s.showMaxWindow);
- page.setHideSharedLayout(s.hideSharedLayout);
-
- List permisssions = s.accessPermissions;
- page.setAccessPermissions(permisssions != null ? permisssions.toArray(new String[permisssions.size()]) : null);
- page.setEditPermission(getState().editPermission);
+ public void update(Page page) throws NullPointerException {
+ if (page == null) {
+ throw new NullPointerException();
}
+ PageState s = getState();
+ page.setTitle(s.getDisplayName());
+ page.setDescription(s.getDescription());
+ page.setFactoryId(s.getFactoryId());
+ page.setShowMaxWindow(s.isShowMaxWindow());
+ page.setHideSharedLayout(s.isHideSharedLayout());
+ page.setShowSharedLayout(s.isShowSharedLayout());
+ List permisssions = s.getAccessPermissions();
+ page.setAccessPermissions(permisssions == null ? null : permisssions.toArray(new String[permisssions.size()]));
+ page.setEditPermission(s.getEditPermission());
+ }
}
diff --git a/component/api/src/main/java/org/exoplatform/portal/mop/page/PageState.java b/component/api/src/main/java/org/exoplatform/portal/mop/page/PageState.java
index 1f9be6f35d..a11d1c3c98 100644
--- a/component/api/src/main/java/org/exoplatform/portal/mop/page/PageState.java
+++ b/component/api/src/main/java/org/exoplatform/portal/mop/page/PageState.java
@@ -1,78 +1,58 @@
package org.exoplatform.portal.mop.page;
import java.io.Serializable;
-import java.util.*;
-
-import org.exoplatform.commons.utils.Safe;
-
-import lombok.Getter;
-import lombok.Setter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import org.exoplatform.portal.mop.PageType;
-/**
- * An immutable page state class, modifying an existing state should use the
- * {@link Builder} builder class to rebuild a new immutable state object.
- *
- * @author Julien Viet
- */
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
public class PageState implements Serializable {
private static final long serialVersionUID = 7874166775312871923L;
- /** . */
- @Getter
- @Setter
private String storageId;
- /** . */
- final String editPermission;
+ private boolean showMaxWindow;
- /** . */
- final boolean showMaxWindow;
+ private boolean hideSharedLayout;
- /** . */
- @Getter
- final boolean hideSharedLayout;
+ private boolean showSharedLayout;
- final String profiles;
+ private String profiles;
- /** . */
- final String factoryId;
+ private String factoryId;
- /** . */
- final String displayName;
+ private String displayName;
- /** . */
- final String description;
+ private String description;
- /** . */
- final String type;
+ private String type;
- /** . */
- final String link;
+ private String link;
- /** . */
- final List accessPermissions;
+ private String editPermission;
- public PageState(String displayName, // NOSONAR
- String description,
- boolean showMaxWindow,
- String factoryId,
- List accessPermissions,
- String editPermission,
- String type,
- String link) {
- this(displayName,
- description,
- showMaxWindow,
- false,
- factoryId,
- null,
- accessPermissions,
- editPermission,
- type,
- link);
+ private List accessPermissions;
+
+ public PageState(PageState pageState) {
+ this(pageState.storageId,
+ pageState.showMaxWindow,
+ pageState.hideSharedLayout,
+ pageState.showSharedLayout,
+ pageState.profiles,
+ pageState.factoryId,
+ pageState.displayName,
+ pageState.description,
+ pageState.type,
+ pageState.link,
+ pageState.editPermission,
+ pageState.accessPermissions);
}
public PageState(String displayName, // NOSONAR
@@ -81,13 +61,14 @@ public PageState(String displayName, // NOSONAR
String factoryId,
List accessPermissions,
String editPermission) {
- this(displayName, description, showMaxWindow, false, factoryId, accessPermissions, editPermission);
+ this(displayName, description, showMaxWindow, false, false, factoryId, accessPermissions, editPermission);
}
public PageState(String displayName, // NOSONAR
String description,
boolean showMaxWindow,
boolean hideSharedLayout,
+ boolean showSharedLayout,
String factoryId,
String profiles,
List accessPermissions,
@@ -97,6 +78,7 @@ public PageState(String displayName, // NOSONAR
this.editPermission = editPermission;
this.showMaxWindow = showMaxWindow;
this.hideSharedLayout = hideSharedLayout;
+ this.showSharedLayout = showSharedLayout;
this.factoryId = factoryId;
this.profiles = profiles;
this.displayName = displayName;
@@ -110,12 +92,14 @@ public PageState(String displayName, // NOSONAR
String description,
boolean showMaxWindow,
boolean hideSharedLayout,
+ boolean showSharedLayout,
String factoryId,
List accessPermissions,
String editPermission) {
this.editPermission = editPermission;
this.showMaxWindow = showMaxWindow;
this.hideSharedLayout = hideSharedLayout;
+ this.showSharedLayout = showSharedLayout;
this.factoryId = factoryId;
this.profiles = null;
this.displayName = displayName;
@@ -125,73 +109,11 @@ public PageState(String displayName, // NOSONAR
this.link = null;
}
- public String getEditPermission() {
- return editPermission;
- }
-
- public boolean getShowMaxWindow() {
- return showMaxWindow;
- }
-
- public String getFactoryId() {
- return factoryId;
- }
-
- public String getDisplayName() {
- return displayName;
- }
-
- public String getDescription() {
- return description;
- }
-
- public String getProfiles() {
- return profiles;
- }
-
- public List getAccessPermissions() {
- return accessPermissions;
- }
-
- public String getType() {
- return type;
- }
-
- public String getLink() {
- return link;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (!(o instanceof PageState)) {
- return false;
- }
- PageState that = (PageState) o;
- return Safe.equals(editPermission, that.editPermission) && showMaxWindow == that.showMaxWindow
- && Safe.equals(factoryId, that.factoryId)
- && Safe.equals(displayName, that.displayName)
- && Safe.equals(description, that.description)
- && Safe.equals(accessPermissions, that.accessPermissions);
- }
-
- @Override
- public int hashCode() {
- int result = editPermission != null ? editPermission.hashCode() : 0;
- result = 31 * result + (showMaxWindow ? 1 : 0);
- result = 31 * result + (factoryId != null ? factoryId.hashCode() : 0);
- result = 31 * result + (displayName != null ? displayName.hashCode() : 0);
- result = 31 * result + (description != null ? description.hashCode() : 0);
- result = 31 * result + (accessPermissions != null ? accessPermissions.hashCode() : 0);
- return result;
- }
-
public Builder builder() {
return new Builder(editPermission,
showMaxWindow,
hideSharedLayout,
+ showSharedLayout,
factoryId,
profiles,
displayName,
@@ -212,6 +134,9 @@ public static class Builder {
/** . */
private boolean hideSharedLayout;
+ /** . */
+ private boolean showSharedLayout;
+
/** . */
private String factoryId;
@@ -235,6 +160,7 @@ public static class Builder {
private Builder(String editPermission, // NOSONAR
boolean showMaxWindow,
boolean hideSharedLayout,
+ boolean showSharedLayout,
String factoryId,
String profiles,
String displayName,
@@ -244,7 +170,8 @@ private Builder(String editPermission, // NOSONAR
String link) {
this.editPermission = editPermission;
this.showMaxWindow = showMaxWindow;
- this.showMaxWindow = hideSharedLayout;
+ this.hideSharedLayout = hideSharedLayout;
+ this.showSharedLayout = showSharedLayout;
this.factoryId = factoryId;
this.profiles = profiles;
this.displayName = displayName;
@@ -273,12 +200,17 @@ public Builder showMaxWindow(boolean showMaxWindow) {
this.showMaxWindow = showMaxWindow;
return this;
}
-
+
public Builder hideSharedLayout(boolean hideSharedLayout) {
this.hideSharedLayout = hideSharedLayout;
return this;
}
+ public Builder showSharedLayout(boolean showSharedLayout) {
+ this.showSharedLayout = showSharedLayout;
+ return this;
+ }
+
public Builder displayName(String displayName) {
this.displayName = displayName;
return this;
@@ -314,6 +246,7 @@ public PageState build() {
description,
showMaxWindow,
hideSharedLayout,
+ showSharedLayout,
factoryId,
profiles,
accessPermissions,
diff --git a/component/api/src/main/java/org/exoplatform/portal/pom/data/PageData.java b/component/api/src/main/java/org/exoplatform/portal/pom/data/PageData.java
index c52ec2ab0e..e02c5f3a22 100644
--- a/component/api/src/main/java/org/exoplatform/portal/pom/data/PageData.java
+++ b/component/api/src/main/java/org/exoplatform/portal/pom/data/PageData.java
@@ -33,92 +33,96 @@
@NoArgsConstructor(force = true)
public class PageData extends ContainerData {
- public static final PageData NULL_OBJECT = new PageData();
-
- private static final long serialVersionUID = 2741613958131096156L;
-
- /** . */
- private final PageKey key;
-
- /** . */
- private final String editPermission;
-
- /** . */
- private final boolean showMaxWindow;
-
- /** . */
- private final boolean hideSharedLayout;
-
- /** . */
- private final String type;
-
- /** . */
- private final String link;
-
- public PageData(String storageId, // NOSONAR
- String id,
- String name,
- String icon,
- String template,
- String factoryId,
- String title,
- String description,
- String width,
- String height,
- String cssClass,
- String profiles,
- List accessPermissions,
- List children,
- String ownerType,
- String ownerId,
- String editPermission,
- boolean showMaxWindow,
- boolean hideSharedLayout,
- String type,
- String link) {
- super(storageId,
- id,
- name,
- icon,
- template,
- factoryId,
- title,
- description,
- width,
- height,
- cssClass,
- profiles,
- null,
- null,
- accessPermissions,
- children);
-
- //
- this.key = new PageKey(ownerType, ownerId, name);
- this.editPermission = editPermission;
- this.showMaxWindow = showMaxWindow;
- this.hideSharedLayout = hideSharedLayout;
- this.type= type;
- this.link = link;
- }
-
- public String getType() {
- return type;
- }
-
- public String getLink() {
- return link;
- }
-
- public String getOwnerType() {
- return key.getType();
- }
-
- public String getOwnerId() {
- return key.getId();
- }
-
- public boolean isNull() {
- return key == null;
- }
+ public static final PageData NULL_OBJECT = new PageData();
+
+ private static final long serialVersionUID = 2741613958131096156L;
+
+ /** . */
+ private final PageKey key;
+
+ /** . */
+ private final String editPermission;
+
+ /** . */
+ private final boolean showMaxWindow;
+
+ /** . */
+ private final boolean hideSharedLayout;
+
+ private final boolean showSharedLayout;
+
+ /** . */
+ private final String type;
+
+ /** . */
+ private final String link;
+
+ public PageData(String storageId, // NOSONAR
+ String id,
+ String name,
+ String icon,
+ String template,
+ String factoryId,
+ String title,
+ String description,
+ String width,
+ String height,
+ String cssClass,
+ String profiles,
+ List accessPermissions,
+ List children,
+ String ownerType,
+ String ownerId,
+ String editPermission,
+ boolean showMaxWindow,
+ boolean hideSharedLayout,
+ boolean showSharedLayout,
+ String type,
+ String link) {
+ super(storageId,
+ id,
+ name,
+ icon,
+ template,
+ factoryId,
+ title,
+ description,
+ width,
+ height,
+ cssClass,
+ profiles,
+ null,
+ null,
+ accessPermissions,
+ children);
+
+ //
+ this.key = new PageKey(ownerType, ownerId, name);
+ this.editPermission = editPermission;
+ this.showMaxWindow = showMaxWindow;
+ this.hideSharedLayout = hideSharedLayout;
+ this.showSharedLayout = showSharedLayout;
+ this.type = type;
+ this.link = link;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public String getLink() {
+ return link;
+ }
+
+ public String getOwnerType() {
+ return key.getType();
+ }
+
+ public String getOwnerId() {
+ return key.getId();
+ }
+
+ public boolean isNull() {
+ return key == null;
+ }
}
diff --git a/component/management/src/main/java/org/gatein/api/PortalImpl.java b/component/management/src/main/java/org/gatein/api/PortalImpl.java
index 6cd7602ad8..2de05b1b0f 100644
--- a/component/management/src/main/java/org/gatein/api/PortalImpl.java
+++ b/component/management/src/main/java/org/gatein/api/PortalImpl.java
@@ -281,10 +281,10 @@ public Page createPage(PageId pageId) throws EntityAlreadyExistsException {
null,
false,
false,
+ false,
null,
null,
- Arrays.asList(Util.from(Permission
- .everyone())),
+ Arrays.asList(Util.from(Permission.everyone())),
Util.from(edit)[0],
PageType.PAGE.name(),
null);
diff --git a/component/management/src/test/java/org/gatein/api/AbstractApiTest.java b/component/management/src/test/java/org/gatein/api/AbstractApiTest.java
index 094e2df4f3..5a25ca87e1 100644
--- a/component/management/src/test/java/org/gatein/api/AbstractApiTest.java
+++ b/component/management/src/test/java/org/gatein/api/AbstractApiTest.java
@@ -165,6 +165,7 @@ protected void createPage(SiteId siteId, String... pages) {
"description",
false,
false,
+ false,
null,
null,
Arrays.asList("Everyone"),
diff --git a/component/portal/src/main/java/org/exoplatform/portal/jdbc/entity/PageEntity.java b/component/portal/src/main/java/org/exoplatform/portal/jdbc/entity/PageEntity.java
index 1b5fa62a0e..267b1eaf4a 100644
--- a/component/portal/src/main/java/org/exoplatform/portal/jdbc/entity/PageEntity.java
+++ b/component/portal/src/main/java/org/exoplatform/portal/jdbc/entity/PageEntity.java
@@ -36,6 +36,8 @@
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
+import lombok.Getter;
+import lombok.Setter;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@@ -64,10 +66,15 @@ public class PageEntity extends ComponentEntity implements Serializable {
@Column(name = "SHOW_MAX_WINDOW")
private boolean showMaxWindow;
-
+
@Column(name = "HIDE_SHARED_LAYOUT")
private boolean hideSharedLayout;
+ @Getter
+ @Setter
+ @Column(name = "SHOW_SHARED_LAYOUT")
+ private boolean showSharedLayout;
+
@Column(name = "DISPLAY_NAME", length = 200)
private String displayName;
diff --git a/component/portal/src/main/java/org/exoplatform/portal/mop/storage/PageStorageImpl.java b/component/portal/src/main/java/org/exoplatform/portal/mop/storage/PageStorageImpl.java
index 241ce015bb..458dfd4282 100644
--- a/component/portal/src/main/java/org/exoplatform/portal/mop/storage/PageStorageImpl.java
+++ b/component/portal/src/main/java/org/exoplatform/portal/mop/storage/PageStorageImpl.java
@@ -307,6 +307,7 @@ protected PageData buildPageData(PageEntity entity) {
editPermission, // editPermission
entity.isShowMaxWindow(), // showMaxWindow
entity.isHideSharedLayout(),
+ entity.isShowSharedLayout(),
entity.getPageType() != null ? entity.getPageType().name() : null,
entity.getLink());
}
@@ -347,8 +348,9 @@ private void applyPageContextToEntity(PageEntity entity, PageContext pageContext
entity.setDescription(state.getDescription());
entity.setDisplayName(state.getDisplayName());
entity.setFactoryId(state.getFactoryId());
- entity.setShowMaxWindow(state.getShowMaxWindow());
+ entity.setShowMaxWindow(state.isShowMaxWindow());
entity.setHideSharedLayout(state.isHideSharedLayout());
+ entity.setShowSharedLayout(state.isShowSharedLayout());
entity.setPageType(!StringUtils.isBlank(state.getType()) ? PageType.valueOf(state.getType()) : PageType.PAGE);
entity.setProfiles(state.getProfiles());
entity.setLink(state.getLink());
diff --git a/component/portal/src/main/resources/db/changelog/portal-rdbms.db.changelog-1.0.0.xml b/component/portal/src/main/resources/db/changelog/portal-rdbms.db.changelog-1.0.0.xml
index 4c3930fb93..793ffe44b3 100644
--- a/component/portal/src/main/resources/db/changelog/portal-rdbms.db.changelog-1.0.0.xml
+++ b/component/portal/src/main/resources/db/changelog/portal-rdbms.db.changelog-1.0.0.xml
@@ -465,4 +465,10 @@
+
+
+
+
+
+
diff --git a/component/portal/src/test/java/org/exoplatform/portal/config/TestLoadedPOM.java b/component/portal/src/test/java/org/exoplatform/portal/config/TestLoadedPOM.java
index 120fb8331b..823abd8d4c 100644
--- a/component/portal/src/test/java/org/exoplatform/portal/config/TestLoadedPOM.java
+++ b/component/portal/src/test/java/org/exoplatform/portal/config/TestLoadedPOM.java
@@ -298,7 +298,7 @@ public void testPage() throws Exception {
assertEquals("test_factory_id", pageContext.getState().getFactoryId());
assertEquals(Arrays. asList("test_access_permissions"), pageContext.getState().getAccessPermissions());
assertEquals("test_edit_permission", pageContext.getState().getEditPermission());
- assertEquals(true, pageContext.getState().getShowMaxWindow());
+ assertEquals(true, pageContext.getState().isShowMaxWindow());
//
List children = page.getChildren();
diff --git a/component/portal/src/test/java/org/exoplatform/portal/config/TestSerialization.java b/component/portal/src/test/java/org/exoplatform/portal/config/TestSerialization.java
index eb94c2a3fa..58a76dcd80 100644
--- a/component/portal/src/test/java/org/exoplatform/portal/config/TestSerialization.java
+++ b/component/portal/src/test/java/org/exoplatform/portal/config/TestSerialization.java
@@ -114,6 +114,7 @@ Arrays. asList(body),
"foo16",
true,
true,
+ true,
PageType.LINK.name(),
"wwww.exo.com");
PageData clone = IOTools.clone(obj);
@@ -138,6 +139,7 @@ Arrays. asList(body),
assertEquals(obj.getEditPermission(), clone.getEditPermission());
assertEquals(obj.isShowMaxWindow(), clone.isShowMaxWindow());
assertEquals(obj.isHideSharedLayout(), clone.isHideSharedLayout());
+ assertEquals(obj.isShowSharedLayout(), clone.isShowSharedLayout());
assertEquals(obj.getType(), clone.getType());
assertEquals(obj.getLink(), clone.getLink());
}
diff --git a/component/portal/src/test/java/org/exoplatform/portal/mop/dao/PageDAOTest.java b/component/portal/src/test/java/org/exoplatform/portal/mop/dao/PageDAOTest.java
index 93b9ee7903..60d454f00d 100644
--- a/component/portal/src/test/java/org/exoplatform/portal/mop/dao/PageDAOTest.java
+++ b/component/portal/src/test/java/org/exoplatform/portal/mop/dao/PageDAOTest.java
@@ -70,6 +70,7 @@ private PageEntity createInstance(String key, String displayName, String descrip
entity.setDescription(description);
entity.setShowMaxWindow(true);
entity.setHideSharedLayout(true);
+ entity.setShowSharedLayout(true);
entity.setFactoryId("testFactoryId");
entity.setPageBody("testPageBody");
entity.setPageType(PageType.PAGE);
diff --git a/component/portal/src/test/java/org/exoplatform/portal/mop/storage/TestDataStorage.java b/component/portal/src/test/java/org/exoplatform/portal/mop/storage/TestDataStorage.java
index 1aa6d9c54a..55c7a2df12 100644
--- a/component/portal/src/test/java/org/exoplatform/portal/mop/storage/TestDataStorage.java
+++ b/component/portal/src/test/java/org/exoplatform/portal/mop/storage/TestDataStorage.java
@@ -311,7 +311,7 @@ public void testSavePage() throws Exception {
pageContext = pageService.loadPage(page.getPageKey());
assertEquals("MyTitle", pageContext.getState().getDisplayName());
- assertEquals(true, pageContext.getState().getShowMaxWindow());
+ assertEquals(true, pageContext.getState().isShowMaxWindow());
assertEquals(true, pageContext.getState().isHideSharedLayout());
}
diff --git a/webui/src/main/java/org/exoplatform/portal/webui/page/UIPage.java b/webui/src/main/java/org/exoplatform/portal/webui/page/UIPage.java
index bbf9065070..4f6d689375 100644
--- a/webui/src/main/java/org/exoplatform/portal/webui/page/UIPage.java
+++ b/webui/src/main/java/org/exoplatform/portal/webui/page/UIPage.java
@@ -64,6 +64,10 @@ public class UIPage extends UIContainer {
@Setter
private boolean hideSharedLayout = false;
+ @Getter
+ @Setter
+ private boolean showSharedLayout = false;
+
public void normalizePortletWindowStates() {
for (UIPortlet childUIPortlet : recursivelyFindUIPortlets(this)) {
if (!WindowState.MINIMIZED.equals(childUIPortlet.getCurrentWindowState())) {
diff --git a/webui/src/main/java/org/exoplatform/portal/webui/portal/UISharedLayout.java b/webui/src/main/java/org/exoplatform/portal/webui/portal/UISharedLayout.java
index 201542eb62..d129ee86ee 100644
--- a/webui/src/main/java/org/exoplatform/portal/webui/portal/UISharedLayout.java
+++ b/webui/src/main/java/org/exoplatform/portal/webui/portal/UISharedLayout.java
@@ -48,13 +48,14 @@ public void processRender(WebuiRequestContext context) throws Exception {
}
public boolean isShowSharedLayout(PortalRequestContext requestContext) {
- boolean showSharedLayout = !requestContext.isHideSharedLayout() && (Util.getUIPage() == null || !Util.getUIPage().isHideSharedLayout());
- if (requestContext.getUserPortalConfig() != null
+ boolean showSharedLayout = !hideSiteSharedLayout(requestContext) && !hidePageSharedLayout();
+ if (requestContext.getUserPortalConfig() != null
&& requestContext.getUserPortalConfig().getPortalConfig() != null) {
showSharedLayout = showSharedLayout
&& requestContext.getSiteType() != SiteType.GROUP_TEMPLATE
&& (requestContext.getSiteType() != SiteType.PORTAL
- || requestContext.getUserPortalConfig().getPortalConfig().isDisplayed());
+ || showSiteSharedLayout(requestContext)
+ || showPageSharedLayout());
}
return showSharedLayout;
}
@@ -68,4 +69,20 @@ protected void processContainerRender(WebuiRequestContext context) throws Except
super.processRender(context);
}
+ private boolean hideSiteSharedLayout(PortalRequestContext requestContext) {
+ return requestContext.isHideSharedLayout();
+ }
+
+ private boolean showSiteSharedLayout(PortalRequestContext requestContext) {
+ return requestContext.getUserPortalConfig().getPortalConfig().isDisplayed();
+ }
+
+ private boolean hidePageSharedLayout() {
+ return Util.getUIPage() != null && Util.getUIPage().isHideSharedLayout();
+ }
+
+ private boolean showPageSharedLayout() {
+ return !hidePageSharedLayout() && Util.getUIPage() != null && Util.getUIPage().isShowSharedLayout();
+ }
+
}
diff --git a/webui/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java b/webui/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java
index 7c2d80f60c..c97e113be2 100644
--- a/webui/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java
+++ b/webui/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java
@@ -131,6 +131,7 @@ public static void toUIPage(UIPage uiPage, Page model) {
uiPage.setProfiles(model.getProfiles());
uiPage.setShowMaxWindow(model.isShowMaxWindow());
uiPage.setHideSharedLayout(model.isHideSharedLayout());
+ uiPage.setShowSharedLayout(model.isShowSharedLayout());
List portlets = new ArrayList<>();
uiPage.findComponentOfType(portlets, UIPortlet.class);