diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties index 4d9c06f8bc7af9b92c45f04d7b6aa246245d933b..b2c5461f246b591bf78c8718767ddeccbdd8441c 100644 --- a/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties @@ -66,8 +66,8 @@ rating.5.5=Excellent rating.explanation=Cliquez pour l'\u00E9valuation reset=Mettre \u00E0 z\u00E9ro save=Enregistrer -save.close=Sauver et fermer -savesas=Sauvegarder sous +save.close=Enregistrer et fermer +savesas=Enregistrer sous search=Chercher select=S\u00E9lectionner server.no.response=L'action n'a pas pu \u00EAtre effectu\u00E9e car le serveur n'a pas r\u00E9pondu ou est surcharg\u00E9. Essayez une nouvelle fois ou recharger la page. diff --git a/src/main/java/org/olat/course/assessment/AssessmentMainController.java b/src/main/java/org/olat/course/assessment/AssessmentMainController.java index 3dec256812b1868834085acc6e0201ec1851a4ce..c749cc74653ec5203c9c1363949d6df84b6cc551 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentMainController.java +++ b/src/main/java/org/olat/course/assessment/AssessmentMainController.java @@ -674,16 +674,23 @@ public class AssessmentMainController extends MainLayoutBasicController implemen * @return List of identities */ private List<Identity> getAllAssessableIdentities() { - + Set<Identity> duplicateKiller = new HashSet<>(); + List<Identity> assessableIdentities = new ArrayList<>(); + List<Identity> participants = businessGroupService.getMembers(coachedGroups, GroupRoles.participant.name()); - Set<Identity> duplicateKiller = new HashSet<>(participants); + for(Identity participant:participants) { + if(!duplicateKiller.contains(participant)) { + assessableIdentities.add(participant); + duplicateKiller.add(participant); + } + } if((repoTutor && coachedGroups.isEmpty()) || (callback.mayAssessAllUsers() || callback.mayViewAllUsersAssessments())) { List<Identity> courseParticipants = repositoryService.getMembers(re, GroupRoles.participant.name()); - for(Identity courseParticipant:courseParticipants) { - if(!duplicateKiller.contains(courseParticipant)) { - participants.add(courseParticipant); - duplicateKiller.add(courseParticipant); + for(Identity participant:courseParticipants) { + if(!duplicateKiller.contains(participant)) { + assessableIdentities.add(participant); + duplicateKiller.add(participant); } } } @@ -692,14 +699,16 @@ public class AssessmentMainController extends MainLayoutBasicController implemen mayViewAllUsersAssessments = true; ICourse course = CourseFactory.loadCourse(ores); CoursePropertyManager pm = course.getCourseEnvironment().getCoursePropertyManager(); - List<Identity> assessedRsers = pm.getAllIdentitiesWithCourseAssessmentData(participants); - for(Identity assessedRser:assessedRsers) { - if(!duplicateKiller.contains(assessedRser)) { - participants.add(assessedRser); + List<Identity> assessedUsers = pm.getAllIdentitiesWithCourseAssessmentData(participants); + for(Identity assessedUser:assessedUsers) { + if(!duplicateKiller.contains(assessedUser)) { + assessableIdentities.add(assessedUser); + duplicateKiller.add(assessedUser); } } } - return participants; + + return assessableIdentities; } private void fillAlternativeToAssessableIdentityList(AssessmentToolOptions options) { diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckboxPDFExport.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckboxPDFExport.java index c8fa646cfc9d4a48e48abf78153a542da09e8b1a..11b06b008bbba6dd13626fc87c1be418dfeaaa0d 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/CheckboxPDFExport.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckboxPDFExport.java @@ -257,7 +257,8 @@ public class CheckboxPDFExport extends PdfDocument implements MediaResource { return headers; } - public int drawTable(String[] headers, String[][] content, int offset, float maxHeaderSize, float nameMaxSize, float fontSize, float cellMargin) + public int drawTable(String[] headers, String[][] content, int offset, + float maxHeaderSize, float nameMaxSize, float fontSize, float cellMargin) throws IOException { float tableWidth = width; @@ -324,6 +325,7 @@ public class CheckboxPDFExport extends PdfDocument implements MediaResource { currentY -= headerHeight; + //draw the content textx = marginLeftRight + cellMargin; texty = currentY - 15; for (int i=offset; i<end; i++) { @@ -339,7 +341,7 @@ public class CheckboxPDFExport extends PdfDocument implements MediaResource { currentContentStream.drawString(text); currentContentStream.endText(); } - textx += (j==0 ? 100 : colWidth); + textx += (j==0 ? nameMaxSize : colWidth); } texty -= rowHeight; textx = marginLeftRight + cellMargin; diff --git a/src/main/java/org/olat/course/nodes/projectbroker/ProjectDetailsDisplayController.java b/src/main/java/org/olat/course/nodes/projectbroker/ProjectDetailsDisplayController.java index 63510ff6972436915af5bb6fa99ff8f8e81314fd..03818027f086081cae5d1a620d6025a67e672d1e 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/ProjectDetailsDisplayController.java +++ b/src/main/java/org/olat/course/nodes/projectbroker/ProjectDetailsDisplayController.java @@ -34,7 +34,6 @@ import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; -import org.olat.core.gui.components.download.DisplayOrDownloadComponent; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; import org.olat.core.gui.components.velocity.VelocityContainer; @@ -45,13 +44,16 @@ import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.creator.ControllerCreator; import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; +import org.olat.core.gui.media.MediaResource; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.UserConstants; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.LockResult; import org.olat.core.util.resource.OresHelper; -import org.olat.core.util.vfs.VFSContainerMapper; +import org.olat.core.util.vfs.VFSItem; +import org.olat.core.util.vfs.VFSLeaf; +import org.olat.core.util.vfs.VFSMediaResource; import org.olat.course.nodes.CourseNode; import org.olat.course.nodes.projectbroker.datamodel.CustomField; import org.olat.course.nodes.projectbroker.datamodel.Project; @@ -184,7 +186,8 @@ public class ProjectDetailsDisplayController extends BasicController { myContent.contextPut("projectPlaces", placesValue); } - attachedFileLink = LinkFactory.createCustomLink("attachedFileLink", "cmd.donwload.attachment", project.getAttachmentFileName(), Link.NONTRANSLATED, myContent, this); + attachedFileLink = LinkFactory.createCustomLink("attachedFileLink", "cmd.download.attachment", project.getAttachmentFileName(), Link.NONTRANSLATED, myContent, this); + attachedFileLink.setTarget("_blank"); putInitialPanel(myContent); } @@ -285,14 +288,12 @@ public class ProjectDetailsDisplayController extends BasicController { // Mapper is cleaned up automatically by basic controller OlatRootFolderImpl rootFolder = new OlatRootFolderImpl(projectBrokerManager.getAttamchmentRelativeRootPath(project,courseEnv,cNode),null); - String baseUrl = registerMapper(ureq, new VFSContainerMapper(rootFolder)); - - // Trigger auto-download - if(isLogDebugEnabled()) { - logDebug("baseUrl=" + baseUrl, null); + VFSItem item = rootFolder.resolve(project.getAttachmentFileName()); + if(item instanceof VFSLeaf) { + VFSLeaf attachment = (VFSLeaf)item; + MediaResource resource = new VFSMediaResource(attachment); + ureq.getDispatchResult().setResultingMediaResource(resource); } - DisplayOrDownloadComponent dordc = new DisplayOrDownloadComponent("downloadcomp",baseUrl + "/" + project.getAttachmentFileName()); - myContent.put("autoDownloadComp", dordc); } } diff --git a/src/main/java/org/olat/course/run/navigation/NavigationHandler.java b/src/main/java/org/olat/course/run/navigation/NavigationHandler.java index 4dece99bce1ed1bc83893052f10f3e1dca8b0eff..f3612a7d0010939f34f75ef4cbaef0cecd4822c5 100644 --- a/src/main/java/org/olat/course/run/navigation/NavigationHandler.java +++ b/src/main/java/org/olat/course/run/navigation/NavigationHandler.java @@ -36,6 +36,7 @@ import java.util.Set; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.tree.GenericTreeModel; import org.olat.core.gui.components.tree.GenericTreeNode; +import org.olat.core.gui.components.tree.MenuTree; import org.olat.core.gui.components.tree.TreeEvent; import org.olat.core.gui.components.tree.TreeModel; import org.olat.core.gui.components.tree.TreeNode; @@ -210,12 +211,17 @@ public class NavigationHandler implements Disposable { boolean dispatch = true; if(userObject instanceof String) { - if(TreeEvent.COMMAND_TREENODE_OPEN.equals(treeEvent.getSubCommand())) { + if(MenuTree.COMMAND_TREENODE_CLICKED.equals(treeEvent.getCommand()) && treeEvent.getSubCommand() == null) { + openCourseNodeIds.add((String)userObject); + openTreeNodeIds.add((String)userObject); + } else if(TreeEvent.COMMAND_TREENODE_OPEN.equals(treeEvent.getSubCommand())) { openCourseNodeIds.add((String)userObject); openTreeNodeIds.add((String)userObject); dispatch = false; } else if(TreeEvent.COMMAND_TREENODE_CLOSE.equals(treeEvent.getSubCommand())) { removeChildrenFromOpenNodes(selTN); + openCourseNodeIds.remove((String)userObject); + openTreeNodeIds.remove((String)userObject); dispatch = false; } } @@ -442,6 +448,12 @@ public class NavigationHandler implements Disposable { //add the selected node to the open one, if not, strange behaviour selectedCourseNodeId = courseNode.getIdent(); openCourseNodeIds.add(selectedCourseNodeId); + if(ncr != null) { + String subNodeId = ncr.getSelectedTreeNodeId(); + if(subNodeId != null) { + openCourseNodeIds.add(subNodeId); + } + } } openTreeNodeIds = convertToTreeNodeIds(treeEval, openCourseNodeIds);