From 232fe9773f30fbf6ee2ec5fb70e8e0005eced24d Mon Sep 17 00:00:00 2001
From: dklimpel <5740567+dklimpel@users.noreply.github.com>
Date: Sat, 23 Jan 2021 19:04:33 +0100
Subject: [PATCH] Add a new tab to user page with media
---
src/App.js | 1 +
src/components/users.js | 55 +++++++++++++++++++++++++++++++++++++
src/i18n/de.js | 13 +++++++++
src/i18n/en.js | 13 +++++++++
src/synapse/dataProvider.js | 24 +++++++++++++++-
5 files changed, 105 insertions(+), 1 deletion(-)
diff --git a/src/App.js b/src/App.js
index 5b784c4..f305d0b 100644
--- a/src/App.js
+++ b/src/App.js
@@ -52,6 +52,7 @@ const App = () => (
+
);
diff --git a/src/components/users.js b/src/components/users.js
index 5f8caf8..609de70 100644
--- a/src/components/users.js
+++ b/src/components/users.js
@@ -5,6 +5,7 @@ import ContactMailIcon from "@material-ui/icons/ContactMail";
import DevicesIcon from "@material-ui/icons/Devices";
import GetAppIcon from "@material-ui/icons/GetApp";
import SettingsInputComponentIcon from "@material-ui/icons/SettingsInputComponent";
+import PermMediaIcon from "@material-ui/icons/PermMedia";
import {
ArrayInput,
ArrayField,
@@ -40,6 +41,7 @@ import {
ExportButton,
TopToolbar,
sanitizeListRestProps,
+ NumberField,
} from "react-admin";
import { ServerNoticeButton, ServerNoticeBulkButton } from "./ServerNotices";
import { DeviceRemoveButton } from "./devices";
@@ -312,6 +314,7 @@ export const UserEdit = props => {
/>
+
}
@@ -330,6 +333,7 @@ export const UserEdit = props => {
+
}
@@ -361,6 +365,7 @@ export const UserEdit = props => {
+
}
@@ -400,6 +405,56 @@ export const UserEdit = props => {
+
+ }
+ path="media"
+ >
+ }
+ perPage={50}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
);
diff --git a/src/i18n/de.js b/src/i18n/de.js
index 1b60545..e780b8e 100644
--- a/src/i18n/de.js
+++ b/src/i18n/de.js
@@ -223,6 +223,19 @@ export default {
},
},
},
+ users_media: {
+ name: "Medien",
+ fields: {
+ media_id: "Medien ID",
+ media_length: "Größe",
+ media_type: "Typ",
+ upload_name: "Dateiname",
+ quarantined_by: "Zur Quarantäne hinzugefügt",
+ safe_from_quarantine: "Geschützt vor Quarantäne",
+ created_ts: "Erstellt",
+ last_access_ts: "Letzter Zugriff",
+ },
+ },
servernotices: {
name: "Serverbenachrichtigungen",
send: "Servernachricht versenden",
diff --git a/src/i18n/en.js b/src/i18n/en.js
index 76b33aa..591bfbc 100644
--- a/src/i18n/en.js
+++ b/src/i18n/en.js
@@ -220,6 +220,19 @@ export default {
},
},
},
+ users_media: {
+ name: "Media",
+ fields: {
+ media_id: "Media ID",
+ media_length: "Lenght",
+ media_type: "Type",
+ upload_name: "File name",
+ quarantined_by: "Quarantined by",
+ safe_from_quarantine: "Safe from quarantine",
+ created_ts: "Created",
+ last_access_ts: "Last access",
+ },
+ },
servernotices: {
name: "Server Notices",
send: "Send server notices",
diff --git a/src/synapse/dataProvider.js b/src/synapse/dataProvider.js
index 560bdb9..f41500a 100644
--- a/src/synapse/dataProvider.js
+++ b/src/synapse/dataProvider.js
@@ -113,6 +113,24 @@ const resourceMap = {
data: "members",
total: json => json.members.length,
},
+ users_media: {
+ map: um => ({
+ ...um,
+ id: um.media_id,
+ }),
+ reference: id => ({
+ endpoint: `/_synapse/admin/v1/users/${id}/media`,
+ }),
+ data: "media",
+ total: json => {
+ return json.total;
+ },
+ delete: params => ({
+ endpoint: `/_synapse/admin/v1/media/${localStorage.getItem(
+ "home_server"
+ )}/${params.id}`,
+ }),
+ },
servernotices: {
map: n => ({ id: n.event_id }),
create: data => ({
@@ -210,6 +228,10 @@ const dataProvider = {
console.log("getManyReference " + resource);
const { page, perPage } = params.pagination;
const from = (page - 1) * perPage;
+ const query = {
+ from: from,
+ limit: perPage,
+ };
const homeserver = localStorage.getItem("base_url");
if (!homeserver || !(resource in resourceMap)) return Promise.reject();
@@ -217,7 +239,7 @@ const dataProvider = {
const res = resourceMap[resource];
const ref = res["reference"](params.id);
- const endpoint_url = homeserver + ref.endpoint;
+ const endpoint_url = `${homeserver}${ref.endpoint}?${stringify(query)}`;
return jsonClient(endpoint_url).then(({ headers, json }) => ({
data: json[res.data].map(res.map),