diff --git a/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java b/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java index 861fc401dca9595b1c6f98035c04c0a3a4be8d14..6e29fa66ad6fd6b45c53c13fa63215df3957d78e 100644 --- a/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java +++ b/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java @@ -152,11 +152,12 @@ public class HTMLEditorController extends FormBasicController { } - public HTMLEditorController(UserRequest ureq, WindowControl wControl, VFSContainer baseContainer, String relFilePath, - CustomLinkTreeModel customLinkTreeModel, String mediaPath, boolean editorCheckEnabled, boolean versions, boolean withButtons, Form rootForm) { + public HTMLEditorController(UserRequest ureq, WindowControl wControl, VFSContainer baseContainer, + String relFilePath, CustomLinkTreeModel customLinkTreeModel, String mediaPath, boolean editorCheckEnabled, + boolean versions, boolean withButtons, VFSEdusharingProvider edusharingProvider, Form rootForm) { super(ureq, wControl, LAYOUT_CUSTOM, "htmleditor", rootForm); // set some basic variables - initEditorForm(baseContainer, relFilePath, customLinkTreeModel, mediaPath, editorCheckEnabled, versions, withButtons, null); + initEditorForm(baseContainer, relFilePath, customLinkTreeModel, mediaPath, editorCheckEnabled, versions, withButtons, edusharingProvider); initForm(ureq); } diff --git a/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java b/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java index f2a71ab35181ee52932ce942974941ed9382fbe2..e4b28a651585c151ce4d262d4e19d771fe2a223f 100644 --- a/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java +++ b/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java @@ -84,6 +84,13 @@ public class WysiwygFactory { return new HTMLEditorController(ureq, wControl, rootDir, filePath, null, mediaPath, editorCheckEnabled, versions, null); } + + public static HTMLEditorController createWysiwygController(UserRequest ureq, WindowControl wControl, + VFSContainer rootDir, String filePath, String mediaPath, boolean editorCheckEnabled, boolean versions, + VFSEdusharingProvider edusharingProvider) { + return new HTMLEditorController(ureq, wControl, rootDir, filePath, null, mediaPath, editorCheckEnabled, + versions, edusharingProvider); + } /** * Factory method to create a file based HTML editor instance that uses diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java index cc5172e939884259b7fd586f3243f351bb49ac6a..fdbacebe0e43b53892af9a5c4421c0de59cb0758 100644 --- a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java +++ b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java @@ -96,12 +96,14 @@ import org.olat.modules.ModuleConfiguration; import org.olat.modules.assessment.AssessmentService; import org.olat.modules.assessment.Role; import org.olat.modules.assessment.model.AssessmentEntryStatus; +import org.olat.modules.edusharing.EdusharingService; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryRef; import org.olat.repository.RepositoryService; import org.olat.repository.manager.RepositoryEntryLifecycleDAO; import org.olat.repository.manager.RepositoryEntryRelationDAO; import org.olat.repository.model.RepositoryEntryLifecycle; +import org.olat.repository.ui.settings.LazyRepositoryEdusharingProvider; import org.olat.resource.OLATResource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -130,6 +132,8 @@ public class GTAManagerImpl implements GTAManager { @Autowired private AssessmentService assessmentService; @Autowired + private EdusharingService edusharingService; + @Autowired private RepositoryService repositoryService; @Autowired private BusinessGroupService businessGroupService; @@ -224,6 +228,7 @@ public class GTAManagerImpl implements GTAManager { if(deleteFile) { VFSContainer tasksContainer = getTasksContainer(courseEnv, cNode); VFSItem item = tasksContainer.resolve(removedTask.getFilename()); + deleteEdusharingUsages(courseEnv, item); if(item != null) { item.delete(); } @@ -233,6 +238,13 @@ public class GTAManagerImpl implements GTAManager { }); } + + private void deleteEdusharingUsages(CourseEnvironment courseEnv, VFSItem item) { + Long repositoryEntryKey = courseEnv.getCourseGroupManager().getCourseEntry().getKey(); + LazyRepositoryEdusharingProvider edusharingProvider = new LazyRepositoryEdusharingProvider(repositoryEntryKey); + edusharingProvider.setSubPath(item); + edusharingService.deleteUsages(edusharingProvider); + } @Override public void updateTaskDefinition(String currentFilename, TaskDefinition task, CourseEnvironment courseEnv, GTACourseNode cNode) { diff --git a/src/main/java/org/olat/course/nodes/gta/ui/AbstractAssignmentEditController.java b/src/main/java/org/olat/course/nodes/gta/ui/AbstractAssignmentEditController.java index a4d87ab060594eb27c190c1fe57166b7053c7564..3ec4dc422a9624b941ad803040c458edb9796bf6 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/AbstractAssignmentEditController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/AbstractAssignmentEditController.java @@ -66,6 +66,8 @@ import org.olat.course.nodes.gta.model.TaskDefinition; import org.olat.course.nodes.gta.ui.TaskDefinitionTableModel.TDCols; import org.olat.course.run.environment.CourseEnvironment; import org.olat.modules.ModuleConfiguration; +import org.olat.modules.edusharing.VFSEdusharingProvider; +import org.olat.repository.ui.settings.LazyRepositoryEdusharingProvider; import org.springframework.beans.factory.annotation.Autowired; /** @@ -94,6 +96,7 @@ abstract class AbstractAssignmentEditController extends FormBasicController { protected final GTACourseNode gtaNode; protected final CourseEnvironment courseEnv; protected final ModuleConfiguration config; + private final Long courseRepoKey; private int linkCounter = 0; @@ -111,6 +114,7 @@ abstract class AbstractAssignmentEditController extends FormBasicController { this.courseEnv = courseEnv; tasksFolder = gtaManager.getTasksDirectory(courseEnv, gtaNode); tasksContainer = gtaManager.getTasksContainer(courseEnv, gtaNode); + courseRepoKey = courseEnv.getCourseGroupManager().getCourseEntry().getKey(); initForm(ureq); } @@ -325,8 +329,9 @@ abstract class AbstractAssignmentEditController extends FormBasicController { tasksContainer.createChildLeaf(documentName); } + VFSEdusharingProvider edusharingProvider = new LazyRepositoryEdusharingProvider(courseRepoKey); newTaskEditorCtrl = WysiwygFactory.createWysiwygController(ureq, getWindowControl(), - tasksContainer, documentName, "media", true, true); + tasksContainer, documentName, "media", true, true, edusharingProvider); newTaskEditorCtrl.getRichTextConfiguration().disableMedia(); newTaskEditorCtrl.getRichTextConfiguration().setAllowCustomMediaFactory(false); newTaskEditorCtrl.setNewFile(true); @@ -343,7 +348,7 @@ abstract class AbstractAssignmentEditController extends FormBasicController { if(htmlDocument == null || !(htmlDocument instanceof VFSLeaf)) { showError("error.missing.file"); } else { - editTaskEditorCtrl = new EditHTMLTaskController(ureq, getWindowControl(), taskDef, tasksContainer); + editTaskEditorCtrl = new EditHTMLTaskController(ureq, getWindowControl(), taskDef, tasksContainer, courseRepoKey ); listenTo(editTaskEditorCtrl); cmc = new CloseableModalController(getWindowControl(), "close", editTaskEditorCtrl.getInitialComponent()); diff --git a/src/main/java/org/olat/course/nodes/gta/ui/EditHTMLTaskController.java b/src/main/java/org/olat/course/nodes/gta/ui/EditHTMLTaskController.java index a7d7a42913f86b9673192af06377aefe9f05487a..0d3bb1f3a95e1429f034175c81bc04d96e1afbaf 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/EditHTMLTaskController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/EditHTMLTaskController.java @@ -32,6 +32,8 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.util.StringHelper; import org.olat.core.util.vfs.VFSContainer; import org.olat.course.nodes.gta.model.TaskDefinition; +import org.olat.modules.edusharing.VFSEdusharingProvider; +import org.olat.repository.ui.settings.LazyRepositoryEdusharingProvider; /** * @@ -48,13 +50,15 @@ public class EditHTMLTaskController extends FormBasicController { private final VFSContainer taskContainer; private final String filenameToReplace; + private final Long repositoryEntryKey; public EditHTMLTaskController(UserRequest ureq, WindowControl wControl, - TaskDefinition task, VFSContainer taskContainer) { + TaskDefinition task, VFSContainer taskContainer, Long repositoryEntryKey) { super(ureq, wControl, LAYOUT_VERTICAL); this.task = task; this.filenameToReplace = task != null ? task.getFilename() : null; this.taskContainer = taskContainer; + this.repositoryEntryKey = repositoryEntryKey; initForm(ureq); } @@ -78,7 +82,8 @@ public class EditHTMLTaskController extends FormBasicController { String description = task.getDescription() == null ? "" : task.getDescription(); descriptionEl = uifactory.addTextAreaElement("descr", "task.description", 2048, 10, -1, true, false, description, formLayout); - contentEditor = new HTMLEditorController(ureq, getWindowControl(), taskContainer, task.getFilename(), null, "media", true, false, false, mainForm); + VFSEdusharingProvider edusharingProvider = new LazyRepositoryEdusharingProvider(repositoryEntryKey); + contentEditor = new HTMLEditorController(ureq, getWindowControl(), taskContainer, task.getFilename(), null, "media", true, false, false, edusharingProvider , mainForm); contentEditor.getRichTextConfiguration().disableMedia(); contentEditor.getRichTextConfiguration().setAllowCustomMediaFactory(false); listenTo(contentEditor); diff --git a/src/main/java/org/olat/modules/edusharing/EdusharingService.java b/src/main/java/org/olat/modules/edusharing/EdusharingService.java index 1939bc99566f2110504ab7c59366a0ed615b9e85..cb9a61241495d275b60ce64e47c104a74aa50606 100644 --- a/src/main/java/org/olat/modules/edusharing/EdusharingService.java +++ b/src/main/java/org/olat/modules/edusharing/EdusharingService.java @@ -74,6 +74,8 @@ public interface EdusharingService { public void deleteUsage(Identity identity, String identifier) throws EdusharingException; - public void deleteUsages(OLATResourceable ores, String subPath) throws EdusharingException; + public void deleteUsages(EdusharingProvider edusharingProvider); + public void deleteUsages(OLATResourceable ores, String subPath) throws EdusharingException; + } diff --git a/src/main/java/org/olat/modules/edusharing/manager/EdusharingServiceImpl.java b/src/main/java/org/olat/modules/edusharing/manager/EdusharingServiceImpl.java index b2103249ea2843f183713e8445affa6bd8e294b6..e321aa745e36c13ffbd2bebb2d5da98afb8fbce6 100644 --- a/src/main/java/org/olat/modules/edusharing/manager/EdusharingServiceImpl.java +++ b/src/main/java/org/olat/modules/edusharing/manager/EdusharingServiceImpl.java @@ -257,6 +257,11 @@ public class EdusharingServiceImpl implements EdusharingService { deleteUsage(usage, userIdentifier); } + + @Override + public void deleteUsages(EdusharingProvider edusharingProvider) { + deleteUsages(edusharingProvider.getOlatResourceable(), edusharingProvider.getSubPath()); + } @Override public void deleteUsages(OLATResourceable ores, String subPath) throws EdusharingException { @@ -267,6 +272,14 @@ public class EdusharingServiceImpl implements EdusharingService { } private void deleteUsage(EdusharingUsage usage, String userIdentifier) { + try { + tryDeleteUsage(usage, userIdentifier); + } catch (Exception e) { + log.warn("edu-sharing usage deleted failed for identifier: " + usage.getIdentifier()); + } + } + + private void tryDeleteUsage(EdusharingUsage usage, String userIdentifier) { DeleteUsageParameter parameter = new DeleteUsageParameter( usage.getIdentifier(), usage.getObjectUrl(),