decidim-decidim_awesome 0.11.2 → 0.11.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/README.md +54 -2
  4. data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +5 -3
  5. data/app/cells/decidim/decidim_awesome/content_blocks/map_cell.rb +0 -4
  6. data/app/cells/decidim/decidim_awesome/voting/proposal_metadata_cell.rb +18 -3
  7. data/app/commands/concerns/decidim/decidim_awesome/proposals/create_proposal_override.rb +2 -2
  8. data/app/commands/concerns/decidim/decidim_awesome/system/register_organization_override.rb +29 -0
  9. data/app/commands/concerns/decidim/decidim_awesome/system/update_organization_override.rb +35 -0
  10. data/app/commands/concerns/decidim/decidim_awesome/update_account_override.rb +30 -0
  11. data/app/commands/decidim/decidim_awesome/admin/create_scoped_style.rb +3 -2
  12. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb +6 -4
  13. data/app/controllers/concerns/decidim/decidim_awesome/check_login_authorizations.rb +60 -0
  14. data/app/controllers/concerns/decidim/decidim_awesome/needs_awesome_config.rb +0 -2
  15. data/app/controllers/concerns/decidim/decidim_awesome/proposals/memoize_extra_fields.rb +23 -0
  16. data/app/controllers/concerns/decidim/decidim_awesome/use_user_time_zone.rb +32 -0
  17. data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +122 -0
  18. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +1 -1
  19. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +7 -1
  20. data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +5 -1
  21. data/app/controllers/decidim/decidim_awesome/admin/scoped_styles_controller.rb +12 -4
  22. data/app/controllers/decidim/decidim_awesome/required_authorizations_controller.rb +58 -0
  23. data/app/forms/concerns/decidim/decidim_awesome/account_form_override.rb +25 -0
  24. data/app/forms/concerns/decidim/decidim_awesome/system/organization_form_override.rb +34 -0
  25. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +41 -8
  26. data/app/helpers/decidim/decidim_awesome/map_helper.rb +28 -26
  27. data/app/overrides/decidim/account/show/add_timezone_select.html.erb.deface +3 -0
  28. data/app/overrides/decidim/admin/officializations/index/add_modal.html.erb.deface +3 -0
  29. data/app/overrides/decidim/admin/officializations/index/add_td.html.erb.deface +5 -0
  30. data/app/overrides/decidim/admin/officializations/index/add_th.html.erb.deface +5 -0
  31. data/app/overrides/decidim/system/organizations/_advanced_settings/add_awesome_config.html.erb.deface +9 -0
  32. data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +1 -1
  33. data/app/overrides/layouts/decidim/admin/_header/add_awesome_custom_styles.html.erb.deface +3 -0
  34. data/app/overrides/layouts/decidim/admin/_header/add_awesome_tags.html.erb.deface +1 -0
  35. data/app/packs/src/decidim/decidim_awesome/admin/proposal_sortings.js +0 -5
  36. data/app/packs/src/decidim/decidim_awesome/admin/verification_selects.js +21 -0
  37. data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +43 -0
  38. data/app/packs/src/decidim/decidim_awesome/awesome_admin.js +1 -0
  39. data/app/packs/src/decidim/decidim_awesome/awesome_admin_global.js +1 -0
  40. data/app/packs/stylesheets/decidim/decidim_awesome/admin/verifications.scss +99 -0
  41. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_admin_global.scss +1 -0
  42. data/app/permissions/decidim/decidim_awesome/admin/permissions.rb +42 -11
  43. data/app/permissions/decidim/decidim_awesome/permissions.rb +7 -0
  44. data/app/presenters/decidim/decidim_awesome/admin_log/component_presenter_override.rb +3 -5
  45. data/app/presenters/decidim/decidim_awesome/admin_log/user_presenter_override.rb +46 -0
  46. data/app/views/decidim/decidim_awesome/account/_timezone_select.html.erb +3 -0
  47. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/authorization.html.erb +20 -0
  48. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +3 -0
  49. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +5 -0
  50. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +41 -0
  51. data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_admin_styles.html.erb +1 -0
  52. data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +48 -0
  53. data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +8 -0
  54. data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +15 -0
  55. data/app/views/decidim/decidim_awesome/admin/constraints/no_permissions.html.erb +6 -0
  56. data/app/views/decidim/decidim_awesome/admin/officializations/_participants_td.html.erb +25 -0
  57. data/app/views/decidim/decidim_awesome/admin/officializations/_participants_th.html.erb +1 -0
  58. data/app/views/decidim/decidim_awesome/admin/officializations/_verification_modal.html.erb +9 -0
  59. data/app/views/decidim/decidim_awesome/required_authorizations/index.html.erb +66 -0
  60. data/app/views/decidim/decidim_awesome/system/organizations/_admin_allowed_authorizations.html.erb +5 -0
  61. data/app/views/layouts/decidim/decidim_awesome/_custom_styles.html.erb +1 -1
  62. data/app/views/layouts/decidim/decidim_awesome/admin/_custom_styles.html.erb +3 -0
  63. data/app/views/layouts/decidim/decidim_awesome/admin/admin_authorizations.html.erb +7 -0
  64. data/config/i18n-tasks.yml +6 -0
  65. data/config/locales/ca.yml +91 -5
  66. data/config/locales/cs.yml +86 -0
  67. data/config/locales/de.yml +52 -0
  68. data/config/locales/en.yml +115 -1
  69. data/config/locales/es.yml +89 -3
  70. data/config/locales/eu.yml +607 -26
  71. data/config/locales/fr.yml +37 -1
  72. data/config/locales/it.yml +0 -1
  73. data/config/locales/ja.yml +86 -0
  74. data/config/locales/nl.yml +0 -1
  75. data/config/locales/pt-BR.yml +0 -1
  76. data/lib/decidim/decidim_awesome/admin_engine.rb +2 -0
  77. data/lib/decidim/decidim_awesome/authorizator.rb +34 -0
  78. data/lib/decidim/decidim_awesome/awesome.rb +54 -1
  79. data/lib/decidim/decidim_awesome/awesome_helpers.rb +48 -19
  80. data/lib/decidim/decidim_awesome/checksums.yml +9 -0
  81. data/lib/decidim/decidim_awesome/engine.rb +20 -4
  82. data/lib/decidim/decidim_awesome/menu.rb +45 -9
  83. data/lib/decidim/decidim_awesome/request_memoizer.rb +16 -0
  84. data/lib/decidim/decidim_awesome/test/factories.rb +0 -4
  85. data/lib/decidim/decidim_awesome/test/initializer.rb +4 -0
  86. data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +1 -1
  87. data/lib/decidim/decidim_awesome/test/shared_examples/custom_styles_examples.rb +156 -0
  88. data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +26 -10
  89. data/lib/decidim/decidim_awesome/version.rb +1 -1
  90. data/package.json +6 -5
  91. metadata +42 -7
  92. data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +0 -30
