Index: lams_tool_doku/conf/hibernate/mappings/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.hbm.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_doku/conf/hibernate/mappings/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.hbm.xml,v
diff -u -r1.2 -r1.3
--- lams_tool_doku/conf/hibernate/mappings/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.hbm.xml 24 Jan 2017 09:45:45 -0000 1.2
+++ lams_tool_doku/conf/hibernate/mappings/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.hbm.xml 25 Jan 2017 07:24:15 -0000 1.3
@@ -132,6 +132,14 @@
insert="true"
column="use_select_leader_tool_ouput"
/>
+
+
getBySessionID(Long sessionId);
+
+ /**
+ * Get the list of all leaders in the specified session. This method is applicable only in case allowMultipleLeaders option is ON.
+ *
+ * @param sessionId
+ * @return
+ */
+ List getLeadersBySessionId(Long sessionId);
}
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/hibernate/DokumaranUserDAOHibernate.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/hibernate/DokumaranUserDAOHibernate.java,v
diff -u -r1.1 -r1.2
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/hibernate/DokumaranUserDAOHibernate.java 16 Jan 2017 15:28:10 -0000 1.1
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/hibernate/DokumaranUserDAOHibernate.java 25 Jan 2017 07:24:15 -0000 1.2
@@ -39,6 +39,8 @@
+ " as u where u.userId =? and u.session.sessionId=?";
private static final String FIND_BY_SESSION_ID = "from " + DokumaranUser.class.getName()
+ " as u where u.session.sessionId=?";
+ private static final String FIND_LEADERS_BY_SESSION_ID = "from " + DokumaranUser.class.getName()
+ + " as u where u.session.sessionId=? AND u.leader=1";
@Override
public DokumaranUser getUserByUserIDAndSessionID(Long userID, Long sessionId) {
@@ -63,5 +65,10 @@
public List getBySessionID(Long sessionId) {
return (List) this.doFind(FIND_BY_SESSION_ID, sessionId);
}
+
+ @Override
+ public List getLeadersBySessionId(Long sessionId) {
+ return (List) this.doFind(FIND_LEADERS_BY_SESSION_ID, sessionId);
+ }
}
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java,v
diff -u -r1.2 -r1.3
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java 24 Jan 2017 09:45:45 -0000 1.2
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java 25 Jan 2017 07:24:15 -0000 1.3
@@ -52,6 +52,8 @@
// advance
private boolean useSelectLeaderToolOuput;
+
+ private boolean allowMultipleLeaders;
private boolean showChat;
@@ -349,7 +351,19 @@
public void setUseSelectLeaderToolOuput(boolean useSelectLeaderToolOuput) {
this.useSelectLeaderToolOuput = useSelectLeaderToolOuput;
}
+
+ /**
+ *
+ * @return
+ */
+ public boolean isAllowMultipleLeaders() {
+ return allowMultipleLeaders;
+ }
+ public void setAllowMultipleLeaders(boolean allowMultipleLeaders) {
+ this.allowMultipleLeaders = allowMultipleLeaders;
+ }
+
/**
*
* @return
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/DokumaranSession.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/DokumaranSession.java,v
diff -u -r1.2 -r1.3
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/DokumaranSession.java 24 Jan 2017 09:45:45 -0000 1.2
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/DokumaranSession.java 25 Jan 2017 07:24:15 -0000 1.3
@@ -142,11 +142,6 @@
public void setGroupLeader(DokumaranUser groupLeader) {
this.groupLeader = groupLeader;
}
-
- public boolean isUserGroupLeader(Long userUid) {
- boolean isUserLeader = (this.groupLeader != null) && userUid.equals(this.groupLeader.getUid());
- return isUserLeader;
- }
/**
* @return Returns the etherpadReadOnlyId
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java,v
diff -u -r1.2 -r1.3
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java 24 Jan 2017 09:45:45 -0000 1.2
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java 25 Jan 2017 07:24:15 -0000 1.3
@@ -217,48 +217,132 @@
}
@Override
- public DokumaranUser checkLeaderSelectToolForSessionLeader(DokumaranUser user, Long toolSessionId) {
+ public List checkLeaderSelectToolForSessionLeader(DokumaranUser user, Long toolSessionId, boolean isFirstTimeAccess) {
if ((user == null) || (toolSessionId == null)) {
return null;
}
DokumaranSession session = getDokumaranSessionBySessionId(toolSessionId);
- Long toolContentId = session.getDokumaran().getContentId();
- boolean isMultipleLeadersAllowed = isGroupedActivity(toolContentId);
- if (isMultipleLeadersAllowed) {
+ Dokumaran dokumaran = session.getDokumaran();
+ List leaders = new ArrayList();
+ if (dokumaran.isAllowMultipleLeaders() && !isGroupedActivity(dokumaran.getContentId())) {
+
+ List createdLeaders = dokumaranUserDao.getLeadersBySessionId(toolSessionId);
+ leaders.addAll(createdLeaders);
+
+ // check leader select tool for a leader only in case Dokumaran activity is accessed by this user for the first
+ // time. We need to add this check in order to reduce amount of queries to Leader Selection tool.
+ if (isFirstTimeAccess) {
+ //get all leaders from Leader Selection tool
+ Set allLeaderUserIds = toolService.getAllLeaderUserIds(toolSessionId, user.getUserId().intValue());
+ for (Long leaderUserId : allLeaderUserIds) {
+ //in case current user is leader - store his leader status
+ if (leaderUserId.equals(user.getUserId())) {
+ user.setLeader(true);
+ saveUser(user);
+ leaders.add(user);
+ continue;
+ }
+
+ //check if such leader is already created inside doKumaran
+ boolean isLeaderCreated = false;
+ for (DokumaranUser leader : createdLeaders) {
+ if (leader.getUserId().equals(leaderUserId)) {
+ isLeaderCreated = true;
+ break;
+ }
+ }
+
+ //if the leader is not yet created - create him
+ if (!isLeaderCreated && (getUserByIDAndSession(leaderUserId, toolSessionId) == null)) {
+ log.debug("creating new user with userId: " + leaderUserId);
+ User leaderDto = (User) userManagementService.findById(User.class, leaderUserId.intValue());
+ DokumaranUser leader = new DokumaranUser(leaderDto.getUserDTO(), session);
+ leader.setLeader(true);
+ saveUser(leader);
+ leaders.add(leader);
+ }
+ }
+
+ }
} else {
+ DokumaranUser leader = session.getGroupLeader();
+ // check leader select tool for a leader only in case Dokumaran tool doesn't know it. As otherwise it will
+ // screw
+ // up previous scratches done
+ if (leader == null) {
- }
+ Long leaderUserId = toolService.getLeaderUserId(toolSessionId, user.getUserId().intValue());
+ if (leaderUserId != null) {
+ leader = getUserByIDAndSession(leaderUserId, toolSessionId);
- DokumaranUser leader = session.getGroupLeader();
- // check leader select tool for a leader only in case Dokumaran tool doesn't know it. As otherwise it will screw
- // up previous scratches done
- if (leader == null) {
+ // create new user in a DB
+ if (leader == null) {
+ log.debug("creating new user with userId: " + leaderUserId);
+ User leaderDto = (User) userManagementService.findById(User.class, leaderUserId.intValue());
+ leader = new DokumaranUser(leaderDto.getUserDTO(), session);
+ saveUser(leader);
+ }
- Long leaderUserId = toolService.getLeaderUserId(toolSessionId, user.getUserId().intValue());
- if (leaderUserId != null) {
- leader = getUserByIDAndSession(leaderUserId, toolSessionId);
-
- // create new user in a DB
- if (leader == null) {
- log.debug("creating new user with userId: " + leaderUserId);
- User leaderDto = (User) userManagementService.findById(User.class, leaderUserId.intValue());
- leader = new DokumaranUser(leaderDto.getUserDTO(), session);
- createUser(leader);
+ // set group leader
+ session.setGroupLeader(leader);
+ dokumaranSessionDao.saveObject(session);
}
+ }
+
+ leaders.add(leader);
+ }
- // set group leader
- session.setGroupLeader(leader);
- dokumaranSessionDao.saveObject(session);
+ return leaders;
+ }
+
+ @Override
+ public boolean isUserLeader(List leaders, Long userId) {
+ for (DokumaranUser leader : leaders) {
+ if (userId.equals(leader.getUserId())) {
+ return true;
}
}
+ return false;
+ }
+
+ @Override
+ public boolean isLeaderResponseFinalized(List leaders) {
+ for (DokumaranUser leader : leaders) {
+ if (leader.isSessionFinished()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean isLeaderResponseFinalized(Long toolSessionId) {
+ DokumaranSession session = getDokumaranSessionBySessionId(toolSessionId);
+ Dokumaran dokumaran = session.getDokumaran();
+
+ boolean isLeaderResponseFinalized = false;
+ if (dokumaran.isAllowMultipleLeaders() && !isGroupedActivity(dokumaran.getContentId())) {
+
+ List leaders = dokumaranUserDao.getLeadersBySessionId(toolSessionId);
+ for (DokumaranUser leader : leaders) {
+ if (leader.isSessionFinished()) {
+ isLeaderResponseFinalized = true;
+ break;
+ }
+ }
+
+ } else {
+ DokumaranUser leader = session.getGroupLeader();
+ isLeaderResponseFinalized = (leader != null) && leader.isSessionFinished();
+ }
- return leader;
+ return isLeaderResponseFinalized;
}
@Override
- public void createUser(DokumaranUser dokumaranUser) {
+ public void saveUser(DokumaranUser dokumaranUser) {
dokumaranUserDao.saveObject(dokumaranUser);
}
@@ -1029,6 +1113,7 @@
dokumaran.setReflectOnActivity(JsonUtil.opt(toolContentJSON, RestTags.REFLECT_ON_ACTIVITY, Boolean.FALSE));
dokumaran.setReflectInstructions(JsonUtil.opt(toolContentJSON, RestTags.REFLECT_INSTRUCTIONS, (String) null));
dokumaran.setUseSelectLeaderToolOuput(JsonUtil.opt(toolContentJSON, "useSelectLeaderToolOuput", Boolean.FALSE));
+ dokumaran.setAllowMultipleLeaders(JsonUtil.opt(toolContentJSON, "allowMultipleLeaders", Boolean.FALSE));
dokumaran.setContentInUse(false);
dokumaran.setDefineLater(false);
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java,v
diff -u -r1.2 -r1.3
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java 24 Jan 2017 09:45:45 -0000 1.2
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java 25 Jan 2017 07:24:15 -0000 1.3
@@ -69,9 +69,40 @@
*
* @param userId
* @param toolSessionId
+ * @param isFirstTimeAccess
+ * whether user is accessing this doKumaran tool for the first time. If it's true - it will try to update
+ * leaders list from the Leader Selection activity
*/
- DokumaranUser checkLeaderSelectToolForSessionLeader(DokumaranUser user, Long toolSessionId);
+ List checkLeaderSelectToolForSessionLeader(DokumaranUser user, Long toolSessionId, boolean isFirstTimeAccess);
+ /**
+ * Is user is as a leader. It works OK in all cases regardless whether isAllowMultipleLeaders option is ON or OFF
+ * (as all leaders are kept in leaders list anyway).
+ *
+ * @param leaders
+ * @param userId
+ * @return
+ */
+ boolean isUserLeader(List leaders, Long userId);
+
+ /**
+ * Checks whether at least one of the leaders has finished activity and thus all non-leaders can proceed with finishing it as well.
+ *
+ * @param leaders
+ * @return
+ */
+ boolean isLeaderResponseFinalized(List leaders);
+
+ /**
+ * Checks whether at least one of the leaders has finished activity and thus all non-leaders can proceed with
+ * finishing it as well. It differs from the above method that is should be used when leaders list is not
+ * constructed yet.
+ *
+ * @param session
+ * @return
+ */
+ boolean isLeaderResponseFinalized(Long toolSessionId);
+
Cookie createEtherpadCookieForLearner(DokumaranUser user, DokumaranSession session) throws DokumaranConfigurationException, URISyntaxException;
Cookie createEtherpadCookieForMonitor(UserDTO user, Long contentId) throws DokumaranConfigurationException, URISyntaxException;
@@ -89,7 +120,7 @@
/**
* Create a new user in database.
*/
- void createUser(DokumaranUser dokumaranUser);
+ void saveUser(DokumaranUser dokumaranUser);
/**
* Get user by given userID and toolContentID.
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/action/LearningAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/action/LearningAction.java,v
diff -u -r1.2 -r1.3
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/action/LearningAction.java 24 Jan 2017 09:45:45 -0000 1.2
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/action/LearningAction.java 25 Jan 2017 07:24:15 -0000 1.3
@@ -128,21 +128,30 @@
// get back the dokumaran and item list and display them on page
DokumaranUser user = null;
+ boolean isFirstTimeAccess = false;
if ((mode != null) && mode.isTeacher()) {
// monitoring mode - user is specified in URL
// dokumaranUser may be null if the user was force completed.
user = getSpecifiedUser(service, toolSessionId,
WebUtil.readIntParam(request, AttributeNames.PARAM_USER_ID, false));
} else {
- user = getCurrentUser(service, toolSessionId);
+ // get back login user DTO
+ HttpSession ss = SessionManager.getSession();
+ UserDTO userDto = (UserDTO) ss.getAttribute(AttributeNames.USER);
+ user = service.getUserByIDAndSession(new Long(userDto.getUserID().intValue()), toolSessionId);
+ if (user == null) {
+ user = new DokumaranUser(userDto, session);
+ service.saveUser(user);
+ isFirstTimeAccess = true;
+ }
}
// support for leader select feature
- DokumaranUser groupLeader = dokumaran.isUseSelectLeaderToolOuput()
- ? service.checkLeaderSelectToolForSessionLeader(user, new Long(toolSessionId).longValue())
+ List leaders = dokumaran.isUseSelectLeaderToolOuput()
+ ? service.checkLeaderSelectToolForSessionLeader(user, new Long(toolSessionId).longValue(), isFirstTimeAccess)
: null;
- // forwards to the leaderSelection page
- if (dokumaran.isUseSelectLeaderToolOuput() && (groupLeader == null) && !mode.isTeacher()) {
+ // forwards to the leaderSelection page
+ if (dokumaran.isUseSelectLeaderToolOuput() && leaders.isEmpty() && !mode.isTeacher()) {
// get group users and store it to request as DTO objects
List groupUsers = service.getUsersBySession(toolSessionId);
@@ -157,8 +166,7 @@
request.setAttribute(DokumaranConstants.ATTR_DOKUMARAN, dokumaran);
return mapping.findForward("waitforleader");
}
- sessionMap.put(DokumaranConstants.ATTR_GROUP_LEADER, groupLeader);
- boolean isUserLeader = session.isUserGroupLeader(user.getUid());
+ boolean isUserLeader = (user != null) && service.isUserLeader(leaders, user.getUserId());
// check whether finish lock is on/off
boolean finishedLock = dokumaran.getLockWhenFinished() && (user != null) && user.isSessionFinished();
@@ -170,10 +178,9 @@
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_USER_FINISHED, (user != null) && user.isSessionFinished());
sessionMap.put(DokumaranConstants.ATTR_HAS_EDIT_RIGHT, hasEditRight);
- sessionMap.put(DokumaranConstants.ATTR_IS_LEADER_RESPONSE_FINALIZED, groupLeader != null && groupLeader.isSessionFinished());
+ sessionMap.put(DokumaranConstants.ATTR_IS_LEADER_RESPONSE_FINALIZED, service.isLeaderResponseFinalized(leaders));
sessionMap.put(AttributeNames.PARAM_TOOL_SESSION_ID, toolSessionId);
sessionMap.put(AttributeNames.ATTR_MODE, mode);
@@ -227,8 +234,10 @@
request.setAttribute(DokumaranConstants.ATTR_PAD_ID, padId);
//add new sessionID cookie in order to access pad
- Cookie etherpadSessionCookie = service.createEtherpadCookieForLearner(user, session);
- response.addCookie(etherpadSessionCookie);
+ if (user != null) {
+ Cookie etherpadSessionCookie = service.createEtherpadCookieForLearner(user, session);
+ response.addCookie(etherpadSessionCookie);
+ }
return mapping.findForward(DokumaranConstants.SUCCESS);
}
@@ -242,11 +251,8 @@
IDokumaranService service = getDokumaranService();
Long toolSessionId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID);
- DokumaranSession session = service.getDokumaranSessionBySessionId(toolSessionId);
- DokumaranUser leader = session.getGroupLeader();
+ boolean isLeaderResponseFinalized = service.isLeaderResponseFinalized(toolSessionId);
- boolean isLeaderResponseFinalized = leader.isSessionFinished();
-
JSONObject JSONObject = new JSONObject();
JSONObject.put(DokumaranConstants.ATTR_IS_LEADER_RESPONSE_FINALIZED, isLeaderResponseFinalized);
response.setContentType("application/x-json;charset=utf-8");
@@ -380,21 +386,6 @@
return LearningAction.dokumaranService;
}
- private DokumaranUser getCurrentUser(IDokumaranService service, Long sessionId) {
- // try to get form system session
- HttpSession ss = SessionManager.getSession();
- // get back login user DTO
- UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER);
- DokumaranUser dokumaranUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()), sessionId);
-
- if (dokumaranUser == null) {
- DokumaranSession session = service.getDokumaranSessionBySessionId(sessionId);
- dokumaranUser = new DokumaranUser(user, session);
- service.createUser(dokumaranUser);
- }
- return dokumaranUser;
- }
-
private DokumaranUser getSpecifiedUser(IDokumaranService service, Long sessionId, Integer userId) {
DokumaranUser dokumaranUser = service.getUserByIDAndSession(new Long(userId.intValue()), sessionId);
if (dokumaranUser == null) {
Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/form/DokumaranForm.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/form/DokumaranForm.java,v
diff -u -r1.1 -r1.2
--- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/form/DokumaranForm.java 16 Jan 2017 15:28:09 -0000 1.1
+++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/form/DokumaranForm.java 25 Jan 2017 07:24:15 -0000 1.2
@@ -76,6 +76,7 @@
dokumaran.setLockWhenFinished(false);
dokumaran.setDefineLater(false);
dokumaran.setUseSelectLeaderToolOuput(false);
+ dokumaran.setAllowMultipleLeaders(false);
dokumaran.setReflectOnActivity(false);
}
}
Index: lams_tool_doku/web/pages/authoring/advance.jsp
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_doku/web/pages/authoring/advance.jsp,v
diff -u -r1.2 -r1.3
--- lams_tool_doku/web/pages/authoring/advance.jsp 24 Jan 2017 09:45:45 -0000 1.2
+++ lams_tool_doku/web/pages/authoring/advance.jsp 25 Jan 2017 07:24:15 -0000 1.3
@@ -10,6 +10,14 @@
+
+
+
+
@@ -74,4 +82,9 @@
$('#shared-pad-id').keyup(function(){
$('#shared-pad-id-on').prop('checked', !isEmpty($(this).val()));
});
+
+ //automatically turn on shared-pad-id-on option if there are text input in shared-pad-id area
+ $('#useSelectLeaderToolOuput').change(function(){
+ $('#allowMultipleLeaders').prop('disabled', !$('#allowMultipleLeaders').prop('disabled'));
+ });
Index: lams_tool_doku/web/pages/monitoring/advanceoptions.jsp
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_doku/web/pages/monitoring/advanceoptions.jsp,v
diff -u -r1.1 -r1.2
--- lams_tool_doku/web/pages/monitoring/advanceoptions.jsp 16 Jan 2017 15:28:09 -0000 1.1
+++ lams_tool_doku/web/pages/monitoring/advanceoptions.jsp 25 Jan 2017 07:24:15 -0000 1.2
@@ -40,6 +40,23 @@
+
+ |
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
|