From 93185ec0563e96eeda7e83a94b3183a73f8fab5a Mon Sep 17 00:00:00 2001 From: gortiz-dotcms Date: Thu, 12 Sep 2024 20:24:49 -0300 Subject: [PATCH 1/7] fix: aded functionality to transform the dot assets to file assets readable (#29238) --- .../transform/strategy/FileViewStrategy.java | 2 +- .../fileassets/business/FileAssetAPI.java | 2 +- .../fileassets/business/FileAssetAPIImpl.java | 36 +++++++++++++++++-- .../workflows/business/WorkflowAPI.java | 2 +- .../workflows/business/WorkflowAPIImpl.java | 4 +-- .../ext/workflows/view_workflow_task.jsp | 10 ++++-- .../Task05200WorkflowTaskUniqueKeyTest.java | 5 +-- 7 files changed, 50 insertions(+), 11 deletions(-) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/transform/strategy/FileViewStrategy.java b/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/transform/strategy/FileViewStrategy.java index be2202cc0505..ac46be743e8b 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/transform/strategy/FileViewStrategy.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/transform/strategy/FileViewStrategy.java @@ -175,7 +175,7 @@ public Map transform(final Field field, final Contentlet content * @return the fileAsset * @throws DotDataException if the content type is not found */ - private FileAsset convertToFileAsset(final Contentlet dotAsset, final FileAssetAPI api) throws DotDataException { + public static FileAsset convertToFileAsset(final Contentlet dotAsset, final FileAssetAPI api) throws DotDataException { final ContentType contentType = Try.of(()->APILocator.getContentTypeAPI(APILocator.systemUser()).find("FileAsset")).getOrNull(); diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java index d5606331ca45..61bd0d785500 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java @@ -77,7 +77,7 @@ public List findFileAssetsByParentable(final Parentable parent, * @return * @throws DotStateException */ - List fromContentletsI(List cons) throws DotStateException; + List fromContentletsI(List cons, User user) throws DotStateException, DotDataException, DotSecurityException; /** * diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java index 4d6726c17396..12a78fce118b 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java @@ -1,11 +1,15 @@ package com.dotmarketing.portlets.fileassets.business; import com.dotcms.api.tree.Parentable; +import com.dotcms.api.web.HttpServletRequestThreadLocal; import com.dotcms.browser.BrowserQuery; import com.dotcms.content.elasticsearch.business.event.ContentletCheckinEvent; import com.dotcms.content.elasticsearch.business.event.ContentletDeletedEvent; +import com.dotcms.contenttype.model.type.ContentType; import com.dotcms.system.event.local.business.LocalSystemEventsAPI; import com.dotcms.system.event.local.model.EventSubscriber; +import com.dotmarketing.portlets.contentlet.model.ResourceLink; +import com.dotmarketing.portlets.contentlet.transform.strategy.FileViewStrategy; import com.dotmarketing.portlets.folders.business.FolderAPIImpl; import com.dotmarketing.portlets.structure.model.Field.DataType; import java.io.ByteArrayInputStream; @@ -15,6 +19,7 @@ import java.io.InputStream; import java.nio.file.Files; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Predicate; @@ -62,6 +67,15 @@ import com.liferay.util.StringPool; import io.vavr.control.Try; +import javax.servlet.http.HttpServletRequest; + +import static com.dotmarketing.portlets.contentlet.transform.strategy.TransformOptions.LOAD_META; +import static com.dotmarketing.portlets.contentlet.transform.strategy.TransformOptions.USE_ALIAS; +import static com.dotmarketing.util.UtilHTML.getIconClass; +import static com.dotmarketing.util.UtilHTML.getStatusIcons; +import static com.dotmarketing.util.UtilMethods.*; +import static com.liferay.util.StringPool.BLANK; + /** * This class is a bridge impl that will support the older * com.dotmarketing.portlets.file.model.File as well as the new Contentlet based @@ -303,15 +317,33 @@ public List fromContentlets(final List contentlets) { } - public List fromContentletsI(final List contentlets) { + public List fromContentletsI(final List contentlets, User user) throws DotDataException, DotSecurityException { final List fileAssets = new ArrayList<>(); for (Contentlet con : contentlets) { - fileAssets.add(fromContentlet(con)); + if (con.isDotAsset()) { + + fileAssets.add(transformDotAsset(con, user)); + } else { + fileAssets.add(fromContentlet(con)); + } } return fileAssets; } + private FileAsset transformDotAsset(Contentlet con, User user) throws DotDataException, DotSecurityException { + con.setProperty(FileAssetAPI.BINARY_FIELD, Try.of(()->con.getBinary("asset")).getOrNull()); + + FileAsset fileAsset = FileViewStrategy.convertToFileAsset(con, this); + + final HttpServletRequest request = HttpServletRequestThreadLocal.INSTANCE.getRequest(); + final String fileLink = new ResourceLink.ResourceLinkBuilder().getFileLink(request, user, fileAsset, "fileAsset"); + + fileAsset.getMap().put("fileLink", fileLink); + + return fileAsset; + } + @CloseDBIfOpened public FileAssetMap fromFileAsset(final FileAsset fileAsset) throws DotStateException { try { diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPI.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPI.java index d4ef60611c0a..bc27f45cab98 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPI.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPI.java @@ -223,7 +223,7 @@ public interface WorkflowAPI { * @return * @throws DotDataException */ - public List findWorkflowTaskFilesAsContent(WorkflowTask task, User user) throws DotDataException; + public List findWorkflowTaskFilesAsContent(WorkflowTask task, User user) throws DotDataException, DotSecurityException; /** * diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java index 94aed1f18342..660e65ae08b7 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java @@ -1403,10 +1403,10 @@ public WorkflowTask findWorkFlowTaskById(final String id) throws DotDataExceptio @Override @CloseDBIfOpened - public List findWorkflowTaskFilesAsContent(final WorkflowTask task, final User user) throws DotDataException { + public List findWorkflowTaskFilesAsContent(final WorkflowTask task, final User user) throws DotDataException, DotSecurityException { final List contents = workFlowFactory.findWorkflowTaskFilesAsContent(task, user); - return APILocator.getFileAssetAPI().fromContentletsI(contents); + return APILocator.getFileAssetAPI().fromContentletsI(contents, user); } @Override diff --git a/dotCMS/src/main/webapp/html/portlet/ext/workflows/view_workflow_task.jsp b/dotCMS/src/main/webapp/html/portlet/ext/workflows/view_workflow_task.jsp index 2db293fd148b..faa9c3b91348 100644 --- a/dotCMS/src/main/webapp/html/portlet/ext/workflows/view_workflow_task.jsp +++ b/dotCMS/src/main/webapp/html/portlet/ext/workflows/view_workflow_task.jsp @@ -19,6 +19,8 @@ <%@ page import="com.dotmarketing.portlets.workflows.business.WorkflowAPI" %> <%@page import="java.util.Date" %> <%@page import="java.util.Optional" %> +<%@ page import="com.liferay.portal.language.LanguageUtil" %> +<%@ page import="com.dotmarketing.portlets.fileassets.business.FileAsset" %> <%! @@ -404,10 +406,14 @@ public String getGravatar(String postedBy){ str_style="class=\"alternate_2\""; } x++; + FileAsset fileAsset = null; + if (file instanceof FileAsset){ + fileAsset = (FileAsset) file; + } %> > - - <%= file.getFileName() %> + " target="_blank"> + <%= (fileAsset != null && fileAsset.getMap().get("fileLink") != null) ? fileAsset.getUnderlyingFileName() : file.getFileName() %> diff --git a/dotcms-integration/src/test/java/com/dotmarketing/startup/runonce/Task05200WorkflowTaskUniqueKeyTest.java b/dotcms-integration/src/test/java/com/dotmarketing/startup/runonce/Task05200WorkflowTaskUniqueKeyTest.java index cfc49646fc2b..1c7637a8a654 100644 --- a/dotcms-integration/src/test/java/com/dotmarketing/startup/runonce/Task05200WorkflowTaskUniqueKeyTest.java +++ b/dotcms-integration/src/test/java/com/dotmarketing/startup/runonce/Task05200WorkflowTaskUniqueKeyTest.java @@ -11,6 +11,7 @@ import com.dotmarketing.common.db.DotConnect; import com.dotmarketing.db.DbConnectionFactory; import com.dotmarketing.exception.DotDataException; +import com.dotmarketing.exception.DotSecurityException; import com.dotmarketing.portlets.contentlet.model.Contentlet; import com.dotmarketing.portlets.languagesmanager.model.Language; import com.dotmarketing.portlets.workflows.business.SystemWorkflowConstants; @@ -67,7 +68,7 @@ public void Test_Upgrade_Task() throws DotDataException { } @Test - public void Test_Upgrade_Task_When_Duped_WorkflowTasks_Exists() throws DotDataException { + public void Test_Upgrade_Task_When_Duped_WorkflowTasks_Exists() throws DotDataException, DotSecurityException { removeConstraintIfAny(); @@ -155,7 +156,7 @@ private void saveWorkflowTask(final WorkflowTask task) throws DotDataException { } @Test - public void Test_Upgrade_Task_When_Duped_With_Null_Languages_WorkflowTasks_Exists() throws DotDataException { + public void Test_Upgrade_Task_When_Duped_With_Null_Languages_WorkflowTasks_Exists() throws DotDataException, DotSecurityException { removeConstraintIfAny(); From 8075004dada22a26b474a89dbbdc473c7a641d70 Mon Sep 17 00:00:00 2001 From: gortiz-dotcms Date: Fri, 13 Sep 2024 12:35:53 -0300 Subject: [PATCH 2/7] chore: modified access to system user to avoid changing the method parameters (#29238) --- .../portlets/fileassets/business/FileAssetAPI.java | 2 +- .../portlets/fileassets/business/FileAssetAPIImpl.java | 8 ++++---- .../portlets/workflows/business/WorkflowAPIImpl.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java index 61bd0d785500..495fe897e7ca 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java @@ -77,7 +77,7 @@ public List findFileAssetsByParentable(final Parentable parent, * @return * @throws DotStateException */ - List fromContentletsI(List cons, User user) throws DotStateException, DotDataException, DotSecurityException; + List fromContentletsI(List cons) throws DotStateException, DotDataException, DotSecurityException; /** * diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java index 12a78fce118b..ab90258fbb79 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java @@ -317,12 +317,12 @@ public List fromContentlets(final List contentlets) { } - public List fromContentletsI(final List contentlets, User user) throws DotDataException, DotSecurityException { + public List fromContentletsI(final List contentlets) throws DotDataException, DotSecurityException { final List fileAssets = new ArrayList<>(); for (Contentlet con : contentlets) { if (con.isDotAsset()) { - fileAssets.add(transformDotAsset(con, user)); + fileAssets.add(transformDotAsset(con)); } else { fileAssets.add(fromContentlet(con)); } @@ -331,13 +331,13 @@ public List fromContentletsI(final List contentlets, Use } - private FileAsset transformDotAsset(Contentlet con, User user) throws DotDataException, DotSecurityException { + private FileAsset transformDotAsset(Contentlet con) throws DotDataException, DotSecurityException { con.setProperty(FileAssetAPI.BINARY_FIELD, Try.of(()->con.getBinary("asset")).getOrNull()); FileAsset fileAsset = FileViewStrategy.convertToFileAsset(con, this); final HttpServletRequest request = HttpServletRequestThreadLocal.INSTANCE.getRequest(); - final String fileLink = new ResourceLink.ResourceLinkBuilder().getFileLink(request, user, fileAsset, "fileAsset"); + final String fileLink = new ResourceLink.ResourceLinkBuilder().getFileLink(request, APILocator.systemUser(), fileAsset, "fileAsset"); fileAsset.getMap().put("fileLink", fileLink); diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java index 660e65ae08b7..4c2923839d7a 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java @@ -1406,7 +1406,7 @@ public WorkflowTask findWorkFlowTaskById(final String id) throws DotDataExceptio public List findWorkflowTaskFilesAsContent(final WorkflowTask task, final User user) throws DotDataException, DotSecurityException { final List contents = workFlowFactory.findWorkflowTaskFilesAsContent(task, user); - return APILocator.getFileAssetAPI().fromContentletsI(contents, user); + return APILocator.getFileAssetAPI().fromContentletsI(contents); } @Override From 053558cfa70303e665d428d1081eac4769d8064c Mon Sep 17 00:00:00 2001 From: gortiz-dotcms Date: Fri, 13 Sep 2024 14:30:30 -0300 Subject: [PATCH 3/7] test: added test (#29238) --- .../workflows/business/WorkflowAPITest.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/dotcms-integration/src/test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java b/dotcms-integration/src/test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java index f3e632311262..74824eeb0d18 100644 --- a/dotcms-integration/src/test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java +++ b/dotcms-integration/src/test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java @@ -1,6 +1,7 @@ package com.dotmarketing.portlets.workflows.business; import com.dotcms.IntegrationTestBase; +import com.dotcms.api.web.HttpServletRequestThreadLocal; import com.dotcms.business.WrapInTransaction; import com.dotcms.content.elasticsearch.business.event.ContentletCheckinEvent; import com.dotcms.contenttype.business.ContentTypeAPIImpl; @@ -23,6 +24,7 @@ import com.dotcms.datagen.UserDataGen; import com.dotcms.datagen.WorkflowActionClassDataGen; import com.dotcms.datagen.WorkflowDataGen; +import com.dotcms.mock.request.MockInternalRequest; import com.dotcms.system.event.local.model.EventSubscriber; import com.dotcms.util.CollectionsUtils; import com.dotcms.util.IntegrationTestInitService; @@ -45,6 +47,8 @@ import com.dotmarketing.portlets.contentlet.model.Contentlet; import com.dotmarketing.portlets.contentlet.model.ContentletDependencies; import com.dotmarketing.portlets.contentlet.model.IndexPolicy; +import com.dotmarketing.portlets.fileassets.business.FileAsset; +import com.dotmarketing.portlets.fileassets.business.IFileAsset; import com.dotmarketing.portlets.folders.business.FolderAPI; import com.dotmarketing.portlets.languagesmanager.business.LanguageDeletedEvent; import com.dotmarketing.portlets.languagesmanager.model.Language; @@ -4847,4 +4851,51 @@ public void findActionletsInWorkflowActionByClassNameAsString() throws DotDataEx } } + + /** + * Method to test: This test tries the {@link WorkflowAPIImpl#findWorkflowTaskFilesAsContent(WorkflowTask, User)} + * Given Scenario: Attaching a file to a workflow task when it is a dotAsset + * ExpectedResult: The addition of the dotAsset should be made without throwing exceptions and it also should add a new "fileLink" property. + */ + @Test + public void testAttachDotAssetToWorkflowTask() + throws DotDataException, DotSecurityException { + final User systemUser = APILocator.systemUser(); + final Language language = APILocator.getLanguageAPI().getDefaultLanguage(); + //final WorkflowAPI workflowAPI = APILocator.getWorkflowAPI(); + + Contentlet contentlet = null; + + try { + contentlet = TestDataUtils.getPageContent(true, language.getId()); + + //save workflow task + final WorkflowStep workflowStep = workflowAPI.findStep( + SystemWorkflowConstants.WORKFLOW_NEW_STEP_ID); + workflowAPI.deleteWorkflowTaskByContentletIdAnyLanguage(contentlet, systemUser); + final WorkflowTask workflowTask = workflowAPI + .createWorkflowTask(contentlet, systemUser, workflowStep, "test", "test"); + workflowAPI.saveWorkflowTask(workflowTask); + + + + //save workflow task dot asset file + final Contentlet fileAsset = TestDataUtils.getDotAssetLikeContentlet(); + workflowAPI.attachFileToTask(workflowTask, fileAsset.getInode()); + + HttpServletRequestThreadLocal.INSTANCE.setRequest(new MockInternalRequest().request()); + + List files = workflowAPI.findWorkflowTaskFilesAsContent(workflowTask, systemUser); + + assertNotNull(((FileAsset) files.get(0)).getMap().get("fileLink")); + + } finally { + if (contentlet != null && contentlet.getInode() != null) { + ContentletDataGen.destroy(contentlet); + } + + } + + } + } From a07666667a8e7496c3bf7e9e4871da5a88cdcd51 Mon Sep 17 00:00:00 2001 From: gortiz-dotcms Date: Thu, 19 Sep 2024 10:20:52 -0300 Subject: [PATCH 4/7] refactor: added a null check (#29238) --- .../portlets/fileassets/business/FileAssetAPIImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java index ab90258fbb79..d6785612b691 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java @@ -337,10 +337,11 @@ private FileAsset transformDotAsset(Contentlet con) throws DotDataException, Dot FileAsset fileAsset = FileViewStrategy.convertToFileAsset(con, this); final HttpServletRequest request = HttpServletRequestThreadLocal.INSTANCE.getRequest(); - final String fileLink = new ResourceLink.ResourceLinkBuilder().getFileLink(request, APILocator.systemUser(), fileAsset, "fileAsset"); - - fileAsset.getMap().put("fileLink", fileLink); + if (request != null) { + final String fileLink = new ResourceLink.ResourceLinkBuilder().getFileLink(request, APILocator.systemUser(), fileAsset, "fileAsset"); + fileAsset.getMap().put("fileLink", fileLink); + } return fileAsset; } From c5d82f69b686a1c9cdd685db1a835ca99f3b4671 Mon Sep 17 00:00:00 2001 From: gortiz-dotcms Date: Fri, 20 Sep 2024 17:47:20 -0300 Subject: [PATCH 5/7] chore: modify exceptions (#29238) --- .../fileassets/business/FileAssetAPI.java | 2 +- .../fileassets/business/FileAssetAPIImpl.java | 24 +++++++++++-------- .../workflows/business/WorkflowAPI.java | 3 ++- .../workflows/business/WorkflowAPIImpl.java | 2 +- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java index 02f798b7be10..ae23bbae6c60 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPI.java @@ -77,7 +77,7 @@ public List findFileAssetsByParentable(final Parentable parent, * @return * @throws DotStateException */ - List fromContentletsI(List cons) throws DotStateException, DotDataException, DotSecurityException; + List fromContentletsI(List cons) throws DotStateException; /** * diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java index 355a5f40a0f9..460cf189e2bd 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java @@ -322,7 +322,7 @@ public List fromContentlets(final List contentlets) { } - public List fromContentletsI(final List contentlets) throws DotDataException, DotSecurityException { + public List fromContentletsI(final List contentlets) { final List fileAssets = new ArrayList<>(); for (Contentlet con : contentlets) { if (con.isDotAsset()) { @@ -336,19 +336,23 @@ public List fromContentletsI(final List contentlets) thr } - private FileAsset transformDotAsset(Contentlet con) throws DotDataException, DotSecurityException { - con.setProperty(FileAssetAPI.BINARY_FIELD, Try.of(()->con.getBinary("asset")).getOrNull()); + private FileAsset transformDotAsset(Contentlet con) { + try { + con.setProperty(FileAssetAPI.BINARY_FIELD, Try.of(()->con.getBinary("asset")).getOrNull()); - FileAsset fileAsset = FileViewStrategy.convertToFileAsset(con, this); + FileAsset fileAsset = FileViewStrategy.convertToFileAsset(con, this); - final HttpServletRequest request = HttpServletRequestThreadLocal.INSTANCE.getRequest(); - if (request != null) { - final String fileLink = new ResourceLink.ResourceLinkBuilder().getFileLink(request, APILocator.systemUser(), fileAsset, "fileAsset"); + final HttpServletRequest request = HttpServletRequestThreadLocal.INSTANCE.getRequest(); + if (request != null) { + final String fileLink = new ResourceLink.ResourceLinkBuilder().getFileLink(request, APILocator.systemUser(), fileAsset, "fileAsset"); - fileAsset.getMap().put("fileLink", fileLink); + fileAsset.getMap().put("fileLink", fileLink); + } + return fileAsset; + } catch (DotDataException | DotSecurityException e) { + throw new DotRuntimeException(e); } - return fileAsset; - } + } @CloseDBIfOpened public FileAssetMap fromFileAsset(final FileAsset fileAsset) throws DotStateException { diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPI.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPI.java index bc27f45cab98..9a39f6b37ecb 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPI.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPI.java @@ -11,6 +11,7 @@ import com.dotmarketing.business.Role; import com.dotmarketing.exception.AlreadyExistException; import com.dotmarketing.exception.DotDataException; +import com.dotmarketing.exception.DotRuntimeException; import com.dotmarketing.exception.DotSecurityException; import com.dotmarketing.portlets.contentlet.business.DotContentletValidationException; import com.dotmarketing.portlets.contentlet.model.Contentlet; @@ -223,7 +224,7 @@ public interface WorkflowAPI { * @return * @throws DotDataException */ - public List findWorkflowTaskFilesAsContent(WorkflowTask task, User user) throws DotDataException, DotSecurityException; + public List findWorkflowTaskFilesAsContent(WorkflowTask task, User user) throws DotDataException; /** * diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java index 4c2923839d7a..9b4769f49af1 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowAPIImpl.java @@ -1403,7 +1403,7 @@ public WorkflowTask findWorkFlowTaskById(final String id) throws DotDataExceptio @Override @CloseDBIfOpened - public List findWorkflowTaskFilesAsContent(final WorkflowTask task, final User user) throws DotDataException, DotSecurityException { + public List findWorkflowTaskFilesAsContent(final WorkflowTask task, final User user) throws DotDataException{ final List contents = workFlowFactory.findWorkflowTaskFilesAsContent(task, user); return APILocator.getFileAssetAPI().fromContentletsI(contents); From d7ae2e46b272bf73928ac4af96683771f3d904db Mon Sep 17 00:00:00 2001 From: gortiz-dotcms Date: Thu, 26 Sep 2024 16:52:48 -0300 Subject: [PATCH 6/7] fix: fixed ui and src (#29238) --- .../portlets/contentlet/model/ResourceLink.java | 5 ++++- .../portlets/fileassets/business/FileAssetAPIImpl.java | 3 ++- .../html/portlet/ext/workflows/view_workflow_task.jsp | 9 ++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/model/ResourceLink.java b/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/model/ResourceLink.java index a03391ba576b..6415dadadf4a 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/model/ResourceLink.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/model/ResourceLink.java @@ -352,7 +352,10 @@ boolean isDownloadPermissionBasedRestricted(final Contentlet contentlet, final U public String getFileLink(final HttpServletRequest request, final User user, final Contentlet contentlet, final String field) throws DotDataException, DotSecurityException { ResourceLink link = this.build(request, user, contentlet, field); - final Host host = getHost(contentlet.getHost(), user); + Host host = getHost((String)request.getAttribute(HOST_REQUEST_ATTRIBUTE) , user); + if(null == host){ + host = getHost(contentlet.getHost(), user); + } final StringBuilder hostUrlBuilder = new StringBuilder(request.isSecure()? HTTPS_PREFIX:HTTP_PREFIX); diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java index 460cf189e2bd..d801c4be0a8f 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java @@ -344,7 +344,8 @@ private FileAsset transformDotAsset(Contentlet con) { final HttpServletRequest request = HttpServletRequestThreadLocal.INSTANCE.getRequest(); if (request != null) { - final String fileLink = new ResourceLink.ResourceLinkBuilder().getFileLink(request, APILocator.systemUser(), fileAsset, "fileAsset"); + final String fileLink = new ResourceLink.ResourceLinkBuilder().build(request, APILocator.systemUser(), fileAsset, "fileAsset").getConfiguredImageURL(); + //getFileLink(request, APILocator.systemUser(), fileAsset, "fileAsset"); fileAsset.getMap().put("fileLink", fileLink); } diff --git a/dotCMS/src/main/webapp/html/portlet/ext/workflows/view_workflow_task.jsp b/dotCMS/src/main/webapp/html/portlet/ext/workflows/view_workflow_task.jsp index faa9c3b91348..863e505849f4 100644 --- a/dotCMS/src/main/webapp/html/portlet/ext/workflows/view_workflow_task.jsp +++ b/dotCMS/src/main/webapp/html/portlet/ext/workflows/view_workflow_task.jsp @@ -412,11 +412,14 @@ public String getGravatar(String postedBy){ } %> > - " target="_blank"> - <%= (fileAsset != null && fileAsset.getMap().get("fileLink") != null) ? fileAsset.getUnderlyingFileName() : file.getFileName() %> - + " target="_blank"> + <%= (fileAsset != null && fileAsset.getMap().get("fileLink") != null) ? fileAsset.getUnderlyingFileName() : file.getFileName() %> + + + + From 393bc6c8f46a4e62b2b27cec4013943643068040 Mon Sep 17 00:00:00 2001 From: gortiz-dotcms Date: Thu, 26 Sep 2024 18:20:47 -0300 Subject: [PATCH 7/7] fix: fixed sonarqube warn --- .../portlets/fileassets/business/FileAssetAPIImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java index 36ba5dcab081..b8401a9e52ac 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/fileassets/business/FileAssetAPIImpl.java @@ -344,7 +344,7 @@ private FileAsset transformDotAsset(Contentlet con) { final HttpServletRequest request = HttpServletRequestThreadLocal.INSTANCE.getRequest(); if (request != null) { - final String fileLink = new ResourceLink.ResourceLinkBuilder().build(request, APILocator.systemUser(), fileAsset, "fileAsset").getConfiguredImageURL(); + final String fileLink = new ResourceLink.ResourceLinkBuilder().build(request, APILocator.systemUser(), fileAsset, FileAssetAPI.BINARY_FIELD).getConfiguredImageURL(); fileAsset.getMap().put("fileLink", fileLink); @@ -480,7 +480,7 @@ private String getRelativeAssetPath(String inode, String fileName) { String path = ""; path = java.io.File.separator + _inode.charAt(0) - + java.io.File.separator + _inode.charAt(1) + java.io.File.separator + _inode + java.io.File.separator + "fileAsset" + java.io.File.separator+ fileName; + + java.io.File.separator + _inode.charAt(1) + java.io.File.separator + _inode + java.io.File.separator + FileAssetAPI.BINARY_FIELD + java.io.File.separator+ fileName; return path; @@ -621,7 +621,7 @@ public String getRealAssetPath(final String inode, final String fileName, final final String fullFileName = UtilMethods.isSet(ext) ? fileName + "." + ext : fileName; final String path = ((!UtilMethods.isSet(realPath)) ? assetPath : realPath) + inode.charAt(0) + java.io.File.separator + inode.charAt(1) - + java.io.File.separator + inode+ java.io.File.separator + "fileAsset" + java.io.File.separator + fullFileName; + + java.io.File.separator + inode+ java.io.File.separator + FileAssetAPI.BINARY_FIELD + java.io.File.separator + fullFileName; if (!UtilMethods.isSet(realPath)) { return FileUtil.getRealPath(path); @@ -681,7 +681,7 @@ public String getRealAssetPath(String inode) { path = ((!UtilMethods.isSet(realPath)) ? assetPath : realPath) + _inode.charAt(0) + java.io.File.separator + _inode.charAt(1) - + java.io.File.separator + _inode+ java.io.File.separator + "fileAsset" + java.io.File.separator; + + java.io.File.separator + _inode+ java.io.File.separator + FileAssetAPI.BINARY_FIELD + java.io.File.separator; if (!UtilMethods.isSet(realPath)) return FileUtil.getRealPath(path);