Skip to content
Snippets Groups Projects
Commit 8e2d0b13 authored by srosse's avatar srosse
Browse files

OO-2478: show a message if a user want to jump to a "softly" deleted course,...

OO-2478: show a message if a user want to jump to a "softly" deleted course, don't send reminder of deleted course, show "deleted" course before "Members only"
parent f1e7a18b
No related branches found
No related tags found
No related merge requests found
...@@ -32,6 +32,7 @@ import org.olat.core.gui.control.navigation.SiteDefinition; ...@@ -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.control.navigation.SiteDefinitions;
import org.olat.core.gui.translator.Translator; import org.olat.core.gui.translator.Translator;
import org.olat.core.id.OLATResourceable; 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.BusinessControlFactory;
import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntry;
import org.olat.core.id.context.ContextEntryControllerCreator; import org.olat.core.id.context.ContextEntryControllerCreator;
...@@ -94,6 +95,13 @@ public class CourseSiteContextEntryControllerCreator extends DefaultContextEntry ...@@ -94,6 +95,13 @@ public class CourseSiteContextEntryControllerCreator extends DefaultContextEntry
} }
UserSession usess = ureq.getUserSession(); 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())) { if(usess.isInAssessmentModeProcess() && !usess.matchLockResource(re.getOlatResource())) {
return null; return null;
} }
......
...@@ -128,17 +128,18 @@ public class ReminderDAO { ...@@ -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 * @param startDate
* @return * @return A list of reminders
*/ */
public List<Reminder> getReminders(Date startDate) { public List<Reminder> getReminders(Date startDate) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("select rem from reminder rem") sb.append("select rem from reminder rem")
.append(" inner join rem.entry entry") .append(" inner join rem.entry entry")
.append(" where (rem.startDate is null or rem.startDate<=:startDate)") .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() return dbInstance.getCurrentEntityManager()
.createQuery(sb.toString(), Reminder.class) .createQuery(sb.toString(), Reminder.class)
...@@ -146,6 +147,12 @@ public class ReminderDAO { ...@@ -146,6 +147,12 @@ public class ReminderDAO {
.getResultList(); .getResultList();
} }
/**
* Get all reminders without restrictions.
*
* @param entry
* @return A list of remidners
*/
public List<Reminder> getReminders(RepositoryEntryRef entry) { public List<Reminder> getReminders(RepositoryEntryRef entry) {
String q = "select rem from reminder rem inner join rem.entry entry where entry.key=:entryKey"; String q = "select rem from reminder rem inner join rem.entry entry where entry.key=:entryKey";
return dbInstance.getCurrentEntityManager() return dbInstance.getCurrentEntityManager()
......
...@@ -35,6 +35,9 @@ package org.olat.repository; ...@@ -35,6 +35,9 @@ package org.olat.repository;
public class RepositoryEntryStatus { public class RepositoryEntryStatus {
public static final int REPOSITORY_STATUS_OPEN = 0; 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_CLOSED = 2;
public static final int REPOSITORY_STATUS_UNPUBLISHED = 4; public static final int REPOSITORY_STATUS_UNPUBLISHED = 4;
......
...@@ -418,6 +418,7 @@ repository.admin.leave.label=Standardeinstellung f\u00FCr neue Kurse ...@@ -418,6 +418,7 @@ repository.admin.leave.label=Standardeinstellung f\u00FCr neue Kurse
repository.admin.leave.title=Verlassen von Kursen zulassen repository.admin.leave.title=Verlassen von Kursen zulassen
repository.admin.lifecycle.title=Automatische Verwaltung des Lebenszyklus repository.admin.lifecycle.title=Automatische Verwaltung des Lebenszyklus
repository.admin.title=Repository Einstellungen 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. repositoryentry.not.existing=Diese Ressource ist nicht mehr verf\u00FCgbar.
resource.editor=Editor resource.editor=Editor
resource.error.test.xml=Die Lernressource konnte nicht hinzugef\u00FCgt werden. Die qti.xml-Datei konnte nicht geparst werden. resource.error.test.xml=Die Lernressource konnte nicht hinzugef\u00FCgt werden. Die qti.xml-Datei konnte nicht geparst werden.
......
...@@ -415,6 +415,7 @@ repository.admin.leave.label=Standard setting for new courses ...@@ -415,6 +415,7 @@ repository.admin.leave.label=Standard setting for new courses
repository.admin.leave.title=Allow leaving courses repository.admin.leave.title=Allow leaving courses
repository.admin.lifecycle.title=Automatic Life-cycle management repository.admin.lifecycle.title=Automatic Life-cycle management
repository.admin.title=Repository settings 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. repositoryentry.not.existing=This resource is no longer available.
resource.editor=Editor resource.editor=Editor
resource.error.test.xml=Learning resource could not be added. The qti.xml file could not be parsed. resource.error.test.xml=Learning resource could not be added. The qti.xml file could not be parsed.
......
...@@ -49,12 +49,13 @@ public class AccessRenderer implements FlexiCellRenderer { ...@@ -49,12 +49,13 @@ public class AccessRenderer implements FlexiCellRenderer {
int row, FlexiTableComponent source, URLBuilder ubu, Translator translator) { int row, FlexiTableComponent source, URLBuilder ubu, Translator translator) {
if(val instanceof RepositoryEntryLight) { if(val instanceof RepositoryEntryLight) {
RepositoryEntryLight re = (RepositoryEntryLight)val; 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")); sb.append(translator.translate("table.header.access.membersonly"));
} else { } else {
switch (re.getAccess()) { switch (re.getAccess()) {
case RepositoryEntry.DELETED: { case RepositoryEntry.DELETED: {
sb.append(translator.translate("table.header.access.deleted")); sb.append(translator.translate("table.header.access.deleted"));
break; break;
} }
......
...@@ -35,6 +35,7 @@ import org.olat.modules.reminder.model.ReminderImpl; ...@@ -35,6 +35,7 @@ import org.olat.modules.reminder.model.ReminderImpl;
import org.olat.modules.reminder.model.ReminderInfos; import org.olat.modules.reminder.model.ReminderInfos;
import org.olat.modules.reminder.model.SentReminderImpl; import org.olat.modules.reminder.model.SentReminderImpl;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
import org.olat.repository.RepositoryService;
import org.olat.repository.manager.RepositoryEntryRelationDAO; import org.olat.repository.manager.RepositoryEntryRelationDAO;
import org.olat.test.JunitTestHelper; import org.olat.test.JunitTestHelper;
import org.olat.test.OlatTestCase; import org.olat.test.OlatTestCase;
...@@ -53,6 +54,8 @@ public class ReminderDAOTest extends OlatTestCase { ...@@ -53,6 +54,8 @@ public class ReminderDAOTest extends OlatTestCase {
@Autowired @Autowired
private ReminderDAO reminderDao; private ReminderDAO reminderDao;
@Autowired @Autowired
private RepositoryService repositoryService;
@Autowired
private RepositoryEntryRelationDAO repositoryEntryRelationDao; private RepositoryEntryRelationDAO repositoryEntryRelationDao;
@Test @Test
...@@ -140,6 +143,34 @@ public class ReminderDAOTest extends OlatTestCase { ...@@ -140,6 +143,34 @@ public class ReminderDAOTest extends OlatTestCase {
} }
Assert.assertTrue(found); 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 @Test
public void getReminders_repositoryEntry() { public void getReminders_repositoryEntry() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment