diff --git a/.gitignore b/.gitignore index 5b7ebafb6..eb7d0c144 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ priv/data/* priv/errors/* !priv/errors/.gitkeep priv/cert/ +priv/python/__pycache__/ .vscode/ cover/ site/ @@ -37,6 +38,7 @@ test/uploads/ uploads/* release/ !uploads/.gitkeep +!uploads/exports/.gitkeep .idea *.mo *.po~ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 28f6f4443..42ff2ce16 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,6 +28,7 @@ variables: # Release elements PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}" ARCH: "amd64" + EXPORT_FORMATS: "csv,ods,pdf" cache: key: "${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}" diff --git a/.sobelow-skips b/.sobelow-skips index 28a98366b..0dda374a6 100644 --- a/.sobelow-skips +++ b/.sobelow-skips @@ -8,4 +8,5 @@ 73B351E4CB3AF715AD450A085F5E6304 BBACD7F0BACD4A6D3010C26604671692 6D4D4A4821B93BCFAC9CDBB367B34C4B -5674F0D127852889ED0132DC2F442AAB \ No newline at end of file +5674F0D127852889ED0132DC2F442AAB +1600B7206E47F630D94AB54C360906F0 \ No newline at end of file diff --git a/config/config.exs b/config/config.exs index 92d02872f..0264d95c9 100644 --- a/config/config.exs +++ b/config/config.exs @@ -285,6 +285,7 @@ config :mobilizon, Oban, {"17 4 * * *", Mobilizon.Service.Workers.RefreshGroups, queue: :background}, {"@hourly", Mobilizon.Service.Workers.CleanOrphanMediaWorker, queue: :background}, {"@hourly", Mobilizon.Service.Workers.CleanUnconfirmedUsersWorker, queue: :background}, + {"@hourly", Mobilizon.Service.Workers.ExportCleanerWorker, queue: :background}, {"@hourly", Mobilizon.Service.Workers.SendActivityRecapWorker, queue: :notifications}, {"@daily", Mobilizon.Service.Workers.CleanOldActivityWorker, queue: :background} ]}, @@ -320,6 +321,11 @@ config :mobilizon, Mobilizon.Service.Notifier.Email, enabled: true config :mobilizon, Mobilizon.Service.Notifier.Push, enabled: true +config :mobilizon, :exports, + formats: [ + Mobilizon.Service.Export.Participants.CSV + ] + # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{config_env()}.exs" diff --git a/docker/tests/Dockerfile b/docker/tests/Dockerfile index 3a6673b1a..6a1d09758 100644 --- a/docker/tests/Dockerfile +++ b/docker/tests/Dockerfile @@ -1,10 +1,15 @@ FROM elixir:latest LABEL maintainer="Thomas Citharel " -ENV REFRESHED_AT=2021-06-07 -RUN apt-get update -yq && apt-get install -yq build-essential inotify-tools postgresql-client git curl gnupg xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 cmake exiftool +ENV REFRESHED_AT=2021-10-04 +RUN apt-get update -yq && apt-get install -yq build-essential inotify-tools postgresql-client git curl gnupg xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 cmake exiftool python3-pip python3-setuptools RUN curl -sL https://deb.nodesource.com/setup_16.x | bash && apt-get install nodejs -yq RUN npm install -g yarn wait-on RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* RUN mix local.hex --force && mix local.rebar --force +# Weasyprint 53 requires pango >= 1.44.0, which is not available in Stretch. +# TODO: Remove the version requirement when elixir:latest is based on Bullseye +# https://github.com/erlang/docker-erlang-otp/issues/362 +# https://github.com/Kozea/WeasyPrint/issues/1384 +RUN pip3 install -Iv weasyprint==52 pyexcel_ods3 RUN curl https://dbip.mirror.framasoft.org/files/dbip-city-lite-latest.mmdb --output GeoLite2-City.mmdb -s && mkdir -p /usr/share/GeoIP && mv GeoLite2-City.mmdb /usr/share/GeoIP/ diff --git a/js/src/graphql/config.ts b/js/src/graphql/config.ts index 3089b6f8c..99a54c7a3 100644 --- a/js/src/graphql/config.ts +++ b/js/src/graphql/config.ts @@ -175,3 +175,13 @@ export const WEB_PUSH = gql` } } `; + +export const EVENT_PARTICIPANTS = gql` + query EventParticipants { + config { + exportFormats { + eventParticipants + } + } + } +`; diff --git a/js/src/graphql/event.ts b/js/src/graphql/event.ts index 4f1e82769..0e6ebcb7d 100644 --- a/js/src/graphql/event.ts +++ b/js/src/graphql/event.ts @@ -574,3 +574,13 @@ export const CLOSE_EVENTS = gql` } } `; + +export const EXPORT_EVENT_PARTICIPATIONS = gql` + mutation ExportEventParticipants( + $eventId: ID! + $format: ExportFormatEnum + $roles: [ParticipantRoleEnum] + ) { + exportEventParticipants(eventId: $eventId, format: $format, roles: $roles) + } +`; diff --git a/js/src/types/config.model.ts b/js/src/types/config.model.ts index f135458fe..cc4d65a10 100644 --- a/js/src/types/config.model.ts +++ b/js/src/types/config.model.ts @@ -102,4 +102,7 @@ export interface IConfig { enabled: boolean; publicKey: string; }; + exportFormats: { + eventParticipants: string[]; + }; } diff --git a/js/src/views/Event/Participants.vue b/js/src/views/Event/Participants.vue index 328a9dc74..906113098 100644 --- a/js/src/views/Event/Participants.vue +++ b/js/src/views/Event/Participants.vue @@ -1,235 +1,255 @@