decidim 0.31.5 → 0.32.0.rc2

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/decidim-core/lib/decidim/shakapacker/runner.rb +4 -4
  3. data/decidim-core/lib/decidim/shakapacker/shakapacker.yml +28 -3
  4. data/decidim.gemspec +21 -24
  5. data/docs/antora.yml +1 -1
  6. data/docs/modules/configure/pages/environment_variables.adoc +4 -26
  7. data/docs/modules/customize/pages/logic.adoc +31 -0
  8. data/docs/modules/develop/assets/images/maintainers-backports-checker.png +0 -0
  9. data/docs/modules/develop/pages/api/authentication.adoc +95 -0
  10. data/docs/modules/develop/pages/api/core-concepts.adoc +535 -0
  11. data/docs/modules/develop/pages/api/index.adoc +83 -0
  12. data/docs/modules/develop/pages/api/reference/components/debates/close.adoc +48 -0
  13. data/docs/modules/develop/pages/api/reference/components/debates/create.adoc +58 -0
  14. data/docs/modules/develop/pages/api/reference/components/debates/update.adoc +63 -0
  15. data/docs/modules/develop/pages/api/reference/components/debates.adoc +9 -0
  16. data/docs/modules/develop/pages/api/reference/components/meetings/close.adoc +48 -0
  17. data/docs/modules/develop/pages/api/reference/components/meetings/create.adoc +108 -0
  18. data/docs/modules/develop/pages/api/reference/components/meetings/update.adoc +95 -0
  19. data/docs/modules/develop/pages/api/reference/components/meetings/withdraw.adoc +36 -0
  20. data/docs/modules/develop/pages/api/reference/components/meetings.adoc +10 -0
  21. data/docs/modules/develop/pages/api/reference/components/proposals/answer.adoc +82 -0
  22. data/docs/modules/develop/pages/api/reference/components/proposals/create.adoc +78 -0
  23. data/docs/modules/develop/pages/api/reference/components/proposals/update.adoc +66 -0
  24. data/docs/modules/develop/pages/api/reference/components/proposals/vote.adoc +73 -0
  25. data/docs/modules/develop/pages/api/reference/components/proposals/withdraw.adoc +38 -0
  26. data/docs/modules/develop/pages/api/reference/components/proposals.adoc +14 -0
  27. data/docs/modules/develop/pages/api/reference/errors/attribute_validation_error.adoc +38 -0
  28. data/docs/modules/develop/pages/api/reference/errors/introspection_disabled_error.adoc +19 -0
  29. data/docs/modules/develop/pages/api/reference/errors/invalid_locale_error.adoc +30 -0
  30. data/docs/modules/develop/pages/api/reference/errors/locale_error.adoc +30 -0
  31. data/docs/modules/develop/pages/api/reference/errors/not_found.adoc +30 -0
  32. data/docs/modules/develop/pages/api/reference/errors/permission_not_set.adoc +46 -0
  33. data/docs/modules/develop/pages/api/reference/errors/recursion_limit_exceeded_error.adoc +19 -0
  34. data/docs/modules/develop/pages/api/reference/errors/too_many_aliases_error.adoc +23 -0
  35. data/docs/modules/develop/pages/api/reference/errors/unauthorized_field.adoc +30 -0
  36. data/docs/modules/develop/pages/api/reference/errors/unauthorized_mutation.adoc +30 -0
  37. data/docs/modules/develop/pages/api/reference/errors/unauthorized_object.adoc +30 -0
  38. data/docs/modules/develop/pages/api/reference/errors/validation_error.adoc +30 -0
  39. data/docs/modules/develop/pages/api/reference/errors.adoc +29 -0
  40. data/docs/modules/develop/pages/backports.adoc +100 -19
  41. data/docs/modules/develop/pages/c4_component.adoc +0 -3
  42. data/docs/modules/develop/pages/classes/models.adoc +0 -1
  43. data/docs/modules/develop/pages/components.adoc +67 -1
  44. data/docs/modules/develop/pages/machine_translations.adoc +1 -1
  45. data/docs/modules/develop/pages/maintainers/releases.adoc +34 -21
  46. data/docs/modules/develop/pages/maintainers/security.adoc +15 -1
  47. data/docs/modules/develop/partials/api/decidim_version.adoc +102 -0
  48. data/docs/modules/install/pages/manual.adoc +4 -3
  49. data/docs/modules/install/pages/update.adoc +7 -24
  50. data/docs/modules/install/partials/version_matrix.adoc +4 -8
  51. data/docs/modules/services/pages/activestorage.adoc +40 -0
  52. data/docs/modules/services/pages/aitools.adoc +0 -1
  53. data/docs/modules/services/pages/index.adoc +1 -0
  54. data/docs/modules/services/pages/machine_translation.adoc +139 -2
  55. data/docs/modules/services/pages/maps.adoc +42 -0
  56. data/lib/decidim/gem_manager.rb +16 -2
  57. data/lib/decidim/version.rb +1 -1
  58. data/lib/decidim.rb +0 -1
  59. data/package-lock.json +21945 -12726
  60. data/package.json +5 -4
  61. data/packages/browserslist-config/package.json +1 -1
  62. data/packages/core/package.json +28 -28
  63. data/packages/dev/package.json +2 -2
  64. data/packages/eslint-config/package.json +1 -1
  65. data/packages/prettier-config/package.json +1 -1
  66. data/packages/stylelint-config/package.json +1 -1
  67. data/packages/webpacker/package.json +12 -12
  68. data/packages/webpacker/src/override-config.js +1 -1
  69. metadata +73 -58
  70. data/docs/modules/develop/pages/api.adoc +0 -21
