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

OO-1295: fix the order how a template and its sub rows are deleted

parent a0d7e05c
No related branches found
No related tags found
No related merge requests found
...@@ -41,6 +41,7 @@ import org.olat.basesecurity.SecurityGroupMembershipImpl; ...@@ -41,6 +41,7 @@ import org.olat.basesecurity.SecurityGroupMembershipImpl;
import org.olat.basesecurity.manager.GroupDAO; import org.olat.basesecurity.manager.GroupDAO;
import org.olat.core.CoreSpringFactory; import org.olat.core.CoreSpringFactory;
import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.DB;
import org.olat.core.commons.persistence.DBFactory;
import org.olat.core.commons.persistence.DBQuery; import org.olat.core.commons.persistence.DBQuery;
import org.olat.core.commons.persistence.PersistentObject; import org.olat.core.commons.persistence.PersistentObject;
import org.olat.core.commons.services.commentAndRating.CommentAndRatingService; import org.olat.core.commons.services.commentAndRating.CommentAndRatingService;
...@@ -961,22 +962,17 @@ public class EPStructureManager extends BasicManager { ...@@ -961,22 +962,17 @@ public class EPStructureManager extends BasicManager {
return;//nothing to delete return;//nothing to delete
} }
//already delete in removeStructureRecursively: deletePortfolioMapTemplateRecursively((EPStructureElement)map); if(map instanceof EPAbstractMap) {
//owner group has its constraints shared beetwen the repository entry and the template
((EPAbstractMap)map).getGroups().clear();
map = DBFactory.getInstance().getCurrentEntityManager().merge(map);
}
removeStructureRecursively(map); removeStructureRecursively(map);
//already delete in removeStructureRecursively: dbInstance.deleteObject(map);
dbInstance.commit();
} }
/*private void deletePortfolioMapTemplateRecursively(EPStructureElement element) {
element.getInternalArtefacts().clear();
element.setRoot(null);
element.setRootMap(null);
List<EPStructureToStructureLink> links = element.getInternalChildren();
for(EPStructureToStructureLink subLink:links) {
deletePortfolioMapTemplateRecursively((EPStructureElement)subLink.getChild());
}
links.clear();
}*/
public void removeStructureRecursively(PortfolioStructure struct){ public void removeStructureRecursively(PortfolioStructure struct){
List<PortfolioStructure> children = loadStructureChildren(struct); List<PortfolioStructure> children = loadStructureChildren(struct);
for (PortfolioStructure childstruct : children) { for (PortfolioStructure childstruct : children) {
......
...@@ -180,30 +180,28 @@ public class PortfolioHandler implements RepositoryHandler { ...@@ -180,30 +180,28 @@ public class PortfolioHandler implements RepositoryHandler {
@Override @Override
public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) { public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) {
EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager"); EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
PortfolioStructure map = ePFMgr.loadPortfolioStructure(res); PortfolioStructure map = ePFMgr.loadPortfolioStructure(res);
if(map != null) {
//owner group has its constraints shared beetwen the repository entry and the template
((EPAbstractMap)map).setGroups(null);
}
if(map instanceof EPStructuredMapTemplate) { if(map instanceof EPStructuredMapTemplate) {
EPStructuredMapTemplate exercise = (EPStructuredMapTemplate)map; EPStructuredMapTemplate exercise = (EPStructuredMapTemplate)map;
if (ePFMgr.isTemplateInUse(exercise, null, null, null)) return false; if (ePFMgr.isTemplateInUse(exercise, null, null, null)) {
return false;
}
} }
ReferenceManager refM = ReferenceManager.getInstance(); ReferenceManager refM = ReferenceManager.getInstance();
String referencesSummary = refM.getReferencesToSummary(res, locale); String referencesSummary = refM.getReferencesToSummary(res, locale);
if (referencesSummary != null) { if (referencesSummary != null) {
Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale); Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale);
errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary })); errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary }));
return false; return false;
} }
return true; return true;
} }
@Override @Override
public boolean cleanupOnDelete(OLATResourceable res) { public boolean cleanupOnDelete(OLATResourceable res) {
EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager"); CoreSpringFactory.getImpl(EPFrontendManager.class).deletePortfolioMapTemplate(res);
ePFMgr.deletePortfolioMapTemplate(res);
return true; return true;
} }
...@@ -215,7 +213,7 @@ public class PortfolioHandler implements RepositoryHandler { ...@@ -215,7 +213,7 @@ public class PortfolioHandler implements RepositoryHandler {
public MediaResource getAsMediaResource(OLATResourceable res, boolean backwardsCompatible) { public MediaResource getAsMediaResource(OLATResourceable res, boolean backwardsCompatible) {
MediaResource mr = null; MediaResource mr = null;
EPFrontendManager ePFMgr = (EPFrontendManager)CoreSpringFactory.getBean("epFrontendManager"); EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
PortfolioStructure structure = ePFMgr.loadPortfolioStructure(res); PortfolioStructure structure = ePFMgr.loadPortfolioStructure(res);
try { try {
InputStream inOut = EPXStreamHandler.toStream(structure); InputStream inOut = EPXStreamHandler.toStream(structure);
......
...@@ -277,7 +277,7 @@ public class RepositoryServiceImpl implements RepositoryService { ...@@ -277,7 +277,7 @@ public class RepositoryServiceImpl implements RepositoryService {
public void deleteRepositoryEntryAndBaseGroups(RepositoryEntry entry) { public void deleteRepositoryEntryAndBaseGroups(RepositoryEntry entry) {
RepositoryEntry reloadedEntry = dbInstance.getCurrentEntityManager() RepositoryEntry reloadedEntry = dbInstance.getCurrentEntityManager()
.getReference(RepositoryEntry.class, entry.getKey()); .getReference(RepositoryEntry.class, entry.getKey());
OLATResource resource = reloadedEntry.getOlatResource(); Long resourceKey = reloadedEntry.getOlatResource().getKey();
Group defaultGroup = reToGroupDao.getDefaultGroup(reloadedEntry); Group defaultGroup = reToGroupDao.getDefaultGroup(reloadedEntry);
groupDao.removeMemberships(defaultGroup); groupDao.removeMemberships(defaultGroup);
...@@ -286,8 +286,11 @@ public class RepositoryServiceImpl implements RepositoryService { ...@@ -286,8 +286,11 @@ public class RepositoryServiceImpl implements RepositoryService {
dbInstance.getCurrentEntityManager().remove(reloadedEntry); dbInstance.getCurrentEntityManager().remove(reloadedEntry);
groupDao.removeGroup(defaultGroup); groupDao.removeGroup(defaultGroup);
dbInstance.commit(); dbInstance.commit();
dbInstance.getCurrentEntityManager().remove(resource); OLATResource reloadedResource = resourceManager.findResourceById(resourceKey);
if(reloadedResource != null) {
dbInstance.getCurrentEntityManager().remove(reloadedResource);
}
dbInstance.commit(); dbInstance.commit();
} }
......
...@@ -200,7 +200,7 @@ public class OLATResourceManager extends BasicManager { ...@@ -200,7 +200,7 @@ public class OLATResourceManager extends BasicManager {
List<OLATResource> resources = dbInstance.getCurrentEntityManager() List<OLATResource> resources = dbInstance.getCurrentEntityManager()
.createQuery(s, OLATResource.class) .createQuery(s, OLATResource.class)
.setParameter("resname", type) .setParameter("resname", type)
.setParameter("resid", resourceableId.longValue()) .setParameter("resid", resourceableId)
.setHint("org.hibernate.cacheable", Boolean.TRUE) .setHint("org.hibernate.cacheable", Boolean.TRUE)
.getResultList(); .getResultList();
...@@ -210,4 +210,15 @@ public class OLATResourceManager extends BasicManager { ...@@ -210,4 +210,15 @@ public class OLATResourceManager extends BasicManager {
} }
return resources.get(0); return resources.get(0);
} }
public OLATResource findResourceById(Long key) {
if (key == null) return null;
String s = "select ori from org.olat.resource.OLATResourceImpl ori where ori.key=:resourceKey";
List<OLATResource> resources = dbInstance.getCurrentEntityManager()
.createQuery(s, OLATResource.class)
.setParameter("resourceKey", key)
.getResultList();
return resources.isEmpty() ? null : resources.get(0);
}
} }
\ No newline at end of file
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