diff --git a/.hgtags b/.hgtags index 979fde4f6967a6ba251c05cff8190c33cf1bcae5..925c745b977b63a618e01925993960b5e4372f35 100644 --- a/.hgtags +++ b/.hgtags @@ -141,3 +141,4 @@ b38ed621ea53507fbf41eb616648ebad2340e613 OpenOLAT 10.4.7 e5ce704b8373f55f65e85f7aadf5600207209dff OpenOLAT 10.5.0 e5ce704b8373f55f65e85f7aadf5600207209dff OpenOLAT 10.5.0 f1a0784814fb3b4b6e707c528ea8e50002a72036 OpenOLAT 10.5.0 +0f69f7f504059f74d693436415dd0baf35693bf0 OpenOLAT 10.5.1 diff --git a/src/main/java/org/olat/admin/user/UserAdminController.java b/src/main/java/org/olat/admin/user/UserAdminController.java index a3e1c5db1577157bae6d07ac6406ab436769e4d4..8742a1cd33f9f9f5f136a2457cf35a018c7adf8d 100644 --- a/src/main/java/org/olat/admin/user/UserAdminController.java +++ b/src/main/java/org/olat/admin/user/UserAdminController.java @@ -37,7 +37,7 @@ import org.olat.basesecurity.Constants; import org.olat.basesecurity.SecurityGroup; import org.olat.core.commons.modules.bc.FolderConfig; import org.olat.core.commons.persistence.DBFactory; -import org.olat.core.commons.services.notifications.NotificationUIFactory; +import org.olat.core.commons.services.notifications.ui.NotificationSubscriptionController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; @@ -329,7 +329,7 @@ public class UserAdminController extends BasicController implements Activateable Boolean canSubscriptions = BaseSecurityModule.USERMANAGER_CAN_MODIFY_SUBSCRIPTIONS; if (canSubscriptions.booleanValue() || isOlatAdmin) { - Controller subscriptionsCtr = NotificationUIFactory.createSubscriptionListingController(identity, ureq, getWindowControl()); + Controller subscriptionsCtr = new NotificationSubscriptionController(ureq, getWindowControl(), identity, true); listenTo(subscriptionsCtr); // auto-dispose userTabP.addTab(translate(NLS_VIEW_SUBSCRIPTIONS), subscriptionsCtr.getInitialComponent()); } diff --git a/src/main/java/org/olat/core/commons/services/notifications/NotificationUIFactory.java b/src/main/java/org/olat/core/commons/services/notifications/NotificationUIFactory.java index 4409c41f6181a396340b782f0d9be05290a1fcde..efe2ab48354872ecc6086d9af0f061e38f86ed8f 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/NotificationUIFactory.java +++ b/src/main/java/org/olat/core/commons/services/notifications/NotificationUIFactory.java @@ -29,7 +29,6 @@ import java.util.Date; import org.olat.NewControllerFactory; import org.olat.core.commons.services.notifications.ui.NotificationNewsController; import org.olat.core.commons.services.notifications.ui.NotificationSubscriptionAndNewsController; -import org.olat.core.commons.services.notifications.ui.NotificationSubscriptionController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.translator.Translator; @@ -48,19 +47,6 @@ import org.olat.core.util.Util; */ public class NotificationUIFactory { - /** - * Create a controller that displays the subscriptions for a specific user - * - * @param subscriberIdentity - * @param ureq - * @param windowControl - * @return - */ - public static NotificationSubscriptionController createSubscriptionListingController(Identity subscriberIdentity, UserRequest ureq, - WindowControl windowControl) { - return new NotificationSubscriptionController(subscriberIdentity, ureq, windowControl); - } - /** * Create a controller that displays the users news from his subscriptions * diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsController.java b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsController.java index 766b7c71dde073e96d42232b8961369f1576f03a..37d2f4ed431e810975141948f0f1dcb6f68bcefd 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsController.java +++ b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsController.java @@ -103,7 +103,7 @@ public class NotificationSubscriptionAndNewsController extends BasicController i // Lazy initialize the notification subscription controller when the // user clicks the tab the first time if (tabbedEvent.getNewComponent() == subscriptionPanel && subscriptionCtr == null) { - subscriptionCtr = NotificationUIFactory.createSubscriptionListingController(subscriberIdentity, ureq, getWindowControl()); + subscriptionCtr = new NotificationSubscriptionController(ureq, getWindowControl(), subscriberIdentity, false); listenTo(subscriptionCtr); subscriptionPanel.setContent(subscriptionCtr.getInitialComponent()); } diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionController.java b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionController.java index 211ea9db2a0ca4ee89465e690a98f34c9ed62377..966bfdf175ff06ebc3dc55b44c9ba1bb0601674f 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionController.java +++ b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionController.java @@ -64,16 +64,18 @@ public class NotificationSubscriptionController extends BasicController { private DialogBoxController delYesNoC; private Identity subscriberIdentity; - public NotificationSubscriptionController(Identity subscriberIdentity, UserRequest ureq, WindowControl wControl) { + public NotificationSubscriptionController(UserRequest ureq, WindowControl wControl, + Identity subscriberIdentity, boolean adminColumns) { // use home fallback for rss translations super(ureq, wControl, Util.createPackageTranslator(HomeMainController.class, ureq.getLocale())); this.subscriberIdentity = subscriberIdentity; // Build the table that contains all the subscriptions TableGuiConfiguration tableGuiPrefs = new TableGuiConfiguration(); tableGuiPrefs.setTableEmptyMessage(translate("subscriptions.no.subscriptions")); + tableGuiPrefs.setPreferencesOffered(true, "notifications-" + adminColumns); subscriptionsTableCtr = new TableController(tableGuiPrefs, ureq, wControl, getTranslator()); subscriptionsTableModel = new NotificationSubscriptionTableDataModel(getTranslator()); - subscriptionsTableModel.addTableColumns(subscriptionsTableCtr); + subscriptionsTableModel.addTableColumns(subscriptionsTableCtr, adminColumns); updateSubscriptionsDataModel(); listenTo(subscriptionsTableCtr); // Main view is a velocity container diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java index 7ee74ef1e66ec1b6c0f78a999d8835957e7d1861..e1a4aac387246356eba795c49e0c41251e2cd258 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java +++ b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java @@ -54,10 +54,13 @@ class NotificationSubscriptionTableDataModel extends DefaultTableDataModel<Subsc * * @param subscriptionsTableCtr */ - void addTableColumns(TableController subscriptionsTableCtr) { - subscriptionsTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("overview.column.type", 0, "launch", getLocale())); - subscriptionsTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("overview.column.resname", 1, null, getLocale())); - subscriptionsTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("overview.column.subidentifier", 2, null, getLocale())); + void addTableColumns(TableController subscriptionsTableCtr, boolean admin) { + subscriptionsTableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("overview.column.key", 0, "launch", getLocale())); + subscriptionsTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("overview.column.type", 1, "launch", getLocale())); + subscriptionsTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("overview.column.resname", 2, null, getLocale())); + subscriptionsTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("overview.column.subidentifier", 3, null, getLocale())); + subscriptionsTableCtr.addColumnDescriptor(admin, new DefaultColumnDescriptor("overview.column.creationDate", 4, null, getLocale())); + subscriptionsTableCtr.addColumnDescriptor(admin, new DefaultColumnDescriptor("overview.column.lastEmail", 5, null, getLocale())); subscriptionsTableCtr.addColumnDescriptor(new StaticColumnDescriptor("del", "overview.column.action", trans .translate("overview.column.action.cellvalue"))); } @@ -80,13 +83,14 @@ class NotificationSubscriptionTableDataModel extends DefaultTableDataModel<Subsc Publisher pub = sub.getPublisher(); switch (col) { - case 0: + case 0: return sub.getKey(); + case 1: String innerType = pub.getType(); return NewControllerFactory.translateResourceableTypeName(innerType, getLocale()); - case 1: + case 2: String containerType = pub.getResName(); return NewControllerFactory.translateResourceableTypeName(containerType, getLocale()); - case 2: + case 3: NotificationsHandler handler = NotificationsManager.getInstance().getNotificationsHandler(pub); if(handler == null){ return ""; @@ -96,6 +100,8 @@ class NotificationSubscriptionTableDataModel extends DefaultTableDataModel<Subsc return ""; } return title; + case 4: return sub.getCreationDate(); + case 5: return sub.getLatestEmailed(); default: return "ERROR"; } diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_de.properties index 9775dfad370e3ab1d18737d2b451a5a9593fceaf..e4dd2f6e414fee18ec56ed4e8ed6462e5851fb7c 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_de.properties @@ -45,6 +45,9 @@ notificationsPortlet.multiple.news.in = {0} notificationsPortlet.single.news.in = 1 Ă„nderung in {0} overview.column.action=Aktion overview.column.action.cellvalue=L\u00F6schen +overview.column.creationDate=Erstellt am +overview.column.lastEmail=Letztes E-Mail +overview.column.key=ID overview.column.resname=Art overview.column.subidentifier=Titel overview.column.type=Typ diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_en.properties index f2909503157ef896d341ba1074f9d8a4e655ba4d..4f833807b6643e7869b6aa920de7e8f60378e989 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_en.properties @@ -58,6 +58,9 @@ notificationsPortlet.single.news.in=1 modification in {0} notificationsPortlet.title=My notifications overview.column.action=Action overview.column.action.cellvalue=Delete +overview.column.creationDate=Created on +overview.column.key=ID +overview.column.lastEmail=Last e-mail overview.column.resname=Type overview.column.subidentifier=Title overview.column.type=Type diff --git a/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_de.properties index 61b26bf188e3a1e45c2fea9f817c4806111470af..6f3de54bab14fbdbcaae227df50745f4132a38fb 100644 --- a/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_de.properties @@ -15,8 +15,8 @@ details.course.infos=Kursdetails download.button=Zertifikat herunterladen -options.certificates.title=Damit Kurse als bestanden angezeigt werden k\u00F6nnen, muss im Kurshauptknoten zwingend im "Punkte"-Tab die Option <strong>Bestanden berechnen?</strong> aktiviert werden. -options.certificates.descr=Test +options.certificates.title=Konfiguration Leistungnachweis +options.certificates.descr=Damit Kurse als bestanden angezeigt werden k\u00F6nnen, muss im Kurshauptknoten zwingend im "Punkte"-Tab die Option <strong>Bestanden berechnen?</strong> aktiviert werden. generate.certificate=Zertifikat erzeugen no.certificate=Kein Zertifikat vorhanden pdf.certificates=PDF Zertifikat erzeugen diff --git a/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java b/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java index 833d47181dcc63b44505016eadf2e31c5d3f6a0c..7fdf81460c7ce3fbbd2cce23a0dac8e071061d6d 100644 --- a/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java +++ b/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java @@ -21,8 +21,10 @@ package org.olat.course.export; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.UUID; @@ -40,6 +42,7 @@ public class CourseEnvironmentMapper { private final List<BGAreaReference> areas = new ArrayList<BGAreaReference>(); private final List<BusinessGroupReference> groups = new ArrayList<BusinessGroupReference>(); + private final Map<String,Map<String,String>> mapUniqueKeys = new HashMap<>(); private Identity author; @@ -54,6 +57,24 @@ public class CourseEnvironmentMapper { public void setAuthor(Identity author) { this.author = author; } + + public void addUniqueKeyPair(String ident, String sourceKey, String targetKey) { + Map<String,String> map; + if(mapUniqueKeys.containsKey(ident)) { + map = mapUniqueKeys.get(ident); + } else { + map = new HashMap<>(); + mapUniqueKeys.put(ident, map); + } + map.put(sourceKey, targetKey); + } + + public String getTargetUniqueKey(String ident, String sourceKey) { + if(mapUniqueKeys.containsKey(ident)) { + return mapUniqueKeys.get(ident).get(sourceKey); + } + return null; + } public List<BGAreaReference> getAreas() { return areas; diff --git a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java index 27cc580066eb088bb237e33f62638a2b734329ab..b91b622286aabec43b151c297d38bd504974d3e7 100644 --- a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java +++ b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java @@ -60,6 +60,7 @@ import org.olat.course.editor.CourseEditorEnv; import org.olat.course.editor.NodeEditController; import org.olat.course.editor.PublishEvents; import org.olat.course.editor.StatusDescription; +import org.olat.course.export.CourseEnvironmentMapper; import org.olat.course.nodes.cl.CheckboxManager; import org.olat.course.nodes.cl.model.Checkbox; import org.olat.course.nodes.cl.model.CheckboxList; @@ -489,7 +490,7 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements Set<String> usedNames = new HashSet<String>(); for(Checkbox checkbox:list.getList()) { - VFSContainer dir = checkboxManager.getFileContainer(course.getCourseEnvironment(), this, checkbox); + VFSContainer dir = checkboxManager.getFileContainer(course.getCourseEnvironment(), this); if(dir != null) { VFSItem item = dir.resolve(checkbox.getFilename()); if(item instanceof VFSLeaf) { @@ -516,7 +517,7 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements CheckboxList list = (CheckboxList)config.get(CONFIG_KEY_CHECKBOX); if(list != null && list.getList() != null) { for(Checkbox checkbox:list.getList()) { - File dir = checkboxManager.getFileDirectory(course.getCourseEnvironment(), this, checkbox); + File dir = checkboxManager.getFileDirectory(course.getCourseEnvironment(), this); if(dir.exists()) { File fFileExportDir = new File(fExportDirectory, "checklistfiles/" + getIdent() + "/" + checkbox.getCheckboxId()); fFileExportDir.mkdirs(); @@ -538,7 +539,7 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements String newCheckboxId = UUID.randomUUID().toString(); checkbox.setCheckboxId(newCheckboxId); if(fFileImportDir.exists()) { - File dir = checkboxManager.getFileDirectory(course.getCourseEnvironment(), this, checkbox); + File dir = checkboxManager.getFileDirectory(course.getCourseEnvironment(), this); dir.mkdirs(); FileUtils.copyDirContentsToDir(fFileImportDir, dir, false, "import file of checkbox"); } @@ -622,6 +623,56 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity(); am.saveScoreEvaluation(this, mySelf, assessedIdentity, sceval, userCourseEnv, false); } + + @Override + public CourseNode createInstanceForCopy(boolean isNewTitle, ICourse course, Identity author) { + CheckListCourseNode cNode = (CheckListCourseNode)super.createInstanceForCopy(isNewTitle, course, author); + CheckboxManager checkboxManager = CoreSpringFactory.getImpl(CheckboxManager.class); + CheckboxList list = (CheckboxList)cNode.getModuleConfiguration().get(CONFIG_KEY_CHECKBOX); + for(Checkbox checkbox:list.getList()) { + checkbox.setCheckboxId(UUID.randomUUID().toString()); + } + // the ident of the course node is the same + File sourceDir = checkboxManager.getFileDirectory(course.getCourseEnvironment(), this); + if(sourceDir.exists()) { + File targetDir = checkboxManager.getFileDirectory(course.getCourseEnvironment(), cNode); + if(!targetDir.exists()) { + targetDir.mkdirs(); + FileUtils.copyDirContentsToDir(sourceDir, targetDir, false, "copy files of checkbox"); + } + } + + return cNode; + } + + @Override + public void postCopy(CourseEnvironmentMapper envMapper, Processing processType, ICourse course, ICourse sourceCourse) { + ModuleConfiguration config = getModuleConfiguration(); + CheckboxManager checkboxManager = CoreSpringFactory.getImpl(CheckboxManager.class); + CheckboxList list = (CheckboxList)config.get(CONFIG_KEY_CHECKBOX); + for(Checkbox checkbox:list.getList()) { + String sourceId = checkbox.getCheckboxId(); + String targetId = envMapper.getTargetUniqueKey(getIdent(), sourceId); + if(targetId == null) { + targetId = UUID.randomUUID().toString(); + envMapper.addUniqueKeyPair(getIdent(), sourceId, targetId); + } + checkbox.setCheckboxId(targetId); + } + + // the ident of the course node is the same + File sourceDir = checkboxManager.getFileDirectory(sourceCourse.getCourseEnvironment(), this); + if(sourceDir.exists()) { + File targetDir = checkboxManager.getFileDirectory(course.getCourseEnvironment(), this); + if(!targetDir.exists()) { + targetDir.mkdirs(); + FileUtils.copyDirContentsToDir(sourceDir, targetDir, false, "copy files of checkbox"); + } + } + + checkboxManager.syncCheckbox(list, course, getIdent()); + super.postCopy(envMapper, processType, course, sourceCourse); + } @Override public void updateOnPublish(Locale locale, ICourse course, Identity publisher, PublishEvents publishEvents) { diff --git a/src/main/java/org/olat/course/nodes/TitledWrapperHelper.java b/src/main/java/org/olat/course/nodes/TitledWrapperHelper.java index 1dac8485ea80a4562167b0dbf548b5d0f97f3b33..de723be7443f30a787e6e4bdf51288f2726dade7 100644 --- a/src/main/java/org/olat/course/nodes/TitledWrapperHelper.java +++ b/src/main/java/org/olat/course/nodes/TitledWrapperHelper.java @@ -47,7 +47,7 @@ public class TitledWrapperHelper { if (StringHelper.containsNonWhitespace(iconCssClass)) { titleInfo.setIconCssClass(iconCssClass); } - controller = new TitledWrapperController(ureq, wControl, controller, "o_course_run", titleInfo); + controller = new TitledWrapperController(ureq, wControl, controller, null, titleInfo); } } else if (CourseNode.DISPLAY_OPTS_TITLE_CONTENT.equals(displayOption)) { if(StringHelper.containsNonWhitespace(courseNode.getLongTitle())) { @@ -56,7 +56,7 @@ public class TitledWrapperHelper { if (StringHelper.containsNonWhitespace(iconCssClass)) { titleInfo.setIconCssClass(iconCssClass); } - controller = new TitledWrapperController(ureq, wControl, controller, "o_course_run", titleInfo); + controller = new TitledWrapperController(ureq, wControl, controller, null, titleInfo); } } else if (CourseNode.DISPLAY_OPTS_SHORT_TITLE_DESCRIPTION_CONTENT.equals(displayOption)) { String title = courseNode.getShortTitle(); @@ -73,7 +73,7 @@ public class TitledWrapperHelper { if (StringHelper.containsNonWhitespace(iconCssClass)) { titleInfo.setIconCssClass(iconCssClass); } - controller = new TitledWrapperController(ureq, wControl, controller, "o_course_run", titleInfo); + controller = new TitledWrapperController(ureq, wControl, controller, null, titleInfo); } } else if (CourseNode.DISPLAY_OPTS_TITLE_DESCRIPTION_CONTENT.equals(displayOption)) { @@ -89,7 +89,7 @@ public class TitledWrapperHelper { if (StringHelper.containsNonWhitespace(iconCssClass)) { titleInfo.setIconCssClass(iconCssClass); } - controller = new TitledWrapperController(ureq, wControl, controller, "o_course_run", titleInfo); + controller = new TitledWrapperController(ureq, wControl, controller, null, titleInfo); } } return controller; diff --git a/src/main/java/org/olat/course/nodes/cl/CheckboxManager.java b/src/main/java/org/olat/course/nodes/cl/CheckboxManager.java index f968ac3b7bce80c351ef367f0a5beaa31b727610..a0a444f399bde8498e2962390ede137289fefecd 100644 --- a/src/main/java/org/olat/course/nodes/cl/CheckboxManager.java +++ b/src/main/java/org/olat/course/nodes/cl/CheckboxManager.java @@ -28,7 +28,6 @@ import org.olat.core.util.vfs.VFSContainer; import org.olat.course.nodes.CheckListCourseNode; import org.olat.course.nodes.cl.model.AssessmentBatch; import org.olat.course.nodes.cl.model.AssessmentData; -import org.olat.course.nodes.cl.model.Checkbox; import org.olat.course.nodes.cl.model.CheckboxList; import org.olat.course.nodes.cl.model.DBCheck; import org.olat.course.nodes.cl.model.DBCheckbox; @@ -96,7 +95,7 @@ public interface CheckboxManager { */ public List<AssessmentData> getAssessmentDatas(OLATResourceable ores, String resSubPath, RepositoryEntry re, List<BusinessGroup> groups); - public VFSContainer getFileContainer(CourseEnvironment courseEnv, CheckListCourseNode cNode, Checkbox checkbox); + public VFSContainer getFileContainer(CourseEnvironment courseEnv, CheckListCourseNode cNode); - public File getFileDirectory(CourseEnvironment courseEnv, CheckListCourseNode cNode, Checkbox checkbox); + public File getFileDirectory(CourseEnvironment courseEnv, CheckListCourseNode cNode); } diff --git a/src/main/java/org/olat/course/nodes/cl/manager/CheckboxManagerImpl.java b/src/main/java/org/olat/course/nodes/cl/manager/CheckboxManagerImpl.java index 956335a8f3d32022f00181ae866260980c09fd08..dee62ad9eefb4a56d01bc0d4ccb2b718d641a66a 100644 --- a/src/main/java/org/olat/course/nodes/cl/manager/CheckboxManagerImpl.java +++ b/src/main/java/org/olat/course/nodes/cl/manager/CheckboxManagerImpl.java @@ -510,14 +510,14 @@ public class CheckboxManagerImpl implements CheckboxManager { } @Override - public VFSContainer getFileContainer(CourseEnvironment courseEnv, CheckListCourseNode cNode, Checkbox checkbox) { + public VFSContainer getFileContainer(CourseEnvironment courseEnv, CheckListCourseNode cNode) { String path = courseEnv.getCourseBaseContainer().getRelPath() + "/" + CheckListCourseNode.FOLDER_NAME + "/" + cNode.getIdent(); OlatRootFolderImpl rootFolder = new OlatRootFolderImpl(path, null); return rootFolder; } @Override - public File getFileDirectory(CourseEnvironment courseEnv, CheckListCourseNode cNode, Checkbox checkbox) { + public File getFileDirectory(CourseEnvironment courseEnv, CheckListCourseNode cNode) { String path = courseEnv.getCourseBaseContainer().getRelPath() + "/" + CheckListCourseNode.FOLDER_NAME + "/" + cNode.getIdent(); File rootFolder = new File(FolderConfig.getCanonicalRoot(), path); return rootFolder; diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java index 30f533e4195d3d52af00216450a53914da191d61..eeb89717e0a03e8273515bf90ce1d44cf965c865 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java @@ -147,7 +147,7 @@ public class CheckListBoxListEditController extends FormBasicController { if(list != null && list.getList() != null) { for(Checkbox checkbox:list.getList()) { DownloadLink download = null; - VFSContainer container = checkboxManager.getFileContainer(courseEnv, courseNode, checkbox); + VFSContainer container = checkboxManager.getFileContainer(courseEnv, courseNode); if(container != null) { VFSItem item = container.resolve(checkbox.getFilename()); if(item instanceof VFSLeaf) { diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java index ecf16be2e8807d91d510fb80e0c31136e7cddcb7..20e8c5bbdca2bd887c8c3a6ee5a973e34fc74d07 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java @@ -212,7 +212,7 @@ public class CheckListRunController extends FormBasicController implements Contr DownloadLink downloadLink = null; if(StringHelper.containsNonWhitespace(checkbox.getFilename())) { - VFSContainer container = checkboxManager.getFileContainer(userCourseEnv.getCourseEnvironment(), courseNode, checkbox); + VFSContainer container = checkboxManager.getFileContainer(userCourseEnv.getCourseEnvironment(), courseNode); VFSItem item = container.resolve(checkbox.getFilename()); if(item instanceof VFSLeaf) { String name = "file_" + checkbox.getCheckboxId(); diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckboxEditController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckboxEditController.java index 05b2cadd6fa9861a070b14cf181fa5506aed2b3e..598f08e17d3a60b2fbd4ef45d314f65fbf6257d4 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/CheckboxEditController.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckboxEditController.java @@ -305,7 +305,7 @@ public class CheckboxEditController extends FormBasicController { } else { ICourse course = CourseFactory.loadCourse(courseOres); CourseEnvironment courseEnv = course.getCourseEnvironment(); - container = checkboxManager.getFileContainer(courseEnv, courseNode, checkbox); + container = checkboxManager.getFileContainer(courseEnv, courseNode); } return container; } diff --git a/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckListStepRunnerCallback.java b/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckListStepRunnerCallback.java index 2bb5d07d2ae260944ebc7f2a283528a08a264ba0..fcf870967d313246b0ebe3928f066fe887d6359d 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckListStepRunnerCallback.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckListStepRunnerCallback.java @@ -103,7 +103,7 @@ public class CheckListStepRunnerCallback implements StepRunnerCallback { VFSContainer tmpContainer = new LocalFolderImpl(path); VFSItem item = tmpContainer.resolve(templateBox.getFilename()); if(item instanceof VFSLeaf) { - VFSContainer container = checkboxManager.getFileContainer(courseEnv, checkNode, checkbox); + VFSContainer container = checkboxManager.getFileContainer(courseEnv, checkNode); VFSManager.copyContent(tmpContainer, container); tmpContainer.deleteSilently(); } diff --git a/src/main/java/org/olat/course/run/_content/index.html b/src/main/java/org/olat/course/run/_content/index.html index 139e73892404caef0e8feabc1b03e16db38de42d..6690446357d68bed623e29c6631ef3656f5fabf6 100644 --- a/src/main/java/org/olat/course/run/_content/index.html +++ b/src/main/java/org/olat/course/run/_content/index.html @@ -13,4 +13,6 @@ function o_activateCourseNode(nodeid) { } /* ]]> */ </script> -$r.render("coursemain") \ No newline at end of file +<div class="o_course_run"> + $r.render("coursemain") +</div> \ No newline at end of file diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderMetadataEditController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderMetadataEditController.java index 0a32d5f397cb0e49c9ff673bf97fd678e1f583ed..0e2656f64168ce7a63d8c1bc9cad7c1bacf54924 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/BinderMetadataEditController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/BinderMetadataEditController.java @@ -30,7 +30,6 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.FileElement; -import org.olat.core.gui.components.form.flexible.elements.StaticTextElement; import org.olat.core.gui.components.form.flexible.elements.TextBoxListElement; import org.olat.core.gui.components.form.flexible.elements.TextElement; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; diff --git a/src/main/java/org/olat/modules/video/ui/_content/video_preview.html b/src/main/java/org/olat/modules/video/ui/_content/video_preview.html index 4445da6917fc37a349786e8deca3d4a923664541..111f6c40380b22434a53a9e02e8dd706112cf284 100644 --- a/src/main/java/org/olat/modules/video/ui/_content/video_preview.html +++ b/src/main/java/org/olat/modules/video/ui/_content/video_preview.html @@ -1,6 +1,6 @@ <div class="o_video_run o_block_large_bottom o_clearfix"> <div class="olatFlashMovieViewer"> - <video id="$r.getId("o_vid")" width="$width" height="$height" controls autoplay class="o_video"> + <video id="$r.getId("o_vid")" width="$width" height="$height" controls autoplay preload="none" oncontextmenu="return false;" class="o_video"> <source type="video/mp4" src="$mediaUrl/$filename" /> </video> diff --git a/src/main/java/org/olat/modules/video/ui/_content/video_run.html b/src/main/java/org/olat/modules/video/ui/_content/video_run.html index 075ccaea53f7d271e51487afefb7d0b7e5e74f1e..bb2e7d0159855fdda8862bd9e41957c16688baf3 100644 --- a/src/main/java/org/olat/modules/video/ui/_content/video_run.html +++ b/src/main/java/org/olat/modules/video/ui/_content/video_run.html @@ -1,6 +1,6 @@ <div class="o_video_run o_block_large_bottom o_clearfix"> <div class="olatFlashMovieViewer"> - <video id="$r.getId("o_vid")" width="$width" height="$height" poster="$masterUrl/poster.jpg" controls preload="none" #if( $autoplay ) autoplay #end class="o_video"> + <video id="$r.getId("o_vid")" width="$width" height="$height" poster="$masterUrl/poster.jpg" controls preload="none" oncontextmenu="return false;" #if( $autoplay ) autoplay #end class="o_video"> #foreach($video in $videos) #set($position = $velocityCount - 1) <source type="video/mp4" src="$transcodedUrl/${video.getResolution()}video.mp4" title="$displayTitles.get($position) ($r.formatBytes(${video.getSize()}))" />