commit b306fb1348f19b59565f36df8e02701498df261f Author: Yuki Sonoda (Yugui) Date: Sun Feb 20 16:22:13 2011 +0900 Allows plugins to add their own default gravatar. diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 6dc33a8..39f4496 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -81,4 +81,19 @@ module SettingsHelper l_or_humanize(notifiable.name, :prefix => 'label_'), :class => notifiable.parent.present? ? "parent" : '') end + + def default_gravatar_options + Redmine::GravatarManager.registered_gravatars.map do |name, url_or_file_name, options| + if Symbol === url_or_file_name + [name, url_or_file_name] + else + options = (options || {}).with_indifferent_access + source = image_path(url_or_file_name, options) + if source !~ %r{^[-a-z]+://} + source = "#{Setting.protocol}://#{Setting.host_name}#{source}" + end + [name, source] + end + end + end end diff --git a/app/views/settings/_display.rhtml b/app/views/settings/_display.rhtml index c6fe833..3daf4c5 100644 --- a/app/views/settings/_display.rhtml +++ b/app/views/settings/_display.rhtml @@ -15,7 +15,7 @@

<%= setting_check_box :gravatar_enabled %>

-

<%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", "retro"]], :blank => :label_none %>

+

<%= setting_select :gravatar_default, default_gravatar_options, :blank => :label_none %>

<%= submit_tag l(:button_save) %> diff --git a/lib/redmine.rb b/lib/redmine.rb index 7fcd764..9e1e0c7 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -230,4 +230,11 @@ Redmine::WikiFormatting.map do |format| format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper end +Redmine::GravatarManager.map do |options| + options.register 'Wavatars', :wavatar + options.register 'Identicons', :identicon + options.register 'Monster ids', :monsterid + options.register 'Retro', :retro +end + ActionView::Template.register_template_handler :rsb, Redmine::Views::ApiTemplateHandler diff --git a/lib/redmine/gravatar_manager.rb b/lib/redmine/gravatar_manager.rb new file mode 100644 index 0000000..b0ee921 --- /dev/null +++ b/lib/redmine/gravatar_manager.rb @@ -0,0 +1,18 @@ +module Redmine + module GravatarManager + @map = [] + + def self.map + yield self + end + + def self.register(name, url_or_file_name, options = nil) + raise ArgumentError, "gravatar name '#{name}' is already taken" if @map.assoc(name.to_s) + @map << [name.to_s, url_or_file_name.to_s, options] + end + + def self.registered_gravatars + @map.dup + end + end +end diff --git a/lib/redmine/plugin.rb b/lib/redmine/plugin.rb index f30277a..f88a43f 100644 --- a/lib/redmine/plugin.rb +++ b/lib/redmine/plugin.rb @@ -270,6 +270,13 @@ module Redmine #:nodoc: Redmine::WikiFormatting.register(name, formatter, helper) end + # Registers an option for the default gravatar + # * +label+ - human-readable name + # * +url_or_file_name+ - URL (or file name) for the image file. + def default_gravatar(label, url_or_file_name) + Redmine::GravatarManager.register(label, url_or_file_name, :plugin => self.id) + end + # Returns +true+ if the plugin can be configured. def configurable? settings && settings.is_a?(Hash) && !settings[:partial].blank?