layout 'site', :only => [:mine]
before_filter :check_api_readable
- before_filter :authorize_web, :only => [:create, :comment, :close, :destroy, :mine]
- before_filter :check_api_writable, :only => [:create, :comment, :close, :destroy]
- before_filter :set_locale, :only => [:mine]
+ before_filter :authorize_web, :only => [:mine]
+ before_filter :setup_user_auth, :only => [:create, :comment]
+ before_filter :authorize, :only => [:close, :reopen, :destroy]
+ before_filter :require_moderator, :only => [:destroy]
+ before_filter :check_api_writable, :only => [:create, :comment, :close, :reopen, :destroy]
+ before_filter :require_allow_write_notes, :only => [:create, :comment, :close, :reopen, :destroy]
+ before_filter :set_locale
after_filter :compress_output
around_filter :api_call_handle_error, :api_call_timeout
# Check the arguments are sane
raise OSM::APIBadUserInput.new("No lat was given") unless params[:lat]
raise OSM::APIBadUserInput.new("No lon was given") unless params[:lon]
- raise OSM::APIBadUserInput.new("No text was given") unless params[:text]
+ raise OSM::APIBadUserInput.new("No text was given") if params[:text].blank?
# Extract the arguments
lon = params[:lon].to_f
def comment
# Check the arguments are sane
raise OSM::APIBadUserInput.new("No id was given") unless params[:id]
- raise OSM::APIBadUserInput.new("No text was given") unless params[:text]
+ raise OSM::APIBadUserInput.new("No text was given") if params[:text].blank?
# Extract the arguments
id = params[:id].to_i
@note = Note.find(id)
raise OSM::APINotFoundError unless @note
raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible?
+ raise OSM::APINoteAlreadyClosedError.new(@note) if @note.closed?
# Add a comment to the note
Note.transaction do
@note = Note.find_by_id(id)
raise OSM::APINotFoundError unless @note
raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible?
+ raise OSM::APINoteAlreadyClosedError.new(@note) if @note.closed?
# Close the note and add a comment
Note.transaction do
end
end
+ ##
+ # Reopen a note
+ def reopen
+ # Check the arguments are sane
+ raise OSM::APIBadUserInput.new("No id was given") unless params[:id]
+
+ # Extract the arguments
+ id = params[:id].to_i
+ comment = params[:text]
+
+ # Find the note and check it is valid
+ @note = Note.find_by_id(id)
+ raise OSM::APINotFoundError unless @note
+ raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible?
+ raise OSM::APINoteAlreadyOpenError.new(@note) unless @note.closed?
+
+ # Reopen the note and add a comment
+ Note.transaction do
+ @note.reopen
+
+ add_comment(@note, comment, "reopened")
+ end
+
+ # Return a copy of the updated note
+ respond_to do |format|
+ format.xml { render :action => :show }
+ format.json { render :action => :show }
+ end
+ end
+
##
# Get a feed of recent notes and comments
def feed
# Extract the arguments
id = params[:id].to_i
+ comment = params[:text]
# Find the note and check it is valid
- note = Note.find(id)
- raise OSM::APINotFoundError unless note
- raise OSM::APIAlreadyDeletedError.new("note", note.id) unless note.visible?
+ @note = Note.find(id)
+ raise OSM::APINotFoundError unless @note
+ raise OSM::APIAlreadyDeletedError.new("note", @note.id) unless @note.visible?
# Mark the note as hidden
Note.transaction do
- note.status = "hidden"
- note.save
+ @note.status = "hidden"
+ @note.save
- add_comment(note, nil, "hidden")
+ add_comment(@note, comment, "hidden")
end
- # Render the result
- render :text => "ok\n", :content_type => "text/html"
+ # Return a copy of the updated note
+ respond_to do |format|
+ format.xml { render :action => :show }
+ format.json { render :action => :show }
+ end
end
##
@description = t 'note.mine.subheading', :user => render_to_string(:partial => "user", :object => @this_user)
@page = (params[:page] || 1).to_i
@page_size = 10
- @notes = @this_user.notes.order("updated_at DESC, id").uniq.offset((@page - 1) * @page_size).limit(@page_size).preload(:comments => :author)
+ @notes = @this_user.notes.order("updated_at DESC, id").uniq.offset((@page - 1) * @page_size).limit(@page_size).preload(:comments => :author).all
else
@title = t 'user.no_such_user.title'
@not_found_user = params[:display_name]