@@ -16,7 +16,15 @@ class MyTranslationService
16
16
  end
17
17
 
18
18
  def translate
19
- # Actual code to translate the text
19
+ # Actual code for translating the text
20
+ translated_text = "#{target_locale} - #{text}"
21
+
22
+ Decidim::MachineTranslationSaveJob.perform_later(
23
+ resource,
24
+ field_name,
25
+ target_locale,
26
+ translated_text
27
+ )
20
28
  end
21
29
  end
22
30
  ....
@@ -34,5 +42,134 @@ Then you will need to configure it with the help of Environment Variables:
34
42
  [source,bash]
35
43
  ....
36
44
  export DECIDIM_ENABLE_MACHINE_TRANSLATION="true"
37
- export DECIDIM_MACHINE_TRANSLATION_SERVICE="MyTranslator"
45
+ export DECIDIM_MACHINE_TRANSLATION_SERVICE="MyTranslationService"
46
+ ....
47
+
48
+ You also need to enable the setting "Enable machine translations" in `Settings` -> `Configuration`.
49
+
50
+ You can read more about the details of how this service work at `xref:develop:machine_translations.adoc[Using machine translations].
51
+
52
+ == Examples
53
+
54
+ === LibreTranslate
55
+
56
+ https://github.com/LibreTranslate/LibreTranslate[LibreTranslate] is a Free and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup. If you do not want to self-host it, they also offer a paid service at https://libretranslate.com/[libretranslate.com].
57
+
58
+ For using it, follow these steps:
59
+
60
+ . https://docs.libretranslate.com/guides/installation/[Install LibreTranslate] with any of the methods proposed on their documentation. For demonstration purposes, it will be installed at `http://localhost:5000`. You have a Docker Compose configuration based on the LibreTranslate documentation.
61
+ . Add the file `app/services/libre_translate_service.rb` to your application
62
+ . Add these Environment Variables:
63
+ [source,bash]
64
+ ....
65
+ export DECIDIM_ENABLE_MACHINE_TRANSLATION="true"
66
+ export DECIDIM_MACHINE_TRANSLATION_SERVICE="LibreTranslateService"
67
+ export DECIDIM_LIBRE_TRANSLATE_SERVICE_URL="http://localhost:5000"
68
+ ....
69
+ [start=4]
70
+ . Restart the web application and queue servers
71
+ . Sign in as administrator
72
+ . Go to the admin panel and go into in `Settings` -> `Configuration`
73
+ . Enable the settings "Enable machine translations" and "Translated text first"
74
+ . Create a new Process or Edit an existing one
75
+ . Go to the frontend and change the language
76
+
77
+ ==== Docker compose
78
+
79
+ [source,yaml]
80
+ ....
81
+ services:
82
+ libretranslate:
83
+ image: libretranslate/libretranslate
84
+ container_name: libretranslate
85
+ ports:
86
+ - "${LT_PORT:-5000}:5000"
87
+ volumes:
88
+ - lt-local:/home/libretranslate/.local
89
+ # Uncomment the line below if using --api-keys
90
+ # - lt-db:/app/db
91
+ stdin_open: true
92
+ tty: true
93
+ restart: unless-stopped
94
+ # Add any additional command arguments here
95
+ # command: ["--api-keys"]
96
+
97
+ volumes:
98
+ lt-local:
99
+ name: lt-local
100
+ ....
101
+
102
+ ==== `app/services/libre_translate_service.rb`
103
+
104
+ [source,ruby]
105
+ ....
106
+ # frozen_string_literal: true
107
+
108
+ require "faraday"
109
+ require "json"
110
+
111
+ # This translator uses LibreTranslate API to translate text
112
+ # from one locale to another.
113
+ class LibreTranslateService
114
+ attr_reader :text, :source_locale, :target_locale, :resource, :field_name
115
+
116
+ def initialize(resource, field_name, text, target_locale, source_locale)
117
+ @resource = resource
118
+ @field_name = field_name
119
+ @text = text
120
+ @target_locale = target_locale
121
+ @source_locale = source_locale
122
+ end
123
+
124
+ def translate
125
+ translated_text = fetch_translation || text
126
+
127
+ Decidim::MachineTranslationSaveJob.perform_later(
128
+ resource,
129
+ field_name,
130
+ target_locale,
131
+ translated_text
132
+ )
133
+ end
134
+
135
+ private
136
+
137
+ def fetch_translation
138
+ response = Faraday.post("#{host}/translate") do |req|
139
+ req.headers["Content-Type"] = "application/json"
140
+ req.body = translation_payload.to_json
141
+ end
142
+
143
+ parse_response(response)
144
+ rescue => e
145
+ log_error(e)
146
+ nil
147
+ end
148
+
149
+ def translation_payload
150
+ {
151
+ q: text,
152
+ source: source_locale,
153
+ target: target_locale,
154
+ api_key: api_key
155
+ }.compact
156
+ end
157
+
158
+ def parse_response(response)
159
+ result = JSON.parse(response.body)
160
+ result["translatedText"]
161
+ end
162
+
163
+ def host
164
+ Decidim::Env.new("DECIDIM_LIBRE_TRANSLATE_SERVICE_URL", "https://libretranslate.com").value
165
+ end
166
+
167
+ def api_key
168
+ Decidim::Env.new("DECIDIM_LIBRE_TRANSLATE_API_KEY").value
169
+ end
170
+
171
+ def log_error(error)
172
+ Rails.logger.error("LibreTranslate translation error: #{error.message}")
173
+ end
174
+ end
38
175
  ....
