Implemented Gravatar support
This commit is contained in:
parent
44b084dc3a
commit
ad43499205
7 changed files with 128 additions and 55 deletions
|
@ -51,8 +51,8 @@ class UserController < ApplicationController
|
|||
if params[:user] and params[:user][:openid_url] and @user.pass_crypt.empty?
|
||||
# We are creating an account with OpenID and no password
|
||||
# was specified so create a random one
|
||||
@user.pass_crypt = SecureRandom.base64(16)
|
||||
@user.pass_crypt_confirmation = @user.pass_crypt
|
||||
@user.pass_crypt = SecureRandom.base64(16)
|
||||
@user.pass_crypt_confirmation = @user.pass_crypt
|
||||
end
|
||||
|
||||
if @user
|
||||
|
@ -127,7 +127,7 @@ class UserController < ApplicationController
|
|||
@user.terms_agreed = Time.now.getutc
|
||||
@user.terms_seen = true
|
||||
@user.openid_url = nil if @user.openid_url and @user.openid_url.empty?
|
||||
|
||||
|
||||
if @user.save
|
||||
flash[:piwik_goal] = PIWIK_SIGNUP_GOAL if defined?(PIWIK_SIGNUP_GOAL)
|
||||
flash[:notice] = t 'user.new.flash create success message', :email => @user.email
|
||||
|
@ -299,7 +299,7 @@ class UserController < ApplicationController
|
|||
referer = token.referer
|
||||
token.destroy
|
||||
|
||||
if session[:token]
|
||||
if session[:token]
|
||||
token = UserToken.find_by_token(session[:token])
|
||||
session.delete(:token)
|
||||
else
|
||||
|
@ -603,7 +603,7 @@ private
|
|||
else
|
||||
return openid_url
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# process a successful login
|
||||
|
@ -663,8 +663,15 @@ private
|
|||
user.languages = params[:user][:languages].split(",")
|
||||
|
||||
case params[:image_action]
|
||||
when "new" then user.image = params[:user][:image]
|
||||
when "delete" then user.image = nil
|
||||
when "new" then
|
||||
user.image = params[:user][:image]
|
||||
user.image_use_gravatar = false
|
||||
when "delete" then
|
||||
user.image = nil
|
||||
user.image_use_gravatar = false
|
||||
when "gravatar" then
|
||||
user.image = nil
|
||||
user.image_use_gravatar = true
|
||||
end
|
||||
|
||||
user.home_lat = params[:user][:home_lat]
|
||||
|
@ -755,7 +762,7 @@ private
|
|||
##
|
||||
#
|
||||
def disable_terms_redirect
|
||||
# this is necessary otherwise going to the user terms page, when
|
||||
# this is necessary otherwise going to the user terms page, when
|
||||
# having not agreed already would cause an infinite redirect loop.
|
||||
# it's .now so that this doesn't propagate to other pages.
|
||||
flash.now[:skip_terms] = true
|
||||
|
|
|
@ -1,22 +1,46 @@
|
|||
module UserHelper
|
||||
# User images
|
||||
|
||||
def user_image(user, options = {})
|
||||
options[:class] ||= "user_image"
|
||||
|
||||
image_tag user.image.url(:large), options
|
||||
if user.image_use_gravatar
|
||||
user_gravatar_tag(user, options)
|
||||
else
|
||||
image_tag user.image.url(:large), options
|
||||
end
|
||||
end
|
||||
|
||||
def user_thumbnail(user, options = {})
|
||||
options[:class] ||= "user_thumbnail"
|
||||
|
||||
image_tag user.image.url(:small), options
|
||||
if user.image_use_gravatar
|
||||
user_gravatar_tag(user, options)
|
||||
else
|
||||
image_tag user.image.url(:small), options
|
||||
end
|
||||
end
|
||||
|
||||
def user_thumbnail_tiny(user, options = {})
|
||||
options[:class] ||= "user_thumbnail_tiny"
|
||||
|
||||
image_tag user.image.url(:small), options
|
||||
if user.image_use_gravatar
|
||||
user_gravatar_tag(user, options)
|
||||
else
|
||||
image_tag user.image.url(:small), options
|
||||
end
|
||||
end
|
||||
|
||||
def user_image_url(user, options = {})
|
||||
if user.image_use_gravatar
|
||||
user_gravatar_url(user, options)
|
||||
else
|
||||
"http://#{SERVER_URL}#{image_path(user.image.url)}"
|
||||
end
|
||||
end
|
||||
|
||||
# OpenID support
|
||||
|
||||
def openid_logo
|
||||
image_tag "openid_small.png", :alt => t('user.login.openid_logo_alt'), :class => "openid_logo"
|
||||
end
|
||||
|
@ -29,4 +53,20 @@ module UserHelper
|
|||
:title => t("user.login.openid_providers.#{name}.title")
|
||||
)
|
||||
end
|
||||
|
||||
# Gravatar support
|
||||
|
||||
# See http://en.gravatar.com/site/implement/images/ for details.
|
||||
def user_gravatar_url(user, options = {})
|
||||
size = options[:size] || 100
|
||||
hash = Digest::MD5::hexdigest(user.email.downcase)
|
||||
default_image_url = "http://#{SERVER_URL}#{image_path("users/images/large.png")}"
|
||||
url = "http://www.gravatar.com/avatar/#{hash}.jpg?s=#{size}&d=#{u(default_image_url)}"
|
||||
end
|
||||
|
||||
def user_gravatar_tag(user, options = {})
|
||||
url = user_gravatar_url(user, options)
|
||||
options.delete(:size)
|
||||
image_tag url, options
|
||||
end
|
||||
end
|
||||
|
|
|
@ -45,12 +45,13 @@ class User < ActiveRecord::Base
|
|||
validates_inclusion_of :preferred_editor, :in => Editors::ALL_EDITORS, :allow_nil => true
|
||||
|
||||
attr_accessible :display_name, :email, :email_confirmation, :openid_url,
|
||||
:pass_crypt, :pass_crypt_confirmation, :consider_pd
|
||||
:pass_crypt, :pass_crypt_confirmation, :consider_pd,
|
||||
:image_use_gravatar
|
||||
|
||||
after_initialize :set_defaults
|
||||
before_save :encrypt_password
|
||||
|
||||
has_attached_file :image,
|
||||
has_attached_file :image,
|
||||
:default_url => "/assets/:class/:attachment/:style.png",
|
||||
:styles => { :large => "100x100>", :small => "50x50>" }
|
||||
|
||||
|
@ -82,7 +83,7 @@ class User < ActiveRecord::Base
|
|||
token.update_column(:expiry, 1.week.from_now) if token and user
|
||||
|
||||
return user
|
||||
end
|
||||
end
|
||||
|
||||
def to_xml
|
||||
doc = OSM::API.new.get_xml_doc
|
||||
|
@ -125,7 +126,7 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def nearby(radius = NEARBY_RADIUS, num = NEARBY_USERS)
|
||||
if self.home_lon and self.home_lat
|
||||
if self.home_lon and self.home_lat
|
||||
gc = OSM::GreatCircle.new(self.home_lat, self.home_lon)
|
||||
bounds = gc.bounds(radius)
|
||||
sql_for_distance = gc.sql_for_distance("home_lat", "home_lon")
|
||||
|
@ -182,7 +183,7 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
|
||||
##
|
||||
# returns the first active block which would require users to view
|
||||
# returns the first active block which would require users to view
|
||||
# a message, or nil if there are none.
|
||||
def blocked_on_view
|
||||
blocks.active.detect { |b| b.needs_view? }
|
||||
|
|
|
@ -85,26 +85,33 @@
|
|||
<%= t 'user.account.image' %>
|
||||
</td>
|
||||
<td valign="top">
|
||||
<% if @user.image.file? %>
|
||||
<table id="accountImage">
|
||||
<tr>
|
||||
<td rowspan="3" valign="top"><%= user_image @user %></td>
|
||||
<td><%= radio_button_tag "image_action", "keep", true %></td>
|
||||
<td><%= t 'user.account.keep image' %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= radio_button_tag "image_action", "delete" %></td>
|
||||
<td><%= t 'user.account.delete image' %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= radio_button_tag "image_action", "new" %></td>
|
||||
<td><%= t 'user.account.replace image' %><br /><%= f.file_field :image, :onchange => "$('image_action_new').prop('checked', true)" %><br /><span class="minorNote"><%= t 'user.account.image size hint' %></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<% else %>
|
||||
<%= hidden_field_tag "image_action", "new" %>
|
||||
<%= t 'user.account.new image' %><br /><%= f.file_field :image %><br /><span class="minorNote"><%= t 'user.account.image size hint' %></span>
|
||||
<% end %>
|
||||
<table id="accountImage">
|
||||
<% if @user.image.file? %>
|
||||
<tr>
|
||||
<td rowspan="4" valign="top"><%= user_image @user %></td>
|
||||
<td><%= radio_button_tag "image_action", "keep", !@user.image_use_gravatar %></td>
|
||||
<td><%= t 'user.account.keep image' %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= radio_button_tag "image_action", "delete" %></td>
|
||||
<td><%= t 'user.account.delete image' %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= radio_button_tag "image_action", "new" %></td>
|
||||
<td><%= t 'user.account.replace image' %><br /><%= f.file_field :image, :onchange => "$('image_action_new').prop('checked', true)" %><br /><span class="minorNote"><%= t 'user.account.image size hint' %></span></td>
|
||||
</tr>
|
||||
<% else %>
|
||||
<tr>
|
||||
<td rowspan="2" valign="top"><%= user_image @user %></td>
|
||||
<td><%= radio_button_tag "image_action", "new", !@user.image_use_gravatar %></td>
|
||||
<td><%= t 'user.account.new image' %> <%= f.file_field :image %><br /><span class="minorNote"><%= t 'user.account.image size hint' %></span></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<tr>
|
||||
<td><%= radio_button_tag "image_action", "gravatar", @user.image_use_gravatar %></td>
|
||||
<td><%= t 'user.account.gravatar.gravatar' %> <span class="minorNote">(<a href="<%= t 'user.account.gravatar.link' %>" target="_new"><%= t 'user.account.gravatar.link text' %></a>)</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -123,7 +130,7 @@
|
|||
<%= content_tag "div", "", :id => "map", :class => "user_map set_location" %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="submitButton"><%= submit_tag t('user.account.save changes button') %></td>
|
||||
|
|
|
@ -12,8 +12,8 @@ xml.osm("version" => API_VERSION, "generator" => GENERATOR) do
|
|||
else
|
||||
xml.tag! "contributor-terms", :agreed => !!@this_user.terms_agreed
|
||||
end
|
||||
if @this_user.image.file?
|
||||
xml.tag! "img", :href => "http://#{SERVER_URL}#{@this_user.image.url}"
|
||||
if @this_user.image.file? or @this_user.image_use_gravatar
|
||||
xml.tag! "img", :href => user_image_url(@this_user, :size => 256)
|
||||
end
|
||||
xml.tag! "roles" do
|
||||
@this_user.roles.each do |role|
|
||||
|
@ -35,7 +35,7 @@ xml.osm("version" => API_VERSION, "generator" => GENERATOR) do
|
|||
xml.tag! "home", :lat => @this_user.home_lat,
|
||||
:lon => @this_user.home_lon,
|
||||
:zoom => @this_user.home_zoom
|
||||
end
|
||||
end
|
||||
if @this_user.languages
|
||||
xml.tag! "languages" do
|
||||
@this_user.languages.split(",") { |lang| xml.tag! "lang", lang }
|
||||
|
|
|
@ -1023,22 +1023,22 @@ en:
|
|||
code</a> explains your rights and responsibilities.
|
||||
intro_3_html: |
|
||||
The cartography in our map tiles, and our documentation, are
|
||||
licensed under the <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative
|
||||
licensed under the <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative
|
||||
Commons Attribution-ShareAlike 2.0</a> license (CC-BY-SA).
|
||||
credit_title_html: How to credit OpenStreetMap
|
||||
credit_1_html: |
|
||||
We require that you use the credit “© OpenStreetMap
|
||||
We require that you use the credit “© OpenStreetMap
|
||||
contributors”.
|
||||
credit_2_html: |
|
||||
You must also make it clear that the data is available under the Open
|
||||
Database License, and if using our map tiles, that the cartography is
|
||||
licensed as CC-BY-SA. You may do this by linking to
|
||||
<a href="http://www.openstreetmap.org/copyright">this copyright page</a>.
|
||||
Alternatively, and as a requirement if you are distributing OSM in a
|
||||
data form, you can name and link directly to the license(s). In media
|
||||
where links are not possible (e.g. printed works), we suggest you
|
||||
direct your readers to openstreetmap.org (perhaps by expanding
|
||||
'OpenStreetMap' to this full address), to opendatacommons.org, and
|
||||
You must also make it clear that the data is available under the Open
|
||||
Database License, and if using our map tiles, that the cartography is
|
||||
licensed as CC-BY-SA. You may do this by linking to
|
||||
<a href="http://www.openstreetmap.org/copyright">this copyright page</a>.
|
||||
Alternatively, and as a requirement if you are distributing OSM in a
|
||||
data form, you can name and link directly to the license(s). In media
|
||||
where links are not possible (e.g. printed works), we suggest you
|
||||
direct your readers to openstreetmap.org (perhaps by expanding
|
||||
'OpenStreetMap' to this full address), to opendatacommons.org, and
|
||||
if relevant, to creativecommons.org.
|
||||
credit_3_html: |
|
||||
For a browsable electronic map, the credit should appear in the corner of the map.
|
||||
|
@ -1106,10 +1106,10 @@ en:
|
|||
copyrighted sources (e.g. Google Maps or printed maps) without
|
||||
explicit permission from the copyright holders.
|
||||
infringement_2_html: |
|
||||
If you believe that copyrighted material has been inappropriately
|
||||
added to the OpenStreetMap database or this site, please refer
|
||||
to our <a href="http://www.osmfoundation.org/wiki/License/Takedown_procedure">takedown
|
||||
procedure</a> or file directly at our
|
||||
If you believe that copyrighted material has been inappropriately
|
||||
added to the OpenStreetMap database or this site, please refer
|
||||
to our <a href="http://www.osmfoundation.org/wiki/License/Takedown_procedure">takedown
|
||||
procedure</a> or file directly at our
|
||||
<a href="http://dmca.openstreetmap.org/">on-line filing page</a>.
|
||||
notifier:
|
||||
diary_comment_notification:
|
||||
|
@ -1776,6 +1776,10 @@ en:
|
|||
preferred languages: "Preferred Languages:"
|
||||
preferred editor: "Preferred Editor:"
|
||||
image: "Image:"
|
||||
gravatar:
|
||||
gravatar: "Use Gravatar"
|
||||
link: "http://wiki.openstreetmap.org/wiki/Gravatar"
|
||||
link text: "what is this?"
|
||||
new image: "Add an image"
|
||||
keep image: "Keep the current image"
|
||||
delete image: "Remove the current image"
|
||||
|
|
14
db/migrate/20121012044047_add_image_use_gravatar_to_users.rb
Normal file
14
db/migrate/20121012044047_add_image_use_gravatar_to_users.rb
Normal file
|
@ -0,0 +1,14 @@
|
|||
class AddImageUseGravatarToUsers < ActiveRecord::Migration
|
||||
def self.up
|
||||
add_column :users, :image_use_gravatar, :boolean, :null => false, :default => false
|
||||
|
||||
# For people who don't have images on osm.org, enable Gravatar.
|
||||
User.where(:image_file_name => nil).update_all(:image_use_gravatar => true)
|
||||
|
||||
change_column_default :users, :image_use_gravatar, true
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :users, :image_use_gravatar
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue