Index: lams_tool_doku/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r0cd24faefd597f05b39df79d29dea51e1a7f43b4 -rf7eadd2d25a238ea0a2b20b502f93f0f4a4855d9 --- lams_tool_doku/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 0cd24faefd597f05b39df79d29dea51e1a7f43b4) +++ lams_tool_doku/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision f7eadd2d25a238ea0a2b20b502f93f0f4a4855d9) @@ -99,6 +99,8 @@ label.authoring.advance.gallery.walk.info2 = When enabled, after you start Gallery Walk in the lesson, the document created for each team is shared to all other teams. Teams then, can give each others feedback and rate each others' work. label.authoring.advance.gallery.walk.instructions = Instructions for Gallery Walk (ie: Please review other groups' work and make sure you add your review/comments) label.authoring.advance.gallery.walk.read.only.tooltip = Students will not be able to comment or rate other teams' work. +label.authoring.advance.gallery.walk.batch = Limit number of other teams being reviewed by each team +label.authoring.advance.gallery.walk.batch.tooltip = Each team will review no less than the number of teams specified here. In some situations (ie: small number of teams), this number may be exceeded. monitoring.summary.gallery.walk.start = Start Gallery Walk monitoring.summary.gallery.walk.start.confirm = Are you sure you want to finish collaboration phase and start Gallery Walk? You will not be able to return to collaboration phase. monitoring.summary.gallery.walk.finish = Finish Gallery Walk Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dbupdates/patch20230504.sql =================================================================== diff -u --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dbupdates/patch20230504.sql (revision 0) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dbupdates/patch20230504.sql (revision f7eadd2d25a238ea0a2b20b502f93f0f4a4855d9) @@ -0,0 +1,14 @@ +-- 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-5391 Add batches to gallery walk +ALTER TABLE tl_ladoku11_dokumaran ADD COLUMN gallery_walk_batch_size TINYINT UNSIGNED NOT NULL DEFAULT '0' AFTER gallery_walk_read_only; + +-- 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; \ No newline at end of file Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java =================================================================== diff -u -re2f52f574599806a41fe8864002496eaf73ff722 -rf7eadd2d25a238ea0a2b20b502f93f0f4a4855d9 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java (.../Dokumaran.java) (revision e2f52f574599806a41fe8864002496eaf73ff722) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java (.../Dokumaran.java) (revision f7eadd2d25a238ea0a2b20b502f93f0f4a4855d9) @@ -23,31 +23,19 @@ package org.lamsfoundation.lams.tool.dokumaran.model; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import javax.persistence.CollectionTable; -import javax.persistence.Column; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.MapKeyColumn; -import javax.persistence.Table; - import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.log4j.Logger; import org.hibernate.annotations.Cascade; +import javax.persistence.*; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + /** * Dokumaran * @@ -130,6 +118,9 @@ @Column(name = "gallery_walk_read_only") private boolean galleryWalkReadOnly; + @Column(name = "gallery_walk_batch_size") + private int galleryWalkBatchSize; + @Column(name = "gallery_walk_started") private boolean galleryWalkStarted; @@ -230,11 +221,11 @@ // ********************************************************** // get/set methods // ********************************************************** + /** * Returns the object's creation date * * @return date - * */ public Date getCreated() { return created; @@ -276,7 +267,7 @@ /** * @param createdBy - * The userid of the user who created this Share dokumaran. + * The userid of the user who created this Share dokumaran. */ public void setCreatedBy(DokumaranUser createdBy) { this.createdBy = createdBy; @@ -299,7 +290,7 @@ /** * @param title - * The title to set. + * The title to set. */ public void setTitle(String title) { this.title = title; @@ -322,7 +313,7 @@ /** * @param lockWhenFinished - * Set to true to lock the dokumaran for finished users. + * Set to true to lock the dokumaran for finished users. */ public void setLockWhenFinished(boolean lockWhenFinished) { this.lockWhenFinished = lockWhenFinished; @@ -380,7 +371,7 @@ /** * @param timeLimit - * the time limitation, that students have to complete an attempt. + * the time limitation, that students have to complete an attempt. */ public void setRelativeTimeLimit(int timeLimit) { this.relativeTimeLimit = timeLimit; @@ -490,6 +481,14 @@ this.galleryWalkReadOnly = galleryWalkReadOnly; } + public int getGalleryWalkBatchSize() { + return galleryWalkBatchSize; + } + + public void setGalleryWalkBatchSize(int galleryWalkBatchSize) { + this.galleryWalkBatchSize = galleryWalkBatchSize; + } + public boolean isGalleryWalkStarted() { return galleryWalkStarted; } Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java =================================================================== diff -u -r0cd24faefd597f05b39df79d29dea51e1a7f43b4 -rf7eadd2d25a238ea0a2b20b502f93f0f4a4855d9 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision 0cd24faefd597f05b39df79d29dea51e1a7f43b4) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision f7eadd2d25a238ea0a2b20b502f93f0f4a4855d9) @@ -34,6 +34,7 @@ import org.lamsfoundation.lams.etherpad.service.IEtherpadService; import org.lamsfoundation.lams.etherpad.util.EtherpadUtil; import org.lamsfoundation.lams.learning.service.ILearnerService; +import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; @@ -643,6 +644,21 @@ learnerService.createCommandForLearners(dokumaran.getContentId(), userIds, jsonCommand.toString()); } + @Override + public boolean isGroupedActivity(long toolContentID) { + return toolService.isGroupedActivity(toolContentID); + } + + @Override + public void auditLogStartEditingActivityInMonitor(long toolContentID) { + toolService.auditLogStartEditingActivityInMonitor(toolContentID); + } + + @Override + public boolean isLastActivity(Long toolSessionId) { + return toolService.isLastActivity(toolSessionId); + } + // ***************************************************************************** // private methods // ***************************************************************************** @@ -668,21 +684,38 @@ return contentId; } - @Override - public boolean isGroupedActivity(long toolContentID) { - return toolService.isGroupedActivity(toolContentID); - } + private List> getSessionsForGalleryWalk(long toolContentId) { + List> result = new ArrayList<>(); - @Override - public void auditLogStartEditingActivityInMonitor(long toolContentID) { - toolService.auditLogStartEditingActivityInMonitor(toolContentID); - } + Dokumaran dokumaran = getDokumaranByContentId(toolContentId); + List allSessions = dokumaranSessionDao.getByContentId(toolContentId); + int batchSize = dokumaran.getGalleryWalkBatchSize(); + Grouping grouping = getGrouping(toolContentId); + if (batchSize == 0 || grouping == null) { + result.add(allSessions); + return result; + } + // for authors batch size is how many *other* groups given group will rate, + // but here we need to calculate how many groups will be in batch + batchSize++; - @Override - public boolean isLastActivity(Long toolSessionId) { - return toolService.isLastActivity(toolSessionId); - } + List groupNames = grouping.getGroups().stream().map(Group::getGroupName).sorted().collect(Collectors.toList()); + List> groupNameBatches = new ArrayList<>(); + Random random = new Random(toolContentId); + // create random batches of group names, each minimum size of batchSize + while (!groupNames.isEmpty()) { + int batchSizeForThisBatch = Math.min(batchSize, groupNames.size()); + List groupNameBatch = new ArrayList<>(); + for (int i = 0; i < batchSizeForThisBatch; i++) { + int randomIndex = random.nextInt(groupNames.size()); + groupNameBatch.add(groupNames.remove(randomIndex)); + } + groupNameBatches.add(groupNameBatch); + } + + return result; + } // ******************************************************************************* // ToolContentManager, ToolSessionManager methods // ******************************************************************************* Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java =================================================================== diff -u -rca5a2db0956e5e04be5cbf1354c234f47c7c6353 -rf7eadd2d25a238ea0a2b20b502f93f0f4a4855d9 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java (.../IDokumaranService.java) (revision ca5a2db0956e5e04be5cbf1354c234f47c7c6353) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java (.../IDokumaranService.java) (revision f7eadd2d25a238ea0a2b20b502f93f0f4a4855d9) @@ -23,13 +23,6 @@ package org.lamsfoundation.lams.tool.dokumaran.service; -import java.io.IOException; -import java.time.LocalDateTime; -import java.util.List; - -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; - import org.lamsfoundation.lams.etherpad.EtherpadException; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.notebook.model.NotebookEntry; @@ -42,10 +35,15 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.List; + /** * @author Dapeng.Ni * - * Interface that defines the contract that all ShareDokumaran service provider must follow. + * Interface that defines the contract that all ShareDokumaran service provider must follow. */ public interface IDokumaranService extends ICommonToolService { @@ -58,7 +56,8 @@ Dokumaran getDokumaranByContentId(Long contentId); /** - * Get a cloned copy of tool default tool content (Dokumaran) and assign the toolContentId of that copy as the given + * Get a cloned copy of tool default tool content (Dokumaran) and assign the toolContentId of that copy as the + * given * contentId * * @param contentId @@ -73,8 +72,8 @@ * @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 + * 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 */ List checkLeaderSelectToolForSessionLeader(DokumaranUser user, Long toolSessionId, boolean isFirstTimeAccess); @@ -132,6 +131,7 @@ void createPad(Dokumaran dokumaran, DokumaranSession session) throws DokumaranApplicationException; // ********** for user methods ************* + /** * Get learner by given user ID and tool content ID, i.e. user who has a session assigned. */ @@ -237,7 +237,10 @@ void enableGalleryWalkLearnerEdit(long toolContentId) throws IOException; + // List> getGalleryWalkSessionBatches(long toolContentId); + void changeLeaderForGroup(long toolSessionId, long leaderUserId); Grouping getGrouping(long toolContentId); + } \ No newline at end of file Index: lams_tool_doku/web/pages/authoring/advance.jsp =================================================================== diff -u -r5fd4c8b186e7a28af5c8421e4ec26d2e2a2c7460 -rf7eadd2d25a238ea0a2b20b502f93f0f4a4855d9 --- lams_tool_doku/web/pages/authoring/advance.jsp (.../advance.jsp) (revision 5fd4c8b186e7a28af5c8421e4ec26d2e2a2c7460) +++ lams_tool_doku/web/pages/authoring/advance.jsp (.../advance.jsp) (revision f7eadd2d25a238ea0a2b20b502f93f0f4a4855d9) @@ -1,3 +1,4 @@ +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@ include file="/common/taglibs.jsp"%> @@ -108,6 +109,15 @@
+ + +
+ +