Merge branch 'bugs' into 'main'

Various fixes

Closes #941, #969, #981, #966 et #965

See merge request framasoft/mobilizon!1141
This commit is contained in:
Thomas Citharel 2021-12-13 17:32:09 +00:00
commit 308f3a6d60
98 changed files with 4851 additions and 4611 deletions

View File

@ -253,7 +253,7 @@ package-app:
only:
- tags@framasoft/mobilizon
artifacts:
expire_in: 30 days
expire_in: 2 days
paths:
- ${APP_ASSET}
@ -302,7 +302,7 @@ multi-arch-release:
tags:
- "privileged"
artifacts:
expire_in: 30 days
expire_in: 2 days
paths:
- ${APP_ASSET}
parallel:

View File

@ -52,7 +52,7 @@
"intersection-observer": "^0.12.0",
"jwt-decode": "^3.1.2",
"leaflet": "^1.4.0",
"leaflet.locatecontrol": "^0.74.0",
"leaflet.locatecontrol": "^0.76.0",
"lodash": "^4.17.11",
"ngeohash": "^0.6.3",
"p-debounce": "^4.0.0",
@ -75,7 +75,7 @@
"devDependencies": {
"@types/jest": "^27.0.2",
"@types/leaflet": "^1.5.2",
"@types/leaflet.locatecontrol": "^0.60.7",
"@types/leaflet.locatecontrol": "^0.74",
"@types/lodash": "^4.14.141",
"@types/ngeohash": "^0.6.2",
"@types/phoenix": "^1.5.2",

View File

@ -45,6 +45,7 @@ div.eventMetadataBlock {
.content-wrapper {
overflow: hidden;
width: 100%;
max-width: calc(100vw - 32px - 20px);
&.padding-left {
padding: 0 20px;

View File

@ -51,6 +51,13 @@ import { MemberRole } from "@/types/enums";
groupMemberships: {
query: LOGGED_USER_MEMBERSHIPS,
update: (data) => data.loggedUser.memberships,
variables() {
return {
page: 1,
limit: 10,
membershipName: this.actorFilter,
};
},
},
identities: IDENTITIES,
currentActor: CURRENT_ACTOR_CLIENT,

View File

@ -65,42 +65,60 @@
/>
</div>
<div class="column contact-picker">
<div v-if="isSelectedActorAGroup && actorMembers.length > 0">
<div v-if="isSelectedActorAGroup">
<p>{{ $t("Add a contact") }}</p>
<b-input
:placeholder="$t('Filter by name')"
v-model="contactFilter"
dir="auto"
/>
<p
class="field"
v-for="actor in filteredActorMembers"
:key="actor.id"
>
<b-checkbox v-model="actualContacts" :native-value="actor.id">
<div class="media">
<div class="media-left">
<figure class="image is-48x48" v-if="actor.avatar">
<img
class="image is-rounded"
:src="actor.avatar.url"
:alt="actor.avatar.alt"
<div v-if="actorMembers.length > 0">
<p
class="field"
v-for="actor in filteredActorMembers"
:key="actor.id"
>
<b-checkbox
v-model="actualContacts"
:native-value="actor.id"
>
<div class="media">
<div class="media-left">
<figure class="image is-48x48" v-if="actor.avatar">
<img
class="image is-rounded"
:src="actor.avatar.url"
:alt="actor.avatar.alt"
/>
</figure>
<b-icon
v-else
size="is-large"
icon="account-circle"
/>
</figure>
<b-icon v-else size="is-large" icon="account-circle" />
</div>
<div class="media-content" v-if="actor.name">
<p class="is-4">{{ actor.name }}</p>
<p class="is-6 has-text-grey-dark">
</div>
<div class="media-content" v-if="actor.name">
<p class="is-4">{{ actor.name }}</p>
<p class="is-6 has-text-grey-dark">
{{ `@${usernameWithDomain(actor)}` }}
</p>
</div>
<div class="media-content" v-else>
{{ `@${usernameWithDomain(actor)}` }}
</p>
</div>
</div>
<div class="media-content" v-else>
{{ `@${usernameWithDomain(actor)}` }}
</div>
</div>
</b-checkbox>
</p>
</b-checkbox>
</p>
</div>
<div
v-else-if="
actorMembers.length === 0 && contactFilter.length > 0
"
>
<empty-content icon="account-multiple" :inline="true">
{{ $t("No group member found") }}
</empty-content>
</div>
</div>
<div v-else class="content has-text-grey-dark has-text-centered">
<p>{{ $t("Your profile will be shown as contact.") }}</p>
@ -122,6 +140,7 @@ import { Component, Prop, Vue, Watch } from "vue-property-decorator";
import { IMember } from "@/types/actor/member.model";
import { IActor, IGroup, IPerson, usernameWithDomain } from "../../types/actor";
import OrganizerPicker from "./OrganizerPicker.vue";
import EmptyContent from "../Utils/EmptyContent.vue";
import {
CURRENT_ACTOR_CLIENT,
IDENTITIES,
@ -139,16 +158,17 @@ const MEMBER_ROLES = [
];
@Component({
components: { OrganizerPicker },
components: { OrganizerPicker, EmptyContent },
apollo: {
members: {
query: GROUP_MEMBERS,
variables() {
return {
name: usernameWithDomain(this.selectedActor),
groupName: usernameWithDomain(this.selectedActor),
page: this.membersPage,
limit: 10,
roles: MEMBER_ROLES.join(","),
name: this.contactFilter,
};
},
update: (data) => data.group.members,
@ -161,9 +181,11 @@ const MEMBER_ROLES = [
currentActor: CURRENT_ACTOR_CLIENT,
userMemberships: {
query: LOGGED_USER_MEMBERSHIPS,
variables: {
page: 1,
limit: 100,
variables() {
return {
page: 1,
limit: 10,
};
},
update: (data) => data.loggedUser.memberships,
},

View File

@ -11,7 +11,7 @@
<actor-auto-complete v-model="assignedTo" />
</b-field>
<b-field :label="$t('Due on')">
<b-datepicker v-model="dueDate" />
<b-datepicker v-model="dueDate" :first-day-of-week="firstDayOfWeek" />
</b-field>
</div>
</div>
@ -99,5 +99,9 @@ export default class Todo extends Vue {
});
}
}
get firstDayOfWeek(): number {
return this.$dateFnsLocale?.options?.weekStartsOn || 0;
}
}
</script>

View File

@ -239,10 +239,14 @@ export const LOGGED_USER_DRAFTS = gql`
`;
export const LOGGED_USER_MEMBERSHIPS = gql`
query LoggedUserMemberships($page: Int, $limit: Int) {
query LoggedUserMemberships(
$membershipName: String
$page: Int
$limit: Int
) {
loggedUser {
id
memberships(page: $page, limit: $limit) {
memberships(name: $membershipName, page: $page, limit: $limit) {
total
elements {
id

View File

@ -44,10 +44,16 @@ export const REJECT_INVITATION = gql`
`;
export const GROUP_MEMBERS = gql`
query ($name: String!, $roles: String, $page: Int, $limit: Int) {
group(preferredUsername: $name) {
query (
$groupName: String!
$name: String
$roles: String
$page: Int
$limit: Int
) {
group(preferredUsername: $groupName) {
...ActorFragment
members(page: $page, limit: $limit, roles: $roles) {
members(name: $name, page: $page, limit: $limit, roles: $roles) {
elements {
id
role

View File

@ -1253,5 +1253,12 @@
"The membership request from {profile} was rejected": "The membership request from {profile} was rejected",
"The member was approved": "The member was approved",
"Emails usually don't contain capitals, make sure you haven't made a typo.": "Emails usually don't contain capitals, make sure you haven't made a typo.",
"To follow groups and be informed of their latest events": "To follow groups and be informed of their latest events"
"To follow groups and be informed of their latest events": "To follow groups and be informed of their latest events",
"No group member found": "No group member found",
"This group was not found": "This group was not found",
"Back to group list": "Back to group list",
"This profile was not found": "This profile was not found",
"Back to profile list": "Back to profile list",
"This user was not found": "This user was not found",
"Back to user list": "Back to user list"
}

View File

@ -1357,5 +1357,12 @@
"The membership request from {profile} was rejected": "La demande d'adhésion de {profile} a été rejetée",
"The member was approved": "Le ou la membre a été approuvée",
"Emails usually don't contain capitals, make sure you haven't made a typo.": "Les emails ne contiennent d'ordinaire pas de capitales, assurez-vous de n'avoir pas fait de faute de frappe.",
"To follow groups and be informed of their latest events": "Afin de suivre des groupes et être informé de leurs derniers événements"
"To follow groups and be informed of their latest events": "Afin de suivre des groupes et être informé de leurs derniers événements",
"No group member found": "Aucun membre du groupe trouvé",
"This group was not found": "Ce groupe n'a pas été trouvé",
"Back to group list": "Retour à la liste des groupes",
"This profile was not found": "Ce profil n'a pas été trouvé",
"Back to profile list": "Retour à la liste des profiles",
"This user was not found": "Cet utilisateur⋅ice n'a pas été trouvé⋅e",
"Back to user list": "Retour à la liste des utilisateur⋅ices"
}

View File

@ -103,7 +103,7 @@
:aria-page-label="$t('Page')"
:aria-current-label="$t('Current page')"
:total="group.members.total"
:per-page="EVENTS_PER_PAGE"
:per-page="MEMBERS_PER_PAGE"
@page-change="onMembersPageChange"
>
<b-table-column
@ -286,6 +286,17 @@
</b-table>
</section>
</div>
<empty-content v-else-if="!$apollo.loading" icon="account-multiple">
{{ $t("This group was not found") }}
<template #desc>
<b-button
type="is-text"
tag="router-link"
:to="{ name: RouteName.ADMIN_GROUPS }"
>{{ $t("Back to group list") }}</b-button
>
</template>
</empty-content>
</template>
<script lang="ts">
import { Component, Vue, Prop } from "vue-property-decorator";
@ -318,6 +329,8 @@ const MEMBERS_PER_PAGE = 10;
organizedEventsLimit: EVENTS_PER_PAGE,
postsPage: this.postsPage,
postsLimit: POSTS_PER_PAGE,
membersLimit: MEMBERS_PER_PAGE,
membersPage: this.membersPage,
};
},
skip() {

View File

@ -258,6 +258,17 @@
</b-table>
</section>
</div>
<empty-content v-else-if="!$apollo.loading" icon="account">
{{ $t("This profile was not found") }}
<template #desc>
<b-button
type="is-text"
tag="router-link"
:to="{ name: RouteName.PROFILES }"
>{{ $t("Back to profile list") }}</b-button
>
</template>
</empty-content>
</template>
<script lang="ts">
import { Component, Vue, Prop } from "vue-property-decorator";

View File

@ -69,6 +69,17 @@
>
</div>
</div>
<empty-content v-else-if="!$apollo.loading" icon="account">
{{ $t("This user was not found") }}
<template #desc>
<b-button
type="is-text"
tag="router-link"
:to="{ name: RouteName.USERS }"
>{{ $t("Back to user list") }}</b-button
>
</template>
</empty-content>
</template>
<script lang="ts">
import { Component, Vue, Prop } from "vue-property-decorator";
@ -80,6 +91,7 @@ import { usernameWithDomain } from "../../types/actor/actor.model";
import RouteName from "../../router/name";
import { IUser } from "../../types/current-user.model";
import { IPerson } from "../../types/actor";
import EmptyContent from "../../components/Utils/EmptyContent.vue";
@Component({
apollo: {
@ -104,6 +116,9 @@ import { IPerson } from "../../types/actor";
title: user?.email,
};
},
components: {
EmptyContent,
},
})
export default class AdminUserProfile extends Vue {
@Prop({ required: true }) id!: string;

View File

@ -53,6 +53,7 @@
id: 'begins-on-field',
'aria-next-label': $t('Next month'),
'aria-previous-label': $t('Previous month'),
'first-day-of-week': firstDayOfWeek,
}"
>
</b-datetimepicker>
@ -73,6 +74,7 @@
id: 'ends-on-field',
'aria-next-label': $t('Next month'),
'aria-previous-label': $t('Previous month'),
'first-day-of-week': firstDayOfWeek,
}"
>
</b-datetimepicker>
@ -1325,5 +1327,9 @@ export default class EditEvent extends Vue {
isOnline,
};
}
get firstDayOfWeek(): number {
return this.$dateFnsLocale?.options?.weekStartsOn || 0;
}
}
</script>

View File

@ -59,7 +59,10 @@
: $t('Showing events before')
"
>
<b-datepicker v-model="dateFilter" />
<b-datepicker
v-model="dateFilter"
:first-day-of-week="firstDayOfWeek"
/>
<b-button
@click="dateFilter = new Date()"
class="reset-area"
@ -473,6 +476,10 @@ export default class MyEvents extends Vue {
get hideCreateEventButton(): boolean {
return !!this.config?.restrictions?.onlyGroupsCanCreateEvents;
}
get firstDayOfWeek(): number {
return this.$dateFnsLocale?.options?.weekStartsOn || 0;
}
}
</script>

View File

@ -275,7 +275,7 @@ import EmptyContent from "@/components/Utils/EmptyContent.vue";
query: GROUP_MEMBERS,
variables() {
return {
name: this.$route.params.preferredUsername,
groupName: this.$route.params.preferredUsername,
page: this.page,
limit: this.MEMBERS_PER_PAGE,
roles: this.roles,
@ -325,7 +325,7 @@ export default class GroupMembers extends mixins(GroupMixin) {
this.inviteError = "";
const { roles, MEMBERS_PER_PAGE, group, page } = this;
const variables = {
name: usernameWithDomain(group),
groupName: usernameWithDomain(group),
page,
limit: MEMBERS_PER_PAGE,
roles,
@ -393,7 +393,7 @@ export default class GroupMembers extends mixins(GroupMixin) {
async removeMember(oldMember: IMember): Promise<void> {
const { roles, MEMBERS_PER_PAGE, group, page } = this;
const variables = {
name: usernameWithDomain(group),
groupName: usernameWithDomain(group),
page,
limit: MEMBERS_PER_PAGE,
roles,

File diff suppressed because it is too large Load Diff

View File

@ -21,7 +21,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Member do
{:ok, Page.t(Member.t())}
def find_members_for_group(
%Actor{id: group_id} = group,
%{page: page, limit: limit, roles: roles},
%{page: page, limit: limit, roles: roles} = args,
%{
context: %{current_user: %User{role: user_role}, current_actor: %Actor{id: actor_id}}
} = _resolution
@ -39,7 +39,9 @@ defmodule Mobilizon.GraphQL.Resolvers.Member do
|> Enum.map(&String.to_existing_atom/1)
end
%Page{} = page = Actors.list_members_for_group(group, roles, page, limit)
%Page{} =
page = Actors.list_members_for_group(group, Map.get(args, :name), roles, page, limit)
{:ok, page}
else
# Actor is not member of group, fallback to public

View File

@ -376,13 +376,14 @@ defmodule Mobilizon.GraphQL.Resolvers.User do
"""
def user_memberships(
%User{id: user_id},
%{page: page, limit: limit} = _args,
%{page: page, limit: limit} = args,
%{context: %{current_user: %User{id: logged_user_id}}}
) do
with true <- user_id == logged_user_id,
memberships <-
Actors.list_memberships_for_user(
user_id,
Map.get(args, :name),
page,
limit
) do

View File

@ -103,6 +103,7 @@ defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
)
field :members, :paginated_member_list do
arg(:name, :string, description: "A name to filter members by")
arg(:page, :integer, default_value: 1, description: "The page in the paginated member list")
arg(:limit, :integer, default_value: 10, description: "The limit of members per page")
arg(:roles, :string, default_value: "", description: "Filter members by their role")

View File

@ -85,6 +85,8 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
field(:memberships, :paginated_member_list,
description: "The list of memberships for this user"
) do
arg(:name, :string, description: "A name to filter members by")
arg(:page, :integer,
default_value: 1,
description: "The page in the paginated memberships list"

View File

@ -794,12 +794,14 @@ defmodule Mobilizon.Actors do
"""
@spec list_memberships_for_user(
integer,
String.t() | nil,
integer | nil,
integer | nil
) :: Page.t()
def list_memberships_for_user(user_id, page, limit) do
) :: Page.t(Member.t())
def list_memberships_for_user(user_id, name, page, limit) do
user_id
|> list_members_for_user_query()
|> filter_members_by_group_name(name)
|> Page.build_page(page, limit)
end
@ -827,12 +829,15 @@ defmodule Mobilizon.Actors do
Page.t(Member.t())
def list_members_for_group(
%Actor{id: group_id, type: :Group},
name \\ nil,
roles \\ [],
page \\ nil,
limit \\ nil
) do
group_id
|> members_for_group_query()
|> join_members_actor()
|> filter_members_by_actor_name(name)
|> filter_member_role(roles)
|> Page.build_page(page, limit)
end
@ -1380,13 +1385,10 @@ defmodule Mobilizon.Actors do
@spec list_members_for_user_query(integer()) :: Ecto.Query.t()
defp list_members_for_user_query(user_id) do
from(
m in Member,
join: a in Actor,
on: m.actor_id == a.id,
where: a.user_id == ^user_id and m.role != ^:not_approved,
preload: [:parent, :actor, :invited_by]
)
Member
|> join_members_actor()
|> where([m, a], a.user_id == ^user_id and m.role != ^:not_approved)
|> preload([:parent, :actor, :invited_by])
end
@spec members_for_actor_query(integer | String.t()) :: Ecto.Query.t()
@ -1446,6 +1448,28 @@ defmodule Mobilizon.Actors do
from(m in query, where: m.role == ^role)
end
@spec filter_members_by_actor_name(Ecto.Query.t(), String.t() | nil) :: Ecto.Query.t()
defp filter_members_by_actor_name(query, nil), do: query
defp filter_members_by_actor_name(query, ""), do: query
defp filter_members_by_actor_name(query, name) when is_binary(name) do
where(query, [_q, a], like(a.name, ^"%#{name}%") or like(a.preferred_username, ^"%#{name}%"))
end
defp filter_members_by_group_name(query, nil), do: query
defp filter_members_by_group_name(query, ""), do: query
defp filter_members_by_group_name(query, name) when is_binary(name) do
query
|> join(:inner, [q], a in Actor, on: q.parent_id == a.id)
|> where([_q, ..., a], like(a.name, ^"%#{name}%") or like(a.preferred_username, ^"%#{name}%"))
end
@spec join_members_actor(Ecto.Query.t()) :: Ecto.Query.t()
defp join_members_actor(query) do
join(query, :inner, [q], a in Actor, on: q.actor_id == a.id)
end
@spec administrator_members_for_group_query(integer | String.t()) :: Ecto.Query.t()
defp administrator_members_for_group_query(group_id) do
from(

View File

@ -100,7 +100,7 @@ defmodule Mobilizon.Web.ActivityPub.ActorView do
end
defp fetch_collection(:members, actor, page) do
Actors.list_members_for_group(actor, @selected_member_roles, page)
Actors.list_members_for_group(actor, nil, @selected_member_roles, page)
end
defp fetch_collection(:resources, actor, page) do

View File

@ -24,8 +24,7 @@
"decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"},
"dialyxir": {:hex, :dialyxir, "1.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"},
"doctor": {:hex, :doctor, "0.18.0", "114934c1740239953208a39db617699b7e2660770e81129d7f95cdf7837ab766", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "829c88c365f72c0666e443ea670ffb6f180de7b90c23d536edabdd8c722b88f4"},
"earmark": {:hex, :earmark, "1.4.16", "2188754e590a3c379fdd2783bb44eedd8c54968fa0256b6f336f6d56b089d793", [:mix], [{:earmark_parser, ">= 1.4.16", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "46f853f7ae10bee06923430dca522ba9dcbdc6b7a9729748e8dd5344d21b8418"},
"earmark_parser": {:hex, :earmark_parser, "1.4.17", "6f3c7e94170377ba45241d394389e800fb15adc5de51d0a3cd52ae766aafd63f", [:mix], [], "hexpm", "f93ac89c9feca61c165b264b5837bf82344d13bebc634cd575cb711e2e342023"},
"earmark_parser": {:hex, :earmark_parser, "1.4.18", "e1b2be73eb08a49fb032a0208bf647380682374a725dfb5b9e510def8397f6f2", [:mix], [], "hexpm", "114a0e85ec3cf9e04b811009e73c206394ffecfcc313e0b346de0d557774ee97"},
"eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"},
"ecto": {:hex, :ecto, "3.7.1", "a20598862351b29f80f285b21ec5297da1181c0442687f9b8329f0445d228892", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d36e5b39fc479e654cffd4dbe1865d9716e4a9b6311faff799b6f90ab81b8638"},
"ecto_autoslug_field": {:hex, :ecto_autoslug_field, "3.0.0", "37fbc2f07e6691136afff246f2cf5b159ad395b665a55d06db918975fd2397db", [:mix], [{:ecto, ">= 3.7.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:slugger, ">= 0.3.0", [hex: :slugger, repo: "hexpm", optional: false]}], "hexpm", "8ec252c7cf85f13132062f56a484d6a0ef1f981f7be9ce4ad7e9546dd8c0cc0f"},
@ -37,21 +36,19 @@
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
"erlport": {:hex, :erlport, "0.10.1", "c96ffa51bbcab0298232fcdfe8c3e110f1598011de71ae6b9082b80c9e2e476a", [:rebar3], [], "hexpm", "34931e8cb62a131d1bc8a2bd04d4007c73c03e4f10e22ee4a218e7172227a918"},
"eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"},
"ex_cldr": {:hex, :ex_cldr, "2.24.1", "159b55b29b2f32897689c4edfcf699761c28d626455642514794a4848c7092d5", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: true]}, {:cldr_utils, "~> 2.17", [hex: :cldr_utils, repo: "hexpm", optional: false]}, {:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:gettext, "~> 0.13", [hex: :gettext, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "82a44fab6a09f6481e8dd869c27f0cad783dfe5ff83cb7eef42d556a5134275e"},
"ex_cldr": {:hex, :ex_cldr, "2.24.2", "9ff995503074883993c373882a8b663e2680acd4aedb1b92838b36cb2a470bae", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: true]}, {:cldr_utils, "~> 2.17", [hex: :cldr_utils, repo: "hexpm", optional: false]}, {:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:gettext, "~> 0.13", [hex: :gettext, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "72e33b7bac19a24bf1918d519d0cb5ad33a56cd53faa89c65f5bf79b873d93bb"},
"ex_cldr_calendars": {:hex, :ex_cldr_calendars, "1.17.1", "1371b2769ea892aa1c85f60c1358bf3558c021d4e3e824e27efc89c5d5f121cd", [:mix], [{:calendar_interval, "~> 0.2", [hex: :calendar_interval, repo: "hexpm", optional: true]}, {:ex_cldr, "~> 2.24", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:ex_cldr_lists, "~> 2.9", [hex: :ex_cldr_lists, repo: "hexpm", optional: true]}, {:ex_cldr_units, "~> 3.8", [hex: :ex_cldr_units, repo: "hexpm", optional: true]}, {:ex_doc, "~> 0.21", [hex: :ex_doc, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "0d57e476e8042f240ed4b8baeef0f12b7b8a4e22e4da97a33e2a85b11adc7bb4"},
"ex_cldr_currencies": {:hex, :ex_cldr_currencies, "2.12.0", "933b188d3a529e4a1140aac44d1d563b5ed0028d76c66983d85134b5e8f15393", [:mix], [{:ex_cldr, "~> 2.24", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "245ee8fb459cdfaffbfbfe31f8924e8cc31f92a962640f14fc4c3ddaf1ab8f12"},
"ex_cldr_dates_times": {:hex, :ex_cldr_dates_times, "2.10.0", "88ef1369839e5faaea163b663f22133a2e05ca9c7266b700d993140439507603", [:mix], [{:calendar_interval, "~> 0.2", [hex: :calendar_interval, repo: "hexpm", optional: true]}, {:ex_cldr_calendars, "~> 1.17", [hex: :ex_cldr_calendars, repo: "hexpm", optional: false]}, {:ex_cldr_numbers, "~> 2.23", [hex: :ex_cldr_numbers, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "1c2072dd2f798393c48bb61217b14af89b1833b7601dd29a73a9254125679695"},
"ex_cldr_dates_times": {:hex, :ex_cldr_dates_times, "2.10.1", "a9670d9d9079bfa096e4b18fb3c10a2e2df3bc63d71a9cee19723d4c6b263fb5", [:mix], [{:calendar_interval, "~> 0.2", [hex: :calendar_interval, repo: "hexpm", optional: true]}, {:ex_cldr_calendars, "~> 1.17", [hex: :ex_cldr_calendars, repo: "hexpm", optional: false]}, {:ex_cldr_numbers, "~> 2.23", [hex: :ex_cldr_numbers, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "099084f7f5acc0c14435add29a0b57434537cc5727d9ceb28f299c459882cef2"},
"ex_cldr_languages": {:hex, :ex_cldr_languages, "0.3.0", "91df38c2f5e89177e22dc70110ab3b131af381ad1063d3e6835ed30fddd42ed2", [:mix], [{:ex_cldr, "~> 2.24.0", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "6b473e4d91b37c6b7d09f8ea8127c3431f855b20c546c733a1c43a4ec914197e"},
"ex_cldr_numbers": {:hex, :ex_cldr_numbers, "2.23.0", "f77f2bc7ba3a09c5491c8c0dec9485113beb03582578a7c6377f9519ab65fc76", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:ex_cldr, "~> 2.24", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:ex_cldr_currencies, "~> 2.12", [hex: :ex_cldr_currencies, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "163a5fb4ed374b8f0290ec1809db475f8f874aa456e7f9ea120fcdedc93b63f7"},
"ex_cldr_numbers": {:hex, :ex_cldr_numbers, "2.23.2", "f42ac05286b32e5ea6f812882c453062f137ab062bc4e18506303863ec1c52d7", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:ex_cldr, "~> 2.24", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:ex_cldr_currencies, "~> 2.12", [hex: :ex_cldr_currencies, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "5edcaffa52f7b6fd6a7b9c5428d4aa3306e19e059a05988c53e6600c0b10463d"},
"ex_doc": {:hex, :ex_doc, "0.26.0", "1922164bac0b18b02f84d6f69cab1b93bc3e870e2ad18d5dacb50a9e06b542a3", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "2775d66e494a9a48355db7867478ffd997864c61c65a47d31c4949459281c78d"},
"ex_ical": {:hex, :ex_ical, "0.2.0", "4b928b554614704016cc0c9ee226eb854da9327a1cc460457621ceacb1ac29a6", [:mix], [{:timex, "~> 3.1", [hex: :timex, repo: "hexpm", optional: false]}], "hexpm", "db76473b2ae0259e6633c6c479a5a4d8603f09497f55c88f9ef4d53d2b75befb"},
"ex_machina": {:hex, :ex_machina, "2.7.0", "b792cc3127fd0680fecdb6299235b4727a4944a09ff0fa904cc639272cd92dc7", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "419aa7a39bde11894c87a615c4ecaa52d8f107bbdd81d810465186f783245bf8"},
"ex_optimizer": {:hex, :ex_optimizer, "0.1.1", "62da37e206fc2233ff7a4e54e40eae365c40f96c81992fcd15b782eb25169b80", [:mix], [{:file_info, "~> 0.0.4", [hex: :file_info, repo: "hexpm", optional: false]}], "hexpm", "e6f5c059bcd58b66be2f6f257fdc4f69b74b0fa5c9ddd669486af012e4b52286"},
"ex_unit_notifier": {:hex, :ex_unit_notifier, "1.2.0", "73ced2ecee0f2da0705e372c21ce61e4e5d927ddb797f73928e52818b9cc1754", [:mix], [], "hexpm", "f38044c9d50de68ad7f0aec4d781a10d9f1c92c62b36bf0227ec0aaa96aee332"},
"exactor": {:hex, :exactor, "2.2.4", "5efb4ddeb2c48d9a1d7c9b465a6fffdd82300eb9618ece5d34c3334d5d7245b1", [:mix], [], "hexpm", "1222419f706e01bfa1095aec9acf6421367dcfab798a6f67c54cf784733cd6b5"},
"excoveralls": {:hex, :excoveralls, "0.14.4", "295498f1ae47bdc6dce59af9a585c381e1aefc63298d48172efaaa90c3d251db", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "e3ab02f2df4c1c7a519728a6f0a747e71d7d6e846020aae338173619217931c1"},
"exgravatar": {:hex, :exgravatar, "2.0.3", "2349709832ee535f826f48db98cddd294ae62b01acb44d539a16419bd8ebc3e5", [:mix], [], "hexpm", "aca18ff9bd8991d3be3e5446d3bdefc051be084c1ffc9ab2d43b3e65339300e1"},
"exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, repo: "hexpm", optional: false]}], "hexpm", "32e95820a97cffea67830e91514a2ad53b888850442d6d395f53a1ac60c82e07"},
"export": {:hex, :export, "0.1.1", "6dfd268b0692428f89b9285859a2dc02b6dcd2e8fdfbca34ac6e6a331351df91", [:mix], [{:erlport, "~> 0.9", [hex: :erlport, repo: "hexpm", optional: false]}], "hexpm", "3da7444ff4053f1824352f4bdb13fbd2c28c93c2011786fb686b649fdca1021f"},
"fast_html": {:hex, :fast_html, "2.0.4", "4910ee49f2f6b19692e3bf30bf97f1b6b7dac489cd6b0f34cd0fe3042c56ba30", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}], "hexpm", "3bb49d541dfc02ad5e425904f53376d758c09f89e521afc7d2b174b3227761ea"},
"fast_sanitize": {:hex, :fast_sanitize, "0.2.2", "3cbbaebaea6043865dfb5b4ecb0f1af066ad410a51470e353714b10c42007b81", [:mix], [{:fast_html, "~> 2.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "69f204db9250afa94a0d559d9110139850f57de2b081719fbafa1e9a89e94466"},
@ -79,7 +76,6 @@
"ip_reserved": {:hex, :ip_reserved, "0.1.1", "e5112d71f1abf05207f82fd9597d369a5fde1e0b6d1bbe77c02a99bb26ecdc33", [:mix], [{:inet_cidr, "~> 1.0.0", [hex: :inet_cidr, repo: "hexpm", optional: false]}], "hexpm", "55fcd2b6e211caef09ea3f54ef37d43030bec486325d12fe865ab5ed8140a4fe"},
"jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"},
"jose": {:hex, :jose, "1.11.2", "f4c018ccf4fdce22c71e44d471f15f723cb3efab5d909ab2ba202b5bf35557b3", [:mix, :rebar3], [], "hexpm", "98143fbc48d55f3a18daba82d34fe48959d44538e9697c08f34200fa5f0947d2"},
"jsx": {:hex, :jsx, "2.8.3", "a05252d381885240744d955fbe3cf810504eb2567164824e19303ea59eef62cf", [:mix, :rebar3], [], "hexpm", "fc3499fed7a726995aa659143a248534adc754ebd16ccd437cd93b649a95091f"},
"jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"},
"junit_formatter": {:hex, :junit_formatter, "3.3.0", "bd7914d92885f7cf949dbe1dc6bacf76badfb2c1f5f7b3f9433c20e5b6ec42c8", [:mix], [], "hexpm", "4d040410925324b155ae4c7d41e884a0cdebe53b917bee4f22adf152e987a666"},
"linkify": {:hex, :linkify, "0.5.1", "6dc415cbc948b2f6ecec7cb226aab7ba9d3a1815bb501ae33e042334d707ecee", [:mix], [], "hexpm", "a3128c7e22fada4aa7214009501d8131e1fa3faf2f0a68b33dba379dc84ff944"},
@ -104,7 +100,7 @@
"oban": {:hex, :oban, "2.10.1", "202a90f2aed0130b7d750bdbfea8090c8321bce255bade10fd3699733565add0", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "161cdd01194147cd6a3efdb1d6c3d9689309991412f799c1e242c18912e307c3"},
"paasaa": {:hex, :paasaa, "0.5.1", "58d8bf61902adfd1d04815a115f0eb3b996845c0360f1831854e21073411e822", [:mix], [], "hexpm", "571f1a33b8e184396a93fc18ee5331f2655c96ba9a6fc383dc675e4bc8fc7596"},
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},
"phoenix": {:hex, :phoenix, "1.6.2", "6cbd5c8ed7a797f25a919a37fafbc2fb1634c9cdb12a4448d7a5d0b26926f005", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7bbee475acae0c3abc229b7f189e210ea788e63bd168e585f60c299a4b2f9133"},
"phoenix": {:hex, :phoenix, "1.6.4", "bc9a757f0a4eac88e1e3501245a6259e74d30970df8c072836d755608dbc4c7d", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b6cb3f31e3ea1049049852703eca794f7afdb0c1dc111d8f166ba032c103a80"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"},
"phoenix_html": {:hex, :phoenix_html, "3.1.0", "0b499df05aad27160d697a9362f0e89fa0e24d3c7a9065c2bd9d38b4d1416c09", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "0c0a98a2cefa63433657983a2a594c7dee5927e4391e0f1bfd3a151d1def33fc"},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.3.3", "3a53772a6118d5679bf50fc1670505a290e32a1d195df9e069d8c53ab040c054", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "766796676e5f558dbae5d1bdb066849673e956005e3730dfd5affd7a6da4abac"},

View File

@ -415,32 +415,32 @@ msgstr ""
msgid "%{profile} created the resource %{resource} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:86
msgid "%{profile} archived the discussion %{discussion} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:26
msgid "%{profile} created the discussion %{discussion} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:101
msgid "%{profile} deleted the discussion %{discussion} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:56
msgid "%{profile} mentionned you in the discussion %{discussion} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:71
msgid "%{profile} renamed the discussion %{discussion} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:41
msgid "%{profile} replied to the discussion %{discussion} in group %{group}."
msgstr ""

View File

@ -1427,8 +1427,8 @@ msgstr ""
#. File name template for exported list of participants. Should NOT contain spaces. Make sure the output is going to be something standardized that is acceptable as a file name on most systems.
#. File name template for exported list of participants. Should NOT contain spaces. Make sure the output is going to be something standardized that is acceptable as a file name on most systems.
#, elixir-format
#: lib/service/export/participants/csv.ex:73
#: lib/service/export/participants/ods.ex:77 lib/service/export/participants/pdf.ex:91
#: lib/service/export/participants/csv.ex:81
#: lib/service/export/participants/ods.ex:86 lib/service/export/participants/pdf.ex:96
msgid "%{event}_participants"
msgstr ""

View File

@ -125,24 +125,24 @@ msgid "Cannot refresh the token"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:245
#: lib/graphql/resolvers/group.ex:252
msgid "Current profile is not a member of this group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:249
#: lib/graphql/resolvers/group.ex:256
msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:613
#: lib/graphql/resolvers/user.ex:612
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242
#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/group.ex:342
#: lib/graphql/resolvers/group.ex:391 lib/graphql/resolvers/member.ex:79
#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:249
#: lib/graphql/resolvers/group.ex:281 lib/graphql/resolvers/group.ex:318 lib/graphql/resolvers/group.ex:349
#: lib/graphql/resolvers/group.ex:398 lib/graphql/resolvers/member.ex:81
msgid "Group not found"
msgstr ""
@ -157,7 +157,7 @@ msgid "Impossible to authenticate, either your email or password are invalid."
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:308
#: lib/graphql/resolvers/group.ex:315
msgid "Member not found"
msgstr ""
@ -190,33 +190,33 @@ msgid "Registrations are not open"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:428
#: lib/graphql/resolvers/user.ex:429
msgid "The current password is invalid"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:471
#: lib/graphql/resolvers/user.ex:472
msgid "The new email doesn't seem to be valid"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:474
#: lib/graphql/resolvers/user.ex:475
msgid "The new email must be different"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:431
#: lib/graphql/resolvers/user.ex:432
msgid "The new password must be different"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:478 lib/graphql/resolvers/user.ex:540
#: lib/graphql/resolvers/user.ex:543
#: lib/graphql/resolvers/user.ex:479 lib/graphql/resolvers/user.ex:541
#: lib/graphql/resolvers/user.ex:544
msgid "The password provided is invalid"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:435
#: lib/graphql/resolvers/user.ex:436
msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters."
msgstr ""
@ -236,27 +236,27 @@ msgid "Unable to validate user"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:521
#: lib/graphql/resolvers/user.ex:522
msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:588
#: lib/graphql/resolvers/user.ex:587
msgid "User requested is not logged-in"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:280
#: lib/graphql/resolvers/group.ex:287
msgid "You are already a member of this group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:315
#: lib/graphql/resolvers/group.ex:322
msgid "You can't leave this group because you are the only administrator"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:277
#: lib/graphql/resolvers/group.ex:284
msgid "You cannot join this group"
msgstr ""
@ -266,37 +266,37 @@ msgid "You may not list groups unless moderator."
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:486
#: lib/graphql/resolvers/user.ex:487
msgid "You need to be logged-in to change your email"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:443
#: lib/graphql/resolvers/user.ex:444
msgid "You need to be logged-in to change your password"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:254
#: lib/graphql/resolvers/group.ex:261
msgid "You need to be logged-in to delete a group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:548
#: lib/graphql/resolvers/user.ex:549
msgid "You need to be logged-in to delete your account"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:285
#: lib/graphql/resolvers/group.ex:292
msgid "You need to be logged-in to join a group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:320
#: lib/graphql/resolvers/group.ex:327
msgid "You need to be logged-in to leave a group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:218
#: lib/graphql/resolvers/group.ex:225
msgid "You need to be logged-in to update a group"
msgstr ""
@ -462,12 +462,12 @@ msgid "Post doesn't exist"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:82
#: lib/graphql/resolvers/member.ex:84
msgid "Profile invited doesn't exist"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:91 lib/graphql/resolvers/member.ex:95
#: lib/graphql/resolvers/member.ex:93 lib/graphql/resolvers/member.ex:97
msgid "Profile is already a member of this group"
msgstr ""
@ -542,13 +542,13 @@ msgid "You are already a participant of this event"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:85
#: lib/graphql/resolvers/member.ex:87
msgid "You are not a member of this group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:155 lib/graphql/resolvers/member.ex:171
#: lib/graphql/resolvers/member.ex:186
#: lib/graphql/resolvers/member.ex:157 lib/graphql/resolvers/member.ex:173
#: lib/graphql/resolvers/member.ex:188
msgid "You are not a moderator or admin for this group"
msgstr ""
@ -584,7 +584,7 @@ msgid "You can't leave event because you're the only event creator participant"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:190
#: lib/graphql/resolvers/member.ex:192
msgid "You can't set yourself to a lower member role for this group because you are the only administrator"
msgstr ""
@ -599,7 +599,7 @@ msgid "You cannot delete this event"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:88
#: lib/graphql/resolvers/member.ex:90
msgid "You cannot invite to this group"
msgstr ""
@ -784,12 +784,12 @@ msgid "You need to be logged in"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:116
#: lib/graphql/resolvers/member.ex:118
msgid "You can't accept this invitation with this profile."
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:137
#: lib/graphql/resolvers/member.ex:139
msgid "You can't reject this invitation with this profile."
msgstr ""
@ -799,7 +799,7 @@ msgid "File doesn't have an allowed MIME type."
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:213
#: lib/graphql/resolvers/group.ex:220
msgid "Profile is not administrator for the group"
msgstr ""
@ -814,17 +814,17 @@ msgid "You can't attribute this event to this profile."
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:140
#: lib/graphql/resolvers/member.ex:142
msgid "This invitation doesn't exist."
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:215
#: lib/graphql/resolvers/member.ex:217
msgid "This member already has been rejected."
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:239
#: lib/graphql/resolvers/member.ex:241
msgid "You don't have the right to remove this member."
msgstr ""
@ -849,7 +849,7 @@ msgid "Profile ID provided is not the anonymous profile one"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201
#: lib/graphql/resolvers/group.ex:161 lib/graphql/resolvers/group.ex:203
#: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304
msgid "The provided picture is too heavy"
msgstr ""
@ -865,7 +865,7 @@ msgid "Error while creating resource"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:504
#: lib/graphql/resolvers/user.ex:505
msgid "Invalid activation token"
msgstr ""
@ -906,7 +906,7 @@ msgid "Error while creating a discussion"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:627
#: lib/graphql/resolvers/user.ex:626
msgid "Error while updating locale"
msgstr ""
@ -921,17 +921,17 @@ msgid "Failed to leave the event"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:209
#: lib/graphql/resolvers/group.ex:216
msgid "Failed to update the group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:468
#: lib/graphql/resolvers/user.ex:469
msgid "Failed to update user email"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:500
#: lib/graphql/resolvers/user.ex:501
msgid "Failed to validate user email"
msgstr ""
@ -951,7 +951,7 @@ msgid "You are not the comment creator"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:425
#: lib/graphql/resolvers/user.ex:426
msgid "You cannot change your password."
msgstr ""
@ -976,7 +976,7 @@ msgid "Export to format %{format} is not enabled on this instance"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:165
#: lib/graphql/resolvers/group.ex:167
msgid "Only admins can create groups"
msgstr ""
@ -991,17 +991,17 @@ msgid "Unknown error while creating event"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:481
#: lib/graphql/resolvers/user.ex:482
msgid "User cannot change email"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:364
#: lib/graphql/resolvers/group.ex:371
msgid "Follow does not match your account"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:368
#: lib/graphql/resolvers/group.ex:375
msgid "Follow not found"
msgstr ""
@ -1016,37 +1016,37 @@ msgid "This profile does not belong to you"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:338
#: lib/graphql/resolvers/group.ex:345
msgid "You are already following this group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:347
#: lib/graphql/resolvers/group.ex:354
msgid "You need to be logged-in to follow a group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:396
#: lib/graphql/resolvers/group.ex:403
msgid "You need to be logged-in to unfollow a group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:373
#: lib/graphql/resolvers/group.ex:380
msgid "You need to be logged-in to update a group follow"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:208
#: lib/graphql/resolvers/member.ex:210
msgid "This member does not exist"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:232
#: lib/graphql/resolvers/member.ex:234
msgid "You don't have the role needed to remove this member."
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/member.ex:250
#: lib/graphql/resolvers/member.ex:252
msgid "You must be logged-in to remove a member"
msgstr ""

View File

@ -409,32 +409,32 @@ msgstr ""
msgid "%{profile} created the resource %{resource} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:86
msgid "%{profile} archived the discussion %{discussion} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:26
msgid "%{profile} created the discussion %{discussion} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:101
msgid "%{profile} deleted the discussion %{discussion} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:56
msgid "%{profile} mentionned you in the discussion %{discussion} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:71
msgid "%{profile} renamed the discussion %{discussion} in group %{group}."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:41
msgid "%{profile} replied to the discussion %{discussion} in group %{group}."
msgstr ""

View File

@ -1406,8 +1406,8 @@ msgstr ""
#. File name template for exported list of participants. Should NOT contain spaces. Make sure the output is going to be something standardized that is acceptable as a file name on most systems.
#. File name template for exported list of participants. Should NOT contain spaces. Make sure the output is going to be something standardized that is acceptable as a file name on most systems.
#, elixir-format
#: lib/service/export/participants/csv.ex:73
#: lib/service/export/participants/ods.ex:77 lib/service/export/participants/pdf.ex:91
#: lib/service/export/participants/csv.ex:81
#: lib/service/export/participants/ods.ex:86 lib/service/export/participants/pdf.ex:96
msgid "%{event}_participants"
msgstr ""

View File

@ -99,24 +99,24 @@ msgid "Cannot refresh the token"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:245
#: lib/graphql/resolvers/group.ex:252
msgid "Current profile is not a member of this group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:249
#: lib/graphql/resolvers/group.ex:256
msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:613
#: lib/graphql/resolvers/user.ex:612
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242
#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/group.ex:342
#: lib/graphql/resolvers/group.ex:391 lib/graphql/resolvers/member.ex:79
#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:249
#: lib/graphql/resolvers/group.ex:281 lib/graphql/resolvers/group.ex:318 lib/graphql/resolvers/group.ex:349
#: lib/graphql/resolvers/group.ex:398 lib/graphql/resolvers/member.ex:81
msgid "Group not found"
msgstr ""
@ -131,7 +131,7 @@ msgid "Impossible to authenticate, either your email or password are invalid."
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:308
#: lib/graphql/resolvers/group.ex:315
msgid "Member not found"
msgstr ""
@ -164,33 +164,33 @@ msgid "Registrations are not open"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:428
#: lib/graphql/resolvers/user.ex:429
msgid "The current password is invalid"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:471
#: lib/graphql/resolvers/user.ex:472
msgid "The new email doesn't seem to be valid"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:474
#: lib/graphql/resolvers/user.ex:475
msgid "The new email must be different"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:431
#: lib/graphql/resolvers/user.ex:432
msgid "The new password must be different"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:478 lib/graphql/resolvers/user.ex:540
#: lib/graphql/resolvers/user.ex:543
#: lib/graphql/resolvers/user.ex:479 lib/graphql/resolvers/user.ex:541
#: lib/graphql/resolvers/user.ex:544
msgid "The password provided is invalid"
msgstr ""
#, elixir-format