Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/web/RatingServlet.java =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_central/src/java/org/lamsfoundation/lams/web/RatingServlet.java (.../RatingServlet.java) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_central/src/java/org/lamsfoundation/lams/web/RatingServlet.java (.../RatingServlet.java) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -24,17 +24,21 @@ package org.lamsfoundation.lams.web; import java.io.IOException; +import java.text.NumberFormat; +import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.log4j.Logger; import org.apache.tomcat.util.json.JSONException; import org.apache.tomcat.util.json.JSONObject; -import org.lamsfoundation.lams.rating.dto.RatingDTO; +import org.lamsfoundation.lams.rating.dto.RatingCriteriaDTO; import org.lamsfoundation.lams.rating.model.LearnerItemRatingCriteria; +import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.rating.service.RatingService; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.WebUtil; @@ -58,33 +62,49 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + JSONObject JSONObject = new JSONObject(); getRatingService(); - float rating = Float.parseFloat((String) request.getParameter("rate")); String objectId = WebUtil.readStrParam(request, "idBox"); - boolean isCountRatedItemsRequested = WebUtil.readBooleanParam(request, "isCountRatedItemsRequested", false); Long ratingCriteriaId = Long.parseLong(objectId.split("-")[0]); Long itemId = Long.parseLong(objectId.split("-")[1]); + RatingCriteria criteria = ratingService.getCriteriaByCriteriaId(ratingCriteriaId); + UserDTO user = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); Integer userId = user.getUserID(); - RatingDTO averageRatingDTO = ratingService.rateItem(ratingCriteriaId, userId, itemId, rating); - - JSONObject JSONObject = new JSONObject(); + // get rating value as either float or comment String try { - JSONObject.put("averageRating", averageRatingDTO.getAverageRating()); - JSONObject.put("numberOfVotes", averageRatingDTO.getNumberOfVotes()); - - // refresh countRatedItems in case there is max rates limit - if (isCountRatedItemsRequested) { - //as long as this can be requested only for LEARNER_ITEM_CRITERIA_TYPE type, cast Criteria - LearnerItemRatingCriteria criteria = (LearnerItemRatingCriteria) ratingService.getCriteriaByCriteriaId(ratingCriteriaId, LearnerItemRatingCriteria.class); - Long toolContentId = criteria.getToolContentId(); - - int countRatedItems = ratingService.getCountItemsRatedByActivityAndUser(toolContentId, userId); - JSONObject.put("countRatedItems", countRatedItems); + if (criteria.isCommentsEnabled()) { + String comment = WebUtil.readStrParam(request, "comment"); + ratingService.commentItem(criteria, userId, itemId, comment); + JSONObject.put("comment", StringEscapeUtils.escapeJavaScript(comment)); + JSONObject.put("userName", user.getFirstName() + " " + user.getLastName()); + + } else { + float rating = Float.parseFloat((String) request.getParameter("rate")); + + boolean hasRatingLimists = WebUtil.readBooleanParam(request, "hasRatingLimists", false); + + RatingCriteriaDTO averageRatingDTO = ratingService.rateItem(criteria, userId, itemId, rating); + + NumberFormat numberFormat = NumberFormat.getInstance(Locale.US); + numberFormat.setMaximumFractionDigits(1); + JSONObject.put("userRating", numberFormat.format(rating)); + JSONObject.put("averageRating", averageRatingDTO.getAverageRating()); + JSONObject.put("numberOfVotes", averageRatingDTO.getNumberOfVotes()); + + // refresh countRatedItems in case there is rating limit set + if (hasRatingLimists) { + // as long as this can be requested only for LEARNER_ITEM_CRITERIA_TYPE type, cast Criteria + LearnerItemRatingCriteria learnerItemRatingCriteria = (LearnerItemRatingCriteria) criteria; + Long toolContentId = learnerItemRatingCriteria.getToolContentId(); + + int countRatedItems = ratingService.getCountItemsRatedByActivityAndUser(toolContentId, userId); + JSONObject.put("countRatedItems", countRatedItems); + } + } - } catch (JSONException e) { throw new ServletException(e); } Index: lams_central/web/css/jquery.jRating.css =================================================================== diff -u -r7dd6c7cb14fde37748dddaf510d178232d13db84 -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_central/web/css/jquery.jRating.css (.../jquery.jRating.css) (revision 7dd6c7cb14fde37748dddaf510d178232d13db84) +++ lams_central/web/css/jquery.jRating.css (.../jquery.jRating.css) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -49,7 +49,15 @@ /** Please, note this is a LAMS customization. In case of library upgrade copy these lines manually. **/ .rating-stars-holder {width: 150px; text-align: center;} .rating-stars-caption {padding-top: 6px;} -.rating-stars, .rating-stars-disabled {margin: 0px auto;} +.rating-stars, .rating-stars-disabled {margin: 0px auto; min-height: 20px;} +.add-comment { + background-image: url('../images/tick.png'); + width:16px; + height:16px; + cursor: pointer; + float: right; + margin-top: 20px; +} /** Remove the following once we move all tools to use Rating.tag. **/ .rating-stars-div {float:right; padding-right: 10px; margin-top: -8px; min-height: 45px;} Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/rating/RatingComment.hbm.xml =================================================================== diff -u --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/rating/RatingComment.hbm.xml (revision 0) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/rating/RatingComment.hbm.xml (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/rating/RatingCriteria.hbm.xml =================================================================== diff -u -r7dd6c7cb14fde37748dddaf510d178232d13db84 -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/rating/RatingCriteria.hbm.xml (.../RatingCriteria.hbm.xml) (revision 7dd6c7cb14fde37748dddaf510d178232d13db84) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/rating/RatingCriteria.hbm.xml (.../RatingCriteria.hbm.xml) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -33,6 +33,14 @@ @hibernate.property column="rating_criteria_type_id" length="11" + + Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml =================================================================== diff -u -r7dd6c7cb14fde37748dddaf510d178232d13db84 -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 7dd6c7cb14fde37748dddaf510d178232d13db84) +++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -232,6 +232,7 @@ + @@ -243,6 +244,8 @@ PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED + PROPAGATION_REQUIRED + PROPAGATION_REQUIRED @@ -421,6 +424,9 @@ + + + Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch02040041.sql =================================================================== diff -u -r7dd6c7cb14fde37748dddaf510d178232d13db84 -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch02040041.sql (.../patch02040041.sql) (revision 7dd6c7cb14fde37748dddaf510d178232d13db84) +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch02040041.sql (.../patch02040041.sql) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -14,6 +14,7 @@ rating_criteria_id BIGINT(20) NOT NULL AUTO_INCREMENT , title VARCHAR(255) , rating_criteria_type_id INT(11) NOT NULL DEFAULT 0 + , comments_enabled TINYINT(1) NOT NULL DEFAULT 0, , order_id INT(11) NOT NULL , tool_content_id BIGINT(20) , item_id BIGINT(20) @@ -45,6 +46,21 @@ REFERENCES lams_user (user_id) ON DELETE CASCADE ON UPDATE CASCADE )ENGINE=InnoDB; +CREATE TABLE lams_rating_comment ( + uid BIGINT(20) NOT NULL AUTO_INCREMENT + , rating_criteria_id BIGINT(20) NOT NULL + , item_id BIGINT(20) + , user_id BIGINT(20) NOT NULL + , comment text + , PRIMARY KEY (uid) + , INDEX (rating_criteria_id) + , CONSTRAINT FK_lams_rating_comment_1 FOREIGN KEY (rating_criteria_id) + REFERENCES lams_rating_criteria (rating_criteria_id) ON DELETE CASCADE ON UPDATE CASCADE + , INDEX (user_id) + , CONSTRAINT FK_lams_rating_comment_2 FOREIGN KEY (user_id) + REFERENCES lams_user (user_id) ON DELETE CASCADE ON UPDATE CASCADE +)ENGINE=InnoDB; + INSERT INTO lams_rating_criteria_type VALUES (1, 'TOOL_ACTIVITY'); INSERT INTO lams_rating_criteria_type VALUES (2, 'AUTHORED_ITEM'); INSERT INTO lams_rating_criteria_type VALUES (3, 'LEARNER_ITEM'); Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingCommentDAO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingCommentDAO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingCommentDAO.java (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -0,0 +1,43 @@ +/**************************************************************** + * 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.rating.dao; + +import org.lamsfoundation.lams.rating.dto.RatingCriteriaDTO; +import org.lamsfoundation.lams.rating.model.RatingComment; + +public interface IRatingCommentDAO { + + RatingComment getRatingComment(Long ratingCriteriaId, Integer userId, Long itemId); + + /** + * Constructs RatingCriteriaDTO for rating criteria that allows comments. + * + * @param ratingCriteriaId + * @param itemId + * @param userId + * @return + */ + RatingCriteriaDTO getCommentsRatingDTO(Long ratingCriteriaId, Long itemId, Integer userId); + +} Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java (.../IRatingDAO.java) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java (.../IRatingDAO.java) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -25,27 +25,24 @@ package org.lamsfoundation.lams.rating.dao; -import org.lamsfoundation.lams.rating.dto.RatingDTO; +import org.lamsfoundation.lams.rating.dto.RatingCriteriaDTO; import org.lamsfoundation.lams.rating.model.Rating; public interface IRatingDAO { - void saveOrUpdate(Rating rating); + void saveOrUpdate(Object object); Rating getRating(Long ratingCriteriaId, Integer userId, Long itemId); - Rating getRating(Long ratingCriteriaId, Integer userId); - /** * Returns rating statistics by particular item - * * @param itemId * @return */ - RatingDTO getRatingAverageDTOByItem(Long ratingCriteriaId, Long itemId); + RatingCriteriaDTO getRatingAverageDTOByItem(Long ratingCriteriaId, Long itemId); - RatingDTO getRatingAverageDTOByUser(Long ratingCriteriaId, Long itemId, Integer userId); - + RatingCriteriaDTO getRatingAverageDTOByUser(Long ratingCriteriaId, Long itemId, Integer userId); + Rating get(Long uid); /** Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -0,0 +1,66 @@ +/**************************************************************** + * 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.rating.dao.hibernate; + +import java.util.List; + +import org.lamsfoundation.lams.dao.hibernate.BaseDAO; +import org.lamsfoundation.lams.rating.dao.IRatingCommentDAO; +import org.lamsfoundation.lams.rating.dto.RatingCriteriaDTO; +import org.lamsfoundation.lams.rating.model.RatingComment; + +public class RatingCommentDAO extends BaseDAO implements IRatingCommentDAO { + private static final String FIND_RATING_BY_CRITERIA_AND_USER_AND_ITEM = "FROM " + RatingComment.class.getName() + + " AS r where r.ratingCriteria.ratingCriteriaId=? AND r.learner.userId=? AND r.itemId=?"; + + private static final String FIND_COMMENTS_BY_CRITERIA_AND_ITEM = "FROM " + RatingComment.class.getName() + + " AS r where r.ratingCriteria.ratingCriteriaId=? AND r.itemId=?"; + + private List getCommentsByCriteriaAndItem(Long ratingCriteriaId, Long itemId) { + return (List) (getHibernateTemplate().find(FIND_COMMENTS_BY_CRITERIA_AND_ITEM, new Object[] { + ratingCriteriaId, itemId })); + } + + @Override + public RatingComment getRatingComment(Long ratingCriteriaId, Integer userId, Long itemId) { + List list = getHibernateTemplate().find(FIND_RATING_BY_CRITERIA_AND_USER_AND_ITEM, + new Object[] { ratingCriteriaId, userId, itemId }); + if (list.size() > 0) { + return (RatingComment) list.get(0); + } else { + return null; + } + } + + @Override + public RatingCriteriaDTO getCommentsRatingDTO(Long ratingCriteriaId, Long itemId, Integer userId) { + + List ratingComments = getCommentsByCriteriaAndItem(ratingCriteriaId, itemId); + + RatingCriteriaDTO criteriaDto = new RatingCriteriaDTO(); + criteriaDto.setItemId(itemId); + criteriaDto.setRatingComments(ratingComments); + return criteriaDto; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java (.../RatingDAO.java) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java (.../RatingDAO.java) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -31,7 +31,7 @@ import org.lamsfoundation.lams.dao.hibernate.BaseDAO; import org.lamsfoundation.lams.rating.dao.IRatingDAO; -import org.lamsfoundation.lams.rating.dto.RatingDTO; +import org.lamsfoundation.lams.rating.dto.RatingCriteriaDTO; import org.lamsfoundation.lams.rating.model.Rating; import org.lamsfoundation.lams.rating.model.ToolActivityRatingCriteria; @@ -40,7 +40,7 @@ private static final String FIND_RATING_BY_CRITERIA_AND_USER_AND_ITEM = "FROM " + Rating.class.getName() + " AS r where r.ratingCriteria.ratingCriteriaId=? AND r.learner.userId=? AND r.itemId=?"; - private static final String FIND_RATING_VALUE = "SELECT r.rating FROM " + Rating.class.getName() + private static final String FIND_USER_RATING_VALUE = "SELECT r.rating FROM " + Rating.class.getName() + " AS r where r.ratingCriteria.ratingCriteriaId=? AND r.learner.userId=? AND r.itemId=?"; private static final String FIND_RATING_BY_CRITERIA_AND_USER = "FROM " + Rating.class.getName() @@ -57,8 +57,8 @@ + " WHERE r.ratingCriteria.ratingCriteriaId = cr.ratingCriteriaId AND cr.toolContentId = ? AND r.learner.userId =?"; @Override - public void saveOrUpdate(Rating rating) { - this.getHibernateTemplate().saveOrUpdate(rating); + public void saveOrUpdate(Object object) { + this.getHibernateTemplate().saveOrUpdate(object); this.getHibernateTemplate().flush(); } @@ -73,8 +73,7 @@ } } - @Override - public Rating getRating(Long ratingCriteriaId, Integer userId) { + private Rating getRating(Long ratingCriteriaId, Integer userId) { List list = getHibernateTemplate().find(FIND_RATING_BY_CRITERIA_AND_USER, new Object[] { ratingCriteriaId, userId }); if (list.size() > 0) { @@ -85,7 +84,7 @@ } @Override - public RatingDTO getRatingAverageDTOByItem(Long ratingCriteriaId, Long itemId) { + public RatingCriteriaDTO getRatingAverageDTOByItem(Long ratingCriteriaId, Long itemId) { List list = getHibernateTemplate().find(FIND_RATING_AVERAGE_BY_ITEM, new Object[] { ratingCriteriaId, itemId }); Object[] results = list.get(0); @@ -96,23 +95,29 @@ String averageRating = numberFormat.format(averageRatingObj); String numberOfVotes = (results[1] == null) ? "0" : String.valueOf(results[1]); - return new RatingDTO(averageRating, numberOfVotes); + return new RatingCriteriaDTO(averageRating, numberOfVotes); } @Override - public RatingDTO getRatingAverageDTOByUser(Long ratingCriteriaId, Long itemId, Integer userId) { + public RatingCriteriaDTO getRatingAverageDTOByUser(Long ratingCriteriaId, Long itemId, Integer userId) { - RatingDTO ratingDTO = getRatingAverageDTOByItem(ratingCriteriaId, itemId); + RatingCriteriaDTO criteriaDto = getRatingAverageDTOByItem(ratingCriteriaId, itemId); - Float userRating = 0F; - List list = getHibernateTemplate().find(FIND_RATING_VALUE, new Object[] { ratingCriteriaId, userId, itemId }); + List list = getHibernateTemplate().find(FIND_USER_RATING_VALUE, + new Object[] { ratingCriteriaId, userId, itemId }); + String userRating; if (list.size() > 0) { - userRating = (Float) list.get(0); + userRating = ((Float) list.get(0)).toString(); + + // user didn't leave his rating yet + } else { + userRating = ""; + } - ratingDTO.setUserRating(userRating.toString()); - ratingDTO.setItemId(itemId); + criteriaDto.setUserRating(userRating); + criteriaDto.setItemId(itemId); - return ratingDTO; + return criteriaDto; } @Override Index: lams_common/src/java/org/lamsfoundation/lams/rating/dto/RatingCriteriaDTO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/rating/dto/RatingCriteriaDTO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dto/RatingCriteriaDTO.java (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -0,0 +1,101 @@ +/**************************************************************** + * 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.rating.dto; + +import java.util.List; + +import org.lamsfoundation.lams.rating.model.RatingComment; +import org.lamsfoundation.lams.rating.model.RatingCriteria; + +public class RatingCriteriaDTO { + + //common properties + private Long itemId; + private RatingCriteria ratingCriteria; + + //rating properties + private String userRating; + private String averageRating; + private String numberOfVotes; + + //comments rating properties + private List ratingComments; + + public RatingCriteriaDTO() { + } + + public RatingCriteriaDTO(String rating, String numberOfVotes) { + this.averageRating = rating; + this.numberOfVotes = numberOfVotes; + } + + public Long getItemId() { + return itemId; + } + + public void setItemId(Long itemId) { + this.itemId = itemId; + } + + public RatingCriteria getRatingCriteria() { + return ratingCriteria; + } + + public void setRatingCriteria(RatingCriteria ratingCriteria) { + this.ratingCriteria = ratingCriteria; + } + + public String getUserRating() { + return userRating; + } + + public void setUserRating(String userRating) { + this.userRating = userRating; + } + + public String getAverageRating() { + return averageRating; + } + + public void setAverageRating(String averageRating) { + this.averageRating = averageRating; + } + + public String getNumberOfVotes() { + return numberOfVotes; + } + + public void setNumberOfVotes(String numberOfVotes) { + this.numberOfVotes = numberOfVotes; + } + + public List getRatingComments() { + return ratingComments; + } + + public void setRatingComments(List ratingComments) { + this.ratingComments = ratingComments; + } + +} Fisheye: Tag f026a3ceb687c0f4072980a88f37480a503c1199 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/rating/dto/RatingDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/java/org/lamsfoundation/lams/rating/model/RatingComment.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/rating/model/RatingComment.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/rating/model/RatingComment.java (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -0,0 +1,102 @@ +/**************************************************************** + * 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.rating.model; + +import org.lamsfoundation.lams.usermanagement.User; + +/** + */ +public class RatingComment implements java.io.Serializable, Cloneable { + + private static final long serialVersionUID = 4831819420875651676L; + + private Long uid; + + private RatingCriteria ratingCriteria; + + private Long itemId; + + private User learner; + + private String comment; + + public RatingComment() { + } + + public RatingComment(Long itemId, RatingCriteria ratingCriteria, User learner, String comment) { + this.itemId = itemId; + this.ratingCriteria = ratingCriteria; + this.learner = learner; + this.comment = comment; + } + + /** + */ + public Long getUid() { + return uid; + } + + public void setUid(Long uid) { + this.uid = uid; + } + + /** + */ + public Long getItemId() { + return itemId; + } + + public void setItemId(Long itemId) { + this.itemId = itemId; + } + + /** + */ + public RatingCriteria getRatingCriteria() { + return ratingCriteria; + } + + public void setRatingCriteria(RatingCriteria ratingCriteria) { + this.ratingCriteria = ratingCriteria; + } + + /** + */ + public User getLearner() { + return learner; + } + + public void setLearner(User learner) { + this.learner = learner; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getComment() { + return this.comment; + } +} + Index: lams_common/src/java/org/lamsfoundation/lams/rating/model/RatingCriteria.java =================================================================== diff -u -r7dd6c7cb14fde37748dddaf510d178232d13db84 -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_common/src/java/org/lamsfoundation/lams/rating/model/RatingCriteria.java (.../RatingCriteria.java) (revision 7dd6c7cb14fde37748dddaf510d178232d13db84) +++ lams_common/src/java/org/lamsfoundation/lams/rating/model/RatingCriteria.java (.../RatingCriteria.java) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -82,6 +82,8 @@ /** The type of ratingCriteria */ private Integer ratingCriteriaTypeId; + + private boolean commentsEnabled; // --------------------------------------------------------------------- // Object constructors @@ -169,7 +171,15 @@ public void setRatingCriteriaTypeId(Integer ratingCriteriaTypeId) { this.ratingCriteriaTypeId = ratingCriteriaTypeId; } + + public boolean isCommentsEnabled() { + return commentsEnabled; + } + public void setCommentsEnabled(boolean commentsEnabled) { + this.commentsEnabled = commentsEnabled; + } + @Override public String toString() { return new ToStringBuilder(this).append("ratingCriteriaId", ratingCriteriaId).toString(); Index: lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java (.../IRatingService.java) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java (.../IRatingService.java) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -27,7 +27,7 @@ import java.util.List; -import org.lamsfoundation.lams.rating.dto.RatingDTO; +import org.lamsfoundation.lams.rating.dto.RatingCriteriaDTO; import org.lamsfoundation.lams.rating.model.Rating; import org.lamsfoundation.lams.rating.model.RatingCriteria; @@ -57,6 +57,8 @@ List getCriteriasByToolContentId(Long toolContentId); + RatingCriteria getCriteriaByCriteriaId(Long ratingCriteriaId); + RatingCriteria getCriteriaByCriteriaId(Long ratingCriteriaId, Class clasz); /** @@ -76,10 +78,12 @@ */ List getRatingsByItem(Long itemId); - RatingDTO rateItem(Long ratingCriteriaId, Integer userId, Long itemId, float ratingFloat); + RatingCriteriaDTO rateItem(RatingCriteria criteria, Integer userId, Long itemId, float ratingFloat); - RatingDTO getRatingDTOByUser(Long ratingCriteriaId, Long itemId, Integer userId); + void commentItem(RatingCriteria ratingCriteria, Integer userId, Long itemId, String comment); + RatingCriteriaDTO getCriteriaDTOByUser(RatingCriteria criteria, Long itemId, Integer userId); + /** * Returns number of images rated by specified user in a current activity. Applicable only for RatingCriterias of LEARNER_ITEM_CRITERIA_TYPE type. * Index: lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -28,10 +28,12 @@ import java.util.List; import org.apache.log4j.Logger; +import org.lamsfoundation.lams.rating.dao.IRatingCommentDAO; import org.lamsfoundation.lams.rating.dao.IRatingCriteriaDAO; import org.lamsfoundation.lams.rating.dao.IRatingDAO; -import org.lamsfoundation.lams.rating.dto.RatingDTO; +import org.lamsfoundation.lams.rating.dto.RatingCriteriaDTO; import org.lamsfoundation.lams.rating.model.Rating; +import org.lamsfoundation.lams.rating.model.RatingComment; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; @@ -42,81 +44,15 @@ private static Logger log = Logger.getLogger(RatingService.class); private IRatingDAO ratingDAO; - + + private IRatingCommentDAO ratingCommentDAO; + private IRatingCriteriaDAO ratingCriteriaDAO; protected IUserManagementService userManagementService; protected MessageService messageService; -// public TreeMap> getEntryByLesson(Integer userID, Integer idType) { -// TreeMap> entryMap = new TreeMap>(); -// List list = getEntry(userID, idType); -// -// for (Rating entry : list) { -// if (entryMap.containsKey(entry.getItemId())) { -// String lessonName = (String) entryMap.get(entry.getItemId()).get(0).getRating(); -// entry.setRating(lessonName); -// entryMap.get(entry.getItemId()).add(entry); -// } else { -// Lesson lesson = (Lesson) baseDAO.find(Lesson.class, entry.getItemId()); -// List newEntryList = new ArrayList(); -// -// entry.setRating(lesson.getLessonName()); -// newEntryList.add(entry); -// -// entryMap.put(entry.getItemId(), newEntryList); -// } -// } -// -// return entryMap; -// } -// -// public List getEntry(Long id, Integer idType, String signature, Integer userID) { -// return ratingDAO.get(id, idType, signature, userID); -// } -// -// public List getEntry(Long id, Integer idType, String signature) { -// return ratingDAO.get(id, idType, signature); -// } -// -// public List getEntry(Long id, Integer idType, Integer userID) { -// return ratingDAO.get(id, idType, userID); -// } -// -// public List getEntry(Integer userID) { -// return ratingDAO.get(userID); -// } -// -// public List getEntry(Integer userID, Integer idType) { -// return ratingDAO.get(userID, idType); -// } -// -// public List getEntry(Integer userID, Long lessonID) { -// return ratingDAO.get(userID, lessonID); -// } -// -// public Rating getEntry(Long uid) { -// return ratingDAO.get(uid); -// } -// -// public void updateEntry(Long uid, String title, String entry) { -// Rating ne = getEntry(uid); -// if (ne != null) { -// ne.setTitle(title); -// ne.setEntry(entry); -// ne.setLastModified(new Date()); -// saveOrUpdateRating(ne); -// } else { -// log.debug("updateEntry: uid " + uid + "does not exist"); -// } -// } -// -// public void updateEntry(Rating rating) { -// rating.setLastModified(new Date()); -// saveOrUpdateRating(rating); -// } - @Override public Rating getRatingByItemAndUser(Long itemId, Integer userId) { return null; @@ -126,60 +62,97 @@ public List getRatingsByItem(Long itemId) { return null; } - + @Override public int getCountItemsRatedByActivityAndUser(Long toolContentId, Integer userId) { return ratingDAO.getCountItemsRatedByActivityAndUser(toolContentId, userId); } - + @Override public void saveOrUpdateRating(Rating rating) { ratingDAO.saveOrUpdate(rating); } - + @Override - public RatingDTO rateItem(Long ratingCriteriaId, Integer userId, Long itemId, float ratingFloat) { + public RatingCriteriaDTO rateItem(RatingCriteria ratingCriteria, Integer userId, Long itemId, float ratingFloat) { + Long ratingCriteriaId = ratingCriteria.getRatingCriteriaId(); Rating rating = ratingDAO.getRating(ratingCriteriaId, userId, itemId); - //persist MessageRating changes in DB + // persist MessageRating changes in DB if (rating == null) { // add rating = new Rating(); rating.setItemId(itemId); - + User learner = (User) userManagementService.findById(User.class, userId); rating.setLearner(learner); - - RatingCriteria ratingCriteria = (RatingCriteria) userManagementService.findById(RatingCriteria.class, ratingCriteriaId); + rating.setRatingCriteria(ratingCriteria); } + rating.setRating(ratingFloat); ratingDAO.saveOrUpdate(rating); - - //to make available new changes be visible on a jsp page + + // to make available new changes be visible on a jsp page return ratingDAO.getRatingAverageDTOByItem(ratingCriteriaId, itemId); } - + @Override - public RatingDTO getRatingDTOByUser(Long ratingCriteriaId, Long itemId, Integer userId) { - return ratingDAO.getRatingAverageDTOByUser(ratingCriteriaId, itemId, userId); + public void commentItem(RatingCriteria ratingCriteria, Integer userId, Long itemId, String comment) { + RatingComment ratingComment = ratingCommentDAO.getRatingComment(ratingCriteria.getRatingCriteriaId(), userId, + itemId); + + // persist MessageRating changes in DB + if (ratingComment == null) { // add + ratingComment = new RatingComment(); + ratingComment.setItemId(itemId); + + User learner = (User) userManagementService.findById(User.class, userId); + ratingComment.setLearner(learner); + + ratingComment.setRatingCriteria(ratingCriteria); + } + + ratingComment.setComment(comment); + ratingDAO.saveOrUpdate(ratingComment); } - + @Override + public RatingCriteriaDTO getCriteriaDTOByUser(RatingCriteria criteria, Long itemId, Integer userId) { + Long criteriaId = criteria.getRatingCriteriaId(); + + RatingCriteriaDTO criteriaDto; + if (criteria.isCommentsEnabled()) { + criteriaDto = ratingCommentDAO.getCommentsRatingDTO(criteriaId, itemId, userId); + + } else { + criteriaDto = ratingDAO.getRatingAverageDTOByUser(criteriaId, itemId, userId); + } + + criteriaDto.setRatingCriteria(criteria); + return criteriaDto; + } + + @Override public List getCriteriasByToolContentId(Long toolContentId) { List criterias = ratingCriteriaDAO.getByToolContentId(toolContentId); return criterias; } - + @Override + public RatingCriteria getCriteriaByCriteriaId(Long ratingCriteriaId) { + return ratingCriteriaDAO.getByRatingCriteriaId(ratingCriteriaId); + } + + @Override public RatingCriteria getCriteriaByCriteriaId(Long ratingCriteriaId, Class clasz) { return ratingCriteriaDAO.getByRatingCriteriaId(ratingCriteriaId, clasz); } - + @Override public void saveOrUpdateRatingCriteria(RatingCriteria criteria) { ratingCriteriaDAO.saveOrUpdate(criteria); } - + @Override public void deleteRatingCriteria(Long ratingCriteriaId) { ratingCriteriaDAO.deleteRatingCriteria(ratingCriteriaId); @@ -190,7 +163,11 @@ public void setRatingDAO(IRatingDAO ratingDAO) { this.ratingDAO = ratingDAO; } - + + public void setRatingCommentDAO(IRatingCommentDAO ratingCommentDAO) { + this.ratingCommentDAO = ratingCommentDAO; + } + public void setRatingCriteriaDAO(IRatingCriteriaDAO ratingCriteriaDAO) { this.ratingCriteriaDAO = ratingCriteriaDAO; } Index: lams_tool_images/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_tool_images/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_tool_images/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -170,7 +170,7 @@ label.rating.criterias =Rating criterias label.add.criteria =Add Criteria -label.number.of.votes ={0} / {1} votes +label.number.of.votes =Your rating {0}, average rating {1}/{2} votes label.rate.limits.reminder =Rating limitation: Minimum {0} and Maximum {1}. label.rate.limits.topic.reminder =You have rated {0} images already. Index: lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/IImageGalleryService.java =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/IImageGalleryService.java (.../IImageGalleryService.java) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/IImageGalleryService.java (.../IImageGalleryService.java) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -29,7 +29,7 @@ import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.notebook.model.NotebookEntry; -import org.lamsfoundation.lams.rating.dto.RatingDTO; +import org.lamsfoundation.lams.rating.dto.RatingCriteriaDTO; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.tool.imageGallery.dto.ReflectDTO; import org.lamsfoundation.lams.tool.imageGallery.dto.Summary; @@ -155,7 +155,7 @@ void deleteRatingCriteria(Long ratingCriteriaId); - List getRatingDtos(ImageGallery imageGallery, Long imageUid, Long userId); + List getRatingCriteriaDtos(Long contentId, Long imageUid, Long userId); /** * Returns number of images rated by specified user in a current activity. Index: lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java (.../ImageGalleryServiceImpl.java) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java (.../ImageGalleryServiceImpl.java) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -56,7 +56,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; -import org.lamsfoundation.lams.rating.dto.RatingDTO; +import org.lamsfoundation.lams.rating.dto.RatingCriteriaDTO; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.rating.service.IRatingService; import org.lamsfoundation.lams.tool.ToolContentImport102Manager; @@ -1170,17 +1170,17 @@ } @Override - public List getRatingDtos(ImageGallery imageGallery, Long imageUid, Long userId) { - List ratingDtos = new LinkedList(); - - for (RatingCriteria criteria : imageGallery.getRatingCriterias()) { - RatingDTO ratingDto = ratingService.getRatingDTOByUser(criteria.getRatingCriteriaId(), imageUid, userId.intValue()); - ratingDto.setRatingCriteria(criteria); - - ratingDtos.add(ratingDto); + public List getRatingCriteriaDtos(Long contentId, Long imageUid, Long userId) { + List criteriaDtos = new LinkedList(); + + List criterias = ratingService.getCriteriasByToolContentId(contentId); + for (RatingCriteria criteria : criterias) { + RatingCriteriaDTO criteriaDto = ratingService.getCriteriaDTOByUser(criteria, imageUid, userId.intValue()); + + criteriaDtos.add(criteriaDto); } - return ratingDtos; + return criteriaDtos; } @Override Index: lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/web/action/AuthoringAction.java =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -145,7 +145,7 @@ } if (param.equals("saveMultipleImages")) { return saveMultipleImages(mapping, form, request, response); - } + } return mapping.findForward(ImageGalleryConstants.ERROR); } @@ -224,7 +224,7 @@ SortedSet imageGalleryItemList = getImageList(sessionMap); imageGalleryItemList.clear(); imageGalleryItemList.addAll(items); - + // get rating criterias from DB List ratingCriterias = service.getRatingCriterias(contentId); sessionMap.put(AttributeNames.ATTR_RATING_CRITERIAS, ratingCriterias); @@ -377,21 +377,23 @@ ImageGalleryItem delAtt = (ImageGalleryItem) iter.next(); iter.remove(); } - + // ************************* Handle rating criterias ******************* - Set updatedCriterias = new LinkedHashSet(); - List ratingCriterias = (List) sessionMap.get(AttributeNames.ATTR_RATING_CRITERIAS); + // Set updatedCriterias = new LinkedHashSet(); + List ratingCriterias = (List) sessionMap + .get(AttributeNames.ATTR_RATING_CRITERIAS); + // create orderId to RatingCriteria map Map mapOrderIdToRatingCriteria = new HashMap(); for (RatingCriteria ratingCriteriaIter : ratingCriterias) { mapOrderIdToRatingCriteria.put(ratingCriteriaIter.getOrderId(), ratingCriteriaIter); } - + int criteriaMaxOrderId = WebUtil.readIntParam(request, "criteriaMaxOrderId"); - //i is equal to an old orderId - for (int i=1; i<=criteriaMaxOrderId; i++) { - + // i is equal to an old orderId + for (int i = 1; i <= criteriaMaxOrderId; i++) { + String criteriaTitle = WebUtil.readStrParam(request, "criteriaTitle" + i, true); - + RatingCriteria ratingCriteria = mapOrderIdToRatingCriteria.get(i); if (StringUtils.isNotBlank(criteriaTitle)) { int newCriteriaOrderId = WebUtil.readIntParam(request, "criteriaOrderId" + i); @@ -406,16 +408,44 @@ ratingCriteria.setOrderId(newCriteriaOrderId); ratingCriteria.setTitle(criteriaTitle); service.saveOrUpdateRatingCriteria(ratingCriteria); - //!!updatedCriterias.add(ratingCriteria); - - //delete + // !!updatedCriterias.add(ratingCriteria); + + // delete } else if (ratingCriteria != null) { service.deleteRatingCriteria(ratingCriteria.getRatingCriteriaId()); } - + } - //!!imageGalleryPO.setRatingCriterias(new LinkedHashSet (updatedCriterias)); + boolean isCommentsEnabled = WebUtil.readBooleanParam(request, "isCommentsEnabled", false); + // find comments' responsible RatingCriteria + RatingCriteria commentsResponsibleCriteria = null; + for (RatingCriteria ratingCriteriaIter : ratingCriterias) { + if (ratingCriteriaIter.isCommentsEnabled()) { + commentsResponsibleCriteria = ratingCriteriaIter; + break; + } + } + // create commentsRatingCriteria if it's required + if (isCommentsEnabled) { + if (commentsResponsibleCriteria == null) { + commentsResponsibleCriteria = new LearnerItemRatingCriteria(); + commentsResponsibleCriteria.setRatingCriteriaTypeId(LearnerItemRatingCriteria.LEARNER_ITEM_CRITERIA_TYPE); + ((LearnerItemRatingCriteria) commentsResponsibleCriteria).setToolContentId(contentId); + commentsResponsibleCriteria.setOrderId(0); + commentsResponsibleCriteria.setCommentsEnabled(true); + } + service.saveOrUpdateRatingCriteria(commentsResponsibleCriteria); + + // delete commentsRatingCriteria if it's not required + } else { + if (commentsResponsibleCriteria != null) { + service.deleteRatingCriteria(commentsResponsibleCriteria.getRatingCriteriaId()); + } + } + + // !!imageGalleryPO.setRatingCriterias(new LinkedHashSet (updatedCriterias)); + // ********************************************** // finally persist imageGalleryPO again service.saveOrUpdateImageGallery(imageGalleryPO); @@ -594,7 +624,7 @@ request.setAttribute(ImageGalleryConstants.ATTR_SESSION_MAP_ID, sessionMapID); return mapping.findForward(ImageGalleryConstants.SUCCESS); } - + /** * Display empty page for muiltiple image upload. * @@ -611,7 +641,7 @@ return mapping.findForward("images"); } - + /** * This method will get necessary information from imageGallery item form and save or update into * HttpSession ImageGalleryItemList. Notice, this save is not persist them into database, just save @@ -652,7 +682,7 @@ // return null to close this window return mapping.findForward(ImageGalleryConstants.SUCCESS); } - + /** * Remove imageGallery item from HttpSession list and update page display. As authoring rule, all persist only * happen when user submit whole page. So this remove is just impact HttpSession values. @@ -858,7 +888,7 @@ image.setCreateByAuthor(true); image.setHide(false); } - + /** * Extract web form content to imageGallery items. * @@ -907,7 +937,7 @@ image.setHide(false); } } - + /** * Validate imageGallery. * @@ -954,7 +984,7 @@ return errors; } - + /** * Validate imageGallery item. * @@ -965,7 +995,7 @@ ActionErrors errors = new ActionErrors(); List fileList = createFileListFromMultipleForm(multipleForm); - + // validate files size for (FormFile file : fileList) { FileValidatorUtil.validateFileSize(file, true, errors); @@ -980,7 +1010,7 @@ return errors; } - + /** * Create file list from multiple form. * @@ -990,25 +1020,25 @@ private List createFileListFromMultipleForm(MultipleImagesForm multipleForm) { List fileList = new ArrayList(); - if (! StringUtils.isEmpty(multipleForm.getFile1().getFileName())) { + if (!StringUtils.isEmpty(multipleForm.getFile1().getFileName())) { fileList.add(multipleForm.getFile1()); } - if (! StringUtils.isEmpty(multipleForm.getFile2().getFileName())) { + if (!StringUtils.isEmpty(multipleForm.getFile2().getFileName())) { fileList.add(multipleForm.getFile2()); } - if (! StringUtils.isEmpty(multipleForm.getFile3().getFileName())) { + if (!StringUtils.isEmpty(multipleForm.getFile3().getFileName())) { fileList.add(multipleForm.getFile3()); } - if (! StringUtils.isEmpty(multipleForm.getFile4().getFileName())) { + if (!StringUtils.isEmpty(multipleForm.getFile4().getFileName())) { fileList.add(multipleForm.getFile4()); } - if (! StringUtils.isEmpty(multipleForm.getFile5().getFileName())) { + if (!StringUtils.isEmpty(multipleForm.getFile5().getFileName())) { fileList.add(multipleForm.getFile5()); } return fileList; } - + /** * Checks if the format is allowed. * @@ -1019,7 +1049,7 @@ boolean isContentTypeForbidden = StringUtils.isEmpty(contentType) || !(contentType.equals("image/gif") || contentType.equals("image/png") || contentType.equals("image/jpg") || contentType.equals("image/jpeg") || contentType - .equals("image/pjpeg")); + .equals("image/pjpeg")); return isContentTypeForbidden; } Index: lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/web/action/LearningAction.java =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/web/action/LearningAction.java (.../LearningAction.java) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/web/action/LearningAction.java (.../LearningAction.java) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -52,7 +52,7 @@ import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; -import org.lamsfoundation.lams.rating.dto.RatingDTO; +import org.lamsfoundation.lams.rating.dto.RatingCriteriaDTO; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.imageGallery.ImageGalleryConstants; import org.lamsfoundation.lams.tool.imageGallery.model.ImageComment; @@ -463,7 +463,7 @@ SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); Long sessionId = (Long) sessionMap.get(ImageGalleryConstants.ATTR_TOOL_SESSION_ID); IImageGalleryService service = getImageGalleryService(); - ImageGallery imageGallery = service.getImageGalleryBySessionId(sessionId); + ImageGallery imageGallery = (ImageGallery) sessionMap.get(ImageGalleryConstants.ATTR_IMAGE_GALLERY); Long userId = ((Integer) sessionMap.get(AttributeNames.PARAM_USER_ID)).longValue(); Long imageUid = new Long(request.getParameter(ImageGalleryConstants.PARAM_IMAGE_UID)); @@ -473,7 +473,7 @@ sessionMap.put(ImageGalleryConstants.PARAM_CURRENT_IMAGE, image); // becuase in webpage will use this login name. Here is just - // initial it to avoid session close error in proxy object. + // initialize it to avoid session close error in a proxy object ImageGalleryUser createdBy = image.getCreateBy(); if (createdBy != null) { image.getCreateBy().getLoginName(); @@ -487,19 +487,19 @@ if (imageGallery.isAllowCommentImages()) { TreeSet comments = new TreeSet(new ImageCommentComparator()); Set dbComments = image.getComments(); - List sessionUsers = service.getUserListBySessionId(sessionId); + //List sessionUsers = service.getUserListBySessionId(sessionId); for (ImageComment comment : dbComments) { - for (ImageGalleryUser sessionUser : sessionUsers) { - if (comment.getCreateBy().getUserId().equals(sessionUser.getUserId())) { + //for (ImageGalleryUser sessionUser : sessionUsers) { + if (comment.getCreateBy().getSession().getSessionId().equals(sessionId)) { comments.add(comment); } - } + //} } sessionMap.put(ImageGalleryConstants.PARAM_COMMENTS, comments); } if (!isTeacher && imageGallery.isAllowRank()) { - List ratingDtos = service.getRatingDtos(imageGallery, imageUid, userId); + List ratingDtos = service.getRatingCriteriaDtos(imageGallery.getContentId(), imageUid, userId); sessionMap.put(ImageGalleryConstants.ATTR_RATING_DTOS, ratingDtos); // store how many items are rated Index: lams_tool_images/web/WEB-INF/tags/AuthoringRatingCriteria.tag =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_tool_images/web/WEB-INF/tags/AuthoringRatingCriteria.tag (.../AuthoringRatingCriteria.tag) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_tool_images/web/WEB-INF/tags/AuthoringRatingCriteria.tag (.../AuthoringRatingCriteria.tag) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -16,7 +16,7 @@ <%@ attribute name="criterias" required="true" rtexprvalue="true" type="java.util.Collection" %> <%-- Optional attribute --%> -<%@ attribute name="isRatesLimitOn" required="false" rtexprvalue="true" %> +<%@ attribute name="hasRatingLimits" 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" %> @@ -27,10 +27,11 @@ <%@ 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" %> <%-- Default value for message key --%> - - + + @@ -62,6 +63,9 @@ + + + + +<%--Rating stars area---------------------------------------%> + +
- - -

