decidim-direct_verifications 0.22 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -3
  3. data/app/assets/config/direct_verifications_admin_manifest.css +3 -0
  4. data/app/assets/stylesheets/decidim/direct_verifications/authorizations.scss +17 -0
  5. data/app/commands/decidim/direct_verifications/verification/create_import.rb +50 -0
  6. data/app/controllers/decidim/direct_verifications/verification/admin/authorizations_controller.rb +40 -0
  7. data/app/controllers/decidim/direct_verifications/verification/admin/direct_verifications_controller.rb +22 -20
  8. data/app/controllers/decidim/direct_verifications/verification/admin/imports_controller.rb +55 -0
  9. data/app/forms/decidim/direct_verifications/registration_form.rb +8 -0
  10. data/app/forms/decidim/direct_verifications/verification/create_import_form.rb +43 -0
  11. data/app/jobs/decidim/direct_verifications/authorize_users_job.rb +34 -0
  12. data/app/jobs/decidim/direct_verifications/base_import_job.rb +38 -0
  13. data/app/jobs/decidim/direct_verifications/register_users_job.rb +19 -0
  14. data/app/jobs/decidim/direct_verifications/revoke_users_job.rb +17 -0
  15. data/app/mailers/decidim/direct_verifications/import_mailer.rb +27 -0
  16. data/app/mailers/decidim/direct_verifications/stats.rb +23 -0
  17. data/app/views/decidim/direct_verifications/import_mailer/finished_processing.html.erb +7 -0
  18. data/app/views/decidim/direct_verifications/import_mailer/finished_processing.text.erb +7 -0
  19. data/app/views/decidim/direct_verifications/verification/admin/authorizations/index.html.erb +42 -0
  20. data/app/views/decidim/direct_verifications/verification/admin/direct_verifications/index.html.erb +4 -3
  21. data/app/views/decidim/direct_verifications/verification/admin/imports/new.html.erb +50 -0
  22. data/config/initializers/mail_previews.rb +5 -0
  23. data/config/locales/ca.yml +56 -27
  24. data/config/locales/cs.yml +77 -0
  25. data/config/locales/en.yml +44 -13
  26. data/config/locales/es.yml +56 -28
  27. data/config/locales/fr.yml +80 -0
  28. data/lib/decidim/direct_verifications/authorize_user.rb +64 -0
  29. data/lib/decidim/direct_verifications/instrumenter.rb +58 -0
  30. data/lib/decidim/direct_verifications/parsers/base_parser.rb +37 -0
  31. data/lib/decidim/direct_verifications/parsers/metadata_parser.rb +54 -0
  32. data/lib/decidim/direct_verifications/parsers/name_parser.rb +40 -0
  33. data/lib/decidim/direct_verifications/parsers.rb +11 -0
  34. data/lib/decidim/direct_verifications/register_user.rb +54 -0
  35. data/lib/decidim/direct_verifications/revoke_user.rb +45 -0
  36. data/lib/decidim/direct_verifications/tests/factories.rb +11 -0
  37. data/lib/decidim/direct_verifications/tests/verification_controller_examples.rb +13 -8
  38. data/lib/decidim/direct_verifications/user_processor.rb +17 -101
  39. data/lib/decidim/direct_verifications/user_stats.rb +5 -5
  40. data/lib/decidim/direct_verifications/verification/admin_engine.rb +6 -1
  41. data/lib/decidim/direct_verifications/version.rb +3 -3
  42. data/lib/decidim/direct_verifications.rb +24 -1
  43. metadata +37 -9
  44. data/lib/decidim/direct_verifications/config.rb +0 -23
