diff --git a/src/main/java/org/olat/course/assessment/AssessmentModeManager.java b/src/main/java/org/olat/course/assessment/AssessmentModeManager.java index 0924eda773abe4fc199b845cff6e1c7843622927..9e9d168200eb97ea5f2a536165941ad7adfeb290 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentModeManager.java +++ b/src/main/java/org/olat/course/assessment/AssessmentModeManager.java @@ -28,6 +28,7 @@ import javax.servlet.http.HttpServletRequest; import org.olat.basesecurity.IdentityRef; import org.olat.course.assessment.model.SearchAssessmentModeParams; import org.olat.group.BusinessGroup; +import org.olat.group.BusinessGroupRef; import org.olat.group.area.BGArea; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryRef; @@ -49,6 +50,8 @@ public interface AssessmentModeManager { public AssessmentModeToGroup createAssessmentModeToGroup(AssessmentMode mode, BusinessGroup group); + public void deleteAssessmentModesToGroup(BusinessGroupRef group); + public AssessmentModeToArea createAssessmentModeToArea(AssessmentMode mode, BGArea area); diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java index e6b798264b49a865a3725595e388b32a09dc58f7..dfc928a429b4d2b8983f22f9cfbaa74d3e788646 100644 --- a/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java +++ b/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java @@ -19,7 +19,8 @@ */ package org.olat.course.assessment.manager; -import static org.olat.core.commons.persistence.PersistenceHelper.*; +import static org.olat.core.commons.persistence.PersistenceHelper.appendAnd; +import static org.olat.core.commons.persistence.PersistenceHelper.appendFuzzyLike; import java.util.ArrayList; import java.util.Calendar; @@ -55,6 +56,7 @@ import org.olat.course.assessment.model.AssessmentModeToGroupImpl; import org.olat.course.assessment.model.SearchAssessmentModeParams; import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupImpl; +import org.olat.group.BusinessGroupRef; import org.olat.group.area.BGArea; import org.olat.group.area.BGAreaManager; import org.olat.group.area.BGtoAreaRelationImpl; @@ -400,6 +402,14 @@ public class AssessmentModeManagerImpl implements AssessmentModeManager { return modeToGroup; } + @Override + public void deleteAssessmentModesToGroup(BusinessGroupRef group) { + String q = "delete from courseassessmentmodetogroup as modegrrel where modegrrel.businessGroup.key=:groupKey"; + dbInstance.getCurrentEntityManager().createQuery(q) + .setParameter("groupKey", group.getKey()) + .executeUpdate(); + } + @Override public AssessmentModeToArea createAssessmentModeToArea(AssessmentMode mode, BGArea area) { AssessmentModeToAreaImpl modeToArea = new AssessmentModeToAreaImpl(); diff --git a/src/main/java/org/olat/course/assessment/ui/AssessmentModeEditController.java b/src/main/java/org/olat/course/assessment/ui/AssessmentModeEditController.java index da0954bc21cc4b21e4727b70dde0377a25b00ee8..067869d6ea7e0b67eed8ed3ceed96e5c8ec95495 100644 --- a/src/main/java/org/olat/course/assessment/ui/AssessmentModeEditController.java +++ b/src/main/java/org/olat/course/assessment/ui/AssessmentModeEditController.java @@ -440,7 +440,7 @@ public class AssessmentModeEditController extends FormBasicController { if(targetEl.isOneSelected()) { Target target = AssessmentMode.Target.valueOf(targetEl.getSelectedKey()); if(target == Target.courseAndGroups || target == Target.groups) { - if(groupKeys.isEmpty()) { + if(groupKeys.isEmpty() && areaKeys.isEmpty()) { targetEl.setErrorKey("error.group.missing", null); allOk &= false; } diff --git a/src/main/java/org/olat/group/area/BGAreaManagerImpl.java b/src/main/java/org/olat/group/area/BGAreaManagerImpl.java index 9e56fc1c5abca7b1680e43fa94645d48a4f152e4..51c99d14d8cef3680fc388d763cb6136d372001f 100644 --- a/src/main/java/org/olat/group/area/BGAreaManagerImpl.java +++ b/src/main/java/org/olat/group/area/BGAreaManagerImpl.java @@ -121,17 +121,20 @@ public class BGAreaManagerImpl extends BasicManager implements BGAreaManager { /** * @see org.olat.group.area.BGAreaManager#deleteBGArea(org.olat.group.area.BGArea) */ - // o_clusterOK by:cg must be synchronized too + @Override public void deleteBGArea(final BGArea area) { final OLATResource resource = area.getResource(); - CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(resource, new SyncerExecutor(){ + CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(resource, new SyncerExecutor() { + @Override public void execute() { BGArea reloadArea = loadArea(area.getKey()); if (reloadArea != null) { // 1) delete all area - group relations deleteBGtoAreaRelations(reloadArea); - // 2) delete area itself + // 2) delete area - assessment mode relations + deleteAssessmentModeToAreaRelations(reloadArea); + // 3) delete area itself dbInstance.deleteObject(reloadArea); logAudit("Deleted Business Group Area", reloadArea.toString()); } else { @@ -146,6 +149,7 @@ public class BGAreaManagerImpl extends BasicManager implements BGAreaManager { * * @param group */ + @Override public void deleteBGtoAreaRelations(BusinessGroup group) { StringBuilder sb = new StringBuilder(); sb.append(" delete from ").append(BGtoAreaRelationImpl.class.getName()).append(" as bgarel where bgarel.businessGroup.key=:groupKey"); @@ -450,4 +454,13 @@ public class BGAreaManagerImpl extends BasicManager implements BGAreaManager { .setParameter("areaKey", area.getKey()) .executeUpdate(); } + + private void deleteAssessmentModeToAreaRelations(BGArea area) { + StringBuilder sb = new StringBuilder(); + sb.append("delete from courseassessmentmodetoarea as modearel where modearel.area.key=:areaKey"); + + dbInstance.getCurrentEntityManager().createQuery(sb.toString()) + .setParameter("areaKey", area.getKey()) + .executeUpdate(); + } } \ No newline at end of file diff --git a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java index ecb3cd915968336d05ce4f4aada8f8b1870d78c3..c5185c2e192e3639a77dd05b54f8a901f72281cb 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java @@ -68,6 +68,7 @@ import org.olat.core.util.mail.MailTemplate; import org.olat.core.util.mail.MailerResult; import org.olat.core.util.resource.OLATResourceableJustBeforeDeletedEvent; import org.olat.core.util.resource.OresHelper; +import org.olat.course.assessment.AssessmentModeManager; import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupAddResponse; import org.olat.group.BusinessGroupManagedFlag; @@ -147,6 +148,8 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD @Autowired private ContactDAO contactDao; @Autowired + private AssessmentModeManager assessmentModeMgr; + @Autowired private BusinessGroupRelationDAO businessGroupRelationDAO; @Autowired private RepositoryEntryRelationDAO repositoryEntryRelationDao; @@ -747,6 +750,7 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD areaManager.deleteBGtoAreaRelations(group); // 3) Delete the relations businessGroupRelationDAO.deleteRelationsToRepositoryEntry(group); + assessmentModeMgr.deleteAssessmentModesToGroup(group); // 4) delete properties propertyManager.deleteProperties(null, group, null, null, null); propertyManager.deleteProperties(null, null, group, null, null);