diff options
-rw-r--r-- | app/controllers/messages_controller.rb | 12 | ||||
-rw-r--r-- | app/views/messages/_message.html.erb | 5 | ||||
-rw-r--r-- | app/views/messages/_messages.html.erb | 7 | ||||
-rw-r--r-- | config/routes.rb | 2 | ||||
-rw-r--r-- | test/functional/messages_controller_test.rb | 18 |
5 files changed, 43 insertions, 1 deletions
diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index a11a9a5..675507d 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -41,6 +41,17 @@ class MessagesController < ApplicationController wants.js end end + + def bulk_update + message_ids = params[:message_ids].to_a + message_ids.each do |message_id| + if message = current_user.received_messages.find(message_id) + message.read + end + end + redirect_to :action => :index + end + def show @message = Message.find(params[:id]) @@ -54,6 +65,7 @@ class MessagesController < ApplicationController wants.js {render :partial => "message", :layout => false} end end + def create thread_options = params[:message].merge({ diff --git a/app/views/messages/_message.html.erb b/app/views/messages/_message.html.erb index 87e73d3..b0a7712 100644 --- a/app/views/messages/_message.html.erb +++ b/app/views/messages/_message.html.erb @@ -18,6 +18,11 @@ %> <tr class="<%= message.aasm_state_for_user(current_user) -%>" id="<%= dom_id(message) -%>"> <td> + <%- if message.recipient == current_user and message.unread? -%> + <input type="checkbox" name="message_ids[]" value="<%= message.id -%>" class="select_msg" /> + <%- end -%> + </td> + <td> <%= sender_and_recipient_display(message) %> (<%= message.number_of_messages_in_thread %>) </td> <td> diff --git a/app/views/messages/_messages.html.erb b/app/views/messages/_messages.html.erb index cd3c583..8365ba0 100644 --- a/app/views/messages/_messages.html.erb +++ b/app/views/messages/_messages.html.erb @@ -16,8 +16,13 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. #++ %> +<%= form_tag(bulk_update_messages_path) %> +<div> + <%= link_to_function("Select all unread messages", "$$('.select_msg').each(function(c){c.checked='checked'})") %> +</div> <table class="message_list"> <tr> + <th></th> <th>Who</th> <th>What</th> <th>When</th> @@ -27,3 +32,5 @@ <% end %> </table> +<input type="submit" value="Mark selected messages as read" /> +</form> diff --git a/config/routes.rb b/config/routes.rb index ebb9858..589a773 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -107,7 +107,7 @@ ActionController::Routing::Routes.draw do |map| map.resources :messages, :member => {:reply => :post, :read => :put}, - :collection => {:auto_complete_for_recipient_login => :post, :sent => :get} + :collection => {:auto_complete_for_recipient_login => :post, :sent => :get, :bulk_update => :put} map.with_options :controller => 'sessions' do |session| session.login '/login', :action => 'new' diff --git a/test/functional/messages_controller_test.rb b/test/functional/messages_controller_test.rb index d1055c6..9017642 100644 --- a/test/functional/messages_controller_test.rb +++ b/test/functional/messages_controller_test.rb @@ -212,7 +212,25 @@ class MessagesControllerTest < ActionController::TestCase post :auto_complete_for_message_recipients, :message => {:recipients => "mik"}, :format => "js" assert_equal([users(:mike)], assigns(:users)) end + end + + context 'On PUT to bulk_update' do + setup do + @sender = Factory.create(:user) + @recipient = Factory.create(:user) + @messages = 10.times.collect{ |i| + Message.create(:sender => @sender, :recipient => @recipient, :subject => "Message #{i}", :body => "Hello world") + } + end + should 'should mark the selected messages as read' do + @request.session[:user_id] = @recipient.id + put :bulk_update, :message_ids => @messages.collect(&:id) + assert_response :redirect + @messages.each do |msg| + assert msg.reload.read? + end + end end context 'Unauthenticated GET to index' do |