This is an automated email from the ASF dual-hosted git repository. jleroux pushed a commit to branch release22.01 in repository https://gitbox.apache.org/repos/asf/ofbiz-plugins.git
commit aae4237d92d8ca6389e447e070aba47f8551487b Author: cshan-ecomify <117295991+cshan-ecom...@users.noreply.github.com> AuthorDate: Mon Mar 27 08:08:14 2023 +0200 Fixed: Makes Forum Articles respond to pagination controls (OFBIZ-11434) (#76) * Fixed: Makes Forum Articles respond to pagination controls (OFBIZ-11434) * Improved: Removed commented out code (OFBIZ-11434) --- ecommerce/groovyScripts/forum/ShowForum.groovy | 31 ++++++++ .../apache/ofbiz/ecommerce/forum/ForumEvents.java | 87 ++++++++++++++++++++++ ecommerce/template/forum/ForumPaging.ftl | 9 ++- ecommerce/widget/ForumScreens.xml | 18 +---- 4 files changed, 127 insertions(+), 18 deletions(-) diff --git a/ecommerce/groovyScripts/forum/ShowForum.groovy b/ecommerce/groovyScripts/forum/ShowForum.groovy new file mode 100644 index 000000000..d04160c50 --- /dev/null +++ b/ecommerce/groovyScripts/forum/ShowForum.groovy @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.ofbiz.ecommerce.forum.ForumEvents +import org.apache.ofbiz.service.ServiceUtil + +Map result = ForumEvents.getForumMessages(request, delegator) +if (ServiceUtil.isSuccess(result)) { + context.put("viewSize",result.get("viewSize")) + context.put("forumMessages", result.get("forumMessages")) + context.put("viewIndex", result.get("viewIndex")) + context.put("listSize", result.get("listSize")) + context.put("lowIndex", result.get("lowIndex")) + context.put("highIndex", result.get("highIndex")) +} diff --git a/ecommerce/src/main/java/org/apache/ofbiz/ecommerce/forum/ForumEvents.java b/ecommerce/src/main/java/org/apache/ofbiz/ecommerce/forum/ForumEvents.java new file mode 100644 index 000000000..0d60927b3 --- /dev/null +++ b/ecommerce/src/main/java/org/apache/ofbiz/ecommerce/forum/ForumEvents.java @@ -0,0 +1,87 @@ +package org.apache.ofbiz.ecommerce.forum; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.ofbiz.base.util.Debug; +import org.apache.ofbiz.base.util.UtilMisc; +import org.apache.ofbiz.base.util.UtilValidate; +import org.apache.ofbiz.entity.Delegator; +import org.apache.ofbiz.entity.GenericEntityException; +import org.apache.ofbiz.entity.GenericValue; +import org.apache.ofbiz.entity.util.EntityListIterator; +import org.apache.ofbiz.service.GenericServiceException; +import org.apache.ofbiz.service.LocalDispatcher; +import org.apache.ofbiz.service.ServiceUtil; + +public class ForumEvents { + + public static final String module = ForumEvents.class.getName(); + + public static Map<String, Object> getForumMessages(HttpServletRequest request, Delegator delegator) { + + LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher"); + // ========== Create View Indexes + int viewIndex = 0; + int viewSize = 20; + + if (UtilValidate.isNotEmpty(request.getParameter("VIEW_INDEX"))) { + Integer viewIndexInteger = Integer.parseInt(request.getParameter("VIEW_INDEX")); + if (viewIndexInteger != null) { + viewIndex = viewIndexInteger; + } + } + + if (UtilValidate.isNotEmpty(request.getParameter("VIEW_SIZE"))) { + Integer viewSizeInteger = Integer.parseInt(request.getParameter("VIEW_SIZE")); + if (viewSizeInteger != null) { + viewSize = viewSizeInteger; + } + } + + int lowIndex = viewIndex * viewSize; + int highIndex = (viewIndex + 1) * viewSize; + + // =========== Set up the PerformFindList + GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin"); + String forumId = request.getParameter("forumId"); + Map<String, Object> inputFields = new HashMap<>(); + inputFields.put("contentIdStart", forumId); + inputFields.put("caContentAssocTypeId_fld0", "PUBLISH_LINK"); + inputFields.put("caContentAssocTypeId_fld1", "RESPONSE"); + + Map<String, Object> articlesFound = null; + + try { + articlesFound = dispatcher.runSync("performFind", UtilMisc.<String, Object>toMap("entityName", + "ContentAssocViewTo", "inputFields", inputFields, "userLogin", userLogin, "orderBy", "-createdDate")); + } catch (GenericServiceException e) { + Debug.logError(e, "Cannot get ForumMessages for Forum %s", module, forumId); + return ServiceUtil.returnError("Error while searching for Messages, please retry and/or contact Admin."); + } + int start = viewIndex * viewSize; + List<GenericValue> list = null; + Integer listSize = 0; + try (EntityListIterator it = (EntityListIterator) articlesFound.get("listIt")) { + list = it.getPartialList(start + 1, viewSize); // list starts at '1' + listSize = it.getResultsSizeAfterPartialList(); + } catch (ClassCastException | NullPointerException | GenericEntityException e) { + Debug.logInfo("Problem getting partial list" + e, module); + } + + // create the result map + Map<String, Object> result = ServiceUtil.returnSuccess(); + + result.put("highIndex", highIndex); + result.put("listSize", listSize); + result.put("lowIndex", lowIndex); + result.put("viewIndex", viewIndex); + result.put("viewSize", viewSize); + result.put("forumMessages", list); + + return result; + } +} diff --git a/ecommerce/template/forum/ForumPaging.ftl b/ecommerce/template/forum/ForumPaging.ftl index 3aefe4d63..3f686e406 100644 --- a/ecommerce/template/forum/ForumPaging.ftl +++ b/ecommerce/template/forum/ForumPaging.ftl @@ -16,14 +16,15 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> - +<#assign viewSize = viewSize?default(20)> <#assign viewIndex = viewIndex?default(0)> <#assign lowIndex = viewIndex?int * viewSize?int + 1> <#assign highIndex = viewIndex?int * viewSize?int + viewSize> -<#--<br />== viewIndex: ${viewIndex} ==viewSize: ${viewSize} ==lowIndex: ${lowIndex}== highIndex: ${highIndex} == ListSize: ${listSize}--> + +<#-- <br />== viewIndex: ${viewIndex} ==viewSize: ${viewSize} ==lowIndex: ${lowIndex}== highIndex: ${highIndex} == ListSize: ${listSize} --> <#if forumMessages?has_content && forumMessages?size gt 0> - <#assign listSize = forumMessages?size/> - <#if highIndex gt listSize><#assign highIndex = listSize></#if> + <#assign listSize = listSize?default(forumMessages?size)/> + <#if highIndex gt listSize><#assign highIndex = listSize></#if> <div class="row"> <#assign r = listSize / viewSize /> <#assign viewIndexMax = Static["java.lang.Math"].ceil(r)> diff --git a/ecommerce/widget/ForumScreens.xml b/ecommerce/widget/ForumScreens.xml index 2174fec22..be9ec2523 100644 --- a/ecommerce/widget/ForumScreens.xml +++ b/ecommerce/widget/ForumScreens.xml @@ -60,20 +60,11 @@ under the License. </entity-one> <!-- parameters for the performFind service --> <set field="parameters.forumId" from-field="parameters.forumId" default-value="${parameters.contentId}"/> - <set field="viewIndex" from-field="parameters.VIEW_INDEX" type="Integer" default-value="0" /> + <set field="viewIndex" from-field="parameters.VIEW_INDEX" type="Integer" default-value="0"/> + <set field="parameters.viewIndex" from-field="viewIndex"/> <set field="viewSizeDefaultValue" value="${groovy: modelTheme.getDefaultViewSize()}" type="Integer"/> - <set field="viewSize" from-field="parameters.VIEW_SIZE" type="Integer" default-value="${viewSizeDefaultValue}"/> - <entity-condition entity-name="ContentAssocViewTo" list="forumMessages" > - <condition-list combine="and"> - <condition-expr field-name="contentIdStart" from-field="parameters.forumId"/> - <condition-list combine="or"> - <condition-expr field-name="caContentAssocTypeId" value="PUBLISH_LINK"/> - <condition-expr field-name="caContentAssocTypeId" value="RESPONSE"/> - </condition-list> - </condition-list> - <order-by field-name="createdDate"/> - - </entity-condition> + <set field="parameters.viewSize" from-field="parameters.VIEW_SIZE" type="Integer" default-value="${viewSizeDefaultValue}"/> + <script location="component://ecommerce/groovyScripts/forum/ShowForum.groovy"/> </actions> <widgets> <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}"> @@ -101,7 +92,6 @@ under the License. </section> <platform-specific><html><html-template location="component://ecommerce/template/forum/ForumPaging.ftl"/></html></platform-specific> <platform-specific><html><html-template location="component://ecommerce/template/forum/ShowForum.ftl"/></html></platform-specific> - <platform-specific><html><html-template location="component://ecommerce/template/forum/ForumPaging.ftl"/></html></platform-specific> </widgets> </section> </decorator-section>