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 }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue