From 310f1e116dbf6df180ece3ece2c7842afaa1c34c Mon Sep 17 00:00:00 2001 From: Larissa Reis Date: Sat, 19 Jul 2014 04:29:26 -0300 Subject: [PATCH] invite-members: refactor friends search by usp_id --- app/controllers/public/invite_controller.rb | 17 ++++++++++++----- app/helpers/invite_helper.rb | 15 --------------- app/views/invite/invite_friends.html.erb | 2 +- lib/noosfero/plugin.rb | 6 ------ plugins/stoa/lib/ext/person.rb | 2 ++ test/functional/invite_controller_test.rb | 25 ------------------------- 6 files changed, 15 insertions(+), 52 deletions(-) diff --git a/app/controllers/public/invite_controller.rb b/app/controllers/public/invite_controller.rb index dce32a5..b023a51 100644 --- a/app/controllers/public/invite_controller.rb +++ b/app/controllers/public/invite_controller.rb @@ -7,6 +7,17 @@ class InviteController < PublicController def invite_friends @import_from = params[:import_from] || "manual" @mail_template = params[:mail_template] || environment.invitation_mail_template(profile) + + extra_labels = Profile::SEARCHABLE_FIELDS.keys - [:name, :identifier, :nickname] + labels = [ + _('Name'), + _('Username'), + _('Email'), + ] + extra_labels.map { |label| Profile.human_attribute_name(label) } + last = labels.pop + label = labels.join(', ') + @search_friend_fields = "#{label} #{_('or')} #{last}" + if request.post? contact_list = ContactList.create Delayed::Job.enqueue GetEmailContactsJob.new(@import_from, params[:login], params[:password], contact_list.id) if @import_from != 'manual' @@ -73,12 +84,8 @@ class InviteController < PublicController end end - include InviteHelper - helper :invite - def search_friend - fields = %w[name identifier email] + plugins_options.map {|field| field[:field].to_s } - render :text => find_by_contents(:people, environment.people.not_members_of(profile), params['q'], {:page => 1}, {:fields => fields, :joins => :user})[:results].map {|person| {:id => person.id, :name => person.name} }.to_json + render :text => find_by_contents(:people, environment.people.not_members_of(profile), params['q'], {:page => 1}, {:joins => :user})[:results].map {|person| {:id => person.id, :name => person.name} }.to_json end protected diff --git a/app/helpers/invite_helper.rb b/app/helpers/invite_helper.rb index ec327aa..389f123 100644 --- a/app/helpers/invite_helper.rb +++ b/app/helpers/invite_helper.rb @@ -1,17 +1,2 @@ module InviteHelper - def plugins_options - @plugins.dispatch(:search_friend_fields) - end - - def search_friend_fields - labels = [ - _('Name'), - _('Username'), - _('Email'), - ] + plugins_options.map { |options| options[:name] } - - last = labels.pop - label = labels.join(', ') - "#{label} #{_('or')} #{last}" - end end diff --git a/app/views/invite/invite_friends.html.erb b/app/views/invite/invite_friends.html.erb index c021d9e..adfc91c 100644 --- a/app/views/invite/invite_friends.html.erb +++ b/app/views/invite/invite_friends.html.erb @@ -10,7 +10,7 @@ <%= form_tag :action => 'invite_registered_friend' do %> <% search_action = url_for(:action => 'search_friend') %> <%= token_input_field_tag(:q, 'search-friends', search_action, - { :hint_text => _('Type in your friend\'s ') + search_friend_fields, + { :hint_text => _('Type in your friend\'s ') + @search_friend_fields, :focus => false }) %> <% button_bar do %> diff --git a/lib/noosfero/plugin.rb b/lib/noosfero/plugin.rb index dad813e..bc3cfd9 100644 --- a/lib/noosfero/plugin.rb +++ b/lib/noosfero/plugin.rb @@ -513,12 +513,6 @@ class Noosfero::Plugin nil end - # -> Adds aditional fields for invite_friends search - # returns = [{:field => 'field1', :name => 'field 1 name'}, {...}] - def search_friend_fields - nil - end - # -> Adds additional blocks to profiles and environments. # Your plugin must implements a class method called 'extra_blocks' # that returns a hash with the following syntax. diff --git a/plugins/stoa/lib/ext/person.rb b/plugins/stoa/lib/ext/person.rb index 29de2c8..2d6aa2e 100644 --- a/plugins/stoa/lib/ext/person.rb +++ b/plugins/stoa/lib/ext/person.rb @@ -3,6 +3,8 @@ require_dependency 'person' class Person attr_accessible :usp_id, :invitation_code + SEARCHABLE_FIELDS[:usp_id] = 5 + validates_uniqueness_of :usp_id, :allow_nil => true settings_items :invitation_code validate :usp_id_or_invitation, :if => lambda { |person| person.environment && person.environment.plugin_enabled?(StoaPlugin)} diff --git a/test/functional/invite_controller_test.rb b/test/functional/invite_controller_test.rb index b6a5f60..1753fe7 100644 --- a/test/functional/invite_controller_test.rb +++ b/test/functional/invite_controller_test.rb @@ -271,31 +271,6 @@ class InviteControllerTest < ActionController::TestCase assert_equal [{"id" => friend1.id, "name" => friend1.name}].to_json, @response.body end - should 'search friends profiles by fields provided by plugins' do - class Plugin1 < Noosfero::Plugin - def search_friend_fields - [{:field => 'nickname'}, {:field => 'contact_phone'}] - end - end - Noosfero::Plugin.stubs(:all).returns([Plugin1.name]) - - environment = Environment.default - environment.enable_plugin(Plugin1.name) - - friend1 = create_user('harry').person - friend2 = create_user('william').person - friend1.nickname = 'prince' - friend2.contact_phone = '2222' - friend1.save - friend2.save - - get :search_friend, :profile => profile.identifier, :q => 'prince' - assert_equal [{"id" => friend1.id, "name" => friend1.name}].to_json, @response.body - - get :search_friend, :profile => profile.identifier, :q => '222' - assert_equal [{"id" => friend2.id, "name" => friend2.name}].to_json, @response.body - end - should 'invite registered users through profile id' do friend1 = create_user('testuser1').person friend2 = create_user('testuser2').person -- libgit2 0.21.2