@@ -19,8 +19,10 @@ fr:
19
19
  intergram_use_floating_button: Si coché, la conversation fermée est toujours un bouton au lieu d'un texte
20
20
  proposal_custom_fields: Champs personnalisés %{id}
21
21
  proposal_private_custom_fields: Champs privés personnalisés %{id}
22
+ scoped_admin_styles: Style personnalisés %{id}
22
23
  scoped_admins: Groupe d'administrateurs restreints %{id}
23
24
  scoped_styles: Style personnalisés %{id}
25
+ user_timezone: Autoriser les utilisateurs à définir leur fuseau horaire dans leur profil
24
26
  validate_body_max_caps_percent: Pourcentage maximum autorisé de lettres majuscules pour la description
25
27
  validate_body_max_marks_together: Nombre maximum de caractères spéciaux autorisés dans le corps
26
28
  validate_body_min_length: Nombre de caractères minimum pour le corps
@@ -46,6 +48,8 @@ fr:
46
48
  target: Ouvrir dans
47
49
  url: URL
48
50
  visibility: Visibilité
51
+ user:
52
+ user_time_zone: Fuseau horaire personnel
49
53
  decidim:
50
54
  admin:
51
55
  actions:
@@ -132,6 +136,9 @@ fr:
132
136
  supported_last: A supporter en priorité
133
137
  za: Z-A (alphabétique inverse)
134
138
  decidim_awesome:
139
+ account:
140
+ timezone_select:
141
+ time_zone_helper: Utilisez votre fuseau horaire personnel pour afficher les dates dans votre heure locale lorsque vous êtes connecté.
135
142
  admin:
136
143
  actions: Actions
137
144
  admin_accountability:
@@ -242,9 +249,12 @@ fr:
242
249
  %{warning}
243
250
  Ce texte peut être personnalisé avec une traduction personnalisée en utilisant la clé:
244
251
  %{key}
252
+ scoped_admin_styles: Soyez conscient que cacher des éléments pourrait rendre l'interface administrateur inutilisable. Agissez avec prudence.
253
+ scoped_admin_styles_variables: 'Vous pouvez utiliser les variables CSS suivantes pour les couleurs personnalisées de l''organisation :'
245
254
  scoped_admins: Promouvoir les utilisateurs réguliers en administrateurs qui ne peuvent administrer que certaines parties de la plateforme (utilisez l'éditeur de restrictions pour cela). Notez que les utilisateurs qui ont déjà les permissions d'administration habituelles seront ignorés.
246
255
  scoped_styles: Créer un CSS personnalisé qui s'applique uniquement à certaines parties du site web public (front-end) (utilisez l'éditeur de restrictions pour cela)
247
256
  scoped_styles_variables: 'Vous pouvez utiliser les variables CSS suivantes pour les couleurs personnalisées de l''organisation :'
257
+ user_timezone: Ceci va ajouter un champ de sélection dans le profil de l'utilisateur pour définir son fuseau horaire. Ceci sera utilisé pour afficher les dates et les heures dans l'heure locale de l'utilisateur.
248
258
  validate_body_max_caps_percent: Zéro n'autorisera aucune lettre majuscule, 100 forcera à tout écrire en majuscule
249
259
  validate_body_max_marks_together: 'Limiter le nombre de points d''interrogation et d''exclamation qui peuvent être écrits ensemble. Par exemple : si c''est 2, alors ''!!!'' ne sera pas autorisé dans le texte'
250
260
  validate_body_min_length: Ce nombre peut être zéro, ce qui rendra ce champ non obligatoire
@@ -264,6 +274,11 @@ fr:
264
274
  new: Ajouter une nouvelle section de champs personnalisés
265
275
  remove: Supprimer cette boîte de champs personnalisés
266
276
  sure_to_remove: Êtes-vous sûr de vouloir supprimer ce champ ?
277
+ form_scoped_admin_styles:
278
+ delete: Supprimer
279
+ new: Ajouter un nouveau bloc CSS "tableau de bord admin"
280
+ remove: Supprimer ce bloc CSS
281
+ sure_to_remove: Êtes-vous sûr de vouloir supprimer ce bloc CSS ?
267
282
  form_scoped_admins:
268
283
  delete: Supprimer
269
284
  new: Ajouter un nouveau groupe "Administrateurs de secteur"
