このコミットが含まれているのは:
@@ -29,6 +29,18 @@ class CountsDefaults
|
||||
end
|
||||
end.join(' ')
|
||||
end
|
||||
if ['posts', 'tags'].include?(resource)
|
||||
fields = CountsResourceDefinition.new(resource).output_fields
|
||||
selected = details.fetch('columns').split(' ')
|
||||
details['columns'] = fields.map { _1[:key] }.select { selected.include?(_1) }.join(' ')
|
||||
order = lambda do |items, prefix|
|
||||
items.flat_map do |field|
|
||||
path = [prefix, field[:key]].compact.join('.')
|
||||
[path, *order.call(field.fetch(:children, []), path)]
|
||||
end
|
||||
end
|
||||
details['order'] = order.call(fields, nil).join(' ')
|
||||
end
|
||||
['latest', 'history'].each do |definition|
|
||||
result << { definition:, mode: 'details', params: details }
|
||||
end
|
||||
|
||||
@@ -165,6 +165,7 @@ class CountsExportProjection
|
||||
return @labels.fetch("kind:#{ value }", value) if key == 'kind'
|
||||
return @labels.fetch("category:#{ value }", value) if key == 'category'
|
||||
if ['language', 'script'].include?(key) && value.is_a?(Hash)
|
||||
return @labels.fetch("language:#{ value[:code] }", value[:code]) if key == 'language'
|
||||
return @labels.fetch("#{ key }:#{ value[:code] }",
|
||||
value[:name] || @labels.fetch('notRegistered', ''))
|
||||
end
|
||||
|
||||
@@ -115,13 +115,23 @@ class CountsResourceDefinition
|
||||
def self.aliases_key(code) = "aliases_#{ code.to_s.downcase.tr('-', '_') }"
|
||||
|
||||
def name_columns
|
||||
@name_columns ||= Locale.select(:code, :language_code, :script_code).order(:code)
|
||||
.flat_map do |locale|
|
||||
codes = { code: locale.code, language_code: locale.language_code,
|
||||
script_code: locale.script_code }
|
||||
[{ key: self.class.name_key(locale.code), label: 'counts:localeName', name_locale: codes },
|
||||
{ key: self.class.aliases_key(locale.code), label: 'counts:localeAliases',
|
||||
name_locale: codes, multiple_values: true }]
|
||||
@name_columns ||= begin
|
||||
locales = Locale.joins(:language)
|
||||
.select('locales.code', 'locales.language_code', 'locales.script_code')
|
||||
.order('languages.created_at ASC', 'languages.code ASC', 'locales.code ASC')
|
||||
codes = locales.map do |locale|
|
||||
{ code: locale.code, language_code: locale.language_code,
|
||||
script_code: locale.script_code }
|
||||
end
|
||||
names = codes.map do |locale|
|
||||
{ key: self.class.name_key(locale[:code]), label: 'counts:localeName',
|
||||
name_locale: locale }
|
||||
end
|
||||
aliases = codes.map do |locale|
|
||||
{ key: self.class.aliases_key(locale[:code]), label: 'counts:localeAliases',
|
||||
name_locale: locale, multiple_values: true }
|
||||
end
|
||||
names + aliases
|
||||
end
|
||||
end
|
||||
|
||||
@@ -200,7 +210,7 @@ class CountsResourceDefinition
|
||||
keys.flat_map do |child|
|
||||
next [] if child == 'aliases' && key == 'tags'
|
||||
if child == 'name' && ['tags', 'parents'].include?(key)
|
||||
next [{ key: child, label: CHILD_LABELS.fetch(child) }, *name_columns]
|
||||
next name_columns
|
||||
end
|
||||
label = key == 'members' && child == 'tagId' ?
|
||||
'counts:columns.resourceId' : CHILD_LABELS.fetch(child)
|
||||
@@ -218,6 +228,13 @@ class CountsResourceDefinition
|
||||
def condition_fields
|
||||
fields = output_fields
|
||||
if resource == 'tags'
|
||||
fields = fields.map do |field|
|
||||
next field unless field[:key] == 'parents'
|
||||
|
||||
field.merge(children: field[:children] + [
|
||||
{ key: 'name', label: 'history:name' },
|
||||
{ key: 'names', label: 'counts:columns.names', children: child_fields('names') }])
|
||||
end
|
||||
fields += [{ key: 'name', label: 'counts:columns.name' },
|
||||
{ key: 'names', label: 'counts:columns.names', children: child_fields('names') },
|
||||
{ key: 'aliases', label: 'tags:aliases', children: child_fields('aliases') }]
|
||||
@@ -227,6 +244,7 @@ class CountsResourceDefinition
|
||||
next field unless field[:key] == 'tags'
|
||||
|
||||
field.merge(children: field[:children] + [
|
||||
{ key: 'name', label: 'history:name' },
|
||||
{ key: 'names', label: 'counts:columns.names', children: child_fields('names') },
|
||||
{ key: 'aliases', label: 'tags:aliases', children: child_fields('aliases') }])
|
||||
end
|
||||
|
||||
@@ -58,7 +58,6 @@ class CountsTableExport
|
||||
def body(progress: nil, phase: nil)
|
||||
Enumerator.new do |output|
|
||||
ApplicationRecord.transaction(isolation: :repeatable_read) do
|
||||
@language_names = Language.pluck(:code, :name).to_h
|
||||
processed = 0
|
||||
started = false
|
||||
first = true
|
||||
@@ -256,6 +255,9 @@ class CountsTableExport
|
||||
def summary_value(value, index, page)
|
||||
field = @query.axes.all.fetch(index).fetch('field')
|
||||
return @labels.fetch('bot', '') if field == 'user' && value.nil?
|
||||
if ['language_code', 'source_language_code'].include?(field)
|
||||
return @labels.fetch("language:#{ value }", value)
|
||||
end
|
||||
|
||||
names = page[:axis_labels].fetch("a#{ index }", {})
|
||||
name = field == 'user' ? names[value.to_s] : names.fetch(value.to_s, value)
|
||||
@@ -327,7 +329,7 @@ class CountsTableExport
|
||||
return @query.population.timezone.utc_to_local(value.utc).iso8601
|
||||
end
|
||||
if key == 'language_code' || key == 'source_language_code'
|
||||
return @language_names[value]
|
||||
return @labels.fetch("language:#{ value }", value)
|
||||
end
|
||||
if value.is_a?(Hash)
|
||||
return value.to_h { |field, item| [@labels.fetch(camel(field.to_s), ''), csv_logical(field, item)] }
|
||||
|
||||
@@ -391,7 +391,7 @@ class CountsTableQuery
|
||||
when 'user'
|
||||
User.where(id: values).pluck(:id, :name).to_h.transform_keys(&:to_s)
|
||||
when 'language_code', 'source_language_code'
|
||||
Language.where(code: values).pluck(:code, :name).to_h
|
||||
values.to_h { [_1, _1] }
|
||||
when 'tags'
|
||||
labels = tag_labels(values)
|
||||
@axis_names["a#{ index }"] = @tag_names
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする