diff --git a/src/main/java/org/olat/modules/quality/manager/QualityServiceImpl.java b/src/main/java/org/olat/modules/quality/manager/QualityServiceImpl.java index d63ab78aaf018d65949d0d005ae86f73f9045636..9af3287041e1573cb0f840d2af793cbda51e4366 100644 --- a/src/main/java/org/olat/modules/quality/manager/QualityServiceImpl.java +++ b/src/main/java/org/olat/modules/quality/manager/QualityServiceImpl.java @@ -63,6 +63,9 @@ import org.olat.modules.quality.QualityReminderType; import org.olat.modules.quality.QualityService; import org.olat.modules.taxonomy.TaxonomyLevelRef; import org.olat.repository.RepositoryEntry; +import org.olat.resource.OLATResourceManager; +import org.olat.resource.references.Reference; +import org.olat.resource.references.ReferenceManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -97,11 +100,17 @@ public class QualityServiceImpl implements QualityService, OrganisationDataDelet private QualityMailing qualityMailing; @Autowired private EvaluationFormManager evaluationFormManager; + @Autowired + private OLATResourceManager resourceManager; + @Autowired + private ReferenceManager referenceManager; @Override public QualityDataCollection createDataCollection(RepositoryEntry formEntry) { QualityDataCollection dataCollection = dataCollectionDao.createDataCollection(); evaluationFormManager.createSurvey(dataCollection, null, formEntry); + resourceManager.findOrPersistResourceable(dataCollection); + referenceManager.addReference(dataCollection, formEntry.getOlatResource(), null); return dataCollection; } @@ -167,6 +176,8 @@ public class QualityServiceImpl implements QualityService, OrganisationDataDelet } EvaluationFormSurvey survey = evaluationFormManager.loadSurvey(dataCollection, null); evaluationFormManager.deleteSurvey(survey); + deleteReferences(dataCollection); + resourceManager.deleteOLATResourceable(dataCollection); dataCollectionDao.deleteDataCollection(dataCollection); log.info("Quality management data collection deleted: " + dataCollection.toString()); } @@ -186,7 +197,16 @@ public class QualityServiceImpl implements QualityService, OrganisationDataDelet @Override public void updateFormEntry(QualityDataCollection dataCollection, RepositoryEntry formEntry) { EvaluationFormSurvey survey = evaluationFormManager.loadSurvey(dataCollection, null); + deleteReferences(dataCollection); + evaluationFormManager.updateSurveyForm(survey, formEntry); + referenceManager.addReference(dataCollection, formEntry.getOlatResource(), null); + } + + private void deleteReferences(QualityDataCollectionLight dataCollection) { + for (Reference reference : referenceManager.getReferences(dataCollection)) { + referenceManager.delete(reference); + } } @Override diff --git a/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_en.properties index 6af5ec5b19e24006c973b6b9ab893bf13fc658c5..63c6537da77a4f96bbb167a02941b99c6b842e88 100644 --- a/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_en.properties @@ -2,7 +2,7 @@ admin.config.title=Configuration quality management admin.enabled=Quality management admin.menu.title.alt=$\:admin.menu.title admin.menu.title=Quality management -breadcrumb.data.collections=$\:goto.data.collections.title +breadcrumb.data.collections=$\:goto.data.collection.title breadcrumb.executor.participations=$\:goto.executor.participation.title breadcrumb.root=Quality management data.collection.configuration=Configuration diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties index a191175aa5ac84931519a3a3f695bd999fb74031..d879fb9d2e0ad8dab2999dc344005956fef7c452 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties @@ -285,6 +285,7 @@ details.read.only.acknowledge=Best\u00E4tigung details.read.only.acknowledge.error=Bitte best\u00E4tigen. details.read.only.acknowledge.msg=Alle Kursbausteine inklusive Tests, Foren etc. befinden sich im Lesemodus und k\u00F6nnen nicht mehr bearbeitet werden. details.referenceinfo=Referenzen +details.referenceinfo.data.collections=Anzahl Datenerhebungen: {0} details.referenceinfo.txt=Wird in folgenden Kursen eingesetzt\: details.referenceinfoheader=Information zur Verwendung details.summaryprop=Zusammenfassung Einstellungen diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties index 8964c2980de8292f8d7166f49f93cd4452238d04..05958ea60f00f8408335c99a86eb8ba26d5666fc 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties @@ -281,6 +281,7 @@ details.read.only.acknowledge=Confirmation details.read.only.acknowledge.error=Please confirm. details.read.only.acknowledge.msg=All course elements inclusive tests... will be in read only mode and cannot be edited anymore. details.referenceinfo=References +details.referenceinfo.data.collections=Number of data collections: {0} details.referenceinfo.txt=Used in the following courses\: details.referenceinfoheader=Information on usage details.summaryprop=Summary of settings diff --git a/src/main/java/org/olat/repository/ui/author/AuthorListController.java b/src/main/java/org/olat/repository/ui/author/AuthorListController.java index d8b81fd250d1e8b7e36fba2b4969fa396b40ae03..44d9c1d5c88c571b78e49af2c2301a65bb08989a 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthorListController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthorListController.java @@ -92,6 +92,7 @@ import org.olat.core.util.coordinate.LockResult; import org.olat.core.util.resource.OresHelper; import org.olat.course.CorruptedCourseException; import org.olat.course.CourseModule; +import org.olat.modules.quality.QualityDataCollectionLight; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryManagedFlag; import org.olat.repository.RepositoryEntryRef; @@ -110,6 +111,7 @@ import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams.OrderBy; import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams.ResourceUsage; import org.olat.repository.ui.RepositoyUIFactory; import org.olat.repository.ui.author.AuthoringEntryDataModel.Cols; +import org.olat.resource.references.Reference; import org.olat.resource.references.ReferenceManager; import org.olat.user.UserManager; import org.olat.util.logging.activity.LoggingResourceable; @@ -782,7 +784,7 @@ public class AuthorListController extends FormBasicController implements Activat private void doSearch(UserRequest ureq, SearchEvent se) { if(se.getTypes() != null && se.getTypes().size() > 0) { - searchParams.setResourceTypes(new ArrayList<String>(se.getTypes())); + searchParams.setResourceTypes(new ArrayList<>(se.getTypes())); } else { searchParams.setResourceTypes(null); } @@ -1185,6 +1187,13 @@ public class AuthorListController extends FormBasicController implements Activat } mainVC.contextPut("referenceLinks", refLinks); + List<Reference> references = referenceManager.getReferencesTo(entry.getOlatResource(), + QualityDataCollectionLight.RESOURCEABLE_TYPE_NAME); + if (!references.isEmpty()) { + mainVC.contextPut("qualityDataCollections", translate("details.referenceinfo.data.collections", + new String[] { String.valueOf(references.size()) })); + } + putInitialPanel(mainVC); } diff --git a/src/main/java/org/olat/repository/ui/author/ConfirmDeletePermanentlyController.java b/src/main/java/org/olat/repository/ui/author/ConfirmDeletePermanentlyController.java index be6ff8ca048f2b20686bae98f4654d6bb85314c3..bd37f5f3a52ab8f63a9f466d90089c697671d0e1 100644 --- a/src/main/java/org/olat/repository/ui/author/ConfirmDeletePermanentlyController.java +++ b/src/main/java/org/olat/repository/ui/author/ConfirmDeletePermanentlyController.java @@ -235,7 +235,7 @@ public class ConfirmDeletePermanentlyController extends FormBasicController { private void doCompleteDelete(UserRequest ureq) { List<ErrorList> errorList = new ArrayList<>(); - boolean allOk = deleteEntries(ureq, rows, errorList) ; + boolean allOk = deleteEntries(ureq, rows, errorList); if(allOk && deleteReferencesEl.isVisible() && deleteReferencesEl.isEnabled() && deleteReferencesEl.isOneSelected() && deleteReferencesEl.isSelected(0)) { diff --git a/src/main/java/org/olat/repository/ui/author/_content/references.html b/src/main/java/org/olat/repository/ui/author/_content/references.html index f0015f49fe164962aee30168422639b85642164f..3bacd22ac2845d2da3906b1d77fc0dbcc959a56b 100644 --- a/src/main/java/org/olat/repository/ui/author/_content/references.html +++ b/src/main/java/org/olat/repository/ui/author/_content/references.html @@ -1,6 +1,13 @@ -$r.translate("details.referenceinfo.txt") -<ul class="o_dropdown list-unstyled"> -#foreach($referenceLink in $referenceLinks) - <li>$r.render($referenceLink)</li> +#if(!$referenceLinks.isEmpty()) + $r.translate("details.referenceinfo.txt") + <ul class="o_dropdown list-unstyled"> + #foreach($referenceLink in $referenceLinks) + <li>$r.render($referenceLink)</li> + #end + </ul> #end -</ul> \ No newline at end of file +<div class="o_block_small_top"> + #if($r.isNotNull($qualityDataCollections)) + $qualityDataCollections + #end +</div> \ No newline at end of file diff --git a/src/main/java/org/olat/resource/references/ReferenceManager.java b/src/main/java/org/olat/resource/references/ReferenceManager.java index 827086e115540722f35abd64faaa3d90698e61b6..8574178638ecf7de00dfdae1112f8eff2b460285 100644 --- a/src/main/java/org/olat/resource/references/ReferenceManager.java +++ b/src/main/java/org/olat/resource/references/ReferenceManager.java @@ -108,7 +108,7 @@ public class ReferenceManager { public List<Reference> getReferences(OLATResourceable source) { Long sourceKey = getResourceKey(source); if (sourceKey == null) { - return new ArrayList<Reference> (0); + return new ArrayList<>(0); } return dbInstance.getCurrentEntityManager() .createNamedQuery("referencesBySourceId", Reference.class) @@ -125,7 +125,7 @@ public class ReferenceManager { public List<Reference> getReferencesTo(OLATResourceable target) { Long targetKey = getResourceKey(target); if (targetKey == null) { - return new ArrayList<Reference>(0); + return new ArrayList<>(0); } return dbInstance.getCurrentEntityManager() .createNamedQuery("referencesByTargetId", Reference.class) @@ -133,6 +133,25 @@ public class ReferenceManager { .getResultList(); } + public List<Reference> getReferencesTo(OLATResourceable target, String sourceResName) { + Long targetKey = getResourceKey(target); + if (targetKey == null) { + return new ArrayList<>(0); + } + + StringBuilder sb = new StringBuilder(); + sb.append("select v"); + sb.append(" from references as v"); + sb.append(" where v.target.key = :targetKey"); + sb.append(" and v.source.resName = :resName"); + + return dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Reference.class) + .setParameter("targetKey", targetKey) + .setParameter("resName", sourceResName) + .getResultList(); + } + public List<RepositoryEntry> getRepositoryReferencesTo(OLATResourceable target) { Long targetKey = getResourceKey(target); StringBuilder sb = new StringBuilder();