@@ -271,7 +286,7 @@ fr:
271
286
  sure_to_remove: Êtes-vous sûr de vouloir détruire ce groupe « Administrateurs de secteur »?
272
287
  form_scoped_styles:
273
288
  delete: Supprimer
274
- new: Ajouter une nouvelle boîte CSS
289
+ new: Ajouter un nouveau bloc CSS "interface publique"
275
290
  remove: Supprimer cette boîte CSS
276
291
  sure_to_remove: Etes-vous sûr de vouloir supprimer cette boîte CSS ?
277
292
  none: "⛔ Jamais! - Désactive toute autre contrainte"
@@ -287,6 +302,8 @@ fr:
287
302
  proposal_custom_fields: 'Champs personnalisés de propositions : champs publics'
288
303
  proposal_private_custom_fields: 'Champs personnalisés de propositions : champs privés'
289
304
  proposals: Hacks pour les propositions
305
+ scoped_admin_styles: 'Styles personnalisés : Tableau de bord admin'
306
+ scoped_styles: 'Styles personnalisés : Interface publique'
290
307
  styles: Styles personnalisés
291
308
  surveys: Enquêtes et formulaires
292
309
  update:
@@ -393,6 +410,7 @@ fr:
393
410
  proposals: Hacks pour les propositions
394
411
  styles: Styles personnalisés
395
412
  surveys: Enquêtes et formulaires
413
+ verifications: Vérifications
396
414
  menu_hacks:
397
415
  create:
398
416
  error: Erreur lors de la création de l'élément de menu ! %{error}
@@ -431,6 +449,11 @@ fr:
431
449
  error: Erreur lors de la mise à jour de l'élément de menu ! %{error}
432
450
  success: Élément de menu mis à jour avec succès
433
451
  url_exists: La même URL est déjà configurée, veuillez la modifier au lieu de la créer à nouveau.
452
+ officializations:
453
+ authorizations: Autorisations
454
+ verification_modal:
455
+ authorizations_for: Autorisations pour %{user}
456
+ close: Fermer
434
457
  proposal_custom_fields:
435
458
  menu:
436
459
  title: Champs publiques
@@ -439,6 +462,12 @@ fr:
439
462
  private_data_last_update: Ces données ont été mises à jour il y a %{time_ago}.
440
463
  proposal_private_custom_fields: Champs privés
441
464
  remove_private_data: "👉 Vous pouvez le supprimer"
465
+ scoped_admin_styles:
466
+ menu:
467
+ title: Tableau de bord admin
468
+ scoped_styles:
469
+ menu:
470
+ title: Interface publique
442
471
  admin_log:
443
472
  component:
444
473
  destroy_private_data: "%{user_name} a détruit les objets %{count} de données privées pour %{resource_name} dans %{space_name}"
@@ -506,6 +535,13 @@ fr:
506
535
  view_meeting: Voir la rencontre
507
536
  view_proposal: Voir la proposition
508
537
  proposal_private_custom_fields_disclosure: Cette information ne sera pas publiée
538
+ required_authorizations:
539
+ index:
540
+ cancel: Je vais le faire ultérieurement, %{link}.
541
+ granted_title: Vérifications accordées
542
+ missing_title: Pas encore vérifié
543
+ resume_title: Vérifications en attente
544
+ title: Vérifiez votre identité
509
545
  validators:
510
546
  too_much_caps: Utilise trop de majuscule (plus de %{percent} du texte)
511
547
  voting:
@@ -247,7 +247,6 @@ it:
247
247
  sure_to_remove: Sei sicuro di voler eliminare questo gruppo "Amministratori con ambito"?
248
248
  form_scoped_styles:
249
249
  delete: Elimina
250
- new: Aggiungi un nuovo box CSS
251
250
  remove: Rimuovi questo box CSS
252
251
  sure_to_remove: Sei sicura di voler distruggere questo box CSS?
253
252
  none: "⛔ Mai! - Disattiva ogni altro vincolo"
@@ -7,6 +7,9 @@ ja:
7
7
  allow_images_in_proposals: 提案エディターでの画像を許可する
8
8
  allow_videos_in_editors: HTMLエディターで動画を許可する
9
9
  auto_save_forms: ローカルストレージにフォームを自動保存する
10
+ force_authorization_after_login: ログイン/登録後に本人確認を行わせる
11
+ force_authorization_help_text: 認証ページのヘルプテキスト
12
+ force_authorization_with_any_method: いずれかの認証が行われている場合、アクセスできます (デフォルトでは、すべてが必要です)
10
13
  intergram_auto_no_response: ユーザーが最初のメッセージを送信し、応答が受信されなかった後1分後に送信されたメッセージ
11
14
  intergram_auto_response: ユーザーが最初のメッセージを送信した直後に送信されるメッセージ
12
15
  intergram_chat_id: チャットID
@@ -19,8 +22,10 @@ ja:
19
22
  intergram_use_floating_button: チェックした場合、閉じたチャットは常にテキストの代わりにボタンになります
20
23
  proposal_custom_fields: 'カスタム項目 #%{id}'
21
24
  proposal_private_custom_fields: 非公開カスタムフィールド %{id}
25
+ scoped_admin_styles: カスタムスタイル %{id}
22
26
  scoped_admins: 'スコープ付き管理者グループ #%{id}'
23
27
  scoped_styles: 'カスタムスタイル #%{id}'
28
+ user_timezone: ユーザーが自分のプロフィールでタイムゾーンを設定できるようにします
24
29
  validate_body_max_caps_percent: 本文内での大文字の最大許容割合
25
30
  validate_body_max_marks_together: 本文で許容される最多連続記号文字数
26
31
  validate_body_min_length: 本文に必要な最小文字数
@@ -46,6 +51,10 @@ ja:
46
51
  target: リンク先
47
52
  url: URL
48
53
  visibility: 表示・非表示
54
+ organization:
55
+ awesome_admins_available_authorizations: 管理者がこれらの認証を持つユーザーを手動で検証できるようにします
56
+ user:
57
+ user_time_zone: 個人のタイムゾーン
49
58
  decidim:
50
59
  admin:
51
60
  actions:
@@ -132,6 +141,9 @@ ja:
132
141
  supported_last: 最後にサポートした順
133
142
  za: Z-A (アルファベット逆順)
134
143
  decidim_awesome:
144
+ account:
145
+ timezone_select:
146
+ time_zone_helper: ログインしている地域の時間帯の日付を表示するために個人のタイムゾーンを使用します。
135
147
  admin:
136
148
  actions: アクション
137
149
  admin_accountability:
@@ -170,6 +182,26 @@ ja:
170
182
  collaborator: コラボレーター
171
183
  moderator: モデレーター
172
184
  valuator: 評価者
185
+ admin_authorizations:
186
+ authorization:
187
+ confirm_destroy: この認証を破棄してもよろしいですか?ユーザーのプラットフォームへのアクセスに影響する可能性があります。
188
+ destroy: 破棄
189
+ granted_at: '許可日時: %{date}'
190
+ metadata: メタデータを含みますか? %{metadata}
191
+ authorization_destroyed: 認証を破棄しました。
192
+ authorization_not_destroyed: 認証を破壊できませんでした
193
+ authorization_transferred: '警告:検証が競合していたため、検証は %{user} に転送されました'
194
+ conflict: 既存の認証との競合があります
195
+ conflict_help_html: "この認証を行う前に、ユーザー%{user} との競合を解決する必要があります。\n <br><br>\n検証の競合は、別のユーザーが認証しようとしているユーザーと同じデータを持っている場合に発生します。\nこの競合は、他のユーザーから競合している認証を削除するか、このユーザーに対して異なるデータを使用することで解決できます。\n"
196
+ edit:
197
+ authorize: '%{user} を %{name} で本人確認'
198
+ do_it_if_sure: ユーザーがこの権限を持っていると確認されている場合のみこれを行ってください
199
+ force_verification: 現在のデータで強制的に検証する
200
+ force_verification_help: 検証に失敗しましたが、ユーザーがこの認証を取得していることを確認している場合は強制できます。
201
+ force_verification_reason: '検証を強制する理由を教えてください:'
202
+ warning: '警告: この認証を強制することで、ユーザーの現在の認証ステータスを上書きします。'
203
+ user_authorized: "%{user} が %{name} で本人確認されました"
204
+ user_not_authorized: "%{user} は %{name} で本人確認されていません"
173
205
  checks:
174
206
  index:
175
207
  admin_head_tags: 管理者向けアプリケーションヘッダーに含まれる Awesome tags
@@ -230,6 +262,8 @@ ja:
230
262
  allow_videos_in_editors: すべてのWYSIWYGエディタに動画リンクアイコンを追加します
231
263
  auto_save_forms: 調査などのフォームにユーザーが入力したデータを、LocalStorageを使って自動的に保存します。フォームを送信されていない場合、同じブラウザーで次回アクセスした時に復元されます。フォームを送信すると、データは削除されます。ユーザーがLocalStrorageのデータを削除した場合にも、データは復元されなくなります。
232
264
  drag_and_drop_supported: 画像アップロード時にドラッグ&ドロップが利用できます。画像はサーバーにアップロードされ、外部リソースとして挿入されます(base64インラインエンコーディングは使用しません).
265
+ force_authorization_after_login: '有効にした場合、指定された認証が行われていなければ、ユーザーはログインまたは登録後に認証ページにリダイレクトされます。これはユーザーがログインする前に、特定の認証を使用してユーザーを強制的に本人確認させる場合(スパムを防ぐためなど) に便利です。'
266
+ force_authorization_help_text: 認証が必要な理由を説明するカスタムテキストを追加します。また、ユーザーがヘルプが必要な場合に備えて連絡方法を追加してください。
233
267
  intergram_about: IntergramはTelegramメッセンジャーを使用してページの下部に埋め込まれたライブサポートチャットウィジェットを処理します。
234
268
  intergram_config: '<a href="https://web.telegram.org/#/im?p=@IntergramBot">@Intergram bot</a> をグループに招待するか、直接チャットを開始します。 <a href="https://github.com/idoco/intergram#embed-intergram-in-your-website-with-these-2-simple-steps">+ info</a>'
235
269
  original_editor_override: バージョン 0.26 以降、エディタに画像をアップロードすることが可能になりました(管理者専用)。 そのため、ここでの画像設定はパブリックエディタにのみ影響を与えます(管理者は常に利用可能です)。
@@ -242,15 +276,23 @@ ja:
242
276
  %{warning}
243
277
  このテキストは、下記のキーを使用してカスタム翻訳でカスタマイズできます:
244
278
  %{key}
279
+ scoped_admin_styles: ここを隠すと管理者が使用できなくなる可能性があります。ご注意ください。
280
+ scoped_admin_styles_variables: '組織のカスタマイズ色には、以下の CSS 変数を使用できます。'
281
+ scoped_admin_styles_warning: "<strong>警告</strong>: ここでは、この管理者にのみ適用されるカスタム CSS を追加します。"
245
282
  scoped_admins: 一般ユーザーを公開ウェブの特定の部分だけを管理できる管理者に昇格させます(制限エディターを使用してください)。 すでに通常の管理者権限を持つユーザーは無視されることに注意してください。
