Commit 844304db138e2c7bb6234be39301f054b7a657cb
1 parent
fb93be11
Exists in
master
and in
22 other branches
Plugins can provide additional search fields for invites
Showing
5 changed files
with
50 additions
and
2 deletions
Show diff stats
app/controllers/public/invite_controller.rb
| ... | ... | @@ -74,8 +74,11 @@ class InviteController < PublicController |
| 74 | 74 | end |
| 75 | 75 | end |
| 76 | 76 | |
| 77 | + include InviteHelper | |
| 78 | + helper :invite | |
| 79 | + | |
| 77 | 80 | def search_friend |
| 78 | - fields = %w[name identifier email] | |
| 81 | + fields = %w[name identifier email] + plugins_options.map {|field| field[:field].to_s } | |
| 79 | 82 | values = ["%#{params['q']}%"] * fields.count |
| 80 | 83 | render :text => environment.people.find(:all, :joins => ['INNER JOIN users ON profiles.user_id=users.id'], :conditions => [fields.map {|field| "LOWER(#{field}) LIKE ?"}.join(' OR '), *values]). |
| 81 | 84 | map {|person| {:id => person.id, :name => person.name} }.to_json | ... | ... |
app/helpers/invite_helper.rb
| 1 | 1 | module InviteHelper |
| 2 | + def plugins_options | |
| 3 | + @plugins.dispatch(:search_friend_fields) | |
| 4 | + end | |
| 5 | + | |
| 6 | + def search_friend_fields | |
| 7 | + labels = [ | |
| 8 | + _('Name'), | |
| 9 | + _('Username'), | |
| 10 | + _('Email'), | |
| 11 | + ] + plugins_options.map { |options| options[:name] } | |
| 12 | + | |
| 13 | + last = labels.pop | |
| 14 | + label = labels.join(', ') | |
| 15 | + "#{label} #{_('or')} #{last}" | |
| 16 | + end | |
| 2 | 17 | end | ... | ... |
app/views/invite/invite_friends.rhtml
| ... | ... | @@ -12,7 +12,7 @@ |
| 12 | 12 | <% form_tag :action => 'invite_registered_friend' do %> |
| 13 | 13 | <% search_action = url_for(:action => 'search_friend') %> |
| 14 | 14 | <%= token_input_field_tag(:q, 'search-friends', search_action, |
| 15 | - { :hint_text => _('Type in a search for your friend'), | |
| 15 | + { :hint_text => _('Type in your friend\'s ') + search_friend_fields, | |
| 16 | 16 | :focus => false }) %> |
| 17 | 17 | |
| 18 | 18 | <%= render :partial => 'invite/personalize_invitation_mail', :locals => {:mail_template => @mail_template } %> | ... | ... |
lib/noosfero/plugin.rb
| ... | ... | @@ -437,6 +437,12 @@ class Noosfero::Plugin |
| 437 | 437 | nil |
| 438 | 438 | end |
| 439 | 439 | |
| 440 | + # -> Adds aditional fields for invite_friends search | |
| 441 | + # returns = [{:field => 'field1', :name => 'field 1 name'}, {...}] | |
| 442 | + def search_friend_fields | |
| 443 | + nil | |
| 444 | + end | |
| 445 | + | |
| 440 | 446 | # -> Adds additional blocks to profiles and environments. |
| 441 | 447 | # Your plugin must implements a class method called 'extra_blocks' |
| 442 | 448 | # that returns a hash with the following syntax. | ... | ... |
test/functional/invite_controller_test.rb
| ... | ... | @@ -255,6 +255,30 @@ class InviteControllerTest < ActionController::TestCase |
| 255 | 255 | assert_equal [{"name" => friend1.name, "id" => friend1.id}, {"name" => friend2.name, "id" => friend2.id}].to_json, @response.body |
| 256 | 256 | end |
| 257 | 257 | |
| 258 | + should 'search friends profiles by fields provided by plugins' do | |
| 259 | + class Plugin1 < Noosfero::Plugin | |
| 260 | + def search_friend_fields | |
| 261 | + [{:field => 'nickname'}, {:field => 'contact_phone'}] | |
| 262 | + end | |
| 263 | + end | |
| 264 | + | |
| 265 | + environment = Environment.default | |
| 266 | + environment.enable_plugin(Plugin1) | |
| 267 | + | |
| 268 | + friend1 = create_user('harry').person | |
| 269 | + friend2 = create_user('william').person | |
| 270 | + friend1.nickname = 'prince' | |
| 271 | + friend2.contact_phone = '2222' | |
| 272 | + friend1.save | |
| 273 | + friend2.save | |
| 274 | + | |
| 275 | + get :search_friend, :profile => profile.identifier, :q => 'prince' | |
| 276 | + assert_equal [{"name" => friend1.name, "id" => friend1.id}].to_json, @response.body | |
| 277 | + | |
| 278 | + get :search_friend, :profile => profile.identifier, :q => '222' | |
| 279 | + assert_equal [{"name" => friend2.name, "id" => friend2.id}].to_json, @response.body | |
| 280 | + end | |
| 281 | + | |
| 258 | 282 | should 'invite registered users through profile id' do |
| 259 | 283 | friend1 = create_user('testuser1').person |
| 260 | 284 | friend2 = create_user('testuser2').person | ... | ... |