diff --git a/frontend/src/i18n/locales/de.yaml b/frontend/src/i18n/locales/de.yaml index 804567be4..2a39fcb97 100644 --- a/frontend/src/i18n/locales/de.yaml +++ b/frontend/src/i18n/locales/de.yaml @@ -307,9 +307,6 @@ upload: angeschaut werden, sobald die Verarbeitung abgeschlossen ist. Sie können diese Seite jetzt schließen. metadata: - title: Videotitel - description: Beschreibung - required: Pflichtfeld save: Speichern und fertigstellen note-writable-series: > Sie können Videos nur in Serien hochladen, auf die Sie Schreibzugriff haben. @@ -317,12 +314,18 @@ upload: errors: failed-to-upload: Hochladen fehlgeschlagen. unknown: Während des Dateiuploads ist ein unbekannter Fehler aufgetreten. - field-required: Dieses Feld darf nicht leer sein. opencast-server-error: Opencast-Server-Fehler (unerwartete Antwort). opencast-unreachable: 'Netzwerkfehler: Opencast kann nicht erreicht werden.' jwt-invalid: 'Interner Fremdauthentifizierungsfehler: Opencast hat das Hochladen nicht autorisiert.' failed-fetching-series-acl: Abruf der Serienzugangsberechtigungen fehlgeschlagen. +metadata-form: + title: Titel + description: Beschreibung + required: Pflichtfeld + errors: + field-required: Dieses Feld darf nicht leer sein. + acl: unknown-user-note: unbekannt no-entries: Keine Einträge @@ -455,6 +458,8 @@ manage: no-of-videos: '{{count}} Videos' details: title: Seriendetails + create: + title: Serie erstellen my-videos: title: Meine Videos diff --git a/frontend/src/i18n/locales/en.yaml b/frontend/src/i18n/locales/en.yaml index 04db53748..e5594a48e 100644 --- a/frontend/src/i18n/locales/en.yaml +++ b/frontend/src/i18n/locales/en.yaml @@ -305,9 +305,6 @@ upload: Your video was uploaded successfully and is now being processed. It can be watched as soon as processing is done. You may close this page now. metadata: - title: Video title - description: Description - required: required save: Save and finish note-writable-series: > Videos can only be uploaded into series for which you have write-access. @@ -315,12 +312,18 @@ upload: errors: failed-to-upload: Failed to upload video. unknown: Unknown error occurred during video upload. - field-required: This field is required (cannot be empty). opencast-server-error: Opencast server error (unexpected response). opencast-unreachable: 'Network error: Opencast cannot be reached.' jwt-invalid: 'Internal cross-authentication error: Opencast did not authorize the upload.' failed-fetching-series-acl: Failed to fetch series acl. +metadata-form: + title: Title + description: Description + required: required + errors: + field-required: This field is required (cannot be empty). + acl: unknown-user-note: unknown no-entries: No entries @@ -437,6 +440,8 @@ manage: no-of-videos: '{{count}} videos' details: title: Series details + create: + title: Create series my-videos: title: My videos diff --git a/frontend/src/layout/header/UserBox.tsx b/frontend/src/layout/header/UserBox.tsx index 1b95d948a..623d92c5d 100644 --- a/frontend/src/layout/header/UserBox.tsx +++ b/frontend/src/layout/header/UserBox.tsx @@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next"; import { LuAlertTriangle, LuLogIn, LuMoon, LuSun, LuFolder, LuFilm, LuUpload, LuVideo, LuLogOut, LuChevronDown, LuUserCheck, + LuFilePlus, } from "react-icons/lu"; import { HiOutlineFire, HiOutlineTranslate } from "react-icons/hi"; import { @@ -28,6 +29,7 @@ import { LoginLink } from "../../routes/util"; import { CREDENTIALS_STORAGE_KEY } from "../../routes/Video"; import { ManageSeriesRoute } from "../../routes/manage/Series"; import SeriesIcon from "../../icons/series.svg"; +import { CreateSeriesRoute } from "../../routes/manage/Series/Create"; @@ -236,6 +238,12 @@ const LoggedIn: React.FC = ({ user }) => { children: t("upload.title"), css: indent, }] : [], + { + icon: , + wrapper: , + children: t("manage.my-series.create.title"), + css: indent, + }, ...user.canUseStudio ? [{ icon: , wrapper: = ({ onSave, disabled, knownRole } }; - const defaultAcl: Acl = new Map([ - [user.userRole, { - actions: new Set(["read", "write"]), - info: { - label: { "_": user.displayName }, - implies: null, - large: false, - }, - }], - [COMMON_ROLES.ANONYMOUS, { - actions: new Set(["read"]), - info: null, - }], - ]); + const defaultAcl = defaultAclMap(user); const { register, handleSubmit, control, formState: { isValid, errors } } = useForm({ mode: "onChange", @@ -768,7 +755,9 @@ const MetaDataEdit: React.FC = ({ onSave, disabled, knownRole name: "series", control, rules: { - required: CONFIG.upload.requireSeries ? t("upload.errors.field-required") : false, + required: CONFIG.upload.requireSeries + ? t("metadata-form.errors.field-required") + : false, }, }); @@ -798,7 +787,7 @@ const MetaDataEdit: React.FC = ({ onSave, disabled, knownRole css={{ width: 400, maxWidth: "100%" }} autoFocus {...register("title", { - required: t("upload.errors.field-required") as string, + required: t("metadata-form.errors.field-required") as string, })} /> {boxError(errors.title?.message)} @@ -807,7 +796,7 @@ const MetaDataEdit: React.FC = ({ onSave, disabled, knownRole
{/* Description */} - +