Improve handling of user to user messages.
authorTom Hughes <tom@compton.nu>
Tue, 14 Aug 2007 17:29:27 +0000 (17:29 +0000)
committerTom Hughes <tom@compton.nu>
Tue, 14 Aug 2007 17:29:27 +0000 (17:29 +0000)
app/models/message.rb
app/models/user.rb
app/views/layouts/site.rhtml
app/views/message/_message_summary.rhtml [new file with mode: 0644]
app/views/message/inbox.rhtml
app/views/message/read.rhtml

index 2c176a2..039c8d3 100644 (file)
@@ -1,3 +1,4 @@
 class Message < ActiveRecord::Base
-  belongs_to :user
+  belongs_to :sender, :class_name => "User", :foreign_key => :from_user_id
+  belongs_to :recipient, :class_name => "User", :foreign_key => :to_user_id
 end
index 63f6bd3..783a9bc 100644 (file)
@@ -5,6 +5,7 @@ class User < ActiveRecord::Base
   has_many :traces
   has_many :diary_entries, :order => 'created_at DESC'
   has_many :messages, :foreign_key => :to_user_id
+  has_many :new_messages, :class_name => "Message", :foreign_key => :to_user_id, :conditions => "message_read = 0"
   has_many :friends
 
   validates_confirmation_of :pass_crypt, :message => 'Password must match the confirmation password'
@@ -76,24 +77,6 @@ class User < ActiveRecord::Base
     return OSM::GreatCircle.new(self.home_lat, self.home_lon).distance(nearby_user.home_lat, nearby_user.home_lon)
   end
 
-  def self.has_messages?
-    if Message.fdhjklsafind_by_to_user_id(self.id) 
-      return true
-    else
-      return false
-    end
-  end
-
-  def get_new_messages
-    messages = Message.find(:all, :conditions => "message_read = 0 and to_user_id = #{self.id}")
-    return messages
-  end
-
-  def get_all_messages
-    messages = Message.find(:all, :conditions => "to_user_id = #{self.id}")
-    return messages
-  end
-
   def is_friends_with?(new_friend)
     res = false
     @new_friend = new_friend
index 41c3831..2a1c8ac 100644 (file)
     <span id="greeting">
       <% if @user and @user.id %>
         Welcome, <%= link_to @user.display_name, {:controller => 'user', :action => 'view', :display_name => @user.display_name}%> | 
-        <% @inbox_weight = 'bold' if @user.get_new_messages.length > 0 %>
+        <% @inbox_weight = 'bold' if @user.new_messages.size > 0 %>
         <% if !@user.home_lon.nil? and !@user.home_lat.nil? %>
         <%= link_to 'home', {:controller => 'site', :action => 'index', :lon => @user.home_lon, :lat => @user.home_lat, :zoom => '10'} %> |
         <% end %>
-        <%= link_to "inbox (#{@user.get_new_messages.length})", {:controller => 'message', :action => 'inbox', :display_name => @user.display_name}, {:style => "font-weight: #{@inbox_weight};" } %> |
+        <%= link_to "inbox (#{@user.new_messages.size})", {:controller => 'message', :action => 'inbox', :display_name => @user.display_name}, {:style => "font-weight: #{@inbox_weight};" } %> |
         <%= link_to 'logout', {:controller => 'user', :action => 'logout', :referer => request.request_uri}, {:id => 'logoutanchor'}%>
       <% else %>
         <%= link_to 'log in', {:controller => 'user', :action => 'login', :referer => request.request_uri}, {:id => 'loginanchor'}%> |
diff --git a/app/views/message/_message_summary.rhtml b/app/views/message/_message_summary.rhtml
new file mode 100644 (file)
index 0000000..f572c89
--- /dev/null
@@ -0,0 +1,11 @@
+<tr>
+  <td><%= link_to message_summary.sender.display_name , :controller => 'user', :action => message_summary.sender.display_name %></td>
+  <td><%= link_to  message_summary.title , :controller => 'message', :action => 'read', :message_id => message_summary.id  %></td>
+  <td><%= message_summary.sent_on %></td>
+  <% if message_summary.message_read? %>
+    <td>Message read</td>
+  <% else %>
+    <td><%= button_to 'Mark as read', :controller => 'message', :action => 'mark', :message_id => message_summary.id %> </td>
+  <% end %>
+  <td><%= button_to 'Reply', :controller => 'message', :action => 'new', :user_id => message_summary.from_user_id %> </td>
+</tr>
index daae9cd..1c17ae1 100644 (file)
@@ -1,51 +1,30 @@
 <h2>My inbox</h2>
 
