gitlab-org--gitlab-foss/app/controllers/projects/notes_controller.rb

113 lines
2.4 KiB
Ruby
Raw Normal View History

class Projects::NotesController < Projects::ApplicationController
2011-10-08 17:36:38 -04:00
# Authorize
2011-12-15 16:57:46 -05:00
before_filter :authorize_read_note!
before_filter :authorize_write_note!, only: [:create]
before_filter :authorize_admin_note!, only: [:update, :destroy]
2011-10-08 17:36:38 -04:00
2012-02-24 02:16:06 -05:00
def index
current_fetched_at = Time.now.to_i
@notes = NotesFinder.new.execute(project, current_user, params)
notes_json = { notes: [], last_fetched_at: current_fetched_at }
@notes.each do |note|
notes_json[:notes] << {
id: note.id,
html: note_to_html(note)
}
end
render json: notes_json
2012-02-24 02:16:06 -05:00
end
2011-10-08 17:36:38 -04:00
def create
2014-06-17 15:09:01 -04:00
@note = Notes::CreateService.new(project, current_user, params[:note]).execute
2011-10-08 17:36:38 -04:00
respond_to do |format|
format.json { render_note_json(@note) }
format.html { redirect_to :back }
2011-10-08 17:36:38 -04:00
end
end
def update
note.update_attributes(params[:note])
note.reset_events_cache
2011-10-08 17:36:38 -04:00
respond_to do |format|
format.json { render_note_json(note) }
format.html { redirect_to :back }
2011-10-08 17:36:38 -04:00
end
end
def destroy
note.destroy
note.reset_events_cache
respond_to do |format|
format.js { render nothing: true }
end
end
def delete_attachment
note.remove_attachment!
note.update_attribute(:attachment, nil)
respond_to do |format|
format.js { render nothing: true }
end
end
2012-08-08 05:25:24 -04:00
def preview
render text: view_context.markdown(params[:note])
2012-08-08 05:25:24 -04:00
end
private
def note
@note ||= @project.notes.find(params[:id])
end
def note_to_html(note)
render_to_string(
"projects/notes/_note",
layout: false,
formats: [:html],
locals: { note: note }
)
end
def note_to_discussion_html(note)
render_to_string(
"projects/notes/_diff_notes_with_reply",
layout: false,
formats: [:html],
locals: { notes: [note] }
)
end
def note_to_discussion_with_diff_html(note)
return unless note.for_diff_line?
render_to_string(
"projects/notes/_discussion",
layout: false,
formats: [:html],
locals: { discussion_notes: [note] }
)
end
def render_note_json(note)
render json: {
id: note.id,
discussion_id: note.discussion_id,
html: note_to_html(note),
discussion_html: note_to_discussion_html(note),
discussion_with_diff_html: note_to_discussion_with_diff_html(note)
}
end
def authorize_admin_note!
return access_denied! unless can?(current_user, :admin_note, note)
end
2011-10-08 17:36:38 -04:00
end