diff --git a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java index b3eea997c07ed9e5650b84ed82a32ee56b71d4b8..69ef2754e7c24cab5e482b18f64f400f9a66552e 100644 --- a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java +++ b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java @@ -195,7 +195,8 @@ public class EfficiencyStatementManager implements UserDataDeletable { efficiencyProperty.setResource(repoEntry.getOlatResource()); efficiencyProperty.setCourseRepoKey(repoEntry.getKey()); } - + efficiencyProperty.setShortTitle(courseEnv.getRunStructure().getRootNode().getShortTitle()); + efficiencyProperty.setTitle(courseEnv.getRunStructure().getRootNode().getLongTitle()); fillEfficiencyStatement(efficiencyStatement, efficiencyProperty); dbInstance.getCurrentEntityManager().persist(efficiencyProperty); if (debug) { @@ -205,7 +206,9 @@ public class EfficiencyStatementManager implements UserDataDeletable { // update existing if (debug) { log.debug("updating efficiency statement property::" + efficiencyProperty.getKey() + " for id::" + assessedIdentity.getName() + " repoEntry::" + repoEntry.getKey()); - } + } + efficiencyProperty.setShortTitle(courseEnv.getRunStructure().getRootNode().getShortTitle()); + efficiencyProperty.setTitle(courseEnv.getRunStructure().getRootNode().getLongTitle()); fillEfficiencyStatement(efficiencyStatement, efficiencyProperty); dbInstance.getCurrentEntityManager().merge(efficiencyProperty); } diff --git a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java index a0e94eb7d2f309b4ceea2d49f2e61fdc1c1652e8..d3770934a1a67fde00600b48c7145dc528972cca 100644 --- a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java +++ b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java @@ -56,6 +56,7 @@ import org.olat.core.gui.render.StringOutput; import org.olat.core.gui.render.URLBuilder; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; +import org.olat.core.util.StringHelper; import org.olat.core.util.Util; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.event.GenericEventListener; @@ -246,6 +247,9 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo resourceKeyToStatments.put(resourceKey, wrapper); statments.add(wrapper); } else { + if(!StringHelper.containsNonWhitespace(wrapper.getDisplayName())) { + wrapper.setDisplayName(certificate.getCourseTitle()); + } wrapper.setResourceKey(resourceKey); } if(resourceKey != null && wrapper.getResourceKey() == null) { @@ -254,6 +258,13 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo wrapper.setCertificate(certificate); } + for(CertificateAndEfficiencyStatement statment:statments) { + if(!StringHelper.containsNonWhitespace(statment.getDisplayName()) && statment.getResourceKey() != null) { + String displayName = repositoryManager.lookupDisplayNameByResourceKey(statment.getResourceKey()); + statment.setDisplayName(displayName); + } + } + tableModel.setObjects(statments); } diff --git a/src/main/java/org/olat/repository/RepositoryEntry.java b/src/main/java/org/olat/repository/RepositoryEntry.java index f7d3d00369d5b391dc93437f1764fc09b1a29aaf..a4f37ffa8fa6f1c259005058c823b79cfc400671 100644 --- a/src/main/java/org/olat/repository/RepositoryEntry.java +++ b/src/main/java/org/olat/repository/RepositoryEntry.java @@ -74,6 +74,7 @@ import org.olat.resource.OLATResourceImpl; @NamedQuery(name="filterRepositoryEntryMembership", query="select v.key, membership.identity.key from repositoryentry as v inner join v.groups as relGroup inner join relGroup.group as baseGroup inner join baseGroup.members as membership on membership.role in ('owner','coach','participant') where membership.identity.key=:identityKey and v.key in (:repositoryEntryKey)"), @NamedQuery(name="loadRepositoryEntryByKey", query="select v from repositoryentry as v inner join fetch v.olatResource as ores inner join fetch v.statistics as statistics left join fetch v.lifecycle as lifecycle where v.key = :repoKey"), @NamedQuery(name="loadRepositoryEntryByResourceKey", query="select v from repositoryentry as v inner join fetch v.olatResource as ores inner join fetch v.statistics as statistics left join fetch v.lifecycle as lifecycle where ores.key = :resourceKey"), + @NamedQuery(name="getDisplayNameByResourceKey", query="select v.displayname from repositoryentry v where v.olatResource.key=:resKey"), @NamedQuery(name="getDisplayNameByOlatResourceRedId", query="select v.displayname from repositoryentry v inner join v.olatResource as ores where ores.resId=:resid"), @NamedQuery(name="getDisplayNameByRepositoryEntryKey", query="select v.displayname from repositoryentry v where v.key=:reKey") diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index 9173a930807d419db87a66b5dca197398c162342..709d1b6a71279172147df7c1ff4c30f1b9e3c0a6 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -429,6 +429,18 @@ public class RepositoryManager { return displaynames.get(0); } + public String lookupDisplayNameByResourceKey(Long resourceKey) { + List<String> displaynames = dbInstance.getCurrentEntityManager() + .createNamedQuery("getDisplayNameByResourceKey", String.class) + .setParameter("resKey", resourceKey) + .setHint("org.hibernate.cacheable", Boolean.TRUE) + .getResultList(); + + if (displaynames.size() > 1) throw new AssertException("Repository lookup returned zero or more than one result: " + displaynames.size()); + else if (displaynames.isEmpty()) return null; + return displaynames.get(0); + } + /** * Convenience method to access the repositoryEntry displayname by the referenced OLATResourceable id. * This only works if a repository entry has an referenced olat resourceable like a course or an content package repo entry