- ${ratingDto.ratingCriteria.title} -

+ + + -
-
+ + + + + + + + -
- - - - - - - - ${ratingDto.numberOfVotes} - - -
- +

+ ${ratingDto.ratingCriteria.title} +

+ +
+
+ +
style="visibility: hidden;" + > + + + + + + + + + + + + + ${ratingDto.numberOfVotes} + + +
+
+ +
+ +<%--Comments area---------------------------------------%> +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + +
+
+ +
+
+ +
+ + +
+ + +
+
+
+
+ +
+
+ \ No newline at end of file Index: lams_tool_images/web/pages/authoring/advance.jsp =================================================================== diff -u -r523ee42825f76a1a82e0b3cae120a2d35de9f36b -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_tool_images/web/pages/authoring/advance.jsp (.../advance.jsp) (revision 523ee42825f76a1a82e0b3cae120a2d35de9f36b) +++ lams_tool_images/web/pages/authoring/advance.jsp (.../advance.jsp) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -64,15 +64,17 @@

+ -

+

@@ -100,8 +102,9 @@

style="display:none;" > - +

Index: lams_tool_images/web/pages/learning/learning.jsp =================================================================== diff -u -r701d98839553067e414ddd22f15f37c060f7f3de -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_tool_images/web/pages/learning/learning.jsp (.../learning.jsp) (revision 701d98839553067e414ddd22f15f37c060f7f3de) +++ lams_tool_images/web/pages/learning/learning.jsp (.../learning.jsp) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -36,12 +36,8 @@ #check-for-new-button, #add-new-image-button, #delete-button { } .extra-controls-inner { - width: 60%; - margin: 0px auto; + float: right; } - .extra-controls-inner2 { - text-align: center; - } .caption{ color:#0087e5; font:italic 14px georgia,serif; @@ -51,19 +47,21 @@ font-size:11px; } #extra-controls { - display: table-cell; + text-align: center; + float: right; + clear: both; } #comments-area { - display: table-cell; - width: 68%; + width: 400px; + float: right; + clear: both; + padding: 10px 0 20px; } #comment-textarea { - margin-right:10px; - width:99%; + width: 370px; } #comment-button { margin-right: 2px; - float: right; margin-top: 10px; } table.forum { @@ -83,10 +81,15 @@ text-align: center; padding-top: 10px; } - #image-info { - display: table; - width: 100%; + #image-info:after { + content: " "; + display: block; + height: 0; + clear: both; } + #kkk{ + float:right; + } .space-bottom-top { padding-top: 40px; @@ -166,22 +169,9 @@ return false; } - var imageInfoTargetDiv = "#image-info"; - function addNewComment(currentImageUid, comment) { - var url = ""; - $(imageInfoTargetDiv).load( - url, - { - currentImageUid: currentImageUid, - comment: comment, - sessionMapID: "${sessionMapID}" - } - ); - } - function loadImageData(imageUid) { - $(imageInfoTargetDiv).load( + $("#image-info").load( "", { imageUid: imageUid, @@ -261,7 +251,7 @@ <%--Comments & Ranking/Voting area----------------------------------------------%>
- <%@ include file="/pages/learning/parts/commentsarea.jsp"%> + <%@ include file="/pages/learning/parts/commentsarea.jsp"%>
<%--Reflection--------------------------------------------------%> Index: lams_tool_images/web/pages/learning/parts/commentsarea.jsp =================================================================== diff -u -r701d98839553067e414ddd22f15f37c060f7f3de -rf026a3ceb687c0f4072980a88f37480a503c1199 --- lams_tool_images/web/pages/learning/parts/commentsarea.jsp (.../commentsarea.jsp) (revision 701d98839553067e414ddd22f15f37c060f7f3de) +++ lams_tool_images/web/pages/learning/parts/commentsarea.jsp (.../commentsarea.jsp) (revision f026a3ceb687c0f4072980a88f37480a503c1199) @@ -32,79 +32,19 @@ } -<%--Comments area---------------------------------------%> -
- + - <%@ include file="/common/messages.jsp"%> - -
- -
- - - -
- - - - - - - - - - - - - -
- - - - - - - - - -
-
- -
-
- -
- - -
- - - - - - - -
-
- -
-
- - -
- <%--Ranking area---------------------------------------%> -
+ -
+ countRatedImages="${sessionMap.countRatedImages}" />

- -
+ +
<%--Voting area--------------%> @@ -155,6 +95,5 @@ -