Project

General

Profile

Feature #2048 » changeset_journals_v1.diff

against revsion 2824 - Aaron Soules, 2009-07-21 02:53

View differences:

app/models/journal_observer.rb (working copy)
17 17

  
18 18
class JournalObserver < ActiveRecord::Observer
19 19
  def after_create(journal)
20
    Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
20
    case(journal.journalized_type)
21
    when 'Issue':
22
      Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
23
    when 'ChangeSet':
24
      # notifty revision commiter
25
      Mailer.deliver_changeset_comment(journal) if Setting.notified_events.include?('revision_comment_added')
26
    end
21 27
  end
22 28
end
app/models/mailer.rb (working copy)
72 72
         :journal => journal,
73 73
         :issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
74 74
  end
75
  
76
  def changeset_comment(journal)
77
    changeset = journal.journalized.reload
78
    redmine_headers 'Project'  => changeset.repository.project.identifier,
79
                    'Revision' => changeset.revision
80
    message_id journal
81
    references changeset
82
    @author = journal.user
83
    recipients changeset.recipients
84
    subject "[#{changeset.repository.project.name}] #{l(:label_revision)} #{changeset.revision}"
85
    body :changeset => changeset,
86
         :journal   => journal,
87
         :changeset_url => url_for(:controller => 'projects') + "/#{changeset.repository.project.identifier}/repository/revisions/#{changeset.revision}"
88
  end
75 89

  
76 90
  def reminder(user, issues, days)
77 91
    set_language_if_valid user.language
app/models/changeset.rb (working copy)
21 21
  belongs_to :repository
22 22
  belongs_to :user
23 23
  has_many :changes, :dependent => :delete_all
24
  has_many :journals, :as => :journalized, :dependent => :destroy
24 25
  has_and_belongs_to_many :issues
25 26

  
26 27
  acts_as_event :title => Proc.new {|o| "#{l(:label_revision)} #{o.revision}" + (o.short_comments.blank? ? '' : (': ' + o.short_comments))},
......
146 147
    to_utf8(str.to_s.strip)
147 148
  end
148 149
  
150
  # Returns the mail adresses of users that should be notified for the changeset
151
  # Includes: project recipients, the revision commiter, and other users who have commented
152
  def recipients
153
    recipients = repository.project.recipients
154
    recipients << user.mail if user && user.active? # committer
155
    recipients << journals.collect { |j| j.user.mail if j.user } # other commenters
156
    recipients.compact.uniq
157
  end
158
  
159
  def created_on
160
    self.committed_on
161
  end
162
  
149 163
  private
150 164

  
151 165
  def split_comments
app/controllers/repositories_controller.rb (working copy)
137 137
  def revision
138 138
    @changeset = @repository.changesets.find_by_revision(@rev)
139 139
    raise ChangesetNotFound unless @changeset
140
    @journal = @changeset.journals.new
140 141

  
142
    @journals = @changeset.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
143
    @journals.each_with_index {|j,i| j.indice = i+1}
144
    @journals.reverse! if User.current.wants_comments_in_reverse_order?
145

  
141 146
    respond_to do |format|
142 147
      format.html
143 148
      format.js {render :layout => false}
......
146 151
    show_error_not_found
147 152
  end
148 153
  
154
  def add_journal
155
    @changeset = @repository.changesets.find_by_revision(@rev)
156
    @journal = @changeset.journals.new(params[:journal])
157
    @journal.user = User.current
158
    
159
    respond_to do |format|
160
      if @journal.save
161
        format.html { redirect_to :action => :revision }
162
      else
163
        format.html { redirect_to :action => :revision }
164
      end
165
    end
166
  end
167
  
149 168
  def diff
150 169
    if params[:format] == 'diff'
151 170
      @diff = @repository.diff(@path, @rev, @rev_to)
app/views/mailer/changeset_comment.text.plain.rhtml (revision 0)
1
<%= l(:text_changeset_commented, :rev => "##{@changeset.revision}", :author => @journal.user) %>
2

  
3
<%= @journal.notes %>
4

  
5
<%= @changeset_url %>
app/views/mailer/changeset_comment.text.html.rhtml (revision 0)
1
<%= l(:text_changeset_commented, :rev => "##{@changeset.revision}", :author => @journal.user) %>
2

  
3
<%= textilizable(@journal, :notes, :only_path => false) %>
4

  
5
<h1><%= link_to "#{@changeset.revision}", @changeset_url %></h1>
app/views/repositories/revision.rhtml (working copy)
26 26

  
27 27
<%= textilizable @changeset.comments %>
28 28

  
29
<h3><%= l(:label_revision_comments) %></h3>
30

  
31
<% for journal in @journals %>
32
  <div id="change-<%= journal.id %>" class="journal">