@@ -0,0 +1,50 @@
1
+ <div class="card">
2
+ <div class="card-divider">
3
+ <h2 class="card-title">
4
+ <%= t("admin.index.title", scope: "decidim.direct_verifications.verification") %>
5
+ <%= link_to t("admin.index.stats", scope: "decidim.direct_verifications.verification"), stats_path, class: "button tiny button--title" %>
6
+ <%= link_to t("admin.index.authorizations", scope: "decidim.direct_verifications.verification"), authorizations_path, class: "button tiny button--title" %>
7
+ </h2>
8
+ </div>
9
+ <div class="card-section">
10
+ <p><%= t("decidim.direct_verifications.verification.admin.imports.new.info") %></p>
11
+ <pre class="code-block">
12
+ <strong>email, name, membership_phone, membership_type, membership_weight</strong>
13
+ ava@example.com, Ava Hawkins, +3476318371, consumer, 1
14
+ ewan@example.com, Ewan Cooper, +34653565765, worker, 1
15
+ tilly@example.com, Tilly Jones, +34653565761, collaborator, 0.67
16
+ ...
17
+ </pre>
18
+
19
+ <%= decidim_form_for(@form, url: imports_path, html: { class: "form" }) do |form| %>
20
+ <label>
21
+ <%= check_box_tag :register %>
22
+ <%= t("admin.new.register", scope: "decidim.direct_verifications.verification") %>
23
+ <div data-alert class="callout alert hide">
24
+ <%= t("admin.direct_verifications.gdpr_disclaimer", scope: "decidim.direct_verifications.verification") %>
25
+ </div>
26
+ </label>
27
+ <label>
28
+ <%= radio_button_tag :authorize, "in" %>
29
+ <%= t("admin.new.authorize", scope: "decidim.direct_verifications.verification") %>
30
+ </label>
31
+ <label>
32
+ <%= radio_button_tag :authorize, "out" %>
33
+ <%= t("admin.new.revoke", scope: "decidim.direct_verifications.verification") %>
34
+ </label>
35
+ <label>
36
+ <%= radio_button_tag :authorize, "check", true %>
37
+ <%= t("admin.new.check", scope: "decidim.direct_verifications.verification") %>
38
+ </label>
39
+
40
+ <%= label_tag :authorization_handler, t("admin.new.authorization_handler", scope: "decidim.direct_verifications.verification") %>
41
+ <%= select_tag :authorization_handler, options_for_select(workflows, current_authorization_handler) %>
42
+
43
+ <%= form.file_field :file, label: t(".file") %>
44
+ <%= form.submit t(".submit"), class: "button" %>
45
+ <% end %>
46
+
47
+ </div>
48
+ </div>
49
+
50
+ <%= javascript_include_tag "decidim/direct_verifications/verification/admin/direct_verifications_admin" %>
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rails.application.configure do
4
+ config.action_mailer.preview_path = Decidim::DirectVerifications::Verification::Engine.root.join("spec/mailers")
5
+ end
@@ -11,54 +11,83 @@ ca:
11
11
  admin:
12
12
  direct_verifications:
13
13
  help:
14
- - 'Permet la introducció massiva d''usuaris per tal de:'
15
- - Registrar-los directament a la organització amb l'enviament d'invitacions
16
- - Verificar-los en qualsevol mètode de verificació actiu
17
- - Revocar la verificació en qualsevol mètode de verificació actiu
14
+ - 'Permet la introducció massiva de participants per tal de:'
15
+ - Registrar-les directament a la organització amb l'enviament d'invitacions
16
+ - Verificar-les amb qualsevol mètode de verificació actiu
17
+ - Revocar la verificació amb qualsevol mètode de verificació actiu
18
18
  direct_verifications:
19
- explanation: Verificació manual per par dels administradors de l'organització
19
+ explanation: Verificació manual per part de les administradores de l'organització
20
20
  name: Verificació directa
21
21
  direct_verifications:
22
22
  verification:
23
23
  admin:
24
+ authorizations:
25
+ index:
26
+ created_at: Data de creació
27
+ metadata: Metadades
28
+ name: Nom
29
+ new_import: Nova importació
30
+ title: Autoritzacions
31
+ user_name: Nom de la participant
24
32
  direct_verifications:
25
33
  create:
26
- authorized: S'han verificat correctament %{authorized} usuaris utilitzant
34
+ authorized: S'han verificat correctament %{authorized} participants utilitzant
27
35
  [%{handler}] (%{count} detectats, %{errors} errors)
