diff options
-rw-r--r-- | app/controllers/user_controller.rb | 5 | ||||
-rw-r--r-- | app/helpers/link_to_helper.rb | 4 | ||||
-rw-r--r-- | app/models/contact_validator.rb | 4 | ||||
-rw-r--r-- | app/models/incoming_message.rb | 4 | ||||
-rw-r--r-- | app/models/info_request.rb | 7 | ||||
-rw-r--r-- | app/models/info_request_event.rb | 4 | ||||
-rw-r--r-- | app/models/outgoing_message.rb | 4 | ||||
-rw-r--r-- | app/models/post_redirect.rb | 4 | ||||
-rw-r--r-- | app/models/public_body.rb | 4 | ||||
-rw-r--r-- | app/models/public_body_tag.rb | 4 | ||||
-rw-r--r-- | app/models/user.rb | 11 | ||||
-rw-r--r-- | app/models/user_info_request_sent_alert.rb | 4 | ||||
-rw-r--r-- | app/views/user/show.rhtml | 40 | ||||
-rw-r--r-- | db/migrate/042_unique_user_urls.rb | 17 | ||||
-rw-r--r-- | db/schema.rb | 4 | ||||
-rw-r--r-- | spec/controllers/user_controller_spec.rb | 2 | ||||
-rw-r--r-- | todo.txt | 4 |
17 files changed, 77 insertions, 49 deletions
diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index 7be9fa963..2dab3c522 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -4,7 +4,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: user_controller.rb,v 1.36 2008-03-12 13:01:04 francis Exp $ +# $Id: user_controller.rb,v 1.37 2008-03-12 16:07:13 francis Exp $ class UserController < ApplicationController # Show page about a set of users with same url name @@ -14,7 +14,8 @@ class UserController < ApplicationController return end - @display_users = User.find(:all, :conditions => [ "url_name = ? and email_confirmed", params[:url_name] ], :order => "created_at desc") + @display_user = User.find(:first, :conditions => [ "url_name = ? and email_confirmed", params[:url_name] ]) + @same_name_users = User.find(:all, :conditions => [ "name = ? and email_confirmed and id <> ?", @display_user.name, @display_user.id ], :order => "created_at") end # Login form diff --git a/app/helpers/link_to_helper.rb b/app/helpers/link_to_helper.rb index e05aebc0b..a68bdd5d4 100644 --- a/app/helpers/link_to_helper.rb +++ b/app/helpers/link_to_helper.rb @@ -5,7 +5,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: link_to_helper.rb,v 1.22 2008-03-07 23:13:38 francis Exp $ +# $Id: link_to_helper.rb,v 1.23 2008-03-12 16:07:13 francis Exp $ module LinkToHelper @@ -47,7 +47,7 @@ module LinkToHelper # Users def user_url(user) - return show_user_url(:url_name => user.url_name, :only_path => true) + "#user-" + user.id.to_s + return show_user_url(:url_name => user.url_name, :only_path => true) end def user_link(user) link_to h(user.name), user_url(user) diff --git a/app/models/contact_validator.rb b/app/models/contact_validator.rb index cfa345daf..4df57d064 100644 --- a/app/models/contact_validator.rb +++ b/app/models/contact_validator.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 39 +# Schema version: 41 # # Table name: contact_validators # @@ -15,7 +15,7 @@ # Copyright (c) 2008 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: contact_validator.rb,v 1.4 2008-02-27 14:01:30 francis Exp $ +# $Id: contact_validator.rb,v 1.5 2008-03-12 16:07:13 francis Exp $ class ContactValidator < ActiveRecord::BaseWithoutTable column :name, :string diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb index 661b3b659..a44cddcfe 100644 --- a/app/models/incoming_message.rb +++ b/app/models/incoming_message.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 39 +# Schema version: 41 # # Table name: incoming_messages # @@ -18,7 +18,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: incoming_message.rb,v 1.56 2008-03-07 23:13:38 francis Exp $ +# $Id: incoming_message.rb,v 1.57 2008-03-12 16:07:13 francis Exp $ # TODO diff --git a/app/models/info_request.rb b/app/models/info_request.rb index cdd9badb0..793506dfe 100644 --- a/app/models/info_request.rb +++ b/app/models/info_request.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 39 +# Schema version: 41 # # Table name: info_requests # @@ -13,6 +13,7 @@ # awaiting_description :boolean default(false), not null # prominence :string(255) default("normal"), not null # url_title :text not null +# solr_up_to_date :boolean default(false), not null # # models/info_request.rb: @@ -21,7 +22,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: info_request.rb,v 1.60 2008-03-11 08:14:29 francis Exp $ +# $Id: info_request.rb,v 1.61 2008-03-12 16:07:13 francis Exp $ require 'digest/sha1' @@ -126,7 +127,7 @@ public end # For request with same name as others, tag on the request numeric id while not InfoRequest.find_by_url_title(url_title, :conditions => ["id <> ?", self.id] ).nil? - url_title += "-" + self.id.to_s + url_title += "_" + self.id.to_s end write_attribute(:url_title, url_title) end diff --git a/app/models/info_request_event.rb b/app/models/info_request_event.rb index dd74db18d..e8d6098ee 100644 --- a/app/models/info_request_event.rb +++ b/app/models/info_request_event.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 39 +# Schema version: 41 # # Table name: info_request_events # @@ -16,7 +16,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: info_request_event.rb,v 1.19 2008-02-27 14:01:30 francis Exp $ +# $Id: info_request_event.rb,v 1.20 2008-03-12 16:07:13 francis Exp $ class InfoRequestEvent < ActiveRecord::Base belongs_to :info_request diff --git a/app/models/outgoing_message.rb b/app/models/outgoing_message.rb index bbbf1c7bb..3e21a8af7 100644 --- a/app/models/outgoing_message.rb +++ b/app/models/outgoing_message.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 39 +# Schema version: 41 # # Table name: outgoing_messages # @@ -21,7 +21,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: outgoing_message.rb,v 1.33 2008-03-06 01:23:38 francis Exp $ +# $Id: outgoing_message.rb,v 1.34 2008-03-12 16:07:13 francis Exp $ class OutgoingMessage < ActiveRecord::Base belongs_to :info_request diff --git a/app/models/post_redirect.rb b/app/models/post_redirect.rb index 3b79e638f..b38a63644 100644 --- a/app/models/post_redirect.rb +++ b/app/models/post_redirect.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 39 +# Schema version: 41 # # Table name: post_redirects # @@ -25,7 +25,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: post_redirect.rb,v 1.21 2008-02-28 16:25:30 francis Exp $ +# $Id: post_redirect.rb,v 1.22 2008-03-12 16:07:13 francis Exp $ require 'openssl' # for random bytes function diff --git a/app/models/public_body.rb b/app/models/public_body.rb index 82eaa5822..031c1e476 100644 --- a/app/models/public_body.rb +++ b/app/models/public_body.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 39 +# Schema version: 41 # # Table name: public_bodies # @@ -22,7 +22,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: public_body.rb,v 1.34 2008-03-07 23:13:38 francis Exp $ +# $Id: public_body.rb,v 1.35 2008-03-12 16:07:13 francis Exp $ require 'csv' require 'set' diff --git a/app/models/public_body_tag.rb b/app/models/public_body_tag.rb index 6dc60f886..bab41660f 100644 --- a/app/models/public_body_tag.rb +++ b/app/models/public_body_tag.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 39 +# Schema version: 41 # # Table name: public_body_tags # @@ -15,7 +15,7 @@ # Copyright (c) 2008 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: public_body_tag.rb,v 1.2 2008-02-27 14:01:30 francis Exp $ +# $Id: public_body_tag.rb,v 1.3 2008-03-12 16:07:13 francis Exp $ class PublicBodyTag < ActiveRecord::Base validates_presence_of :public_body diff --git a/app/models/user.rb b/app/models/user.rb index 547ae4225..14a1d63e3 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 39 +# Schema version: 41 # # Table name: users # @@ -20,7 +20,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: user.rb,v 1.34 2008-03-07 23:13:38 francis Exp $ +# $Id: user.rb,v 1.35 2008-03-12 16:07:13 francis Exp $ require 'digest/sha1' @@ -85,6 +85,13 @@ class User < ActiveRecord::Base end def update_url_name url_name = MySociety::Format.simplify_url_part(self.name) + if url_name.size > 32 + url_name = url_name[0..31] + end + # For request with same name as others, tag on the request numeric id + while not User.find_by_url_name(url_name, :conditions => ["id <> ?", self.id] ).nil? + url_name += "_" + self.id.to_s + end write_attribute(:url_name, url_name) end diff --git a/app/models/user_info_request_sent_alert.rb b/app/models/user_info_request_sent_alert.rb index a739e3f11..1e629fd58 100644 --- a/app/models/user_info_request_sent_alert.rb +++ b/app/models/user_info_request_sent_alert.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 39 +# Schema version: 41 # # Table name: user_info_request_sent_alerts # @@ -16,7 +16,7 @@ # Copyright (c) 2008 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: user_info_request_sent_alert.rb,v 1.3 2008-02-27 14:01:30 francis Exp $ +# $Id: user_info_request_sent_alert.rb,v 1.4 2008-03-12 16:07:13 francis Exp $ class UserInfoRequestSentAlert < ActiveRecord::Base belongs_to :user diff --git a/app/views/user/show.rhtml b/app/views/user/show.rhtml index 66c707433..21356f8f8 100644 --- a/app/views/user/show.rhtml +++ b/app/views/user/show.rhtml @@ -1,27 +1,29 @@ -<% @title = h(@display_users[0].name) %> +<% @title = h(@display_user.name) %> -<% if (@display_users.size > 1) %> - <p>There are <strong><%=@display_users.size%> people</strong> who've used this site called <%=h(@display_users[0].name)%>. +<% if (@same_name_users.size >= 1) %> + <p>This is <strong>one person</strong> who uses this site and has this name, you may + mean a different one: + <% for @same_name_user in @same_name_users %> + <%= user_link(@same_name_user) %> + <% end %> <% end%> -<% for display_user in @display_users %> - <div class="single_user" id="user-<%=display_user.id.to_s%>"> - <h1><%=@title%></h1> - <p class="subtitle">Joined on <%= simple_date(display_user.created_at) %></p> +<div class="single_user" id="user-<%=@display_user.id.to_s%>"> + <h1><%=@title%></h1> + <p class="subtitle">Joined on <%= simple_date(@display_user.created_at) %></p> - <p><%= link_to "Send message to " + h(display_user.name), contact_user_url(:id => display_user.id) %></p> + <p><%= link_to "Send message to " + h(@display_user.name), contact_user_url(:id => @display_user.id) %></p> - <% if display_user.info_requests.empty? %> - <p><%= display_user == @user ? 'You have' : 'This person has' %> - made no Freedom of Information requests using this site.</p> + <% if @display_user.info_requests.empty? %> + <p><%= @display_user == @user ? 'You have' : 'This person has' %> + made no Freedom of Information requests using this site.</p> - <% else %> - <h2> - <%=pluralize(display_user.info_requests.size, "Freedom of Information request") %> - </h2> + <% else %> + <h2> + <%=pluralize(@display_user.info_requests.size, "Freedom of Information request") %> + </h2> - <%= render :partial => 'request/request_listing', :locals => { :info_requests => display_user.info_requests.sort { |a,b| b.created_at <=> a.created_at } } %> - <% end %> - </div> -<% end %> + <%= render :partial => 'request/request_listing', :locals => { :info_requests => @display_user.info_requests.sort { |a,b| b.created_at <=> a.created_at } } %> + <% end %> +</div> diff --git a/db/migrate/042_unique_user_urls.rb b/db/migrate/042_unique_user_urls.rb new file mode 100644 index 000000000..1350d1580 --- /dev/null +++ b/db/migrate/042_unique_user_urls.rb @@ -0,0 +1,17 @@ +class UniqueUserUrls < ActiveRecord::Migration + def self.up + # do last registered ones first, so the last ones get rubbish URLs + User.find(:all, :order => "id desc").each do |user| + user.update_url_name + user.save! + end + remove_index :users, :url_name + add_index :users, :url_name, :unique => true + end + + def self.down + remove_index :users, :url_name + add_index :users, :url_name, :unique => false + end + +end diff --git a/db/schema.rb b/db/schema.rb index 49eec890b..00c77b946 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -9,7 +9,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 41) do +ActiveRecord::Schema.define(:version => 42) do create_table "incoming_messages", :force => true do |t| t.integer "info_request_id", :null => false @@ -134,6 +134,6 @@ ActiveRecord::Schema.define(:version => 41) do t.text "url_name", :null => false end - add_index "users", ["url_name"], :name => "index_users_on_url_name" + add_index "users", ["url_name"], :name => "index_users_on_url_name", :unique => true end diff --git a/spec/controllers/user_controller_spec.rb b/spec/controllers/user_controller_spec.rb index 66f883ef3..26d02615f 100644 --- a/spec/controllers/user_controller_spec.rb +++ b/spec/controllers/user_controller_spec.rb @@ -21,7 +21,7 @@ describe UserController, "when showing a user" do it "should assign the user" do get :show, :url_name => "bob_smith" - assigns[:display_users].should == [ users(:bob_smith_user) ] + assigns[:display_user].should == users(:bob_smith_user) end # Error handling not quite good enough for this yet @@ -1,6 +1,6 @@ Contact: -Fix user pages properly -Privacy policy + Privacy policy on new account page + Check messages look nice |