Feature #1070 » redmine-note-edit.patch
| /var/www/html/redmine/app/controllers/issues_controller.rb 2008-04-16 13:31:58.000000000 -0400 | ||
|---|---|---|
| 17 | 17 | |
| 18 | 18 |
class IssuesController < ApplicationController |
| 19 | 19 |
layout 'base' |
| 20 |
before_filter :find_project, :authorize, :except => [:index, :changes, :preview] |
|
| 20 |
before_filter :find_project, :authorize, :except => [:index, :changes, :preview, :note_preview, :journal_preview, :edit_note]
|
|
| 21 | 21 |
before_filter :find_optional_project, :only => [:index, :changes] |
| 22 | 22 |
accept_key_auth :index, :changes |
| 23 | 23 |
|
| 24 |
cache_sweeper :issue_sweeper, :only => [ :edit, :change_status, :destroy ] |
|
| 24 |
cache_sweeper :issue_sweeper, :only => [ :edit, :edit_note, :change_status, :destroy ]
|
|
| 25 | 25 | |
| 26 | 26 |
helper :projects |
| 27 | 27 |
include ProjectsHelper |
| ... | ... | |
| 113 | 113 |
end |
| 114 | 114 |
end |
| 115 | 115 |
end |
| 116 |
|
|
| 116 | ||
| 117 |
def edit_note |
|
| 118 |
logger.debug "edit note(#{params[:journal_id]}): [#{params[:journal][:notes]}]"
|
|
| 119 |
if request.get? |
|
| 120 |
@journal = Journal.find_by_id(params[:journal_id]) |
|
| 121 |
logger.debug "get note(#{params[:journal_id]}): [#{@journal.notes}]"
|
|
| 122 |
else |
|
| 123 |
begin |
|
| 124 |
@journal = Journal.find_by_id(params[:journal_id]) |
|
| 125 |
logger.debug "existing note(#{params[:journal_id]}): [#{@journal.notes}]"
|
|
| 126 |
@journal.notes = params[:journal][:notes] |
|
| 127 |
if @journal.save |
|
| 128 |
logger.debug "save note(#{params[:journal_id]}): [#{@journal.notes}]"
|
|
| 129 |
flash[:notice] = l(:notice_successful_update) |
|
| 130 |
logger.debug "redirecting to [#{@issue}]"
|
|
| 131 |
redirect_to :action => 'show', :id => params[:id] |
|
| 132 |
# redirect_to(params[:back_to] || {:action => 'show', :id => @issue})
|
|
| 133 |
end |
|
| 134 |
rescue ActiveRecord::StaleObjectError |
|
| 135 |
# Optimistic locking exception |
|
| 136 |
flash[:error] = l(:notice_locking_conflict) |
|
| 137 |
end |
|
| 138 |
end |
|
| 139 |
end |
|
| 140 | ||
| 117 | 141 |
def add_note |
| 118 | 142 |
journal = @issue.init_journal(User.current, params[:notes]) |
| 119 | 143 |
attachments = attach_files(@issue, params[:attachments]) |
| ... | ... | |
| 194 | 218 |
@text = params[:issue][:description] |
| 195 | 219 |
render :partial => 'common/preview' |
| 196 | 220 |
end |
| 221 | ||
| 222 |
def note_preview |
|
| 223 |
@text = params[:notes] |
|
| 224 |
logger.debug "note preview [#{@text}]"
|
|
| 225 |
render :partial => 'common/preview' |
|
| 226 |
end |
|
| 227 |
|
|
| 228 |
def journal_preview |
|
| 229 |
@text = params[:journal][:notes] |
|
| 230 |
logger.debug "journal note preview [#{@text}]"
|
|
| 231 |
render :partial => 'common/preview' |
|
| 232 |
end |
|
| 197 | 233 |
|
| 198 | 234 |
private |
| 199 | 235 |
def find_project |
| /var/www/html/redmine/app/views/issues/change_status.rhtml 2008-04-15 11:55:56.000000000 -0400 | ||
|---|---|---|
| 2 | 2 | |
| 3 | 3 |
<%= error_messages_for 'issue' %> |
| 4 | 4 |
<% labelled_tabular_form_for(:issue, @issue, :url => {:action => 'change_status', :id => @issue}, :html => {:multipart => true}) do |f| %>
|
| 5 | ||
| 5 |
<div id="change-status"> |
|
| 6 | 6 |
<%= hidden_field_tag 'confirm', 1 %> |
| 7 | 7 |
<%= hidden_field_tag 'new_status_id', @new_status.id %> |
| 8 | 8 |
<%= f.hidden_field :lock_version %> |
| ... | ... | |
| 33 | 33 |
<%= image_to_function "add.png", "addFileField();return false" %></label> |
| 34 | 34 |
<%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)</em></p> |
| 35 | 35 |
</div> |
| 36 |
</div> |
|
| 36 | 37 | |
| 37 | 38 |
<%= submit_tag l(:button_save) %> |
| 39 |
<%= link_to_remote l(:label_preview), |
|
| 40 |
{ :url => {:controller => 'issues',
|
|
| 41 |
:action => 'preview', |
|
| 42 |
:id => @issue }, |
|
| 43 |
:method => 'post', |
|
| 44 |
:update => 'preview', |
|
| 45 |
:with => "Form.serialize('change-status')",
|
|
| 46 |
:complete => "location.href='#preview-top'" |
|
| 47 |
}, :accesskey => accesskey(:preview) %> |
|
| 38 | 48 |
<% end %> |
| 49 |
<a name="preview-top"></a> |
|
| 50 |
<div id="preview" class="wiki"></div> |
|
| /var/www/html/redmine/app/views/issues/_history.rhtml 2008-04-16 13:26:05.000000000 -0400 | ||
|---|---|---|
| 1 | 1 |
<% note_id = 1 %> |
| 2 | 2 |
<% for journal in journals %> |
| 3 |
<h4><div style="float:right;"><%= link_to "##{note_id}", :anchor => "note-#{note_id}" %></div>
|
|
| 3 |
<div class="journal"> |
|
| 4 |
<h4><div style="float:right;"> |
|
| 5 |
<% if authorize_for('issues', 'destroy') or User.current.id == journal.user.id %>
|
|
| 6 |
<%= show_and_goto_link(l(:button_edit), "edit-note-#{note_id}", :class => 'icon icon-note') %>
|
|
| 7 |
<% end %> |
|
| 8 |
<%= link_to "##{note_id}", :anchor => "note-#{note_id}" %>
|
|
| 4 | 9 |
<%= content_tag('a', '', :name => "note-#{note_id}")%>
|
| 10 |
</div> |
|
| 5 | 11 |
<%= format_time(journal.created_on) %> - <%= journal.user.name %></h4> |
| 6 | 12 |
<ul> |
| 7 | 13 |
<% for detail in journal.details %> |
| ... | ... | |
| 9 | 15 |
<% end %> |
| 10 | 16 |
</ul> |
| 11 | 17 |
<%= textilizable(journal.notes) unless journal.notes.blank? %> |
| 12 |
<% note_id += 1 %> |
|
| 18 | ||
| 19 |
<% if authorize_for('issues', 'destroy') or User.current.id == journal.user.id %>
|
|
| 20 |
<a name="edit-note-anchor"></a> |
|
| 21 |
<% labelled_tabular_form_for :journal, journal, |
|
| 22 |
:url => {:controller => 'issues',
|
|
| 23 |
:action => 'edit_note', |
|
| 24 |
:id => @issue, |
|
| 25 |
:journal_id => journal.id }, |
|
| 26 |
:html => {:id => "edit-note-#{note_id}",
|
|
| 27 |
:style => "display:none;"} do |f| %> |
|
| 28 |
<%= render :partial => 'note_form', :locals => {:f => f } %>
|
|
| 29 | ||
| 30 |
<%= submit_tag l(:button_save) %> |
|
| 31 |
<%= link_to_remote l(:label_preview), |
|
| 32 |
{ :url => {:controller => 'issues',
|
|
| 33 |
:action => 'journal_preview', |
|
| 34 |
:id => @issue }, |
|
| 35 |
:method => 'post', |
|
| 36 |
:update => "preview-#{note_id}",
|
|
| 37 |
:with => "Form.serialize('edit-note-#{note_id}')",
|
|
| 38 |
:complete => "location.href='#preview-top-#{note_id}'"
|
|
| 39 |
}, :accesskey => accesskey(:preview) %> |
|
| 40 |
<%= toggle_link l(:button_cancel), "edit-note-#{note_id}" %>
|
|
| 41 |
<% end %> |
|
| 42 | ||
| 43 |
<%= content_tag('a', '', :name => "preview-top-#{note_id}") %>
|
|
| 44 |
<%= content_tag('div', '', :id => "preview-#{note_id}", :class => "wiki") %>
|
|
| 45 |
<% end %> |
|
| 46 | ||
| 47 |
</div> |
|
| 48 |
<% note_id += 1 %> |
|
| 13 | 49 |
<% end %> |
| /var/www/html/redmine/app/views/issues/show.rhtml 2008-04-16 13:27:50.000000000 -0400 | ||
|---|---|---|
| 106 | 106 |
<%= wikitoolbar_for 'notes' %> |
| 107 | 107 |
<%= render :partial => 'attachments/form' %> |
| 108 | 108 |
<%= submit_tag l(:button_add) %> |
| 109 |
<%= link_to_remote l(:label_preview), |
|
| 110 |
{ :url => {:controller => 'issues',
|
|
| 111 |
:action => 'note_preview', |
|
| 112 |
:id => @issue }, |
|
| 113 |
:method => 'post', |
|
| 114 |
:update => 'preview', |
|
| 115 |
:with => "Form.serialize('add-note')",
|
|
| 116 |
:complete => "location.href='#preview-top'" |
|
| 117 |
}, :accesskey => accesskey(:preview) %> |
|
| 109 | 118 |
<%= toggle_link l(:button_cancel), 'add-note' %> |
| 110 | 119 |
<% end %> |
| 120 |
<a name="preview-top"></a> |
|
| 121 |
<div id="preview" class="wiki"></div> |
|
| 111 | 122 |
</div> |
| 112 | 123 |
<% end %> |
| 113 | 124 | |
| /var/www/html/redmine/lang/en.yml 2008-04-15 15:04:58.000000000 -0400 | ||
|---|---|---|
| 212 | 212 |
label_issue_plural: Issues |
| 213 | 213 |
label_issue_view_all: View all issues |
| 214 | 214 |
label_issues_by: Issues by %s |
| 215 |
label_note_edit: Edit Note |
|
| 215 | 216 |
label_document: Document |
| 216 | 217 |
label_document_new: New document |
| 217 | 218 |
label_document_plural: Documents |