diff --git a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java b/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java index 7f264e17b4391c5aaa22be9c2eb506c8b7db4229..dc16689b603d13370405f1bce3618ce222521fb6 100644 --- a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java +++ b/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java @@ -888,20 +888,22 @@ public class RepositoryDetailsController extends BasicController implements Gene } OLATResourceable ores = re.getOlatResource(); + BusinessControlFactory bcFactory = BusinessControlFactory.getInstance(); //was brasato:: DTabs dts = getWindowControl().getDTabs(); DTabs dts = Windows.getWindows(ureq).getWindow(ureq).getDTabs(); DTab dt = dts.getDTab(ores); if (dt == null) { // does not yet exist -> create and add - //fxdiff BAKS-7 Resume function dt = dts.createDTab(ores, re, re.getDisplayname()); if (dt == null){ //null means DTabs are full -> warning is shown return; } //user activity logger is set by course factory - Controller editorController = typeToEdit.createEditorController(re, ureq, dt.getWindowControl()); + ContextEntry entry = bcFactory.createContextEntry(re); + WindowControl swControl = bcFactory.createBusinessWindowControl(entry, dt.getWindowControl()); + Controller editorController = typeToEdit.createEditorController(re, ureq, swControl); if(editorController == null){ //editor could not be created -> warning is shown return; @@ -909,7 +911,7 @@ public class RepositoryDetailsController extends BasicController implements Gene dt.setController(editorController); dts.addDTab(ureq, dt); } - List<ContextEntry> entries = BusinessControlFactory.getInstance().createCEListFromResourceType(RepositoryDetailsController.ACTIVATE_EDITOR); + List<ContextEntry> entries = bcFactory.createCEListFromResourceType(RepositoryDetailsController.ACTIVATE_EDITOR); dts.activate(ureq, dt, entries); } diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_9_4_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_9_4_0.java index 0f3eb5615fed47ab3930a7f04c3d7da114302ae1..a2d8ad17e7fa80617681b9b16d3a4ed7120ebd5c 100644 --- a/src/main/java/org/olat/upgrade/OLATUpgrade_9_4_0.java +++ b/src/main/java/org/olat/upgrade/OLATUpgrade_9_4_0.java @@ -22,11 +22,16 @@ package org.olat.upgrade; import java.util.List; import org.olat.core.commons.persistence.DB; +import org.olat.core.commons.services.notifications.Publisher; +import org.olat.core.id.OLATResourceable; import org.olat.core.util.mail.MailManager; +import org.olat.core.util.resource.OresHelper; import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupImpl; import org.olat.properties.Property; import org.olat.properties.PropertyManager; +import org.olat.repository.RepositoryEntry; +import org.olat.repository.RepositoryManager; import org.springframework.beans.factory.annotation.Autowired; /** @@ -39,6 +44,7 @@ public class OLATUpgrade_9_4_0 extends OLATUpgrade { private static final int BATCH_SIZE = 50; private static final String TASK_DISPLAY_MEMBERS = "Upgrade display members"; + private static final String FIX_PUBLISHER_BUSINESSPATH = "Fix publishers business path"; private static final String VERSION = "OLAT_9.4.0"; private static final String PROP_NAME = "displayMembers"; @@ -50,6 +56,8 @@ public class OLATUpgrade_9_4_0 extends OLATUpgrade { private MailManager mailManager; @Autowired private PropertyManager propertyManager; + @Autowired + private RepositoryManager repositoryManager; public OLATUpgrade_9_4_0() { super(); @@ -76,6 +84,7 @@ public class OLATUpgrade_9_4_0 extends OLATUpgrade { } boolean allOk = upgradeDisplayMembers(upgradeManager, uhd); + allOk &= fixBusinessPathPublisher(upgradeManager, uhd); uhd.setInstallationComplete(allOk); upgradeManager.setUpgradesHistory(uhd, VERSION); @@ -87,6 +96,59 @@ public class OLATUpgrade_9_4_0 extends OLATUpgrade { return allOk; } + private boolean fixBusinessPathPublisher(UpgradeManager upgradeManager, UpgradeHistoryData uhd) { + if (!uhd.getBooleanDataValue(FIX_PUBLISHER_BUSINESSPATH)) { + List<Publisher> publishers = getPublishers(); + + int count = 0; + int updates = 0; + for(Publisher publisher:publishers) { + boolean updated = processPublisher(publisher); + if(count % 10 == 0) { + dbInstance.commit(); + } + if(updated) updates++; + } + dbInstance.commit(); + log.audit("Update " + updates + " publisher with partial business path."); + uhd.setBooleanDataValue(FIX_PUBLISHER_BUSINESSPATH, true); + upgradeManager.setUpgradesHistory(uhd, VERSION); + } + return true; + } + + private boolean processPublisher(Publisher publisher) { + OLATResourceable ores = OresHelper.createOLATResourceableInstance(publisher.getResName(), publisher.getResId()); + RepositoryEntry re = repositoryManager.lookupRepositoryEntry(ores, false); + if(re != null) { + String businessPath = publisher.getBusinessPath(); + String newPath = "[RepositoryEntry:" + re.getKey() + "]" + businessPath; + publisher.setBusinessPath(newPath); + + StringBuilder sb = new StringBuilder(); + sb.append("update notipublisher pub set pub.businessPath=:newPath ") + .append("where pub.key=:pubKey"); + + int rows = dbInstance.getCurrentEntityManager().createQuery(sb.toString()) + .setParameter("newPath", newPath) + .setParameter("pubKey", publisher.getKey()) + .executeUpdate(); + if(rows != 1) { + log.error("Cannot update publisher with key: " + publisher.getKey()); + } + return rows == 1; + } else { + log.error("Cannot update publisher with key: " + publisher.getKey() + " don't find an according repository entry"); + return false; + } + } + + private List<Publisher> getPublishers() { + String q = "select pub from notipublisher pub where pub.businessPath like '[CourseNode:%'"; + return dbInstance.getCurrentEntityManager().createQuery(q, Publisher.class) + .getResultList(); + } + private static final int showOwnersVal = 1;// 0x..0001 private static final int showPartipsVal = 2;// 0x..0010 private static final int showWaitingListVal = 4;// 0x..0100 @@ -154,7 +216,7 @@ public class OLATUpgrade_9_4_0 extends OLATUpgrade { log.audit("Business groups processed: " + groups.size()); dbInstance.commitAndCloseSession(); } while(groups.size() == BATCH_SIZE); - uhd.setBooleanDataValue(TASK_DISPLAY_MEMBERS, false); + uhd.setBooleanDataValue(TASK_DISPLAY_MEMBERS, true); upgradeManager.setUpgradesHistory(uhd, VERSION); } return true;