Add languages to admin settings
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -8,6 +8,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||
alias Mobilizon.{Actors, Admin, Config, Events}
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Admin.{ActionLog, Setting}
|
||||
alias Mobilizon.Cldr.Language
|
||||
alias Mobilizon.Config
|
||||
alias Mobilizon.Discussions.Comment
|
||||
alias Mobilizon.Events.Event
|
||||
@@ -156,6 +157,19 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||
end
|
||||
end
|
||||
|
||||
def get_list_of_languages(_parent, _args, _resolution) do
|
||||
locale = Gettext.get_locale()
|
||||
|
||||
case Language.known_languages(locale) do
|
||||
data when is_map(data) ->
|
||||
data = Enum.map(data, fn {code, elem} -> %{code: code, name: elem.standard} end)
|
||||
{:ok, data}
|
||||
|
||||
{:error, err} ->
|
||||
{:error, err}
|
||||
end
|
||||
end
|
||||
|
||||
def get_dashboard(_parent, _args, %{context: %{current_user: %User{role: role}}})
|
||||
when is_admin(role) do
|
||||
last_public_event_published =
|
||||
@@ -202,11 +216,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||
res <-
|
||||
res
|
||||
|> Enum.map(fn {key, %Setting{value: value}} ->
|
||||
case value do
|
||||
"true" -> {key, true}
|
||||
"false" -> {key, false}
|
||||
value -> {key, value}
|
||||
end
|
||||
{key, Admin.get_setting_value(value)}
|
||||
end)
|
||||
|> Enum.into(%{}),
|
||||
:ok <- eventually_update_instance_actor(res) do
|
||||
|
||||
@@ -75,6 +75,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do
|
||||
demo_mode: Config.instance_demo_mode?(),
|
||||
description: Config.instance_description(),
|
||||
long_description: Config.instance_long_description(),
|
||||
languages: Config.instance_languages(),
|
||||
anonymous: %{
|
||||
participation: %{
|
||||
allowed: Config.anonymous_participation?(),
|
||||
|
||||
@@ -64,6 +64,11 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||
end)
|
||||
end
|
||||
|
||||
object :language do
|
||||
field(:code, :string, description: "The iso-639-3 language code")
|
||||
field(:name, :string, description: "The language name")
|
||||
end
|
||||
|
||||
object :dashboard do
|
||||
field(:last_public_event_published, :event, description: "Last public event publish")
|
||||
field(:number_of_users, :integer, description: "The number of local users")
|
||||
@@ -85,6 +90,7 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||
field(:instance_privacy_policy_url, :string)
|
||||
field(:instance_rules, :string)
|
||||
field(:registrations_open, :boolean)
|
||||
field(:instance_languages, list_of(:string))
|
||||
end
|
||||
|
||||
enum :instance_terms_type do
|
||||
@@ -107,6 +113,10 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||
resolve(&Admin.list_action_logs/3)
|
||||
end
|
||||
|
||||
field :languages, type: list_of(:language) do
|
||||
resolve(&Admin.get_list_of_languages/3)
|
||||
end
|
||||
|
||||
field :dashboard, type: :dashboard do
|
||||
resolve(&Admin.get_dashboard/3)
|
||||
end
|
||||
@@ -172,6 +182,7 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||
arg(:instance_privacy_policy_url, :string)
|
||||
arg(:instance_rules, :string)
|
||||
arg(:registrations_open, :boolean)
|
||||
arg(:instance_languages, list_of(:string))
|
||||
|
||||
resolve(&Admin.save_settings/3)
|
||||
end
|
||||
|
||||
@@ -14,6 +14,7 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do
|
||||
field(:long_description, :string)
|
||||
field(:contact, :string)
|
||||
|
||||
field(:languages, list_of(:string))
|
||||
field(:registrations_open, :boolean)
|
||||
field(:registrations_allowlist, :boolean)
|
||||
field(:demo_mode, :boolean)
|
||||
|
||||
@@ -80,10 +80,31 @@ defmodule Mobilizon.Admin do
|
||||
def get_admin_setting_value(group, name, fallback \\ nil)
|
||||
when is_bitstring(group) and is_bitstring(name) do
|
||||
case Repo.get_by(Setting, group: group, name: name) do
|
||||
nil -> fallback
|
||||
%Setting{value: ""} -> fallback
|
||||
%Setting{value: nil} -> fallback
|
||||
%Setting{value: value} -> value
|
||||
nil ->
|
||||
fallback
|
||||
|
||||
%Setting{value: ""} ->
|
||||
fallback
|
||||
|
||||
%Setting{value: nil} ->
|
||||
fallback
|
||||
|
||||
%Setting{value: value} ->
|
||||
get_setting_value(value)
|
||||
end
|
||||
end
|
||||
|
||||
def get_setting_value(value) do
|
||||
case Jason.decode(value) do
|
||||
{:ok, val} ->
|
||||
val
|
||||
|
||||
{:error, _} ->
|
||||
case value do
|
||||
"true" -> true
|
||||
"false" -> false
|
||||
value -> value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -116,7 +137,7 @@ defmodule Mobilizon.Admin do
|
||||
Setting.changeset(%Setting{}, %{
|
||||
group: group,
|
||||
name: Atom.to_string(key),
|
||||
value: to_string(val)
|
||||
value: convert_to_string(val)
|
||||
}),
|
||||
on_conflict: :replace_all,
|
||||
conflict_target: [:group, :name]
|
||||
@@ -124,4 +145,11 @@ defmodule Mobilizon.Admin do
|
||||
|
||||
do_save_setting(transaction, group, rest)
|
||||
end
|
||||
|
||||
defp convert_to_string(val) do
|
||||
case val do
|
||||
val when is_list(val) -> Jason.encode!(val)
|
||||
val -> to_string(val)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,5 +5,5 @@ defmodule Mobilizon.Cldr do
|
||||
|
||||
use Cldr,
|
||||
locales: ["cs", "de", "en", "es", "fr", "it", "ja", "nl", "pl", "pt", "ru"],
|
||||
providers: [Cldr.Number, Cldr.Calendar, Cldr.DateTime]
|
||||
providers: [Cldr.Number, Cldr.Calendar, Cldr.DateTime, Cldr.Language]
|
||||
end
|
||||
|
||||
@@ -99,6 +99,15 @@ defmodule Mobilizon.Config do
|
||||
)
|
||||
)
|
||||
|
||||
@spec instance_languages :: list(String.t())
|
||||
def instance_languages,
|
||||
do:
|
||||
Mobilizon.Admin.get_admin_setting_value(
|
||||
"instance",
|
||||
"instance_languages",
|
||||
instance_config()[:languages]
|
||||
)
|
||||
|
||||
@spec instance_registrations_allowlist :: list(String.t())
|
||||
def instance_registrations_allowlist, do: instance_config()[:registration_email_allowlist]
|
||||
|
||||
@@ -319,7 +328,8 @@ defmodule Mobilizon.Config do
|
||||
instance_privacy_policy: instance_privacy(),
|
||||
instance_privacy_policy_type: instance_privacy_type(),
|
||||
instance_privacy_policy_url: instance_privacy_url(),
|
||||
instance_rules: instance_rules()
|
||||
instance_rules: instance_rules(),
|
||||
instance_languages: instance_languages()
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user