Index: lams_tool_forum/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -rbc12c2abaca628653b04c61059b63f9d45fb4090 -r57866bdc14371374aa386fcbec9394604a0d9b2a --- lams_tool_forum/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision bc12c2abaca628653b04c61059b63f9d45fb4090) +++ lams_tool_forum/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 57866bdc14371374aa386fcbec9394604a0d9b2a) @@ -235,4 +235,5 @@ label.number.of.posts =Number of posts label.number.of.replies =Number of replies +label.latest.posting =The latest posting #======= End labels: Exported 226 labels for en AU ===== Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumUserDao.java =================================================================== diff -u -rbc12c2abaca628653b04c61059b63f9d45fb4090 -r57866bdc14371374aa386fcbec9394604a0d9b2a --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumUserDao.java (.../ForumUserDao.java) (revision bc12c2abaca628653b04c61059b63f9d45fb4090) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumUserDao.java (.../ForumUserDao.java) (revision 57866bdc14371374aa386fcbec9394604a0d9b2a) @@ -44,10 +44,9 @@ private static final String SQL_QUERY_FIND_BY_SESSION_AND_QUESTION_LIMIT = "from user in class ForumUser " + "where user.session.sessionId=:sessionId order by "; - private static final String SQL_QUERY_FIND_BY_SESSION_LIMIT_ORDER_BY_NUM_POSTS = "SELECT user, COUNT(message.uid) AS postCount FROM " - + Message.class.getName() + " as message " - + " RIGHT JOIN ForumUser as user " - + " WHERE user.session.sessionId=:sessionId GROUP BY user.userId ORDER BY postCount "; + private static final String SQL_QUERY_FIND_BY_SESSION_LIMIT_ORDER_BY_NUM_POSTS = "SELECT user FROM " + + Message.class.getName() + " as message " + " RIGHT JOIN message.createdBy as user " + + " WHERE user.session.sessionId=:sessionId GROUP BY user.userId ORDER BY "; private static final String GET_COUNT_RESPONSES_FOR_SESSION_AND_QUESTION = "SELECT COUNT(*) from " + ForumUser.class.getName() + " as user where user.session.sessionId=?"; @@ -95,25 +94,33 @@ case ForumConstants.SORT_BY_USER_NAME_DESC: sortingOrder = "user.lastName DESC, user.firstName DESC"; break; + case ForumConstants.SORT_BY_LAST_POSTING_ASC: + sortingOrder = " message.body ASC"; + break; + case ForumConstants.SORT_BY_LAST_POSTING_DESC: + sortingOrder = " message.body DESC"; + break; case ForumConstants.SORT_BY_NUMBER_OF_POSTS_ASC: - sortingOrder = "ASC"; + sortingOrder = " COUNT(message) ASC"; break; case ForumConstants.SORT_BY_NUMBER_OF_POSTS_DESC: - sortingOrder = "DESC"; + sortingOrder = " COUNT(message) DESC"; break; } if (sorting == ForumConstants.SORT_BY_NUMBER_OF_POSTS_ASC || sorting == ForumConstants.SORT_BY_NUMBER_OF_POSTS_DESC) { - - String SQL_QUERY_FIND_BY_SESSION_LIMIT_ORDER_BY_NUM_POSTS = "SELECT user FROM " - + Message.class.getName() + " as message " - + " RIGHT JOIN message.createdBy as user " - + " WHERE user.session.sessionId=:sessionId GROUP BY user.userId ORDER BY COUNT(message) "; List list = getSession().createQuery(SQL_QUERY_FIND_BY_SESSION_LIMIT_ORDER_BY_NUM_POSTS + sortingOrder) .setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size).list(); + return list; + } else if (sorting == ForumConstants.SORT_BY_LAST_POSTING_ASC + || sorting == ForumConstants.SORT_BY_LAST_POSTING_DESC) { + + List list = getSession().createQuery(SQL_QUERY_FIND_BY_SESSION_LIMIT_ORDER_BY_NUM_POSTS + sortingOrder) + .setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size).list(); + return list; } else { Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java =================================================================== diff -u -rbc12c2abaca628653b04c61059b63f9d45fb4090 -r57866bdc14371374aa386fcbec9394604a0d9b2a --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java (.../ForumConstants.java) (revision bc12c2abaca628653b04c61059b63f9d45fb4090) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java (.../ForumConstants.java) (revision 57866bdc14371374aa386fcbec9394604a0d9b2a) @@ -37,8 +37,10 @@ public static final int SORT_BY_NO = 0; public static final int SORT_BY_USER_NAME_ASC = 1; public static final int SORT_BY_USER_NAME_DESC = 2; - public static final int SORT_BY_NUMBER_OF_POSTS_ASC = 3; - public static final int SORT_BY_NUMBER_OF_POSTS_DESC = 4; + public static final int SORT_BY_LAST_POSTING_ASC = 3; + public static final int SORT_BY_LAST_POSTING_DESC = 4; + public static final int SORT_BY_NUMBER_OF_POSTS_ASC = 5; + public static final int SORT_BY_NUMBER_OF_POSTS_DESC = 6; // See LDEV652 // For old style (Fiona's description): The oldest topic is at the top, does not depends the reply date etc. Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/MessageDTOByDateComparator.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/MessageDTOByDateComparator.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/MessageDTOByDateComparator.java (revision 57866bdc14371374aa386fcbec9394604a0d9b2a) @@ -0,0 +1,54 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.forum.util; + +import java.util.Comparator; +import java.util.Date; + +import org.lamsfoundation.lams.tool.forum.dto.MessageDTO; + +/** + * Topics comparator, compares by post date. + * + * @author Andrey Balan + */ +public class MessageDTOByDateComparator implements Comparator { + + @Override + public int compare(MessageDTO o1, MessageDTO o2) { + if (o1 != null && o2 != null) { + Date o1Date = (o1.getMessage().getUpdated() == null) ? o1.getMessage().getCreated() : o1.getMessage() + .getUpdated(); + Date o2Date = (o2.getMessage().getUpdated() == null) ? o2.getMessage().getCreated() : o2.getMessage() + .getUpdated(); + + return o1Date.compareTo(o2Date); + } else if (o1 != null) { + return 1; + } else { + return -1; + } + } + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/MessageDtoComparator.java =================================================================== diff -u -r2dbea686e81e6a5843328d8c0bd814b63e64d36f -r57866bdc14371374aa386fcbec9394604a0d9b2a --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/MessageDtoComparator.java (.../MessageDtoComparator.java) (revision 2dbea686e81e6a5843328d8c0bd814b63e64d36f) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/MessageDtoComparator.java (.../MessageDtoComparator.java) (revision 57866bdc14371374aa386fcbec9394604a0d9b2a) @@ -35,9 +35,7 @@ */ public class MessageDtoComparator implements Comparator { - /** - * {@inheritDoc} - */ + @Override public int compare(MessageDTO o1, MessageDTO o2) { if (o1 != null && o2 != null) { return o1.getMessage().getSequenceId() - o2.getMessage().getSequenceId(); Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java =================================================================== diff -u -rbc12c2abaca628653b04c61059b63f9d45fb4090 -r57866bdc14371374aa386fcbec9394604a0d9b2a --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java (.../MonitoringAction.java) (revision bc12c2abaca628653b04c61059b63f9d45fb4090) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java (.../MonitoringAction.java) (revision 57866bdc14371374aa386fcbec9394604a0d9b2a) @@ -29,6 +29,7 @@ import java.io.IOException; import java.io.PrintWriter; import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -76,6 +77,8 @@ import org.lamsfoundation.lams.tool.forum.util.ForumConstants; import org.lamsfoundation.lams.tool.forum.util.ForumUserComparator; import org.lamsfoundation.lams.tool.forum.util.ForumWebUtils; +import org.lamsfoundation.lams.tool.forum.util.MessageDTOByDateComparator; +import org.lamsfoundation.lams.tool.forum.util.MessageDtoComparator; import org.lamsfoundation.lams.tool.forum.util.SessionDTOComparator; import org.lamsfoundation.lams.tool.forum.web.forms.ForumForm; import org.lamsfoundation.lams.tool.forum.web.forms.MarkForm; @@ -190,8 +193,7 @@ List sessions = forumService.getSessionsByContentId(toolContentId); - Set sessionDtos = new TreeSet( - new SessionDTOComparator()); + Set sessionDtos = new TreeSet(new SessionDTOComparator()); // build a map with all users in the forumSessionList for (ForumToolSession session : sessions) { SessionDTO sessionDto = new SessionDTO(); @@ -224,32 +226,44 @@ public ActionForward getUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse res) throws IOException, ServletException, JSONException { forumService = getForumService(); + HttpSession ss = SessionManager.getSession(); + org.lamsfoundation.lams.usermanagement.dto.UserDTO teacher = (org.lamsfoundation.lams.usermanagement.dto.UserDTO) ss + .getAttribute(AttributeNames.USER); + TimeZone teacherTimeZone = teacher.getTimeZone(); Long sessionId = WebUtil.readLongParam(request, "sessionId"); Boolean isReflectOnActivity = WebUtil.readBooleanParam(request, "isReflectOnActivity"); + Boolean isAllowRichEditor = WebUtil.readBooleanParam(request, "isAllowRichEditor"); // paging parameters of tablesorter int size = WebUtil.readIntParam(request, "size"); int page = WebUtil.readIntParam(request, "page"); Integer isSort1 = WebUtil.readIntParam(request, "column[0]", true); Integer isSort2 = WebUtil.readIntParam(request, "column[1]", true); + Integer isSort3 = WebUtil.readIntParam(request, "column[2]", true); int sorting = ForumConstants.SORT_BY_NO; if ((isSort1 != null) && isSort1.equals(0)) { sorting = ForumConstants.SORT_BY_USER_NAME_ASC; - + } else if ((isSort1 != null) && isSort1.equals(1)) { sorting = ForumConstants.SORT_BY_USER_NAME_DESC; - + } else if ((isSort2 != null) && isSort2.equals(0)) { - sorting = ForumConstants.SORT_BY_NUMBER_OF_POSTS_ASC; - + sorting = ForumConstants.SORT_BY_LAST_POSTING_ASC; + } else if ((isSort2 != null) && isSort2.equals(1)) { + sorting = ForumConstants.SORT_BY_LAST_POSTING_DESC; + + } else if ((isSort3 != null) && isSort3.equals(0)) { + sorting = ForumConstants.SORT_BY_NUMBER_OF_POSTS_ASC; + + } else if ((isSort3 != null) && isSort3.equals(1)) { sorting = ForumConstants.SORT_BY_NUMBER_OF_POSTS_DESC; } List users = forumService.getUsersForTablesorter(sessionId, page, size, sorting); - + // sort and create DTO list List topics = forumService.getAllTopicsFromSession(sessionId); Map> topicsByUser = getTopicsSortedByAuthor(topics); @@ -267,8 +281,28 @@ int numberOfPosts = 0; boolean isAnyPostsMarked = false; - List messages = topicsByUser.get(user); - if (messages != null && messages.size() > 0) { + if (topicsByUser.get(user) != null) { + + // sort messages by date + TreeSet messages = new TreeSet(new MessageDTOByDateComparator()); + messages.addAll(topicsByUser.get(user)); + + //encode lastMessage suitable for tablesorter + MessageDTO lastMessage = messages.last(); + String lastMessageText = lastMessage.getMessage().getBody(); + lastMessageText = StringEscapeUtils.escapeCsv(lastMessageText); + if (isAllowRichEditor && lastMessageText.startsWith("\"") && lastMessageText.length()>2) { + lastMessageText = lastMessageText.substring(1, lastMessageText.length()-1); + } + responseRow.put("lastMessage", lastMessageText); + + //format lastEdited date + Date lastEdited = (lastMessage.getMessage().getUpdated() == null) ? lastMessage.getMessage() + .getCreated() : lastMessage.getMessage().getUpdated(); + lastEdited = DateUtil.convertToTimeZoneFromDefault(teacherTimeZone, lastEdited); + DateFormat dateFormatter = new SimpleDateFormat("d-MMM-yyyy h:mm a"); + responseRow.put("lastEdited", dateFormatter.format(lastEdited)); + numberOfPosts = messages.size(); for (MessageDTO message : messages) { if (message.getMark() != null) { @@ -619,7 +653,7 @@ forumService = getForumService(); List messages = forumService.getMessagesByUserUid(userUid, sessionId); request.setAttribute(ForumConstants.ATTR_MESSAGES, messages); - + ForumUser user = forumService.getUser(userUid); request.setAttribute(ForumConstants.ATTR_USER, user); @@ -638,7 +672,8 @@ private ActionForward editMark(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { MarkForm markForm = (MarkForm) form; - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(markForm.getSessionMapID()); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + markForm.getSessionMapID()); String updateMode = (String) sessionMap.get(ForumConstants.PARAM_UPDATE_MODE); // view forum mode if (StringUtils.isBlank(updateMode)) { @@ -727,7 +762,8 @@ msg.setReport(report); } - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(markForm.getSessionMapID()); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + markForm.getSessionMapID()); Long sessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); String updateMode = (String) sessionMap.get(ForumConstants.PARAM_UPDATE_MODE); Index: lams_tool_forum/web/jsps/monitoring/summary.jsp =================================================================== diff -u -rbc12c2abaca628653b04c61059b63f9d45fb4090 -r57866bdc14371374aa386fcbec9394604a0d9b2a --- lams_tool_forum/web/jsps/monitoring/summary.jsp (.../summary.jsp) (revision bc12c2abaca628653b04c61059b63f9d45fb4090) +++ lams_tool_forum/web/jsps/monitoring/summary.jsp (.../summary.jsp) (revision 57866bdc14371374aa386fcbec9394604a0d9b2a) @@ -28,6 +28,12 @@ width: 97%; margin-left: 10px; } + + .posted-date { + font-size: 10px; + color: #666; + padding-left: 30px; + }