diff --git a/src/main/java/org/olat/course/CourseModule.java b/src/main/java/org/olat/course/CourseModule.java index 2d9a10b544a66b93cb1112039567624a6e0f9cd7..4a1fde26e97d1fe3b72fcf15de2e7f7f6e339f9f 100644 --- a/src/main/java/org/olat/course/CourseModule.java +++ b/src/main/java/org/olat/course/CourseModule.java @@ -50,6 +50,7 @@ import org.olat.properties.Property; import org.olat.properties.PropertyManager; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; +import org.olat.repository.RepositoryService; import org.olat.resource.OLATResource; import org.olat.resource.OLATResourceManager; @@ -77,7 +78,7 @@ public class CourseModule extends AbstractOLATModule { private CourseFactory courseFactory; private Map<String, String> logVisibilities; private List<DeployableCourseExport> deployableCourseExports; - private RepositoryManager repositoryManager; + private RepositoryService repositoryService; private OLATResourceManager olatResourceManager; @@ -85,11 +86,11 @@ public class CourseModule extends AbstractOLATModule { /** * [used by spring] */ - private CourseModule(CoordinatorManager coordinatorManager, PropertyManager propertyManager, CourseFactory courseFactory, RepositoryManager repositoryManager, OLATResourceManager olatResourceManager) { + private CourseModule(CoordinatorManager coordinatorManager, PropertyManager propertyManager, CourseFactory courseFactory, RepositoryService repositoryService, OLATResourceManager olatResourceManager) { this.coordinatorManager = coordinatorManager; this.propertyManager = propertyManager; this.courseFactory = courseFactory; - this.repositoryManager = repositoryManager; + this.repositoryService = repositoryService; this.olatResourceManager = olatResourceManager; coordinatorManager.getCoordinator().getEventBus().registerFor(this, null, FrameworkStartupEventChannel.getStartupEventChannel()); } @@ -277,7 +278,7 @@ public class CourseModule extends AbstractOLATModule { private void deleteCourseAndProperty(Property prop, RepositoryEntry re) { try { propertyManager.deleteProperty(prop); - repositoryManager.deleteRepositoryEntryAndBasesecurity(re); + repositoryService.deleteRepositoryEntryAndBaseGroups(re); CourseFactory.deleteCourse(re.getOlatResource()); OLATResource ores = olatResourceManager.findResourceable(re.getOlatResource()); olatResourceManager.deleteOLATResource(ores); diff --git a/src/main/java/org/olat/course/_spring/courseContext.xml b/src/main/java/org/olat/course/_spring/courseContext.xml index 78bd0820525fa92732ac24b92640f98f18836abc..89a122c83cab3832210417c9a1ac05085d01434a 100644 --- a/src/main/java/org/olat/course/_spring/courseContext.xml +++ b/src/main/java/org/olat/course/_spring/courseContext.xml @@ -24,7 +24,7 @@ <constructor-arg index="0" ref="coordinatorManager" /> <constructor-arg index="1" ref="propertyManager" /> <constructor-arg index="2" ref="courseFactory" /> - <constructor-arg index="3" ref="repositoryManager" /> + <constructor-arg index="3" ref="repositoryService" /> <constructor-arg index="4" ref="resourceManager" /> <property name="persistedProperties"> diff --git a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java index 6f73653aec640942fb56f8cfb824f521c8f058c8..fef06048e548a957649c121b5696cbb061219c65 100644 --- a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java +++ b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java @@ -263,6 +263,7 @@ public class PersistingCourseGroupManager extends BasicManager implements Course /** * @see org.olat.course.groupsandrights.CourseGroupManager#deleteCourseGroupmanagement() */ + @Override public void deleteCourseGroupmanagement() { //delete permission group to course RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(getCourseResource(), false); diff --git a/src/main/java/org/olat/ims/qti/repository/handlers/QTIHandler.java b/src/main/java/org/olat/ims/qti/repository/handlers/QTIHandler.java index e09900fbf3b375d12b5caf11fe49b526d2e15042..3a3b83332f8a2737d4f2abf74d03fccb5cc6f945 100644 --- a/src/main/java/org/olat/ims/qti/repository/handlers/QTIHandler.java +++ b/src/main/java/org/olat/ims/qti/repository/handlers/QTIHandler.java @@ -39,6 +39,7 @@ import org.olat.core.gui.control.generic.layout.MainLayoutController; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.util.Util; import org.olat.core.util.ZipUtil; import org.olat.core.util.coordinate.CoordinatorManager; @@ -53,6 +54,7 @@ import org.olat.ims.qti.process.Resolver; import org.olat.modules.iq.IQManager; import org.olat.modules.iq.IQPreviewSecurityCallback; import org.olat.modules.iq.IQSecurityCallback; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -155,18 +157,18 @@ public abstract class QTIHandler extends FileHandler { } @Override - public boolean readyToDelete(OLATResourceable res, UserRequest ureq, WindowControl wControl) { + public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { ReferenceManager refM = ReferenceManager.getInstance(); - String referencesSummary = refM.getReferencesToSummary(res, ureq.getLocale()); + String referencesSummary = refM.getReferencesToSummary(res, locale); if (referencesSummary != null) { - Translator translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); - wControl.setError(translator.translate("details.delete.error.references", + Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); + errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); return false; } if (CoordinatorManager.getInstance().getCoordinator().getLocker().isLocked(res, null)) { - Translator translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); - wControl.setError(translator.translate("details.delete.error.editor")); + Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); + errors.setError(translator.translate("details.delete.error.editor")); return false; } return true; diff --git a/src/main/java/org/olat/repository/ErrorList.java b/src/main/java/org/olat/repository/ErrorList.java new file mode 100644 index 0000000000000000000000000000000000000000..21f558bec9bbd35214d5d0cff30b712b22ffd3e1 --- /dev/null +++ b/src/main/java/org/olat/repository/ErrorList.java @@ -0,0 +1,47 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.repository; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * Initial date: 16.06.2014<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class ErrorList { + + private final List<String> errors = new ArrayList<>(2); + + + public boolean hasErrors() { + return errors.size() > 0; + } + + public String getFirstError() { + return errors.size() > 0 ? errors.get(0) : null; + } + + public void setError(String error) { + errors.add(error); + } +} diff --git a/src/main/java/org/olat/repository/RepositoryEntry.java b/src/main/java/org/olat/repository/RepositoryEntry.java index a340c04b1c21d40534c413b519088af3f4c0151e..b4689ba12a7da851e5cdbb9fdf5e87713416cc6b 100644 --- a/src/main/java/org/olat/repository/RepositoryEntry.java +++ b/src/main/java/org/olat/repository/RepositoryEntry.java @@ -108,7 +108,8 @@ public class RepositoryEntry implements CreateInfo, Persistable , RepositoryEntr @JoinColumn(name="fk_olatresource", nullable=false, insertable=true, updatable=false) private OLATResource olatResource; - @OneToMany(targetEntity=RepositoryEntryToGroupRelation.class, fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.REMOVE}) + @OneToMany(targetEntity=RepositoryEntryToGroupRelation.class, fetch=FetchType.LAZY, + orphanRemoval=true, cascade={CascadeType.PERSIST, CascadeType.REMOVE}) @JoinColumn(name="fk_entry_id") private Set<RepositoryEntryToGroupRelation> groups; diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index bed0186f04bb835c34467e5ea1b0537b49140114..8cdea0b9a34c9cf6df0c31b33880b8c15d53b42e 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -41,13 +41,11 @@ import javax.persistence.TypedQuery; import org.olat.admin.securitygroup.gui.IdentitiesAddEvent; import org.olat.basesecurity.BaseSecurity; -import org.olat.basesecurity.Group; import org.olat.basesecurity.GroupRoles; import org.olat.basesecurity.IdentityImpl; import org.olat.basesecurity.IdentityRef; import org.olat.basesecurity.manager.GroupDAO; import org.olat.catalog.CatalogEntry; -import org.olat.catalog.CatalogManager; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.modules.bc.FolderConfig; import org.olat.core.commons.persistence.DB; @@ -55,10 +53,8 @@ import org.olat.core.commons.persistence.DBQuery; import org.olat.core.commons.persistence.PersistenceHelper; import org.olat.core.commons.services.image.ImageService; import org.olat.core.commons.services.image.Size; -import org.olat.core.commons.services.mark.MarkManager; import org.olat.core.commons.services.mark.impl.MarkImpl; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.WindowControl; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.Roles; @@ -78,8 +74,6 @@ import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSManager; import org.olat.course.assessment.manager.UserCourseInformationsManager; import org.olat.group.GroupLoggingAction; -import org.olat.repository.handlers.RepositoryHandler; -import org.olat.repository.handlers.RepositoryHandlerFactory; import org.olat.repository.manager.RepositoryEntryRelationDAO; import org.olat.repository.model.RepositoryEntryLifecycle; import org.olat.repository.model.RepositoryEntryMembership; @@ -203,72 +197,7 @@ public class RepositoryManager extends BasicManager { Size size = imageHelper.scaleImage(newImageFile, repoImage, PICTUREWIDTH, PICTUREWIDTH, false); return size != null; } - - /** - * clean up a repo entry with all children and associated data like bookmarks and user references to it - * @param ureq - * @param wControl - * @param entry - * @return - * FIXME: we need a delete method without ureq, wControl for manager use. In general, very bad idea to pass ureq and - * wControl down to the manger layer. - */ - public boolean deleteRepositoryEntryWithAllData(UserRequest ureq, WindowControl wControl, RepositoryEntry entry) { - // invoke handler delete callback - logDebug("deleteRepositoryEntry start entry=" + entry); - entry = (RepositoryEntry) dbInstance.loadObject(entry,true); - logDebug("deleteRepositoryEntry after load entry=" + entry); - RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry); - OLATResource resource = entry.getOlatResource(); - //delete old context - if (!handler.readyToDelete(resource, ureq, wControl)) { - return false; - } - - // start transaction - // delete entry picture - deleteImage(entry); - userCourseInformationsManager.deleteUserCourseInformations(entry); - - // delete all bookmarks referencing deleted entry - CoreSpringFactory.getImpl(MarkManager.class).deleteMarks(entry); - // delete all catalog entries referencing deleted entry - CatalogManager.getInstance().resourceableDeleted(entry); - - //delete all policies - securityManager.deletePolicies(resource); - - // inform handler to do any cleanup work... handler must delete the - // referenced resourceable a swell. - handler.cleanupOnDelete(resource); - - dbInstance.commit(); - logDebug("deleteRepositoryEntry after reload entry=" + entry); - deleteRepositoryEntryAndBasesecurity(entry); - - logDebug("deleteRepositoryEntry Done"); - return true; - } - - /** - * - * @param addedEntry - */ - public void deleteRepositoryEntryAndBasesecurity(RepositoryEntry entry) { - RepositoryEntry reloadedEntry = dbInstance.getCurrentEntityManager() - .getReference(RepositoryEntry.class, entry.getKey()); - - Group defaultGroup = repositoryEntryRelationDao.getDefaultGroup(reloadedEntry); - groupDao.removeMemberships(defaultGroup); - repositoryEntryRelationDao.removeRelations(reloadedEntry); - groupDao.removeGroup(defaultGroup); - dbInstance.getCurrentEntityManager().remove(reloadedEntry); - - dbInstance.commit(); - - deleteImage(entry); - } /** * Lookup repo entry by key. diff --git a/src/main/java/org/olat/repository/RepositoryService.java b/src/main/java/org/olat/repository/RepositoryService.java index 5a3b774d3dd1b135231330e01720dbd9103b27bb..00dd30185a933826274f86e53f3c36abc0110bfe 100644 --- a/src/main/java/org/olat/repository/RepositoryService.java +++ b/src/main/java/org/olat/repository/RepositoryService.java @@ -20,10 +20,12 @@ package org.olat.repository; import java.util.List; +import java.util.Locale; import org.olat.basesecurity.Group; import org.olat.basesecurity.IdentityRef; import org.olat.core.id.Identity; +import org.olat.core.id.Roles; import org.olat.core.util.vfs.VFSLeaf; import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams; import org.olat.repository.model.SearchMyRepositoryEntryViewParams; @@ -57,6 +59,22 @@ public interface RepositoryService { public RepositoryEntry update(RepositoryEntry re); + /** + * Delete the learning resource with all its attached resources. + * @param entry + * @param identity + * @param roles + * @param locale + * @return + */ + public ErrorList delete(RepositoryEntry entry, Identity identity, Roles roles, Locale locale); + + /** + * Delete only the database object + * @param entry + */ + public void deleteRepositoryEntryAndBaseGroups(RepositoryEntry entry); + public void incrementLaunchCounter(RepositoryEntry re); diff --git a/src/main/java/org/olat/repository/delete/service/RepositoryDeletionManager.java b/src/main/java/org/olat/repository/delete/service/RepositoryDeletionManager.java index ae50ad7a7241e895f8a46f98de67f4ab0fc20aac..5ee02fc14a40e31fb6e6991b8843b4fc27eaa2a0 100644 --- a/src/main/java/org/olat/repository/delete/service/RepositoryDeletionManager.java +++ b/src/main/java/org/olat/repository/delete/service/RepositoryDeletionManager.java @@ -52,6 +52,7 @@ import org.olat.core.util.mail.MailTemplate; import org.olat.core.util.mail.MailerResult; import org.olat.properties.Property; import org.olat.properties.PropertyManager; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -392,7 +393,10 @@ public class RepositoryDeletionManager extends BasicManager implements UserDataD } String archiveFileName = repositoryHandler.archive(ureq.getIdentity(), getArchivFilePath(), repositoryEntry); logAudit("Repository-Deletion: archived repositoryEntry=" + repositoryEntry + " , archive-file-name=" + archiveFileName); - RepositoryManager.getInstance().deleteRepositoryEntryWithAllData( ureq, wControl, repositoryEntry ); + ErrorList errors = repositoryService.delete(repositoryEntry, ureq.getIdentity(), ureq.getUserSession().getRoles(), ureq.getLocale()); + if(errors.hasErrors()) { + wControl.setError(errors.getFirstError()); + } LifeCycleManager.createInstanceFor(repositoryEntry).deleteTimestampFor(SEND_DELETE_EMAIL_ACTION); LifeCycleManager.createInstanceFor(repositoryEntry).markTimestampFor(REPOSITORY_DELETED_ACTION, createLifeCycleLogDataFor(repositoryEntry)); logAudit("Repository-Deletion: deleted repositoryEntry=" + repositoryEntry); diff --git a/src/main/java/org/olat/repository/handlers/BlogHandler.java b/src/main/java/org/olat/repository/handlers/BlogHandler.java index cf4dc28d42d52b79fa048217ee5b944a2a2d07aa..f858c09c004195099ff42e5ac93297550ad82011 100644 --- a/src/main/java/org/olat/repository/handlers/BlogHandler.java +++ b/src/main/java/org/olat/repository/handlers/BlogHandler.java @@ -35,6 +35,7 @@ import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.logging.AssertException; import org.olat.core.util.Util; import org.olat.core.util.coordinate.CoordinatorManager; @@ -51,6 +52,7 @@ import org.olat.modules.webFeed.FeedSecurityCallback; import org.olat.modules.webFeed.managers.FeedManager; import org.olat.modules.webFeed.ui.FeedMainController; import org.olat.modules.webFeed.ui.blog.BlogUIFactory; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -201,12 +203,12 @@ public class BlogHandler implements RepositoryHandler { } @Override - public boolean readyToDelete(OLATResourceable res, UserRequest ureq, WindowControl wControl) { + public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { ReferenceManager refM = ReferenceManager.getInstance(); - String referencesSummary = refM.getReferencesToSummary(res, ureq.getLocale()); + String referencesSummary = refM.getReferencesToSummary(res, locale); if (referencesSummary != null) { - Translator translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); - wControl.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); + Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); + errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); return false; } return true; diff --git a/src/main/java/org/olat/repository/handlers/CourseHandler.java b/src/main/java/org/olat/repository/handlers/CourseHandler.java index c3cd587e3f000afc2a9411ac468a35a3c1f02387..a40fc06943e38f1b618fea27a5c97a27ebf6ee2a 100644 --- a/src/main/java/org/olat/repository/handlers/CourseHandler.java +++ b/src/main/java/org/olat/repository/handlers/CourseHandler.java @@ -53,6 +53,7 @@ import org.olat.core.gui.translator.Translator; import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.CodeHelper; @@ -100,6 +101,7 @@ import org.olat.modules.sharedfolder.SharedFolderManager; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryImportExport; import org.olat.repository.RepositoryEntryImportExport.RepositoryEntryImport; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntryManagedFlag; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -539,19 +541,19 @@ public class CourseHandler implements RepositoryHandler { //archiving is done within readyToDelete CourseFactory.deleteCourse(res); // delete resourceable - OLATResourceManager rm = OLATResourceManager.getInstance(); - OLATResource ores = rm.findResourceable(res); - rm.deleteOLATResource(ores); + //OLATResourceManager rm = OLATResourceManager.getInstance(); + //OLATResource ores = rm.findResourceable(res); + //rm.deleteOLATResource(ores); return true; } @Override - public boolean readyToDelete(OLATResourceable res, UserRequest ureq, WindowControl wControl) { + public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { ReferenceManager refM = ReferenceManager.getInstance(); - String referencesSummary = refM.getReferencesToSummary(res, ureq.getLocale()); + String referencesSummary = refM.getReferencesToSummary(res, locale); if (referencesSummary != null) { - Translator translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); - wControl.setError(translator.translate("details.delete.error.references", + Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); + errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); return false; } @@ -559,9 +561,9 @@ public class CourseHandler implements RepositoryHandler { * make an archive of the course nodes with valuable data */ UserManager um = UserManager.getInstance(); - String charset = um.getUserCharset(ureq.getIdentity()); + String charset = um.getUserCharset(identity); try { - CourseFactory.archiveCourse(res,charset, ureq.getLocale(), ureq.getIdentity(), ureq.getUserSession().getRoles()); + CourseFactory.archiveCourse(res,charset, locale, identity, roles); } catch (CorruptedCourseException e) { log.error("The course is corrupted, cannot archive it: " + res, e); } diff --git a/src/main/java/org/olat/repository/handlers/FileHandler.java b/src/main/java/org/olat/repository/handlers/FileHandler.java index e5eccb7ab150907b80a86e46f8a7bbf421ea37b6..473684a263b239a613a47045c0c6353b199aebb7 100644 --- a/src/main/java/org/olat/repository/handlers/FileHandler.java +++ b/src/main/java/org/olat/repository/handlers/FileHandler.java @@ -26,6 +26,7 @@ package org.olat.repository.handlers; import java.io.File; +import java.util.Locale; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; @@ -34,12 +35,14 @@ import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.util.Util; import org.olat.core.util.ZipUtil; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.resource.OLATResourceableJustBeforeDeletedEvent; import org.olat.core.util.vfs.VFSContainer; import org.olat.fileresource.FileResourceManager; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.resource.references.ReferenceManager; @@ -80,11 +83,11 @@ public abstract class FileHandler implements RepositoryHandler { } @Override - public boolean readyToDelete(OLATResourceable res, UserRequest ureq, WindowControl wControl) { - String referencesSummary = ReferenceManager.getInstance().getReferencesToSummary(res, ureq.getLocale()); + public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { + String referencesSummary = ReferenceManager.getInstance().getReferencesToSummary(res, locale); if (referencesSummary != null) { - Translator translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); - wControl.setError(translator.translate("details.delete.error.references", + Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); + errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); return false; } diff --git a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java index 77fe9c006d497d05a435d769236ab76ad51224fd..ce352cd0500eef242d861069d040728c6eee0305 100644 --- a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java +++ b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java @@ -46,6 +46,7 @@ import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.logging.AssertException; import org.olat.core.util.FileUtils; import org.olat.core.util.Util; @@ -60,6 +61,7 @@ import org.olat.fileresource.types.ResourceEvaluation; import org.olat.modules.glossary.GlossaryEditSettingsController; import org.olat.modules.glossary.GlossaryManager; import org.olat.modules.glossary.GlossaryRegisterSettingsController; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -254,12 +256,12 @@ public class GlossaryHandler implements RepositoryHandler { } @Override - public boolean readyToDelete(OLATResourceable res, UserRequest ureq, WindowControl wControl) { + public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { ReferenceManager refM = ReferenceManager.getInstance(); - String referencesSummary = refM.getReferencesToSummary(res, ureq.getLocale()); + String referencesSummary = refM.getReferencesToSummary(res, locale); if (referencesSummary != null) { - Translator translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); - wControl.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); + Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); + errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); return false; } return true; diff --git a/src/main/java/org/olat/repository/handlers/PodcastHandler.java b/src/main/java/org/olat/repository/handlers/PodcastHandler.java index 6d16ed2aaede6705007bccdc2331ec46ca9b8222..681ea318b93847b4eea3e37a8a93547e0ddeff27 100644 --- a/src/main/java/org/olat/repository/handlers/PodcastHandler.java +++ b/src/main/java/org/olat/repository/handlers/PodcastHandler.java @@ -35,6 +35,7 @@ import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.logging.AssertException; import org.olat.core.util.Util; import org.olat.core.util.coordinate.CoordinatorManager; @@ -51,6 +52,7 @@ import org.olat.modules.webFeed.FeedSecurityCallback; import org.olat.modules.webFeed.managers.FeedManager; import org.olat.modules.webFeed.ui.FeedMainController; import org.olat.modules.webFeed.ui.podcast.PodcastUIFactory; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -199,12 +201,12 @@ public class PodcastHandler implements RepositoryHandler { } @Override - public boolean readyToDelete(OLATResourceable res, UserRequest ureq, WindowControl wControl) { + public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { ReferenceManager refM = ReferenceManager.getInstance(); - String referencesSummary = refM.getReferencesToSummary(res, ureq.getLocale()); + String referencesSummary = refM.getReferencesToSummary(res, locale); if (referencesSummary != null) { - Translator translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); - wControl.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); + Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); + errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); return false; } return true; diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java index a53ebe784141cb7cb8ee7e8d2917632e1a24af16..3a2e4cea3474661b7973a723798a001dabf51034 100644 --- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java +++ b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java @@ -37,6 +37,7 @@ import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; @@ -58,6 +59,7 @@ import org.olat.portfolio.model.structel.EPStructuredMapTemplate; import org.olat.portfolio.model.structel.PortfolioStructure; import org.olat.portfolio.model.structel.PortfolioStructureMap; import org.olat.portfolio.ui.structel.EPCreateMapController; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -185,7 +187,7 @@ public class PortfolioHandler implements RepositoryHandler { } @Override - public boolean readyToDelete(OLATResourceable res, UserRequest ureq, WindowControl wControl) { + public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager"); PortfolioStructure map = ePFMgr.loadPortfolioStructure(res); if(map != null) { @@ -197,10 +199,10 @@ public class PortfolioHandler implements RepositoryHandler { if (ePFMgr.isTemplateInUse(exercise, null, null, null)) return false; } ReferenceManager refM = ReferenceManager.getInstance(); - String referencesSummary = refM.getReferencesToSummary(res, ureq.getLocale()); + String referencesSummary = refM.getReferencesToSummary(res, locale); if (referencesSummary != null) { - Translator translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); - wControl.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); + Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); + errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); return false; } return true; diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java index 2c738a5ead51b77425a1d91b1d1de8bcaaaa8879..054ed7e69b4344c56040cc1edb03de48c58fe3c2 100644 --- a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java +++ b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java @@ -36,9 +36,11 @@ import org.olat.core.gui.control.generic.wizard.StepsMainRunController; import org.olat.core.gui.media.MediaResource; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.util.coordinate.LockResult; import org.olat.core.util.vfs.VFSContainer; import org.olat.fileresource.types.ResourceEvaluation; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.controllers.WizardCloseResourceController; import org.olat.repository.ui.author.AuthoringEditEntrySettingsController; @@ -200,19 +202,13 @@ public interface RepositoryHandler { * from the repository. Return status wether to proceed with the delete action. If * this method returns false, the entry will not be deleted. * @param res - * @param ureq - * @param wControl + * @param identity + * @param roles TODO + * @param locale TODO + * @param errors * @return true if ressource is ready to delete, false if not. */ - public boolean readyToDelete(OLATResourceable res, UserRequest ureq, WindowControl wControl); - - /** - * Create a copy of the given resourceable. - * @param res - * @param ureq - * @return Copy of given resourceable. - */ - //public OLATResourceable createCopy(OLATResourceable res, UserRequest ureq); + public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors); /** * If a handler likes to provied any details on a resourceable in the repository's details diff --git a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java index 88d377645012def186f6b174553b6b1db95f6432..4b26b129966c6731463b8730cd33a8a17a6f78d5 100644 --- a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java +++ b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java @@ -55,6 +55,7 @@ import org.olat.fileresource.types.SharedFolderFileResource; import org.olat.modules.sharedfolder.SharedFolderDisplayController; import org.olat.modules.sharedfolder.SharedFolderEditorController; import org.olat.modules.sharedfolder.SharedFolderManager; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -228,12 +229,12 @@ public class SharedFolderHandler implements RepositoryHandler { } @Override - public boolean readyToDelete(OLATResourceable res, UserRequest ureq, WindowControl wControl) { + public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { ReferenceManager refM = ReferenceManager.getInstance(); - String referencesSummary = refM.getReferencesToSummary(res, ureq.getLocale()); + String referencesSummary = refM.getReferencesToSummary(res, locale); if (referencesSummary != null) { - Translator translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); - wControl.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); + Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); + errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); return false; } return true; diff --git a/src/main/java/org/olat/repository/handlers/WikiHandler.java b/src/main/java/org/olat/repository/handlers/WikiHandler.java index c15687cd5f1b49e14d07ce11ed644998a8922481..82d940794e54ad51df25efe8f2bf602f33af0784 100644 --- a/src/main/java/org/olat/repository/handlers/WikiHandler.java +++ b/src/main/java/org/olat/repository/handlers/WikiHandler.java @@ -48,6 +48,7 @@ import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.ContextEntry; import org.olat.core.logging.AssertException; @@ -74,6 +75,7 @@ import org.olat.modules.wiki.WikiPage; import org.olat.modules.wiki.WikiSecurityCallback; import org.olat.modules.wiki.WikiSecurityCallbackImpl; import org.olat.modules.wiki.WikiToZipUtils; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -293,12 +295,12 @@ public class WikiHandler implements RepositoryHandler { } @Override - public boolean readyToDelete(OLATResourceable res, UserRequest ureq, WindowControl wControl) { + public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { ReferenceManager refM = ReferenceManager.getInstance(); - String referencesSummary = refM.getReferencesToSummary(res, ureq.getLocale()); + String referencesSummary = refM.getReferencesToSummary(res, locale); if (referencesSummary != null) { - Translator translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); - wControl.setError(translator.translate("details.delete.error.references", + Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); + errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); return false; } diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java b/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java index bdbf22289c8ce45e49c7381e7f27ac7abbaba035..117431ef6642c2af3b650a5f66ef961339dce002 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java +++ b/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java @@ -266,13 +266,10 @@ public class RepositoryEntryRelationDAO { .setParameter("repoKey", re.getKey()) .setParameter("groupKey", group.getKey()) .getResultList(); - + for(RepositoryEntryToGroupRelation rel:rels) { em.remove(rel); } - if(re instanceof RepositoryEntry) { - ((RepositoryEntry)re).getGroups().removeAll(rels); - } return rels.size(); } @@ -285,13 +282,9 @@ public class RepositoryEntryRelationDAO { List<RepositoryEntryToGroupRelation> rels = em.createQuery(sb.toString(), RepositoryEntryToGroupRelation.class) .setParameter("repoKey", re.getKey()) .getResultList(); - for(RepositoryEntryToGroupRelation rel:rels) { em.remove(rel); } - if(re instanceof RepositoryEntry) { - ((RepositoryEntry)re).getGroups().removeAll(rels); - } return rels.size(); } diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java index 6af011a6719c3a804aebad268b0a507e1186cc27..e35505e0a729b5c74c2fb1e5166d217aec67788e 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java +++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java @@ -23,6 +23,7 @@ import java.io.File; import java.util.Date; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Set; import org.olat.basesecurity.BaseSecurity; @@ -30,10 +31,16 @@ import org.olat.basesecurity.Group; import org.olat.basesecurity.GroupRoles; import org.olat.basesecurity.IdentityRef; import org.olat.basesecurity.manager.GroupDAO; +import org.olat.catalog.CatalogManager; +import org.olat.core.CoreSpringFactory; import org.olat.core.commons.modules.bc.FolderConfig; import org.olat.core.commons.persistence.DB; +import org.olat.core.commons.services.mark.MarkManager; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; import org.olat.core.util.CodeHelper; import org.olat.core.util.StringHelper; import org.olat.core.util.resource.OresHelper; @@ -41,6 +48,8 @@ import org.olat.core.util.vfs.LocalFolderImpl; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSLeaf; +import org.olat.course.assessment.manager.UserCourseInformationsManager; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryAuthorView; import org.olat.repository.RepositoryEntryMyView; @@ -68,6 +77,8 @@ import org.springframework.stereotype.Service; */ @Service("repositoryService") public class RepositoryServiceImpl implements RepositoryService { + + private static final OLog log = Tracing.createLoggerFor(RepositoryServiceImpl.class); @Autowired private DB dbInstance; @@ -87,6 +98,8 @@ public class RepositoryServiceImpl implements RepositoryService { private RepositoryEntryAuthorQueries authorViewQueries; @Autowired private OLATResourceManager resourceManager; + @Autowired + private UserCourseInformationsManager userCourseInformationsManager; @Autowired private LifeFullIndexer lifeIndexer; @@ -210,6 +223,66 @@ public class RepositoryServiceImpl implements RepositoryService { } return null; } + + public ErrorList delete(RepositoryEntry entry, Identity identity, Roles roles, Locale locale) { + ErrorList errors = new ErrorList(); + + boolean debug = log.isDebug(); + + // invoke handler delete callback + if(debug) log.debug("deleteRepositoryEntry start entry=" + entry); + entry = (RepositoryEntry) dbInstance.loadObject(entry,true); + if(debug) log.debug("deleteRepositoryEntry after load entry=" + entry); + RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry); + OLATResource resource = entry.getOlatResource(); + //delete old context + if (!handler.readyToDelete(resource, identity, roles, locale, errors)) { + return errors; + } + + // start transaction + // delete entry picture + + userCourseInformationsManager.deleteUserCourseInformations(entry); + + // delete all bookmarks referencing deleted entry + CoreSpringFactory.getImpl(MarkManager.class).deleteMarks(entry); + // delete all catalog entries referencing deleted entry + CatalogManager.getInstance().resourceableDeleted(entry); + + //delete all policies + securityManager.deletePolicies(resource); + + // inform handler to do any cleanup work... handler must delete the + // referenced resourceable a swell. + handler.cleanupOnDelete(resource); + + dbInstance.commit(); + + if(debug) log.debug("deleteRepositoryEntry after reload entry=" + entry); + deleteRepositoryEntryAndBaseGroups(entry); + + if(debug) log.debug("deleteRepositoryEntry Done"); + return errors; + } + + /** + * + * @param entry + */ + @Override + public void deleteRepositoryEntryAndBaseGroups(RepositoryEntry entry) { + RepositoryEntry reloadedEntry = dbInstance.getCurrentEntityManager() + .getReference(RepositoryEntry.class, entry.getKey()); + + Group defaultGroup = reToGroupDao.getDefaultGroup(reloadedEntry); + groupDao.removeMemberships(defaultGroup); + reToGroupDao.removeRelations(reloadedEntry); + dbInstance.commit(); + dbInstance.getCurrentEntityManager().remove(reloadedEntry); + groupDao.removeGroup(defaultGroup); + dbInstance.commit(); + } @Override public void incrementLaunchCounter(RepositoryEntry re) { diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java index 4db3b6665d4abe2eb71f945f5127949689f61c30..1f0638872e358f3156ebefb83e30252c98942f42 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java @@ -71,6 +71,7 @@ import org.olat.course.run.RunMainController; import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupService; import org.olat.group.model.SearchBusinessGroupParams; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryManagedFlag; import org.olat.repository.RepositoryEntryRef; @@ -97,6 +98,7 @@ import org.olat.resource.accesscontrol.ui.PriceFormat; import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; + /** * * Initial date: 29.04.2014<br> @@ -483,7 +485,7 @@ public class AuthoringEntryDetailsController extends RepositoryEntryDetailsContr } } else if (deleteDialogCtrl == source){ if (DialogBoxUIFactory.isYesEvent(event)){ - deleteRepositoryEntry(ureq, getWindowControl()); + deleteRepositoryEntry(ureq); } } else if(copyCtrl == source) { cmc.deactivate(); @@ -688,12 +690,14 @@ public class AuthoringEntryDetailsController extends RepositoryEntryDetailsContr listenTo(catalogCtlr); } - private void deleteRepositoryEntry(UserRequest ureq, WindowControl wControl) { - if (RepositoryManager.getInstance().deleteRepositoryEntryWithAllData( ureq, wControl, entry) ) { + private void deleteRepositoryEntry(UserRequest ureq) { + Roles roles = ureq.getUserSession().getRoles(); + ErrorList errors = repositoryService.delete(entry, getIdentity(), roles, getLocale()); + if (errors.hasErrors()) { + showInfo("info.could.not.delete.entry"); + } else { fireEvent(ureq, new EntryChangedEvent(entry, EntryChangedEvent.DELETED)); showInfo("info.entry.deleted"); - } else { - showInfo("info.could.not.delete.entry"); } } } diff --git a/src/main/java/org/olat/restapi/repository/RepositoryEntryResource.java b/src/main/java/org/olat/restapi/repository/RepositoryEntryResource.java index 9c14e940856285e3ea7c7a82419e883a22ea999e..a9c0f480604795cd24f2c85ec4892119f03da8ca 100644 --- a/src/main/java/org/olat/restapi/repository/RepositoryEntryResource.java +++ b/src/main/java/org/olat/restapi/repository/RepositoryEntryResource.java @@ -65,6 +65,7 @@ import org.olat.core.util.FileUtils; import org.olat.core.util.coordinate.LockResult; import org.olat.fileresource.FileResourceManager; import org.olat.fileresource.types.ImsCPFileResource; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -75,7 +76,6 @@ import org.olat.repository.model.RepositoryEntryLifecycle; import org.olat.resource.OLATResource; import org.olat.resource.OLATResourceManager; import org.olat.restapi.security.RestSecurityHelper; -import org.olat.restapi.support.ErrorWindowControl; import org.olat.restapi.support.MultipartReader; import org.olat.restapi.support.ObjectFactory; import org.olat.restapi.support.vo.RepositoryEntryLifecycleVO; @@ -670,8 +670,11 @@ public class RepositoryEntryResource { return Response.serverError().status(Status.UNAUTHORIZED).build(); } UserRequest ureq = getUserRequest(request); - ErrorWindowControl error = new ErrorWindowControl(); - repositoryManager.deleteRepositoryEntryWithAllData(ureq, error, re); + RepositoryService rs = CoreSpringFactory.getImpl(RepositoryService.class); + ErrorList errors = rs.delete(re, ureq.getIdentity(), ureq.getUserSession().getRoles(), ureq.getLocale()); + if(errors.hasErrors()) { + return Response.serverError().status(500).build(); + } return Response.ok().build(); } diff --git a/src/main/java/org/olat/restapi/repository/course/CourseWebService.java b/src/main/java/org/olat/restapi/repository/course/CourseWebService.java index 3f453cc533251d7551e0aa172c60eb8f630fbd42..d1b0532bc7bfc0bd5e11ad9ba35c23873d114d5b 100644 --- a/src/main/java/org/olat/restapi/repository/course/CourseWebService.java +++ b/src/main/java/org/olat/restapi/repository/course/CourseWebService.java @@ -71,6 +71,7 @@ import org.olat.course.CourseFactory; import org.olat.course.ICourse; import org.olat.course.config.CourseConfig; import org.olat.course.nodes.cal.CourseCalendars; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; @@ -81,7 +82,6 @@ import org.olat.resource.OLATResourceManager; import org.olat.resource.accesscontrol.ACService; import org.olat.resource.accesscontrol.AccessResult; import org.olat.restapi.security.RestSecurityHelper; -import org.olat.restapi.support.ErrorWindowControl; import org.olat.restapi.support.ObjectFactory; import org.olat.restapi.support.vo.CourseConfigVO; import org.olat.restapi.support.vo.CourseVO; @@ -287,10 +287,14 @@ public class CourseWebService { return Response.serverError().status(Status.UNAUTHORIZED).build(); } UserRequest ureq = getUserRequest(request); - ErrorWindowControl error = new ErrorWindowControl(); RepositoryManager rm = RepositoryManager.getInstance(); + RepositoryService rs = CoreSpringFactory.getImpl(RepositoryService.class); RepositoryEntry re = rm.lookupRepositoryEntry(course, true); - rm.deleteRepositoryEntryWithAllData(ureq, error, re); + + ErrorList errors = rs.delete(re, ureq.getIdentity(), ureq.getUserSession().getRoles(), ureq.getLocale()); + if(errors.hasErrors()) { + return Response.serverError().status(500).build(); + } return Response.ok().build(); } diff --git a/src/test/java/org/olat/repository/manager/RepositoryServiceImplTest.java b/src/test/java/org/olat/repository/manager/RepositoryServiceImplTest.java index f9a241c8c0e804ea9ce53ffa8fb56527aff8ec34..a76aa4ae6e87223e5cc7f510debe628f60663247 100644 --- a/src/test/java/org/olat/repository/manager/RepositoryServiceImplTest.java +++ b/src/test/java/org/olat/repository/manager/RepositoryServiceImplTest.java @@ -19,10 +19,14 @@ */ package org.olat.repository.manager; +import java.util.Locale; + import org.junit.Assert; import org.junit.Test; import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; +import org.olat.core.id.Roles; +import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; @@ -86,7 +90,18 @@ public class RepositoryServiceImplTest extends OlatTestCase { Assert.assertEquals(0, re.getAccess()); } - + @Test + public void deleteCourse() { + Identity initialAuthor = JunitTestHelper.createAndPersistIdentityAsRndUser("auth-del-1"); + RepositoryEntry re = JunitTestHelper.deployDemoCourse(initialAuthor); + dbInstance.commitAndCloseSession(); + + Roles roles = new Roles(false, false, false, true, false, false, false); + ErrorList errors = repositoryService.delete(re, initialAuthor, roles, Locale.ENGLISH); + Assert.assertNotNull(errors); + Assert.assertFalse(errors.hasErrors()); + } + } diff --git a/src/test/profile/mysql/olat.eclipse.properties b/src/test/profile/mysql/olat.eclipse.properties index c14b342cc1dfd998dccdc1e03c446a07cb519a22..680947553cad6102a7c4cf6bca612e4baa76e0bc 100644 --- a/src/test/profile/mysql/olat.eclipse.properties +++ b/src/test/profile/mysql/olat.eclipse.properties @@ -47,6 +47,7 @@ db.name=olattest db.user=olat db.pass=olat db.host.port=3306 +db.show_sql=true db.database.dialect=org.hibernate.dialect.MySQL5InnoDBDialect auto.upgrade.database=false db.hibernate.c3p0.debugUnreturnedConnectionStackTraces=true