diff options
-rw-r--r-- | app/controllers/track_controller.rb | 11 | ||||
-rw-r--r-- | app/controllers/user_controller.rb | 58 | ||||
-rw-r--r-- | app/models/track_mailer.rb | 4 | ||||
-rw-r--r-- | app/models/track_thing.rb | 66 | ||||
-rw-r--r-- | app/views/layouts/default.rhtml | 1 | ||||
-rw-r--r-- | app/views/request/_sidebar.rhtml | 2 | ||||
-rw-r--r-- | app/views/request/_wall_listing.rhtml | 30 | ||||
-rw-r--r-- | app/views/track/_tracking_links.rhtml | 3 | ||||
-rw-r--r-- | app/views/user/_change_receive_email.rhtml | 10 | ||||
-rw-r--r-- | app/views/user/show.rhtml | 8 | ||||
-rw-r--r-- | app/views/user/wall.rhtml | 13 | ||||
-rw-r--r-- | config/routes.rb | 3 | ||||
-rw-r--r-- | db/migrate/112_add_receive_email_alerts_to_user.rb | 11 | ||||
-rw-r--r-- | public/stylesheets/main.css | 7 |
14 files changed, 182 insertions, 45 deletions
diff --git a/app/controllers/track_controller.rb b/app/controllers/track_controller.rb index 312cedc6c..f1ece3bcc 100644 --- a/app/controllers/track_controller.rb +++ b/app/controllers/track_controller.rb @@ -123,7 +123,7 @@ class TrackController < ApplicationController if @user @existing_track = TrackThing.find_by_existing_track(@user, @track_thing) if @existing_track - flash[:notice] = _("You are already being emailed updates about ") + @track_thing.params[:list_description] + flash[:notice] = _("You are already following updates about {{track_description}}", :track_description => @track_thing.params[:list_description]) return true end end @@ -135,8 +135,11 @@ class TrackController < ApplicationController @track_thing.track_medium = 'email_daily' @track_thing.tracking_user_id = @user.id @track_thing.save! - - flash[:notice] = _("You will now be emailed updates about ") + @track_thing.params[:list_description] + if @user.receive_email_alerts + flash[:notice] = _('You will now be emailed updates about {{track_description}}. <a href="{{change_email_alerts_url}}">Prefer not to receive emails?</a>', :track_description => @track_thing.params[:list_description], :change_email_alerts_url => url_for(:controller => "user", :action => "wall", :url_name => @user.url_name)) + else + flash[:notice] = _('You are now <a href="{{wall_url_user}}">following</a> updates about {{track_description}}', @track_thing.params[:list_description], :wall_url_user => url_for(:controller => "user", :action => "wall", :url_name => @user.url_name)) + end return true end @@ -179,7 +182,7 @@ class TrackController < ApplicationController new_medium = params[:track_medium] if new_medium == 'delete' track_thing.destroy - flash[:notice] = _("You will no longer be emailed updates about ") + track_thing.params[:list_description] + flash[:notice] = _("You are no longer following {{track_description}}", :track_description => track_thing.params[:list_description]) redirect_to params[:r] # Reuse code like this if we let medium change again. #elsif new_medium == 'email_daily' diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index 76c56c442..18fae7024 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -6,6 +6,8 @@ # # $Id: user_controller.rb,v 1.71 2009-09-17 07:51:47 francis Exp $ +require 'set' + class UserController < ApplicationController layout :select_layout @@ -89,6 +91,50 @@ class UserController < ApplicationController end + # Show the user's wall + def wall + long_cache + @display_user = User.find(:first, :conditions => [ "url_name = ? and email_confirmed = ?", params[:url_name], true ]) + if not @display_user + raise ActiveRecord::RecordNotFound.new("user not found, url_name=" + params[:url_name]) + end + @is_you = !@user.nil? && @user.id == @display_user.id + feed_results = Set.new + # Use search query for this so can collapse and paginate easily + # XXX really should just use SQL query here rather than Xapian. + begin + requests_query = 'requested_by:' + @display_user.url_name + comments_query = 'commented_by:' + @display_user.url_name + # XXX combine these as OR query + @xapian_requests = perform_search([InfoRequestEvent], requests_query, 'newest', 'request_collapse') + @xapian_comments = perform_search([InfoRequestEvent], comments_query, 'newest', nil) + rescue + @xapian_requests = nil + @xapian_comments = nil + end + + feed_results += @xapian_requests.results.map {|x| x[:model]} if !@xapian_requests.nil? + feed_results += @xapian_comments.results.map {|x| x[:model]} if !@xapian_comments.nil? + + # All tracks for the user + if @is_you + @track_things = TrackThing.find(:all, :conditions => ["tracking_user_id = ? and track_medium = ?", @display_user.id, 'email_daily'], :order => 'created_at desc') + end + for track_thing in @track_things + # XXX factor out of track_mailer.rb + xapian_object = InfoRequest.full_search([InfoRequestEvent], track_thing.track_query, 'described_at', true, nil, 100, 1) + feed_results += xapian_object.results.map {|x| x[:model]} + end + + @feed_results = Array(feed_results).sort {|x,y| y.created_at <=> x.created_at} + + respond_to do |format| + format.html { @has_json = true } + format.json { render :json => @display_user.json_for_api } + end + + end + # Login form def signin work_out_post_redirect @@ -533,6 +579,18 @@ class UserController < ApplicationController end end + # Change about me text on your profile page + def set_receive_email_alerts + if authenticated_user.nil? + flash[:error] = _("You need to be logged in to edit your profile.") + redirect_to frontpage_url + return + end + @user.receive_email_alerts = params[:receive_email_alerts] + @user.save! + redirect_to request.headers['HTTP_REFERER'] + end + private def is_modal_dialog diff --git a/app/models/track_mailer.rb b/app/models/track_mailer.rb index f618fba49..f4b4a5e7b 100644 --- a/app/models/track_mailer.rb +++ b/app/models/track_mailer.rb @@ -47,8 +47,8 @@ class TrackMailer < ApplicationMailer return done_something end for user in users - next if !user.should_be_emailed? - + next if !user.should_be_emailed? || !user.receive_email_alerts + email_about_things = [] track_things = TrackThing.find(:all, :conditions => [ "tracking_user_id = ? and track_medium = ?", user.id, 'email_daily' ]) for track_thing in track_things diff --git a/app/models/track_thing.rb b/app/models/track_thing.rb index f6a58189f..7f6bc9a7e 100644 --- a/app/models/track_thing.rb +++ b/app/models/track_thing.rb @@ -195,16 +195,16 @@ class TrackThing < ActiveRecord::Base if self.track_type == 'request_updates' @params = { # Website - :list_description => _("'{{link_to_request}}', a request", :link_to_request => "<a href=\"/request/" + CGI.escapeHTML(self.info_request.url_title) + "\">" + CGI.escapeHTML(self.info_request.title) + "</a>"), # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how - :verb_on_page => _("Track this request by email"), - :verb_on_page_already => _("You are already tracking this request by email"), + :list_description => _("'{{link_to_request}}', a request", :link_to_request => "<a href=\"/request/" + CGI.escapeHTML(self.info_request.url_title) + "\">" + CGI.escapeHTML(self.info_request.title) + "</a>"), # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how + :verb_on_page => _("Follow this request"), + :verb_on_page_already => _("You are already following this request"), # Email :title_in_email => _("New updates for the request '{{request_title}}'", :request_title => self.info_request.title), :title_in_rss => _("New updates for the request '{{request_title}}'", :request_title => self.info_request.title), # Authentication - :web => _("To follow updates to the request '{{request_title}}'", :request_title => CGI.escapeHTML(self.info_request.title)), - :email => _("Then you will be emailed whenever the request '{{request_title}}' is updated.", :request_title => CGI.escapeHTML(self.info_request.title)), - :email_subject => _("Confirm you want to follow updates to the request '{{request_title}}'", :request_title => self.info_request.title), + :web => _("To follow the request '{{request_title}}'", :request_title => CGI.escapeHTML(self.info_request.title)), + :email => _("Then you will be updated whenever the request '{{request_title}}' is updated.", :request_title => CGI.escapeHTML(self.info_request.title)), + :email_subject => _("Confirm you want to follow the request '{{request_title}}'", :request_title => self.info_request.title), # RSS sorting :feed_sortby => 'newest' } @@ -212,15 +212,15 @@ class TrackThing < ActiveRecord::Base @params = { # Website :list_description => _("any <a href=\"/list\">new requests</a>"), - :verb_on_page => _("Email me when there are new requests"), - :verb_on_page_already => _("You are being emailed when there are new requests"), + :verb_on_page => _("Follow all new requests"), + :verb_on_page_already => _("You are already following new requests"), # Email :title_in_email => _("New Freedom of Information requests"), :title_in_rss => _("New Freedom of Information requests"), # Authentication - :web => _("To be emailed about any new requests"), - :email => _("Then you will be emailed whenever anyone makes a new FOI request."), - :email_subject => _("Confirm you want to be emailed about new requests"), + :web => _("To be follow new requests"), + :email => _("Then you will be following all new FOI request."), + :email_subject => _("Confirm you want to follow new requests"), # RSS sorting :feed_sortby => 'newest' } @@ -228,15 +228,15 @@ class TrackThing < ActiveRecord::Base @params = { # Website :list_description => _("any <a href=\"/list/successful\">successful requests</a>"), - :verb_on_page => _("Email me new successful responses "), - :verb_on_page_already => _("You are being emailed about any new successful responses"), + :verb_on_page => _("Follow new successful responses"), + :verb_on_page_already => _("You are following all new successful responses"), # Email :title_in_email => _("Successful Freedom of Information requests"), :title_in_rss => _("Successful Freedom of Information requests"), # Authentication - :web => _("To be emailed about any successful requests"), - :email => _("Then you will be emailed whenever an FOI request succeeds."), - :email_subject => _("Confirm you want to be emailed when an FOI request succeeds"), + :web => _("To follow all successful requests"), + :email => _("Then you will be notified whenever an FOI request succeeds."), + :email_subject => _("Confirm you want to follow all successful FOI requests"), # RSS sorting - used described date, as newest would give a # date for responses possibly days before description, so # wouldn't appear at top of list when description (known @@ -246,48 +246,48 @@ class TrackThing < ActiveRecord::Base elsif self.track_type == 'public_body_updates' @params = { # Website - :list_description => _("'{{link_to_authority}}', a public authority", :link_to_authority => "<a href=\"/body/" + CGI.escapeHTML(self.public_body.url_name) + "\">" + CGI.escapeHTML(self.public_body.name) + "</a>"), # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how - :verb_on_page => _("Track requests to {{public_body_name}} by email",:public_body_name=>CGI.escapeHTML(self.public_body.name)), - :verb_on_page_already => _("You are already tracking requests to {{public_body_name}} by email", :public_body_name=>CGI.escapeHTML(self.public_body.name)), + :list_description => _("'{{link_to_authority}}', a public authority", :link_to_authority => "<a href=\"/body/" + CGI.escapeHTML(self.public_body.url_name) + "\">" + CGI.escapeHTML(self.public_body.name) + "</a>"), # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how + :verb_on_page => _("Follow requests to {{public_body_name}}",:public_body_name=>CGI.escapeHTML(self.public_body.name)), + :verb_on_page_already => _("You are already following requests to {{public_body_name}}", :public_body_name=>CGI.escapeHTML(self.public_body.name)), # Email :title_in_email => self.public_body.law_only_short + " requests to '" + self.public_body.name + "'", :title_in_rss => self.public_body.law_only_short + " requests to '" + self.public_body.name + "'", # Authentication - :web => _("To be emailed about requests made using {{site_name}} to the public authority '{{public_body_name}}'", :site_name=>MySociety::Config.get('SITE_NAME', 'Alaveteli'), :public_body_name=>CGI.escapeHTML(self.public_body.name)), - :email => _("Then you will be emailed whenever someone requests something or gets a response from '{{public_body_name}}'.", :public_body_name=>CGI.escapeHTML(self.public_body.name)), - :email_subject => _("Confirm you want to be emailed about requests to '{{public_body_name}}'", :public_body_name=>self.public_body.name), + :web => _("To follow requests made using {{site_name}} to the public authority '{{public_body_name}}'", :site_name=>MySociety::Config.get('SITE_NAME', 'Alaveteli'), :public_body_name=>CGI.escapeHTML(self.public_body.name)), + :email => _("Then you will be notified whenever someone requests something or gets a response from '{{public_body_name}}'.", :public_body_name=>CGI.escapeHTML(self.public_body.name)), + :email_subject => _("Confirm you want to follow requests to '{{public_body_name}}'", :public_body_name=>self.public_body.name), # RSS sorting :feed_sortby => 'newest' } elsif self.track_type == 'user_updates' @params = { # Website - :list_description => _("'{{link_to_user}}', a person", :link_to_user => "<a href=\"/user/" + CGI.escapeHTML(self.tracked_user.url_name) + "\">" + CGI.escapeHTML(self.tracked_user.name) + "</a>"), # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how - :verb_on_page => _("Track this person by email"), - :verb_on_page_already => _("You are already tracking this person by email"), + :list_description => _("'{{link_to_user}}', a person", :link_to_user => "<a href=\"/user/" + CGI.escapeHTML(self.tracked_user.url_name) + "\">" + CGI.escapeHTML(self.tracked_user.name) + "</a>"), # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how + :verb_on_page => _("Follow this person"), + :verb_on_page_already => _("You are already following this person"), # Email :title_in_email => _("FOI requests by '{{user_name}}'", :user_name=>self.tracked_user.name), :title_in_rss => _("FOI requests by '{{user_name}}'", :user_name=>self.tracked_user.name), # Authentication - :web => _("To be emailed about requests by '{{user_name}}'", :user_name=>CGI.escapeHTML(self.tracked_user.name)), - :email => _("Then you will be emailed whenever '{{user_name}}' requests something or gets a response.", :user_name=>CGI.escapeHTML(self.tracked_user.name)), - :email_subject => _("Confirm you want to be emailed about requests by '{{user_name}}'", :user_name=>self.tracked_user.name), + :web => _("To follow requests by '{{user_name}}'", :user_name=>CGI.escapeHTML(self.tracked_user.name)), + :email => _("Then you will be notified whenever '{{user_name}}' requests something or gets a response.", :user_name=>CGI.escapeHTML(self.tracked_user.name)), + :email_subject => _("Confirm you want to follow requests by '{{user_name}}'", :user_name=>self.tracked_user.name), # RSS sorting :feed_sortby => 'newest' } elsif self.track_type == 'search_query' @params = { # Website - :list_description => "<a href=\"/search/" + CGI.escapeHTML(self.track_query) + "/newest/advanced\">" + self.track_query_description + "</a>", # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how - :verb_on_page => _("Track things matching this search by email"), - :verb_on_page_already => _("You are already tracking things matching this search by email"), + :list_description => "<a href=\"/search/" + CGI.escapeHTML(self.track_query) + "/newest/advanced\">" + self.track_query_description + "</a>", # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how + :verb_on_page => _("Follow things matching this search"), + :verb_on_page_already => _("You are already following things matching this search"), # Email :title_in_email => _("Requests or responses matching your saved search"), :title_in_rss => _("Requests or responses matching your saved search"), # Authentication :web => _("To follow requests and responses matching your search"), - :email => _("Then you will be emailed whenever a new request or response matches your search."), - :email_subject => _("Confirm you want to be emailed about new requests or responses matching your search"), + :email => _("Then you will be notified whenever a new request or response matches your search."), + :email_subject => _("Confirm you want to follow new requests or responses matching your search"), # RSS sorting - XXX hmmm, we don't really know which to use # here for sorting. Might be a query term (e.g. 'cctv'), in # which case newest is good, or might be something like diff --git a/app/views/layouts/default.rhtml b/app/views/layouts/default.rhtml index e60e7bef2..bc9dfb02d 100644 --- a/app/views/layouts/default.rhtml +++ b/app/views/layouts/default.rhtml @@ -104,6 +104,7 @@ <% if @user %> <%=link_to _("My requests"), show_user_requests_path(:url_name => @user.url_name) %> <%=link_to _("My profile"), show_user_profile_path(:url_name => @user.url_name) %> + <%=link_to _("My wall"), show_user_wall_path(:url_name => @user.url_name) %> <% end %> diff --git a/app/views/request/_sidebar.rhtml b/app/views/request/_sidebar.rhtml index c0708a36a..bca142fa9 100644 --- a/app/views/request/_sidebar.rhtml +++ b/app/views/request/_sidebar.rhtml @@ -1,9 +1,11 @@ <div id="right_column"> + <div id="follow_box"> <h2><%= _('Follow this request') %></h2> <% follower_count = TrackThing.count(:all, :conditions => ["info_request_id = ?", @info_request.id]) + 1 %> <p><%= n_("There is %d person following this request", "There are %d people following this request", follower_count) % follower_count %></p> <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => @info_request.user == @user, :location => 'sidebar' } %> + </div> <% if @info_request.described_state != "attention_requested" %> <h2><%= _('Offensive? Unsuitable?') %></h2> <% if @info_request.attention_requested %> diff --git a/app/views/request/_wall_listing.rhtml b/app/views/request/_wall_listing.rhtml new file mode 100644 index 000000000..9cde234c0 --- /dev/null +++ b/app/views/request/_wall_listing.rhtml @@ -0,0 +1,30 @@ +<% if @highlight_words.nil? + @highlight_words = [] +end %> + +<div class="request_listing"> + <div class="request_left"> + <div class="requester"> + <% if event.event_type == 'sent' %> + <%= _('A new request, <em><a href="{{request_url}}">{{request_title}}</a></em>, was sent to {{public_body_name}} by {{info_request_user}} on {{date}}.',:public_body_name=>public_body_link_absolute(info_request.public_body),:info_request_user=>user_link_absolute(info_request.user),:date=>simple_date(event.created_at),:request_url=>request_url(info_request),:request_title=>info_request.title) %> + <% elsif event.event_type == 'followup_sent' %> + <%= _('A <a href="{{request_url}}">follow up</a> to <em>{{request_title}}</em> was sent to {{public_body_name}} by {{info_request_user}} on {{date}}.',:public_body_name=>public_body_link_absolute(info_request.public_body),:info_request_user=>user_link_absolute(info_request.user),:date=>simple_date(event.created_at),:request_url=>outgoing_message_url(event.outgoing_message),:request_title=>info_request.title) %> + <% elsif event.event_type == 'response' %> + <%= _('A <a href="{{request_url}}">response</a> to <em>{{request_title}}</em> was sent by {{public_body_name}} to {{info_request_user}} on {{date}}. The request status is: {{request_status}}',:public_body_name=>public_body_link_absolute(info_request.public_body),:info_request_user=>user_link_absolute(info_request.user),:date=>simple_date(event.created_at),:request_url=>incoming_message_url(event.incoming_message_selective_columns("incoming_messages.id")),:request_title=>info_request.title,:request_status=>info_request.display_status) %> + <% elsif event.event_type == 'comment' %> + <%= _('An <a href="{{request_url}}">annotation</a> to <em>{{request_title}}</em> was made by {{event_comment_user}} on {{date}}',:public_body_name=>public_body_link_absolute(info_request.public_body),:info_request_user=>user_link_absolute(info_request.user),:event_comment_user=>user_link_absolute(event.comment.user),:date=>simple_date(event.created_at),:request_url=>comment_url(event.comment),:request_title=>info_request.title) %> + <% else %> + <%# Events of other types will not be indexed: see InfoRequestEvent#indexed_by_search? + However, it can happen that we see other types of event transiently here in the period + between a change being made and the update-xapian-index job being run. %> + <!-- Event of type '<%= event.event_type %>', id=<%= event.id %> --> + <% end %> + </div> + </div> + <div class="request_right"> + <span class="desc"> + <%= highlight_and_excerpt(event.search_text_main(true), @highlight_words, 150) %> + </span> + </div> +</div> + diff --git a/app/views/track/_tracking_links.rhtml b/app/views/track/_tracking_links.rhtml index f50a8bbbf..5d770c742 100644 --- a/app/views/track/_tracking_links.rhtml +++ b/app/views/track/_tracking_links.rhtml @@ -17,8 +17,7 @@ <% end %> <% elsif track_thing %> <div class="feed_link feed_link_<%=location%>"> - <%= link_to '<img src="/images/email-16.png" alt="">', do_track_url(track_thing) %> - <%= link_to _("Follow by email"), do_track_url(track_thing) %> + <%= link_to _("Follow"), do_track_url(track_thing), :class => "link_button_green" %> </div> <div class="feed_link feed_link_<%=location%>"> diff --git a/app/views/user/_change_receive_email.rhtml b/app/views/user/_change_receive_email.rhtml new file mode 100644 index 000000000..1518dae9b --- /dev/null +++ b/app/views/user/_change_receive_email.rhtml @@ -0,0 +1,10 @@ +<% form_tag(:controller=>"user", :action=>"set_receive_email_alerts") do %> + <% if @user.receive_email_alerts %> + You are currently receiving notification of new activity on your wall by email. + <%= hidden_field_tag 'receive_email_alerts', 'false' %> + <%= submit_tag "Turn off email alerts" %> + <% else %> + <%= hidden_field_tag 'receive_email_alerts', 'true' %> + <%= submit_tag "Send me alerts of new activity by email" %> + <% end %> +<% end %> diff --git a/app/views/user/show.rhtml b/app/views/user/show.rhtml index f8b820f03..e2047f216 100644 --- a/app/views/user/show.rhtml +++ b/app/views/user/show.rhtml @@ -192,11 +192,13 @@ </div> <% end %> <% if @show_profile && @is_you %> + <h2 id="email_subscriptions"> <%= _("Things you're following")%></h2> + <p>You can view everything you're following on <%= link_to "your wall", show_user_wall_path %>.</p> + <%= render :partial => 'change_receive_email' %> + <br> <% if @track_things.empty? %> - <h2 id="email_subscriptions"> <%= _('Your email subscriptions')%></h2> - <p><%= _('None made.')%></p> + <p><%= _("You're not following anything.")%></p> <% else %> - <h2 id="email_subscriptions"> Your <%=pluralize(@track_things.size, _('email subscription')) %> </h2> <% if @track_things_grouped.size == 1 %> <% form_tag({:controller => 'track', :action => 'delete_all_type'}, :class => "feed_form") do %> <h3> diff --git a/app/views/user/wall.rhtml b/app/views/user/wall.rhtml new file mode 100644 index 000000000..b48169908 --- /dev/null +++ b/app/views/user/wall.rhtml @@ -0,0 +1,13 @@ +<% @title = h(@display_user.name) + _(" - wall") %> + +<p>This page lists your own activity, and activity you've followed. You can change what you're following on <%= link_to "your profile page", show_user_profile_path %>.</p> + <%= render :partial => 'change_receive_email' %> +<div id="user_profile_search"> + <% if !@feed_results.nil? %> + <% for result in @feed_results %> + <%= render :partial => 'request/wall_listing', :locals => { :event => result, :info_request => result.info_request } %> + <% end %> + <% end %> + + +</div> diff --git a/config/routes.rb b/config/routes.rb index ca032c7df..0ba8139c2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -82,6 +82,7 @@ ActionController::Routing::Routes.draw do |map| user.show_user '/user/:url_name.:format', :action => 'show' user.show_user_profile '/user/:url_name/profile.:format', :action => 'show', :view => 'profile' user.show_user_requests '/user/:url_name/requests.:format', :action => 'show', :view => 'requests' + user.show_user_wall '/user/:url_name/wall.:format', :action => 'wall' user.contact_user '/user/contact/:id', :action => 'contact' user.signchangepassword '/profile/change_password', :action => 'signchangepassword' @@ -92,7 +93,7 @@ ActionController::Routing::Routes.draw do |map| user.get_profile_photo '/user/:url_name/photo.png', :action => 'get_profile_photo' user.get_draft_profile_photo '/profile/draft_photo/:id.png', :action => 'get_draft_profile_photo' user.set_profile_about_me '/profile/set_about_me', :action => 'set_profile_about_me' - + user.set_receive_email_alerts '/profile/set_receive_alerts', :action => 'set_receive_email_alerts' user.river '/profile/river', :action => 'river' end diff --git a/db/migrate/112_add_receive_email_alerts_to_user.rb b/db/migrate/112_add_receive_email_alerts_to_user.rb new file mode 100644 index 000000000..7e06dd275 --- /dev/null +++ b/db/migrate/112_add_receive_email_alerts_to_user.rb @@ -0,0 +1,11 @@ +class AddReceiveEmailAlertsToUser < ActiveRecord::Migration + def self.up + add_column :users, :receive_email_alerts, :boolean, :default => true, :null => false + end + def self.down + remove_column :users, :receive_email_alerts + end +end + + + diff --git a/public/stylesheets/main.css b/public/stylesheets/main.css index 0c2239409..79a5ad342 100644 --- a/public/stylesheets/main.css +++ b/public/stylesheets/main.css @@ -882,6 +882,13 @@ vertical-align:middle; text-decoration:none; } +#follow_box { + background: #FFFFD2; + border-radius: 4px; + border: solid #5F5F5F 1px; + padding: 4px; +} + h2,dt { font-size:1.8em; } |