@@ -83,6 +83,48 @@ MAPS_API_KEY=your_api_key_here
83
83
 
84
84
  For further information, see the service provider's documentation or take a look at the <<hosting-your-own-map-services,Hosting your own map services>> section.
85
85
 
86
+ ==== Tile layer configuration options
87
+
88
+ Some tile servers use the https://en.wikipedia.org/wiki/Tile_Map_Service[TMS (Tile Map Service)] specification instead of the standard XYZ tile scheme.
89
+ If your tile server requires TMS, you can enable it by setting the `tms` option to `true`:
90
+
91
+ [source,ruby]
92
+ ----
93
+ config.maps = {
94
+ provider: :osm,
95
+ api_key: ENV["MAPS_API_KEY"],
96
+ dynamic: {
97
+ tile_layer: {
98
+ url: "https://tiles.example.org/{z}/{x}/{y}.png",
99
+ tms: true,
100
+ attribution: %(
101
+ <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap</a> contributors
102
+ ).strip
103
+ }
104
+ }
105
+ }
106
+ ----
107
+
108
+ Alternatively, you can use the `MAPS_EXTRA_VARS` xref:configure:environment_variables.adoc[Environment Variable] to set the `tms` option:
109
+
110
+ [source,bash]
111
+ ----
112
+ MAPS_EXTRA_VARS="tms=true"
113
+ ----
114
+
115
+ All configuration options supported by https://leafletjs.com/reference.html#tilelayer[Leaflet's TileLayer] can be passed to the `tile_layer` configuration, including:
116
+
117
+ * `minZoom` - Minimum zoom level
118
+ * `maxZoom` - Maximum zoom level
119
+ * `subdomains` - Subdomains for the tile server (e.g., `"abc"` or `["a", "b", "c"]`)
120
+ * `errorTileUrl` - URL for error tiles
121
+ * `zoomOffset` - Zoom offset
122
+ * `tms` - Set to `true` if your tile server uses TMS specification
123
+ * `zoomReverse` - Set to `true` to reverse zoom levels
124
+ * `detectRetina` - Set to `true` to request retina tiles
125
+ * `crossOrigin` - CrossOrigin attribute for tiles (e.g., `"anonymous"`)
126
+ * `referrerPolicy` - Referrer policy for tiles (e.g., `"no-referrer-when-downgrade"`)
127
+
86
128
  === Combining multiple service providers
