1 41 package com.mvnforum.user; 42 43 import java.util.*; 44 import java.sql.Timestamp ; 45 46 import javax.servlet.http.HttpServletRequest ; 47 48 import net.myvietnam.mvncore.exception.*; 49 import net.myvietnam.mvncore.util.*; 50 import net.myvietnam.mvncore.web.GenericRequest; 51 52 import com.mvnforum.MVNForumConfig; 53 import com.mvnforum.MVNForumResourceBundle; 54 import com.mvnforum.auth.*; 55 import com.mvnforum.common.ActiveThread; 56 import com.mvnforum.db.*; 57 58 public class ForumWebHandler { 59 60 private OnlineUserManager userManager = OnlineUserManager.getInstance(); 61 62 public ForumWebHandler() { 63 } 64 65 public void prepareList(GenericRequest request, String requestURI) 66 throws AssertionException, DatabaseException, AuthenticationException, MissingURLMapEntryException { 67 68 Locale locale = I18nUtil.getLocaleInRequest(request); 69 70 OnlineUser onlineUser = userManager.getOnlineUser(request); 72 73 if (request.isServletRequest()) { 74 HttpServletRequest req = request.getServletRequest(); 75 Action action = new ActionInUserModule(req, requestURI); userManager.updateOnlineUserAction(req, action); 77 } 78 79 MVNForumPermission permission = onlineUser.getPermission(); 80 81 long now = DateUtil.getCurrentGMTTimestamp().getTime(); 83 Timestamp since = new Timestamp (now - DateUtil.WEEK); 84 85 if (MVNForumConfig.getEnableMostActiveMembers()) { 86 Collection mostActiveMembers = PostCache.getInstance().getMostActiveMembers(since, MVNForumConfig.getMaxActiveMembers()); 87 88 request.setAttribute("MostActiveMembers", mostActiveMembers); 89 } 90 if (MVNForumConfig.getEnableMostActiveThreads()) { 91 Collection mostActiveThreads = this.getMyMostActiveThreads(permission, since); 92 93 request.setAttribute("MostActiveThreads", mostActiveThreads); 94 } 95 96 if (MVNForumConfig.getEnableSiteStatisticsOverview()) { 97 int numberOfMembers = DAOFactory.getMemberDAO().getNumberOfMembers(); 98 Collection memberBeans = DAOFactory.getMemberDAO().getMembers_withSortSupport_limit(0, 1, "MemberID", "DESC"); 99 if (memberBeans.size() != 1) { 100 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.wrong_size", new Object [] {"MemberBeans", "==",new Integer (memberBeans.size())}); 101 throw new AssertionException(localizedMessage); 102 } 104 MemberBean memberBean = (MemberBean)memberBeans.iterator().next(); 105 106 request.setAttribute("MemberBean", memberBean); 107 request.setAttribute("NumberOfMembers", new Integer (numberOfMembers)); 108 } 109 110 boolean duplicateUsers = MVNForumConfig.getEnableDuplicateOnlineUsers(); 112 request.setAttribute("OnlineUserActions", userManager.getOnlineUserActions(0 , duplicateUsers)); } 114 115 public void prepareListIndex(GenericRequest request, String requestURI) 116 throws AssertionException, DatabaseException, 117 AuthenticationException, MissingURLMapEntryException { 118 119 Locale locale = I18nUtil.getLocaleInRequest(request); 120 121 OnlineUser onlineUser = userManager.getOnlineUser(request); 123 124 if (request.isServletRequest()) { 125 HttpServletRequest req = request.getServletRequest(); 126 Action action = new ActionInUserModule(req, requestURI); userManager.updateOnlineUserAction(req, action); 128 } 129 130 MVNForumPermission permission = onlineUser.getPermission(); 131 132 ForumCache forumCache = ForumCache.getInstance(); 133 Collection forumBeans = forumCache.getBeans(); 134 Collection cTotal = new ArrayList(); 135 136 for (Iterator forumIterator = forumBeans.iterator(); forumIterator.hasNext(); ) { 137 ForumBean forumBean = (ForumBean) forumIterator.next(); 138 139 Collection cThreadTemp = ThreadCache.getInstance().getNormalEnableThreads_inForum_withSortSupport_limit(forumBean.getForumID(), 0, 1, "ThreadLastPostDate", "DESC"); 140 if (cThreadTemp.size() == 0) { 141 continue; 142 } else if (cThreadTemp.size() > 1) { 143 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.wrong_size", new Object [] {"ThreadBeans", "<=",new Integer (cThreadTemp.size())}); 144 throw new AssertionException(localizedMessage); 145 } 147 ThreadBean threadBean = (ThreadBean) (cThreadTemp.iterator().next()); 148 149 158 PostBean postBean = PostCache.getInstance().getLastEnablePost_inThread(threadBean.getThreadID()); 159 160 Collection cGeneralInfo = new ArrayList(2); 161 cGeneralInfo.add(postBean); 162 cGeneralInfo.add(threadBean); 163 cTotal.add(cGeneralInfo); 164 } 165 166 long now = DateUtil.getCurrentGMTTimestamp().getTime(); 168 Timestamp since = new Timestamp (now - DateUtil.WEEK); 169 170 if (MVNForumConfig.getEnableMostActiveMembers()) { 171 Collection mostActiveMembers = PostCache.getInstance().getMostActiveMembers(since, MVNForumConfig.getMaxActiveMembers()); 172 173 request.setAttribute("MostActiveMembers", mostActiveMembers); 174 } 175 176 if (MVNForumConfig.getEnableMostActiveThreads()) { 177 Collection mostActiveThreads = this.getMyMostActiveThreads(permission, since); 178 179 request.setAttribute("MostActiveThreads", mostActiveThreads); 180 } 181 182 if (MVNForumConfig.getEnableSiteStatisticsOverview()) { 183 int numberOfMembers = DAOFactory.getMemberDAO().getNumberOfMembers(); 184 Collection memberBeans = DAOFactory.getMemberDAO().getMembers_withSortSupport_limit(0, 1, "MemberID", "DESC"); 185 if (memberBeans.size() != 1) { 186 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.wrong_size", new Object [] {"MemberBeans", "==",new Integer (memberBeans.size())}); 187 throw new AssertionException(localizedMessage); 188 } 190 MemberBean memberBean = (MemberBean) memberBeans.iterator().next(); 191 192 request.setAttribute("MemberBean", memberBean); 193 request.setAttribute("NumberOfMembers", new Integer (numberOfMembers)); 194 } 195 196 boolean duplicateUsers = MVNForumConfig.getEnableDuplicateOnlineUsers(); 198 request.setAttribute("OnlineUserActions", userManager.getOnlineUserActions(0 , duplicateUsers)); request.setAttribute("LastPosts", cTotal); 200 } 201 202 private Collection getMyMostActiveThreads(MVNForumPermission permission, Timestamp since) 203 throws DatabaseException { 204 205 Collection mostActiveThreads = PostCache.getInstance().getMostActiveThreads(since, MVNForumConfig.getMaxActiveThreads() + 2); 207 int remainCount = 0; 208 for (Iterator iter = mostActiveThreads.iterator(); iter.hasNext(); ) { 209 ActiveThread activeThread = (ActiveThread) iter.next(); 210 if (permission.canReadPost(activeThread.getForumID()) == false) { 211 iter.remove(); 212 } else if (++remainCount > MVNForumConfig.getMaxActiveThreads()) { 213 iter.remove(); 214 } 215 } 216 return mostActiveThreads; 217 } 218 } 219 | Popular Tags |