28
- info: S'han detectat %{count} usuaris, dels quals %{registered} estan
29
- registrats, %{authorized} autoritzats utilitzant [%{handler}] (%{unconfirmed}
36
+ info: S'han detectat %{count} participants, de les quals %{registered} estan
37
+ registrades, %{authorized} autoritzades utilitzant [%{handler}] (%{unconfirmed}
30
38
  sense confirmar)
31
- registered: S'han registrat correctament %{registered} usuaris (%{count}
32
- detectats, %{errors} errors)
33
- revoked: S'ha revocat correctament la verificació de %{revoked} usuaris
34
- utilitzant [%{handler}] (%{count} detectats, %{errors} errors)
39
+ missing_header: Si us plau, proporcioneu una fila d'encapçalament
40
+ registered: S'han registrat correctament %{registered} participants (%{count}
41
+ detectades, %{errors} errors)
42
+ revoked: S'ha revocat correctament la verificació de %{revoked} participants
43
+ utilitzant [%{handler}] (%{count} detectades, %{errors} errors)
35
44
  gdpr_disclaimer: Feu-ho sota la vostra responsabilitat. Recordeu que heu
36
- de tenir el consentiment explícit dels vostres usuaris per registrar-los.
45
+ de tenir el consentiment explícit de les vostres participants per a registrar-les.
37
46
  En cas contrari, estareu infringint la regulació GDPR als països de
38
47
  la UE.
48
+ imports:
49
+ create:
50
+ error: No s'ha pogut importar el fitxer
51
+ success: S'ha importat el fitxer. Rebràs un email quan totes les participants hagin estat importades.
52
+ mailer:
53
+ authorized: "%{successful} participants han estat verificades utilitzant
54
+ [%{handler}] (%{count} detectades, %{errors} errors)"
55
+ info: "%{count} participants detectades, de les quals %{registered} estan registrades,
56
+ %{authorized} autoritzades utilitzant [%{handler}] (%{unconfirmed} sense confirmar)"
57
+ registered: "%{successful} participants han estat registrades (%{count}
58
+ detectades, %{errors} errors) "
59
+ revoked: S'ha revocat correctament la verificació de %{successful} participants utilitzant
60
+ [%{handler}] (%{count} detectades, %{errors} errors)
61
+ subject: Resultats de la importació
62
+ new:
63
+ file: Fitxer CSV amb dades de participants
64
+ info: Importa un fitxer CSV file amb una participant per línia copiant el format de l'exemple següent
65
+ submit: Pujar fitxer
39
66
  index:
40
- stats: Estadístiques d'usuaris
41
- title: Inscriu i autoritza usuaris
67
+ authorizations: Participants autoritzades
68
+ stats: Estadístiques de les participants
69
+ title: Inscriu i autoritza participants
42
70
  new:
43
71
  authorization_handler: Mètode de verificació
