diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties index 3aa0633955b40d12e2351265b9f8fad432f06934..9023c8fa29442b26e52ef3d799bb8143b1041962 100644 --- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Wed Apr 24 17:05:43 CEST 2019 +#Thu May 23 15:11:49 CEST 2019 action.bulkedit=Editar os atributos desses usu\u00E1rios action.choose=Choose action.choose.finish=Fechar e terminar @@ -85,6 +85,8 @@ new.form.please.enter.pwd=Choose a password for new user new.form.username=User name new.user.cancel=Action cancelled. No new user account created. new.user.successful=The new user account has been created successfully. +no.eff.statement=Sem comprovantes de conclus\u00E3o +no.resource=Sem recursos did\u00E1ticos notification.noNews=Nenhum novo usu\u00E1rio se conectou desde essa data. notification.noSubscription=Voc\u00EA n\u00E3o est\u00E1 inscrito para receber not\u00EDcias sobre novos usu\u00E1rios. owner=Propriet\u00E1rio do Curso diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties index 85c9dccf18a37193b56f273f7266a07a06ba0ebb..5b4cd039770a153bfab69cb07bb7af5f4b0e904e 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Wed Apr 24 17:05:44 CEST 2019 +#Thu May 23 15:11:50 CEST 2019 cal.add.event=Adicionar evento cal.add.readonly=(somente leitura) cal.color.choose=Escolher cor diff --git a/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties index f771a848204f7bd2c94095cead21a455da83ddf2..edbf74546757aa1483fe78d49bfc18d2c550dc1e 100644 --- a/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Fri May 03 20:50:18 CEST 2019 +#Thu May 23 15:03:54 CEST 2019 command.new_db=Criar novo banco de dados customDb.category=Nome customDb.create=Criar diff --git a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties index 7c32167d34b94d934a86728d3e376074611a050c..8f177c5276fb431f881209bbbba43fcd20eb5ab7 100644 --- a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Mon May 13 16:59:55 CEST 2019 +#Thu May 23 15:03:06 CEST 2019 businessgroup.contact.bodytext=<p></p>---<p>Ir imediatamente para o grupo "{0}"\: {1}</p> businessgroup.contact.subject=Mensagem para grupo {0} contact.all.coaches=Todos os treinadores (coaches) de grupo diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumService.java b/src/main/java/org/olat/modules/curriculum/CurriculumService.java index 7c9b1c8c995863d9a198da14718ffbd92043f9db..a4bcc8571e862fbda217ee9c88339ef88ce0a3ec 100644 --- a/src/main/java/org/olat/modules/curriculum/CurriculumService.java +++ b/src/main/java/org/olat/modules/curriculum/CurriculumService.java @@ -240,7 +240,7 @@ public interface CurriculumService { public CurriculumElement getCurriculumElement(CurriculumElementRef element); - public List<CurriculumElement> getCurriculumElements(Collection<CurriculumElementRef> elementRefs); + public List<CurriculumElement> getCurriculumElements(Collection<? extends CurriculumElementRef> elementRefs); public void deleteCurriculumElement(CurriculumElementRef element); diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java index 9665ad2c8a7cd5e5de4204f8d597717e91466ddd..5f492a5c111ebedd659db13c2b28122cf6f46719 100644 --- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java +++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java @@ -146,19 +146,20 @@ public class CurriculumElementDAO { return elements == null || elements.isEmpty() ? null : elements.get(0); } - public List<CurriculumElement> loadByKeys(Collection<CurriculumElementRef> elementRefs) { + public List<CurriculumElement> loadByKeys(Collection<? extends CurriculumElementRef> elementRefs) { if (elementRefs == null || elementRefs.isEmpty()) return new ArrayList<>(0); StringBuilder sb = new StringBuilder(128); sb.append("select el"); sb.append(" from curriculumelement el"); sb.append(" left join fetch el.type"); + sb.append(" left join el.parent parentEl"); sb.append(" where el.key in :keys"); List<Long> keys = elementRefs.stream().map(CurriculumElementRef::getKey).collect(Collectors.toList()); return dbInstance.getCurrentEntityManager() .createQuery(sb.toString(), CurriculumElement.class) - .setParameter("keys", keys ) + .setParameter("keys", keys) .getResultList(); } diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java index d476d86de754ae3caf1236c21086b258916bcc57..a893dd05d692e87d557a8cd4fec101724da99ae4 100644 --- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java +++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java @@ -355,7 +355,7 @@ public class CurriculumServiceImpl implements CurriculumService, OrganisationDat } @Override - public List<CurriculumElement> getCurriculumElements(Collection<CurriculumElementRef> elementRefs) { + public List<CurriculumElement> getCurriculumElements(Collection<? extends CurriculumElementRef> elementRefs) { return curriculumElementDao.loadByKeys(elementRefs); } diff --git a/src/main/java/org/olat/modules/quality/manager/QualityMailing.java b/src/main/java/org/olat/modules/quality/manager/QualityMailing.java index f65422f05f26409e760f4480b1045d42b001b758..de4e710d80fd8138cba7e5411bff903567e18361 100644 --- a/src/main/java/org/olat/modules/quality/manager/QualityMailing.java +++ b/src/main/java/org/olat/modules/quality/manager/QualityMailing.java @@ -323,8 +323,8 @@ class QualityMailing { StringBuilder sb = new StringBuilder(); List<UIContext> uiContexts = QualityUIContextsBuilder.builder(dataCollection, locale) .addAttribute(Attribute.ROLE) - .addAttribute(Attribute.COURSE) .addAttribute(Attribute.CURRICULUM_ELEMENTS) + .addAttribute(Attribute.COURSE) .addAttribute(Attribute.TAXONOMY_LEVELS) .build() .getUiContexts(); diff --git a/src/main/java/org/olat/modules/quality/ui/QualityUIContextsDataCollectionBuilder.java b/src/main/java/org/olat/modules/quality/ui/QualityUIContextsDataCollectionBuilder.java index 3642cd4a0c09e024f735c69f87dd741af4bb3de8..6d78b177d83a5a19890b6be4be450bda4b89d019 100644 --- a/src/main/java/org/olat/modules/quality/ui/QualityUIContextsDataCollectionBuilder.java +++ b/src/main/java/org/olat/modules/quality/ui/QualityUIContextsDataCollectionBuilder.java @@ -36,6 +36,7 @@ import org.olat.core.util.StringHelper; import org.olat.core.util.Util; import org.olat.modules.curriculum.CurriculumElement; import org.olat.modules.curriculum.CurriculumElementType; +import org.olat.modules.curriculum.CurriculumService; import org.olat.modules.quality.QualityContext; import org.olat.modules.quality.QualityContextRole; import org.olat.modules.quality.QualityContextToCurriculumElement; @@ -64,6 +65,8 @@ public class QualityUIContextsDataCollectionBuilder extends QualityUIContextsBui @Autowired private QualityService qualityService; + @Autowired + private CurriculumService curriculumService; QualityUIContextsDataCollectionBuilder(QualityDataCollection dataCollection, Locale locale) { this.dataCollection = dataCollection; @@ -105,6 +108,10 @@ public class QualityUIContextsDataCollectionBuilder extends QualityUIContextsBui uiContext.add(keyValue); } } + if (attributes.contains(Attribute.CURRICULUM_ELEMENTS)) { + Collection<KeyValue> keyValues = getCurriculumElements(contexts); + uiContext.addAll(keyValues); + } if (attributes.contains(Attribute.COURSE)) { String value = getAudienceCourses(contexts); if (StringHelper.containsNonWhitespace(value)) { @@ -113,10 +120,6 @@ public class QualityUIContextsDataCollectionBuilder extends QualityUIContextsBui uiContext.add(keyValue); } } - if (attributes.contains(Attribute.CURRICULUM_ELEMENTS)) { - Collection<KeyValue> keyValues = getCurriculumElements(contexts); - uiContext.addAll(keyValues); - } if (attributes.contains(Attribute.TAXONOMY_LEVELS)) { Collection<KeyValue> keyValues = getTaxonomyLevels(contexts); uiContext.addAll(keyValues); @@ -159,25 +162,52 @@ public class QualityUIContextsDataCollectionBuilder extends QualityUIContextsBui .collect(Collectors.joining(DELIMITER)); } - private Collection<KeyValue> getCurriculumElements(List<QualityContext> contexts) { - // Group curriculum elements by the name of the type and join the display names - Map<String, String> typesNamesToCurriculumElements = contexts.stream() + private List<KeyValue> getCurriculumElements(List<QualityContext> contexts) { + // Get a list of all curriculum elements and its parents. + List<CurriculumElement> elements = contexts.stream() .map(QualityContext::getContextToCurriculumElement) .flatMap(Set::stream) .map(QualityContextToCurriculumElement::getCurriculumElement) .distinct() .filter(Objects::nonNull) - .collect(Collectors.groupingBy(element -> getTypeName(element), - Collectors.mapping(CurriculumElement::getDisplayName, Collectors.joining(DELIMITER)))); + .collect(Collectors.toList()); - List<KeyValue> keyValues = new ArrayList<>(typesNamesToCurriculumElements.size()); - for (Map.Entry<String, String> entry : typesNamesToCurriculumElements.entrySet()) { - KeyValue keyValue = new KeyValue(entry.getKey(), entry.getValue()); + // reload to fetch the parents + elements = curriculumService.getCurriculumElements(elements); + List<CurriculumElement> elementsHierarchical = new ArrayList<>(); + for (CurriculumElement element: elements) { + addParents(elementsHierarchical, element); + } + // reverse, so that the top most element is the first element + List<CurriculumElement> invertedList = new ArrayList<>(); + for (int i = elementsHierarchical.size() - 1; i >= 0; i--) { + invertedList.add(elementsHierarchical.get(i)); + } + elementsHierarchical = invertedList; + + List<KeyValue> keyValues = new ArrayList<>(elementsHierarchical.size()); + for (CurriculumElement element : elementsHierarchical) { + KeyValue keyValue = new KeyValue(getTypeName(element), getName(element)); keyValues.add(keyValue); } return keyValues; } + + private void addParents(List<CurriculumElement> elementsHierarchical, CurriculumElement element) { + elementsHierarchical.add(element); + if (element.getParent() != null) { + addParents(elementsHierarchical, element.getParent()); + } + } + private String getName(CurriculumElement element) { + StringBuilder sb = new StringBuilder(element.getDisplayName()); + if (StringHelper.containsNonWhitespace(element.getIdentifier())) { + sb.append(" (").append(element.getIdentifier()).append(")"); + } + return sb.toString(); + } + private String getTypeName(CurriculumElement element) { CurriculumElementType curriculumElementType = element.getType(); return curriculumElementType != null diff --git a/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_pt_BR.properties index 6326dafac20b9eab33119a04701a2d1c8f6f78bc..d331bca0ebb1b0a23bdded0f8212507d2dff6847 100644 --- a/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Wed Mar 06 16:29:09 CET 2019 +#Thu May 23 15:03:46 CEST 2019 admin.config.title=Gerenciamento da qualidade de configura\u00E7\u00E3o admin.enabled=Gest\u00E3o da Qualidade admin.menu.title=Gest\u00E3o da qualidade @@ -194,6 +194,7 @@ report.access.name.participants.done=Usu\u00E1rios participantes report.access.name.repo.coach=Treinador de curso report.access.name.repo.owner=Propriet\u00E1rio de curso report.access.name.topic.identity=Treinador de t\u00F3picos +report.access.name.topic.identity.name=Coach de t\u00F3picos ({0}) report.access.name.topic.identity.relation=Treinador de t\u00F3picos ({0}) report.access.online=Online report.access.rating.insufficient=insuficiente diff --git a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_pt_BR.properties index 314488c892d43dcdd0cc17cdd9f03e46cca76452..615eb620fda696dfc855acc2b93459302945c458 100644 --- a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Wed Mar 06 16:29:13 CET 2019 +#Thu May 23 15:03:53 CEST 2019 add.track=Adicionar legenda admin.config.enable=Ativar recurso de v\u00EDdeo admin.config.hint=Tem certeza de que deseja desativar a transcodifica\u00E7\u00E3o de v\u00EDdeo? @@ -17,6 +17,7 @@ chapter.error.notime=Por favor, coloque um tempo v\u00E1lido\! chapter.error.notitle=Defina um t\u00EDtulo de cap\u00EDtulo v\u00E1lido\! chapter.error.out.of.range=Seu "Timecode" do cap\u00EDtulo excede o comprimento do v\u00EDdeo\! delete.transcodings=Todas as Transcodifica\u00E7\u00F5es desta Resolu\u00E7\u00E3o foram exclu\u00EDdas. +error.format.not.supported=Formato n\u00E3o suportado error.no.duration=A dura\u00E7\u00E3o deve ser maior que 0. error.percent.value=O valor precisa ser entre 0 e 100 info.transcoding=Transcodifica\u00E7\u00F5es ausentes ser\u00E3o criadas.