From 0c56bab2f10fc16f57c885893e5995a4090e8e38 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 29 May 2018 13:23:32 +0200 Subject: [PATCH] OO-3508: export file dialog uploaded by user --- .../admin/user/DeletedUsersController.java | 2 +- .../admin/user/DeletedUsersTableModel.java | 2 +- .../user/_i18n/LocalStrings_de.properties | 4 +- .../user/_i18n/LocalStrings_en.properties | 2 + .../delete/service/UserDeletionManager.java | 2 +- .../nodes/dialog/DialogElementsManager.java | 8 ++ .../manager/DialogElementsManagerImpl.java | 15 +++ .../DialogElementsUserDataManager.java | 103 ++++++++++++++++++ .../ui/data/_i18n/LocalStrings_de.properties | 1 + .../ui/data/_i18n/LocalStrings_en.properties | 1 + 10 files changed, 136 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsUserDataManager.java diff --git a/src/main/java/org/olat/admin/user/DeletedUsersController.java b/src/main/java/org/olat/admin/user/DeletedUsersController.java index 6d97389a8bb..945e2d63fd0 100644 --- a/src/main/java/org/olat/admin/user/DeletedUsersController.java +++ b/src/main/java/org/olat/admin/user/DeletedUsersController.java @@ -99,7 +99,7 @@ public class DeletedUsersController extends FormBasicController { tableEl.setCustomizeColumns(true); tableEl.setEmtpyTableMessageKey("error.no.user.found"); tableEl.setExportEnabled(false); - tableEl.setAndLoadPersistedPreferences(ureq, "deleted-user-list"); + tableEl.setAndLoadPersistedPreferences(ureq, "deleted-user-list-v2"); } @Override diff --git a/src/main/java/org/olat/admin/user/DeletedUsersTableModel.java b/src/main/java/org/olat/admin/user/DeletedUsersTableModel.java index 7b5a53bd035..7d913bc257a 100644 --- a/src/main/java/org/olat/admin/user/DeletedUsersTableModel.java +++ b/src/main/java/org/olat/admin/user/DeletedUsersTableModel.java @@ -66,7 +66,7 @@ public class DeletedUsersTableModel extends DefaultFlexiTableDataSourceModel<Del } public enum DeletedCols implements FlexiSortableColumnDef { - username("table.identity.name"), + username("table.identity.deleted.name"), firstName("table.name.firstName"), lastName("table.name.lastName"), deletedDate("table.identity.deleteddate"), diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties index ee7aa6d43c9..9bcbc9c3bb4 100644 --- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties @@ -81,6 +81,7 @@ new.user.cancel=Die Aktion wurde abgebrochen. Es wurde keine neues Benutzerkonto new.user.successful=Das neue Benutzerkonto wurde angelegt. notification.noNews=Seit diesem Datum haben sich keine neue Benutzer angemeldet notification.noSubscription=Sie haben Benachrichtigung \u00FCber neue Benutzer nicht abonniert +owner=Kursbesitzer poolsmanager=Poolverwalter repocoach=Kursbetreuer rightForm.error.anonymous.no.roles=Anonyme G\u00E4ste k\u00F6nnen keine Systemrollen wahrnehmen @@ -143,7 +144,8 @@ table.header.vcard=Visitenkarte table.identity.action=Aktion table.identity.deletedby=Gel\u00F6scht von table.identity.deleteddate=Gel\u00F6scht am -table.identity.deletedroles=Rolen +table.identity.deletedroles=Rollen +table.identity.deleted.name=Del_Benutzername table.identity.vcard=<i class\='o_icon o_icon-lg o_icon_home'> </i> table.identity.creationdate=Erstellt table.identity.lastlogin=letzter Login 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 c8205d73a3f..1790059465e 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 @@ -81,6 +81,7 @@ new.user.cancel=Action cancelled. No new user account created. new.user.successful=The new user account has been created successfully. notification.noNews=No new users have logged on since that date. notification.noSubscription=You have not subscribed to get news about new users. +owner=Course owner poolsmanager=Question bank manager repocoach=Course coach rightForm.error.anonymous.no.roles=Anonymous guests cannot exercise system roles @@ -144,6 +145,7 @@ table.identity.creationdate=Created 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/delete/service/UserDeletionManager.java b/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java index 19af6d5f07e..8c93c63a705 100644 --- a/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java +++ b/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java @@ -265,7 +265,7 @@ public class UserDeletionManager extends BasicManager { // Delete data of modules that implement the user data deletable - String anonymisedIdentityName = identity.getKey().toString(); + String anonymisedIdentityName = "del_" + identity.getKey().toString(); Map<String,UserDataDeletable> userDataDeletableResourcesMap = CoreSpringFactory.getBeansOfType(UserDataDeletable.class); List<UserDataDeletable> userDataDeletableResources = new ArrayList<>(userDataDeletableResourcesMap.values()); // Start with high priorities (900: user manager), then continue with diff --git a/src/main/java/org/olat/course/nodes/dialog/DialogElementsManager.java b/src/main/java/org/olat/course/nodes/dialog/DialogElementsManager.java index 1062a410951..2be5392e074 100644 --- a/src/main/java/org/olat/course/nodes/dialog/DialogElementsManager.java +++ b/src/main/java/org/olat/course/nodes/dialog/DialogElementsManager.java @@ -21,6 +21,7 @@ package org.olat.course.nodes.dialog; import java.util.List; +import org.olat.basesecurity.IdentityRef; import org.olat.core.id.Identity; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSLeaf; @@ -40,6 +41,13 @@ public interface DialogElementsManager { public List<DialogElement> getDialogElements(RepositoryEntryRef entry, String subIdent); + /** + * + * @param author The author of the elements + * @return A list of dialog elements + */ + public List<DialogElement> getDialogElements(IdentityRef author); + public DialogElement getDialogElementByForum(Long forumKey); public DialogElement getDialogElementByKey(Long elementKey); diff --git a/src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsManagerImpl.java b/src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsManagerImpl.java index 9d1fcefa898..86688c4fa04 100644 --- a/src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsManagerImpl.java +++ b/src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsManagerImpl.java @@ -22,6 +22,7 @@ package org.olat.course.nodes.dialog.manager; import java.util.Date; import java.util.List; +import org.olat.basesecurity.IdentityRef; import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; @@ -87,6 +88,20 @@ public class DialogElementsManagerImpl implements DialogElementsManager { .getResultList(); } + @Override + public List<DialogElement> getDialogElements(IdentityRef author) { + StringBuilder sb = new StringBuilder(); + sb.append("select element from dialogelement as element") + .append(" inner join fetch element.entry entry") + .append(" inner join element.author author") + .append(" where author.key=:identityKey"); + + return dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), DialogElement.class) + .setParameter("identityKey", author.getKey()) + .getResultList(); + } + @Override public DialogElement getDialogElementByForum(Long forumKey) { StringBuilder sb = new StringBuilder(); diff --git a/src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsUserDataManager.java b/src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsUserDataManager.java new file mode 100644 index 00000000000..8f7ebcb426b --- /dev/null +++ b/src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsUserDataManager.java @@ -0,0 +1,103 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.course.nodes.dialog.manager; + +import java.io.File; +import java.util.List; +import java.util.Locale; + +import org.olat.core.id.Identity; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; +import org.olat.core.util.StringHelper; +import org.olat.core.util.vfs.VFSLeaf; +import org.olat.course.CourseFactory; +import org.olat.course.ICourse; +import org.olat.course.nodes.CourseNode; +import org.olat.course.nodes.dialog.DialogElement; +import org.olat.course.nodes.dialog.DialogElementsManager; +import org.olat.repository.RepositoryEntry; +import org.olat.user.UserDataExportable; +import org.olat.user.manager.ManifestBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + * Initial date: 29 mai 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +@Service +public class DialogElementsUserDataManager implements UserDataExportable { + + private static final OLog log = Tracing.createLoggerFor(DialogElementsUserDataManager.class); + + @Autowired + private DialogElementsManager dialogElementsManager; + + @Override + public String getExporterID() { + return "dialog"; + } + + @Override + public void export(Identity identity, ManifestBuilder manifest, File archiveDirectory, Locale locale) { + List<DialogElement> elements = dialogElementsManager.getDialogElements(identity); + File elementsArchiveDirectory = new File(archiveDirectory, "FileDialogs"); + for(DialogElement element:elements) { + exportElement(element, elementsArchiveDirectory); + } + } + + private void exportElement(DialogElement element, File elementsArchiveDirectory) { + VFSLeaf file = dialogElementsManager.getDialogLeaf(element); + if(file != null && file.exists()) { + RepositoryEntry entry = element.getEntry(); + String name = StringHelper.transformDisplayNameToFileSystemName(entry.getDisplayname()) + + "_" + getNodeName(element); + File elementDir = new File(elementsArchiveDirectory, name); + elementDir.mkdirs(); + FileUtils.copyItemToDir(file, elementDir, "Copy file dialog"); + } + } + + private String getNodeName(DialogElement element) { + try { + RepositoryEntry entry = element.getEntry(); + ICourse course = CourseFactory.loadCourse(entry.getOlatResource().getResourceableId()); + CourseNode node = course.getRunStructure().getNode(element.getSubIdent()); + if(node == null) { + return element.getSubIdent(); + } + if(StringHelper.containsNonWhitespace(node.getShortTitle())) { + return node.getShortTitle(); + } + if(StringHelper.containsNonWhitespace(node.getLongTitle())) { + return node.getLongTitle(); + } + return element.getSubIdent(); + } catch (Exception e) { + log.error("", e); + return element.getSubIdent(); + } + } +} 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 3ec6006af26..69591c528bf 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 @@ -5,6 +5,7 @@ calendars=Kalendareintr\u00E4ge certificates=Certifikaten chat=Chat comments.ratings=Kommentaren und Bewertungen +dialog=Dateidiscussion disclaimer=Nutzungsbedigung display.portrait=Profilbild download.data=Dateien herunterladen 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 5bb571cb71e..8528d5eb6b4 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 @@ -5,6 +5,7 @@ calendars=Calendars certificates=Certificates chat=Chat messages comments.ratings=Comments and ratings +dialog=File dialog disclaimer=Disclaimer display.portrait=Published image download.data=Download the data -- GitLab