Index: lams_build/lib/lams/lams-central.jar
===================================================================
diff -u -r56e7c366e4045f49252ac90762dd467bb2eb0a2d -r1c42119baf51e12d0ef19919cb5a266a186d4b7d
Binary files differ
Index: lams_build/lib/lams/lams.jar
===================================================================
diff -u -r56e7c366e4045f49252ac90762dd467bb2eb0a2d -r1c42119baf51e12d0ef19919cb5a266a186d4b7d
Binary files differ
Index: lams_central/src/java/org/lamsfoundation/lams/rest/RestTags.java
===================================================================
diff -u -rcc603dd74ff178c24fb743f0dc61d6a4b8389946 -r1c42119baf51e12d0ef19919cb5a266a186d4b7d
--- lams_central/src/java/org/lamsfoundation/lams/rest/RestTags.java (.../RestTags.java) (revision cc603dd74ff178c24fb743f0dc61d6a4b8389946)
+++ lams_central/src/java/org/lamsfoundation/lams/rest/RestTags.java (.../RestTags.java) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d)
@@ -52,6 +52,8 @@
public static String SUBMISSION_DEADLINE = "submissionDeadline";
public static String ALLOW_RICH_TEXT_EDITOR = "allowRichEditor";
public static String USE_SELECT_LEADER_TOOL_OUTPUT = "useSelectLeaderToolOuput";
+ public static String MINIMUM_RATES = "minimumRates";
+ public static String MAXIMUM_RATES = "maximumRates";
public static String QUESTIONS = "questions";
public static String QUESTION_TEXT = "questionText";
Index: lams_central/src/java/org/lamsfoundation/lams/web/RatingServlet.java
===================================================================
diff -u -rf3be94729c90c7390a6aea11d1886a4b72d96670 -r1c42119baf51e12d0ef19919cb5a266a186d4b7d
--- lams_central/src/java/org/lamsfoundation/lams/web/RatingServlet.java (.../RatingServlet.java) (revision f3be94729c90c7390a6aea11d1886a4b72d96670)
+++ lams_central/src/java/org/lamsfoundation/lams/web/RatingServlet.java (.../RatingServlet.java) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d)
@@ -24,16 +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.ItemRatingCriteriaDTO;
+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;
@@ -57,29 +62,54 @@
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");
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);
+ // get rating value as either float or comment String
+ try {
+ if (criteria.isCommentsEnabled()) {
+ String comment = WebUtil.readStrParam(request, "comment");
+ ratingService.commentItem(criteria, userId, itemId, comment);
+ JSONObject.put("comment", StringEscapeUtils.escapeCsv(comment));
- // refresh numOfRatings
- // int numOfRatings = ratingService.getNumOfRatingsByUserAndForum(userUid, forumUid);
+ } else {
+ float rating = Float.parseFloat((String) request.getParameter("rate"));
- JSONObject JSONObject = new JSONObject();
- try {
- JSONObject.put("averageRating", averageRatingDTO.getAverageRating());
- JSONObject.put("numberOfVotes", averageRatingDTO.getNumberOfVotes());
+
+ ItemRatingCriteriaDTO 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());
+ }
+
+ boolean hasRatingLimits = WebUtil.readBooleanParam(request, "hasRatingLimits", false);
+
+ // refresh countRatedItems in case there is rating limit set
+ if (hasRatingLimits) {
+ // 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.getCountItemsRatedByUser(toolContentId, userId);
+ JSONObject.put("countRatedItems", countRatedItems);
+ }
+
} catch (JSONException e) {
throw new ServletException(e);
}
- // JSONObject.put("numOfRatings", numOfRatings);
+
response.setContentType("application/json;charset=utf-8");
response.getWriter().print(JSONObject);
}
Index: lams_central/web/WEB-INF/web.xml
===================================================================
diff -u -r99bad81dae364803715e125f14aedb605196b30c -r1c42119baf51e12d0ef19919cb5a266a186d4b7d
--- lams_central/web/WEB-INF/web.xml (.../web.xml) (revision 99bad81dae364803715e125f14aedb605196b30c)
+++ lams_central/web/WEB-INF/web.xml (.../web.xml) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d)
@@ -433,6 +433,13 @@
org.lamsfoundation.lams.web.OrganisationGroupServlet
+
+
+ RatingServlet
+
+ org.lamsfoundation.lams.web.RatingServlet
+
+
LearningDesignRestServlet
@@ -513,6 +520,11 @@
CourseGroupManager
/services/CourseGroupManager
+
+
+ RatingServlet
+ /servlet/rateItem
+
updateCollapsedGroup
Index: lams_central/web/css/jquery.jRating.css
===================================================================
diff -u -rf3be94729c90c7390a6aea11d1886a4b72d96670 -r1c42119baf51e12d0ef19919cb5a266a186d4b7d
--- lams_central/web/css/jquery.jRating.css (.../jquery.jRating.css) (revision f3be94729c90c7390a6aea11d1886a4b72d96670)
+++ lams_central/web/css/jquery.jRating.css (.../jquery.jRating.css) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d)
@@ -47,9 +47,35 @@
}
/** Please, note this is a LAMS customization. In case of library upgrade copy these lines manually. **/
-.rating-stars-holder {width: 150px; text-align: center;}
+.extra-controls-inner:after {
+ content: " ";
+ display: block;
+ height: 0;
+ clear: both;
+}
+.rating-stars-holder {width: 150px; text-align: center; float: right;}
.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;
+}
+.rating-comment{
+ background: url("../images/css/greyfade_bg.jpg") repeat-x scroll 0px 0px transparent;
+ padding: 15px;
+ margin: 10px 0;
+}
+.rating-info{
+ margin-top: 0;
+ margin-bottom: 12px;
+}
+textarea[id^=comment-textarea-] {
+ color: #d3d3d3;
+}
/** 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_central/web/includes/javascript/common.js
===================================================================
diff -u -r072bb60f4577c619051ad2bca23674a0c41d4856 -r1c42119baf51e12d0ef19919cb5a266a186d4b7d
--- lams_central/web/includes/javascript/common.js (.../common.js) (revision 072bb60f4577c619051ad2bca23674a0c41d4856)
+++ lams_central/web/includes/javascript/common.js (.../common.js) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d)
@@ -107,4 +107,16 @@
xmlhttp.open("POST", url, false);
xmlhttp.send();
}
+
+function getNumberOfWords(value, isRemoveHtmlTags) {
+
+ //HTML tags stripping
+ if (isRemoveHtmlTags) {
+ value = value.replace(/ /g, '').replace(/<\/?[a-z][^>]*>/gi, '');
+ }
+ value = value.trim();
+
+ var wordCount = value ? (value.replace(/['";:,.?\-!]+/g, '').match(/\S+/g) || []).length : 0;
+ return wordCount;
+}
\ No newline at end of file
Index: lams_central/web/includes/javascript/jquery.tablesorter-pager.js
===================================================================
diff -u -ra1b4a3143714e2704412c585131a93fee2d8c40b -r1c42119baf51e12d0ef19919cb5a266a186d4b7d
--- lams_central/web/includes/javascript/jquery.tablesorter-pager.js (.../jquery.tablesorter-pager.js) (revision a1b4a3143714e2704412c585131a93fee2d8c40b)
+++ lams_central/web/includes/javascript/jquery.tablesorter-pager.js (.../jquery.tablesorter-pager.js) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d)
@@ -1,2 +1,5 @@
-/* tablesorter (FORK) pager plugin updated 12/22/2014 (v2.18.4) */
-;(function(h){var k=h.tablesorter;h.extend({tablesorterPager:new function(){this.defaults={container:null,ajaxUrl:null,customAjaxUrl:function(c,a){return a},ajaxObject:{dataType:"json"},processAjaxOnInit:!0,ajaxProcessing:function(c){return[0,[],null]},output:"{startRow} to {endRow} of {totalRows} rows",updateArrows:!0,page:0,pageReset:0,size:10,maxOptionSize:20,savePages:!0,storageKey:"tablesorter-pager",fixedHeight:!1,countChildRows:!1,removeRows:!1,cssFirst:".first",cssPrev:".prev",cssNext:".next", cssLast:".last",cssGoto:".gotoPage",cssPageDisplay:".pagedisplay",cssPageSize:".pagesize",cssErrorRow:"tablesorter-errorRow",cssDisabled:"disabled",totalRows:0,totalPages:0,filteredRows:0,filteredPages:0,ajaxCounter:0,currentFilters:[],startRow:0,endRow:0,$size:null,last:{}};var x=this,v=function(c,a){var b=c.cssDisabled,e=!!a,f=e||0===c.page,g=Math.min(c.totalPages,c.filteredPages),e=e||c.page===g-1||0===g;c.updateArrows&&(c.$container.find(c.cssFirst+","+c.cssPrev)[f?"addClass":"removeClass"](b).attr("aria-disabled", f),c.$container.find(c.cssNext+","+c.cssLast)[e?"addClass":"removeClass"](b).attr("aria-disabled",e))},p=function(c,a){var b=c.config,e=b.$table.hasClass("hasFilters");e&&!a.ajaxUrl?h.isEmptyObject(b.cache)?a.filteredRows=a.totalRows=b.$tbodies.eq(0).children("tr").not(a.countChildRows?"":"."+b.cssChildRow).length:(a.filteredRows=0,h.each(b.cache[0].normalized,function(c,e){a.filteredRows+=a.regexRows.test(e[b.columns].$row[0].className)?0:1})):e||(a.filteredRows=a.totalRows)},t=function(c,a,b){if(!a.initializing){var e, f,g,l=c.config;e=a.size||10;a.countChildRows&&f.push(l.cssChildRow);a.totalPages=Math.ceil(a.totalRows/e);l.totalRows=a.totalRows;p(c,a);l.filteredRows=a.filteredRows;a.filteredPages=Math.ceil(a.filteredRows/e)||0;0<=Math.min(a.totalPages,a.filteredPages)&&(f=a.size*a.page>a.filteredRows&&b,a.startRow=f?1:0===a.filteredRows?0:a.size*a.page+1,a.page=f?0:a.page,a.endRow=Math.min(a.filteredRows,a.totalRows,a.size*(a.page+1)),g=a.$container.find(a.cssPageDisplay),e=(a.ajaxData&&a.ajaxData.output?a.ajaxData.output|| a.output:a.output).replace(/\{page([\-+]\d+)?\}/gi,function(d,b){return a.totalPages?a.page+(b?parseInt(b,10):1):0}).replace(/\{\w+(\s*:\s*\w+)?\}/gi,function(d){var b,c;b=d.replace(/[{}\s]/g,"");d=b.split(":");c=a.ajaxData;var e=/(rows?|pages?)$/i.test(b)?0:"";return/(startRow|page)/.test(d[0])&&"input"===d[1]?(b=(""+("page"===d[0]?a.totalPages:a.totalRows)).length,c="page"===d[0]?a.page+1:a.startRow,''):1'+b+""}),a.$goto.html(f).val(a.page+1)),g.find(".ts-startRow, .ts-page").unbind("change").bind("change",function(){var b=h(this).val(),b=h(this).hasClass("ts-startRow")?Math.floor(b/a.size)+1:b;l.$table.trigger("pageSet.pager",[b])})));v(a);D(c,a);a.initialized&&!1!==b&&(l.$table.trigger("pagerComplete",a),a.savePages&& k.storage&&k.storage(c,a.storageKey,{page:a.page,size:a.size}))}},I=function(c){var a,b,e,f,g;g=Math.min(c.totalPages,c.filteredPages)||1;var l=5*Math.ceil(g/c.maxOptionSize/5);e=g>c.maxOptionSize;f=c.page+1;a=l;b=g-l;var d=[1];for(a=e?l:1;a<=g;)d.push(a),a+=e?l:1;d.push(g);if(e){e=[];b=Math.max(Math.floor(c.maxOptionSize/l)-1,5);a=f-b;1>a&&(a=1);b=f+b;for(b>g&&(b=g);a<=b;a++)e.push(a);d=h.grep(d,function(a,b){return h.inArray(a,d)===b});f=d.length;g=e.length;f-g>l/2&&f+g>c.maxOptionSize&&(c=Math.floor(f/ 2)-Math.floor(g/2),Array.prototype.splice.apply(d,[c,g]));d=d.concat(e)}return d=h.grep(d,function(a,b){return h.inArray(a,d)===b}).sort(function(a,b){return a-b})},D=function(c,a){var b,e=c.config,f=e.$tbodies.eq(0);f.find("tr.pagerSavedHeightSpacer").remove();a.fixedHeight&&!a.isDisabled&&(b=h.data(c,"pagerSavedHeight"))&&(b-=f.height(),5