diff --git a/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java b/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java index 74fac109c15b958fdab788fd5559e92450c87895..ce2fae5ff3ce05b30d1b25ef5583e0a7ac1a9048 100644 --- a/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java +++ b/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java @@ -32,6 +32,7 @@ import org.olat.core.gui.control.navigation.SiteDefinition; import org.olat.core.gui.control.navigation.SiteDefinitions; import org.olat.core.gui.translator.Translator; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntryControllerCreator; @@ -94,6 +95,13 @@ public class CourseSiteContextEntryControllerCreator extends DefaultContextEntry } UserSession usess = ureq.getUserSession(); + if(re.getAccess() == RepositoryEntry.DELETED) { + Roles roles = usess.getRoles(); + if(!roles.isInstitutionalResourceManager() && !roles.isOLATAdmin()) { + return messageController(ureq, wControl, "repositoryentry.deleted"); + } + } + if(usess.isInAssessmentModeProcess() && !usess.matchLockResource(re.getOlatResource())) { return null; } diff --git a/src/main/java/org/olat/modules/reminder/manager/ReminderDAO.java b/src/main/java/org/olat/modules/reminder/manager/ReminderDAO.java index 905868dc0d9d5994f7676405096326a0d7f92eac..d25dcc173c99e8625def453c216cad4e36f4bd57 100644 --- a/src/main/java/org/olat/modules/reminder/manager/ReminderDAO.java +++ b/src/main/java/org/olat/modules/reminder/manager/ReminderDAO.java @@ -128,17 +128,18 @@ public class ReminderDAO { } /** - * Get all reminders of active repository entries. + * Get all reminders of active repository entries (status must be + * open and not "softly" deleted). * * @param startDate - * @return + * @return A list of reminders */ public List<Reminder> getReminders(Date startDate) { StringBuilder sb = new StringBuilder(); sb.append("select rem from reminder rem") .append(" inner join rem.entry entry") .append(" where (rem.startDate is null or rem.startDate<=:startDate)") - .append(" and entry.statusCode=0"); + .append(" and entry.statusCode=0 and entry.access>").append(RepositoryEntry.DELETED); return dbInstance.getCurrentEntityManager() .createQuery(sb.toString(), Reminder.class) @@ -146,6 +147,12 @@ public class ReminderDAO { .getResultList(); } + /** + * Get all reminders without restrictions. + * + * @param entry + * @return A list of remidners + */ public List<Reminder> getReminders(RepositoryEntryRef entry) { String q = "select rem from reminder rem inner join rem.entry entry where entry.key=:entryKey"; return dbInstance.getCurrentEntityManager() diff --git a/src/main/java/org/olat/repository/RepositoryEntryStatus.java b/src/main/java/org/olat/repository/RepositoryEntryStatus.java index ab875bf55247399ab9962e981daf8958bd334138..5497c5a719224ad1e645ba18c3d18bce3ab10980 100644 --- a/src/main/java/org/olat/repository/RepositoryEntryStatus.java +++ b/src/main/java/org/olat/repository/RepositoryEntryStatus.java @@ -35,6 +35,9 @@ package org.olat.repository; public class RepositoryEntryStatus { public static final int REPOSITORY_STATUS_OPEN = 0; + /** + * Correspond to the "freeze" status + */ public static final int REPOSITORY_STATUS_CLOSED = 2; public static final int REPOSITORY_STATUS_UNPUBLISHED = 4; diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties index 7be0516accf22ac92e39827f362b91a3ba155d08..7fac13043046c3b4282e68cad0eaa5dc70060d40 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties @@ -418,6 +418,7 @@ repository.admin.leave.label=Standardeinstellung f\u00FCr neue Kurse repository.admin.leave.title=Verlassen von Kursen zulassen repository.admin.lifecycle.title=Automatische Verwaltung des Lebenszyklus repository.admin.title=Repository Einstellungen +repositoryentry.deleted=Diese Ressource wurde gel\u00F6scht und ist nicht mehr verf\u00FCgbar. repositoryentry.not.existing=Diese Ressource ist nicht mehr verf\u00FCgbar. resource.editor=Editor resource.error.test.xml=Die Lernressource konnte nicht hinzugef\u00FCgt werden. Die qti.xml-Datei konnte nicht geparst werden. diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties index 0172982a94c71546805e9dd567a183045b307b79..a8eb6ee4f0908cf4b3fe3354eb8dd7546825386d 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties @@ -415,6 +415,7 @@ repository.admin.leave.label=Standard setting for new courses repository.admin.leave.title=Allow leaving courses repository.admin.lifecycle.title=Automatic Life-cycle management repository.admin.title=Repository settings +repositoryentry.deleted=This resource was deleted and is no longer available. repositoryentry.not.existing=This resource is no longer available. resource.editor=Editor resource.error.test.xml=Learning resource could not be added. The qti.xml file could not be parsed. diff --git a/src/main/java/org/olat/repository/ui/author/AccessRenderer.java b/src/main/java/org/olat/repository/ui/author/AccessRenderer.java index 83d4f47d9c023197ae64b06b2d532688dd867ff2..1c5130e99753f20585c28961274f36d0b96d557e 100644 --- a/src/main/java/org/olat/repository/ui/author/AccessRenderer.java +++ b/src/main/java/org/olat/repository/ui/author/AccessRenderer.java @@ -49,12 +49,13 @@ public class AccessRenderer implements FlexiCellRenderer { int row, FlexiTableComponent source, URLBuilder ubu, Translator translator) { if(val instanceof RepositoryEntryLight) { RepositoryEntryLight re = (RepositoryEntryLight)val; - if(re.isMembersOnly()) { + if(re.getAccess() == RepositoryEntry.DELETED) { + sb.append(translator.translate("table.header.access.deleted")); + } else if(re.isMembersOnly()) { sb.append(translator.translate("table.header.access.membersonly")); } else { switch (re.getAccess()) { case RepositoryEntry.DELETED: { - sb.append(translator.translate("table.header.access.deleted")); break; } diff --git a/src/test/java/org/olat/modules/reminder/manager/ReminderDAOTest.java b/src/test/java/org/olat/modules/reminder/manager/ReminderDAOTest.java index 9b676a38ede5797f4677067d96b04253200c42c9..38e9d318919e5d8dd2447310b12a12b0ba756600 100644 --- a/src/test/java/org/olat/modules/reminder/manager/ReminderDAOTest.java +++ b/src/test/java/org/olat/modules/reminder/manager/ReminderDAOTest.java @@ -35,6 +35,7 @@ import org.olat.modules.reminder.model.ReminderImpl; import org.olat.modules.reminder.model.ReminderInfos; import org.olat.modules.reminder.model.SentReminderImpl; import org.olat.repository.RepositoryEntry; +import org.olat.repository.RepositoryService; import org.olat.repository.manager.RepositoryEntryRelationDAO; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; @@ -53,6 +54,8 @@ public class ReminderDAOTest extends OlatTestCase { @Autowired private ReminderDAO reminderDao; @Autowired + private RepositoryService repositoryService; + @Autowired private RepositoryEntryRelationDAO repositoryEntryRelationDao; @Test @@ -140,6 +143,34 @@ public class ReminderDAOTest extends OlatTestCase { } Assert.assertTrue(found); } + + @Test + public void getReminders_repositoryEntry_softDeleted() { + //create and reminder and an identity + Identity creator = JunitTestHelper.createAndPersistIdentityAsRndUser("creator-rem-12"); + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + Reminder reminder = reminderDao.createReminder(entry, creator); + reminder.setConfiguration("<rules></rules>"); + reminder.setDescription("Reminder - 12"); + reminder.setEmailBody("Hello, I'm deleted"); + Reminder savedReminder = reminderDao.save(reminder); + Assert.assertNotNull(savedReminder); + dbInstance.commitAndCloseSession(); + + //check that we found the reminder + List<Reminder> loadedReminders = reminderDao.getReminders(new Date()); + Assert.assertNotNull(loadedReminders); + Assert.assertTrue(loadedReminders.contains(savedReminder)); + + // delete the resource + repositoryService.deleteSoftly(entry, creator, false); + dbInstance.commitAndCloseSession(); + + // check we don't found the reminder + List<Reminder> reloadedReminders = reminderDao.getReminders(new Date()); + Assert.assertNotNull(reloadedReminders); + Assert.assertFalse(reloadedReminders.contains(savedReminder)); + } @Test public void getReminders_repositoryEntry() {