discourse/app/serializers/admin_plugin_serializer.rb
Ted Johansson 503f9b6f02
DEV: Use default admin routes for plugins with settings (#30941)
This change adds a sidebar link for each plugin that fulfils the following criteria:

- Does not have an explicit admin route defined in the plugin.
- Has at least one site setting (not including enabled/disabled.)

That sidebar link leads to the automatically generated plugin show settings page.
2025-02-04 14:57:28 +08:00

117 lines
1.9 KiB
Ruby

# frozen_string_literal: true
class AdminPluginSerializer < ApplicationSerializer
attributes :id,
:name,
:about,
:version,
:url,
:admin_route,
:enabled,
:enabled_setting,
:has_settings,
:has_only_enabled_setting,
:humanized_name,
:is_official,
:is_discourse_owned,
:label,
:commit_hash,
:commit_url,
:meta_url,
:authors
def id
object.directory_name
end
def name
object.metadata.name
end
def humanized_name
object.humanized_name
end
def about
object.metadata.about
end
def version
object.metadata.version
end
def url
object.metadata.url
end
def authors
object.metadata.authors
end
def enabled
object.enabled?
end
def include_enabled_setting?
enabled_setting.present?
end
def enabled_setting
object.enabled_site_setting
end
def plugin_settings
@plugin_settings ||= SiteSetting.plugins.select { |_, v| v == id }
end
def has_settings
plugin_settings.values.any?
end
def has_only_enabled_setting
plugin_settings.keys.length == 1 && plugin_settings.keys.first == enabled_setting
end
def include_url?
url.present?
end
def admin_route
object.full_admin_route
end
def include_admin_route?
admin_route.present?
end
def is_official
Plugin::Metadata::OFFICIAL_PLUGINS.include?(object.name)
end
def include_label?
is_discourse_owned
end
def label
return if !is_discourse_owned
object.metadata.label
end
def is_discourse_owned
object.discourse_owned?
end
def commit_hash
object.commit_hash
end
def commit_url
object.commit_url
end
def meta_url
return if object.metadata.meta_topic_id.blank?
"https://meta.discourse.org/t/#{object.metadata.meta_topic_id}"
end
end