87
129
 
88
130
  It is also possible to combine multiple service providers for the different categories of map services.
@@ -33,7 +33,6 @@ module Decidim
33
33
  pages
34
34
  proposals
35
35
  surveys
36
- sortitions
37
36
  blogs
38
37
  ).freeze
39
38
 
@@ -63,6 +62,19 @@ module Decidim
63
62
  end
64
63
  end
65
64
 
65
+ def replace_gemspec_version
66
+ Dir.chdir(@dir) do
67
+ gemspec_file = Dir.glob("*.gemspec").first
68
+ return unless gemspec_file
69
+
70
+ replace_file(
71
+ gemspec_file,
72
+ /(?<!required_ruby_)version = "[^"]*"/,
73
+ "version = \"#{version}\""
74
+ )
75
+ end
76
+ end
77
+
66
78
  def replace_package_version
67
79
  Dir.chdir(@dir) do
68
80
  replace_file(
@@ -98,7 +110,9 @@ module Decidim
98
110
 
99
111
  def replace_versions
100
112
  all_dirs do |dir|
101
- new(dir).replace_gem_version
113
+ manager = new(dir)
114
+ manager.replace_gem_version
115
+ manager.replace_gemspec_version
102
116
  end
103
117
 
104
118
  package_dirs do |dir|
@@ -3,6 +3,6 @@
3
3
  # This holds the decidim version and the faker version it uses.
4
4
  module Decidim
5
5
  def self.version
6
- "0.31.5"
6
+ "0.32.0.rc2"
7
7
  end
8
8
  end
data/lib/decidim.rb CHANGED
@@ -21,5 +21,4 @@ require "decidim/budgets"
21
21
  require "decidim/surveys"
22
22
  require "decidim/accountability"
23
23
  require "decidim/debates"
24
- require "decidim/sortitions"
25
24
  require "decidim/blogs"