Index: lams_tool_preview/conf/hibernate/mappings/org/lamsfoundation/lams/tool/peerreview/model/Peerreview.hbm.xml =================================================================== diff -u -ra93929c9c7f7f0df676412691f2f8f9d44d201a2 -rd2f1cafab9126e3848663764c082b76ccf2de0c5 --- lams_tool_preview/conf/hibernate/mappings/org/lamsfoundation/lams/tool/peerreview/model/Peerreview.hbm.xml (.../Peerreview.hbm.xml) (revision a93929c9c7f7f0df676412691f2f8f9d44d201a2) +++ lams_tool_preview/conf/hibernate/mappings/org/lamsfoundation/lams/tool/peerreview/model/Peerreview.hbm.xml (.../Peerreview.hbm.xml) (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -147,6 +147,14 @@ insert="true" column="maximum_rates_per_user" /> + + getUsersForTablesorter(final Long toolSessionId, final Long excludeUserId, int page, int size, int sorting); - + + List getRatingsComments(Long toolContentId, RatingCriteria criteria, Long userId, Integer page, + Integer size, int sorting, boolean getByUser, IRatingService coreRatingService); + int getCountUsersBySession(Long toolSessionId); int createUsersForSession(PeerreviewSession session); + + } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -rd2f1cafab9126e3848663764c082b76ccf2de0c5 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java (.../PeerreviewUserDAOHibernate.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java (.../PeerreviewUserDAOHibernate.java) (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -25,8 +25,11 @@ import java.util.List; +import org.hibernate.Query; import org.hibernate.SQLQuery; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.rating.model.RatingCriteria; +import org.lamsfoundation.lams.rating.service.IRatingService; import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; import org.lamsfoundation.lams.tool.peerreview.dao.PeerreviewUserDAO; import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewSession; @@ -52,7 +55,7 @@ private static final String GET_COUNT_USERS_FOR_SESSION = "SELECT COUNT(*) FROM " + PeerreviewUser.class.getName() + " AS r WHERE r.session.sessionId=?"; - private static final String LOAD_USERS_FOR_SESSION_LIMIT = "FROM user in class PeerreviewUser " + private static final String LOAD_USERS_FOR_SESSION_LIMIT_OLD = "FROM user in class PeerreviewUser " + "WHERE user.session.sessionId=:toolSessionId AND user.userId!=:excludeUserId order by "; @Override @@ -124,11 +127,14 @@ break; } - return getSession().createQuery(LOAD_USERS_FOR_SESSION_LIMIT + sortingOrder) + return getSession().createQuery(LOAD_USERS_FOR_SESSION_LIMIT_OLD + sortingOrder) .setLong("toolSessionId", toolSessionId.longValue()).setLong("excludeUserId", excludeUserId.longValue()) .setFirstResult(page * size).setMaxResults(size).list(); } + private static final String LOAD_USERS_FOR_SESSION_LIMIT = "FROM user in class PeerreviewUser " + + "WHERE user.session.sessionId=:toolSessionId AND user.userId!=:excludeUserId order by "; + private static final String CREATE_USERS = "INSERT into tl_laprev11_user (user_id, login_name, first_name, last_name, session_finished, session_uid) " + " SELECT user.user_id, user.login, user.first_name, user.last_name, 0, :session_uid " + " FROM lams_user user " + " JOIN lams_user_group ug ON ug.user_id = user.user_id " @@ -145,4 +151,59 @@ query.setLong("session_uid", session.getUid()).setLong("tool_session_id", session.getSessionId()); return query.executeUpdate(); } + + // column order is very important. The potential itemId must be first, followed by rating.*, + // and the user's first name and last name must be the last two columns or the DTO conversion will fail. + // See PeerreviewServiceImpl.getUsersRatingsCommentsByCriteriaId + private static final String FIND_USER_RATINGS_COMMENTS1 = "SELECT user.user_id, rating.*, user.first_name, user.last_name " + + " FROM tl_laprev11_peerreview p " + + " JOIN tl_laprev11_session sess ON p.content_id = :toolContentId AND p.uid = sess.peerreview_uid " + + " JOIN tl_laprev11_user user ON user.session_uid = sess.uid " + + " LEFT JOIN ( "; + private static final String FIND_USER_RATINGS_COMMENTS2 = " ) rating ON user.user_id = rating.item_id "; + + + @SuppressWarnings("unchecked") + @Override + public List getRatingsComments(Long toolContentId, RatingCriteria criteria, Long userId, Integer page, + Integer size, int sorting, boolean getByUser, IRatingService coreRatingService) { + String sortingOrder = ""; + switch (sorting) { + case PeerreviewConstants.SORT_BY_NO: + sortingOrder = "ORDER BY user.user_id"; + break; + case PeerreviewConstants.SORT_BY_USERNAME_ASC: + sortingOrder = "ORDER BY user.first_name ASC"; + break; + case PeerreviewConstants.SORT_BY_USERNAME_DESC: + sortingOrder = "ORDER BY user.first_name DESC"; + break; + case PeerreviewConstants.SORT_BY_AVERAGE_RESULT_ASC: + sortingOrder = criteria.isCommentRating() ? "ORDER BY rating.comment ASC" : "ORDER BY rating.average_rating ASC"; + break; + case PeerreviewConstants.SORT_BY_AVERAGE_RESULT_DESC: + sortingOrder = criteria.isCommentRating() ? "ORDER BY rating.comment DESC" : "ORDER BY rating.average_rating DESC"; + } + + StringBuilder bldr = new StringBuilder(FIND_USER_RATINGS_COMMENTS1); + bldr.append(coreRatingService.getRatingSelectJoinSQL(criteria.getRatingStyle(), getByUser)); + bldr.append(FIND_USER_RATINGS_COMMENTS2); + if ( ! getByUser) + bldr.append("WHERE user.user_id = :userId "); + + bldr.append(sortingOrder); + + String queryString = bldr.toString(); + Query query = getSession().createSQLQuery(queryString) + .setLong("toolContentId", toolContentId) + .setLong("ratingCriteriaId", criteria.getRatingCriteriaId()); + if ( queryString.contains(":userId") ) { + query.setLong("userId", userId); + } + if ( page != null && size != null ) { + query.setFirstResult(page * size).setMaxResults(size); + } + return (List) query.list(); + } + } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dbupdates/patch20161004.sql =================================================================== diff -u --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dbupdates/patch20161004.sql (revision 0) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dbupdates/patch20161004.sql (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -0,0 +1,15 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +----------------------Put all sql statements below here------------------------- + +-- LDEV-3767 Peer review: two new review methods. Allow for self review + +ALTER TABLE tl_laprev11_peerreview ADD COLUMN self_review TINYINT(4) DEFAULT '0'; + +----------------------Put all sql statements above here------------------------- + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/model/Peerreview.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -rd2f1cafab9126e3848663764c082b76ccf2de0c5 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/model/Peerreview.java (.../Peerreview.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/model/Peerreview.java (.../Peerreview.java) (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -79,6 +79,8 @@ private boolean reflectOnActivity; private String reflectInstructions; + + private boolean selfReview; // ********************************************************** // Function method for Peerreview @@ -382,4 +384,12 @@ public void setReflectOnActivity(boolean reflectOnActivity) { this.reflectOnActivity = reflectOnActivity; } + + public boolean isSelfReview() { + return selfReview; + } + + public void setSelfReview(boolean selfReview) { + this.selfReview = selfReview; + } } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -rd2f1cafab9126e3848663764c082b76ccf2de0c5 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -25,10 +25,15 @@ import java.util.Collection; import java.util.List; +import java.util.Map; +import org.apache.tomcat.util.json.JSONArray; +import org.apache.tomcat.util.json.JSONException; import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.rating.ToolRatingManager; import org.lamsfoundation.lams.rating.dto.ItemRatingDTO; +import org.lamsfoundation.lams.rating.dto.StyledCriteriaRatingDTO; +import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.tool.peerreview.dto.GroupSummary; import org.lamsfoundation.lams.tool.peerreview.dto.ReflectDTO; import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; @@ -42,6 +47,12 @@ */ public interface IPeerreviewService extends ToolRatingManager { + // TODO remove! + int rateItems(RatingCriteria ratingCriteria, Integer userId, Map newRatings); + void commentItem(RatingCriteria ratingCriteria, Integer userId, Long itemId, String comment); + RatingCriteria getCriteriaByCriteriaId(Long ratingCriteriaId); + + /** * Get Peerreview by toolContentID. * @@ -69,6 +80,8 @@ List getUsersBySession(Long toolSessionId); List getUsersByContent(Long toolContentId); + + List getUserIdsBySessionID(Long sessionId); /** * Get user by given userID and toolContentID. @@ -215,6 +228,8 @@ int getCommentsMinWordsLimit(Long toolContentId); + List getCriteriasByToolContentId(Long toolContentId); + /** * Returns item DTO with all corresponding ratings and comments. Doesn't contain average and total amount of rates. * @@ -233,5 +248,23 @@ List getRatingCriteriaDtos(Long contentId, Collection itemIds, boolean isCommentsByOtherUsersRequired, Long userId, boolean isCountUsersRatedEachItem); + /** + * Gets all the users in the session and any existing ratings for a given criteria. If you want to use the tablesorter + * set skipRatings to true and it will just get the main criteria details, then on the jsp page call a tablesorter + * function that call getUsersRatingsCommentsByCriteriaJSON, with the page and size are included. + * Self rating === getAllUsers + * If you want the ratings done *by* the user XYZ, set getByUser to true and currentUser id to XYZ's user id. + * If you want the ratings done *for* user XYZ, set getByUser to true and currentUser id to XYZ's user id. + * user, set getByUser to false and set currentUserId to the current user id. + */ + StyledCriteriaRatingDTO getUsersRatingsCommentsByCriteriaIdDTO(Long toolContentId, RatingCriteria criteria, + Long currentUserId, boolean skipRatings, int sorting, boolean getAllUsers, boolean getByUser); + + /** + * Gets all the users in the session and any existing ratings for a given criteria in JSON format. + */ + JSONArray getUsersRatingsCommentsByCriteriaIdJSON(Long toolContentId, RatingCriteria criteria, Long currentUserId, + Integer page, Integer size, int sorting, boolean getAllUsers, boolean getByUser, boolean needRatesPerUser) throws JSONException ; + String getLocalisedMessage(String key, Object[] args); } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd2f1cafab9126e3848663764c082b76ccf2de0c5 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -38,7 +38,9 @@ import javax.servlet.http.HttpServletRequest; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.log4j.Logger; +import org.apache.tomcat.util.json.JSONArray; import org.apache.tomcat.util.json.JSONException; import org.apache.tomcat.util.json.JSONObject; import org.lamsfoundation.lams.learning.service.ILearnerService; @@ -49,6 +51,7 @@ import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rating.dto.ItemRatingDTO; +import org.lamsfoundation.lams.rating.dto.StyledCriteriaRatingDTO; import org.lamsfoundation.lams.rating.model.LearnerItemRatingCriteria; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.rating.service.IRatingService; @@ -160,6 +163,11 @@ } @Override + public List getUserIdsBySessionID(Long sessionId) { + return peerreviewUserDao.getUserIdsBySessionID(sessionId); + } + + @Override public void saveOrUpdatePeerreview(Peerreview peerreview) { peerreviewDao.saveObject(peerreview); } @@ -342,6 +350,61 @@ } } + @Override + public int rateItems(RatingCriteria ratingCriteria, Integer userId, Map newRatings) { + return ratingService.rateItems(ratingCriteria, userId, newRatings); + } + + @Override + public void commentItem(RatingCriteria ratingCriteria, Integer userId, Long itemId, String comment) + { + ratingService.commentItem(ratingCriteria, userId, itemId, comment); + } + + @Override + public RatingCriteria getCriteriaByCriteriaId(Long ratingCriteriaId) { + return ratingService.getCriteriaByCriteriaId(ratingCriteriaId); + } + + @Override + public StyledCriteriaRatingDTO getUsersRatingsCommentsByCriteriaIdDTO(Long toolContentId, RatingCriteria criteria, + Long currentUserId, boolean skipRatings, int sorting, boolean getAllUsers, boolean getByUser) { + + if ( skipRatings ) { + return ratingService.convertToStyledDTO(criteria, currentUserId, getAllUsers, null); + } + + List rawData = peerreviewUserDao.getRatingsComments(toolContentId, criteria, + currentUserId, null, null, sorting, getByUser, ratingService); + + for ( Object[] raw : rawData ) { + int len = raw.length; + StringBuilder description = new StringBuilder((String)raw[len-2] ).append(" ").append((String)raw[len-1]); + raw[len-1] = (Object) StringEscapeUtils.escapeCsv(description.toString()); + } + // if !getByUser -> is get current user's ratings from other users -> + // convertToStyledJSON.getAllUsers needs to be true otherwise current user (the only one in the set!) is dropped + return ratingService.convertToStyledDTO(criteria, currentUserId, !getByUser || getAllUsers, rawData); + } + + @Override + public JSONArray getUsersRatingsCommentsByCriteriaIdJSON(Long toolContentId, RatingCriteria criteria, Long currentUserId, + Integer page, Integer size, int sorting, boolean getAllUsers, boolean getByUser, boolean needRatesPerUser) throws JSONException { + + List rawData = peerreviewUserDao.getRatingsComments(toolContentId, criteria, + currentUserId, page, size, sorting, getByUser, ratingService); + + for ( Object[] raw : rawData ) { + int len = raw.length; + StringBuilder description = new StringBuilder((String)raw[len-2] ).append(" ").append((String)raw[len-1]); + raw[len-1] = (Object) StringEscapeUtils.escapeCsv(description.toString()); + } + // if !getByUser -> is get current user's ratings from other users -> + // convertToStyledJSON.getAllUsers needs to be true otherwise current user (the only one in the set!) is dropped + return ratingService.convertToStyledJSON(criteria, currentUserId, !getByUser || getAllUsers, rawData, needRatesPerUser); + } + + // ***************************************************************************** // private methods // ***************************************************************************** @@ -630,6 +693,11 @@ } @Override + public List getCriteriasByToolContentId(Long toolContentId) { + return ratingService.getCriteriasByToolContentId(toolContentId); + } + + @Override public List getRatingCriteriaDtos(Long contentId, Collection itemIds, boolean isCommentsByOtherUsersRequired, Long userId) { return ratingService.getRatingCriteriaDtos(contentId, itemIds, isCommentsByOtherUsersRequired, userId); Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/LearningAction.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -rd2f1cafab9126e3848663764c082b76ccf2de0c5 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/LearningAction.java (.../LearningAction.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/LearningAction.java (.../LearningAction.java) (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -31,6 +31,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -55,6 +56,8 @@ import org.lamsfoundation.lams.rating.dto.ItemRatingCriteriaDTO; import org.lamsfoundation.lams.rating.dto.ItemRatingDTO; import org.lamsfoundation.lams.rating.dto.RatingCommentDTO; +import org.lamsfoundation.lams.rating.dto.StyledCriteriaRatingDTO; +import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; @@ -86,9 +89,24 @@ if (param.equals("start")) { return start(mapping, form, request, response); } + if (param.equals("refresh")) { + return refresh(mapping, form, request, response); + } if (param.equals("getUsers")) { return getUsers(mapping, form, request, response); } + if (param.equals("edit")) { + return edit(mapping, form, request, response); + } + if (param.equals("submitHedging")) { + return submitRankingHedging(mapping, form, request, response); + } + if (param.equals("submitRanking")) { + return submitRankingHedging(mapping, form, request, response); + } + if (param.equals("nextPrev")) { + return nextPrev(mapping, form, request, response); + } if (param.equals("showResults")) { return showResults(mapping, form, request, response); } @@ -104,6 +122,11 @@ return submitReflection(mapping, form, request, response); } + + if (param.equals("getUsersMonitoring")) { + return getUsersMonitoring(mapping, form, request, response); + } + return mapping.findForward(PeerreviewConstants.ERROR); } @@ -114,10 +137,11 @@ * This method will avoid read database again and lost un-saved resouce item lost when user "refresh page", * * @throws IOException + * @throws ServletException * */ private ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) throws IOException { + HttpServletResponse response) throws IOException, ServletException { IPeerreviewService service = getPeerreviewService(); @@ -127,6 +151,7 @@ // save toolContentID into HTTPSession ToolAccessMode mode = WebUtil.readToolAccessModeParam(request, AttributeNames.PARAM_MODE, true); + Long sessionId = new Long(request.getParameter(AttributeNames.PARAM_TOOL_SESSION_ID)); @@ -162,11 +187,46 @@ return mapping.findForward("defineLater"); } else { // goto standard screen - return startRating(mapping, form, request, response, service, sessionMap, sessionId, user, mode); + sessionMap.put(PeerreviewConstants.PARAM_TOOL_SESSION_ID, sessionId); + sessionMap.put(AttributeNames.ATTR_MODE, mode); + sessionMap.put(PeerreviewConstants.ATTR_USER, user); + return startRating(mapping, form, request, response, service, sessionMap, sessionId, user, mode, null, null); } } + /** + * Same as start but doesn't create a new session map. + * + * @throws IOException + * @throws ServletException + * + */ + private ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException { + + IPeerreviewService service = getPeerreviewService(); + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + Long sessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute(AttributeNames.ATTR_MODE, mode); + request.setAttribute(PeerreviewConstants.PARAM_TOOL_SESSION_ID, sessionId); + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId", true); + RatingCriteria criteria = criteriaId != null ? service.getCriteriaByCriteriaId(criteriaId) : null; + + return startRating(mapping, form, request, response, service, sessionMap, sessionId, user, mode, criteria, null); + + } + private class UserCreateThread implements Runnable { private Long toolSessionId; private IPeerreviewService service; @@ -198,11 +258,12 @@ * This method will avoid read database again and lost un-saved resouce item lost when user "refresh page", * * @throws IOException + * @throws ServletException * */ private ActionForward startRating(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, IPeerreviewService service, SessionMap sessionMap, Long sessionId, - PeerreviewUser user, ToolAccessMode mode) throws IOException { + PeerreviewUser user, ToolAccessMode mode, RatingCriteria currentCriteria, Boolean next) throws IOException, ServletException { Peerreview peerreview = service.getPeerreviewBySessionId(sessionId); @@ -219,10 +280,7 @@ sessionMap.put(PeerreviewConstants.ATTR_TITLE, peerreview.getTitle()); sessionMap.put(PeerreviewConstants.ATTR_RESOURCE_INSTRUCTION, peerreview.getInstructions()); sessionMap.put(PeerreviewConstants.ATTR_LOCK_ON_FINISH, peerreview.getLockWhenFinished()); - sessionMap.put(PeerreviewConstants.ATTR_USER, user); - sessionMap.put(PeerreviewConstants.PARAM_TOOL_SESSION_ID, sessionId); - sessionMap.put(AttributeNames.ATTR_MODE, mode); // reflection information sessionMap.put(PeerreviewConstants.ATTR_REFLECTION_ON, peerreview.isReflectOnActivity()); sessionMap.put(PeerreviewConstants.ATTR_REFLECTION_INSTRUCTION, peerreview.getReflectInstructions()); @@ -233,17 +291,6 @@ return mapping.findForward("defineLater"); } - // handle rating criterias - boolean isCommentsEnabled = service.isCommentsEnabled(peerreview.getContentId()); - sessionMap.put("isCommentsEnabled", isCommentsEnabled); - - int commentsMinWordsLimit = service.getCommentsMinWordsLimit(peerreview.getContentId()); - sessionMap.put("commentsMinWordsLimit", commentsMinWordsLimit); - - // store how many items are rated - int countRatedUsers = service.getCountItemsRatedByUser(peerreview.getContentId(), user.getUserId().intValue()); - sessionMap.put(AttributeNames.ATTR_COUNT_RATED_ITEMS, countRatedUsers); - // set contentInUse flag to true! peerreview.setContentInUse(true); peerreview.setDefineLater(false); @@ -259,20 +306,72 @@ user.setSessionFinished(false); service.createUser(user); } - sessionMap.put("isDisabled", - peerreview.getLockWhenFinished() && user.isSessionFinished() || (mode != null) && mode.isTeacher()); + + RatingCriteria newCriteria = null; + if (!user.isSessionFinished()) { + // mark user as finished if there are not any criterias or we have processed the last one. + List criterias = service.getCriteriasByToolContentId(peerreview.getContentId()); + sessionMap.put("numCriteria", criterias.size()); + + if (criterias.size() > 0) { + if (currentCriteria == null) { + // get the first one + newCriteria = criterias.get(0); + } else if ( next == null ) { + // reload the current one + newCriteria = currentCriteria; + } else if ( next ) { + // get the next one + for (RatingCriteria toCheck : criterias) { + if (toCheck.getOrderId() > currentCriteria.getOrderId() ) { + newCriteria = toCheck; + break; + } + } + } else { + // get the previous one + RatingCriteria prev = null; + for (RatingCriteria toCheck : criterias) { + if ( toCheck.getOrderId() == currentCriteria.getOrderId() ) { + newCriteria = prev != null ? prev : currentCriteria; + break; + } else { + prev = toCheck; + } + } + + } + + } + + if (newCriteria == null) { + user.setSessionFinished(true); + service.createUser(user); + } + + } + + sessionMap.put("isDisabled", peerreview.getLockWhenFinished() && user.isSessionFinished() || (mode != null) + && mode.isTeacher()); sessionMap.put(PeerreviewConstants.ATTR_USER_FINISHED, user.isSessionFinished()); sessionMap.put("isSessionCompleted", user.getSession().getStatus() == PeerreviewConstants.COMPLETED); - // show results page - if (user.isSessionFinished() && peerreview.isShowRatingsLeftForUser()) { - - ActionRedirect redirect = new ActionRedirect(mapping.findForwardConfig("showResults")); + // finally, work out which page to go to! + if (user.isSessionFinished()) { + ActionRedirect redirect; + if ( peerreview.isShowRatingsLeftForUser() || entryText.length() > 0 ) { + redirect = new ActionRedirect(mapping.findForwardConfig("showResults")); + } else if ( peerreview.isReflectOnActivity() ) { + // do reflection + redirect = new ActionRedirect(mapping.findForwardConfig("newReflection")); + } else { + // finish + redirect = new ActionRedirect(mapping.findForwardConfig("finish")); + } redirect.addParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); return redirect; - } else { - return mapping.findForward(PeerreviewConstants.SUCCESS); + return doEdit(mapping, request, service, sessionMap, sessionId, peerreview, newCriteria); } } @@ -302,51 +401,26 @@ } // ratings left by the user - List itemIds = new LinkedList(); - List sessionUsers = service.getUsersBySession(sessionId); - for (PeerreviewUser userIter : sessionUsers) { - //excempt user himself - if (!user.getUserId().equals(userIter.getUserId())) { - itemIds.add(userIter.getUserId()); - } - } + List ratingCriterias = service.getRatingCriterias(peerreview.getContentId()); + List allUsersDtos = new ArrayList(ratingCriterias.size()); + List currentUserDtos = new ArrayList(ratingCriterias.size()); - //filter out not rated by user - List itemRatingDtos = service.getRatingCriteriaDtos(peerreview.getContentId(), itemIds, false, - user.getUserId()); - List ratedByUser = new ArrayList(); - for (ItemRatingDTO itemRatingDto : itemRatingDtos) { - boolean isRatedByUser = itemRatingDto.getCommentPostedByUser() != null; + for (RatingCriteria criteria : ratingCriterias) { + boolean showAllUsers = peerreview.isSelfReview() || criteria.isRankingStyleRating() + || criteria.isHedgeStyleRating() || (mode != null && mode.isTeacher()); + int sorting = PeerreviewConstants.SORT_BY_AVERAGE_RESULT_DESC; + if (criteria.isRankingStyleRating()) + sorting = PeerreviewConstants.SORT_BY_AVERAGE_RESULT_ASC; + allUsersDtos.add(service.getUsersRatingsCommentsByCriteriaIdDTO(peerreview.getContentId(), criteria, + user.getUserId(), false, sorting, showAllUsers, true)); + currentUserDtos.add(service.getUsersRatingsCommentsByCriteriaIdDTO(peerreview.getContentId(), criteria, + user.getUserId(), false, sorting, showAllUsers, false)); - for (ItemRatingCriteriaDTO criteriaDto : itemRatingDto.getCriteriaDtos()) { - if (StringUtils.isNotBlank(criteriaDto.getUserRating())) { - isRatedByUser = true; - } - } - - if (isRatedByUser) { - ratedByUser.add(itemRatingDto); - } } - request.setAttribute("itemRatingDtos", ratedByUser); - // ratings left by others for this user - List userIdList = Collections.singletonList(user.getUserId()); - List userRatingDtos = service.getRatingCriteriaDtos(peerreview.getContentId(), userIdList, true, - user.getUserId()); - ItemRatingDTO userRatingDto = null; - if (userRatingDtos.size() == 1) { - userRatingDto = userRatingDtos.get(0); - } - request.setAttribute("itemRatingDto", userRatingDto); + request.setAttribute("allCriteriaRatings", allUsersDtos); + request.setAttribute("userRatings", currentUserDtos); - //user name map - HashMap userNameMap = new HashMap(); - for (PeerreviewUser userIter : sessionUsers) { - userNameMap.put(userIter.getUserId(), userIter.getFirstName() + " " + userIter.getLastName()); - } - request.setAttribute("userNameMap", userNameMap); - // check whether finish lock is enabled sessionMap.put(PeerreviewConstants.ATTR_FINISH_LOCK, peerreview.getLockWhenFinished()); @@ -358,9 +432,9 @@ } /** - * Refreshes user list. + * Refreshes user list. TODO remove once monitoring is done. */ - public ActionForward getUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, + public ActionForward getUsersMonitoring(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse res) throws IOException, ServletException, JSONException { IPeerreviewService service = getPeerreviewService(); @@ -440,6 +514,7 @@ criteriasRow.put("averageRating", criteriaDto.getAverageRating()); criteriasRow.put("numberOfVotes", criteriaDto.getNumberOfVotes()); criteriasRow.put("userRating", criteriaDto.getUserRating()); + criteriasRow.put("ratingStyle", criteriaDto.getRatingCriteria().getRatingStyle()); criteriasRows.put(criteriasRow); } @@ -466,8 +541,241 @@ res.getWriter().print(new String(responcedata.toString())); return null; } + /** + * Gets a paged set of data for stars or comments. These are directly saved to the database, not through + * LearnerAction like Ranking and Hedging. + */ + public ActionForward getUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse res) throws IOException, ServletException, JSONException { + IPeerreviewService service = getPeerreviewService(); + + // get back SessionMap + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + Peerreview peerreview = (Peerreview) sessionMap.get(PeerreviewConstants.ATTR_PEERREVIEW); + + Long toolContentId = WebUtil.readLongParam(request, "toolContentId"); + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + + // in case of monitoring we show all results. in case of learning - don't show results from the current user + boolean isMonitoring = WebUtil.readBooleanParam(request, "isMonitoring", false); + Long userId = isMonitoring ? -1 : WebUtil.readLongParam(request, "userId"); + + // paging parameters of tablesorter + int size = WebUtil.readIntParam(request, "size"); + int page = WebUtil.readIntParam(request, "page"); + Integer isSort1 = WebUtil.readIntParam(request, "column[0]", true); + + int sorting = PeerreviewConstants.SORT_BY_NO; + if (isSort1 != null && isSort1.equals(0)) { + sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + } else if (isSort1 != null && isSort1.equals(1)) { + sorting = PeerreviewConstants.SORT_BY_USERNAME_DESC; + } + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + JSONObject responsedata = new JSONObject(); + responsedata.put("total_rows", service.getCountUsersBySession(toolSessionId, userId)); + responsedata.put("rows", service.getUsersRatingsCommentsByCriteriaIdJSON(toolContentId, criteria, userId, + page, size, sorting, peerreview.isSelfReview(), true, peerreview.getMaximumRatesPerUser() > 0 )); + + // store how many items are rated - not correct at present. + int countRatedQuestions = service.getCountItemsRatedByUser(toolContentId, userId.intValue()); + responsedata.put(AttributeNames.ATTR_COUNT_RATED_ITEMS, countRatedQuestions); + + res.setContentType("application/json;charset=utf-8"); + res.getWriter().print(new String(responsedata.toString())); + return null; + } + /** + * Edit / View an indiviual criteria. + * + * @throws IOException + * @throws ServletException + * + */ + public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException { + + IPeerreviewService service = getPeerreviewService(); + + // get back SessionMap + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + Long toolContentId = WebUtil.readLongParam(request, "toolContentId"); + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + Peerreview peerreview = service.getPeerreviewBySessionId(toolSessionId); + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + return doEdit(mapping, request, service, sessionMap, toolSessionId, peerreview, criteria); + } + + private ActionForward doEdit(ActionMapping mapping, HttpServletRequest request, IPeerreviewService service, + SessionMap sessionMap, Long toolSessionId, Peerreview peerreview, + RatingCriteria criteria) throws ServletException { + + Long toolContentId = peerreview.getContentId(); + + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + + if ((peerreview.getLockWhenFinished() && user.isSessionFinished()) || (mode != null && mode.isTeacher())) { + log.error("Unable to edit ranking/mark for criteria " + criteria.getRatingCriteriaId() + + " as either the mode is teacher or the user is finished. ToolSessionId " + toolSessionId + + " User " + user + " mode " + mode); + throw new ServletException( + "Unable to edit ranking/mark as either the mode is teacher or the user is finished."); + + } + + Long userId = ( mode != null && mode.isTeacher() ) ? -1 : user.getUserId(); + + StyledCriteriaRatingDTO dto = service.getUsersRatingsCommentsByCriteriaIdDTO(toolContentId, criteria, userId, + (criteria.isCommentRating() || criteria.isStarStyleRating()), PeerreviewConstants.SORT_BY_USERNAME_ASC, + peerreview.isSelfReview(), true ); + + // override the min/max for stars based on old settings if needed (original Peer Review kept one setting for all criteria ) + if ( ( peerreview.getMinimumRates() > 0 || peerreview.getMaximumRates() > 0 ) && + ( dto.getRatingCriteria().getMinimumRates() == 0 && dto.getRatingCriteria().getMaximumRates() == 0 ) ) { + dto.getRatingCriteria().setMinimumRates(peerreview.getMinimumRates()); + dto.getRatingCriteria().setMaximumRates(peerreview.getMaximumRates()); + } + + request.setAttribute("criteriaRatings", dto); + return mapping.findForward(PeerreviewConstants.SUCCESS); + } + + /** + * Same as submitRankingHedging but doesn't update the records. + * + * @throws IOException + * @throws ServletException + * + */ + public ActionForward nextPrev(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException { + IPeerreviewService service = getPeerreviewService(); + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); + + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + Long toolSessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute(AttributeNames.ATTR_MODE, mode); + request.setAttribute(PeerreviewConstants.PARAM_TOOL_SESSION_ID, toolSessionId); + + Boolean next = WebUtil.readBooleanParam(request, "next"); + + // goto standard screen + return startRating(mapping, form, request, response, service, sessionMap, toolSessionId, user, mode, criteria, next); + } + + /** + * Submit the ranking / hedging data and go back to the main learning screen. + * + * @throws IOException + * @throws ServletException + * + */ + public ActionForward submitRankingHedging(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException { + + IPeerreviewService service = getPeerreviewService(); + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + Long toolSessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + + Peerreview peerreview = service.getPeerreviewBySessionId(toolSessionId); + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + if ( ! ( peerreview.getLockWhenFinished() && user.isSessionFinished() ) ) { + + Integer userId = user.getUserId().intValue(); + Map ratings = new HashMap(); + boolean valid = false; + + if (criteria.isHedgeStyleRating()) { + int totalMark = 0; + // mark1 contains the mark for itemid 1 + for (String key : request.getParameterMap().keySet()) { + if (key.startsWith("mark")) { + String itemIdString = key.substring(4); + Long itemId = new Long(itemIdString); + Long value = WebUtil.readLongParam(request, key); + if ( value > 0 ) { + ratings.put(itemId, value.floatValue()); + } + totalMark += value; + } + } + valid = (totalMark == criteria.getMaxRating()); + } else if (criteria.isRankingStyleRating()) { + // rank1 contains the itemid for the learner ranked first. + for (String key : request.getParameterMap().keySet()) { + if (key.startsWith("rank")) { + String valueString = key.substring(4); + Long value = new Long(valueString); + Long itemId = WebUtil.readLongParam(request, key, true); + if (itemId != null) { + ratings.put(itemId, value.floatValue()); + } + } + } + valid = (ratings.size() == criteria.getMaxRating() || (ratings.size() >= service.getCountUsersBySession( + toolSessionId, userId.longValue()))); + } + + service.rateItems(criteria, userId, ratings); + if (!valid) { + request.setAttribute("notcomplete", true); + return doEdit(mapping, request, service, sessionMap, toolSessionId, peerreview, criteria); + } + + if (criteria.isHedgeStyleRating() && criteria.isCommentsEnabled()) { + String justify = request.getParameter("justify"); + service.commentItem(criteria, userId, criteria.getRatingCriteriaId(), justify); + } + + } + + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute(AttributeNames.ATTR_MODE, mode); + request.setAttribute(PeerreviewConstants.PARAM_TOOL_SESSION_ID, toolSessionId); + + Boolean next = WebUtil.readBooleanParam(request, "next"); + + // goto standard screen + return startRating(mapping, form, request, response, service, sessionMap, toolSessionId, user, mode, criteria, next); + } + + /** * Finish learning session. * * @param mapping @@ -487,6 +795,10 @@ // get mode and ToolSessionID from sessionMAP Long sessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + return doFinish(mapping, request, sessionId); + } + + private ActionForward doFinish(ActionMapping mapping, HttpServletRequest request, Long sessionId) { IPeerreviewService service = getPeerreviewService(); // get sessionId from HttpServletRequest String nextActivityUrl = null; @@ -501,7 +813,7 @@ LearningAction.log.error("Failed get next activity url:" + e.getMessage()); } - return mapping.findForward(PeerreviewConstants.SUCCESS); + return mapping.findForward("finish"); } /** Index: lams_tool_preview/web/WEB-INF/struts-config.xml =================================================================== diff -u -rdaae7481c43033a14d922bf45bcad31be676e7de -rd2f1cafab9126e3848663764c082b76ccf2de0c5 --- lams_tool_preview/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision daae7481c43033a14d922bf45bcad31be676e7de) +++ lams_tool_preview/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -88,11 +88,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -102,7 +138,7 @@ type="org.lamsfoundation.lams.tool.peerreview.web.action.LearningAction" input="/pages/learning/learning.jsp" parameter="finish" > - + - + +<%@ tag body-content="scriptless" %> +<%@ taglib uri="tags-core" prefix="c" %> +<%@ taglib uri="tags-fmt" prefix="fmt" %> +<%@ taglib uri="tags-html" prefix="html" %> +<%@ taglib uri="tags-lams" prefix="lams"%> +<%@ taglib uri="tags-function" prefix="fn" %> + + +<%@ attribute name="criterias" required="true" rtexprvalue="true" type="java.util.Collection" %> + +<%-- Optional attribute --%> +<%@ attribute name="hasRatingLimits" required="false" rtexprvalue="true" %> +<%@ attribute name="formContentPrefix" required="false" rtexprvalue="true" %> +<%@ attribute name="styleId" required="false" rtexprvalue="true" %> +<%@ attribute name="headerLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="addLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="deleteLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="upLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="downLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="minimumLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="maximumLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="noMinimumLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="noMaximumLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="jsWarningLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="allowCommentsLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="minNumberWordsLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="allLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="justifyLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="rankLabel" required="false" rtexprvalue="true" %> +<%@ attribute name="hedgeRankLabel" required="false" rtexprvalue="true" %> + +<%-- Default value for message key --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ + + +
+
+ +
+ + + +   + +
+ +
+ \ No newline at end of file Index: lams_tool_preview/web/WEB-INF/tags/AuthoringRatingCriteria.tag =================================================================== diff -u -rdaae7481c43033a14d922bf45bcad31be676e7de -rd2f1cafab9126e3848663764c082b76ccf2de0c5 --- lams_tool_preview/web/WEB-INF/tags/AuthoringRatingCriteria.tag (.../AuthoringRatingCriteria.tag) (revision daae7481c43033a14d922bf45bcad31be676e7de) +++ lams_tool_preview/web/WEB-INF/tags/AuthoringRatingCriteria.tag (.../AuthoringRatingCriteria.tag) (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -80,13 +80,12 @@ - + - + + + + + + + + + + + + + + + + + + +
+ +
+ Index: lams_tool_preview/web/pages/learning/hedging.jsp =================================================================== diff -u --- lams_tool_preview/web/pages/learning/hedging.jsp (revision 0) +++ lams_tool_preview/web/pages/learning/hedging.jsp (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -0,0 +1,92 @@ + + +
" method="post" id="editForm"> + + + + ${criteriaRatings.ratingCriteria.maxRating} + + + + ${criteriaRatings.ratingCriteria.maxRating} + 0 + + + + + + + + +
+ + + + + + + +
+ ${ratingDto.itemDescription} + + + + ${ratingDto.userRating} + + + + + +
+
+ + +
+

+ +
+
+ +
+ Index: lams_tool_preview/web/pages/learning/learning.jsp =================================================================== diff -u -r2bbd85edd7c7d6acc2843127d49f707ab7f3d487 -rd2f1cafab9126e3848663764c082b76ccf2de0c5 --- lams_tool_preview/web/pages/learning/learning.jsp (.../learning.jsp) (revision 2bbd85edd7c7d6acc2843127d49f707ab7f3d487) +++ lams_tool_preview/web/pages/learning/learning.jsp (.../learning.jsp) (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -1,240 +1,84 @@ <%@ include file="/common/taglibs.jsp"%> +<%@ page import="org.lamsfoundation.lams.rating.model.RatingCriteria" %> + + - + - + + + + + + - + + + <fmt:message key="label.learning.title" /> - <%@ include file="/common/header.jsp"%> - - - - - - - + + + + - - - - - - - + */ + @@ -252,107 +96,67 @@ - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- +
+

+

${criteriaRatings.ratingCriteria.orderId}${numCriteria}

+
-
- - - - - : ${sessionMap.commentsMinWordsLimit} - - - - -

- -

- - - - - - - - - - - - - - - - - - - - -
- +
+

${criteriaRatings.ratingCriteria.title}

+ + + <%@ include file="comment.jsp" %> + + + <%@ include file="star.jsp" %> + + + + + <%@ include file="rankall.jsp" %> + + + <%@ include file="ranking.jsp" %> + + + + + <%@ include file="hedging.jsp" %> + +
- - - <%@ include file="notebookdisplay.jsp"%> - - + + + nextPrev + + + submitEntry + + - - - - -
- - - - - - - - - - - - - - - - - -
-
+
+
+ +
+ +
+ + + + + + ${finishButtonLabel} + + + + + +
+
+ Index: lams_tool_preview/web/pages/learning/rankall.jsp =================================================================== diff -u --- lams_tool_preview/web/pages/learning/rankall.jsp (revision 0) +++ lams_tool_preview/web/pages/learning/rankall.jsp (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -0,0 +1,143 @@ + + + + <%-- Build up the divs now and the ordering, then include the divs in the body and trigger the ordering in document.ready --%> + + + + + + + dropzone + item draggable + + + + + + + ${itemDivs}
${ratingDto.itemDescription}
+ + ${javascriptReady} rankedArray[${ratingDto.userRating}]='item${ratingDto.itemId}'; + +
+ + + +
" method="get" id="editForm"> + + +
+
+ + ${criteriaRatings.ratingCriteria.maxRating} + + + + + + + + +
+
+ +
+
+ +
+
+
+ ${itemDivs} +
+
+
+ +
+ Index: lams_tool_preview/web/pages/learning/ranking.jsp =================================================================== diff -u --- lams_tool_preview/web/pages/learning/ranking.jsp (revision 0) +++ lams_tool_preview/web/pages/learning/ranking.jsp (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -0,0 +1,152 @@ + + + + <%-- Build up the divs now and the ordering, then include the divs in the body and trigger the ordering in document.ready --%> + + + + + + + dropzone + draggable + + + + + + + ${itemDivs}
${ratingDto.itemDescription}
+ ${javascriptReady} setRanking('${ratingDto.itemDescription}', ${ratingDto.itemId}, '${ratingDto.userRating}'); +
+ + + +
" method="get" id="editForm"> + + + + + + + + ${criteriaRatings.ratingCriteria.maxRating} + + + + + + + + +
+
+ + +
${index}:
+
+
+ +
+
+
+ ${itemDivs} +
+
+
+ +
+ Index: lams_tool_preview/web/pages/learning/results.jsp =================================================================== diff -u -rcff1f4709263aa5513ac0b4f5fd239a1390d905b -rd2f1cafab9126e3848663764c082b76ccf2de0c5 --- lams_tool_preview/web/pages/learning/results.jsp (.../results.jsp) (revision cff1f4709263aa5513ac0b4f5fd239a1390d905b) +++ lams_tool_preview/web/pages/learning/results.jsp (.../results.jsp) (revision d2f1cafab9126e3848663764c082b76ccf2de0c5) @@ -29,15 +29,16 @@ var pathToImageFolder = "${lams}images/css/"; //vars for rating.js - var MAX_RATES = ${peerreview.maximumRates}, - MIN_RATES = ${peerreview.minimumRates}, - COMMENTS_MIN_WORDS_LIMIT = ${sessionMap.commentsMinWordsLimit}, - MAX_RATINGS_FOR_ITEM = ${peerreview.maximumRatesPerUser}, + var MAX_RATES = 0, + MIN_RATES = 0, + COMMENTS_MIN_WORDS_LIMIT = 0, + MAX_RATINGS_FOR_ITEM = 0, + LIMIT_BY_CRITERIA = "true"; LAMS_URL = '${lams}', - COUNT_RATED_ITEMS = ${sessionMap.countRatedItems}, + COUNT_RATED_ITEMS = 0, COMMENT_TEXTAREA_TIP_LABEL = '', WARN_COMMENTS_IS_BLANK_LABEL = '', - WARN_MIN_NUMBER_WORDS_LABEL = ""; + WARN_MIN_NUMBER_WORDS_LABEL = ""; @@ -49,7 +50,6 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+