-<p>You have <%=@user.get_new_messages.length %> new messages and <%=@user.get_all_messages.length -  @user.get_new_messages.length %> old messages</p> 
+<p>You have <%= @user.new_messages.size %> new messages and <%= @user.messages.size -  @user.new_messages.size %> old messages</p> 
 
-<% if (params[:all] and @user.get_all_messages.length > 0) or (@user.get_new_messages.length > 0) %>
+<% if (params[:all] and @user.messages.size > 0) or (@user.new_messages.size > 0) %>
   <div id="messages">
-  <table class="messages">
-  <tr><th>from</th>
-  <th>title</th>
-  <th>received on</th>
-  <th></th>
-  <th></th></tr>
+    <table class="messages">
+      <tr>
+        <th>From</th>
+        <th>Subject</th>
+        <th>Date</th>
+        <th></th>
+        <th></th>
+      </tr>
+      <% if params[:all] %>
+        <%= render :partial => "message_summary", :collection => @user.messages %>
+      <% else %>
+        <%= render :partial => "message_summary", :collection => @user.new_messages %>
+      <% end %>
+    </table>
+  </div>
+<% end %>
 
-  <% if params[:all] %>
-    <% @user.get_all_messages.each do |message| %>
-  <tr><td><%= link_to User.find(message.from_user_id).display_name , :controller => 'user', :action => User.find(message.from_user_id).display_name %></td>
-  <td><%= link_to  message.title , :controller => 'message', :action => 'read', :message_id => message.id  %></td>
-  <td><%= message.sent_on %></td>
-  <% if message.message_read = 0 %>
-  <td><%= link_to 'mark as read', :controller => 'message', :action => 'mark', :message_id => message.id %> </td>
-  <%else%>
-  <td>message read</td>
-  <%end%>
-  <td><%= link_to 'reply', :controller => 'message', :action => 'new', :user_id => message.from_user_id %> </td>
-  </tr>
-    <%end%>
-
-  <%else%>
-
-    <% @user.get_new_messages.each do |message| %>
-  <tr><td><%= link_to User.find(message.from_user_id).display_name , :controller => 'user', :action => User.find(message.from_user_id).display_name %></td>
-  <td><%= link_to  message.title , :controller => 'message', :action => 'read', :message_id => message.id  %></td>
-  <td><%= message.sent_on %></td>
-  <% if message.message_read = 0 %>
-  <td><%= link_to 'mark as read', :controller => 'message', :action => 'mark', :message_id => message.id %> </td>
-  <%else%>
-  <td>message read</td>
-  <%end%>
-  </tr>
-    <%end%>
-  <%end%>
-
-</table>
-</div>
-<%end%>
+<br />
 
 <% if params[:all] %>
-  <%= link_to 'show new messages', :controller => 'message', :action => 'inbox', :display_name => @user.display_name %>
+  <%= link_to 'Show new messages', :controller => 'message', :action => 'inbox', :display_name => @user.display_name %>
 <% else %>
-  <%= link_to 'show all messages', :controller => 'message', :action => 'inbox', :display_name => @user.display_name, :all => true %>
-<% end %>
\ No newline at end of file
+  <%= link_to 'Show all messages', :controller => 'message', :action => 'inbox', :display_name => @user.display_name, :all => true %>
+<% end %>
index d20417e..a8bd2e7 100644 (file)
@@ -1,16 +1,29 @@
 <h2>Reading your messages</h2>
 
 <table>
-<th>from</th>
-<th>message</th>
-<th>date</th>
-<th>reply</th>
-<tr><td><%= (User.find_by_id(@message.from_user_id)).display_name %></td>
-<td><%= @message.body %></td>
-<td><%= @message.sent_on %></td>
-<td><%= link_to 'reply', :controller => 'message', :action => 'new', :user_id => @message.from_user_id %></td>
+  <tr>
+    <th>From</th>
+    <td><%= link_to @message.sender.display_name, :controller => 'user', :action => 'view', :display_name => @message.sender.display_name %></td>
+  </tr>
+  <tr>
+    <th>Subject</th>
+    <td><%= @message.title %></td>
+  </tr>
+  <tr>
+    <th>Date</th>
+    <td><%= @message.sent_on %></td>
+  </tr>
+  <tr>
+    <th>Message</th>
+    <td><%= @message.body %></td>
+  </tr>
 </table>
 
-<% form_tag :controller => 'message', :action => 'mark', :message_id => @message.id do %>
-<%= submit_tag 'Mark as read' %>
-<% end %>
+<br />
+
+<table>
+  <tr>
+    <td><%= button_to 'Reply', :controller => 'message', :action => 'new', :user_id => @message.from_user_id %></td>
+    <td><%= button_to 'Mark as read', :controller => 'message', :action => 'mark', :message_id => @message.id %></td>
+  </tr>
+</table>