44
- authorize: Autoritza els usuaris
45
- check: Comprova l'estat dels usuaris
46
- info: Introdueix aquí els emails, un per línia. Si els emails estan precedits
47
- per un text, s'interpretarà com el nom de l'usuari
48
- register: Registra els usuaris a la plataforma (si existeixen s'ignoraran)
49
- revoke: Revoca l'autorització dels usuaris
72
+ authorize: Autoritza les participants
73
+ check: Comprova l'estat de les participants
74
+ info_html: Pots <a href=%{link}>importar un fitxer CSV</a> o introduir els emails
75
+ aquí, un per línia. Si els emails estan precedits
76
+ per un text, aquest s'interpretarà com el nom de la participant
77
+ register: Registra les participants a la plataforma (si existeixen s'ignoraran)
78
+ revoke: Revoca l'autorització de les participants
50
79
  submit: Envia i processa el llistat
51
- textarea: Llista d''emails
80
+ textarea: Llistat d'emails
52
81
  stats:
53
82
  index:
54
- authorized: Verificats
55
- authorized_unconfirmed: Verificats però no confirmats
83
+ authorized: Verificades
84
+ authorized_unconfirmed: Verificades però no confirmades
56
85
  global: "- Qualsevol mètode de verificació -"
57
- registered: Registrats
58
- unconfirmed: No confirmats
86
+ registered: Registrades
87
+ unconfirmed: No confirmades
59
88
  authorizations:
60
89
  new:
61
- no_action: Aquest mètode requereix que un administrador us verifiqui
90
+ no_action: Aquest mètode requereix que una administradora us verifiqui
62
91
  verifications:
63
92
  authorizations:
64
93
  first_login:
@@ -0,0 +1,77 @@
1
+ ---
2
+ cs:
3
+ decidim:
4
+ admin:
5
+ models:
6
+ user:
7
+ fields:
8
+ roles:
9
+ participant: Účastník
10
+ authorization_handlers:
11
+ admin:
12
+ direct_verifications:
13
+ help:
14
+ - 'Umožňuje masivní zavedení uživatelů:'
15
+ - Přímá registrace v organizaci a odeslání pozvánek
16
+ - Ověřit je pomocí jakékoliv metody aktivního ověření
17
+ - Zrušit jejich ověření pomocí jakékoli metody aktivního ověření
18
+ direct_verifications:
19
+ explanation: Ruční ověření správcem organizace
20
+ name: Přímé ověření
21
+ direct_verifications:
22
+ verification:
23
+ admin:
24
+ authorizations:
25
+ index:
26
+ created_at: Vytvořeno v
27
+ metadata: Metadata
28
+ name: Název
29
+ new_import: Nový import
30
+ title: Autorizace
31
+ user_name: Uživatelské jméno
32
+ direct_verifications:
33
+ create:
34
+ authorized: "%{authorized} uživatelů bylo úspěšně ověřeno pomocí [%{handler}]
35
+ (%{count} detekováno, %{errors} chyb)"
36
+ info: Zjištěno %{count} uživatelů, z nichž %{registered} jsou registrováni,
37
+ %{authorized} autorizováni pomocí [%{handler}] (%{unconfirmed} nepotvrzeno)
38
+ registered: "%{registered} uživatelů bylo úspěšně zaregistrováno (%{count}
39
+ detekováno, %{errors} chyb) "
40
+ revoked: Ověření od %{revoked} uživatelů bylo zrušeno pomocí [%{handler}]
41
+ (%{count} detekováno, %{errors} chyb)
42
+ gdpr_disclaimer: Udělejte to v rámci vaší odpovědnosti. Nezapomeňte, že
43
+ potřebujete mít výslovný souhlas svých uživatelů, abyste je mohli zaregistrovat.
44
+ V opačném případě můžete porušovat nařízení o GDPR v zemích EU.
45
+ index:
46
+ authorizations: Autorizovaní uživatelé
47
+ stats: Statistiky uživatelů
48
+ title: Registrovat a autorizovat uživatele
49
+ new:
50
+ authorization_handler: Ověřovací metoda
51
+ authorize: Autorizovat uživatele
52
+ check: Zkontrolovat stav uživatelů
53
+ info: Zadejte e-maily zde, jeden na řádek. Pokud e-mailům předchází text,
54
+ bude interpretován jako jméno uživatele
55
+ register: Registrovat uživatele na platformě (pokud existují, budou ignorováni)
56
+ revoke: Zrušit autorizaci od uživatelů
57
+ submit: Odeslat a zpracovat seznam
58
+ textarea: Seznam e-mailů
59
+ stats:
60
+ index:
61
+ authorized: Autorizováno
62
+ authorized_unconfirmed: Autorizováno, ale nepotvrzeno
63
+ global: "- Jakákoli metoda ověřování -"
64
+ registered: Registrován
65
+ unconfirmed: Nepotvrzeno
66
+ authorizations:
67
+ new:
68
+ no_action: Tato metoda vyžaduje administrátora, který vás ověřuje
69
+ verifications:
70
+ authorizations:
71
+ first_login:
72
+ actions:
73
+ direct_verifications: Přímé ověření
74
+ devise:
75
+ mailer:
76
+ direct_invite:
77
+ subject: Pokyny pro pozvání
@@ -11,7 +11,7 @@ en:
11
11
  admin:
12
12
  direct_verifications:
13
13
  help:
14
- - 'Allows the massive introduction of users in order to:'
14
+ - 'Allows the massive introduction of participants in order to:'
15
15
  - Direct register in the organization and sends invitations
16
16
  - Verify them in any active verification method
17
17
  - Revoke their verification in any active verification method
@@ -21,30 +21,61 @@ en:
21
21
  direct_verifications:
22
22
  verification:
23
23
  admin:
24
+ authorizations:
25
+ index:
26
+ created_at: Created at
27
+ metadata: Metadata
28
+ name: Name
29
+ new_import: New import
30
+ title: Authorizations
31
+ user_name: Participant name
24
32
  direct_verifications:
25
33
  create:
26
- authorized: "%{authorized} users have been successfully verified using
34
+ authorized: "%{authorized} participants have been successfully verified using
27
35
  [%{handler}] (%{count} detected, %{errors} errors)"
28
- info: "%{count} users detected, of which %{registered} are registered,
36
+ info: "%{count} participants detected, of which %{registered} are registered,
29
37
  %{authorized} authorized using [%{handler}] (%{unconfirmed} unconfirmed)"
30
- registered: "%{registered} users have been successfully registered (%{count}
38
+ missing_header: Please, provide a header row
39
+ registered: "%{registered} participants have been successfully registered (%{count}
31
40
  detected, %{errors} errors) "
