Index: lams_common/src/java/org/lamsfoundation/lams/etherpad/util/EtherpadUtil.java =================================================================== diff -u -r5ce80833bb0828de219fc5b59e9e73c365da8559 -rb616b4a2df3217f70583fa5f62a59a1488b33f84 --- lams_common/src/java/org/lamsfoundation/lams/etherpad/util/EtherpadUtil.java (.../EtherpadUtil.java) (revision 5ce80833bb0828de219fc5b59e9e73c365da8559) +++ lams_common/src/java/org/lamsfoundation/lams/etherpad/util/EtherpadUtil.java (.../EtherpadUtil.java) (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -4,7 +4,19 @@ public class EtherpadUtil { + /** + * Produces a standard, pretty meaningless Etherpad ID. + */ public static String getPadId(String groupId) { return groupId + "$" + IEtherpadService.DEFAULT_PAD_NAME; } + + /** + * If Etherpad intial content is not well formed, Etherpad server throws an exception. + */ + public static String preparePadContent(String rawContent) { + String cleanContent = rawContent == null ? "" + : rawContent.trim().replaceAll("[\n\r\f]", "").replaceAll(" ", ""); + return "" + cleanContent + ""; + } } Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/hibernate/DokumaranUserDAOHibernate.java =================================================================== diff -u -r3b951be8d201e41a829d079895d30c9b51fd1dce -rb616b4a2df3217f70583fa5f62a59a1488b33f84 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/hibernate/DokumaranUserDAOHibernate.java (.../DokumaranUserDAOHibernate.java) (revision 3b951be8d201e41a829d079895d30c9b51fd1dce) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/hibernate/DokumaranUserDAOHibernate.java (.../DokumaranUserDAOHibernate.java) (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -74,12 +74,13 @@ @Override @SuppressWarnings("unchecked") public List getBySessionID(Long sessionId) { - return this.doFind(FIND_BY_SESSION_ID, sessionId); + return (List) this.doFind(FIND_BY_SESSION_ID, sessionId); } + @SuppressWarnings("unchecked") @Override public List getLeadersBySessionId(Long sessionId) { - return this.doFind(FIND_LEADERS_BY_SESSION_ID, sessionId); + return (List) this.doFind(FIND_LEADERS_BY_SESSION_ID, sessionId); } } Index: lams_tool_scratchie/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rcf2997c9ea81fff656bbfa0df90ac9100ba1ebbf -rb616b4a2df3217f70583fa5f62a59a1488b33f84 --- lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision cf2997c9ea81fff656bbfa0df90ac9100ba1ebbf) +++ lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -267,5 +267,7 @@ label.type.your.group.answer =Type your group answer label.button.submit =Submit label.options.show = Show question options +label.authoring.advanced.question.etherpad = Show a discussion Etherpad after each question +label.etherpad.discussion = Discussion #======= End labels: Exported 260 labels for en AU ===== Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java =================================================================== diff -u -r7c8332d32bfb95927b393aa310c9cf214c6bc49b -rb616b4a2df3217f70583fa5f62a59a1488b33f84 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -89,6 +89,8 @@ public static final String ATTR_GROUP_USERS = "groupUsers"; + public static final String ATTR_ALL_GROUP_USERS = "allGroupUsers"; + public static final String ATTR_ANSWER_LIST = "answerList"; public static final String ATTR_ANSWER_COUNT = "answerCount"; @@ -109,6 +111,8 @@ public static final String ATTR_IS_WAITING_FOR_LEADER_TO_SUBMIT_NOTEBOOK = "isWaitingForLeaderToSubmitNotebook"; + public static final String ATTR_IS_QUESTION_ETHERPAD_ENABLED = "isQuestionEtherpadEnabled"; + public static final String ATTR_WAITING_MESSAGE_KEY = "waitingMessageKey"; public static final String ATTR_LEARNERS = "learners"; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20200413.sql =================================================================== diff -u --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20200413.sql (revision 0) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20200413.sql (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -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-5002 Add question Etherpads + +ALTER TABLE tl_lascrt11_scratchie ADD COLUMN question_etherpad_enabled TINYINT(1) DEFAULT 0 AFTER burning_questions_enabled; + +-- 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; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java =================================================================== diff -u -r9ad3683dd034fb1f5e76f9c1094893c97c159eea -rb616b4a2df3217f70583fa5f62a59a1488b33f84 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java (.../Scratchie.java) (revision 9ad3683dd034fb1f5e76f9c1094893c97c159eea) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java (.../Scratchie.java) (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -94,6 +94,9 @@ @Column(name = "burning_questions_enabled") private boolean burningQuestionsEnabled; + @Column(name = "question_etherpad_enabled") + private boolean questionEtherpadEnabled; + @Column(name = "shuffle_items") private boolean shuffleItems; @@ -334,6 +337,14 @@ this.burningQuestionsEnabled = burningQuestionsEnabled; } + public boolean isQuestionEtherpadEnabled() { + return questionEtherpadEnabled; + } + + public void setQuestionEtherpadEnabled(boolean questionEtherpadEnabled) { + this.questionEtherpadEnabled = questionEtherpadEnabled; + } + public boolean isShuffleItems() { return shuffleItems; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -r2188b7417d676ef1c628a44152af4980df6097e3 -rb616b4a2df3217f70583fa5f62a59a1488b33f84 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 2188b7417d676ef1c628a44152af4980df6097e3) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -44,6 +44,7 @@ import org.lamsfoundation.lams.tool.scratchie.model.ScratchieSession; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieUser; import org.lamsfoundation.lams.tool.service.ICommonToolService; +import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.excel.ExcelSheet; import org.quartz.SchedulerException; @@ -282,9 +283,8 @@ ScratchieItem getScratchieItemByUid(Long itemUid); - /** - * @param contentId - */ + Collection getAllGroupUsers(Long toolSessionId); + List getMonitoringSummary(Long contentId); List getQuestionSummary(Long contentId, Long itemUid); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -re6cb70fdabcaeb4c35ef551f7d694167f46ca5bc -rb616b4a2df3217f70583fa5f62a59a1488b33f84 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision e6cb70fdabcaeb4c35ef551f7d694167f46ca5bc) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -677,6 +677,10 @@ scratchieUserDao.saveObject(user); } + public Collection getAllGroupUsers(Long toolSessionId) { + return toolService.getToolSession(toolSessionId).getLearners(); + } + @Override /* * If isIncludeOnlyLeaders then include the portrait ids needed for monitoring. If false then it @@ -690,7 +694,7 @@ Long sessionId = session.getSessionId(); - Collection groupUsers = toolService.getToolSession(sessionId).getLearners(); + Collection groupUsers = getAllGroupUsers(sessionId); // one new summary for one session. GroupSummary groupSummary = new GroupSummary(session); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java =================================================================== diff -u -r2ef2360b201af371fa415d8a4c3953fec1d38c57 -rb616b4a2df3217f70583fa5f62a59a1488b33f84 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java (.../LearningController.java) (revision 2ef2360b201af371fa415d8a4c3953fec1d38c57) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java (.../LearningController.java) (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -27,13 +27,15 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.Set; import java.util.TimeZone; +import java.util.stream.Collectors; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -61,6 +63,8 @@ import org.lamsfoundation.lams.tool.scratchie.web.form.ReflectionForm; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.session.SessionManager; @@ -286,6 +290,19 @@ // make non-leaders wait for notebook to be submitted, if required sessionMap.put(ScratchieConstants.ATTR_IS_WAITING_FOR_LEADER_TO_SUBMIT_NOTEBOOK, isWaitingForLeaderToSubmitNotebook); + + boolean questionEtherpadEnabled = scratchie.isQuestionEtherpadEnabled() + && StringUtils.isNotBlank(Configuration.get(ConfigurationKeys.ETHERPAD_API_KEY)); + request.setAttribute(ScratchieConstants.ATTR_IS_QUESTION_ETHERPAD_ENABLED, questionEtherpadEnabled); + if (questionEtherpadEnabled) { + // get all users from the group, even if they did not reach the Scratchie yet + // order them by first and last name + Collection allGroupUsers = scratchieService.getAllGroupUsers(toolSessionID).stream() + .sorted(Comparator.comparing(u -> u.getFirstName() + u.getLastName())) + .collect(Collectors.toList()); + request.setAttribute(ScratchieConstants.ATTR_ALL_GROUP_USERS, allGroupUsers); + } + return "pages/learning/learning"; } Index: lams_tool_scratchie/web/WEB-INF/tags/Etherpad.tag =================================================================== diff -u --- lams_tool_scratchie/web/WEB-INF/tags/Etherpad.tag (revision 0) +++ lams_tool_scratchie/web/WEB-INF/tags/Etherpad.tag (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -0,0 +1,81 @@ +<% + /** + * Etherpad.tag + * Author: Marcin Cieslak + * Description: Etherpad pad + */ + %> +<%@ tag body-content="scriptless" %> +<%@ taglib uri="tags-core" prefix="c" %> +<%@ taglib uri="tags-lams" prefix="lams"%> +<%@ taglib uri="tags-function" prefix="fn" %> +<%@ attribute name="groupId" required="true" rtexprvalue="true" %> +<%@ attribute name="showControls" required="false" rtexprvalue="true" %> +<%@ attribute name="showChat" required="false" rtexprvalue="true" %> +<%@ attribute name="height" required="false" rtexprvalue="true" %> + +<%@ tag import="org.lamsfoundation.lams.util.Configuration"%> +<%@ tag import="org.lamsfoundation.lams.util.ConfigurationKeys"%> + +<%=Configuration.get(ConfigurationKeys.ETHERPAD_SERVER_URL)%> + + + +<%-- ---------------------------------------%> + + + + + + +
+ +<%-- If content was provided, put it into a hidden div so new lines will not break JavaScript --%> + + + ${content} + + \ No newline at end of file Index: lams_tool_scratchie/web/includes/css/scratchie-learning.scss =================================================================== diff -u -r2ef2360b201af371fa415d8a4c3953fec1d38c57 -rb616b4a2df3217f70583fa5f62a59a1488b33f84 --- lams_tool_scratchie/web/includes/css/scratchie-learning.scss (.../scratchie-learning.scss) (revision 2ef2360b201af371fa415d8a4c3953fec1d38c57) +++ lams_tool_scratchie/web/includes/css/scratchie-learning.scss (.../scratchie-learning.scss) (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -89,4 +89,8 @@ .item-score { font-weight: bold; +} + +.question-etherpad .panel-body { + padding: 0; } \ No newline at end of file Index: lams_tool_scratchie/web/pages/authoring/advance.jsp =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rb616b4a2df3217f70583fa5f62a59a1488b33f84 --- lams_tool_scratchie/web/pages/authoring/advance.jsp (.../advance.jsp) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_tool_scratchie/web/pages/authoring/advance.jsp (.../advance.jsp) (revision b616b4a2df3217f70583fa5f62a59a1488b33f84) @@ -45,6 +45,20 @@
+ +
+ +
+ +
+ +