246
283
  scoped_styles: 公開ウェブの特定の部分にのみ適用されるカスタムCSSを作成します (制限されたエディタを使用してください)
247
284
  scoped_styles_variables: '組織の色のカスタマイズには、以下のCSS変数が使用できます。'
285
+ user_timezone: ユーザープロファイルにタイムゾーンを設定する選択ボックスを追加します. これは、ユーザーのローカル時間の日付と時刻を表示するために使われます.
248
286
  validate_body_max_caps_percent: ゼロの場合大文字を許可しません。100の場合すべてを大文字で書くことを強制します。
249
287
  validate_body_max_marks_together: '並べて入力できる「?」と「!」の数を制限します。 すなわち、それが2の場合、「!!!」はテキストに記入できません'
250
288
  validate_body_min_length: この数字はゼロにできます。その場合、このフィールドを必須ではなくする効果があります。
251
289
  validate_title_max_caps_percent: ゼロの場合大文字を許可しません。100の場合すべてを大文字で書くことを強制します。
252
290
  validate_title_max_marks_together: '並べて入力できる「?」と「!」の数を制限します。 すなわち、それが2の場合、「!!!」はテキストに記入できません'
253
291
  validate_title_min_length: タイトルは常に必須です。この数字はゼロにはできません
292
+ verifications_html: |
293
+ 認証プロセスにいくつかの調整を加えることができます。<br>
294
+ <b>注意:</b> これらの設定を変更すると、一部のユーザーがプラットフォームにアクセスできなくなる可能性があります。慎重に使用してください!<br><br>
295
+ また、これらの設定は全ユーザーに適用されますが、管理者は常に管理者バックエンドにアクセス可能です。
254
296
  validators:
255
297
  body: '「body」フィールドのユーザー入力検証'
256
298
  title: '「タイトル」フィールドのユーザー入力検証'
@@ -264,6 +306,11 @@ ja:
264
306
  new: 新しい「非公開カスタムフィールド」を追加
265
307
  remove: '「非公開カスタムフィールド」を削除'
266
308
  sure_to_remove: この非公開フィールドボックスを破棄してもよろしいですか?
309
+ form_scoped_admin_styles:
310
+ delete: 削除
311
+ new: 新しい「管理画面」CSSボックスを追加
312
+ remove: このCSSボックスを削除
313
+ sure_to_remove: このCSSボックスを削除してもよろしいですか?
267
314
  form_scoped_admins:
268
315
  delete: 削除
269
316
  new: 新しい「スコープ付き管理者」グループを追加
@@ -287,8 +334,11 @@ ja:
287
334
  proposal_custom_fields: '提案カスタムフィールド: 公開フィールド'
288
335
  proposal_private_custom_fields: '提案カスタムフィールド: 非公開フィールド'
289
336
  proposals: 提案の設定
337
+ scoped_admin_styles: 'カスタムスタイル: 管理画面'
338
+ scoped_styles: 'カスタムスタイル: 公開フロントエンド'
290
339
  styles: 独自スタイル
291
340
  surveys: 調査&フォーム
341
+ verifications: 本人確認 / 認証の設定
292
342
  update:
293
343
  error: 設定更新エラー %{error}
294
344
  success: 設定は正常に更新されました
@@ -394,6 +444,7 @@ ja:
394
444
  proposals: 提案の設定
395
445
  styles: 独自スタイル
396
446
  surveys: 調査&フォーム
447
+ verifications: 本人認証
397
448
  menu_hacks:
398
449
  create:
399
450
  error: メニュー項目作成エラー %{error}
@@ -432,6 +483,11 @@ ja:
432
483
  error: メニュー項目更新エラー %{error}
433
484
  success: メニュー項目は正常に更新されました
434
485
  url_exists: 同じURLがすでに設定されています。もう一度作成し直す前に、内容を修正してください。
486
+ officializations:
487
+ authorizations: 認証
488
+ verification_modal:
489
+ authorizations_for: '%{user} の本人確認'
490
+ close: 閉じる
435
491
  proposal_custom_fields:
436
492
  menu:
437
493
  title: 公開フィールド
@@ -440,9 +496,19 @@ ja:
440
496
  private_data_last_update: このデータは最後に更新されたのは %{time_ago} 前です。
441
497
  proposal_private_custom_fields: 非公開フィールド
442
498
  remove_private_data: "👉 削除することを検討してもよいでしょう"
499
+ scoped_admin_styles:
500
+ menu:
501
+ title: 管理画面
502
+ scoped_styles:
503
+ menu:
504
+ title: 公開フロントエンド
443
505
  admin_log:
444
506
  component:
445
507
  destroy_private_data: "%{user_name} は %{space_name} 内のプライベートデータの項目 %{resource_name} を%{count} 件破棄しました"
508
+ user:
509
+ admin_creates_authorization: "%{user_name} が %{resource_name} を %{handler_name} で検証しました"
510
+ admin_destroys_authorization: "%{user_name} が %{handler_name} の検証 %{resource_name} を破棄しました"
511
+ admin_forces_authorization: "%{user_name} は、 %{resource_name} について %{handler_name} による検証を強制しました。理由: %{reason}"
446
512
  amendments:
447
513
  modal:
448
514
  amendment_exists: 修正は既に存在します
@@ -505,6 +571,26 @@ ja:
505
571
  view_meeting: ミーティングを表示
506
572
  view_proposal: 提案を表示
507
573
  proposal_private_custom_fields_disclosure: この情報は公開されません
