@@ -161,11 +161,16 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||
{:ok,
|
||||
%{
|
||||
instance_description: Config.instance_description(),
|
||||
instance_long_description: Config.instance_long_description(),
|
||||
instance_name: Config.instance_name(),
|
||||
registrations_open: Config.instance_registrations_open?(),
|
||||
contact: Config.contact(),
|
||||
instance_terms: Config.instance_terms(),
|
||||
instance_terms_type: Config.instance_terms_type(),
|
||||
instance_terms_url: Config.instance_terms_url(),
|
||||
instance_privacy_policy: Config.instance_privacy(),
|
||||
instance_privacy_policy_type: Config.instance_privacy_type(),
|
||||
instance_privacy_policy_url: Config.instance_privacy_url(),
|
||||
instance_rules: Config.instance_rules()
|
||||
}}
|
||||
end
|
||||
|
||||
@@ -41,6 +41,19 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do
|
||||
{:ok, %{body_html: body_html, type: type, url: url}}
|
||||
end
|
||||
|
||||
def privacy(_parent, %{locale: locale}, _resolution) do
|
||||
type = Config.instance_privacy_type()
|
||||
|
||||
{url, body_html} =
|
||||
case type do
|
||||
"URL" -> {Config.instance_privacy_url(), nil}
|
||||
"DEFAULT" -> {nil, Config.generate_privacy(locale)}
|
||||
_ -> {nil, Config.instance_privacy(locale)}
|
||||
end
|
||||
|
||||
{:ok, %{body_html: body_html, type: type, url: url}}
|
||||
end
|
||||
|
||||
defp config_cache do
|
||||
case Cachex.fetch(:config, "full_config", fn _key ->
|
||||
case build_config_cache() do
|
||||
@@ -58,8 +71,10 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do
|
||||
name: Config.instance_name(),
|
||||
registrations_open: Config.instance_registrations_open?(),
|
||||
registrations_whitelist: Config.instance_registrations_whitelist?(),
|
||||
contact: Config.contact(),
|
||||
demo_mode: Config.instance_demo_mode?(),
|
||||
description: Config.instance_description(),
|
||||
long_description: Config.instance_long_description(),
|
||||
anonymous: %{
|
||||
participation: %{
|
||||
allowed: Config.anonymous_participation?(),
|
||||
@@ -107,7 +122,9 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do
|
||||
features: %{
|
||||
groups: Config.instance_group_feature_enabled?()
|
||||
},
|
||||
rules: Config.instance_rules()
|
||||
rules: Config.instance_rules(),
|
||||
version: Config.instance_version(),
|
||||
federating: Config.instance_federating()
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
19
lib/graphql/resolvers/statistics.ex
Normal file
19
lib/graphql/resolvers/statistics.ex
Normal file
@@ -0,0 +1,19 @@
|
||||
defmodule Mobilizon.GraphQL.Resolvers.Statistics do
|
||||
@moduledoc """
|
||||
Handles the statistics-related GraphQL calls.
|
||||
"""
|
||||
|
||||
alias Mobilizon.Service.Statistics, as: StatisticsModule
|
||||
|
||||
@doc """
|
||||
Gets config.
|
||||
"""
|
||||
def get_statistics(_parent, _params, _context) do
|
||||
{:ok,
|
||||
%{
|
||||
number_of_users: StatisticsModule.get_cached_value(:local_users),
|
||||
number_of_events: StatisticsModule.get_cached_value(:local_events),
|
||||
number_of_comments: StatisticsModule.get_cached_value(:local_comments)
|
||||
}}
|
||||
end
|
||||
end
|
||||
@@ -32,6 +32,7 @@ defmodule Mobilizon.GraphQL.Schema do
|
||||
import_types(Schema.ConfigType)
|
||||
import_types(Schema.ReportType)
|
||||
import_types(Schema.AdminType)
|
||||
import_types(Schema.StatisticsType)
|
||||
|
||||
@desc "A struct containing the id of the deleted object"
|
||||
object :deleted_object do
|
||||
@@ -137,6 +138,7 @@ defmodule Mobilizon.GraphQL.Schema do
|
||||
import_fields(:todo_queries)
|
||||
import_fields(:conversation_queries)
|
||||
import_fields(:resource_queries)
|
||||
import_fields(:statistics_queries)
|
||||
end
|
||||
|
||||
@desc """
|
||||
|
||||
@@ -75,9 +75,14 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||
object :admin_settings do
|
||||
field(:instance_name, :string)
|
||||
field(:instance_description, :string)
|
||||
field(:instance_long_description, :string)
|
||||
field(:contact, :string)
|
||||
field(:instance_terms, :string)
|
||||
field(:instance_terms_type, :instance_terms_type)
|
||||
field(:instance_terms_url, :string)
|
||||
field(:instance_privacy_policy, :string)
|
||||
field(:instance_privacy_policy_type, :instance_privacy_type)
|
||||
field(:instance_privacy_policy_url, :string)
|
||||
field(:instance_rules, :string)
|
||||
field(:registrations_open, :boolean)
|
||||
end
|
||||
@@ -88,6 +93,12 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||
value(:custom, as: "CUSTOM")
|
||||
end
|
||||
|
||||
enum :instance_privacy_type do
|
||||
value(:url, as: "URL")
|
||||
value(:default, as: "DEFAULT")
|
||||
value(:custom, as: "CUSTOM")
|
||||
end
|
||||
|
||||
object :admin_queries do
|
||||
@desc "Get the list of action logs"
|
||||
field :action_logs, type: list_of(:action_log) do
|
||||
@@ -151,9 +162,14 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||
field :save_admin_settings, type: :admin_settings do
|
||||
arg(:instance_name, :string)
|
||||
arg(:instance_description, :string)
|
||||
arg(:instance_long_description, :string)
|
||||
arg(:contact, :string)
|
||||
arg(:instance_terms, :string)
|
||||
arg(:instance_terms_type, :instance_terms_type)
|
||||
arg(:instance_terms_url, :string)
|
||||
arg(:instance_privacy_policy, :string)
|
||||
arg(:instance_privacy_policy_type, :instance_privacy_type)
|
||||
arg(:instance_privacy_policy_url, :string)
|
||||
arg(:instance_rules, :string)
|
||||
arg(:registrations_open, :boolean)
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do
|
||||
# Instance name
|
||||
field(:name, :string)
|
||||
field(:description, :string)
|
||||
field(:long_description, :string)
|
||||
field(:contact, :string)
|
||||
|
||||
field(:registrations_open, :boolean)
|
||||
field(:registrations_whitelist, :boolean)
|
||||
@@ -23,12 +25,19 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do
|
||||
field(:resource_providers, list_of(:resource_provider))
|
||||
field(:timezones, list_of(:string))
|
||||
field(:features, :features)
|
||||
field(:version, :string)
|
||||
field(:federating, :boolean)
|
||||
|
||||
field(:terms, :terms, description: "The instance's terms") do
|
||||
arg(:locale, :string, default_value: "en")
|
||||
resolve(&Config.terms/3)
|
||||
end
|
||||
|
||||
field(:privacy, :privacy, description: "The instance's privacy policy") do
|
||||
arg(:locale, :string, default_value: "en")
|
||||
resolve(&Config.privacy/3)
|
||||
end
|
||||
|
||||
field(:rules, :string, description: "The instance's rules")
|
||||
end
|
||||
|
||||
@@ -38,6 +47,12 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do
|
||||
field(:body_html, :string)
|
||||
end
|
||||
|
||||
object :privacy do
|
||||
field(:url, :string)
|
||||
field(:type, :instance_privacy_type)
|
||||
field(:body_html, :string)
|
||||
end
|
||||
|
||||
object :lonlat do
|
||||
field(:longitude, :float)
|
||||
field(:latitude, :float)
|
||||
|
||||
23
lib/graphql/schema/statistics.ex
Normal file
23
lib/graphql/schema/statistics.ex
Normal file
@@ -0,0 +1,23 @@
|
||||
defmodule Mobilizon.GraphQL.Schema.StatisticsType do
|
||||
@moduledoc """
|
||||
Schema representation for Statistics
|
||||
"""
|
||||
use Absinthe.Schema.Notation
|
||||
|
||||
alias Mobilizon.GraphQL.Resolvers.Statistics
|
||||
|
||||
@desc "A statistics object"
|
||||
object :statistics do
|
||||
# Instance name
|
||||
field(:number_of_users, :integer, description: "The number of local users")
|
||||
field(:number_of_events, :integer, description: "The number of local events")
|
||||
field(:number_of_comments, :integer, description: "The number of local comments")
|
||||
end
|
||||
|
||||
object :statistics_queries do
|
||||
@desc "Get the instance statistics"
|
||||
field :statistics, :statistics do
|
||||
resolve(&Statistics.get_statistics/3)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user