discourse/app/serializers/admin_plugin_serializer.rb
Martin Brennan 312a930ac8
UX: Disable plugin list settings button for some plugins (#27124)
For plugins with only an "enabled" site setting, it doesn't
make sense to take them to the site settings page, since the
toggle switch in the list can be used to change enabled/disabled.

This will not be the case for plugins that have their own custom
config page (like Automation), but we will deal with this when
we actually overhaul this plugin to use the new show page.

Also adds another rspec fixture of a test plugin.
2024-05-23 12:04:26 +10:00

122 lines
2.1 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,
: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 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
route = object.admin_route
return unless route
ret = route.slice(:location, :label)
if route[:use_new_show_route]
ret[:full_location] = "adminPlugins.show"
ret[:use_new_show_route] = true
else
ret[:full_location] = "adminPlugins.#{ret[:location]}"
end
ret
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