32
- revoked: Verification from %{revoked} users have been revoked using
41
+ revoked: Verification from %{revoked} participants have been revoked using
33
42
  [%{handler}] (%{count} detected, %{errors} errors)
34
43
  gdpr_disclaimer: Do this under your responsibility. Remember that you
35
- need to have explicit consent from your users in order to register them.
44
+ need to have explicit consent from your participants in order to register them.
36
45
  Otherwise you will be infringing the GDPR regulation in EU countries.
46
+ imports:
47
+ create:
48
+ error: There was an error importing the file
49
+ success: File successfully uploaded. We'll email you when all participants
50
+ are imported.
51
+ mailer:
52
+ authorized: "%{successful} participants have been successfully verified using
53
+ [%{handler}] (%{count} detected, %{errors} errors)"
54
+ info: "%{count} participants detected, of which %{registered} are registered,
55
+ %{authorized} authorized using [%{handler}] (%{unconfirmed} unconfirmed)"
56
+ registered: "%{successful} participants have been successfully registered (%{count}
57
+ detected, %{errors} errors) "
58
+ revoked: Verification from %{successful} participants have been revoked using
59
+ [%{handler}] (%{count} detected, %{errors} errors)
60
+ subject: File import results
61
+ new:
62
+ file: CSV file with participants data
63
+ info: Import a CSV file with a participant entry per line copying the format
64
+ from the example below
65
+ submit: Upload file
37
66
  index:
67
+ authorizations: Authorized participants
38
68
  stats: User stats
39
- title: Register and authorize users
69
+ title: Register and authorize participants
40
70
  new:
41
71
  authorization_handler: Verification method
42
- authorize: Authorize users
43
- check: Check users status
44
- info: Enter the emails here, one per line. If the emails are preceded
45
- by a text, it will be interpreted as the user's name
46
- register: Register users in the platform (if they exist they will be ignored)
47
- revoke: Revoke authorization from users
72
+ authorize: Authorize participants
73
+ check: Check participants status
74
+ info_html: You can <a href=%{link}>import a CSV</a> or enter the emails
75
+ here, one per line. If the emails are preceded by a text, it will be
76
+ interpreted as the participant's name.
77
+ register: Register participants in the platform (if they exist they will be ignored)
78
+ revoke: Revoke authorization from participants
48
79
  submit: Send and process the list
49
80
  textarea: Emails list
50
81
  stats:
@@ -11,54 +11,82 @@ es:
11
11
  admin:
12
12
  direct_verifications:
13
13
  help:
14
- - 'Permite la introducción masiva d usuarios con el fin de:'
15
- - Registrarlos directamente a la organización con el envío de invitaciones
16
- - Verificarlos en cualquier método de verificación activo
17
- - Revocar la verificación en cualquier método de verificación activo
14
+ - 'Permite la introducción masiva de participantes con el fin de:'
15
+ - Registrarlas directamente en la organización con el envío de invitaciones
16
+ - Verificarlas con cualquier método de verificación activo
17
+ - Revocar la verificación con cualquier método de verificación activo
18
18
  direct_verifications:
