Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java =================================================================== diff -u -r48254dfc21feff77f6873023998798430649b7a5 -r1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision 48254dfc21feff77f6873023998798430649b7a5) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision 1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c) @@ -73,6 +73,8 @@ public static final String ATTR_BURNING_QUESTIONS = "burningQuestions"; + public static final String ATTR_GENERAL_BURNING_QUESTION = "generalBurningQuestion"; + public static final String ATTR_ITEM_ORDER_ID_PREFIX = "itemOrderId"; public static final String ATTR_ITEM_TITLE_PREFIX = "itemTitle"; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieBurningQuestionDAO.java =================================================================== diff -u -r48254dfc21feff77f6873023998798430649b7a5 -r1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieBurningQuestionDAO.java (.../ScratchieBurningQuestionDAO.java) (revision 48254dfc21feff77f6873023998798430649b7a5) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieBurningQuestionDAO.java (.../ScratchieBurningQuestionDAO.java) (revision 1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c) @@ -33,6 +33,8 @@ ScratchieBurningQuestion getBurningQuestionBySessionAndItem(Long sessionId, Long itemUid); + ScratchieBurningQuestion getGeneralBurningQuestionBySession(Long sessionId); + List getBurningQuestionsBySession(Long sessionId); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieBurningQuestionDAOHibernate.java =================================================================== diff -u -r48254dfc21feff77f6873023998798430649b7a5 -r1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieBurningQuestionDAOHibernate.java (.../ScratchieBurningQuestionDAOHibernate.java) (revision 48254dfc21feff77f6873023998798430649b7a5) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieBurningQuestionDAOHibernate.java (.../ScratchieBurningQuestionDAOHibernate.java) (revision 1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c) @@ -34,26 +34,42 @@ private static final String FIND_BY_SESSION_AND_ITEM = "from " + ScratchieBurningQuestion.class.getName() + " as r where r.sessionId=? and r.scratchieItem.uid = ?"; + private static final String FIND_GENERAL_QUESTION_BY_SESSION = "from " + ScratchieBurningQuestion.class.getName() + + " as r where r.sessionId=? and r.generalQuestion = 1"; + private static final String FIND_BY_SESSION = "from " + ScratchieBurningQuestion.class.getName() - + " as r where r.sessionId=? order by r.scratchieItem.orderId asc"; + + " as r where r.sessionId=?"; private static final String FIND_BY_ITEM_UID = "from " + ScratchieBurningQuestion.class.getName() + " as r where r.scratchieItem.uid=? order by r.sessionId asc"; +// @Override +// public List getBurningQuestionsByContentId(Long contentId) { +// return getHibernateTemplate().find(FIND_BY_CONTENT_ID, new Object[] { contentId}); +// } + @Override public List getBurningQuestionsByItemUid(Long itemUid) { return (List) this.doFind(FIND_BY_ITEM_UID, new Object[] { itemUid}); } @Override public ScratchieBurningQuestion getBurningQuestionBySessionAndItem(Long sessionId, Long itemUid) { - List list = this.doFind(FIND_BY_SESSION_AND_ITEM, new Object[] { sessionId, itemUid }); + List list = this.doFind(FIND_BY_SESSION_AND_ITEM, new Object[] { sessionId, itemUid }); if (list == null || list.size() == 0) return null; return (ScratchieBurningQuestion) list.get(0); } @Override + public ScratchieBurningQuestion getGeneralBurningQuestionBySession(Long sessionId) { + List list = this.find(FIND_GENERAL_QUESTION_BY_SESSION, new Object[] { sessionId }); + if (list == null || list.size() == 0) + return null; + return (ScratchieBurningQuestion) list.get(0); + } + + @Override public List getBurningQuestionsBySession(Long sessionId) { return (List) this.doFind(FIND_BY_SESSION, new Object[] { sessionId }); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20150206.sql =================================================================== diff -u -r48254dfc21feff77f6873023998798430649b7a5 -r1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20150206.sql (.../patch20150206.sql) (revision 48254dfc21feff77f6873023998798430649b7a5) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20150206.sql (.../patch20150206.sql) (revision 1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c) @@ -11,6 +11,7 @@ scratchie_item_uid BIGINT, session_id BIGINT, question TEXT, + general_question tinyint, PRIMARY KEY (uid) )ENGINE=InnoDB; ALTER TABLE tl_lascrt11_burning_question ADD INDEX FK_NEW_610529188_693580A438BF8DF2 (scratchie_item_uid), ADD CONSTRAINT FK_NEW_610529188_693580A438BF8DF2 FOREIGN KEY (scratchie_item_uid) REFERENCES tl_lascrt11_scratchie_item (uid); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieBurningQuestion.java =================================================================== diff -u -r48254dfc21feff77f6873023998798430649b7a5 -r1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieBurningQuestion.java (.../ScratchieBurningQuestion.java) (revision 48254dfc21feff77f6873023998798430649b7a5) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieBurningQuestion.java (.../ScratchieBurningQuestion.java) (revision 1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c) @@ -40,6 +40,7 @@ private Date accessDate; private Long sessionId; private String question; + private boolean generalQuestion; /** * @hibernate.id generator-class="native" type="java.lang.Long" column="uid" @@ -100,5 +101,17 @@ public void setQuestion(String question) { this.question = question; } + + /** + * @hibernate.property column="general_question" + * @return + */ + public boolean isGeneralQuestion() { + return generalQuestion; + } + public void setGeneralQuestion(boolean isGeneralQuestion) { + this.generalQuestion = isGeneralQuestion; + } + } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -r48254dfc21feff77f6873023998798430649b7a5 -r1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 48254dfc21feff77f6873023998798430649b7a5) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c) @@ -71,7 +71,7 @@ * Save or update burningQuestion into database. * * @param sessionId - * @param itemUid + * @param itemUid item uid, if it's null - it signifies general burning question * @param question */ void saveBurningQuestion(Long sessionId, Long itemUid, String question); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r81afca0ac88c925423b0427dd2a1d605aeb51aa5 -r1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 81afca0ac88c925423b0427dd2a1d605aeb51aa5) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c) @@ -40,6 +40,7 @@ import java.util.Set; import java.util.SortedMap; import java.util.TreeSet; +import java.util.concurrent.Callable; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; @@ -90,6 +91,7 @@ import org.lamsfoundation.lams.tool.scratchie.util.ScratchieAnswerComparator; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieItemComparator; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieToolContentHandler; +import org.lamsfoundation.lams.tool.scratchie.web.action.LearningAction; import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -437,22 +439,27 @@ @Override public void saveBurningQuestion(Long sessionId, Long itemUid, String question) { - ScratchieBurningQuestion burningQuestion = scratchieBurningQuestionDao.getBurningQuestionBySessionAndItem(sessionId, itemUid); + boolean isGeneralBurningQuestion = itemUid == null; + ScratchieBurningQuestion burningQuestion = (isGeneralBurningQuestion) ? scratchieBurningQuestionDao + .getGeneralBurningQuestionBySession(sessionId) : scratchieBurningQuestionDao + .getBurningQuestionBySessionAndItem(sessionId, itemUid); + if (burningQuestion == null) { burningQuestion = new ScratchieBurningQuestion(); - ScratchieItem item = scratchieItemDao.getByUid(itemUid); - burningQuestion.setScratchieItem(item); + if (!isGeneralBurningQuestion) { + ScratchieItem item = scratchieItemDao.getByUid(itemUid); + burningQuestion.setScratchieItem(item); + } + burningQuestion.setGeneralQuestion(isGeneralBurningQuestion); burningQuestion.setSessionId(sessionId); burningQuestion.setAccessDate(new Date()); } burningQuestion.setQuestion(question); scratchieBurningQuestionDao.saveObject(burningQuestion); } - - @Override public ScratchieAnswer getScratchieAnswerByUid(Long answerUid) { ScratchieAnswer res = (ScratchieAnswer) userManagementService.findById(ScratchieAnswer.class, answerUid); @@ -803,7 +810,30 @@ burningQuestionDtos.add(burningQuestionDTO); } + + //general burning question + BurningQuestionDTO generalBurningQuestionDTO = new BurningQuestionDTO(); + ScratchieItem generalDummyItem = new ScratchieItem(); + generalDummyItem.setUid(0L); + final String generalQuestionMessage = messageService.getMessage("label.general.burning.question"); + generalDummyItem.setTitle(generalQuestionMessage); + generalBurningQuestionDTO.setItem(generalDummyItem); + Map groupNameToBurningQuestion = new LinkedHashMap(); + generalBurningQuestionDTO.setGroupNameToBurningQuestion(groupNameToBurningQuestion); + for (ScratchieSession session : sessionList) { + ScratchieBurningQuestion burningQuestion = scratchieBurningQuestionDao + .getGeneralBurningQuestionBySession(session.getSessionId()); + if (burningQuestion == null) { + continue; + } + + String groupName = StringEscapeUtils.escapeJavaScript(session.getSessionName()); + String burningQuestionText = StringEscapeUtils.escapeJavaScript(burningQuestion.getQuestion()); + groupNameToBurningQuestion.put(groupName, burningQuestionText); + } + burningQuestionDtos.add(generalBurningQuestionDTO); + return burningQuestionDtos; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java =================================================================== diff -u -rfcd37060ecca18e6c4a2cac2fa0d888aa968a6ff -r1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision fcd37060ecca18e6c4a2cac2fa0d888aa968a6ff) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision 1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c) @@ -280,6 +280,16 @@ } item.setBurningQuestion(question); } + + //find general burning question + String generalBurningQuestion = ""; + for (ScratchieBurningQuestion burningQuestion : burningQuestions) { + if (burningQuestion.isGeneralQuestion()) { + generalBurningQuestion = burningQuestion.getQuestion(); + break; + } + } + sessionMap.put(ScratchieConstants.ATTR_GENERAL_BURNING_QUESTION, generalBurningQuestion); } // calculate max score @@ -651,33 +661,23 @@ break; } } - + + String oldQuestion = item.getBurningQuestion(); final String question = request.getParameter(ScratchieConstants.ATTR_BURNING_QUESTION_PREFIX + i); - //question = question.replaceAll("[\n\r\f]", ""); - - //if burning question is not blank save it - if (StringUtils.isNotBlank(question)) { - - //skip updating if the value wasn't changed - if (item.getBurningQuestion() != null && item.getBurningQuestion().equals(question)) { - continue; - } - - // update new entry - tryExecute(new Callable() { - @Override - public Object call() throws ScratchieApplicationException { - LearningAction.service.saveBurningQuestion(sessionId, itemUid, question); - return null; - } - }); - - //update question in sessionMap - item.setBurningQuestion(question); - } - - } + // update question in sessionMap + item.setBurningQuestion(question); + // update new entry + saveBurningQuestions(sessionId, itemUid, question, oldQuestion); + } + + //handle general burning question + final String generalQuestion = request.getParameter(ScratchieConstants.ATTR_GENERAL_BURNING_QUESTION); + String oldGeneralQuestion = (String) sessionMap.get(ScratchieConstants.ATTR_GENERAL_BURNING_QUESTION); + saveBurningQuestions(sessionId, null, generalQuestion, oldGeneralQuestion); + // update general question in sessionMap + sessionMap.put(ScratchieConstants.ATTR_GENERAL_BURNING_QUESTION, generalQuestion); + boolean isNotebookSubmitted = sessionMap.get(ScratchieConstants.ATTR_REFLECTION_ENTRY) != null; if (scratchie.isReflectOnActivity() && !isNotebookSubmitted) { return newReflection(mapping, form, request, response); @@ -686,7 +686,24 @@ } } + + private void saveBurningQuestions(final Long sessionId, final Long itemUid, final String question, + String oldQuestion) throws ScratchieApplicationException { + // if burning question is blank or is the same as before - skip saving it + if (StringUtils.isBlank(question) || question.equals(oldQuestion)) { + return; + } + // update new entry + tryExecute(new Callable() { + @Override + public Object call() throws ScratchieApplicationException { + LearningAction.service.saveBurningQuestion(sessionId, itemUid, question); + return null; + } + }); + } + /** * Display empty reflection form. * Index: lams_tool_scratchie/web/pages/learning/burningQuestions.jsp =================================================================== diff -u -r48254dfc21feff77f6873023998798430649b7a5 -r1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c --- lams_tool_scratchie/web/pages/learning/burningQuestions.jsp (.../burningQuestions.jsp) (revision 48254dfc21feff77f6873023998798430649b7a5) +++ lams_tool_scratchie/web/pages/learning/burningQuestions.jsp (.../burningQuestions.jsp) (revision 1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c) @@ -75,9 +75,14 @@

-


+


+ +

+ +


+
Index: lams_tool_scratchie/web/pages/monitoring/summary.jsp =================================================================== diff -u -r48254dfc21feff77f6873023998798430649b7a5 -r1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c --- lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 48254dfc21feff77f6873023998798430649b7a5) +++ lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 1e3d5be6bfe7e9e224d35d05f1e9599c04f2bf9c) @@ -314,6 +314,11 @@
+ + +
+
+