From 5b3ed788cc638dd52e8475909e37c43e7972e703 Mon Sep 17 00:00:00 2001 From: rosalinep Date: Mon, 3 Feb 2025 16:07:54 -0800 Subject: [PATCH 1/5] Initial impl --- .../model/DiscussionServiceImpl.java | 2 +- api/src/org/labkey/api/settings/AppProps.java | 1 + .../labkey/api/assay/nab/view/runDetails.jsp | 10 +++++-- core/package-lock.json | 8 +++--- core/package.json | 2 +- core/src/org/labkey/core/CoreModule.java | 4 +++ .../labkey/core/admin/AdminController.java | 27 +++++++++++++++++++ .../core/admin/lookAndFeelProperties.jsp | 8 ++++++ .../list/controllers/ListController.java | 8 +++++- 9 files changed, 61 insertions(+), 9 deletions(-) diff --git a/announcements/src/org/labkey/announcements/model/DiscussionServiceImpl.java b/announcements/src/org/labkey/announcements/model/DiscussionServiceImpl.java index d6dc52776a2..79db071d2ff 100644 --- a/announcements/src/org/labkey/announcements/model/DiscussionServiceImpl.java +++ b/announcements/src/org/labkey/announcements/model/DiscussionServiceImpl.java @@ -132,7 +132,7 @@ public DiscussionService.DiscussionView getDiscussionArea(ViewContext context, S @Nullable public DiscussionService.DiscussionView getDiscussionArea(Container c, User user, URLHelper currentURL, String objectId, ActionURL pageURL, String newDiscussionTitle, boolean allowMultipleDiscussions, boolean displayFirstDiscussionByDefault) { - if (!LookAndFeelProperties.getInstance(c).isDiscussionEnabled()) + if (!LookAndFeelProperties.getInstance(c).isDiscussionEnabled() && !AppProps.getInstance().isOptionalFeatureEnabled(AppProps.DEPRECATED_OBJECT_LEVEL_DISCUSSIONS)) return null; // get discussion parameters diff --git a/api/src/org/labkey/api/settings/AppProps.java b/api/src/org/labkey/api/settings/AppProps.java index 299d17cd27e..c82a131dc4e 100644 --- a/api/src/org/labkey/api/settings/AppProps.java +++ b/api/src/org/labkey/api/settings/AppProps.java @@ -48,6 +48,7 @@ public interface AppProps String EXPERIMENTAL_NO_GUESTS = "disableGuestAccount"; String EXPERIMENTAL_BLOCKER = "blockMaliciousClients"; String EXPERIMENTAL_RESOLVE_PROPERTY_URI_COLUMNS = "resolve-property-uri-columns"; + String DEPRECATED_OBJECT_LEVEL_DISCUSSIONS = "deprecatedObjectLevelDiscussions"; String UNKNOWN_VERSION = "Unknown Release Version"; diff --git a/assay/src/org/labkey/api/assay/nab/view/runDetails.jsp b/assay/src/org/labkey/api/assay/nab/view/runDetails.jsp index 6d232fea1ad..de9a32e388e 100644 --- a/assay/src/org/labkey/api/assay/nab/view/runDetails.jsp +++ b/assay/src/org/labkey/api/assay/nab/view/runDetails.jsp @@ -22,6 +22,7 @@ <%@ page import="org.labkey.api.view.HttpView" %> <%@ page import="org.labkey.api.view.JspView" %> <%@ page import="org.labkey.api.view.template.ClientDependencies" %> +<%@ page import="org.labkey.api.settings.AppProps" %> <%@ taglib prefix="labkey" uri="http://www.labkey.org/taglib" %> <%@ page extends="org.labkey.api.jsp.JspBase" %> <%! @@ -84,7 +85,12 @@ <% - if (!bean.isPrintView() && writer && LookAndFeelProperties.getInstance(getContainer()).isDiscussionEnabled()) + if ( + !bean.isPrintView() + && writer + && AppProps.getInstance().isOptionalFeatureEnabled(AppProps.DEPRECATED_OBJECT_LEVEL_DISCUSSIONS) + && LookAndFeelProperties.getInstance(getContainer()).isDiscussionEnabled() + ) { %> @@ -96,4 +102,4 @@ <% } -%> \ No newline at end of file +%> diff --git a/core/package-lock.json b/core/package-lock.json index f5fa03b3855..527c87f1ee5 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -8,7 +8,7 @@ "name": "labkey-core", "version": "0.0.0", "dependencies": { - "@labkey/components": "6.20.0", + "@labkey/components": "6.20.2-fb-issue51620.0", "@labkey/themes": "1.4.0" }, "devDependencies": { @@ -3058,9 +3058,9 @@ } }, "node_modules/@labkey/components": { - "version": "6.20.0", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-6.20.0.tgz", - "integrity": "sha512-XPMdZZeQIafKgwgF1/SgoU+TYsgzIyRli4CpFst+8AEaUM9EUdVC42Dm5O1kKUIGVwzOOpC1MSu7R7q4FelHuw==", + "version": "6.20.2-fb-issue51620.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-6.20.2-fb-issue51620.0.tgz", + "integrity": "sha512-AjpeVUSUNQWKLRBXAckUj8sLr0r/Mb6D+UloZnuok7pHOe6SkspmrfZhdgikIelS1Bj5se7PzL3jQ3c6qUhsIg==", "dependencies": { "@hello-pangea/dnd": "17.0.0", "@labkey/api": "1.37.0", diff --git a/core/package.json b/core/package.json index 1fc30dd7736..1d85beedac3 100644 --- a/core/package.json +++ b/core/package.json @@ -54,7 +54,7 @@ } }, "dependencies": { - "@labkey/components": "6.20.0", + "@labkey/components": "6.20.2-fb-issue51620.0", "@labkey/themes": "1.4.0" }, "devDependencies": { diff --git a/core/src/org/labkey/core/CoreModule.java b/core/src/org/labkey/core/CoreModule.java index 6913de66a31..81b21e805dc 100644 --- a/core/src/org/labkey/core/CoreModule.java +++ b/core/src/org/labkey/core/CoreModule.java @@ -510,6 +510,10 @@ public QuerySchema createSchema(DefaultSchema schema, Module module) "Short-circuit robots", "Save resources by not rendering pages marked as 'noindex' for robots. This is experimental as not all robots are search engines.", false); + AdminConsole.addOptionalFeatureFlag(new OptionalFeatureFlag(AppProps.DEPRECATED_OBJECT_LEVEL_DISCUSSIONS, + "Restore Object-Level Discussions", + "This option and all support for Object-Level Discussions will be removed in LabKey Server v25.7.", + false, false, FeatureType.Deprecated)); SiteValidationService svc = SiteValidationService.get(); if (null != svc) diff --git a/core/src/org/labkey/core/admin/AdminController.java b/core/src/org/labkey/core/admin/AdminController.java index 964d4fee31f..6837f2ae432 100644 --- a/core/src/org/labkey/core/admin/AdminController.java +++ b/core/src/org/labkey/core/admin/AdminController.java @@ -9478,6 +9478,33 @@ public void addNavTrail(NavTree root) } } + public static class DeprecatedFlagForm + { + private String featureName; + + public String getFeatureName() + { + return featureName; + } + + public void setFeatureName(String featureName) + { + this.featureName = featureName; + } + } + + @RequiresPermission(ReadPermission.class) + public static class DeprecatedFlagAction extends ReadOnlyApiAction + { + @Override + public ApiResponse execute(DeprecatedFlagForm form, BindException errors) + { + ApiSimpleResponse ret = new ApiSimpleResponse(); + ret.put("response", AppProps.getInstance().isOptionalFeatureEnabled(form.getFeatureName())); + return ret; + } + } + @RequiresPermission(AdminOperationsPermission.class) public static class ProductFeatureAction extends BaseApiAction { diff --git a/core/src/org/labkey/core/admin/lookAndFeelProperties.jsp b/core/src/org/labkey/core/admin/lookAndFeelProperties.jsp index c919076b2d9..2ba764abdd8 100644 --- a/core/src/org/labkey/core/admin/lookAndFeelProperties.jsp +++ b/core/src/org/labkey/core/admin/lookAndFeelProperties.jsp @@ -56,6 +56,7 @@ <%@ page import="java.util.Map" %> <%@ page import="java.util.Set" %> <%@ page import="java.util.stream.Collectors" %> +<%@ page import="org.labkey.api.settings.AppProps" %> <%@ taglib prefix="labkey" uri="http://www.labkey.org/taglib" %> <%@ page extends="org.labkey.api.jsp.JspBase" %> <% @@ -209,6 +210,10 @@ <%=inheritCheckbox(inherited, helpMenuEnabled)%> <%=disabled(inherited)%>> +<% + if (AppProps.getInstance().isOptionalFeatureEnabled(AppProps.DEPRECATED_OBJECT_LEVEL_DISCUSSIONS)) + { +%> <% String enableDiscussionHelp = "Some items within LabKey Server, like reports and wiki pages, support discussions " + @@ -219,6 +224,9 @@ <%=inheritCheckbox(inherited, discussionEnabled)%> <%=disabled(inherited)%>> +<% + } +%> <% inherited = isInherited(laf.getUnsubstitutedLogoHrefStored()); %> diff --git a/list/src/org/labkey/list/controllers/ListController.java b/list/src/org/labkey/list/controllers/ListController.java index 3fc4be8d1ec..7a22961a668 100644 --- a/list/src/org/labkey/list/controllers/ListController.java +++ b/list/src/org/labkey/list/controllers/ListController.java @@ -89,6 +89,7 @@ import org.labkey.api.security.permissions.PlatformDeveloperPermission; import org.labkey.api.security.permissions.ReadPermission; import org.labkey.api.security.permissions.UpdatePermission; +import org.labkey.api.settings.AppProps; import org.labkey.api.settings.LookAndFeelProperties; import org.labkey.api.util.FileStream; import org.labkey.api.util.FileUtil; @@ -625,7 +626,12 @@ public ModelAndView getView(ListDefinitionForm form, BindException errors) view.addView(new HtmlView(PageFlowUtil.link("show item history").href(getViewContext().cloneActionURL().addParameter("showHistory", "1")).build())); } - if (_list.getDiscussionSetting().isLinked() && LookAndFeelProperties.getInstance(getContainer()).isDiscussionEnabled() && DiscussionService.get() != null) + if ( + _list.getDiscussionSetting().isLinked() + && AppProps.getInstance().isOptionalFeatureEnabled(AppProps.DEPRECATED_OBJECT_LEVEL_DISCUSSIONS) + && LookAndFeelProperties.getInstance(getContainer()).isDiscussionEnabled() + && DiscussionService.get() != null + ) { String entityId = item.getEntityId(); From 119a63b45abefce12c7bbd942f6d4f57ab6a8f50 Mon Sep 17 00:00:00 2001 From: rosalinep Date: Wed, 5 Feb 2025 11:05:33 -0800 Subject: [PATCH 2/5] Feedback + bump version --- core/package-lock.json | 8 ++++---- core/package.json | 2 +- core/src/org/labkey/core/CoreModule.java | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 2461ce6ec9c..66224e26a04 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -8,7 +8,7 @@ "name": "labkey-core", "version": "0.0.0", "dependencies": { - "@labkey/components": "6.21.1", + "@labkey/components": "6.21.1-fb-issue51620.0", "@labkey/themes": "1.4.0" }, "devDependencies": { @@ -3058,9 +3058,9 @@ } }, "node_modules/@labkey/components": { - "version": "6.21.1", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-6.21.1.tgz", - "integrity": "sha512-7RIgjzBB8Zt+NvTNNA33QzwGLdZz/oZfFswQKs4b/B/YB97J8VkTNcehf57FKLSqzawG6/ouRKv+QZY5kvzmew==", + "version": "6.21.1-fb-issue51620.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-6.21.1-fb-issue51620.0.tgz", + "integrity": "sha512-pDCvgJfc8dB53Bw9fuPSbUvYBNbqamzyZjXHMVaaqAM98NIcliyfqQIB/nqTO2NGPhI9BnREx1YBuDtMgDMk1w==", "dependencies": { "@hello-pangea/dnd": "17.0.0", "@labkey/api": "1.37.0", diff --git a/core/package.json b/core/package.json index 9117b57dae4..ad92905dcf9 100644 --- a/core/package.json +++ b/core/package.json @@ -54,7 +54,7 @@ } }, "dependencies": { - "@labkey/components": "6.21.1", + "@labkey/components": "6.21.1-fb-issue51620.0", "@labkey/themes": "1.4.0" }, "devDependencies": { diff --git a/core/src/org/labkey/core/CoreModule.java b/core/src/org/labkey/core/CoreModule.java index 81b21e805dc..62e1412966b 100644 --- a/core/src/org/labkey/core/CoreModule.java +++ b/core/src/org/labkey/core/CoreModule.java @@ -1339,6 +1339,7 @@ public JSONObject getPageContextJson(ContainerUser context) { JSONObject json = new JSONObject(getDefaultPageContextJson(context.getContainer())); json.put("productFeatures", ProductRegistry.getProductFeatureSet()); + json.put(AppProps.DEPRECATED_OBJECT_LEVEL_DISCUSSIONS, AppProps.getInstance().isOptionalFeatureEnabled(AppProps.DEPRECATED_OBJECT_LEVEL_DISCUSSIONS)); return json; } From a4d9333fa15dab0e40c823598dd4a1ef8d5f5c71 Mon Sep 17 00:00:00 2001 From: rosalinep Date: Wed, 5 Feb 2025 12:25:22 -0800 Subject: [PATCH 3/5] Fix small bug --- .../org/labkey/announcements/model/DiscussionServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/announcements/src/org/labkey/announcements/model/DiscussionServiceImpl.java b/announcements/src/org/labkey/announcements/model/DiscussionServiceImpl.java index 79db071d2ff..5cc9e0308e7 100644 --- a/announcements/src/org/labkey/announcements/model/DiscussionServiceImpl.java +++ b/announcements/src/org/labkey/announcements/model/DiscussionServiceImpl.java @@ -132,7 +132,7 @@ public DiscussionService.DiscussionView getDiscussionArea(ViewContext context, S @Nullable public DiscussionService.DiscussionView getDiscussionArea(Container c, User user, URLHelper currentURL, String objectId, ActionURL pageURL, String newDiscussionTitle, boolean allowMultipleDiscussions, boolean displayFirstDiscussionByDefault) { - if (!LookAndFeelProperties.getInstance(c).isDiscussionEnabled() && !AppProps.getInstance().isOptionalFeatureEnabled(AppProps.DEPRECATED_OBJECT_LEVEL_DISCUSSIONS)) + if (!LookAndFeelProperties.getInstance(c).isDiscussionEnabled() || !AppProps.getInstance().isOptionalFeatureEnabled(AppProps.DEPRECATED_OBJECT_LEVEL_DISCUSSIONS)) return null; // get discussion parameters From 2be4f3fc6415a379ba4a0716840666d6e9f4ea1d Mon Sep 17 00:00:00 2001 From: rosalinep Date: Thu, 6 Feb 2025 08:57:58 -0800 Subject: [PATCH 4/5] Remove unused action --- .../labkey/core/admin/AdminController.java | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/core/src/org/labkey/core/admin/AdminController.java b/core/src/org/labkey/core/admin/AdminController.java index 6837f2ae432..964d4fee31f 100644 --- a/core/src/org/labkey/core/admin/AdminController.java +++ b/core/src/org/labkey/core/admin/AdminController.java @@ -9478,33 +9478,6 @@ public void addNavTrail(NavTree root) } } - public static class DeprecatedFlagForm - { - private String featureName; - - public String getFeatureName() - { - return featureName; - } - - public void setFeatureName(String featureName) - { - this.featureName = featureName; - } - } - - @RequiresPermission(ReadPermission.class) - public static class DeprecatedFlagAction extends ReadOnlyApiAction - { - @Override - public ApiResponse execute(DeprecatedFlagForm form, BindException errors) - { - ApiSimpleResponse ret = new ApiSimpleResponse(); - ret.put("response", AppProps.getInstance().isOptionalFeatureEnabled(form.getFeatureName())); - return ret; - } - } - @RequiresPermission(AdminOperationsPermission.class) public static class ProductFeatureAction extends BaseApiAction { From a939411451946f99f18d66a9177009bd58b5918f Mon Sep 17 00:00:00 2001 From: rosalinep Date: Fri, 7 Feb 2025 08:20:33 -0800 Subject: [PATCH 5/5] Finalize --- core/package-lock.json | 8 ++++---- core/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 244bffe39bd..ff580b553f8 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -8,7 +8,7 @@ "name": "labkey-core", "version": "0.0.0", "dependencies": { - "@labkey/components": "6.21.3", + "@labkey/components": "6.22.0", "@labkey/themes": "1.4.0" }, "devDependencies": { @@ -3058,9 +3058,9 @@ } }, "node_modules/@labkey/components": { - "version": "6.21.3", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-6.21.3.tgz", - "integrity": "sha512-BRJ/h+vB+ZFfGMSYyX91HVUd12yMsm/rCrDzNtMKiAxhI+Awpo6gBkjE9t1PzAwE6ywNxEzayKs0VgDnJi1cxA==", + "version": "6.22.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-6.22.0.tgz", + "integrity": "sha512-XdfBhCOCc/AFhguBNEd19QUZhFJCe51gsR65WuFF9M3VWgZGE/OUKw5Hjpb8Z6u7D5yACAThG7Jh6nIPsovbRQ==", "dependencies": { "@hello-pangea/dnd": "17.0.0", "@labkey/api": "1.37.0", diff --git a/core/package.json b/core/package.json index 67367176a97..e8a3d83a018 100644 --- a/core/package.json +++ b/core/package.json @@ -54,7 +54,7 @@ } }, "dependencies": { - "@labkey/components": "6.21.3", + "@labkey/components": "6.22.0", "@labkey/themes": "1.4.0" }, "devDependencies": {