19
- explanation: Verificación manual por parte de los administradores de la organización
19
+ explanation: Verificación manual por parte de las administradoras de la organización
20
20
  name: Verificación directa
21
21
  direct_verifications:
22
22
  verification:
23
23
  admin:
24
+ authorizations:
25
+ index:
26
+ created_at: Creado el
27
+ metadata: Metadatos
28
+ name: Nombre
29
+ new_import: Nueva importación
30
+ title: Autorizaciones
31
+ user_name: Nombre de la participante
24
32
  direct_verifications:
25
33
  create:
26
- authorized: Se han verificado correctamente %{authorized} usuarios usando
27
- [%{handler}] (%{count} detectados, %{errors} errores)
28
- info: Se han detectado %{count} usuarios, de los cuales %{registered}
29
- están registrados, %{authorized} autorizados usando [%{handler}] (%{unconfirmed}
34
+ authorized: Se han verificado correctamente %{authorized} participantes usando
35
+ [%{handler}] (%{count} detectadas, %{errors} errores)
36
+ info: Se han detectado %{count} participantes, de las cuales %{registered}
37
+ están registradas, %{authorized} autorizadas usando [%{handler}] (%{unconfirmed}
30
38
  sin confirmar)
31
- registered: Se han registrado correctamente %{registered} usuarios (%{count}
32
- detectados, %{errors} errores)
33
- revoked: Se ha revocado correctament la verificación de %{revoked} usuarios
34
- usando [%{handler}] (%{count} detectados, %{errors} errores)
35
- gdpr_disclaimer: Haga esto bajo su responsabilidad. Recuerde que debe
36
- contar con el consentimiento explícito de sus usuarios para poder registrarlos.
37
- De lo contrario, estará infringiendo la regulación GDPR en los países
39
+ missing_header: Por favor, proporciona una fila de encabezamiento
40
+ registered: Se han registrado correctamente %{registered} participantes (%{count}
41
+ detectadas, %{errors} errores)
42
+ revoked: Se ha revocado correctamente la verificación de %{revoked} participantes
43
+ usando [%{handler}] (%{count} detectadas, %{errors} errores)
44
+ gdpr_disclaimer: Haz esto bajo tu responsabilidad. Recuerda que debes
45
+ contar con el consentimiento explícito de las participantes para poder registrarlas.
46
+ De lo contrario, estarás infringiendo la regulación GDPR en los países
38
47
  de la UE.
48
+ imports:
49
+ create:
50
+ error: Ha habido un error al importar el archivo.
51
+ success: Se ha importado el archivo. Recibirás un email cuando todas las participantes hayan sido importadas.
52
+ mailer:
53
+ authorized: "%{successful} participantes han sido verificadas usando
54
+ [%{handler}] (%{count} detectades, %{errors} errores)"
55
+ info: "%{count} participantes detectadas, de las cuales %{registered} están registradas,
56
+ %{authorized} autorizadas usando [%{handler}] (%{unconfirmed} sin confirmar)"
57
+ registered: "%{successful} participantes han sido registradas (%{count}
58
+ detectadas, %{errors} errores) "
59
+ revoked: Se ha revocado correctamente la verificación de %{successful} participantes usando
60
+ [%{handler}] (%{count} detectadas, %{errors} errores)
61
+ subject: Resultados de la importación
62
+ new:
63
+ file: Archivo CSV con datos de participantes
64
+ info: Importa un archivo CSV con una participante por línea copiando el formato del siguiente ejemplo
65
+ submit: Subir archivo
39
66
  index:
40
- stats: Estadísticas de usuarios
41
- title: Inscribe y autoriza usuarios
67
+ authorizations: Participantes autorizadas
68
+ stats: Estadísticas de participantes
69
+ title: Inscribe y autoriza participantes
42
70
  new:
43
71
  authorization_handler: Método de verificación
