discourse/lib/bookmarks_bulk_action.rb

61 lines
1.2 KiB
Ruby

# frozen_string_literal: true
class BookmarksBulkAction
def initialize(user, bookmark_ids, operation, options = {})
@user = user
@bookmark_ids = bookmark_ids
@operation = operation
@changed_ids = []
@options = options
end
def self.operations
@operations ||= %w[clear_reminder delete]
end
def perform!
if BookmarksBulkAction.operations.exclude?(@operation[:type])
raise Discourse::InvalidParameters.new(:operation)
end
case @operation[:type]
when "clear_reminder"
clear_reminder
when "delete"
delete
end
@changed_ids.sort
end
private
def delete
@bookmark_ids.each do |bookmark_id|
if guardian.can_delete?(bookmark_id)
BookmarkManager.new(@user).destroy(bookmark_id)
@changed_ids << bookmark_id
end
end
end
def clear_reminder
bookmarks.each do |bookmark|
if guardian.can_edit?(bookmark)
bookmark.clear_reminder!(force_clear_reminder_at: true)
@changed_ids << bookmark.id
else
raise Discourse::InvalidAccess.new
end
end
end
def guardian
@guardian ||= Guardian.new(@user)
end
def bookmarks
@bookmarks ||= Bookmark.where(id: @bookmark_ids)
end
end