mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 08:43:45 +08:00
312a930ac8
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.
122 lines
2.1 KiB
Ruby
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
|