44
- authorize: Autoriza los usuarios
45
- check: Comprueba el estado de los usuarios
46
- info: Introduce aquí los emails, uno por linea. Si los emails están precedidos
47
- por un texto, se interpretará como el nombre del usuario
48
- register: Registra los usuarios a la plataforma (si existen se ignorarán)
49
- revoke: Revoca la autorización de los usuarios
72
+ authorize: Autoriza las participantes
73
+ check: Comprueba el estado de las participantes
74
+ info_html: Puedes <a href=%{link}>importar un fichero CSV</a> o introducir aquí los emails, uno por linea. Si los emails están precedidos
75
+ por un texto, éste se interpretará como el nombre de la participante
76
+ register: Registra las participantes a la plataforma (si existen se ignorarán)
77
+ revoke: Revoca la autorización de las participantes
50
78
  submit: Envía y procesa el listado
51
79
  textarea: Lista de emails
52
80
  stats:
53
81
  index:
54
- authorized: Verificados
55
- authorized_unconfirmed: Verificados pero sin confirmar
82
+ authorized: Verificadas
83
+ authorized_unconfirmed: Verificadas pero sin confirmar
56
84
  global: "- Cualquier método de verificación -"
57
- registered: Registrados
85
+ registered: Registradas
58
86
  unconfirmed: Sin confirmar
59
87
  authorizations:
60
88
  new:
61
- no_action: Este método requiere que un administrador os verifique
89
+ no_action: Este método requiere que una administradora os verifique
62
90
  verifications:
63
91
  authorizations:
64
92
  first_login:
@@ -0,0 +1,80 @@
1
+ ---
2
+ fr:
3
+ decidim:
4
+ admin:
5
+ models:
6
+ user:
7
+ fields:
8
+ roles:
9
+ participant: Participant
10
+ authorization_handlers:
11
+ admin:
12
+ direct_verifications:
13
+ help:
14
+ - 'Permet l''introduction massive des utilisateurs afin de :'
15
+ - Inscription directe au sein de l'organisation et envoie des invitations
16
+ - Vérifiez-les avec n'importe quelle méthode de vérification active
17
+ - Révoquer leur vérification dans toute méthode de vérification active
18
+ direct_verifications:
19
+ explanation: Vérification manuelle par les administrateurs de l'organisation
20
+ name: Vérification directe
21
+ direct_verifications:
22
+ verification:
23
+ admin:
24
+ authorizations:
25
+ index:
26
+ created_at: Créé à
27
+ metadata: Métadonnées
28
+ name: Nom
29
+ new_import: Nouvel import
30
+ title: Autorisations
31
+ user_name: Nom de l'utilisateur
32
+ direct_verifications:
33
+ create:
34
+ authorized: "%{authorized} utilisateurs ont été vérifiés avec succès
35
+ en utilisant [%{handler}] (%{count} détectés, %{errors} erreurs)"
36
+ info: "%{count} utilisateurs détectés, dont %{registered} sont enregistrés,
37
+ %{authorized} autorisés à utiliser [%{handler}] (%{unconfirmed} non
38
+ confirmés)"
39
+ registered: "%{registered} utilisateurs ont été enregistrés avec succès
40
+ (%{count} détectés, %{errors} erreurs) "
41
+ revoked: La vérification de %{revoked} utilisateurs ont été révoqués
42
+ en utilisant [%{handler}] (%{count} détectés, %{errors} erreurs)
43
+ gdpr_disclaimer: Faites-le sous votre responsabilité. N'oubliez pas que
44
+ vous devez avoir le consentement explicite de vos utilisateurs afin
45
+ de les enregistrer. Dans le cas contraire, vous enfreindrez le règlement
46
+ du RGPD dans les pays de l'UE.
47
+ index:
48
+ authorizations: Utilisateurs autorisés
49
+ stats: Statistiques des utilisateurs
50
+ title: Inscription et autorisation des utilisateurs
51
+ new:
52
+ authorization_handler: Méthode de vérification
53
+ authorize: Utilisateurs autorisés
54
+ check: Vérifier le statut des utilisateurs
55
+ info: Entrez les e-mails ici, un par ligne. Si les e-mails sont précédés
56
+ d'un texte, il sera interprété comme le nom de l'utilisateur
57
+ register: Inscrire des utilisateurs sur la plateforme (si ils existent,
58
+ ils seront ignorés)
59
+ revoke: Révoquer l'autorisation des utilisateurs
60
+ submit: Envoyer et traiter la liste
61
+ textarea: Liste d'emails
62
+ stats:
63
+ index:
64
+ authorized: Autorisé
65
+ authorized_unconfirmed: Autorisé mais non confirmé
66
+ global: "- N'importe quelle méthode de vérification -"
67
+ registered: Inscrits
68
+ unconfirmed: Non confirmé
69
+ authorizations:
70
+ new:
71
+ no_action: Cette méthode nécessite un administrateur qui vous vérifie
72
+ verifications:
73
+ authorizations:
74
+ first_login:
75
+ actions:
76
+ direct_verifications: Vérification directe
77
+ devise:
78
+ mailer:
79
+ direct_invite:
80
+ subject: Instructions d'invitation
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DirectVerifications
5
+ class AuthorizeUser
6
+ # rubocop:disable Metrics/ParameterLists
7
+ def initialize(email, data, session, organization, instrumenter, authorization_handler)
8
+ @email = email
9
+ @data = data
10
+ @session = session
11
+ @organization = organization
12
+ @instrumenter = instrumenter
13
+ @authorization_handler = authorization_handler
14
+ end
15
+ # rubocop:enable Metrics/ParameterLists
16
+
17
+ def call
18
+ unless user
19
+ instrumenter.add_error :authorized, email
20
+ return
21
+ end
22
+
23
+ return unless valid_authorization?
24
+
25
+ Verification::ConfirmUserAuthorization.call(authorization, form, session) do
26
+ on(:ok) do
27
+ instrumenter.add_processed :authorized, email
28
+ end
29
+ on(:invalid) do
30
+ instrumenter.add_error :authorized, email
31
+ end
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ attr_reader :email, :data, :session, :organization, :instrumenter, :authorization_handler
38
+
39
+ def valid_authorization?
40
+ !authorization.granted? || authorization.expired?
41
+ end
42
+
43
+ def user
44
+ @user ||= User.find_by(email: email, decidim_organization_id: organization.id)
45
+ end
46
+
47
+ def authorization
48
+ @authorization ||=
49
+ begin
50
+ auth = Authorization.find_or_initialize_by(
51
+ user: user,
52
+ name: authorization_handler
53
+ )
54
+ auth.metadata = data
55
+ auth
56
+ end
57
+ end
58
+
59
+ def form
60
+ Verification::DirectVerificationsForm.new(email: user.email, name: user.name)
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DirectVerifications
5
+ class Instrumenter
6
+ def initialize(current_user)
7
+ @current_user = current_user
8
+ @errors = { registered: Set.new, authorized: Set.new, revoked: Set.new }
9
+ @processed = { registered: Set.new, authorized: Set.new, revoked: Set.new }
10
+ end
11
+
12
+ def add_processed(type, email)
13
+ @processed[type] << email
14
+ end
15
+
16
+ def add_error(type, email)
17
+ @errors[type] << email
18
+ end
19
+
20
+ def processed_count(key)
21
+ processed[key].size
22
+ end
23
+
24
+ def errors_count(key)
25
+ errors[key].size
26
+ end
27
+
28
+ def emails_count(key)
29
+ @processed[key].size + @errors[key].size
30
+ end
31
+
32
+ def track(event, email, user = nil)
33
+ if user
34
+ add_processed event, email
35
+ log_action user
36
+ else
37
+ add_error event, email
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ attr_reader :current_user, :processed, :errors
44
+
45
+ def log_action(user)
46
+ Decidim.traceability.perform_action!(
47
+ "invite",
48
+ user,
49
+ current_user,
50
+ extra: {
51
+ invited_user_role: "participant",
52
+ invited_user_id: user.id
53
+ }
54
+ )
55
+ end
56
+ end
57
+ end
58
+ end