]> source.dussan.org Git - redmine.git/commitdiff
Added the following permissions (#527, #585, #627):
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 16 Feb 2008 13:19:33 +0000 (13:19 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 16 Feb 2008 13:19:33 +0000 (13:19 +0000)
* edit_issue_notes: let user edit any notes
* edit_own_issue_notes: let user edit his own notes only

git-svn-id: http://redmine.rubyforge.org/svn/trunk@1152 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/journals_controller.rb
app/helpers/journals_helper.rb
app/models/journal.rb
app/views/issues/_history.rhtml
app/views/journals/update.rjs
lib/redmine.rb
test/functional/journals_controller_test.rb

index 05d41fa30d483556228aa853778fbde0fcb91af4..758b8507fcf715dd03ce5aff2ea40bdc993cdb98 100644 (file)
@@ -22,11 +22,11 @@ class JournalsController < ApplicationController
   def edit
     if request.post?
       @journal.update_attributes(:notes => params[:notes]) if params[:notes]
+      @journal.destroy if @journal.details.empty? && @journal.notes.blank?
       respond_to do |format|
         format.html { redirect_to :controller => 'issues', :action => 'show', :id => @journal.journalized_id }
         format.js { render :action => 'update' }
       end
-      return
     end
   end
   
index 2f902432d41a06ec38bb99cdb828948ea1209486..234bfabc04841581e4d4944955a094ef180ba7bc 100644 (file)
@@ -19,7 +19,7 @@ module JournalsHelper
   def render_notes(journal, options={})
     content = ''
     editable = journal.editable_by?(User.current)
-    if editable
+    if editable && !journal.notes.blank?
       links = []
       links << link_to_in_place_notes_editor(image_tag('edit.png'), "journal-#{journal.id}-notes", 
                                              { :controller => 'journals', :action => 'edit', :id => journal },
index df73084357e7ecfaddd7bd4284cce1c3ff793b95..013e2644d656498b3631cdb817fa385ecbe86f01 100644 (file)
@@ -51,6 +51,7 @@ class Journal < ActiveRecord::Base
   end
   
   def editable_by?(usr)
-    usr && usr.admin?
+    project = journalized.project
+    usr && usr.logged? && (usr.allowed_to?(:edit_issue_notes, project) || (self.user == usr && usr.allowed_to?(:edit_own_issue_notes, project)))
   end
 end
index edfb9b94d9a2dafd200e20675b030e8f660a5bf7..7c1ee2113afaad352c16e058e3add5c02a5a1d50 100644 (file)
@@ -1,5 +1,6 @@
 <% note_id = 1 %>
 <% for journal in journals %>
+    <div id="change-<%= journal.id %>">
        <h4><div style="float:right;"><%= link_to "##{note_id}", :anchor => "note-#{note_id}" %></div>
        <%= content_tag('a', '', :name => "note-#{note_id}")%>
        <%= format_time(journal.created_on) %> - <%= journal.user.name %></h4>
@@ -9,5 +10,6 @@
        <% end %>
        </ul>
        <%= render_notes(journal) unless journal.notes.blank? %>
+       </div>
        <% note_id += 1 %>
 <% end %>
index 9da0ebeae6e557891e83e404e1015cc358e14a47..2b5a54c0a40832f1d205208644129a0fa11cb4d9 100644 (file)
@@ -1,3 +1,8 @@
-page.replace "journal-#{@journal.id}-notes", render_notes(@journal)
-page.show "journal-#{@journal.id}-notes"
-page.remove "journal-#{@journal.id}-form"
+if @journal.frozen?
+  # journal was destroyed
+  page.remove "change-#{@journal.id}"
+else
+  page.replace "journal-#{@journal.id}-notes", render_notes(@journal)
+  page.show "journal-#{@journal.id}-notes"
+  page.remove "journal-#{@journal.id}-form"
+end
index b235df32e3eeb5a93f996a8504a8575fcfd93b59..e76d77e9e2340746fba939a1b82bee0d9667973c 100644 (file)
@@ -34,6 +34,8 @@ Redmine::AccessControl.map do |map|
     map.permission :edit_issues, {:issues => [:edit, :bulk_edit, :destroy_attachment]}
     map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
     map.permission :add_issue_notes, {:issues => :edit}
+    map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
+    map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
     map.permission :move_issues, {:issues => :move}, :require => :loggedin
     map.permission :delete_issues, {:issues => :destroy}, :require => :member
     # Queries
index f231d10ee3c7cc594443a51aea19a9dcae7a50d0..e6a90185cdb046bed504acc895da5144b2b90a36 100644 (file)
@@ -48,4 +48,12 @@ class JournalsControllerTest < ActionController::TestCase
     assert_select_rjs :replace, 'journal-2-notes'
     assert_equal 'Updated notes', Journal.find(2).notes
   end
+  
+  def test_post_edit_with_empty_notes
+    @request.session[:user_id] = 1
+    xhr :post, :edit, :id => 2, :notes => ''
+    assert_response :success
+    assert_select_rjs :remove, 'change-2'
+    assert_nil Journal.find_by_id(2)
+  end
 end