574
+ required_authorizations:
575
+ index:
576
+ cancel: あとで %{link} を行う
577
+ granted_title: 許可された本人確認
578
+ logout: ログアウトする
579
+ missing_title: 未検証
580
+ resume_title: 本人確認処理中
581
+ resume_with_method: '%{name} で本人確認を再開'
582
+ title: 本人確認を行う
583
+ verify_with_all_these_options: 'プラットフォームにアクセスできるようにするには、以下すべての方法で本人確認を行ってください:'
584
+ verify_with_any_of_these_options: 'プラットフォームにアクセスする前に、これらの選択肢のうちいずれかを用いて本人確認を行ってください'
585
+ verify_with_method: '%{name} で本人確認する'
586
+ session:
587
+ authorization_is_required: このプラットフォームに参加するには、有効な認証 (%{authorizations}) でアカウントを承認する必要があります。
588
+ system:
589
+ organizations:
590
+ admin_allowed_authoritzations_help_html: |
591
+ 管理者はこれらの認証を使用してユーザーを手動で検証できます。
592
+ <br>セキュリティ上の問題につながる可能性があるため、この機能は注意して使用してください。
593
+ awesome_tweaks: Decidim Awesome Tweaks
508
594
  validators:
509
595
  too_much_caps: 大文字が多すぎます(テキストの %{percent}%以上)
510
596
  voting:
@@ -98,7 +98,6 @@ nl:
98
98
  scoped_styles: Maak aangepaste CSS aan die alleen van toepassing is in bepaalde delen van het openbare web (gebruik hiervoor de restrictie-editor)
99
99
  scoped_styles_variables: 'Je kunt de volgende CSS variabelen gebruiken voor de organisatie op maat gemaakte kleuren:'
100
100
  form_scoped_styles:
101
- new: Voeg een nieuwe CSS-box toe
102
101
  remove: Verwijder dit CSS-vak
103
102
  sure_to_remove: Weet je zeker dat je dit CSS-vak wilt verwijderen?
104
103
  show:
@@ -151,7 +151,6 @@ pt-BR:
151
151
  sure_to_remove: Deseja mesmo destruir esse grupo de "Administradores com Escopos"?
152
152
  form_scoped_styles:
153
153
  delete: Deletar
154
- new: Adicionar uma nova caixa CSS
155
154
  remove: Remover esta caixa CSS
156
155
  sure_to_remove: Deseja mesmo destruir essa caixa de CSS?
157
156
  none: "⛔ Nunca! - Desativar qualquer outra restrição"
@@ -32,6 +32,7 @@ module Decidim
32
32
  delete :destroy_private_data, on: :member
33
33
  get :checks, on: :collection, to: "checks#index"
34
34
  end
35
+ resources :admin_authorizations, only: [:edit, :update, :destroy]
35
36
  post :migrate_images, to: "checks#migrate_images"
36
37
  root to: "config#show"
37
38
  end
@@ -64,6 +65,7 @@ module Decidim
64
65
  end
65
66
  # submenus
66
67
  Decidim::DecidimAwesome::Menu.register_custom_fields_submenu!
68
+ Decidim::DecidimAwesome::Menu.register_custom_styles_submenu!
67
69
  Decidim::DecidimAwesome::Menu.register_menu_hacks_submenu!
68
70
  Decidim::DecidimAwesome::Menu.register_maintenance_admin_menu!
69
71
  Decidim::DecidimAwesome::Menu.register_awesome_admin_menu!
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ class Authorizator
6
+ def initialize(user, admin_authorizations)
7
+ @user = user
8
+ @admin_authorizations = admin_authorizations
9
+ @admin_authorizations = [] if @admin_authorizations.blank? || !admin_authorizations.is_a?(Array)
10
+ @organization = user.organization
11
+ end
12
+ attr_reader :user, :organization, :admin_authorizations
13
+
14
+ def authorizations
15
+ return @authorizations if defined?(@authorizations)
16
+
17
+ @authorizations = organization.available_authorizations.filter_map do |name|
18
+ workflow = Decidim::Verifications.find_workflow_manifest(name)
19
+ next unless workflow
20
+
21
+ authorization = Decidim::Authorization.find_by(user:, name:)
22
+ {
23
+ name:,
24
+ fullname: workflow.fullname,
25
+ granted: authorization&.granted?,
26
+ pending: authorization.present? && !authorization.granted?,
27
+ managed: admin_authorizations.include?(name.to_s)
28
+ }
29
+ end
30
+ @authorizations = @authorizations.sort_by { |i| i[:managed] ? 0 : 1 }
31
+ end
32
+ end
33
+ end
34
+ end
@@ -4,6 +4,8 @@ module Decidim
4
4
  module DecidimAwesome
5
5
  include ActiveSupport::Configurable
6
6
 
7
+ autoload :AwesomeHelpers, "decidim/decidim_awesome/awesome_helpers"
8
+ autoload :RequestMemoizer, "decidim/decidim_awesome/request_memoizer"
7
9
  autoload :Config, "decidim/decidim_awesome/config"
8
10
  autoload :SystemChecker, "decidim/decidim_awesome/system_checker"
9
11
  autoload :ContextAnalyzers, "decidim/decidim_awesome/context_analyzers"
@@ -13,6 +15,7 @@ module Decidim
13
15
  autoload :Lock, "decidim/decidim_awesome/lock"
14
16
  autoload :TranslatedCustomFieldsType, "decidim/decidim_awesome/api/types/translated_custom_fields_type"
15
17
  autoload :LocalizedCustomFieldsType, "decidim/decidim_awesome/api/types/localized_custom_fields_type"
