discourse/lib/bookmarks_bulk_action.rb
Amanda Alves Branquinho b0d95c8c78
FEATURE: Add bulk action to bookmark (#26856)
This PR aims to add bulk actions to the user's bookmarks.

After this feature, all users should be able to select multiple bookmarks and perform the actions of "deleting" or "clear reminders"
2024-05-22 12:50:21 -03:00

55 lines
1.1 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!
unless BookmarksBulkAction.operations.include?(@operation[:type])
raise Discourse::InvalidParameters.new(:operation)
end
# careful these are private methods, we need send
send(@operation[:type])
@changed_ids.sort
end
private
def delete
@bookmark_ids.each do |b_id|
if guardian.can_delete?(b_id)
BookmarkManager.new(@user).destroy(b_id)
@changed_ids << b_id
end
end
end
def clear_reminder
bookmarks.each do |b|
if guardian.can_edit?(b)
BookmarkReminderNotificationHandler.new(b).clear_reminder
@changed_ids << b.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