diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties index 1790059465e3bb5e0a593c7917d4646c881d96c7..f7961169211deea64bb03ff006fc5836600f90ba 100644 --- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties @@ -1,4 +1,4 @@ -#Fri May 25 16:23:39 CEST 2018 +#Fri Jun 01 10:17:04 CEST 2018 action.bulkedit=Edit these users' attributes action.choose=Choose action.choose.finish=Choose and finish @@ -142,10 +142,10 @@ table.header.action=Action table.header.vcard=Visiting card table.identity.action=Action table.identity.creationdate=Created +table.identity.deleted.name=Del_User name table.identity.deletedby=Deleted by table.identity.deleteddate=Deleted table.identity.deletedroles=Roles -table.identity.deleted.name=Del_User name table.identity.lastlogin=Last login table.identity.name=User name table.identity.vcard=<i class\='o_icon o_icon-lg o_icon_home'> </i> diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fr.properties index 0d84993c0ce7860e279f9a8a1e5ed42f4ec746f3..9ceb61c77557984614d40835f66b8ecf9a694ff6 100644 --- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fr.properties @@ -1,4 +1,4 @@ -#Thu May 31 16:28:04 CEST 2018 +#Fri Jun 01 10:39:47 CEST 2018 action.bulkedit=Changer les attributs de cet utilisateur action.choose=S\u00E9lectionner action.choose.finish=S\u00E9lectionner et terminer @@ -44,6 +44,8 @@ error.search.form.no.wildcard.dublicates=Les termes de recherche incluant `**` n error.search.form.notempty=Veuillez remplir au minimum un champ du formulaire SVP. error.search.form.to.short=Terme de recherche trop court. error.search.maxResults=Trop de r\u00E9sultats ont \u00E9t\u00E9 trouv\u00E9s. Seul les {0} premiers seront affich\u00E9s. +export.user.data=Exporter les donn\u00E9es +export.user.data.title=Exporter les donn\u00E9es utilisateurs de "{0}" form.password.new1=Nouveau mot de passe form.password.new2=Confirmer mot de passe form.please.enter.new=Veuillez ins\u00E9rer le nouveaux mot de passe pour cet utilisateur s.v.p. diff --git a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java index dcc0337f3441e563df299f2c104d1c6d606e2b96..20045c5fc06cde185a4a80f8d9cd9dc4564cba55 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java +++ b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java @@ -1311,8 +1311,8 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us @Override public void export(Identity identity, ManifestBuilder manifest, File archiveDirectory, Locale locale) { - File noteArchive = new File(archiveDirectory, "Notifications.xlsx"); - try(OutputStream out = new FileOutputStream(noteArchive); + File subscriptionsArchive = new File(archiveDirectory, "Subscriptions.xlsx"); + try(OutputStream out = new FileOutputStream(subscriptionsArchive); OpenXMLWorkbook workbook = new OpenXMLWorkbook(out, 1)) { OpenXMLWorksheet sheet = workbook.nextWorksheet(); sheet.setHeaderRows(1); @@ -1331,7 +1331,7 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us log.error("Unable to export xlsx", e); } - manifest.appendFile("Notifications.xlsx"); + manifest.appendFile(subscriptionsArchive.getName()); } private void exportSubscriberData(Subscriber subscriber, OpenXMLWorksheet sheet, OpenXMLWorkbook workbook, Locale locale) { diff --git a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementArchiver.java b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementArchiver.java index 9bc7e71cc14971d638e7e271ca2c10eabb45c730..bbc54d0d1e15986e66f815cc68b2463ff6ce68e7 100644 --- a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementArchiver.java +++ b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementArchiver.java @@ -152,6 +152,10 @@ public class EfficiencyStatementArchiver { Object value = nodeData.get(key); if(value instanceof String) { row.addCell(col, (String)value); + } else if(value instanceof Number) { + row.addCell(col, (Number)value, null); + } else if(value instanceof Boolean) { + row.addCell(col, ((Boolean)value).toString(), null); } } diff --git a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_fr.properties index 0c499492c70c2c940c02b2bb15c81ccc96727969..187c5888b76d99be7607dbe4eec0bdf8081cbff7 100644 --- a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_fr.properties @@ -1,4 +1,5 @@ -#Wed Mar 08 11:25:33 CET 2017 +#Fri Jun 01 10:18:11 CEST 2018 +chkbx.breadcrumb.onoff=Navigation fil d'Ariane chkbx.calendar.onoff=Afficher calendrier via la bo\u00EEte \u00E0 outils chkbx.chat.onoff=Utiliser le chat du cours chkbx.efficency.onoff=Utiliser l'attestation de performance diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties index 43ef7cf59530592422a4e4be3d4d9414f341848d..db0b15681ba38f5c56b7739f37f8818775eb4526 100644 --- a/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties @@ -1,4 +1,4 @@ -#Thu May 31 16:21:57 CEST 2018 +#Fri Jun 01 10:19:57 CEST 2018 about.copyright=Copyright et participations about.custom= about.custom.title= @@ -105,6 +105,7 @@ mail.pwd.subject=Mot de passe chang\u00E9 max.age=Exiger un nouveau mot de passe max.age.administrator=... pour les administrateurs max.age.author=... pour les auteurs +max.age.description=Vous pouvez configurer ici la fr\u00E9quence \u00E0 laquelle un utilisateur doit changer son mot de passe et si un mot de passe peut \u00EAtre r\u00E9utilis\u00E9. La dur\u00E9e de vie des mots de passe peut \u00EAtre sp\u00E9cifi\u00E9 pour chaque role s\u00E9par\u00E9ment. max.age.groupmanager=... pour gestionnaires de groupes max.age.hint=en jours max.age.learnresourcemanager=... pour les administrateurs de ressources didactiques diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java b/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java index fa081d96152c52fb649334a735388c02a1305c59..a00e71ab92cefa748db9a540bb2c69944f82ce97 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java +++ b/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java @@ -646,7 +646,7 @@ public class RepositoryEntryRelationDAO { public List<MembershipInfos> getMembership(IdentityRef identity) { StringBuilder sb = new StringBuilder(512); - sb.append("select v.key, v.displayname, reMember.role, reMember.creationDate,") + sb.append("select v.key, v.displayname, reMember.key, reMember.role, reMember.creationDate,") .append(" userinfos.initialLaunch, userinfos.recentLaunch, userinfos.visit") .append(" from repositoryentry as v") .append(" inner join v.groups as rel") @@ -659,11 +659,18 @@ public class RepositoryEntryRelationDAO { .setParameter("identityKey", identity.getKey()) .getResultList(); + Set<Long> memberKeys = new HashSet<>(); List<MembershipInfos> memberhips = new ArrayList<>(rawObjects.size()); for(Object[] rawObject:rawObjects) { int col = 0; Long entryKey = (Long)rawObject[col++]; String displayName = (String)rawObject[col++]; + Long memberKey = (Long)rawObject[col++]; + if(memberKeys.contains(memberKey)) { + continue;//duplicate + } + memberKeys.add(memberKey); + String role = (String)rawObject[col++]; Date creationDate = (Date)rawObject[col++]; Date initialLaunch = (Date)rawObject[col++]; diff --git a/src/main/java/org/olat/user/ui/data/UserDataExportController.java b/src/main/java/org/olat/user/ui/data/UserDataExportController.java index 8c2fd6021a93d1903175290e43006adbe16e2f5c..0d5f5a36d2d17143f4c784b0a278d1b622eed165 100644 --- a/src/main/java/org/olat/user/ui/data/UserDataExportController.java +++ b/src/main/java/org/olat/user/ui/data/UserDataExportController.java @@ -19,7 +19,9 @@ */ package org.olat.user.ui.data; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import org.olat.core.gui.UserRequest; @@ -75,13 +77,13 @@ public class UserDataExportController extends FormBasicController { ((FormLayoutContainer)formLayout).contextPut("dataBusinessPath", url); if(!processing) { - List<String> exportIds = exportService.getExporterIds(); - String[] keys = new String[exportIds.size()]; - String[] values = new String[exportIds.size()]; - for(int i=exportIds.size(); i-->0; ) { - String exportId = exportIds.get(i); - keys[i] = exportId; - values[i] = translate(exportId); + List<ExportLabel> exports = getAvailableExports(); + String[] keys = new String[exports.size()]; + String[] values = new String[exports.size()]; + for(int i=exports.size(); i-->0; ) { + ExportLabel export = exports.get(i); + keys[i] = export.getId(); + values[i] = export.getLabel(); } exportEl = uifactory.addCheckboxesVertical("export.options", formLayout, keys, values, 1); exportEl.setMandatory(true); @@ -119,4 +121,38 @@ public class UserDataExportController extends FormBasicController { protected void formCancelled(UserRequest ureq) { fireEvent(ureq, Event.CANCELLED_EVENT); } + + private List<ExportLabel> getAvailableExports() { + List<String> exportIds = exportService.getExporterIds(); + List<ExportLabel> labels = new ArrayList<>(exportIds.size()); + for(String exportId:exportIds) { + labels.add(new ExportLabel(exportId, translate(exportId))); + } + Collections.sort(labels); + return labels; + } + + private static final class ExportLabel implements Comparable<ExportLabel> { + + private final String id; + private final String label; + + public ExportLabel(String id, String label) { + this.id = id; + this.label = label; + } + + public String getId() { + return id; + } + + public String getLabel() { + return label; + } + + @Override + public int compareTo(ExportLabel o) { + return label.compareToIgnoreCase(o.label); + } + } } diff --git a/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_de.properties index 7065728eccdfb5dd85d3b57a4313e957d6b3bcdf..18cb2724578efe5cc9167c77426c4e251c93b19b 100644 --- a/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_de.properties @@ -13,7 +13,7 @@ efficiency.statements=Leistungnachweise export.options=Export Elemente export.start=Start export export.url=Link zu Daten -export.user.data.explain=W\u00E4hlen Sie die Elemente, welche f\u00FCr diesen Benutzer exportiert werden sollen. Der Export kann mehrere Stunde in Anspruch nehmen. Sobald der Export beendet ist werden Sie per Email informiert. +export.user.data.explain=W\u00E4hlen Sie die Elemente, welche f\u00FCr diesen Benutzer exportiert werden sollen. Der Export kann mehrere Stunden in Anspruch nehmen. Sobald der Export beendet ist, werden Sie per Email informiert. export.user.data.none=Datenschutz Erkl\u00E4rung export.user.data.notReady=Der Benutzer kann den Export mit dem folgenden Link herunterladen. export.user.data.processing=Der Export ist gerade bearbeitet. diff --git a/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_en.properties index 9dbe7aa2068d9cb711d26c1c435a95569dacbcb9..7a5d6ff5a97098f025173405d238baee6d3e4e28 100644 --- a/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_en.properties @@ -1,4 +1,4 @@ -#Fri May 25 16:23:30 CEST 2018 +#Fri Jun 01 10:16:59 CEST 2018 binders=ePortfolio binders bookings=Bookings calendars=Calendars @@ -13,6 +13,13 @@ efficiency.statements=Evidences of achievement export.options=Export elements export.start=Start export export.url=Link to the data +export.user.data.explain=Select the elements to be exported for this user. The export can take several hours. You will receive an email once the export has been completed. +export.user.data.none=Privacy statement +export.user.data.notReady=The user can download the export using the following link. +export.user.data.processing=The export is currently processed +export.user.data.ready=The user can download the export with the following link. You can ask for a new export too. +export.user.data.ready.subject=The export for "{0}" is ready +export.user.data.ready.text=<p>The export for "{0}" is ready. The user can use the following link to download it <a href\="{1}">{1}</a>.</p> feeds=Blogs and podcasts forums=Forums group.memberships=Membership to groups @@ -23,5 +30,5 @@ notes=Notes notifications=Subscriptions personal.folders=All documents in private and public folders pf=Participant folders +profile=all profile data, including invisible ones repository.memberships=Membership to courses - diff --git a/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_fr.properties new file mode 100644 index 0000000000000000000000000000000000000000..5a33753ab713027f3af04455791a5a6bf948aa13 --- /dev/null +++ b/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_fr.properties @@ -0,0 +1,34 @@ +#Fri Jun 01 10:34:11 CEST 2018 +binders=Classeurs portfolio +bookings=R\u00E9servations +calendars=Calendriers +certificates=Certificats +chat=Messages de la messagerie instantan\u00E9e +comments.ratings=Commentaires et \u00E9valuations +dialog=Fichiers discut\u00E9s +disclaimer=Conditions d'utilisation +display.portrait=Image publi\u00E9e du profil +download.data=T\u00E9l\u00E9charger les donn\u00E9es +efficiency.statements=Attestations de performance +export.options=Elements \u00E0 exporter +export.start=D\u00E9marrer l'exportation +export.url=Lien vers les donn\u00E9es +export.user.data.explain=S\u00E9lectionner les \u00E9l\u00E9ments \u00E0 exporter pour cette utilisateur. L'exportation peut dur\u00E9e plusieurs heures, vous recevrez un courriel lorsqu'il sera termin\u00E9. +export.user.data.none=D\u00E9claration de protection des donn\u00E9es +export.user.data.notReady=L'utilisateur peut t\u00E9l\u00E9charger les donn\u00E9es export\u00E9es avec le lien suivant. +export.user.data.processing=L'exportation est en cours. +export.user.data.ready=L'utilisateur peut t\u00E9l\u00E9charger les donn\u00E9es avec le lien suivant. Vous pouvez \u00E9galement d\u00E9marrer une nouvelle exportation. +export.user.data.ready.subject=Les donn\u00E9es pour "{0}" sont pr\u00EAtes. +export.user.data.ready.text=<p>Les donn\u00E9es pour l'utilisateur "{0}" sont pr\u00EAtes. L'utilisateur peut les t\u00E9l\u00E9charger en suivant le lien <a href\="{1}">{1}</a>.</p> +feeds=Blogues et podcasts +forums=Forums +group.memberships=Participations aux groupes +gta=Devoirs +logs=Logs +mail=Courriels +notes=Notes personnelles +notifications=Abonnements +personal.folders=Tous les documents des dossiers priv\u00E9 et public +pf=Dossiers participants +profile=toutes les donn\u00E9es du profil, inclus celles invisibles +repository.memberships=Participations aux cours