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>

Reply via email to