mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 09:42:07 +08:00
1ee973e6e2
When saving / creating bookmarks, we have code to save the user's preference of bookmark_auto_delete_preference to their user_options. Unfortunately this can cause weirdness when plugins have code using BookmarkManager to set the auto delete preference for only a specific bookmark. This commit introduces a save_user_preferences option (false by default) so that this user preference is not saved unless specified by the consumer of BookmarkManager, so plugins will not have to worry about it.
75 lines
2.2 KiB
Ruby
75 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class BookmarksController < ApplicationController
|
|
requires_login
|
|
|
|
def create
|
|
params.require(:bookmarkable_id)
|
|
params.require(:bookmarkable_type)
|
|
params.permit(:bookmarkable_id, :bookmarkable_type, :name, :reminder_at, :auto_delete_preference)
|
|
|
|
RateLimiter.new(
|
|
current_user, "create_bookmark", SiteSetting.max_bookmarks_per_day, 1.day.to_i
|
|
).performed!
|
|
|
|
bookmark_manager = BookmarkManager.new(current_user)
|
|
bookmark = bookmark_manager.create_for(
|
|
bookmarkable_id: params[:bookmarkable_id],
|
|
bookmarkable_type: params[:bookmarkable_type],
|
|
name: params[:name],
|
|
reminder_at: params[:reminder_at],
|
|
options: {
|
|
auto_delete_preference: params[:auto_delete_preference],
|
|
save_user_preferences: true
|
|
}
|
|
)
|
|
|
|
if bookmark_manager.errors.empty?
|
|
return render json: success_json.merge(id: bookmark.id)
|
|
end
|
|
|
|
render json: failed_json.merge(errors: bookmark_manager.errors.full_messages), status: 400
|
|
end
|
|
|
|
def destroy
|
|
params.require(:id)
|
|
destroyed_bookmark = BookmarkManager.new(current_user).destroy(params[:id])
|
|
render json: success_json.merge(BookmarkManager.bookmark_metadata(destroyed_bookmark, current_user))
|
|
end
|
|
|
|
def update
|
|
params.require(:id)
|
|
params.permit(:id, :name, :reminder_at, :auto_delete_preference)
|
|
|
|
bookmark_manager = BookmarkManager.new(current_user)
|
|
bookmark_manager.update(
|
|
bookmark_id: params[:id],
|
|
name: params[:name],
|
|
reminder_at: params[:reminder_at],
|
|
options: {
|
|
auto_delete_preference: params[:auto_delete_preference],
|
|
save_user_preferences: true
|
|
}
|
|
)
|
|
|
|
if bookmark_manager.errors.empty?
|
|
return render json: success_json
|
|
end
|
|
|
|
render json: failed_json.merge(errors: bookmark_manager.errors.full_messages), status: 400
|
|
end
|
|
|
|
def toggle_pin
|
|
params.require(:bookmark_id)
|
|
|
|
bookmark_manager = BookmarkManager.new(current_user)
|
|
bookmark_manager.toggle_pin(bookmark_id: params[:bookmark_id])
|
|
|
|
if bookmark_manager.errors.empty?
|
|
return render json: success_json
|
|
end
|
|
|
|
render json: failed_json.merge(errors: bookmark_manager.errors.full_messages), status: 400
|
|
end
|
|
end
|