diff --git a/backend/src/common/payloads.ts b/backend/src/common/payloads.ts index f621f19b..98cba390 100644 --- a/backend/src/common/payloads.ts +++ b/backend/src/common/payloads.ts @@ -4,6 +4,7 @@ import { StripeLocales, AccessErrorType, CoachMessage, + Session, } from './types.js'; export interface RegisterPayload { @@ -49,9 +50,10 @@ export interface CreateSessionPayload { encryptedCheck?: string; } -export interface UnauthorizedAccessPayload { +export type UnauthorizedAccessPayload = { type?: AccessErrorType; -} + session?: Session; +}; export interface SelfHostedCheckPayload { key: string; diff --git a/backend/src/common/types.ts b/backend/src/common/types.ts index e3fa00e9..768e4449 100644 --- a/backend/src/common/types.ts +++ b/backend/src/common/types.ts @@ -122,6 +122,7 @@ export interface Product { export interface User extends Entity { name: string; photo: string | null; + email: string | null; } export interface UserIdentity extends Entity { diff --git a/backend/src/db/entities/SessionView.ts b/backend/src/db/entities/SessionView.ts index 0be64963..8860143a 100644 --- a/backend/src/db/entities/SessionView.ts +++ b/backend/src/db/entities/SessionView.ts @@ -62,7 +62,7 @@ export default class SessionView { this.id = id; this.name = name; this.created = new Date(); - this.createdBy = { id: '0', name: '', photo: '' }; + this.createdBy = { id: '0', name: '', photo: '', email: null }; this.encrypted = null; this.locked = false; this.numberOfActions = 0; diff --git a/backend/src/db/entities/UserIdentity.ts b/backend/src/db/entities/UserIdentity.ts index feea9092..794439e0 100644 --- a/backend/src/db/entities/UserIdentity.ts +++ b/backend/src/db/entities/UserIdentity.ts @@ -93,6 +93,7 @@ export class UserEntity { id: this.id, name: this.name, photo: this.photo, + email: this.email, }; } } diff --git a/backend/src/game.ts b/backend/src/game.ts index 4d024443..ba815b21 100644 --- a/backend/src/game.ts +++ b/backend/src/game.ts @@ -167,6 +167,7 @@ export default (io: Server) => { : { id: socket, name: `(Spectator #${i})`, + email: null, photo: null, pro: null, } @@ -372,6 +373,10 @@ export default (io: Server) => { log(chalk`{red User not allowed, session locked}`); const payload: UnauthorizedAccessPayload = { type: userAllowed.reason, + session: + userAllowed.reason === 'locked' + ? sessionEntity.toJson() + : undefined, }; sendToSelf( socket, diff --git a/frontend/src/common/payloads.ts b/frontend/src/common/payloads.ts index f621f19b..98cba390 100644 --- a/frontend/src/common/payloads.ts +++ b/frontend/src/common/payloads.ts @@ -4,6 +4,7 @@ import { StripeLocales, AccessErrorType, CoachMessage, + Session, } from './types.js'; export interface RegisterPayload { @@ -49,9 +50,10 @@ export interface CreateSessionPayload { encryptedCheck?: string; } -export interface UnauthorizedAccessPayload { +export type UnauthorizedAccessPayload = { type?: AccessErrorType; -} + session?: Session; +}; export interface SelfHostedCheckPayload { key: string; diff --git a/frontend/src/common/types.ts b/frontend/src/common/types.ts index e3fa00e9..768e4449 100644 --- a/frontend/src/common/types.ts +++ b/frontend/src/common/types.ts @@ -122,6 +122,7 @@ export interface Product { export interface User extends Entity { name: string; photo: string | null; + email: string | null; } export interface UserIdentity extends Entity { diff --git a/frontend/src/translations/locales/ar-SA.json b/frontend/src/translations/locales/ar-SA.json index 271aa303..f9db656f 100644 --- a/frontend/src/translations/locales/ar-SA.json +++ b/frontend/src/translations/locales/ar-SA.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "السماح بإنشاء مجموعات لتجميع المشاركات معا", "allowReordering": "السماح بإعادة الطلب", "allowReorderingHelp": "السماح بإعادة ترتيب المشاركات بسحب وإسقاط", - "restrictTitleEditToOwner": "تقييد تحرير العنوان إلى المالك", - "restrictTitleEditToOwnerHelp": "لا يستطيع تغيير ملكيته إلا مالك الارتداد", - "restrictReorderingToOwner": "تقييد إعادة الطلب إلى المالك", - "restrictReorderingToOwnerHelp": "لا يستطيع إعادة ترتيب الوظائف إلا مالك الكاتب بأثر رجعي", - "restrictGroupingToOwner": "تقييد التجميع إلى المالك", - "restrictGroupingToOwnerHelp": "لا يستطيع إنشاء مجموعات إلا مالك الارتداد", + "restrictTitleEditToOwner": "تقييد تحرير العنوان إلى المشرف", + "restrictTitleEditToOwnerHelp": "مدير إدارة رجعي هو وحده القادر على تغيير عنوانه", + "restrictReorderingToOwner": "تقييد إعادة الطلب إلى المشرف", + "restrictReorderingToOwnerHelp": "فقط مشرف وظيفة بأثر رجعي قادر على إعادة ترتيب الوظائف", + "restrictGroupingToOwner": "تقييد التجميع إلى المشرف", + "restrictGroupingToOwnerHelp": "فقط مشرف المشرف بأثر رجعي قادر على إنشاء مجموعات", "blurCards": "طمس البطاقات", "blurCardsHelp": "محتوى البطاقات غير واضح حتى يكشف المشرف عن المحتوى", "template": "قالب", @@ -473,7 +473,7 @@ "lockDescription": "أنت على وشك جعل الجلسة خاصة. سيسمح فقط للمشاركين الحاليين (المدرجة أدناه) بالدخول إلى هذه الجلسة بمجرد قفلهم.", "cancelButton": "إلغاء", "sessionLockedTitle": "هذه الجلسة سرية.", - "sessionLockedDescription": "من فضلك اطلب من المشرف فتح القفل حتى تتمكن من الانضمام. ثم قم بتحديث هذه الصفحة.", + "sessionLockedDescription": "من فضلك اطلب من المشرف ({{moderator}}, {{email}}) فتح القفل حتى تتمكن من الانضمام. ثم قم بتحديث هذه الصفحة.", "sessionNonProTitle": "هذه الجلسة متاحة فقط للمستخدمين المحترفين", "sessionNonProDescription": "هذه الجلسة تستخدم الميزات المتاحة فقط للمستخدمين المحترفين. الرجاء الطلب من المشرف أو صاحب الاشتراك أن يعطيك حساب محترف.", "sessionIsPublic": "وهذه الجلسة علنية ويمكن لأي شخص الوصول إليها.", diff --git a/frontend/src/translations/locales/de-DE.json b/frontend/src/translations/locales/de-DE.json index da163e59..6b9bf2a0 100644 --- a/frontend/src/translations/locales/de-DE.json +++ b/frontend/src/translations/locales/de-DE.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "Erstelle Gruppen, um Beiträge zusammenzufassen", "allowReordering": "Neu sortieren erlauben", "allowReorderingHelp": "Erlaubt die Beiträge per Drag-and-Drop neu zu sortieren", - "restrictTitleEditToOwner": "Titelbearbeitung auf Eigentümer beschränken", - "restrictTitleEditToOwnerHelp": "Nur der Besitzer einer Retrospektive kann seinen Titel ändern", - "restrictReorderingToOwner": "Neubestellung auf Eigentümer beschränken", - "restrictReorderingToOwnerHelp": "Nur der Besitzer einer Retrospektive kann Beiträge neu bestellen", - "restrictGroupingToOwner": "Gruppierung auf Besitzer beschränken", - "restrictGroupingToOwnerHelp": "Nur der Besitzer einer Retrospektive kann Gruppen erstellen", + "restrictTitleEditToOwner": "Titelbearbeitung auf Moderator beschränken", + "restrictTitleEditToOwnerHelp": "Nur der Moderator einer Retrospektive kann seinen Titel ändern", + "restrictReorderingToOwner": "Erneute Bestellung auf den Moderator beschränken", + "restrictReorderingToOwnerHelp": "Nur der Moderator einer Retrospektive kann Beiträge neu bestellen", + "restrictGroupingToOwner": "Gruppierung auf den Moderator beschränken", + "restrictGroupingToOwnerHelp": "Nur der Moderator einer Retrospektive kann Gruppen erstellen", "blurCards": "Unscharfe Karten", "blurCardsHelp": "Karteninhalte werden verschwommen dargestellt, bis der Moderator den Inhalt aufdeckt", "template": "Vorlage", @@ -473,7 +473,7 @@ "lockDescription": "Sie sind dabei, die Sitzung privat zu machen. Nur die aktuellen Teilnehmer (unten aufgeführt) haben Zugang zu dieser Sitzung, sobald sie gesperrt sind.", "cancelButton": "Abbrechen", "sessionLockedTitle": "Diese Sitzung ist privat.", - "sessionLockedDescription": "Bitte den Moderator bitten, ihn zu entsperren, damit du beitreten kannst. Dann aktualisiere diese Seite.", + "sessionLockedDescription": "Bitte den Moderator ({{moderator}}, {{email}}) bitten, ihn zu entsperren, damit du beitreten kannst. Dann aktualisiere diese Seite.", "sessionNonProTitle": "Diese Sitzung ist nur für Pro-Benutzer zugänglich", "sessionNonProDescription": "Diese Sitzung verwendet Funktionen, die nur Pro-Nutzern zur Verfügung stehen. Bitte fragen Sie den Moderator oder den Abonnementhalter, Ihnen ein Pro-Konto zu erteilen.", "sessionIsPublic": "Diese Sitzung ist öffentlich und für jedermann zugänglich.", diff --git a/frontend/src/translations/locales/en-GB.json b/frontend/src/translations/locales/en-GB.json index fa556d92..e4571b96 100644 --- a/frontend/src/translations/locales/en-GB.json +++ b/frontend/src/translations/locales/en-GB.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "Allow the creation of groups to group posts together", "allowReordering": "Allow Re-ordering", "allowReorderingHelp": "Allow re-ordering posts by drag-and-drop", - "restrictTitleEditToOwner": "Restrict title editing to owner", - "restrictTitleEditToOwnerHelp": "Only the owner of a retrospective is able to change its title", - "restrictReorderingToOwner": "Restrict re-ordering to owner", - "restrictReorderingToOwnerHelp": "Only the owner of a retrospective is able to re-order posts", - "restrictGroupingToOwner": "Restrict grouping to owner", - "restrictGroupingToOwnerHelp": "Only the owner of a retrospective is able to create groups", + "restrictTitleEditToOwner": "Restrict title editing to moderator", + "restrictTitleEditToOwnerHelp": "Only the moderator of a retrospective is able to change its title", + "restrictReorderingToOwner": "Restrict re-ordering to the moderator", + "restrictReorderingToOwnerHelp": "Only the moderator of a retrospective is able to re-order posts", + "restrictGroupingToOwner": "Restrict grouping to the moderator", + "restrictGroupingToOwnerHelp": "Only the moderator of a retrospective is able to create groups", "blurCards": "Blur Cards", "blurCardsHelp": "Cards content is blurred until the moderator reveals the content", "template": "Template", @@ -467,7 +467,7 @@ "lockDescription": "You are about to make the session private. Only the current participants (listed below) will be allowed access to this session once locked.", "cancelButton": "Cancel", "sessionLockedTitle": "This session is private.", - "sessionLockedDescription": "Please ask its moderator to unlock it so you can join. Then, refresh this page.", + "sessionLockedDescription": "Please ask its moderator ({{moderator}}, {{email}}) to unlock it so you can join. Then, refresh this page.", "sessionNonProTitle": "This session is only accessible to Pro users", "sessionNonProDescription": "This session uses features only available to Pro users. Please ask the moderator or subscription holder to give you a Pro account.", "sessionIsPublic": "This session is public and accessible to anyone.", diff --git a/frontend/src/translations/locales/es-ES.json b/frontend/src/translations/locales/es-ES.json index db0be394..1f5531e9 100644 --- a/frontend/src/translations/locales/es-ES.json +++ b/frontend/src/translations/locales/es-ES.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "Permitir la creación de grupos agrupar mensajes juntos", "allowReordering": "Permitir reordenar", "allowReorderingHelp": "Permitir reordenar mensajes por arrastrar y soltar", - "restrictTitleEditToOwner": "Restringir la edición del título al propietario", - "restrictTitleEditToOwnerHelp": "Sólo el propietario de una retrospectiva puede cambiar su título", - "restrictReorderingToOwner": "Restringir reordenar al propietario", - "restrictReorderingToOwnerHelp": "Sólo el propietario de un retrospective puede reordenar los posts", - "restrictGroupingToOwner": "Restringir agrupación al propietario", - "restrictGroupingToOwnerHelp": "Sólo el dueño de un retrospective puede crear grupos", + "restrictTitleEditToOwner": "Restringir la edición del título al moderador", + "restrictTitleEditToOwnerHelp": "Sólo el moderador de una retrospectiva es capaz de cambiar su título", + "restrictReorderingToOwner": "Restringir reordenar al moderador", + "restrictReorderingToOwnerHelp": "Sólo el moderador de un retrospective es capaz de reordenar los posts", + "restrictGroupingToOwner": "Restringir agrupación al moderador", + "restrictGroupingToOwnerHelp": "Sólo el moderador de un retrospective es capaz de crear grupos", "blurCards": "Desenfocar tarjetas", "blurCardsHelp": "El contenido de las tarjetas está desenfocado hasta que el moderador revele el contenido", "template": "Plantilla", @@ -473,7 +473,7 @@ "lockDescription": "Está a punto de hacer la sesión privada. Sólo los participantes actuales (listados a continuación) tendrán acceso a esta sesión una vez bloqueado.", "cancelButton": "Cancelar", "sessionLockedTitle": "Esta sesión es privada.", - "sessionLockedDescription": "Pídele a su moderador que lo desbloquee para poder unirte. Luego, actualiza esta página.", + "sessionLockedDescription": "Pídele a su moderador ({{moderator}}, {{email}}) que lo desbloquee para poder unirte. Luego, actualiza esta página.", "sessionNonProTitle": "Esta sesión sólo es accesible para usuarios Pro", "sessionNonProDescription": "Esta sesión utiliza características sólo disponibles para usuarios Pro. Por favor, pide al moderador o al titular de la suscripción que te dé una cuenta Pro.", "sessionIsPublic": "Esta sesión es pública y accesible para cualquier persona.", diff --git a/frontend/src/translations/locales/fr-FR.json b/frontend/src/translations/locales/fr-FR.json index c7d5d50d..3e1c68b1 100644 --- a/frontend/src/translations/locales/fr-FR.json +++ b/frontend/src/translations/locales/fr-FR.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "Permettre aux utilisateurs de grouper les posts par groupes", "allowReordering": "Re-organiser", "allowReorderingHelp": "Permettre aux utilisateurs de réorganiser l'ordre des posts", - "restrictTitleEditToOwner": "Restreindre l'édition du titre à l'admin", - "restrictTitleEditToOwnerHelp": "Seul l'admin d'une rétrospective est en mesure de changer son titre", - "restrictReorderingToOwner": "Limiter la réorganisation (drag-and-drop) des posts à l'admin", - "restrictReorderingToOwnerHelp": "Seul l'admin d'une rétrospective est en mesure de réorganiser les posts", - "restrictGroupingToOwner": "Restreindre la création de groupes à l'admin", - "restrictGroupingToOwnerHelp": "Seul l'admin d'une rétrospective peut créer et réordonner des groupes", + "restrictTitleEditToOwner": "Restreindre l'édition du titre au modérateur", + "restrictTitleEditToOwnerHelp": "Seul le modérateur d'une rétrospective est en mesure de changer son titre", + "restrictReorderingToOwner": "Limiter la réorganisation (drag-and-drop) des posts au modérateur", + "restrictReorderingToOwnerHelp": "Seul le modérateur d'une rétrospective est en mesure de réorganiser les posts", + "restrictGroupingToOwner": "Limiter la réorganisation (drag-and-drop) des posts au modérateur", + "restrictGroupingToOwnerHelp": "Seul le modérateur d'une rétrospective peut créer et réordonner des groupes", "blurCards": "Flouter", "blurCardsHelp": "Les posts sont floutés, jusqu'à ce qu'un modérateur révèle les posts", "template": "Modèles", @@ -473,7 +473,7 @@ "lockDescription": "Vous êtes sur le point de privatiser la session. Seuls les utilisateurs ayant déjà accédé à cette session (dont la liste s'affiche ci-dessous) pourront accéder à cette session une fois verrouillée.", "cancelButton": "Annuler", "sessionLockedTitle": "Cette session est privée.", - "sessionLockedDescription": "Demandez à votre modérateur de la rendre publique pour que vous puissiez la rejoindre. Ensuite, rafraichissez la page.", + "sessionLockedDescription": "Demandez à votre modérateur ({{moderator}}, {{email}}) de la rendre publique pour que vous puissiez la rejoindre. Ensuite, rafraichissez la page.", "sessionNonProTitle": "Cette session n'est accessible qu'aux utilisateurs Pro", "sessionNonProDescription": "Cette session n'est ouverte qu'aux détenteurs d'un compte Retrospected Pro. Vous pouvez demander au modérateur ou au gérant de l'abonnement Pro de vous donner un accès.", "sessionIsPublic": "Cette session est publique et accessible à tout le monde.", diff --git a/frontend/src/translations/locales/hu-HU.json b/frontend/src/translations/locales/hu-HU.json index be5df967..3cc12506 100644 --- a/frontend/src/translations/locales/hu-HU.json +++ b/frontend/src/translations/locales/hu-HU.json @@ -473,7 +473,7 @@ "lockDescription": "A munkamenet priváttá tételére készül. Csak a jelenlegi résztvevők (az alábbiakban felsorolva) férhetnek hozzá ehhez a munkamenethez, miután lezárták.", "cancelButton": "Megszünteti", "sessionLockedTitle": "Ez a munkamenet privát.", - "sessionLockedDescription": "Kérd meg a moderátort, hogy oldja fel, hogy csatlakozhasson. Ezután frissítse ezt az oldalt.", + "sessionLockedDescription": "", "sessionNonProTitle": "Ez a munkamenet csak a Pro felhasználók számára érhető el", "sessionNonProDescription": "Ez a munkamenet csak a Pro felhasználók számára elérhető funkciókat használja. Kérje meg a moderátort vagy az előfizetés tulajdonosát, hogy adjon Pro-fiókot.", "sessionIsPublic": "Ez az ülés nyilvános és bárki számára elérhető.", diff --git a/frontend/src/translations/locales/it-IT.json b/frontend/src/translations/locales/it-IT.json index 72a8504d..1bac0bc3 100644 --- a/frontend/src/translations/locales/it-IT.json +++ b/frontend/src/translations/locales/it-IT.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "Permetti la creazione di gruppi per raggruppare post", "allowReordering": "Consenti il riordinamento", "allowReorderingHelp": "Permetti il riordinamento dei post con il trascinamento", - "restrictTitleEditToOwner": "Limita la modifica del titolo al proprietario", - "restrictTitleEditToOwnerHelp": "Solo il proprietario di una retrospettiva è in grado di cambiare il suo titolo", - "restrictReorderingToOwner": "Limita riordinamento al proprietario", - "restrictReorderingToOwnerHelp": "Solo il proprietario di una retrospettiva è in grado di riordinare i post", - "restrictGroupingToOwner": "Limita raggruppamento al proprietario", - "restrictGroupingToOwnerHelp": "Solo il proprietario di una retrospettiva è in grado di creare gruppi", + "restrictTitleEditToOwner": "Limita la modifica del titolo al moderatore", + "restrictTitleEditToOwnerHelp": "Solo il moderatore di una retrospettiva è in grado di cambiare il suo titolo", + "restrictReorderingToOwner": "Limita riordinamento al moderatore", + "restrictReorderingToOwnerHelp": "Solo il moderatore di una retrospettiva è in grado di riordinare i post", + "restrictGroupingToOwner": "Limita il raggruppamento al moderatore", + "restrictGroupingToOwnerHelp": "Solo il moderatore di una retrospettiva è in grado di creare gruppi", "blurCards": "Sfoca Carte", "blurCardsHelp": "Il contenuto delle carte è sfocato finché il moderatore non rivela il contenuto", "template": "Modello", @@ -473,7 +473,7 @@ "lockDescription": "Stai per rendere la sessione privata. Solo i partecipanti attuali (elencati di seguito) avranno accesso a questa sessione una volta bloccato.", "cancelButton": "Annulla", "sessionLockedTitle": "Questa sessione è privata.", - "sessionLockedDescription": "Chiedi al suo moderatore di sbloccarlo in modo che tu possa entrare. Quindi, aggiorna questa pagina.", + "sessionLockedDescription": "Per favore chiedi al suo moderatore ({{moderator}}, {{email}}) di sbloccarlo in modo che tu possa entrare. Quindi, aggiorna questa pagina.", "sessionNonProTitle": "Questa sessione è accessibile solo agli utenti Pro", "sessionNonProDescription": "Questa sessione utilizza funzionalità disponibili solo per gli utenti Pro. Si prega di chiedere al moderatore o titolare di abbonamento di fornire un account Pro.", "sessionIsPublic": "Questa sessione è pubblica e accessibile a chiunque.", diff --git a/frontend/src/translations/locales/ja-JP.json b/frontend/src/translations/locales/ja-JP.json index 35da1eaf..54e04392 100644 --- a/frontend/src/translations/locales/ja-JP.json +++ b/frontend/src/translations/locales/ja-JP.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "投稿をグループ化するグループの作成を許可する", "allowReordering": "並べ替えを許可", "allowReorderingHelp": "ドラッグ&ドロップで投稿の並べ替えを許可する", - "restrictTitleEditToOwner": "タイトル編集を所有者に制限", - "restrictTitleEditToOwnerHelp": "回顧展の所有者のみがタイトルを変更できます", - "restrictReorderingToOwner": "再順序を所有者に制限", - "restrictReorderingToOwnerHelp": "レトロスペクティブの所有者のみ投稿を再注文できます", - "restrictGroupingToOwner": "グループ化を所有者に制限", - "restrictGroupingToOwnerHelp": "レトロスペクティブの所有者のみがグループを作成できます", + "restrictTitleEditToOwner": "タイトル編集をモデレータに制限する", + "restrictTitleEditToOwnerHelp": "回顧展のモデレーターのみがタイトルを変更できます", + "restrictReorderingToOwner": "モデレータに再順序を制限する", + "restrictReorderingToOwnerHelp": "レトロスペクティブのモデレータのみ投稿を再注文できます", + "restrictGroupingToOwner": "モデレータにグループ化を制限する", + "restrictGroupingToOwnerHelp": "レトロスペクティブのモデレータのみがグループを作成できます", "blurCards": "ぼかしカード", "blurCardsHelp": "モデレーターがコンテンツを表示するまでカードの内容がぼかしています", "template": "テンプレート", @@ -473,7 +473,7 @@ "lockDescription": "セッションを非公開にしようとしています。ロックされると、現在の参加者(以下のリスト)だけがこのセッションへのアクセスを許可されます。", "cancelButton": "キャンセル", "sessionLockedTitle": "このセッションはプライベートです。", - "sessionLockedDescription": "参加できるようにモデレータにロックを解除するよう依頼してください。その後、このページを更新してください。", + "sessionLockedDescription": "モデレータ({{moderator}}, {{email}})にロックを解除するよう依頼してください。その後、このページを更新してください。", "sessionNonProTitle": "このセッションはProユーザーのみアクセス可能です", "sessionNonProDescription": "このセッションでは、Proユーザーのみが利用できる機能を使用します。Proアカウントを提供するには、モデレータまたはサブスクリプション所有者に問い合わせてください。", "sessionIsPublic": "このセッションは公開され、誰でもアクセスできます。", diff --git a/frontend/src/translations/locales/nl-NL.json b/frontend/src/translations/locales/nl-NL.json index d34a4df2..e23a1b17 100644 --- a/frontend/src/translations/locales/nl-NL.json +++ b/frontend/src/translations/locales/nl-NL.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "Aanmaken van groepen van retropunten toestaan.", "allowReordering": "Herordenen toestaan", "allowReorderingHelp": "Toestaan om retropunten mbv drag-en-drop te herordenen", - "restrictTitleEditToOwner": "Beperk titelbewerking tot eigenaar", - "restrictTitleEditToOwnerHelp": "Alleen de eigenaar van een retrospectief kan zijn titel wijzigen", - "restrictReorderingToOwner": "Beperk herschikken tot eigenaar", - "restrictReorderingToOwnerHelp": "Alleen de eigenaar van een retrospectief kan posts opnieuw bestellen", - "restrictGroupingToOwner": "Beperk groepering tot eigenaar", - "restrictGroupingToOwnerHelp": "Alleen de eigenaar van een retrospectief kan groepen maken", + "restrictTitleEditToOwner": "Titelbewerking beperken tot moderator", + "restrictTitleEditToOwnerHelp": "Alleen de moderator van een retrospectief kan zijn titel wijzigen", + "restrictReorderingToOwner": "Beperk herschikken tot moderator", + "restrictReorderingToOwnerHelp": "Alleen de moderator van een retrospectief kan posts opnieuw bestellen", + "restrictGroupingToOwner": "Beperk groeperen tot de moderator", + "restrictGroupingToOwnerHelp": "Alleen de moderator van een retrospectief kan groepen maken", "blurCards": "Vervaag Kaarten", "blurCardsHelp": "Inhoud van kaarten wordt vervaagd totdat de moderator de inhoud onthult", "template": "Sjabloon", @@ -473,7 +473,7 @@ "lockDescription": "U staat op het punt om de sessie privé te maken. Alleen de huidige deelnemers (hieronder vermeld) zullen toegang tot deze sessie krijgen zodra ze zijn vergrendeld.", "cancelButton": "annuleren", "sessionLockedTitle": "Deze sessie is privé.", - "sessionLockedDescription": "Vraag de moderator om hem te ontgrendelen zodat je kan inloggen. Vernieuw vervolgens deze pagina.", + "sessionLockedDescription": "", "sessionNonProTitle": "Deze sessie is alleen toegankelijk voor Pro-gebruikers", "sessionNonProDescription": "Deze sessie maakt gebruik van functies die alleen beschikbaar zijn voor Pro-gebruikers. Vraag de moderator of abonnementhouder om u een Pro-account te geven.", "sessionIsPublic": "Deze sessie is openbaar en voor iedereen toegankelijk.", diff --git a/frontend/src/translations/locales/pl-PL.json b/frontend/src/translations/locales/pl-PL.json index 044f41fe..f169a061 100644 --- a/frontend/src/translations/locales/pl-PL.json +++ b/frontend/src/translations/locales/pl-PL.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "Pozwól tworzyć grupy do grupowania postów", "allowReordering": "Zezwalaj na ponowne zamawianie", "allowReorderingHelp": "Zezwalaj na zmianę kolejności postów przez przeciąganie i upuszczanie", - "restrictTitleEditToOwner": "Ogranicz edycję tytułu do właściciela", - "restrictTitleEditToOwnerHelp": "Tylko właściciel retrospektywnie może zmienić swój tytuł", - "restrictReorderingToOwner": "Ogranicz kolejność do właściciela", - "restrictReorderingToOwnerHelp": "Tylko właściciel retrospektywnie może zmienić kolejność postów", - "restrictGroupingToOwner": "Ogranicz grupowanie do właściciela", - "restrictGroupingToOwnerHelp": "Tylko właściciel retrospektywnie jest w stanie tworzyć grupy", + "restrictTitleEditToOwner": "Ogranicz edycję tytułu do moderatora", + "restrictTitleEditToOwnerHelp": "Tylko moderator retrospektywnie może zmienić tytuł", + "restrictReorderingToOwner": "Ogranicz kolejność do moderatora", + "restrictReorderingToOwnerHelp": "Tylko moderator retrospektywnie może zmienić kolejność postów", + "restrictGroupingToOwner": "Ogranicz grupowanie do moderatora", + "restrictGroupingToOwnerHelp": "Tylko moderator retrospektywnie jest w stanie tworzyć grupy", "blurCards": "Rozmycie kart", "blurCardsHelp": "Zawartość kart jest rozmyta aż moderator ujawni zawartość", "template": "Szablon", @@ -473,7 +473,7 @@ "lockDescription": "Zamierzasz sprawić, by sesja była prywatna. Tylko obecni uczestnicy (wymienieni poniżej) będą mieli dostęp do tej sesji po zablokowaniu.", "cancelButton": "Anuluj", "sessionLockedTitle": "Ta sesja jest prywatna.", - "sessionLockedDescription": "Poproś swojego moderatora, aby odblokował go, abyś mógł dołączyć. Następnie odśwież tę stronę.", + "sessionLockedDescription": "Poproś swojego moderatora ({{moderator}}, {{email}}) o odblokowanie, abyś mógł dołączyć. Następnie odśwież stronę.", "sessionNonProTitle": "Ta sesja jest dostępna tylko dla użytkowników Pro", "sessionNonProDescription": "Ta sesja korzysta z funkcji dostępnych tylko dla użytkowników Pro. Poproś moderatora lub posiadacza subskrypcji, aby dał Ci konto Pro.", "sessionIsPublic": "Ta sesja jest publiczna i dostępna dla każdego.", diff --git a/frontend/src/translations/locales/pt-BR.json b/frontend/src/translations/locales/pt-BR.json index c0d61cb6..ae8e2a47 100644 --- a/frontend/src/translations/locales/pt-BR.json +++ b/frontend/src/translations/locales/pt-BR.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "Permitir a criação de grupos para agrupar postagens", "allowReordering": "Permitir reordenação", "allowReorderingHelp": "Permitir reordenação de postagens arrastando-se-e-soltar", - "restrictTitleEditToOwner": "Restringir edição do título ao proprietário", - "restrictTitleEditToOwnerHelp": "Somente o proprietário de um retrospectivo é capaz de alterar seu título", - "restrictReorderingToOwner": "Restringir reordenação ao proprietário", - "restrictReorderingToOwnerHelp": "Somente o proprietário de um retrospectivo é capaz de reordenar postagens", - "restrictGroupingToOwner": "Restringir agrupamento ao proprietário", - "restrictGroupingToOwnerHelp": "Somente o proprietário de um retrospectivo é capaz de criar grupos", + "restrictTitleEditToOwner": "Restringir edição do título ao moderador", + "restrictTitleEditToOwnerHelp": "Somente o moderador de um retrospectivo é capaz de alterar seu título", + "restrictReorderingToOwner": "Restringir a reordenação ao moderador", + "restrictReorderingToOwnerHelp": "Somente o moderador de retrospectivo é capaz de reordenar postagens", + "restrictGroupingToOwner": "Restringir agrupamento ao moderador", + "restrictGroupingToOwnerHelp": "Somente o moderador de um retrospectivo é capaz de criar grupos", "blurCards": "Cartões de Desfoque", "blurCardsHelp": "O conteúdo dos cartões fica desfocado até que o moderador revele o conteúdo", "template": "Modelo", @@ -473,7 +473,7 @@ "lockDescription": "Você está prestes a tornar a sessão privada. Apenas os participantes atuais (listados abaixo) terão acesso a esta sessão quando bloqueados.", "cancelButton": "cancelar", "sessionLockedTitle": "Esta sessão é privada.", - "sessionLockedDescription": "Por favor, peça ao seu moderador para desbloqueá-lo para que você possa entrar. Em seguida, atualize esta página.", + "sessionLockedDescription": "Por favor, peça ao seu moderador ({{moderator}}, {{email}}) para desbloqueá-lo para que você possa entrar. Em seguida, atualize esta página.", "sessionNonProTitle": "Esta sessão só é acessível a usuários Pro", "sessionNonProDescription": "Esta sessão usa recursos apenas disponíveis para usuários Pro. Peça ao moderador ou titular da assinatura para lhe dar uma conta Pro.", "sessionIsPublic": "Esta sessão é pública e acessível a qualquer um.", diff --git a/frontend/src/translations/locales/pt-PT.json b/frontend/src/translations/locales/pt-PT.json index 45707acf..133b8aca 100644 --- a/frontend/src/translations/locales/pt-PT.json +++ b/frontend/src/translations/locales/pt-PT.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "Permitir a criação de grupos para agrupar postagens", "allowReordering": "Permitir reordenação", "allowReorderingHelp": "Permitir reordenação de postagens arrastando-se-e-soltar", - "restrictTitleEditToOwner": "Restringir edição do título ao proprietário", - "restrictTitleEditToOwnerHelp": "Somente o proprietário de um retrospectivo é capaz de alterar seu título", - "restrictReorderingToOwner": "Restringir reordenação ao proprietário", - "restrictReorderingToOwnerHelp": "Somente o proprietário de um retrospectivo é capaz de reordenar postagens", - "restrictGroupingToOwner": "Restringir agrupamento ao proprietário", - "restrictGroupingToOwnerHelp": "Somente o proprietário de um retrospectivo é capaz de criar grupos", + "restrictTitleEditToOwner": "Restringir edição do título ao moderador", + "restrictTitleEditToOwnerHelp": "Somente o moderador de um retrospectivo é capaz de alterar seu título", + "restrictReorderingToOwner": "Restringir a reordenação ao moderador", + "restrictReorderingToOwnerHelp": "Somente o moderador de retrospectivo é capaz de reordenar postagens", + "restrictGroupingToOwner": "Restringir agrupamento ao moderador", + "restrictGroupingToOwnerHelp": "Somente o moderador de um retrospectivo é capaz de criar grupos", "blurCards": "Cartões de Desfoque", "blurCardsHelp": "O conteúdo dos cartões fica desfocado até que o moderador revele o conteúdo", "template": "Modelo", @@ -473,7 +473,7 @@ "lockDescription": "Você está prestes a tornar a sessão privada. Apenas os participantes atuais (listados abaixo) terão acesso a esta sessão quando bloqueados.", "cancelButton": "cancelar", "sessionLockedTitle": "Esta sessão é privada.", - "sessionLockedDescription": "Por favor, peça ao seu moderador para desbloqueá-lo para que você possa entrar. Em seguida, atualize esta página.", + "sessionLockedDescription": "Por favor, peça ao seu moderador ({{moderator}}, {{email}}) para desbloqueá-lo para que você possa entrar. Em seguida, atualize esta página.", "sessionNonProTitle": "Esta sessão só é acessível a usuários Pro", "sessionNonProDescription": "Esta sessão usa recursos apenas disponíveis para usuários Pro. Peça ao moderador ou titular da assinatura para lhe dar uma conta Pro.", "sessionIsPublic": "Esta sessão é pública e acessível a qualquer um.", diff --git a/frontend/src/translations/locales/uk-UA.json b/frontend/src/translations/locales/uk-UA.json index 72400c6d..6c8c8fc4 100644 --- a/frontend/src/translations/locales/uk-UA.json +++ b/frontend/src/translations/locales/uk-UA.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "Дозволити створення груп для групових повідомлень", "allowReordering": "Дозволити повторне замовлення", "allowReorderingHelp": "Дозволити перегрупування матеріалів перетягуванням", - "restrictTitleEditToOwner": "Обмежувати редагування заголовків власнику", - "restrictTitleEditToOwnerHelp": "Лише власник ретроспективу може змінити його назву", - "restrictReorderingToOwner": "Обмежити повторне замовлення власника", - "restrictReorderingToOwnerHelp": "Тільки власник ретроспективи може змінити порядок постів", - "restrictGroupingToOwner": "Обмежити групування власника", - "restrictGroupingToOwnerHelp": "Тільки власник ретроспективу здатний створювати групи", + "restrictTitleEditToOwner": "Обмежувати редагування заголовків модератором", + "restrictTitleEditToOwnerHelp": "Лише модератор ретроспективу може змінити його назву", + "restrictReorderingToOwner": "Обмежити перезамовлення модератором", + "restrictReorderingToOwnerHelp": "Тільки модератор ретроспективу здатен змінювати порядок записів", + "restrictGroupingToOwner": "Обмежити групування модератором", + "restrictGroupingToOwnerHelp": "Тільки модератор ретроспективу здатний створювати групи", "blurCards": "Розмиті картки", "blurCardsHelp": "Зміст карт буде розмитим, поки модератор не отримає вміст", "template": "Шаблон", @@ -473,7 +473,7 @@ "lockDescription": "Ви збираєтесь зробити сесію приватною. Тільки поточні учасники (перераховані нижче) матимуть доступ до цієї сесії один раз.", "cancelButton": "Скасувати", "sessionLockedTitle": "Ця сесія є приватною.", - "sessionLockedDescription": "Будь ласка, попросіть модератора розблокувати його, щоб ви могли приєднатися. Потім оновіть сторінку.", + "sessionLockedDescription": "Будь ласка, запитайте його модератора ({{moderator}}, {{email}}) про те, щоб розблокувати його, і ви зможете приєднатися. Перезавантажте цю сторінку.", "sessionNonProTitle": "Ця сесія доступна тільки користувачам Pro", "sessionNonProDescription": "Ця сесія використовує функції в доступності тільки для зареєстрованих користувачів. Будь ласка, попросіть модератора або власника підписки надати вам обліковий запис Pro.", "sessionIsPublic": "Ця сесія є публічною і доступною для будь-кого.", diff --git a/frontend/src/translations/locales/zh-CN.json b/frontend/src/translations/locales/zh-CN.json index 6000ee25..686939ba 100644 --- a/frontend/src/translations/locales/zh-CN.json +++ b/frontend/src/translations/locales/zh-CN.json @@ -110,12 +110,12 @@ "allowGroupingHelp": "允许创建群组将帖子一起分组", "allowReordering": "允许重新排序", "allowReorderingHelp": "允许通过拖放重新排序帖子", - "restrictTitleEditToOwner": "限制标题编辑到所有者", - "restrictTitleEditToOwnerHelp": "只有追溯性的所有者能够更改其标题", - "restrictReorderingToOwner": "限制重新排序到所有者", - "restrictReorderingToOwnerHelp": "只有追溯性的所有者可以重新排序帖子", - "restrictGroupingToOwner": "限制分组到所有者", - "restrictGroupingToOwnerHelp": "只有追溯性的所有者能够创建组", + "restrictTitleEditToOwner": "限制标题编辑到版主", + "restrictTitleEditToOwnerHelp": "只有追溯版的版主能够更改其标题", + "restrictReorderingToOwner": "限制重新排序到版主", + "restrictReorderingToOwnerHelp": "只有回溯版版主才能重新排序帖子", + "restrictGroupingToOwner": "限制分组到版主", + "restrictGroupingToOwnerHelp": "只有追溯版的版主能够创建组", "blurCards": "模糊卡", "blurCardsHelp": "在版主显示内容之前,卡片内容是模糊的", "template": "模板", @@ -473,7 +473,7 @@ "lockDescription": "您将要将会话变为隐私。只允许当前的参与者 (下面列出)在锁定后访问此会话。", "cancelButton": "取消", "sessionLockedTitle": "此会话是私密的。", - "sessionLockedDescription": "请让其版主解锁它,以便您可以加入,然后刷新此页面。", + "sessionLockedDescription": "", "sessionNonProTitle": "此会话仅供专业版用户访问", "sessionNonProDescription": "此会话只使用专业版用户可用的功能。请联系人或订阅者给您一个专业版账户。", "sessionIsPublic": "此会话是公开的,任何人都可以访问。", diff --git a/frontend/src/translations/locales/zh-TW.json b/frontend/src/translations/locales/zh-TW.json index 45267d54..381e85aa 100644 --- a/frontend/src/translations/locales/zh-TW.json +++ b/frontend/src/translations/locales/zh-TW.json @@ -473,7 +473,7 @@ "lockDescription": "您即將將會話設為私有。鎖定後,只有當前參與者(如下所列)才能訪問此會話。", "cancelButton": "取消", "sessionLockedTitle": "本次會議是私人的。", - "sessionLockedDescription": "請要求其版主解鎖,以便您加入。然後,刷新此頁面。", + "sessionLockedDescription": "", "sessionNonProTitle": "此會話僅供專業用戶訪問", "sessionNonProDescription": "此會話使用僅適用於 Pro 用戶的功能。請要求版主或訂閱持有人給您一個 Pro 帳戶。", "sessionIsPublic": "此會話是公開的,任何人都可以訪問。", diff --git a/frontend/src/views/Game.tsx b/frontend/src/views/Game.tsx index fb4132fa..7171486c 100644 --- a/frontend/src/views/Game.tsx +++ b/frontend/src/views/Game.tsx @@ -47,7 +47,7 @@ function GamePage() { const columns = useColumns(); const { decrypt } = useCrypto(); const [search, setSearch] = useState(''); - const { unauthorised, unauthorisedReason } = useUnauthorised(); + const { unauthorised } = useUnauthorised(); const rootUrl = `/game/${gameId}${hash}`; const summaryUrl = `/game/${gameId}/summary${hash}`; @@ -87,7 +87,24 @@ function GamePage() { } if (unauthorised) { - return ; + if (unauthorised.type === 'locked') { + return ( + + ); + } + return ; } if (!session) { diff --git a/frontend/src/views/game/state.ts b/frontend/src/views/game/state.ts index 52884d28..a4631b97 100644 --- a/frontend/src/views/game/state.ts +++ b/frontend/src/views/game/state.ts @@ -1,4 +1,4 @@ -import { AccessErrorType, Participant, Session } from 'common'; +import { Participant, Session, UnauthorizedAccessPayload } from 'common'; import { atom } from 'recoil'; export const ParticipantsState = atom({ @@ -6,14 +6,9 @@ export const ParticipantsState = atom({ default: [], }); -export const UnauthorisedState = atom({ +export const UnauthorisedState = atom({ key: 'UNAUTHORISED', - default: false, -}); - -export const UnauthorisedReasonState = atom({ - key: 'ACCESS_ERROR_TYPE', - default: undefined, + default: null, }); export const SessionState = atom({ diff --git a/frontend/src/views/game/useGame.ts b/frontend/src/views/game/useGame.ts index 689222e8..dbd7e497 100644 --- a/frontend/src/views/game/useGame.ts +++ b/frontend/src/views/game/useGame.ts @@ -380,7 +380,7 @@ function useGame(sessionId: string) { if (debug) { console.log('Receive unauthorized'); } - setUnauthorised(payload.type); + setUnauthorised(payload.type, payload.session); } ); diff --git a/frontend/src/views/game/useUnauthorised.ts b/frontend/src/views/game/useUnauthorised.ts index b57c6e88..b60c06fc 100644 --- a/frontend/src/views/game/useUnauthorised.ts +++ b/frontend/src/views/game/useUnauthorised.ts @@ -1,38 +1,31 @@ -import { AccessErrorType } from 'common'; +import { AccessErrorType, Session, UnauthorizedAccessPayload } from 'common'; import { useCallback } from 'react'; import { useRecoilState } from 'recoil'; -import { UnauthorisedReasonState, UnauthorisedState } from './state'; +import { UnauthorisedState } from './state'; interface UseUnauthorised { - unauthorised: boolean; - unauthorisedReason?: AccessErrorType; - setUnauthorised: (reason?: AccessErrorType) => void; + unauthorised: UnauthorizedAccessPayload | null; + setUnauthorised: (reason?: AccessErrorType, session?: Session) => void; resetUnauthorised: () => void; } export default function useUnauthorised(): UseUnauthorised { const [unauthorised, setUnauthorisedValue] = useRecoilState(UnauthorisedState); - const [unauthorisedReason, setReason] = useRecoilState( - UnauthorisedReasonState - ); const setUnauthorised = useCallback( - (reason?: AccessErrorType) => { - setUnauthorisedValue(true); - setReason(reason); + (reason?: AccessErrorType, session?: Session) => { + setUnauthorisedValue({ type: reason, session }); }, - [setUnauthorisedValue, setReason] + [setUnauthorisedValue] ); const resetUnauthorised = useCallback(() => { - setUnauthorisedValue(false); - setReason(undefined); - }, [setUnauthorisedValue, setReason]); + setUnauthorisedValue(null); + }, [setUnauthorisedValue]); return { unauthorised, - unauthorisedReason, setUnauthorised, resetUnauthorised, };