Index: lams_tool_doku/conf/language/lams/ApplicationResources.properties
===================================================================
diff -u -r122dd5d7a7fc16042e798dc96c3a7a9ee96a8b8c -re606aaebe2ef85c40a4054ef76abf62c94d224a4
--- lams_tool_doku/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 122dd5d7a7fc16042e798dc96c3a7a9ee96a8b8c)
+++ lams_tool_doku/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4)
@@ -95,3 +95,4 @@
outcome.authoring.existing.none = none
outcome.authoring.create.new = [create new]
output.desc.manual.grading = Manual grading
+monitoring.summary.gallery.walk.start = Start Gallery Walk
\ No newline at end of file
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dbupdates/patch20201122.sql
===================================================================
diff -u -r122dd5d7a7fc16042e798dc96c3a7a9ee96a8b8c -re606aaebe2ef85c40a4054ef76abf62c94d224a4
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dbupdates/patch20201122.sql (.../patch20201122.sql) (revision 122dd5d7a7fc16042e798dc96c3a7a9ee96a8b8c)
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dbupdates/patch20201122.sql (.../patch20201122.sql) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4)
@@ -6,7 +6,9 @@
--LDEV-5120 Add column for Doku Gallery Walk
ALTER TABLE tl_ladoku11_dokumaran ADD COLUMN gallery_walk_enabled TINYINT NOT NULL DEFAULT 0,
- ADD COLUMN gallery_walk_read_only TINYINT NOT NULL DEFAULT 0;
+ ADD COLUMN gallery_walk_read_only TINYINT NOT NULL DEFAULT 0,
+ ADD COLUMN gallery_walk_started TINYINT NOT NULL DEFAULT 0,
+ ADD COLUMN gallery_walk_finished TINYINT NOT NULL DEFAULT 0;
-- Put all sql statements above here
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dokumaranApplicationContext.xml
===================================================================
diff -u -r01c2a55767c613282c319ed8b38a0c78712e3661 -re606aaebe2ef85c40a4054ef76abf62c94d224a4
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dokumaranApplicationContext.xml (.../dokumaranApplicationContext.xml) (revision 01c2a55767c613282c319ed8b38a0c78712e3661)
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dokumaranApplicationContext.xml (.../dokumaranApplicationContext.xml) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4)
@@ -94,7 +94,7 @@
PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_REQUIRED,+java.lang.Exception
- PROPAGATION_REQUIRED,-java.lang.Exception
+ PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED,+java.lang.Exception
@@ -106,6 +106,7 @@
PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_REQUIRED,-java.lang.Exception
+ PROPAGATION_REQUIRED,-java.lang.Exception
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java
===================================================================
diff -u -r122dd5d7a7fc16042e798dc96c3a7a9ee96a8b8c -re606aaebe2ef85c40a4054ef76abf62c94d224a4
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java (.../Dokumaran.java) (revision 122dd5d7a7fc16042e798dc96c3a7a9ee96a8b8c)
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java (.../Dokumaran.java) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4)
@@ -113,6 +113,12 @@
@Column(name = "gallery_walk_read_only")
private boolean galleryWalkReadOnly;
+ @Column(name = "gallery_walk_started")
+ private boolean galleryWalkStarted;
+
+ @Column(name = "gallery_walk_finished")
+ private boolean galleryWalkFinished;
+
// general information
@Column(name = "create_date")
private Date created;
@@ -429,4 +435,20 @@
public void setGalleryWalkReadOnly(boolean galleryWalkReadOnly) {
this.galleryWalkReadOnly = galleryWalkReadOnly;
}
+
+ public boolean isGalleryWalkStarted() {
+ return galleryWalkStarted;
+ }
+
+ public void setGalleryWalkStarted(boolean galleryWalkStarted) {
+ this.galleryWalkStarted = galleryWalkStarted;
+ }
+
+ public boolean isGalleryWalkFinished() {
+ return galleryWalkFinished;
+ }
+
+ public void setGalleryWalkFinished(boolean galleryWalkFinished) {
+ this.galleryWalkFinished = galleryWalkFinished;
+ }
}
\ No newline at end of file
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java
===================================================================
diff -u -rb5c36d2f8fb70869f2402ed3457a9513e2db871c -re606aaebe2ef85c40a4054ef76abf62c94d224a4
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision b5c36d2f8fb70869f2402ed3457a9513e2db871c)
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4)
@@ -65,6 +65,7 @@
import org.lamsfoundation.lams.tool.dokumaran.model.Dokumaran;
import org.lamsfoundation.lams.tool.dokumaran.model.DokumaranSession;
import org.lamsfoundation.lams.tool.dokumaran.model.DokumaranUser;
+import org.lamsfoundation.lams.tool.dokumaran.web.controller.LearningWebsocketServer;
import org.lamsfoundation.lams.tool.exception.DataMissingException;
import org.lamsfoundation.lams.tool.exception.ToolException;
import org.lamsfoundation.lams.tool.service.ILamsToolService;
@@ -500,6 +501,25 @@
return (DokumaranUser) dokumaranUserDao.getObject(DokumaranUser.class, uid);
}
+ @Override
+ public void startGalleryWalk(long toolContentId) throws IOException {
+ Dokumaran dokumaran = getDokumaranByContentId(toolContentId);
+ if (!dokumaran.isGalleryWalkEnabled()) {
+ throw new IllegalArgumentException(
+ "Can not start Gallery Walk as it is not enabled for Dokumaran with tool content ID "
+ + toolContentId);
+ }
+ if (dokumaran.isGalleryWalkFinished()) {
+ throw new IllegalArgumentException(
+ "Can not start Gallery Walk as it is already finished for Dokumaran with tool content ID "
+ + toolContentId);
+ }
+ dokumaran.setGalleryWalkStarted(true);
+ dokumaranDao.saveObject(dokumaran);
+
+ LearningWebsocketServer.sendPageRefreshRequest(toolContentId);
+ }
+
// *****************************************************************************
// private methods
// *****************************************************************************
@@ -761,7 +781,7 @@
ToolSession toolSession = toolService.getToolSession(toolSessionId);
Long lessonId = toolSession.getLesson().getLessonId();
groupIdentifier = DokumaranConstants.PREFIX_SHARED_GROUP + dokumaran.getSharedPadId() + lessonId;
-
+
etherpadHtml = EtherpadUtil.preparePadContent(dokumaran.getInstructions());
} else {
session.setEtherpadGroupId(sessionWithAlreadyCreatedPad.getEtherpadGroupId());
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java
===================================================================
diff -u -r5ce80833bb0828de219fc5b59e9e73c365da8559 -re606aaebe2ef85c40a4054ef76abf62c94d224a4
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java (.../IDokumaranService.java) (revision 5ce80833bb0828de219fc5b59e9e73c365da8559)
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java (.../IDokumaranService.java) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4)
@@ -262,4 +262,6 @@
* @return
*/
DokumaranUser getUser(Long uid);
+
+ void startGalleryWalk(long toolContentId) throws IOException;
}
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningController.java
===================================================================
diff -u -rb5c36d2f8fb70869f2402ed3457a9513e2db871c -re606aaebe2ef85c40a4054ef76abf62c94d224a4
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningController.java (.../LearningController.java) (revision b5c36d2f8fb70869f2402ed3457a9513e2db871c)
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningController.java (.../LearningController.java) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4)
@@ -58,10 +58,8 @@
import org.lamsfoundation.lams.web.util.SessionMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -107,17 +105,19 @@
DokumaranUser user = null;
boolean isFirstTimeAccess = false;
ToolAccessMode mode = WebUtil.readToolAccessModeParam(request, AttributeNames.PARAM_MODE, true);
+ // get back login user DTO
+ HttpSession ss = SessionManager.getSession();
+ UserDTO currentUserDto = null;
if ((mode != null) && mode.isTeacher()) {
// monitoring mode - user is specified in URL
// dokumaranUser may be null if the user was force completed.
user = getSpecifiedUser(toolSessionId, WebUtil.readIntParam(request, AttributeNames.PARAM_USER_ID, false));
} else {
- // get back login user DTO
- HttpSession ss = SessionManager.getSession();
- UserDTO userDto = (UserDTO) ss.getAttribute(AttributeNames.USER);
- user = dokumaranService.getUserByIDAndSession(new Long(userDto.getUserID().intValue()), toolSessionId);
+ currentUserDto = (UserDTO) ss.getAttribute(AttributeNames.USER);
+ user = dokumaranService.getUserByIDAndSession(new Long(currentUserDto.getUserID().intValue()),
+ toolSessionId);
if (user == null) {
- user = new DokumaranUser(userDto, session);
+ user = new DokumaranUser(currentUserDto, session);
dokumaranService.saveUser(user);
isFirstTimeAccess = true;
}
@@ -149,24 +149,45 @@
}
boolean isUserLeader = (user != null) && dokumaranService.isUserLeader(leaders, user.getUserId());
-
- // check whether finish lock is on/off
- boolean finishedLock = dokumaran.getLockWhenFinished() && (user != null) && user.isSessionFinished();
boolean hasEditRight = !dokumaran.isUseSelectLeaderToolOuput()
|| dokumaran.isUseSelectLeaderToolOuput() && isUserLeader;
+ sessionMap.put(DokumaranConstants.ATTR_HAS_EDIT_RIGHT, hasEditRight);
+ sessionMap.put(AttributeNames.PARAM_TOOL_SESSION_ID, toolSessionId);
+ sessionMap.put(DokumaranConstants.ATTR_TOOL_CONTENT_ID, dokumaran.getContentId());
+ sessionMap.put(DokumaranConstants.ATTR_REFLECTION_ON, dokumaran.isReflectOnActivity());
+ sessionMap.put(AttributeNames.ATTR_IS_LAST_ACTIVITY, dokumaranService.isLastActivity(toolSessionId));
+ sessionMap.put(DokumaranConstants.ATTR_DOKUMARAN, dokumaran);
- // basic information
+ // get the API key from the config table and add it to the session
+ String etherpadServerUrl = Configuration.get(ConfigurationKeys.ETHERPAD_SERVER_URL);
+ String etherpadApiKey = Configuration.get(ConfigurationKeys.ETHERPAD_API_KEY);
+ if (StringUtils.isBlank(etherpadServerUrl) || StringUtils.isBlank(etherpadApiKey)) {
+ return "pages/learning/notconfigured";
+ }
+ request.setAttribute(DokumaranConstants.KEY_ETHERPAD_SERVER_URL, etherpadServerUrl);
+
+ if (dokumaran.isGalleryWalkStarted() && !dokumaran.isGalleryWalkFinished()) {
+ List groupList = dokumaranService.getSummary(dokumaran.getContentId());
+ request.setAttribute(DokumaranConstants.ATTR_SUMMARY_LIST, groupList);
+ if (currentUserDto == null) {
+ currentUserDto = (UserDTO) ss.getAttribute(AttributeNames.USER);
+ }
+ Cookie cookie = dokumaranService.createEtherpadCookieForMonitor(currentUserDto, dokumaran.getContentId());
+ response.addCookie(cookie);
+ return "pages/learning/galleryWalk";
+ }
+
+ sessionMap.put(AttributeNames.ATTR_MODE, mode);
+ // check whether finish lock is on/off
+ boolean finishedLock = dokumaran.getLockWhenFinished() && (user != null) && user.isSessionFinished();
sessionMap.put(DokumaranConstants.ATTR_TITLE, dokumaran.getTitle());
sessionMap.put(DokumaranConstants.ATTR_INSTRUCTIONS, dokumaran.getInstructions());
sessionMap.put(DokumaranConstants.ATTR_FINISH_LOCK, finishedLock);
sessionMap.put(DokumaranConstants.ATTR_LOCK_ON_FINISH, dokumaran.getLockWhenFinished());
sessionMap.put(DokumaranConstants.ATTR_USER_FINISHED, (user != null) && user.isSessionFinished());
- sessionMap.put(DokumaranConstants.ATTR_HAS_EDIT_RIGHT, hasEditRight);
+
sessionMap.put(DokumaranConstants.ATTR_IS_LEADER_RESPONSE_FINALIZED,
dokumaranService.isLeaderResponseFinalized(leaders));
- sessionMap.put(AttributeNames.PARAM_TOOL_SESSION_ID, toolSessionId);
- sessionMap.put(DokumaranConstants.ATTR_TOOL_CONTENT_ID, dokumaran.getContentId());
- sessionMap.put(AttributeNames.ATTR_MODE, mode);
// reflection information
String entryText = new String();
@@ -177,7 +198,6 @@
entryText = notebookEntry.getEntry();
}
}
- sessionMap.put(DokumaranConstants.ATTR_REFLECTION_ON, dokumaran.isReflectOnActivity());
sessionMap.put(DokumaranConstants.ATTR_REFLECTION_INSTRUCTION, dokumaran.getReflectInstructions());
sessionMap.put(DokumaranConstants.ATTR_REFLECTION_ENTRY, entryText);
@@ -191,17 +211,6 @@
dokumaran.setDefineLater(false);
dokumaranService.saveOrUpdateDokumaran(dokumaran);
- sessionMap.put(AttributeNames.ATTR_IS_LAST_ACTIVITY, dokumaranService.isLastActivity(toolSessionId));
- sessionMap.put(DokumaranConstants.ATTR_DOKUMARAN, dokumaran);
-
- // get the API key from the config table and add it to the session
- String etherpadServerUrl = Configuration.get(ConfigurationKeys.ETHERPAD_SERVER_URL);
- String etherpadApiKey = Configuration.get(ConfigurationKeys.ETHERPAD_API_KEY);
- if (StringUtils.isBlank(etherpadServerUrl) || StringUtils.isBlank(etherpadApiKey)) {
- return "pages/learning/notconfigured";
- }
- request.setAttribute(DokumaranConstants.KEY_ETHERPAD_SERVER_URL, etherpadServerUrl);
-
//time limit
boolean isTimeLimitEnabled = hasEditRight && !finishedLock && dokumaran.getTimeLimit() != 0;
long secondsLeft = isTimeLimitEnabled ? dokumaranService.getSecondsLeft(dokumaran) : 0;
@@ -320,23 +329,6 @@
return "pages/learning/notebook";
}
- @SuppressWarnings("unchecked")
- @RequestMapping("/startGalleryWalk")
- private String startGalleryWalk(@RequestParam String sessionMapID, HttpServletResponse response,
- HttpSession session, Model model) throws EtherpadException {
- SessionMap map = (SessionMap) session.getAttribute(sessionMapID);
- Long toolSessionID = (Long) map.get(AttributeNames.PARAM_TOOL_SESSION_ID);
- Dokumaran dokumaran = dokumaranService.getDokumaranBySessionId(toolSessionID);
- List groupList = dokumaranService.getSummary(dokumaran.getContentId());
- model.addAttribute(DokumaranConstants.ATTR_SUMMARY_LIST, groupList);
-
- UserDTO userDto = (UserDTO) session.getAttribute(AttributeNames.USER);
- Cookie cookie = dokumaranService.createEtherpadCookieForMonitor(userDto, dokumaran.getContentId());
- response.addCookie(cookie);
-
- return "pages/learning/galleryWalk";
- }
-
/**
* Submit reflection form input database.
*
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningWebsocketServer.java
===================================================================
diff -u -rb8cffb90895b237f8974633720e6c491699117f4 -re606aaebe2ef85c40a4054ef76abf62c94d224a4
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision b8cffb90895b237f8974633720e6c491699117f4)
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4)
@@ -184,7 +184,7 @@
* Monitor has launched time limit. All learners will need to refresh the page in order to stop showing them
* waitForTimeLimitLaunch page.
*/
- private static void sendPageRefreshRequest(Long toolContentId) throws IOException {
+ public static void sendPageRefreshRequest(Long toolContentId) throws IOException {
Set toolContentWebsockets = websockets.get(toolContentId);
if (toolContentWebsockets == null) {
return;
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java
===================================================================
diff -u -r153c59d8375056a983c1bb0bb34044057c7c410a -re606aaebe2ef85c40a4054ef76abf62c94d224a4
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 153c59d8375056a983c1bb0bb34044057c7c410a)
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4)
@@ -267,9 +267,6 @@
/**
* Stores date when user has started activity with time limit
- *
- * @throws IOException
- * @throws JSONException
*/
@RequestMapping("/addOneMinute")
private void addOneMinute(HttpServletRequest request) throws IOException {
@@ -279,6 +276,13 @@
}
+ @RequestMapping("/startGalleryWalk")
+ private void startGalleryWalk(HttpServletRequest request) throws IOException {
+ Long toolContentId = WebUtil.readLongParam(request, DokumaranConstants.ATTR_TOOL_CONTENT_ID, false);
+
+ dokumaranService.startGalleryWalk(toolContentId);
+ }
+
private Integer getUserId() {
HttpSession ss = SessionManager.getSession();
UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER);
Index: lams_tool_doku/web/pages/learning/learning.jsp
===================================================================
diff -u -rb5c36d2f8fb70869f2402ed3457a9513e2db871c -re606aaebe2ef85c40a4054ef76abf62c94d224a4
--- lams_tool_doku/web/pages/learning/learning.jsp (.../learning.jsp) (revision b5c36d2f8fb70869f2402ed3457a9513e2db871c)
+++ lams_tool_doku/web/pages/learning/learning.jsp (.../learning.jsp) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4)
@@ -106,11 +106,7 @@
document.location.href='';
}
- function startGalleryWalk(){
- document.location.href='';
- }
-
-
+
//init the connection with server using server URL but with different protocol
var dokuWebsocketInitTime = Date.now(),
dokuWebsocket = new WebSocket(''.replace('http', 'ws')
@@ -152,6 +148,12 @@
// create JSON object
var input = JSON.parse(e.data);
+ // force page refresh, for example to go to Gallery Walk
+ if (input.pageRefresh) {
+ location.reload();
+ return;
+ }
+
//monitor has added one minute to the total timeLimit time
if (input.addTime) {
//reload page in order to allow editing the pad again
@@ -272,15 +274,9 @@
-
+
-
-
-