messaging stuff and home location selection
authorNick Black <nickb@svn.openstreetmap.org>
Sat, 5 May 2007 16:05:00 +0000 (16:05 +0000)
committerNick Black <nickb@svn.openstreetmap.org>
Sat, 5 May 2007 16:05:00 +0000 (16:05 +0000)
app/controllers/message_controller.rb
app/models/user.rb
app/views/user/view.rhtml
config/routes.rb
db/migrate.sql
public/stylesheets/site.css

index c266582f5633eda40c02596e6d1925e7cc312590..a2245ce8612c103aafacf4d628e7e5bdb9bc1907 100644 (file)
@@ -6,12 +6,14 @@ class MessageController < ApplicationController
 
   def new
     if params[:message]
+      to_user = User.find_by_display_name(params[:display_name])
       body = params[:message][:body]
       title = params[:message][:title]
       message = Message.new
       message.body = body
       message.title = title
-      message.to_user_id = User.find_by_display_name(params[:display_name]).id
+      message.to_user_id = to_user.id
+      message.from_display_name = to_user.display_name
       message.from_user_id = @user.id
       message.sent_on = Time.now
       if message.save
@@ -19,7 +21,26 @@ class MessageController < ApplicationController
       else
         @message.errors.add("Sending message failed")
       end
-      
-   end
+
+    end
+  end
+
+  def read
+    if params[:message_id]
+      id = params[:message_id]
+      @message = Message.find_by_id(id)
+    end
+  end
+
+  def mark
+    if params[:message_id]
+      id = params[:message_id]
+      message = Message.find_by_id(id)
+      message.message_read = 1
+      if message.save
+        flash[:notice] = 'Message Marked as read'
+        redirect_to :controller => 'user', :action => 'view', :display_name => @user.display_name
+      end
+    end
   end
 end
index 1261e5a181ec46886f568344d815b2ff9a1d0b24..f72fd5bfadd59a1aa025ba0e368b97dc0044e5f9 100644 (file)
@@ -78,12 +78,12 @@ class User < ActiveRecord::Base
   end
 
   def get_new_messages
-    messages = Message.find(:all, :conditions => "message_read = 0")
+    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 => "message_read = 0")
+    messages = Message.find(:all, :conditions => "to_user_id = #{self.id}")
     return messages
   end
 
index 8a50ae321d400c2f4d0dbe1447da88ecb096f8ba..6f6bdb450540ba7d30077322188da03d35a5c73e 100644 (file)
@@ -1,33 +1,71 @@
 <h2><%= @this_user.display_name %></h2>
 <% if @user and @this_user.id == @user.id %>
 <% if @user.has_messages? %>
-<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.get_new_messages.length %> new messages and <%=@user.get_all_messages.length -  @user.get_new_messages.length %> old messages:</p> 
+
+<div id = "messages">
 <table class="messages">
 <th>from<th>
 <th>title<th>
 <th>received on<th>
+<th>mark as read<th>
+<th>reply<th>
 <th><th>
 
-<% @user.get_new_messages.each do |message| %>
+<% if params[:unread] %>
+<% @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>
-<td><%= link_to 'reply', :controller => 'message', :action => 'new', :display_name => User.find(message.from_user_id).display_name %></td>
+<% if message.message_read = 0 %>
+<td><%= link_to 'mark as read', :controller => 'message', :action => 'mark', :message_id => message.id %> </td>
+<td><%= link_to 'reply', :controller => 'message', :action => 'new', :user_id => message.from_user_id %> </td>
+<%else%>
+<td>message read</td>
+<%end%>
+<%end%>
+</tr>
+
+<%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>
+
+<%else%>
+<p>You have no messages.  </p>
 <%end%>
+
+<br />
+<br />
+<%= link_to 'show unread messages', :controller => 'user', :action => 'view', :display_name => @user.display_name, :unread => true %>
+<br />
 <br />
 
-  <%= link_to 'go to your account page', :controller => 'user', :action => 'account', :display_name => @user.display_name %><br /><br />
+<%= link_to 'go to your account page', :controller => 'user', :action => 'account', :display_name => @user.display_name %><br /><br />
+
 <% else %>
-  <%= link_to 'send message', :controller => 'message', :action => 'new', :display_name => @this_user.display_name %><br /><br /> 
-  <%= link_to 'Add as friend', :controller => 'user', :action => 'make_friend', :display_name => @this_user.display_name %><br /><br />
+<%= link_to 'send message', :controller => 'message', :action => 'new', :display_name => @this_user.display_name %><br /><br /> 
+<%= link_to 'Add as friend', :controller => 'user', :action => 'make_friend', :display_name => @this_user.display_name %><br /><br />
 <% end %>
 
 <%= link_to 'diary', :controller => 'user', :action => 'diary', :display_name => @this_user.display_name %><br /><br />
 
+
+<p><%= params[:display_name] %> says:  </p>
 <%= simple_format(@this_user.description) %>
 
 
index dd08c78152aaf19bfbe5e73fc29175eae467d107..ecfdabb302f6ed2ea2268044a164af7a34b436ff 100644 (file)
@@ -83,7 +83,9 @@ ActionController::Routing::Routes.draw do |map|
 
   # messages
 
-  map.connect '/message/new/:display_name', :controller => 'message', :action => 'new'
+  map.connect '/message/new/:user_id', :controller => 'message', :action => 'new'
+  map.connect '/message/read/:message_id', :controller => 'message', :action => 'read'
+  map.connect '/message/mark/:message_id', :controller => 'message', :action => 'mark'
   
   # fall through
      map.connect ':controller/:id/:action'
index 302ad2a6ccfef0b5cb8cbd1184b6e0ab05e1a16d..35c5a7659db1237f48e77b1555f4f7cdf3214f43 100644 (file)
@@ -45,7 +45,8 @@ alter table users add column home_zoom int(2) default 3);
 alter table users add column within_lon double default 2;
 alter table users add column within_lat double default 2;
 
-create table messages (id bigint not null auto_increment, user_id bigint(20) not null,  from_user_id bigint(20) not null, title varchar(255), body text, sent_on datetime, message_read boolean default 0, primary key(id));
+create table messages (id bigint not null auto_increment, user_id bigint(20) not null,  from_user_id bigint(20) not null, from_display_name varchar(255) default "", title varchar(255), body text, sent_on datetime, message_read boolean default 0, primary key(id));
+create index from_name_idx on messages(from_display_name);
 
 create table friends (id bigint not null auto_increment, user_id bigint(20) not null, friend_user_id(20) not null, primary key(id));
 create index user_id_idx on friends(friend_user_id);
index 061887c867abafd8e74de0ffcbd13ae966a98bdc..54a33db4142074ec05ea347044efd2fdcf20b34e 100644 (file)
@@ -124,6 +124,11 @@ body {
   text-decoration: none;\r
 }\r
 \r
+#messages {\r
+  border: 1px solid #ccc;\r
+}\r
+\r
+\r
 #left_menu a:visited {\r
   color: #000000;\r
   text-decoration: none;\r