2013-06-23 12:47:22 -04:00
|
|
|
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!
|
2012-08-10 18:07:50 -04:00
|
|
|
before_filter :authorize_write_note!, only: [:create]
|
2013-12-25 15:32:23 -05:00
|
|
|
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
|
2014-04-28 06:42:01 -04:00
|
|
|
current_fetched_at = Time.now.to_i
|
2014-02-25 12:15:08 -05:00
|
|
|
@notes = NotesFinder.new.execute(project, current_user, params)
|
2012-10-29 10:56:17 -04:00
|
|
|
|
2014-04-28 06:21:49 -04:00
|
|
|
notes_json = { notes: [], last_fetched_at: current_fetched_at }
|
2012-10-10 06:06:30 -04:00
|
|
|
|
2013-12-25 15:32:23 -05:00
|
|
|
@notes.each do |note|
|
|
|
|
notes_json[:notes] << {
|
|
|
|
id: note.id,
|
|
|
|
html: note_to_html(note)
|
|
|
|
}
|
2013-11-29 07:46:40 -05:00
|
|
|
end
|
2013-12-25 15:32:23 -05:00
|
|
|
|
|
|
|
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|
|
2013-12-25 15:32:23 -05:00
|
|
|
format.json { render_note_json(@note) }
|
|
|
|
format.html { redirect_to :back }
|
2011-10-08 17:36:38 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-12-25 15:32:23 -05:00
|
|
|
def update
|
|
|
|
note.update_attributes(params[:note])
|
|
|
|
note.reset_events_cache
|
2011-10-08 17:36:38 -04:00
|
|
|
|
|
|
|
respond_to do |format|
|
2013-12-25 15:32:23 -05:00
|
|
|
format.json { render_note_json(note) }
|
|
|
|
format.html { redirect_to :back }
|
2011-10-08 17:36:38 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-12-25 15:32:23 -05:00
|
|
|
def destroy
|
|
|
|
note.destroy
|
|
|
|
note.reset_events_cache
|
2013-06-25 18:46:07 -04:00
|
|
|
|
|
|
|
respond_to do |format|
|
2013-12-25 15:32:23 -05:00
|
|
|
format.js { render nothing: true }
|
2013-06-25 18:46:07 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def delete_attachment
|
2013-12-25 15:32:23 -05:00
|
|
|
note.remove_attachment!
|
|
|
|
note.update_attribute(:attachment, nil)
|
2013-06-25 18:46:07 -04:00
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.js { render nothing: true }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-08-08 05:25:24 -04:00
|
|
|
def preview
|
2012-08-10 18:07:50 -04:00
|
|
|
render text: view_context.markdown(params[:note])
|
2012-08-08 05:25:24 -04:00
|
|
|
end
|
2013-12-25 15:32:23 -05:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2014-06-24 07:57:59 -04:00
|
|
|
def note_to_discussion_with_diff_html(note)
|
2014-06-25 03:14:35 -04:00
|
|
|
return unless note.for_diff_line?
|
|
|
|
|
2014-06-24 07:57:59 -04:00
|
|
|
render_to_string(
|
|
|
|
"projects/notes/_discussion",
|
|
|
|
layout: false,
|
|
|
|
formats: [:html],
|
|
|
|
locals: { discussion_notes: [note] }
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2013-12-25 15:32:23 -05:00
|
|
|
def render_note_json(note)
|
|
|
|
render json: {
|
|
|
|
id: note.id,
|
|
|
|
discussion_id: note.discussion_id,
|
|
|
|
html: note_to_html(note),
|
2014-06-24 07:57:59 -04:00
|
|
|
discussion_html: note_to_discussion_html(note),
|
|
|
|
discussion_with_diff_html: note_to_discussion_with_diff_html(note)
|
2013-12-25 15:32:23 -05:00
|
|
|
}
|
|
|
|
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
|