diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java index 3316ec3c825e283eac95d8c4f658f3c189d223c5..97abe2954304ae54890554bd92b0e9e12c2990e0 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java +++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java @@ -479,7 +479,11 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv data = dbInstance.getCurrentEntityManager().getReference(VFSMetadataImpl.class, data.getKey()); metadataDao.removeMetadata(data); - dbInstance.commit(); + if(children.isEmpty()) { + dbInstance.commit(); + } else { + dbInstance.commitAndCloseSession(); + } deleted++; return deleted; diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java index 17224307e8735df623123d9167c35fcb94aa567c..a232cd5e439e1d5ebb1476183f883ee7c7c5f819 100644 --- a/src/main/java/org/olat/course/CourseFactory.java +++ b/src/main/java/org/olat/course/CourseFactory.java @@ -72,7 +72,6 @@ import org.olat.core.id.context.ContextEntry; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLATRuntimeException; import org.olat.core.logging.Tracing; -import org.olat.core.util.CodeHelper; import org.olat.core.util.ExportUtil; import org.olat.core.util.FileUtils; import org.olat.core.util.Formatter; @@ -440,11 +439,11 @@ public class CourseFactory { // delete course directory VFSContainer fCourseBasePath = getCourseBaseContainer(res.getResourceableId()); - long start4 = System.nanoTime(); VFSStatus status = fCourseBasePath.deleteSilently(); - CodeHelper.printMilliSecondTime(start4, "Delete all files"); + DBFactory.getInstance().commitAndCloseSession(); boolean deletionSuccessful = (status == VFSConstants.YES || status == VFSConstants.SUCCESS); - log.info("deleteCourse: finished deletion. res="+res+", deletion successful: "+deletionSuccessful+", duration: "+(System.currentTimeMillis()-start)+" ms."); + log.info("deleteCourse: finished deletion. res={}, deletion successful: {}, duration: {} ms.", + res, deletionSuccessful, (System.currentTimeMillis()-start)); } /** @@ -767,6 +766,7 @@ public class CourseFactory { course.getCourseEnvironment().getCourseGroupManager().archiveCourseGroups(exportDirectory); CoreSpringFactory.getImpl(ChatLogHelper.class).archive(course, exportDirectory); + DBFactory.getInstance().commitAndCloseSession(); } diff --git a/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java b/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java index 0e4e59800985fa5b930b6556df8509c8f04a41ef..9c4f7b409e01f5a2df841784cd06a9e401944e16 100644 --- a/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java +++ b/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java @@ -41,10 +41,10 @@ import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import org.apache.commons.io.IOUtils; import org.apache.logging.log4j.Logger; import org.olat.basesecurity.GroupRoles; import org.olat.core.CoreSpringFactory; +import org.olat.core.commons.persistence.DBFactory; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.IdentityEnvironment; @@ -118,6 +118,7 @@ public class ScoreAccountingHelper { } } } + DBFactory.getInstance().commitAndCloseSession(); } } } @@ -134,8 +135,15 @@ public class ScoreAccountingHelper { * @param bos The output stream (which will be closed at the end, if you use a zip stream don't forget to shield it). */ public static void createCourseResultsOverviewXMLTable(List<Identity> identities, List<CourseNode> myNodes, ICourse course, Locale locale, OutputStream bos) { + try(OpenXMLWorkbook workbook = new OpenXMLWorkbook(bos, 1)) { + createCourseResultsOverviewXMLTable(identities, myNodes, course, locale, workbook); + } catch(Exception e) { + log.error("", e); + } + } + + private static void createCourseResultsOverviewXMLTable(List<Identity> identities, List<CourseNode> myNodes, ICourse course, Locale locale, OpenXMLWorkbook workbook) { CourseAssessmentService courseAssessmentService = CoreSpringFactory.getImpl(CourseAssessmentService.class); - OpenXMLWorkbook workbook = new OpenXMLWorkbook(bos, 1); OpenXMLWorksheet sheet = workbook.nextWorksheet(); sheet.setHeaderRows(2); @@ -348,6 +356,7 @@ public class ScoreAccountingHelper { } } } + DBFactory.getInstance().commitAndCloseSession(); } //min. max. informations @@ -397,8 +406,6 @@ public class ScoreAccountingHelper { cutRow.addCell(2, "cutValue"); cutRow.addCell(3, cutVal); } - - IOUtils.closeQuietly(workbook); } diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties index aab3658eaa86506050eef816a6e02976c2517164..de0e01b59ba1a56434000dc574e35158e27fa0e9 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties @@ -358,7 +358,7 @@ warning.no.task.choosed=Wie es scheint, war es Ihnen aufgrund von \u00C4nderunge warning.no.task.choosed.coach=Wie es scheint, war es der Assignee aufgrund von \u00C4nderungen am Kurselement nicht m\u00F6glich, eine Aufgabe f\u00FCr dieses Aufgabenelement auszuw\u00E4hlen. warning.reopen=Wenn Sie das Abgabedatum verl\u00E4ngern, wird diese Aufgabe neu er\u00F6ffnet. warning.submit.documents.edited=Sie k\u00F6nnen die Aufgabe nicht abgeben, da das Dokument "{1}" noch von "{0}" bearbeitet wird. -warning.tasks.in.process.delete.text=Wollen Sie wirklich dieser Aufgabe l\u00F6schen? <strong>Es gibt bereits Benutzer die den Aufgabenprozess gestartet haben. Das kann f\u00FCr diese Benutzer zu Problemen f\u00FChren.</strong> +warning.tasks.in.process.delete.text=Wollen Sie diese Aufgabe wirklich l\u00F6schen? <strong>Es gibt bereits Benutzer, die mit der Aufgabe begonnen haben. Das kann f\u00FCr diese Benutzer zu Problemen f\u00FChren.</strong> warning.tasks.in.process.delete.title=$\:warning.tasks.in.process.title warning.tasks.in.process.text=Es gibt bereits Benutzer die den Aufgabenprozess gestartet haben. \u00C4nderungen an der Workflow-Konfiguration kann f\u00FCr diese Benutzer zu Problemen f\u00FChren. Informationen dazu finden Sie im <a href\="{0}" target\="_blank"><i class\='o_icon o_icon_help'> </i> Handbuch</a>. warning.tasks.in.process.title=Aufgabenprozess bereits gestartet diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/FeedbacksEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/FeedbacksEditorController.java index 64315c67ec84b941916b0397ff009700e836bf55..a8b54f5d2b3bd4343ce392511153c807d26634cf 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/FeedbacksEditorController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/FeedbacksEditorController.java @@ -355,7 +355,7 @@ public class FeedbacksEditorController extends FormBasicController implements Sy helpText += ".single"; } textEl.setHelpTextKey(helpText + ".help", null); - textEl.setHelpUrlForManualPage("Test editor QTI 2.1 in detail#details_testeditor_feedback"); + textEl.setHelpUrlForManualPage("Configure test questions#_tab_feedback"); textEl.setElementCssClass("o_sel_assessment_item_" + feedbackType.name() + "_feedback"); RichTextConfiguration richTextConfig2 = textEl.getEditorConfiguration(); richTextConfig2.setFileBrowserUploadRelPath("media");// set upload dir to the media dir @@ -475,7 +475,7 @@ public class FeedbacksEditorController extends FormBasicController implements Sy textEl.setEnabled(!readOnly); textEl.setVisible(!readOnly); textEl.setHelpTextKey("feedback." + feedbackType.name() + ".help", null); - textEl.setHelpUrlForManualPage("Test editor QTI 2.1 in detail#details_testeditor_feedback"); + textEl.setHelpUrlForManualPage("Configure test questions#_tab_feedback"); textEl.setElementCssClass("o_sel_assessment_item_" + feedbackType.name() + "_feedback"); RichTextConfiguration richTextConfig2 = textEl.getEditorConfiguration(); richTextConfig2.setFileBrowserUploadRelPath("media");// set upload dir to the media dir diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java index 20b419e5d79de69cf52906fa599b8ab3e4f218df..a4544a30d6eb1f00b6874316ef1db0fc2a377397 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java +++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java @@ -516,7 +516,7 @@ public class RepositoryServiceImpl implements RepositoryService, OrganisationDat return errors; } - if(debug) log.debug("deleteRepositoryEntry after load entry=" + entry); + log.info(Tracing.M_AUDIT, "deleteRepositoryEntry after load entry={}", entry); RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(entry); OLATResource resource = entry.getOlatResource(); //delete old context @@ -562,21 +562,23 @@ public class RepositoryServiceImpl implements RepositoryService, OrganisationDat if (handler != null) { handler.cleanupOnDelete(entry, resource); } - dbInstance.commit(); + dbInstance.commitAndCloseSession(); //delete all test sessions assessmentTestSessionDao.deleteAllUserTestSessionsByCourse(entry); + dbInstance.commit(); //nullify the reference assessmentEntryDao.removeEntryForReferenceEntry(entry); assessmentEntryDao.deleteEntryForRepositoryEntry(entry); + dbInstance.commit(); repositoryEntryToOrganisationDao.delete(entry); repositoryEntryToTaxonomyLevelDao.deleteRelation(entry); dbInstance.commit(); - if(debug) log.debug("deleteRepositoryEntry after reload entry=" + entry); + if(debug) log.debug("deleteRepositoryEntry after reload entry={}", entry); deleteRepositoryEntryAndBaseGroups(entry); - if(debug) log.debug("deleteRepositoryEntry Done"); + log.info(Tracing.M_AUDIT, "deleteRepositoryEntry Done"); return errors; } diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties index 3a24d1c759643d9c31287a6aa57a39db58e5ca41..74a3972c88259f3a6d7798c91c29bc615fe270e8 100644 --- a/src/main/resources/serviceconfig/olat.properties +++ b/src/main/resources/serviceconfig/olat.properties @@ -1343,8 +1343,8 @@ ldap.learningResourceManagerRoleValue= # Build properties ##### application.name=OpenOlat -build.version=15.2.2 -build.identifier=openolat1522-dev +build.version=15.2.4 +build.identifier=openolat1524-dev build.repo.revision=local-devel #####