-
+
-
{{ report.reported.name }}
-
+
+ {{ report.reported.name }}
+
+
@{{ usernameWithDomain(report.reported) }}
+
{{ t("Unknown actor") }}
@@ -31,7 +37,7 @@
-
+
{{
t("Reported by someone on {domain}", {
domain: report.reporter.domain,
@@ -40,19 +46,22 @@
{{ t("Reported by someone anonymously") }}
-
+
{{
t("Reported by {reporter}", {
reporter: usernameWithDomain(report.reporter),
})
}}
+
+ {{ t("Reported by an unknown actor") }}
+
diff --git a/js/src/composition/apollo/report.ts b/js/src/composition/apollo/report.ts
index 37ecaece6..adfdf8a48 100644
--- a/js/src/composition/apollo/report.ts
+++ b/js/src/composition/apollo/report.ts
@@ -5,7 +5,7 @@ export function useCreateReport() {
return useMutation<
{ createReport: { id: string } },
{
- eventId?: string;
+ eventsIds?: string[];
reportedId: string;
content?: string;
commentsIds?: string[];
diff --git a/js/src/graphql/report.ts b/js/src/graphql/report.ts
index 0c4c0c3b6..9185c7f79 100644
--- a/js/src/graphql/report.ts
+++ b/js/src/graphql/report.ts
@@ -20,7 +20,7 @@ export const REPORTS = gql`
...ActorFragment
suspended
}
- event {
+ events {
id
uuid
title
@@ -42,11 +42,19 @@ const REPORT_FRAGMENT = gql`
id
reported {
...ActorFragment
+ suspended
+ ... on Person {
+ user {
+ id
+ disabled
+ }
+ }
}
reporter {
...ActorFragment
+ suspended
}
- event {
+ events {
id
uuid
title
@@ -69,6 +77,14 @@ const REPORT_FRAGMENT = gql`
actor {
...ActorFragment
}
+ updatedAt
+ deletedAt
+ uuid
+ event {
+ id
+ uuid
+ title
+ }
}
notes {
id
@@ -97,14 +113,14 @@ export const REPORT = gql`
export const CREATE_REPORT = gql`
mutation CreateReport(
- $eventId: ID
+ $eventsIds: [ID]
$reportedId: ID!
$content: String
$commentsIds: [ID]
$forward: Boolean
) {
createReport(
- eventId: $eventId
+ eventsIds: $eventsIds
reportedId: $reportedId
content: $content
commentsIds: $commentsIds
diff --git a/js/src/i18n/ar.json b/js/src/i18n/ar.json
index 68a17f96f..9ec4a3eb7 100644
--- a/js/src/i18n/ar.json
+++ b/js/src/i18n/ar.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "",
"Delete": "حذف",
- "Delete Comment": "احذف التعليق",
- "Delete Event": "حذف الفعالية",
"Delete account": "حذف الحساب",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/i18n/be.json b/js/src/i18n/be.json
index b8529a96d..3390a620f 100644
--- a/js/src/i18n/be.json
+++ b/js/src/i18n/be.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "",
"Delete": "Выдаліць",
- "Delete Comment": "Выдаліць каментарый",
- "Delete Event": "Выдаліць падзею",
"Delete account": "Выдаліць рахунак",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/i18n/bn.json b/js/src/i18n/bn.json
index f95f469b8..c6e1faee7 100644
--- a/js/src/i18n/bn.json
+++ b/js/src/i18n/bn.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "",
"Delete": "মুছো",
- "Delete Comment": "",
- "Delete Event": "",
"Delete account": "",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/i18n/ca.json b/js/src/i18n/ca.json
index 6cc1056f4..225f56f7e 100644
--- a/js/src/i18n/ca.json
+++ b/js/src/i18n/ca.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "Política de privacitat per defecte de Mobilizon",
"Default Mobilizon terms": "Condicions per defecte de Mobilizon",
"Delete": "Esborra-ho",
- "Delete Comment": "Esborra el comentari",
- "Delete Event": "Esborra l'activitat",
"Delete account": "Eliminar el compte",
"Delete conversation": "Esborra la conversa",
"Delete discussion": "ESborra la discussió",
diff --git a/js/src/i18n/cs.json b/js/src/i18n/cs.json
index 6c2f6424e..7d66b46e0 100644
--- a/js/src/i18n/cs.json
+++ b/js/src/i18n/cs.json
@@ -291,8 +291,6 @@
"Default Mobilizon privacy policy": "Výchozí zásady ochrany osobních údajů Mobilizon",
"Default Mobilizon terms": "Výchozí podmínky Mobilizon",
"Delete": "Smazat",
- "Delete Comment": "Smazat komentář",
- "Delete Event": "Smazat událost",
"Delete account": "Smazat účet",
"Delete comments": "Mazání komentářů",
"Delete conversation": "Smazat konverzaci",
diff --git a/js/src/i18n/cy.json b/js/src/i18n/cy.json
index bfbb507e4..39ee466d7 100644
--- a/js/src/i18n/cy.json
+++ b/js/src/i18n/cy.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "",
"Delete": "Dileu",
- "Delete Comment": "Dileu Sylw",
- "Delete Event": "Dileu Digwyddiad",
"Delete account": "Dileu cyfrif",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/i18n/da.json b/js/src/i18n/da.json
index 83479d74c..da260d864 100644
--- a/js/src/i18n/da.json
+++ b/js/src/i18n/da.json
@@ -76,8 +76,6 @@
"Date parameters": "Datoparametre",
"Default": "Standard",
"Delete": "Slet",
- "Delete Comment": "Slet kommentar",
- "Delete Event": "Slet begivenhed",
"Delete account": "Slet konto",
"Delete event": "Slet begivenhed",
"Delete everything": "Slet alt",
diff --git a/js/src/i18n/de.json b/js/src/i18n/de.json
index 5819c280d..7830ed16d 100644
--- a/js/src/i18n/de.json
+++ b/js/src/i18n/de.json
@@ -280,8 +280,6 @@
"Default Mobilizon privacy policy": "Standard-Datenschutzerklärung von Mobilizon",
"Default Mobilizon terms": "Standardbedingungen von Mobilizon",
"Delete": "Löschen",
- "Delete Comment": "Kommentar löschen",
- "Delete Event": "Veranstaltung löschen",
"Delete account": "Konto löschen",
"Delete comments": "Kommentare löschen",
"Delete conversation": "Lösche Konversation",
diff --git a/js/src/i18n/en_US.json b/js/src/i18n/en_US.json
index 58d487f1f..fa50e35d2 100644
--- a/js/src/i18n/en_US.json
+++ b/js/src/i18n/en_US.json
@@ -78,8 +78,6 @@
"Date parameters": "Date parameters",
"Date": "Date",
"Default": "Default",
- "Delete Comment": "Delete Comment",
- "Delete Event": "Delete Event",
"Delete account": "Delete account",
"Delete event": "Delete event",
"Delete everything": "Delete everything",
@@ -1582,5 +1580,30 @@
"This application will be allowed to list your suggested group events": "This application will be allowed to list your suggested group events",
"{profile} joined the the event {event}.": "{profile} joined the the event {event}.",
"You joined the event {event}.": "You joined the event {event}.",
- "An anonymous profile joined the event {event}.": "An anonymous profile joined the event {event}."
+ "An anonymous profile joined the event {event}.": "An anonymous profile joined the event {event}.",
+ "Delete event and resolve report": "Delete event and resolve report",
+ "No content found": "No content found",
+ "Maybe the content was removed by the author or a moderator": "Maybe the content was removed by the author or a moderator",
+ "This will also resolve the report.": "This will also resolve the report.",
+ "Are you sure you want to
delete this event?
This action cannot be undone . You may want to engage the discussion with the event creator and ask them to edit their event instead.": "Are you sure you want to
delete this event?
This action cannot be undone . You may want to engage the discussion with the event creator and ask them to edit their event instead.",
+ "Are you sure you want to
delete this comment?
This action cannot be undone .": "Are you sure you want to
delete this comment?
This action cannot be undone .",
+ "Delete comment and resolve report": "Delete comment and resolve report",
+ "Delete comment": "Delete comment",
+ "Event deleted and report resolved": "Event deleted and report resolved",
+ "Event deleted": "Event deleted",
+ "Comment deleted and report resolved": "Comment deleted and report resolved",
+ "Comment under event {eventTitle}": "Comment under event {eventTitle}",
+ "Do you really want to suspend this profile? All of the profiles content will be deleted.": "Do you really want to suspend this profile? All of the profiles content will be deleted.",
+ "There will be no way to restore the profile's data!": "There will be no way to restore the profile's data!",
+ "Suspend the profile": "Suspend the profile",
+ "The following user's profiles will be deleted, with all their data:": "The following user's profiles will be deleted, with all their data:",
+ "Do you really want to suspend the account « {emailAccount} » ?": "Do you really want to suspend the account « {emailAccount} » ?",
+ "There will be no way to restore the user's data!": "There will be no way to restore the user's data!",
+ "User suspended and report resolved": "User suspended and report resolved",
+ "Profile suspended and report resolved": "Profile suspended and report resolved",
+ "{profileName} (suspended)": "{profileName} (suspended)",
+ "Reported by an unknown actor": "Reported by an unknown actor",
+ "Reported at": "Reported at",
+ "Updated at": "Updated at",
+ "Suspend the profile?": "Suspend the profile?"
}
\ No newline at end of file
diff --git a/js/src/i18n/eo.json b/js/src/i18n/eo.json
index c2201c56c..b9e7d71c6 100644
--- a/js/src/i18n/eo.json
+++ b/js/src/i18n/eo.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "",
"Delete": "",
- "Delete Comment": "",
- "Delete Event": "",
"Delete account": "",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/i18n/es.json b/js/src/i18n/es.json
index 338fb1534..5410f0176 100644
--- a/js/src/i18n/es.json
+++ b/js/src/i18n/es.json
@@ -260,8 +260,6 @@
"Default Mobilizon privacy policy": "Política de privacidad predeterminada de Mobilizon",
"Default Mobilizon terms": "Términos predeterminados de Mobilizon",
"Delete": "Eliminar",
- "Delete Comment": "Eliminar comentario",
- "Delete Event": "Eliminar evento",
"Delete account": "Eliminar cuenta",
"Delete conversation": "Borrar la conversación",
"Delete discussion": "Eliminar discusión",
diff --git a/js/src/i18n/eu.json b/js/src/i18n/eu.json
index 8617e54cd..5f521c9a1 100644
--- a/js/src/i18n/eu.json
+++ b/js/src/i18n/eu.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "",
"Delete": "",
- "Delete Comment": "",
- "Delete Event": "",
"Delete account": "",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/i18n/fa.json b/js/src/i18n/fa.json
index a289cfbfa..c1ce514a8 100644
--- a/js/src/i18n/fa.json
+++ b/js/src/i18n/fa.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "",
"Delete": "حذف",
- "Delete Comment": "حذف نظر",
- "Delete Event": "حذف رویداد",
"Delete account": "حذف حساب",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/i18n/fi.json b/js/src/i18n/fi.json
index d82334332..923fd0dac 100644
--- a/js/src/i18n/fi.json
+++ b/js/src/i18n/fi.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "Mobilizonin oletustietosuojakäytäntö",
"Default Mobilizon terms": "Mobilizonin oletusehdot",
"Delete": "Poista",
- "Delete Comment": "Poista kommentti",
- "Delete Event": "Poista tapahtuma",
"Delete account": "Poista tili",
"Delete conversation": "Poista keskustelu",
"Delete discussion": "Poista keskustelu",
diff --git a/js/src/i18n/fr_FR.json b/js/src/i18n/fr_FR.json
index 32fee266e..bb7233e0d 100644
--- a/js/src/i18n/fr_FR.json
+++ b/js/src/i18n/fr_FR.json
@@ -47,6 +47,7 @@
"Accept": "Accepter",
"Accept follow": "Accepter le suivi",
"Accepted": "Accepté",
+ "Access drafts events": "Accéder aux événements brouillons",
"Access followed groups": "Accéder à la liste des groupes suivis",
"Access group activities": "Accéder aux activités des groupes",
"Access group discussions": "Accéder aux discussions des groupes",
@@ -54,6 +55,7 @@
"Access group followers": "Accéder à la liste des abonnés des groupes",
"Access group members": "Accéder à la liste des membres des groupes",
"Access group memberships": "Accéder à la liste de vos adhésions à des groupes",
+ "Access group suggested events": "Accéder aux événements des groupes suggérés",
"Access group todo-lists": "Accéder aux listes de tâches des groupes",
"Access organized events": "Accéder à la liste de vos événements organisés",
"Access participations": "Accéder à la liste de vos participations",
@@ -99,6 +101,7 @@
"Allow all comments from users with accounts": "Autoriser tous les commentaires d'utilisateur·rice·s avec des comptes",
"Allow registrations": "Autoriser les inscriptions",
"An URL to an external ticketing platform": "Une URL vers une plateforme de billetterie externe",
+ "An anonymous profile joined the event {event}.": "Un profil anonyme a rejoint l'événement {event}.",
"An error has occured while refreshing the page.": "Une erreur est survenue lors du rafraîchissement de la page.",
"An error has occured. Sorry about that. You may try to reload the page.": "Une erreur est survenue. Nous en sommes désolé⋅es. Vous pouvez essayer de rafraîchir la page.",
"An ethical alternative": "Une alternative éthique",
@@ -126,6 +129,7 @@
"Anyone can request being a member, but an administrator needs to approve the membership.": "N'importe qui peut demander à être membre, mais un⋅e administrateur⋅ice devra approuver leur adhésion.",
"Anyone wanting to be a member from your group will be able to from your group page.": "N'importe qui voulant devenir membre pourra le faire depuis votre page de groupe.",
"Application": "Application",
+ "Application authorized": "Application autorisée",
"Application not found": "Application non trouvée",
"Application was revoked": "L'application a été révoquée",
"Apply filters": "Appliquer les filtres",
@@ -133,7 +137,9 @@
"Apps": "Applications",
"Are you really sure you want to delete your whole account? You'll lose everything. Identities, settings, events created, messages and participations will be gone forever.": "Êtes-vous vraiment certain⋅e de vouloir supprimer votre compte ? Vous allez tout perdre. Identités, paramètres, événements créés, messages et participations disparaîtront pour toujours.",
"Are you sure you want to
completely delete this group? All members - including remote ones - will be notified and removed from the group, and
all of the group data (events, posts, discussions, todos…) will be irretrievably destroyed .": "Êtes-vous certain·e de vouloir
complètement supprimer ce groupe ? Tous les membres - y compris ceux·elles sur d'autres instances - seront notifié·e·s et supprimé·e·s du groupe, et
toutes les données associées au groupe (événements, billets, discussions, todos…) seront irrémédiablement détruites .",
+ "Are you sure you want to
delete this comment?
This action cannot be undone .": "Êtes-vous certain⋅e de vouloir
supprimer ce commentaire ?
Cette action ne peut pas être annulée. ",
"Are you sure you want to
delete this comment? This action cannot be undone.": "Êtes-vous certain⋅e de vouloir
supprimer ce commentaire ? Cette action ne peut pas être annulée.",
+ "Are you sure you want to
delete this event?
This action cannot be undone . You may want to engage the discussion with the event creator and ask them to edit their event instead.": "Êtes-vous certain⋅e de vouloir
supprimer cet événement ? Cette action n'est pas réversible. Vous voulez peut-être engager la discussion avec le créateur de l'événement et lui demander de modifier son événement à la place.",
"Are you sure you want to
delete this event? This action cannot be undone. You may want to engage the discussion with the event creator or edit its event instead.": "Êtes-vous certain⋅e de vouloir
supprimer cet événement ? Cette action n'est pas réversible. Vous voulez peut-être engager la discussion avec le créateur de l'événement ou bien modifier son événement à la place.",
"Are you sure you want to
suspend this group? All members - including remote ones - will be notified and removed from the group, and
all of the group data (events, posts, discussions, todos…) will be irretrievably destroyed .": "Êtes-vous certain·e de vouloir
suspendre ce groupe ? Tous les membres - y compris ceux·elles sur d'autres instances - seront notifié·e·s et supprimé·e·s du groupe, et
toutes les données associées au groupe (événements, billets, discussions, todos…) seront irrémédiablement détruites .",
"Are you sure you want to
suspend this group? As this group originates from instance {instance}, this will only remove local members and delete the local data, as well as rejecting all the future data.": "Êtes-vous certain·e de vouloir
suspendre ce groupe ? Comme ce groupe provient de l'instance {instance}, cela supprimera seulement les membres locaux et supprimera les données locales, et rejettera également toutes les données futures.",
@@ -203,6 +209,7 @@
"Change timezone": "Changer de fuseau horaire",
"Change user email": "Modifier l'email de l'utilisateur⋅ice",
"Change user role": "Changer le role de l'utilisateur",
+ "Check your device to continue. You may now close this window.": "Vérifiez votre appareil pour continuer. Vous pouvez maintenant fermer cette fenêtre.",
"Check your inbox (and your junk mail folder).": "Vérifiez votre boîte de réception (et votre dossier des indésirables).",
"Choose the source of the instance's Privacy Policy": "Choisissez la source de la politique de confidentialité de l'instance",
"Choose the source of the instance's Terms": "Choisissez la source des conditions d'utilisation de l'instance",
@@ -221,8 +228,10 @@
"Closed": "Fermé",
"Comment body": "Corps du commentaire",
"Comment deleted": "Commentaire supprimé",
+ "Comment deleted and report resolved": "Commentaire supprimé et signalement résolu",
"Comment from {'@'}{username} reported": "Commentaire de {'@'}{username} signalé",
"Comment text can't be empty": "Le texte du commentaire ne peut être vide",
+ "Comment under event {eventTitle}": "Commentaire sous l'événement {eventTitle}",
"Comments": "Commentaires",
"Comments are closed for everybody else.": "Les commentaires sont fermés pour tou·te·s les autres.",
"Confirm": "Confirmer",
@@ -291,13 +300,14 @@
"Default Mobilizon privacy policy": "Politique de confidentialité par défaut de Mobilizon",
"Default Mobilizon terms": "Conditions d'utilisation par défaut de Mobilizon",
"Delete": "Supprimer",
- "Delete Comment": "Supprimer le commentaire",
- "Delete Event": "Supprimer l'événement",
"Delete account": "Suppression du compte",
+ "Delete comment": "Supprimer le commentaire",
+ "Delete comment and resolve report": "Supprimer le commentaire et résoudre le signalement",
"Delete comments": "Supprimer des commentaires",
"Delete conversation": "Supprimer la conversation",
"Delete discussion": "Supprimer la discussion",
"Delete event": "Supprimer un événement",
+ "Delete event and resolve report": "Supprimer l'événement et résoudre le signalement",
"Delete events": "Supprimer des événements",
"Delete everything": "Tout supprimer",
"Delete feed tokens": "Supprimer les jetons de flux",
@@ -332,7 +342,9 @@
"Displayed on homepage and meta tags. Describe what Mobilizon is and what makes this instance special in a single paragraph.": "Affichée sur la page d'accueil et dans les balises meta. Décrivez ce qu'est Mobilizon et ce qui rend spécifique cette instance en un seul paragraphe.",
"Distance": "Distance",
"Do not receive any mail": "Ne pas recevoir d'e-mail",
+ "Do you really want to suspend the account « {emailAccount} » ?": "Voulez-vous vraiment suspendre le compte « {emailAccount} » ?",
"Do you really want to suspend this account? All of the user's profiles will be deleted.": "Voulez-vous vraiment suspendre ce compte ? Tous les profils de cet⋅te utilisateur⋅ice seront supprimés.",
+ "Do you really want to suspend this profile? All of the profiles content will be deleted.": "Voulez-vous vraiment suspendre ce profil ? Tout le contenu du profil sera supprimé.",
"Do you wish to {create_event} or {explore_events}?": "Voulez-vous {create_event} ou {explore_events} ?",
"Do you wish to {create_group} or {explore_groups}?": "Voulez-vous {create_group} ou {explore_groups} ?",
"Does the event needs to be confirmed later or is it cancelled?": "Est-ce que l'événement doit être confirmé plus tard ou bien est-il annulé ?",
@@ -388,6 +400,8 @@
"Event cancelled": "Événement annulé",
"Event creation": "Création d'événement",
"Event date": "Date de l'événement",
+ "Event deleted": "Événement supprimé",
+ "Event deleted and report resolved": "Événement supprimé et signalement résolu",
"Event description body": "Corps de la description de l'événement",
"Event edition": "Modification d'événement",
"Event list": "Liste d'événements",
@@ -622,6 +636,7 @@
"Manually invite new members": "Inviter des nouveaux·elles membres manuellement",
"Map": "Carte",
"Mark as resolved": "Marquer comme résolu",
+ "Maybe the content was removed by the author or a moderator": "Peut-être que le contenu a été supprimé par l'auteur·ice ou un·e modérateur·ice",
"Member": "Membre",
"Members": "Membres",
"Members-only post": "Billet reservé aux membres",
@@ -683,6 +698,7 @@
"No closed reports yet": "Aucun signalement fermé pour le moment",
"No comment": "Pas de commentaire",
"No comments yet": "Pas encore de commentaires",
+ "No content found": "Aucun contenu trouvé",
"No discussions yet": "Pas encore de discussions",
"No end date": "Pas de date de fin",
"No event found at this address": "Aucun événement trouvé à cette addresse",
@@ -798,6 +814,7 @@
"Partially accessible with a wheelchair": "Partiellement accessible avec un fauteuil roulant",
"Participant": "Participant⋅e",
"Participants": "Participant⋅e⋅s",
+ "Participants to {eventTitle}": "Participant·es à {eventTitle}",
"Participate": "Participer",
"Participate using your email address": "Participer en utilisant votre adresse email",
"Participation approval": "Validation des participations",
@@ -853,6 +870,7 @@
"Private feeds": "Flux privés",
"Profile": "Profil",
"Profile feeds": "Flux du profil",
+ "Profile suspended and report resolved": "Profil suspendu et signalement résolu",
"Profiles": "Profils",
"Profiles and federation": "Profils et fédération",
"Promote": "Promouvoir",
@@ -875,6 +893,11 @@
"RSS/Atom Feed": "Flux RSS/Atom",
"Radius": "Rayon",
"Read all of your account's data": "Lire toutes les données de votre compte",
+ "Read user activity settings": "Lire les paramètres d'activité utilisateur·ice",
+ "Read user media": "Lire les médias utilisateur·ice",
+ "Read user memberships": "Accéder aux adhésions de l'utilisateur·ice",
+ "Read user participations": "Accéder aux participations de l'utilisateur·ice",
+ "Read user settings": "Lire les paramètres utilisateur·ice",
"Recap every week": "Récapitulatif hebdomadaire",
"Receive one email for each activity": "Recevoir un e-mail à chaque activité",
"Receive one email per request": "Recevoir un e-mail par demande",
@@ -918,7 +941,9 @@
"Report this group": "Signaler ce groupe",
"Report this post": "Signaler ce billet",
"Reported": "Signalée",
+ "Reported at": "Signalé à",
"Reported by": "Signalée par",
+ "Reported by an unknown actor": "Signalé par un·e acteur·ice inconnu·e",
"Reported by someone anonymously": "Signalé par quelqu'un anonymement",
"Reported by someone on {domain}": "Signalé par quelqu'un depuis {domain}",
"Reported by {reporter}": "Signalé par {reporter}",
@@ -1007,6 +1032,8 @@
"Suspend group": "Suspendre le groupe",
"Suspend the account": "Suspendre le compte",
"Suspend the account?": "Suspendre le compte ?",
+ "Suspend the profile": "Suspendre le profil",
+ "Suspend the profile?": "Suspendre le profil ?",
"Suspended": "Suspendu·e",
"Tag search": "Recherche par tag",
"Task lists": "Listes de tâches",
@@ -1053,6 +1080,7 @@
"The event {event} was deleted by {profile}.": "L'événement {event} a été supprimé par {profile}.",
"The event {event} was updated by {profile}.": "L'événement {event} à été mis à jour par {profile}.",
"The events you created are not shown here.": "Les événements que vous avez créé ne s'affichent pas ici.",
+ "The following user's profiles will be deleted, with all their data:": "Les profils suivants de l'utilisateur·ice seront supprimés, avec toutes leurs données :",
"The geolocation prompt was denied.": "La demande de localisation a été refusée.",
"The group can now be joined by anyone, but new members need to be approved by an administrator.": "Le groupe peut maintenant être rejoint par n'importe qui, mais les nouvelles et nouveaux membres doivent être approuvées par un⋅e modérateur⋅ice.",
"The group can now be joined by anyone.": "Le groupe peut maintenant être rejoint par n'importe qui.",
@@ -1087,6 +1115,8 @@
"There are {participants} participants.": "Il n'y a qu'un⋅e participant⋅e. | Il y a {participants} participant⋅es.",
"There is no activity yet. Start doing some things to see activity appear here.": "Il n'y a pas encore d'activité. Commencez par effectuer des actions pour voir des éléments s'afficher ici.",
"There will be no way to recover your data.": "Il n'y aura aucun moyen de récupérer vos données.",
+ "There will be no way to restore the profile's data!": "Il n'y aura aucun moyen de restorer les données du profil !",
+ "There will be no way to restore the user's data!": "Il n'y aura aucun moyen de restorer les données de l'utilisateur·ice !",
"There's no discussions yet": "Il n'y a pas encore de discussions",
"These apps can access your account through the API. If you see here apps that you don't recognize, that don't work as expected or that you don't use anymore, you can revoke their access.": "Ces applications peuvent accéder à votre compte via l'API. Si vous voyez ici des applications que vous ne reconnaissez pas, qui ne fonctionnent pas comme prévu ou que vous n'utilisez plus, vous pouvez révoquer leur accès.",
"These events may interest you": "Ces événements peuvent vous intéresser",
@@ -1100,6 +1130,8 @@
"This application will be able to access all of your informations and post content. Make sure you only approve applications you trust.": "Cette application sera capable d'accéder à toutes vos informations et poster du contenu. Assurez-vous d'approuver uniquement des applications en lesquelles vous avez confiance.",
"This application will be allowed to access all of the groups you're a member of": "Cette application pourra accéder à tous les groupes dont vous êtes membres",
"This application will be allowed to access group activities in all of the groups you're a member of": "This application will be allowed to access group activities in all of the groups you're a member of",
+ "This application will be allowed to access your user activity settings": "Cette application sera autorisée a accéder à vos paramètres utilisateur·ice d'activité",
+ "This application will be allowed to access your user settings": "Cette application sera autorisée a accéder à vos paramètres utilisateur·ice",
"This application will be allowed to create feed tokens": "This application will be allowed to create feed tokens",
"This application will be allowed to create group discussions": "This application will be allowed to create group discussions",
"This application will be allowed to create new profiles for your account": "This application will be allowed to create new profiles for your account",
@@ -1118,9 +1150,12 @@
"This application will be allowed to list and view the events you're participating to": "This application will be allowed to list and view the events you're participating to",
"This application will be allowed to list and view the groups you're a member of": "This application will be allowed to list and view the groups you're a member of",
"This application will be allowed to list and view the groups you're following": "This application will be allowed to list and view the groups you're following",
+ "This application will be allowed to list and view your draft events": "Cetta application sera autorisée à lister et accéder à vos événements brouillons",
"This application will be allowed to list and view your organized events": "This application will be allowed to list and view your organized events",
"This application will be allowed to list group followers in all of the groups you're a member of": "This application will be allowed to list group followers in all of the groups you're a member of",
"This application will be allowed to list group members in all of the groups you're a member of": "This application will be allowed to list group members in all of the groups you're a member of",
+ "This application will be allowed to list the media you've uploaded": "Cette application sera autorisée a lister les médias que vous avez téléversé",
+ "This application will be allowed to list your suggested group events": "Cetta application sera autorisée à lister les événements de vos groupes qui vous sont suggérés",
"This application will be allowed to manage events participations": "Cette application sera autorisée à gérer vos participations à des événements",
"This application will be allowed to manage group members in all of the groups you're a member of": "This application will be allowed to manage group members in all of the groups you're a member of",
"This application will be allowed to manage your account activity settings": "Cette application sera autorisée à gérer vos paramètres d'activité",
@@ -1167,6 +1202,7 @@
"This website isn't moderated and the data that you enter will be automatically destroyed every day at 00:01 (Paris timezone).": "Ce site n’est pas modéré et les données que vous y rentrerez seront automatiquement détruites tous les jours à 00:01 (heure de Paris).",
"This week": "Cette semaine",
"This weekend": "Ce week-end",
+ "This will also resolve the report.": "Cela résoudra également le signalement.",
"This will delete / anonymize all content (events, comments, messages, participations…) created from this identity.": "Cela supprimera / anonymisera tout le contenu (événements, commentaires, messages, participations…) créés avec cette identité.",
"Time in your timezone ({timezone})": "Heure dans votre fuseau horaire ({timezone})",
"Times in your timezone ({timezone})": "Heures dans votre fuseau horaire ({timezone})",
@@ -1233,12 +1269,14 @@
"Update post": "Mettre à jour le billet",
"Update profiles": "Mettre à jour des profils",
"Updated": "Mis à jour",
+ "Updated at": "Mis à jour à",
"Upload media": "Téléverser des médias",
"Uploaded media size": "Taille des médias téléversés",
"Uploaded media total size": "Taille totale des médias téléversés",
"Use my location": "Utiliser ma position",
"User": "Utilisateur·rice",
"User settings": "Paramètres utilisateur⋅ices",
+ "User suspended and report resolved": "Utilisateur suspendu et signalement résolu",
"Username": "Identifiant",
"Users": "Utilisateur⋅rice⋅s",
"Validating account": "Validation du compte",
@@ -1355,6 +1393,7 @@
"You have one event tomorrow.": "Vous n'avez pas d'événement demain | Vous avez un événement demain. | Vous avez {count} événements demain",
"You haven't interacted with other instances yet.": "Vous n'avez interagi avec encore aucune autre instance.",
"You invited {member}.": "Vous avez invité {member}.",
+ "You joined the event {event}.": "Vous avez rejoint l'événement {event}.",
"You may also:": "Vous pouvez aussi :",
"You may clear all participation information for this device with the buttons below.": "Vous pouvez effacer toutes les informations de participation pour cet appareil avec les boutons ci-dessous.",
"You may now close this page or {return_to_the_homepage}.": "Vous pouvez maintenant fermer cette page ou {return_to_the_homepage}.",
@@ -1522,6 +1561,7 @@
"{number} posts": "Aucun billet|Un billet|{number} billets",
"{number} seats left": "{number} places restantes",
"{old_group_name} was renamed to {group}.": "{old_group_name} a été renommé en {group}.",
+ "{profileName} (suspended)": "{profileName} (suspendu·e)",
"{profile} (by default)": "{profile} (par défault)",
"{profile} added the member {member}.": "{profile} a ajouté le ou la membre {member}.",
"{profile} approved {member}'s membership.": "{profile} a approuvé la demande d'adhésion de {member}.",
@@ -1537,6 +1577,7 @@
"{profile} demoted {member} to moderator.": "{profile} a rétrogradé {member} en tant que modérateur⋅ice.",
"{profile} demoted {member} to simple member.": "{profile} a rétrogradé {member} en tant que simple membre.",
"{profile} excluded member {member}.": "{profile} a exclu le ou la membre {member}.",
+ "{profile} joined the the event {event}.": "{profile} a rejoint l'événement {event}.",
"{profile} moved the folder {resource} into {new_path}.": "{profile} a déplacé le dossier {resource} dans {new_path}.",
"{profile} moved the folder {resource} to the root folder.": "{profile} a déplacé le dossier {resource} dans le dossier racine.",
"{profile} moved the resource {resource} into {new_path}.": "{profile} a déplacé la ressource {resource} dans {new_path}.",
@@ -1560,23 +1601,5 @@
"{username} was invited to {group}": "{username} a été invité à {group}",
"{user}'s follow request was accepted": "La demande de suivi de {user} a été acceptée",
"{user}'s follow request was rejected": "La demande de suivi de {user} a été rejetée",
- "© The OpenStreetMap Contributors": "© Les Contributeur⋅ices OpenStreetMap",
- "Application authorized": "Application autorisée",
- "Check your device to continue. You may now close this window.": "Vérifiez votre appareil pour continuer. Vous pouvez maintenant fermer cette fenêtre.",
- "Participants to {eventTitle}": "Participant·es à {eventTitle}",
- "Read user media": "Lire les médias utilisateur·ice",
- "This application will be allowed to list the media you've uploaded": "Cette application sera autorisée a lister les médias que vous avez téléversé",
- "Read user settings": "Lire les paramètres utilisateur·ice",
- "This application will be allowed to access your user settings": "Cette application sera autorisée a accéder à vos paramètres utilisateur·ice",
- "Read user activity settings": "Lire les paramètres d'activité utilisateur·ice",
- "This application will be allowed to access your user activity settings": "Cette application sera autorisée a accéder à vos paramètres utilisateur·ice d'activité",
- "Read user participations": "Accéder aux participations de l'utilisateur·ice",
- "Read user memberships": "Accéder aux adhésions de l'utilisateur·ice",
- "Access drafts events": "Accéder aux événements brouillons",
- "This application will be allowed to list and view your draft events": "Cetta application sera autorisée à lister et accéder à vos événements brouillons",
- "Access group suggested events": "Accéder aux événements des groupes suggérés",
- "This application will be allowed to list your suggested group events": "Cetta application sera autorisée à lister les événements de vos groupes qui vous sont suggérés",
- "{profile} joined the the event {event}.": "{profile} a rejoint l'événement {event}.",
- "You joined the event {event}.": "Vous avez rejoint l'événement {event}.",
- "An anonymous profile joined the event {event}.": "Un profil anonyme a rejoint l'événement {event}."
+ "© The OpenStreetMap Contributors": "© Les Contributeur⋅ices OpenStreetMap"
}
diff --git a/js/src/i18n/gd.json b/js/src/i18n/gd.json
index 3e84d9999..89ab164ac 100644
--- a/js/src/i18n/gd.json
+++ b/js/src/i18n/gd.json
@@ -247,8 +247,6 @@
"Default Mobilizon privacy policy": "Poileasaidh prìobhaideachd Mhobilizon bhunaiteach",
"Default Mobilizon terms": "Teirmichean Mhobilizon bunaiteach",
"Delete": "Sguab às",
- "Delete Comment": "Sguab às am beachd",
- "Delete Event": "Sguab às an tachartas",
"Delete account": "Sguab às an cunntas",
"Delete conversation": "Sguab às an còmhradh",
"Delete discussion": "Sguab às an deasbad",
diff --git a/js/src/i18n/gl.json b/js/src/i18n/gl.json
index d027ec131..ba0e48332 100644
--- a/js/src/i18n/gl.json
+++ b/js/src/i18n/gl.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "Política de privacidade por omisión para Mobilizon",
"Default Mobilizon terms": "Termos Mobilizon por omisión",
"Delete": "Eliminar",
- "Delete Comment": "Borrar comentario",
- "Delete Event": "Borrar evento",
"Delete account": "Borrar conta",
"Delete conversation": "Eliminar conversa",
"Delete discussion": "Eliminar debate",
diff --git a/js/src/i18n/he.json b/js/src/i18n/he.json
index 2456b23d2..91ae10d48 100644
--- a/js/src/i18n/he.json
+++ b/js/src/i18n/he.json
@@ -78,8 +78,6 @@
"Date parameters": "מאפייני תאריך",
"Default": "ברירת מחדל",
"Delete": "מחיקה",
- "Delete Comment": "מחיקת תגובה",
- "Delete Event": "מחיקת אירוע",
"Delete account": "מחיקת חשבון",
"Delete event": "מחיקת אירוע",
"Delete everything": "מחיקת הכל",
diff --git a/js/src/i18n/hr.json b/js/src/i18n/hr.json
index 80e9fb2bb..6ab83b8c3 100644
--- a/js/src/i18n/hr.json
+++ b/js/src/i18n/hr.json
@@ -81,6 +81,7 @@
"Admin settings successfully saved.": "Administratorske postavke su uspješno spremljene.",
"Administration": "Administrator",
"Administrator": "Administrator",
+ "All": "Sve",
"All activities": "Sve aktivnosti",
"All good, let's continue!": "Sve je u redu. Nastavimo!",
"All the places have already been taken": "Sva mjesta su već zauzeta",
@@ -133,12 +134,12 @@
"Atom feed for events and posts": "Atom feed za događaje i objave",
"Attending": "Prisustvovanje",
"Avatar": "Avatar",
- "Back to group list": "",
+ "Back to group list": "Natrag na popis grupa",
"Back to homepage": "Natrag na početnu web-stranicu",
"Back to previous page": "Natrag na prethodnu stranicu",
- "Back to profile list": "",
+ "Back to profile list": "Natrag na popis profila",
"Back to top": "Natrag na vrh stranice",
- "Back to user list": "",
+ "Back to user list": "Natrag na popis korisnika",
"Banner": "Natpis",
"Before you can login, you need to click on the link inside it to validate your account.": "Morate ovjeriti svoj račun na dobivenoj poveznici kako biste se mogli prijaviti.",
"Begins on": "Započinje na",
@@ -262,8 +263,6 @@
"Default Mobilizon privacy policy": "Zadana Mobilizon politika privatnosti",
"Default Mobilizon terms": "Zadani Mobilizon uvjeti",
"Delete": "Izbriši",
- "Delete Comment": "Izbriši komentar",
- "Delete Event": "Izbriši događaj",
"Delete account": "Izbriši račun",
"Delete conversation": "Izbriši razgovor",
"Delete discussion": "Izbriši razgovor",
@@ -387,6 +386,9 @@
"Find or add an element": "Pronađi ili dodaj jedan element",
"First steps": "Prvi koraci",
"Follow": "Prati",
+ "Follow a new instance": "Prati novu instancu",
+ "Follow instance": "Prati instancu",
+ "Follow status": "Prati stanje",
"Follower": "Pratilac",
"Followers": "Pratioci",
"Followers will receive new public events and posts.": "Pratioci će primati obavijesti o novim javnim događajima i objave.",
@@ -472,9 +474,9 @@
"If you have opted for manual validation of participants, Mobilizon will send you an email to inform you of new participations to be processed. You can choose the frequency of these notifications below.": "Ako je odabrano ručno odobrenje sudionika, Mobilizon će ti poslati e-mail o novim sudionicima koji se moraju obraditi. Dolje možeš odabrati učestalost ovih obavijesti.",
"If you want, you may send a message to the event organizer here.": "Ako želite, ovdje možete poslati poruku organizatoru događaja.",
"Ignore": "Zanemari",
- "In person": "",
+ "In person": "Osobno",
"In the following context, an application is a software, either provided by the Mobilizon team or by a 3rd-party, used to interact with your instance.": "U sljedećem kontekstu, aplikacija je softver pružen od Mobilizon tima ili 3. partije, koji vam omogućuje povezivanje sa instancom.",
- "In the past": "",
+ "In the past": "U prošlosti",
"In this instance's network": "U mreži ove instance",
"Increase": "Povećaj",
"Instance": "Instanca",
@@ -624,11 +626,12 @@
"No follower matches the filters": "Nijedan pratilac ne odgovara filtrima",
"No group found": "Bez rezultata",
"No group matches the filters": "Nijedna grupa ne odgovara filterima",
- "No group member found": "",
+ "No group member found": "Nije pronađen nijedan član grupe",
"No groups found": "Bez rezultata",
"No groups found for {search}": "Nema grupa za {search}",
"No information": "Nema informacija",
"No instance follows your instance yet.": "Nijedna instanca još ne prati vašu instancu.",
+ "No instance found.": "Nije pronađena nijedna instanca.",
"No instance to approve|Approve instance|Approve {number} instances": "Nema instance za odobriti|Odobri instancu|Odobri {number} instanca",
"No instance to reject|Reject instance|Reject {number} instances": "Nema instance za odbiti|Odbij instancu|Odbij {number} instanca",
"No instance to remove|Remove instance|Remove {number} instances": "Nema instanca za ukloniti|Ukolni instancu|Ukloni {number} instanca",
@@ -913,6 +916,7 @@
"Starts on…": "Započinje…",
"Status": "Stanje",
"Statuses": "Stanja",
+ "Stop following instance": "Prekini pratiti instancu",
"Street": "Ulica",
"Submit": "Podnesi",
"Submit to Akismet": "Pošalji Akismetu",
@@ -975,9 +979,9 @@
"The group's physical address was changed.": "Promijenjena je fizička adresa grupe.",
"The group's short description was changed.": "Promijenjen je kratki opis grupe.",
"The instance administrator is the person or entity that runs this Mobilizon instance.": "Administrator instance je osoba ili oni koji vode ovu Mobilizon instancu.",
- "The member was approved": "",
+ "The member was approved": "Član je odobren",
"The member was removed from the group {group}": "Član je izbačen iz grupe {group}",
- "The membership request from {profile} was rejected": "",
+ "The membership request from {profile} was rejected": "Zahtjev za članstvo od {profile} je odbijen",
"The only way for your group to get new members is if an admininistrator invites them.": "Jedini način da vaša grupa dobije nove članove je da ih pozove adminitrator grupe.",
"The organiser has chosen to close comments.": "Organizatori su odlučili zatvoriti komentare.",
"The page you're looking for doesn't exist.": "Stranica koju tražite ne postoji.",
@@ -1008,7 +1012,7 @@
"This group doesn't have a description yet.": "Ova grupa nema opis.",
"This group is accessible only through it's link. Be careful where you post this link.": "Ova je grupa dostupna samo putem njene poveznice. Pazi gdje objavljuješ ovu poveznicu.",
"This group is invite-only": "Ovoj grupi se ne možete pridružiti bez pozivnice",
- "This group was not found": "",
+ "This group was not found": "Ova grupa nije pronađena",
"This identifier is unique to your profile. It allows others to find you.": "Ovaj identifikator jer jedinstven vašem profilu. Omogućuje drugima da vas nađu.",
"This information is saved only on your computer. Click for details": "Ove informacije su spremljene na vaše računalo. Kliknite za detalje",
"This instance hasn't got push notifications enabled.": "Ova instanca nema aktivirane automatske obavijesti.",
@@ -1020,10 +1024,10 @@
"This post is accessible only for members. You have access to it for moderation purposes only because you are an instance moderator.": "Ova objava je dostupna samo članovima. Imaš pristup u svrhu moderiranja budući da si moderator instance.",
"This post is accessible only through it's link. Be careful where you post this link.": "Ova je objava dostupna samo putem njene poveznice. Pazi gdje objavljuješ ovu poveznicu.",
"This profile is from another instance, the informations shown here may be incomplete.": "Ovaj profil je iz jedne druge instance, ovdje prikazane informacije mogu biti nepotpune.",
- "This profile was not found": "",
+ "This profile was not found": "Ovaj profil nije pronađen",
"This setting will be used to display the website and send you emails in the correct language.": "Ova postavka će se koristiti za prikazivanje web-stranice i slanje e-maila u ispravnom jeziku.",
"This user doesn't have any profiles": "Korisnik nema nijedan profil",
- "This user was not found": "",
+ "This user was not found": "Ovaj korisnik nije pronađen",
"This website isn't moderated and the data that you enter will be automatically destroyed every day at 00:01 (Paris timezone).": "Ova web-stranica nije moderirana te će se svi podatci koje upišete automatski izbirisati svaki dan u 00:01 (Pariška vremenska zona).",
"This week": "Ovaj tjedan",
"This weekend": "Ovaj vikend",
@@ -1160,7 +1164,7 @@
"Yesterday": "Jučer",
"You accepted the invitation to join the group.": "Prihvatili ste poziv u grupu.",
"You added the member {member}.": "Dodali ste člana {member}.",
- "You approved {member}'s membership.": "",
+ "You approved {member}'s membership.": "Odobrio/la si članstvo za {member}.",
"You archived the discussion {discussion}.": "Arhivirali ste razgovor {discussion}.",
"You are not an administrator for this group.": "Niste administrator ove grupe.",
"You are not part of any group.": "Niste član nijedne grupe.",
@@ -1192,7 +1196,7 @@
"You don't follow any instances yet.": "Ne pratite nijednu instancu.",
"You don't have any upcoming events. Maybe try another filter?": "Nemaš nijedan nadolazeći događaj. Želiš li probati jedan drugi filtar?",
"You excluded member {member}.": "Isključili ste člana {member}.",
- "You have attended {count} events in the past.": "",
+ "You have attended {count} events in the past.": "Broj događaja kojima si prisustvovao/la u prošlosti: 0.|Broj događaja kojima si prisustvovao/la u prošlosti: 1.|Broj događaja kojima si prisustvovao/la u prošlosti: {count}.",
"You have been invited by {invitedBy} to the following group:": "{invitedBy} su vas pozvali u grupu:",
"You have been removed from this group's members.": "Izbačeni ste iz ove grupe.",
"You have cancelled your participation": "Otkazali ste svoje sudjelovanje",
@@ -1212,7 +1216,7 @@
"You promoted the member {member} to an unknown role.": "Promovirali ste člana {member} u nepoznatu ulogu.",
"You promoted {member} to administrator.": "Promovirali ste {member} u administratora.",
"You promoted {member} to moderator.": "Promovirali ste člana {member} u moderatora.",
- "You rejected {member}'s membership request.": "",
+ "You rejected {member}'s membership request.": "Odbio/la si zahtjev za članstvo za {member}.",
"You renamed the discussion from {old_discussion} to {discussion}.": "Preimenovali ste razgovor iz {old_discussion} u {discussion}.",
"You renamed the folder from {old_resource_title} to {resource}.": "Preimenovali ste mapu iz {old_resource_title} u {resource}.",
"You renamed the resource from {old_resource_title} to {resource}.": "preimenovali ste resurs iz {old_resource_title} u {resource}.",
@@ -1252,7 +1256,7 @@
"Your email is being changed": "Vaša e-mail adresa se mijenja",
"Your email will only be used to confirm that you're a real person and send you eventual updates for this event. It will NOT be transmitted to other instances or to the event organizer.": "Vaša e-mail adresa će se koristiti samo za potvrđivanje da ste stvarna osoba i za slanje eventualnih novosti za ovaj događaj. NEĆE SE proslijediti drugim instancama ili organizatorima događaja.",
"Your federated identity": "Vaš federalizirani identitet",
- "Your membership was approved by {profile}.": "",
+ "Your membership was approved by {profile}.": "Tvoje članstvo je odobrio/la {profile}.",
"Your participation has been confirmed": "Vaše sudjelovanje je potvrđeno",
"Your participation has been rejected": "Vaše sudjelovanje je odbijeno",
"Your participation has been requested": "Poslan je zahtjev za vaše sudjelovanje",
@@ -1276,6 +1280,7 @@
"[This comment has been deleted]": "[Ovaj je komentar izbrisan]",
"[deleted]": "[izbrisano]",
"a non-existent report": "nepostojeći izvještaj",
+ "access the corresponding account": "pristupi odgovarajućem računu",
"access to the group's private content as well": "",
"and {number} groups": "dodaj {number} grupa",
"any distance": "bilo koja udaljenost",
@@ -1358,7 +1363,7 @@
"{old_group_name} was renamed to {group}.": "{old_group_name} je preimenovano u {group}.",
"{profile} (by default)": "{profile} (po zadanom)",
"{profile} added the member {member}.": "{profile} su dodali člana {member}.",
- "{profile} approved {member}'s membership.": "",
+ "{profile} approved {member}'s membership.": "{profile} je odobrio/la članstvo za {member}.",
"{profile} archived the discussion {discussion}.": "{profile} su arhivirali razgovor {discussion}.",
"{profile} created the discussion {discussion}.": "{profile} su stvorili razgovor {discussion}.",
"{profile} created the folder {resource}.": "{profile} su stvorili mapu {resource}.",
@@ -1380,7 +1385,7 @@
"{profile} promoted {member} to an unknown role.": "{profile} su promovirali {member} u nepoznatu ulogu.",
"{profile} promoted {member} to moderator.": "{profile} su promovirali {member} u moderatora.",
"{profile} quit the group.": "{profile} su izašli iz grupe.",
- "{profile} rejected {member}'s membership request.": "",
+ "{profile} rejected {member}'s membership request.": "{profile} je odbio/la zahtjev za članstvo za {member}.",
"{profile} renamed the discussion from {old_discussion} to {discussion}.": "{profile} su preimenovali razgovor iz {old_discussion} u {discussion}.",
"{profile} renamed the folder from {old_resource_title} to {resource}.": "{profile} su preimenovali mapu iz {old_resource_title} u {resource}.",
"{profile} renamed the resource from {old_resource_title} to {resource}.": "{profile} su preimenovali resurs iz {old_resource_title} u {resource}.",
diff --git a/js/src/i18n/hu.json b/js/src/i18n/hu.json
index 3bf5227bc..670d2eb30 100644
--- a/js/src/i18n/hu.json
+++ b/js/src/i18n/hu.json
@@ -264,8 +264,6 @@
"Default Mobilizon privacy policy": "Alapértelmezett Mobilizon adatvédelmi irányelv",
"Default Mobilizon terms": "Alapértelmezett Mobilizon használati feltételek",
"Delete": "Törlés",
- "Delete Comment": "Hozzászólás törlése",
- "Delete Event": "Esemény törlése",
"Delete account": "Fiók törlése",
"Delete conversation": "Beszélgetés törlése",
"Delete discussion": "Megbeszélés törlése",
diff --git a/js/src/i18n/id.json b/js/src/i18n/id.json
index 70477c7ee..cd33157cb 100644
--- a/js/src/i18n/id.json
+++ b/js/src/i18n/id.json
@@ -237,8 +237,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "Persyaratan default Mobilizon",
"Delete": "Hapus",
- "Delete Comment": "Hapus Komentar",
- "Delete Event": "Hapus Acara",
"Delete account": "Hapus Akun",
"Delete conversation": "Hapus percakapan",
"Delete discussion": "",
diff --git a/js/src/i18n/it.json b/js/src/i18n/it.json
index 8c4b090e8..c0b88c079 100644
--- a/js/src/i18n/it.json
+++ b/js/src/i18n/it.json
@@ -264,8 +264,6 @@
"Default Mobilizon privacy policy": "Informativa sulla riservatezza predefinita di Mobilizon",
"Default Mobilizon terms": "Termini di Mobilizon predefiniti",
"Delete": "Elimina",
- "Delete Comment": "Elimina commento",
- "Delete Event": "Elimina evento",
"Delete account": "Elimina account",
"Delete conversation": "Elimina la conversazione",
"Delete discussion": "Elimina discussione",
diff --git a/js/src/i18n/ja.json b/js/src/i18n/ja.json
index 3c9bdb393..9c8f205ac 100644
--- a/js/src/i18n/ja.json
+++ b/js/src/i18n/ja.json
@@ -243,8 +243,6 @@
"Default Mobilizon privacy policy": "デフォルトのMobilizionのプライバシーポリシー",
"Default Mobilizon terms": "デフォルトのMobilizionの利用規約",
"Delete": "削除",
- "Delete Comment": "コメントを削除",
- "Delete Event": "イベントを削除",
"Delete account": "アカウントを削除",
"Delete conversation": "会話を削除する",
"Delete discussion": "議論を削除する",
diff --git a/js/src/i18n/kab.json b/js/src/i18n/kab.json
index b3e180f53..d9ee835b2 100644
--- a/js/src/i18n/kab.json
+++ b/js/src/i18n/kab.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "",
"Delete": "Kkes",
- "Delete Comment": "Kkes awennit",
- "Delete Event": "Kkes tadyant",
"Delete account": "Kkes amiḍan",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/i18n/kn.json b/js/src/i18n/kn.json
index 0c5e30e7a..bd540c6cf 100644
--- a/js/src/i18n/kn.json
+++ b/js/src/i18n/kn.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "",
"Delete": "",
- "Delete Comment": "",
- "Delete Event": "",
"Delete account": "",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/i18n/nl.json b/js/src/i18n/nl.json
index 5ff1ceab0..9280a7092 100644
--- a/js/src/i18n/nl.json
+++ b/js/src/i18n/nl.json
@@ -237,8 +237,6 @@
"Default Mobilizon privacy policy": "Standaard Mobilizon privacy beleid",
"Default Mobilizon terms": "Standaard Mobilizon voorwaarden",
"Delete": "Verwijder",
- "Delete Comment": "Reactie verwijderen",
- "Delete Event": "Evenement verwijderen",
"Delete account": "Account verwijderen",
"Delete conversation": "Verwijder gesprek",
"Delete discussion": "Discussie verwijderen",
diff --git a/js/src/i18n/nn.json b/js/src/i18n/nn.json
index 1d7e5aa16..5a5062b0a 100644
--- a/js/src/i18n/nn.json
+++ b/js/src/i18n/nn.json
@@ -264,8 +264,6 @@
"Default Mobilizon privacy policy": "Standard personvernvilkår for Mobilizon",
"Default Mobilizon terms": "Standardvilkår for Mobilizon",
"Delete": "Slett",
- "Delete Comment": "Slett kommentaren",
- "Delete Event": "Slett hendinga",
"Delete account": "Slett kontoen",
"Delete conversation": "Slett samtala",
"Delete discussion": "Slett ordskiftet",
diff --git a/js/src/i18n/oc.json b/js/src/i18n/oc.json
index 513f59e54..56e2c7f79 100644
--- a/js/src/i18n/oc.json
+++ b/js/src/i18n/oc.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "Politica de confidencialitat per defaut de Mobilizon",
"Default Mobilizon terms": "Condicions d’utilizacion per de defaut de Mobilizon",
"Delete": "Suprimir",
- "Delete Comment": "Suprimir lo comentari",
- "Delete Event": "Suprimir l’eveniment",
"Delete account": "Supression del compte",
"Delete conversation": "Suprimir la conversacion",
"Delete discussion": "Suprimir la discussion",
diff --git a/js/src/i18n/pl.json b/js/src/i18n/pl.json
index 4047d031e..7497a23c2 100644
--- a/js/src/i18n/pl.json
+++ b/js/src/i18n/pl.json
@@ -228,6 +228,7 @@
"Comment deleted": "Usunięto komentarz",
"Comment from {'@'}{username} reported": "Komentarz {'@'}{username} zgłoszony",
"Comment text can't be empty": "Tekst komentarza nie morze być pusty",
+ "Comment under event {eventTitle}": "Komentarz pod wydarzeniem {eventTitle}",
"Comments": "Komentarze",
"Comments are closed for everybody else.": "Komentarze są zamknięte dla innych.",
"Confirm": "Potwierdź",
@@ -296,9 +297,8 @@
"Default Mobilizon privacy policy": "Domyślna polityka prywatności Mobilizon",
"Default Mobilizon terms": "Domyślne warunki użytkowania Mobilizon",
"Delete": "Usuń",
- "Delete Comment": "Usuń komentarz",
- "Delete Event": "Usuń wydarzenie",
"Delete account": "Usuń konto",
+ "Delete comment": "Usuń komentarz",
"Delete comments": "Usuwanie komentarzy",
"Delete conversation": "Usuń konwersację",
"Delete discussion": "Usunięcie dyskusji",
@@ -393,6 +393,7 @@
"Event cancelled": "Anulowano wydarzenie",
"Event creation": "Utworzenie wydarzenia",
"Event date": "Data wydarzenia",
+ "Event deleted": "Usunięte zdarzenie",
"Event description body": "Treść opisu wydarzenia",
"Event edition": "Edycja wydarzenia",
"Event list": "Lista wydarzeń",
@@ -688,6 +689,7 @@
"No closed reports yet": "Nie ma jeszcze zamkniętych zgłoszeń",
"No comment": "Brak komentarzy",
"No comments yet": "Nie ma jeszcze komentarzy",
+ "No content found": "Nie znaleziono zawartości",
"No discussions yet": "Brak dyskusji (jeszcze)",
"No end date": "Brak daty zakończenia",
"No event found at this address": "Pod tym adresem nie znaleziono żadnych wydarzeń",
@@ -929,6 +931,7 @@
"Report this group": "Zgłoś tę grupę",
"Report this post": "Zgłoś ten wpis",
"Reported": "Zgłoszono",
+ "Reported at": "Zgłoszono o",
"Reported by": "Zgłoszono przez",
"Reported by someone anonymously": "Zgłoszone przez kogoś anonimowo",
"Reported by someone on {domain}": "Zgłoszono przez osobę z {domain}",
@@ -1018,6 +1021,8 @@
"Suspend group": "Zawieś grupę",
"Suspend the account": "Zawieś konto",
"Suspend the account?": "Zawiesić konto?",
+ "Suspend the profile": "Zawieś profil",
+ "Suspend the profile?": "Zawiesić profil?",
"Suspended": "Zawieszony",
"Tag search": "Wyszukiwanie po tagach",
"Task lists": "Listy zadań",
@@ -1251,6 +1256,7 @@
"Update post": "Aktualizuj wpis",
"Update profiles": "Aktualizacja profili",
"Updated": "Zaktualizowano",
+ "Updated at": "Zaktualizowano o",
"Upload media": "Przesyłanie multimediów",
"Uploaded media size": "Rozmiar przesłanych multimediów",
"Uploaded media total size": "Całkowity rozmiar przesłanych multimediów",
@@ -1543,6 +1549,7 @@
"{number} posts": "Brak wpisów|Jeden wpis|{number} wpisów / wpisy",
"{number} seats left": "{number} wolnych miejsc",
"{old_group_name} was renamed to {group}.": "Nazwa grupy została zmieniona z {old_group_name} na {group}.",
+ "{profileName} (suspended)": "{profileName} (zawieszony)",
"{profile} (by default)": "{profile} (domyślnie)",
"{profile} added the member {member}.": "{profile} dodał(a)(o) członka / członkinię {member}.",
"{profile} approved {member}'s membership.": "{profile} zatwierdził(a) członkostwo {member}.",
diff --git a/js/src/i18n/pt.json b/js/src/i18n/pt.json
index 4d78c92e2..9083bb1ac 100644
--- a/js/src/i18n/pt.json
+++ b/js/src/i18n/pt.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "",
"Default Mobilizon terms": "",
"Delete": "",
- "Delete Comment": "",
- "Delete Event": "",
"Delete account": "",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/i18n/pt_BR.json b/js/src/i18n/pt_BR.json
index e64296fc5..4fc504e29 100644
--- a/js/src/i18n/pt_BR.json
+++ b/js/src/i18n/pt_BR.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "Políticas padrões de privacidade do Mobilizon",
"Default Mobilizon terms": "Condições gerais padrões do Mobilizon",
"Delete": "Apagar",
- "Delete Comment": "Apagar comentário",
- "Delete Event": "Apagar evento",
"Delete account": "Apagar conta",
"Delete conversation": "Apagar conversa",
"Delete discussion": "",
diff --git a/js/src/i18n/ru.json b/js/src/i18n/ru.json
index 48554ef82..4041b5aa0 100644
--- a/js/src/i18n/ru.json
+++ b/js/src/i18n/ru.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "Политика конфиденциальности Mobilizon по умолчанию",
"Default Mobilizon terms": "Условия использования Mobilizon по умолчанию",
"Delete": "Удалить",
- "Delete Comment": "Удалить комментарий",
- "Delete Event": "Удалить мероприятие",
"Delete account": "Удалить учётную запись",
"Delete conversation": "Удалить беседу",
"Delete discussion": "Удалить обсуждение",
diff --git a/js/src/i18n/sl.json b/js/src/i18n/sl.json
index d88f48ed7..99cca85b1 100644
--- a/js/src/i18n/sl.json
+++ b/js/src/i18n/sl.json
@@ -234,8 +234,6 @@
"Default Mobilizon privacy policy": "Privzeti pravilnik o zasebnosti za Mobilizon",
"Default Mobilizon terms": "Privzeti pogoji za Mobilizon",
"Delete": "Izbriši",
- "Delete Comment": "Izbriši komentar",
- "Delete Event": "Izbriši dogodek",
"Delete account": "Izbriši račun",
"Delete conversation": "Izbriši pogovor",
"Delete discussion": "Izbriši razpravo",
diff --git a/js/src/i18n/sv.json b/js/src/i18n/sv.json
index facffe799..c40007a5f 100644
--- a/js/src/i18n/sv.json
+++ b/js/src/i18n/sv.json
@@ -235,8 +235,6 @@
"Default Mobilizon privacy policy": "Standard-integritetsvillkor för Mobilizon",
"Default Mobilizon terms": "Standardvillkor för Mobilizon",
"Delete": "Radera",
- "Delete Comment": "Radera kommentar",
- "Delete Event": "Radera evenemang",
"Delete account": "Radera konto",
"Delete conversation": "Ta bort konversationen",
"Delete discussion": "",
diff --git a/js/src/i18n/zh_Hans.json b/js/src/i18n/zh_Hans.json
index 40ce3e01a..440e24228 100644
--- a/js/src/i18n/zh_Hans.json
+++ b/js/src/i18n/zh_Hans.json
@@ -264,8 +264,6 @@
"Default Mobilizon privacy policy": "默认的Mobilizon隐私政策",
"Default Mobilizon terms": "缺省的Mobilizon条款",
"Delete": "删除",
- "Delete Comment": "删除评论",
- "Delete Event": "删除活动",
"Delete account": "删除账户",
"Delete conversation": "删除对话",
"Delete discussion": "删除讨论",
diff --git a/js/src/i18n/zh_Hant.json b/js/src/i18n/zh_Hant.json
index abaa8861b..a46f69626 100644
--- a/js/src/i18n/zh_Hant.json
+++ b/js/src/i18n/zh_Hant.json
@@ -244,8 +244,6 @@
"Default Mobilizon privacy policy": "預設的 Mobilizon 隱私政策",
"Default Mobilizon terms": "預設的 Mobilizon 條款",
"Delete": "",
- "Delete Comment": "刪除留言",
- "Delete Event": "",
"Delete account": "",
"Delete conversation": "",
"Delete discussion": "",
diff --git a/js/src/types/report.model.ts b/js/src/types/report.model.ts
index dd54158a3..dc00599a3 100644
--- a/js/src/types/report.model.ts
+++ b/js/src/types/report.model.ts
@@ -14,9 +14,9 @@ export interface IReportNote extends IActionLogObject {
}
export interface IReport extends IActionLogObject {
id: string;
- reported: IActor;
+ reported: IActor | undefined;
reporter: IPerson;
- event?: IEvent;
+ events?: IEvent[];
comments: IComment[];
content: string;
notes: IReportNote[];
diff --git a/js/src/views/Moderation/ReportView.vue b/js/src/views/Moderation/ReportView.vue
index 221d88824..40177b3b9 100644
--- a/js/src/views/Moderation/ReportView.vue
+++ b/js/src/views/Moderation/ReportView.vue
@@ -65,7 +65,7 @@
-
+
{{ t("Reported group") }}
-
+
{{ t("Reported identity") }}
-
+
- {{ displayNameAndUsername(report.reported) }}
+
+
+
+ {{ displayNameAndUsername(report.reported) }}
+
+
+
+ {{
+ displayNameAndUsername(report.reported)
+ }}
+ {{ t("Suspend the profile") }}
+ {{ t("Suspend the account") }}
+
+
+
+
+ {{ t("Reported identity") }}
+
+
+ {{ t("Unknown actor") }}
{{ t("Reported by") }}
-
+
{{ report.reporter.domain }}
-
+
{{ displayNameAndUsername(report.reporter) }}
+
+ {{ t("Unknown actor") }}
+
- {{ t("Reported") }}
+ {{ t("Reported at") }}
{{ formatDateTimeString(report.insertedAt) }}
- {{ t("Updated") }}
+ {{ t("Updated at") }}
{{ formatDateTimeString(report.updatedAt) }}
@@ -150,26 +190,6 @@
{{ t("Unknown") }}
-
- {{ t("Event") }}
-
-
- {{ report.event.title }}
-
- {{ t("Delete") }}
-
-
@@ -178,7 +198,7 @@
{{ t("Report reason") }}
-
+
-
-
+
+
{{ report.reported.name }}
@{{ usernameWithDomain(report.reported) }}
+
{{ t("Unknown actor") }}
{{ t("Reported content") }}
-
-
{{ t("Delete") }}
+
+
+
+ {{
+ t("Delete event and resolve report")
+ }} {{ t("Delete event") }}
+
+
{{ t("Reported content") }}
-
-
-
-
-
-
-
-
-
-
{{ comment.actor.name }}
-
@{{ comment.actor.preferredUsername }}
-
-
{{ t("Unknown actor") }}
-
-
-
- {{ t("Delete") }}
+
+
-
-
+ {{ comment.event?.title }}
+
+
+
+
+ {{
+ t("Delete comment and resolve report")
+ }} {{ t("Delete comment") }}
+
+
+ {{ t("No content found") }}
+
+ {{ t("Maybe the content was removed by the author or a moderator") }}
+
+
+
+
{{ t("Notes") }}
import { CREATE_REPORT_NOTE, REPORT, UPDATE_REPORT } from "@/graphql/report";
import { IReport, IReportNote } from "@/types/report.model";
-import { displayNameAndUsername, usernameWithDomain } from "@/types/actor";
+import {
+ IPerson,
+ displayNameAndUsername,
+ usernameWithDomain,
+} from "@/types/actor";
import { DELETE_EVENT } from "@/graphql/event";
import uniq from "lodash/uniq";
import { nl2br } from "@/utils/html";
@@ -325,7 +374,7 @@ import { ActorType, AntiSpamFeedback, ReportStatusEnum } from "@/types/enums";
import RouteName from "@/router/name";
import { GraphQLError } from "graphql";
import { ApolloCache, FetchResult } from "@apollo/client/core";
-import { useMutation, useQuery } from "@vue/apollo-composable";
+import { useLazyQuery, useMutation, useQuery } from "@vue/apollo-composable";
import { useCurrentActorClient } from "@/composition/apollo/actor";
import { useHead } from "@vueuse/head";
import { useI18n } from "vue-i18n";
@@ -337,6 +386,13 @@ import { Dialog } from "@/plugins/dialog";
import { Notifier } from "@/plugins/notifier";
import EventCard from "@/components/Event/EventCard.vue";
import { useFeatures } from "@/composition/apollo/config";
+import { IEvent } from "@/types/event.model";
+import EmptyContent from "@/components/Utils/EmptyContent.vue";
+import EventComment from "@/components/Comment/EventComment.vue";
+import { SUSPEND_PROFILE } from "@/graphql/actor";
+import { GET_USER, SUSPEND_USER } from "@/graphql/user";
+import { IUser } from "@/types/current-user.model";
+import { waitApolloQuery } from "@/vue-apollo";
const router = useRouter();
@@ -374,6 +430,14 @@ const errors = ref
([]);
const noteContent = ref("");
+const reportedContent = computed(() => {
+ return [...(report.value?.events ?? []), ...(report.value?.comments ?? [])];
+});
+
+const isOnlyReportedContent = computed(
+ () => reportedContent.value.length === 1
+);
+
const {
mutate: createReportNoteMutation,
onDone: createReportNoteMutationDone,
@@ -419,26 +483,39 @@ createReportNoteMutationError((error) => {
const dialog = inject("dialog");
-const confirmEventDelete = (): void => {
+const addResolveReportPart = computed(() => {
+ if (isOnlyReportedContent.value) {
+ return "" + t("This will also resolve the report.") + "
";
+ }
+ return "";
+});
+
+const confirmEventDelete = (event: IEvent): void => {
dialog?.confirm({
title: t("Deleting event"),
- message: t(
- "Are you sure you want to delete this event? This action cannot be undone. You may want to engage the discussion with the event creator or edit its event instead."
- ),
- confirmText: t("Delete Event"),
+ message:
+ t(
+ "Are you sure you want to delete this event? This action cannot be undone . You may want to engage the discussion with the event creator and ask them to edit their event instead."
+ ) + addResolveReportPart.value,
+ confirmText: isOnlyReportedContent.value
+ ? t("Delete event and resolve report")
+ : t("Delete event"),
variant: "danger",
hasIcon: true,
- onConfirm: () => deleteEvent(),
+ onConfirm: () => deleteEvent(event),
});
};
const confirmCommentDelete = (comment: IComment): void => {
dialog?.confirm({
title: t("Deleting comment"),
- message: t(
- "Are you sure you want to delete this comment? This action cannot be undone."
- ),
- confirmText: t("Delete Comment"),
+ message:
+ t(
+ "Are you sure you want to delete this comment? This action cannot be undone ."
+ ) + addResolveReportPart.value,
+ confirmText: isOnlyReportedContent.value
+ ? t("Delete comment and resolve report")
+ : t("Delete comment"),
variant: "danger",
hasIcon: true,
onConfirm: () => deleteCommentMutation({ commentId: comment.id }),
@@ -449,35 +526,105 @@ const {
mutate: deleteEventMutation,
onDone: deleteEventMutationDone,
onError: deleteEventMutationError,
-} = useMutation<{ deleteEvent: { id: string } }>(DELETE_EVENT);
+} = useMutation<{ deleteEvent: { id: string } }>(DELETE_EVENT, () => ({
+ update: (
+ store: ApolloCache<{ deleteEvent: { id: string } }>,
+ { data }: FetchResult
+ ) => {
+ if (data == null) return;
+ const reportCachedData = store.readQuery<{ report: IReport }>({
+ query: REPORT,
+ variables: { id: report.value?.id },
+ });
+ if (reportCachedData == null) return;
+ const { report: cachedReport } = reportCachedData;
+ if (cachedReport === null) {
+ console.error(
+ "Cannot update report events cache, because of null value."
+ );
+ return;
+ }
+ const updatedReport = {
+ ...cachedReport,
+ events: cachedReport.events?.filter(
+ (cachedEvent) => cachedEvent.id !== data.deleteEvent.id
+ ),
+ };
-deleteEventMutationDone(() => {
- const eventTitle = report.value?.event?.title;
- notifier?.success(
- t("Event {eventTitle} deleted", {
- eventTitle,
- })
- );
+ store.writeQuery({
+ query: REPORT,
+ variables: { id: report.value?.id },
+ data: { report: updatedReport },
+ });
+ },
+}));
+
+deleteEventMutationDone(async () => {
+ if (reportedContent.value.length === 0) {
+ await updateReport(ReportStatusEnum.RESOLVED);
+ notifier?.success(t("Event deleted and report resolved"));
+ } else {
+ notifier?.success(t("Event deleted"));
+ }
});
deleteEventMutationError((error) => {
console.error(error);
});
-const deleteEvent = async (): Promise => {
- if (!report.value?.event?.id) return;
+const deleteEvent = async (event: IEvent): Promise => {
+ if (!event?.id) return;
- deleteEventMutation({ eventId: report.value.event.id });
+ deleteEventMutation(
+ { eventId: event.id },
+ { context: { eventTitle: event.title } }
+ );
};
const {
mutate: deleteCommentMutation,
onDone: deleteCommentMutationDone,
onError: deleteCommentMutationError,
-} = useMutation<{ deleteComment: { id: string } }>(DELETE_COMMENT);
+} = useMutation<{ deleteComment: { id: string } }>(DELETE_COMMENT, () => ({
+ update: (
+ store: ApolloCache<{ deleteComment: { id: string } }>,
+ { data }: FetchResult
+ ) => {
+ if (data == null) return;
+ const reportCachedData = store.readQuery<{ report: IReport }>({
+ query: REPORT,
+ variables: { id: report.value?.id },
+ });
+ if (reportCachedData == null) return;
+ const { report: cachedReport } = reportCachedData;
+ if (cachedReport === null) {
+ console.error(
+ "Cannot update report comments cache, because of null value."
+ );
+ return;
+ }
+ const updatedReport = {
+ ...cachedReport,
+ comments: cachedReport.comments.filter(
+ (cachedComment) => cachedComment.id !== data.deleteComment.id
+ ),
+ };
-deleteCommentMutationDone(() => {
- notifier?.success(t("Comment deleted") as string);
+ store.writeQuery({
+ query: REPORT,
+ variables: { id: report.value?.id },
+ data: { report: updatedReport },
+ });
+ },
+}));
+
+deleteCommentMutationDone(async () => {
+ if (reportedContent.value.length === 0) {
+ await updateReport(ReportStatusEnum.RESOLVED);
+ notifier?.success(t("Comment deleted and report resolved"));
+ } else {
+ notifier?.success(t("Comment deleted"));
+ }
});
deleteCommentMutationError((error) => {
@@ -524,8 +671,8 @@ const {
},
}));
-onUpdateReportMutation(() => {
- router.push({ name: RouteName.REPORTS });
+onUpdateReportMutation(async () => {
+ await router.push({ name: RouteName.REPORTS });
});
onUpdateReportError((error) => {
@@ -561,6 +708,105 @@ const reportToAntispam = (spam: boolean) => {
},
});
};
+
+const { mutate: doSuspendProfile, onDone: onSuspendProfileDone } = useMutation<
+ {
+ suspendProfile: { id: string };
+ },
+ { id: string }
+>(SUSPEND_PROFILE);
+
+const { mutate: doSuspendUser, onDone: onSuspendUserDone } = useMutation<
+ { suspendProfile: { id: string } },
+ { userId: string }
+>(SUSPEND_USER);
+
+const userLazyQuery = useLazyQuery<{ user: IUser }, { id: string }>(GET_USER);
+
+const suspendProfile = async (actorId: string): Promise => {
+ dialog?.confirm({
+ title: t("Suspend the profile?"),
+ message:
+ t(
+ "Do you really want to suspend this profile? All of the profiles content will be deleted."
+ ) +
+ `` +
+ t("There will be no way to restore the profile's data!") +
+ `
`,
+ confirmText: t("Suspend the profile"),
+ cancelText: t("Cancel"),
+ variant: "danger",
+ onConfirm: async () => {
+ doSuspendProfile({
+ id: actorId,
+ });
+ return router.push({ name: RouteName.USERS });
+ },
+ });
+};
+
+const userSuspendedProfilesMessages = (user: IUser) => {
+ return (
+ t("The following user's profiles will be deleted, with all their data:") +
+ `` +
+ user.actors
+ .map((person) => `${displayNameAndUsername(person)} `)
+ .join("") +
+ ` `
+ );
+};
+
+const cachedReportedUser = ref();
+
+const suspendUser = async (user: IUser): Promise => {
+ try {
+ if (!cachedReportedUser.value) {
+ userLazyQuery.load(GET_USER, { id: user.id });
+
+ const userLazyQueryResult = await waitApolloQuery<
+ { user: IUser },
+ { id: string }
+ >(userLazyQuery);
+ console.debug("data", userLazyQueryResult);
+
+ cachedReportedUser.value = userLazyQueryResult.data.user;
+ }
+
+ dialog?.confirm({
+ title: t("Suspend the account?"),
+ message:
+ t("Do you really want to suspend the account « {emailAccount} » ?", {
+ emailAccount: cachedReportedUser.value.email,
+ }) +
+ " " +
+ userSuspendedProfilesMessages(cachedReportedUser.value) +
+ "" +
+ t("There will be no way to restore the user's data!") +
+ ` `,
+ confirmText: t("Suspend the account"),
+ cancelText: t("Cancel"),
+ variant: "danger",
+ onConfirm: async () => {
+ doSuspendUser({
+ userId: user.id,
+ });
+ return router.push({ name: RouteName.USERS });
+ },
+ });
+ } catch (e) {
+ console.error(e);
+ }
+};
+
+onSuspendUserDone(async () => {
+ await router.push({ name: RouteName.REPORTS });
+ notifier?.success(t("User suspended and report resolved"));
+});
+
+onSuspendProfileDone(async () => {
+ await router.push({ name: RouteName.REPORTS });
+ notifier?.success(t("Profile suspended and report resolved"));
+});