18
+ autoload :Authorizator, "decidim/decidim_awesome/authorizator"
16
19
 
17
20
  # Awesome comes with some components for participatory spaces
18
21
  # Currently :awesome_map and :awesome_iframe, list them here
@@ -126,7 +129,7 @@ module Decidim
126
129
  false
127
130
  end
128
131
 
129
- # allows admins to created specific CSS snippets affecting only some specific parts
132
+ # allows admins to created specific CSS snippets affecting only some public frontend specific parts
130
133
  # Valid values differ a little from the previous convention:
131
134
  # :disabled => false and non available, hidden from admins
132
135
  # Hash => hash of different css text, each key will be used for the contraints
@@ -138,6 +141,18 @@ module Decidim
138
141
  {}
139
142
  end
140
143
 
144
+ # allows admins to created specific CSS snippets affecting only some admin specific parts
145
+ # Valid values differ a little from the previous convention:
146
+ # :disabled => false and non available, hidden from admins
147
+ # Hash => hash of different css text, each key will be used for the contraints
148
+ # Admins create this hash dynamically but some pre-defined css boxes can be created here as:
149
+ # {
150
+ # some_identifier: ".wrapper { background: red; }"
151
+ # }
152
+ config_accessor :scoped_admin_styles do
153
+ {}
154
+ end
155
+
141
156
  # custom fields for proposals using JSON specification:
142
157
  # https://github.com/jsonform/jsonform/wiki
143
158
  # Valid values uses the same structure as :scoped_styles
@@ -156,6 +171,44 @@ module Decidim
156
171
  {}
157
172
  end
158
173
 
174
+ # whether to add a select to user's profile to allow them to select their preferred time zone
175
+ # if set to false, the select won't be shown but it can still be configured by the admins
176
+ # if set to :disabled the feature will be completly removed
177
+ config_accessor :user_timezone do
178
+ false
179
+ end
180
+
181
+ # Forces the user to authorize using some registered verification flow in order to access the platform
182
+ # if set to an empty array, the user will be able to access the platform without any verification but admins can still enforce it
183
+ # if set to :disabled the feature will be completly removed
184
+ # You can initialize some default verification workflow manifests
185
+ config_accessor :force_authorization_after_login do
186
+ []
187
+ end
188
+
189
+ # By default all methods specified in force_authorization_after_login must be granted in order to access the platform
190
+ # if set to true, the user will be able to access the platform if any of the methods is granted
191
+ config_accessor :force_authorization_with_any_method do
192
+ false
193
+ end
194
+
195
+ # When force_authorization_after_login is enabled, this text will be shown to the user as a help text (ie: add a contact information)
196
+ config_accessor :force_authorization_help_text do
197
+ {}
198
+ end
199
+
200
+ # Allows admins to manually authorize users with the specified methods
201
+ # if set to an empty array, the admins will not be able to authorize users but the system admin can still configure it
202
+ # if set to :disabled the feature will be completly removed
203
+ config_accessor :admins_available_authorizations do
204
+ []
205
+ end
206
+
207
+ # This controllers will be skipped from the authorization check
208
+ config_accessor :force_authorization_allowed_controller_names do
209
+ %w(account pages)
210
+ end
211
+
159
212
  # How old must be the private data to be considered expired and therefore presented to the admins for deletion
160
213
  config_accessor :private_data_expiration_time do
161
214
  3.months
@@ -6,25 +6,27 @@ module Decidim
6
6
  # add a global helper with awesome configuration
7
7
  module DecidimAwesome
8
8
  module AwesomeHelpers
9
+ include RequestMemoizer
10
+
9
11
  # Returns the normalized config for an Organization and the current url
10
12
  def awesome_config_instance
11
- return @awesome_config_instance if @awesome_config_instance
12
-
13
- # if already created in the middleware, reuse it as it might have additional constraints
14
- @awesome_config_instance = request.env["decidim_awesome.current_config"]
15
- unless @awesome_config_instance.is_a? Config
16
- @awesome_config_instance = Config.new request.env["decidim.current_organization"]
17
- @awesome_config_instance.context_from_request request
13
+ memoize("current_config") do
14
+ config = Config.new(request.env["decidim.current_organization"])
15
+ config.context_from_request(request)
16
+ config
18
17
  end
19
- @awesome_config_instance
20
18
  end
21
19
 
22
20
  def awesome_config
23
- @awesome_config ||= awesome_config_instance.config
21
+ memoize("awesome_config") do
22
+ awesome_config_instance.config
23
+ end
24
24
  end
25
25
 
26
26
  def javascript_config_vars
27
- awesome_config.except(:scoped_styles, :proposal_custom_fields, :proposal_private_custom_fields, :scoped_admins).to_json.html_safe
27
+ memoize("javascript_config_vars") do
28
+ awesome_config.slice(:allow_images_in_proposals, :allow_images_in_editors, :allow_videos_in_editors, :auto_save_forms).to_json.html_safe
29
+ end
28
30
  end
29
31
 
30
32
  def show_public_intergram?
@@ -35,11 +37,15 @@ module Decidim
35
37
  end
36
38
 
37
39
  def unfiltered_awesome_config
38
- @unfiltered_awesome_config ||= awesome_config_instance.unfiltered_config
40
+ memoize("unfiltered_awesome_config") do
41
+ awesome_config_instance.unfiltered_config
42
+ end
39
43
  end
40
44
 
41
45
  def organization_awesome_config
42
- @organization_awesome_config ||= awesome_config_instance.organization_config
46
+ memoize("organization_awesome_config") do
47
+ awesome_config_instance.organization_config
48
+ end
43
49
  end
