summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/messages_controller.rb12
-rw-r--r--app/views/messages/_message.html.erb5
-rw-r--r--app/views/messages/_messages.html.erb7
-rw-r--r--config/routes.rb2
-rw-r--r--test/functional/messages_controller_test.rb18
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