33
    <h4><div style="float:right;"><%= link_to "##{journal.indice}", :anchor => "note-#{journal.indice}" %></div>
34
    <%= content_tag('a', '', :name => "note-#{journal.indice}")%>
35
		<%= authoring journal.created_on, journal.user, :label => :label_comment_added_time_by %></h4>
36
    <%= avatar(journal.user, :size => "32") %>
37
    <%= textilizable journal.notes %>
38
  </div>
39
  <%#= call_hook(:view_issues_history_journal_bottom, { :journal => journal }) %>
40
<% end %>
41

  
42
<div class="box">
43
  <fieldset><legend><%= l(:label_comment_add) %></legend>
44
  <% form_for :journal, @journal, :url => {:action => 'add_journal', :id => @project, :rev => @rev} do |f| %>
45
    <%= f.text_area :notes, :cols => 60, :rows => 5, :class => 'wiki-edit' %><br />
46
    <%= f.submit l(:label_comment) %>
47
  <% end %>
48
  </fieldset>
49
</div>
50

  
51

  
29 52
<% if @changeset.issues.any? %>
30 53
<h3><%= l(:label_related_issues) %></h3>
31 54
<ul>
config/settings.yml (working copy)
114 114
  default: 
115 115
  - issue_added
116 116
  - issue_updated
117
  - revision_comment_added
117 118
mail_handler_api_enabled:
118 119
  default: 0
119 120
mail_handler_api_key:
config/locales/en.yml (working copy)
545 545
  label_modification_plural: "{{count}} changes"
546 546
  label_revision: Revision
547 547
  label_revision_plural: Revisions
548
  label_revision_comments: Revision Comments
549
  label_revision_comment_add: Comment on this Revision
548 550
  label_associated_revisions: Associated revisions
549 551
  label_added: added
550 552
  label_modified: modified
......
635 637
  label_module_plural: Modules
636 638
  label_added_time_by: "Added by {{author}} {{age}} ago"
637 639
  label_updated_time_by: "Updated by {{author}} {{age}} ago"
640
  label_comment_added_time_by: "Comment added by {{author}} {{age}} ago"
638 641
  label_updated_time: "Updated {{value}} ago"
639 642
  label_jump_to_a_project: Jump to a project...
640 643
  label_file_plural: Files
......
746 749
  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
747 750
  text_issue_added: "Issue {{id}} has been reported by {{author}}."
748 751
  text_issue_updated: "Issue {{id}} has been updated by {{author}}."
752
  text_changeset_commented: "Revision {{rev}} has been commented on by {{author}}."
749 753
  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
750 754
  text_issue_category_destroy_question: "Some issues ({{count}}) are assigned to this category. What do you want to do ?"
751 755
  text_issue_category_destroy_assignments: Remove category assignments
config/routes.rb (working copy)
222 222
      repository_views.connect 'projects/:id/repository/:action/*path'
223 223
    end
224 224
    
225
    repositories.connect 'projects/:id/repository/revisions/:rev/add_journal', :action => 'add_journal', :conditions => {:method => :post}
225 226
    repositories.connect 'projects/:id/repository/:action', :conditions => {:method => :post}
226 227
  end
227 228
  
config/environments/development.rb (working copy)
13 13
config.action_controller.perform_caching             = false
14 14

  
15 15
# Don't care if the mailer can't send
16
config.action_mailer.raise_delivery_errors = false
16
config.action_mailer.raise_delivery_errors = true
lib/redmine.rb (working copy)
91 91
  map.project_module :repository do |map|
92 92
    map.permission :manage_repository, {:repositories => [:edit, :committers, :destroy]}, :require => :member
93 93
    map.permission :browse_repository, :repositories => [:show, :browse, :entry, :annotate, :changes, :diff, :stats, :graph]
94
    map.permission :view_changesets, :repositories => [:show, :revisions, :revision]
94
    map.permission :view_changesets, :repositories => [:show, :revisions, :revision, :add_journal]
95 95
    map.permission :commit_access, {}
96 96
  end
97 97

  
(1-1/2)