Crowdin / Upload translations / upload-translations (push) Skipped
Historical data migration test / test (14-alpine) (push) Canceled after 0s
Historical data migration test / test (15-alpine) (push) Canceled after 0s
Historical data migration test / test (16-alpine) (push) Canceled after 0s
Historical data migration test / test (17-alpine) (push) Canceled after 0s
Bundler Audit / security (push) Canceled after 0s
Haml Linting / lint (push) Canceled after 0s
JavaScript Linting / lint (push) Canceled after 0s
Ruby Linting / lint (push) Canceled after 0s
JavaScript Testing / test (push) Canceled after 0s
Ruby Testing / build (production) (push) Canceled after 0s
Ruby Testing / test (.ruby-version) (push) Canceled after 0s
Ruby Testing / test (3.3) (push) Canceled after 0s
Ruby Testing / test (3.4) (push) Canceled after 0s
Ruby Testing / End to End testing (.ruby-version) (push) Canceled after 0s
Ruby Testing / End to End testing (3.3) (push) Canceled after 0s
Ruby Testing / End to End testing (3.4) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.29) (push) Canceled after 0s
Check i18n / check-i18n (push) Canceled after 0s
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (javascript) (push) Canceled after 0s
CodeQL / Analyze (ruby) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.29) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (3.4, docker.elastic.co/elasticsearch/elasticsearch:7.17.29) (push) Canceled after 0s
Check formatting / lint (push) Canceled after 0s
CSS Linting / lint (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.19.2) (push) Canceled after 0s
Chromatic / Check for relevant changes (push) Canceled after 0s
Chromatic / Run Chromatic (push) Canceled after 0s
Snapshot of upstream tag v4.7.3 (commit 8ff11c2bb7b9f0714e947b10fa3629c6542c7121) from https://github.com/mastodon/mastodon, unmodified.
107 lines
2.2 KiB
Ruby
107 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Form::CustomEmojiBatch < Form::BaseBatch
|
|
attr_accessor :category_id,
|
|
:category_name,
|
|
:visible_in_picker,
|
|
:custom_emoji_ids
|
|
|
|
def save
|
|
case action
|
|
when 'update'
|
|
update!
|
|
when 'list'
|
|
list!
|
|
when 'unlist'
|
|
unlist!
|
|
when 'enable'
|
|
enable!
|
|
when 'disable'
|
|
disable!
|
|
when 'copy'
|
|
copy!
|
|
when 'delete'
|
|
delete!
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def custom_emojis
|
|
@custom_emojis ||= CustomEmoji.where(id: custom_emoji_ids)
|
|
end
|
|
|
|
def update!
|
|
verify_authorization(:update?)
|
|
|
|
category = if category_id.present?
|
|
CustomEmojiCategory.find(category_id)
|
|
elsif category_name.present?
|
|
CustomEmojiCategory.find_or_create_by!(name: category_name)
|
|
end
|
|
|
|
custom_emojis.each do |custom_emoji|
|
|
custom_emoji.update(category_id: category&.id)
|
|
log_action :update, custom_emoji
|
|
end
|
|
end
|
|
|
|
def list!
|
|
verify_authorization(:update?)
|
|
|
|
custom_emojis.each do |custom_emoji|
|
|
custom_emoji.update(visible_in_picker: true)
|
|
log_action :update, custom_emoji
|
|
end
|
|
end
|
|
|
|
def unlist!
|
|
verify_authorization(:update?)
|
|
|
|
custom_emojis.each do |custom_emoji|
|
|
custom_emoji.update(visible_in_picker: false)
|
|
log_action :update, custom_emoji
|
|
end
|
|
end
|
|
|
|
def enable!
|
|
verify_authorization(:enable?)
|
|
|
|
custom_emojis.each do |custom_emoji|
|
|
custom_emoji.update(disabled: false)
|
|
log_action :enable, custom_emoji
|
|
end
|
|
end
|
|
|
|
def disable!
|
|
verify_authorization(:disable?)
|
|
|
|
custom_emojis.each do |custom_emoji|
|
|
custom_emoji.update(disabled: true)
|
|
log_action :disable, custom_emoji
|
|
end
|
|
end
|
|
|
|
def copy!
|
|
verify_authorization(:copy?)
|
|
|
|
custom_emojis.each do |custom_emoji|
|
|
copied_custom_emoji = custom_emoji.copy!
|
|
log_action :create, copied_custom_emoji
|
|
end
|
|
end
|
|
|
|
def delete!
|
|
verify_authorization(:destroy?)
|
|
|
|
custom_emojis.each do |custom_emoji|
|
|
custom_emoji.destroy
|
|
log_action :destroy, custom_emoji
|
|
end
|
|
end
|
|
|
|
def verify_authorization(permission)
|
|
custom_emojis.each { |custom_emoji| authorize(custom_emoji, permission) }
|
|
end
|
|
end
|