44
50
 
45
51
  def awesome_version
@@ -47,29 +53,52 @@ module Decidim
47
53
  end
48
54
 
49
55
  # Collects all CSS that is applied in the current URL context
50
- def awesome_custom_styles
51
- @awesome_custom_styles ||= awesome_config_instance.collect_sub_configs_values("scoped_style")
56
+ def awesome_scoped_styles
57
+ memoize("awesome_scoped_styles") do
58
+ awesome_config_instance.collect_sub_configs_values("scoped_style")
59
+ end
60
+ end
61
+
62
+ # Collects all CSS that is applied in the current URL context
63
+ def awesome_scoped_admin_styles
64
+ memoize("awesome_scoped_admin_styles") do
65
+ awesome_config_instance.collect_sub_configs_values("scoped_admin_style")
66
+ end
52
67
  end
53
68
 
54
69
  # Collects all proposal custom fields that is applied in the current URL context
55
70
  def awesome_scoped_admins
56
- @awesome_scoped_admins ||= awesome_config_instance.collect_sub_configs_values("scoped_admin")
71
+ memoize("awesome_scoped_admins") do
72
+ awesome_config_instance.collect_sub_configs_values("scoped_admin")
73
+ end
57
74
  end
58
75
 
59
76
  # Collects all proposal custom fields that is applied in the current URL context
60
77
  def awesome_proposal_custom_fields
61
- @awesome_proposal_custom_fields ||= awesome_config_instance.collect_sub_configs_values("proposal_custom_field")
78
+ memoize("awesome_proposal_custom_fields") do
79
+ awesome_config_instance.collect_sub_configs_values("proposal_custom_field")
80
+ end
62
81
  end
63
82
 
64
83
  def awesome_proposal_private_custom_fields
65
- @awesome_proposal_private_custom_fields ||= awesome_config_instance.collect_sub_configs_values("proposal_private_custom_field")
84
+ memoize("awesome_proposal_private_custom_fields") do
85
+ awesome_config_instance.collect_sub_configs_values("proposal_private_custom_field")
86
+ end
66
87
  end
67
88
 
68
89
  # this will check if the current component has been configured to use a custom voting manifest
69
90
  def awesome_voting_manifest_for(component)
70
- return nil unless component.settings.respond_to? :awesome_voting_manifest
91
+ memoize("awesome_voting_manifest_for_#{component.id}") do
92
+ DecidimAwesome.voting_registry.find(component.settings.try(:awesome_voting_manifest))
93
+ end
94
+ end
71
95
 
72
- DecidimAwesome.voting_registry.find(component.settings.awesome_voting_manifest)
96
+ # Retrives all the "admins_available_authorizations" for the user along with other possible authorizations
97
+ # returns an instance of Decidim::DecidimAwesome::Authorizator
98
+ def awesome_authorizations_for(user)
99
+ memoize("awesome_authorizations_for_#{user.id}") do
100
+ Authorizator.new(user, awesome_config[:admins_available_authorizations])
101
+ end
73
102
  end
74
103
 
75
104
  def version_prefix
@@ -13,16 +13,24 @@ decidim-core:
13
13
  /app/views/layouts/decidim/_head.html.erb:
14
14
  decidim-0.28: e51e400a98821f4ca0fff26ebd4d0741
15
15
  decidim-0.28.1: 8ac1af4e223d9a7a98136760b6194a75
16
+ decidim-0.28.4: 59abccd8b1c5315d5c0b772be0c26d45
16
17
  /app/views/layouts/decidim/_decidim_javascript.html.erb:
17
18
  decidim-0.28: dc60ed8abf7649611f18804b67b1408d
18
19
  /app/presenters/decidim/menu_presenter.rb:
19
20
  decidim-0.28: 220c8865a43bd8b7b12a7f926f7f4324
20
21
  /app/presenters/decidim/menu_item_presenter.rb:
21
22
  decidim-0.28: 4e4cd366a8a313079ac5fab466bd3679
23
+ decidim-0.28.4: f04f0f5112499a86079119d5f9ae8487
22
24
  /app/helpers/decidim/amendments_helper.rb:
23
25
  decidim-0.28: df28f9321d1bc07757746ed608274e3d
24
26
  /app/presenters/decidim/admin_log/component_presenter.rb:
25
27
  decidim-0.28: 77e80d527727acdf117a0c4517a69a7c
28
+ /app/forms/decidim/account_form.rb:
29
+ decidim-0.28: 11a022ae6ae18ad89da168bec4207935
30
+ /app/commands/decidim/update_account.rb:
31
+ decidim-0.28: 363872116fb99372c046b7394d618333
32
+ /app/views/decidim/account/show.html.erb:
33
+ decidim-0.28: a0647f1740d696018f73ec8db8c7587a
26
34
  decidim-proposals:
27
35
  /lib/decidim/proposals/proposal_serializer.rb:
28
36
  decidim-0.28: bbd33bdc60defb734b3fb814666bb622
@@ -56,6 +64,7 @@ decidim-proposals:
56
64
  decidim-0.28: ab3f937f15c6ed945e776fef34b18abf
57
65
  /app/commands/decidim/proposals/admin/create_proposal.rb:
58
66
  decidim-0.28: aa0c093cb10b3ccfb046edd0018eae1d
67
+ decidim-0.28.3: 8d73a8c852f473c118f978ddfab323b1
59
68
  /app/commands/decidim/proposals/update_proposal.rb:
60
69
  decidim-0.28: 1cc15b946512f4d5a54d1cf5aea8450a
61
70
  /app/commands/decidim/proposals/update_collaborative_draft.rb: