Commit 418b9fca1d96f431344e3769b7be0ae41d95dd73

Authored by Joenio
2 parents bbd032c3 adc7e9be

Merge branch 'sisp_improvements' into 'master'

Sisp improvements

Foram adicionados parametros à task de importaçao do sisp para que esta receba o Dominio do novo ambiente e um usuário admin a ser "herdado" do SPB, exemplo:

rake sisp:all DOMAIN=dev.sisp.gov.br ADMINUSER=tallysmartins

Adicionada uma pequena melhoria na busca do catálogo de software.

See merge request !140
src/noosfero-spb/software_communities/lib/ext/search_controller.rb
@@ -89,10 +89,11 @@ class SearchController @@ -89,10 +89,11 @@ class SearchController
89 params[:query] ||= "" 89 params[:query] ||= ""
90 visible_communities = visible_profiles(Community) 90 visible_communities = visible_profiles(Community)
91 91
92 - filtered_software_list = SoftwareInfo.search_by_query(params[:query]) 92 + filtered_software_list = SoftwareInfo.search_by_query(params[:query], environment)
93 93
94 if params[:only_softwares] 94 if params[:only_softwares]
95 params[:only_softwares].collect!{ |software_name| software_name.to_slug } 95 params[:only_softwares].collect!{ |software_name| software_name.to_slug }
  96 + #FIX-ME: This query is not appropriate
96 filtered_software_list = SoftwareInfo.all.select{ |s| params[:only_softwares].include?(s.identifier) } 97 filtered_software_list = SoftwareInfo.all.select{ |s| params[:only_softwares].include?(s.identifier) }
97 @public_software_selected = false 98 @public_software_selected = false
98 end 99 end
src/noosfero-spb/software_communities/lib/software_info.rb
@@ -13,15 +13,15 @@ class SoftwareInfo < ActiveRecord::Base @@ -13,15 +13,15 @@ class SoftwareInfo < ActiveRecord::Base
13 DatabaseDescription 13 DatabaseDescription
14 ] 14 ]
15 15
16 - scope :search_by_query, lambda { |query = ""| 16 + scope :search_by_query, lambda { |query = "", env = Environment.default|
17 filtered_query = query.gsub(/[\|\(\)\\\/\s\[\]'"*%&!:]/,' ').split.map{|w| w += ":*"}.join('|') 17 filtered_query = query.gsub(/[\|\(\)\\\/\s\[\]'"*%&!:]/,' ').split.map{|w| w += ":*"}.join('|')
18 search_fields = SoftwareInfo.pg_search_plugin_fields 18 search_fields = SoftwareInfo.pg_search_plugin_fields
19 19
20 if query.empty? 20 if query.empty?
21 - SoftwareInfo.joins(:community).where("profiles.visible = ?", true) 21 + SoftwareInfo.joins(:community).where("profiles.visible = ? AND environment_id = ? ", true, env.id)
22 else 22 else
23 searchable_software_objects = SoftwareInfo.transform_list_in_methods_list(SEARCHABLE_SOFTWARE_CLASSES) 23 searchable_software_objects = SoftwareInfo.transform_list_in_methods_list(SEARCHABLE_SOFTWARE_CLASSES)
24 - includes(searchable_software_objects).where("to_tsvector('simple', #{search_fields}) @@ to_tsquery('#{filtered_query}')").where("profiles.visible = ?", true) 24 + includes(searchable_software_objects).where("to_tsvector('simple', #{search_fields}) @@ to_tsquery('#{filtered_query}')").where("profiles.visible = ? AND environment_id = ?", true, env.id)
25 end 25 end
26 } 26 }
27 27
src/noosfero-spb/software_communities/lib/tasks/import_sisp_software.rake
@@ -3,6 +3,30 @@ @@ -3,6 +3,30 @@
3 namespace :sisp do 3 namespace :sisp do
4 desc "Creates SISP env, template, and import data" 4 desc "Creates SISP env, template, and import data"
5 task :all => :environment do 5 task :all => :environment do
  6 + unless ENV["DOMAIN"].present?
  7 + puts "You didn't choose any domain. The default domain is 'novo.sisp.gov.br'"
  8 + puts "You can run rake sisp:all DOMAIN=domain.url"
  9 + puts "Continue and create SISP Environment with default domain? (y/N)"
  10 + response = $stdin.gets.strip
  11 +
  12 + unless ['y', 'yes'].include?(response.downcase)
  13 + puts "*** ABORTED."
  14 + exit 1
  15 + end
  16 + end
  17 +
  18 + unless ENV["ADMINUSER"].present?
  19 + puts "You didn't enter any user to be selected from the default Environment"
  20 + puts "You can run rake sisp:all ADMINUSER=jose"
  21 + puts "Continue and create SISP Environment without an admin user? (y/N)"
  22 + response = $stdin.gets.strip
  23 +
  24 + unless ['y', 'yes'].include?(response.downcase)
  25 + puts "*** ABORTED."
  26 + exit 1
  27 + end
  28 + end
  29 +
6 Rake::Task['sisp:create_env'].invoke 30 Rake::Task['sisp:create_env'].invoke
7 Rake::Task['noosfero:plugins:enable_all'].invoke 31 Rake::Task['noosfero:plugins:enable_all'].invoke
8 Rake::Task['sisp:create_template'].invoke 32 Rake::Task['sisp:create_template'].invoke
@@ -12,14 +36,42 @@ namespace :sisp do @@ -12,14 +36,42 @@ namespace :sisp do
12 desc "Creates the SISP Environment" 36 desc "Creates the SISP Environment"
13 task :create_env => :environment do 37 task :create_env => :environment do
14 env = Environment.find_or_create_by_name("SISP") 38 env = Environment.find_or_create_by_name("SISP")
15 - domain = Domain.find_or_create_by_name("novo.sisp.gov.br") 39 + domain_name = ENV["DOMAIN"] || "novo.sisp.gov.br"
  40 + domain = Domain.find_or_create_by_name(domain_name)
16 env.domains << domain unless env.domains.include?(domain) 41 env.domains << domain unless env.domains.include?(domain)
17 42
18 env.theme = "noosfero-spb-theme" 43 env.theme = "noosfero-spb-theme"
19 create_link_blocks env 44 create_link_blocks env
20 env.save 45 env.save
21 46
22 - puts "SISP Environment created" 47 + user = Environment.default.users.find_by_login(ENV["ADMINUSER"])
  48 + if user.present?
  49 + password = SecureRandom.base64
  50 + sisp_user = env.users.find_by_login(user.login)
  51 +
  52 + unless sisp_user.present?
  53 + sisp_user = User.new(:login => user.login, :email => user.email, :password => password, :password_confirmation => password, :environment => env)
  54 + end
  55 +
  56 + sisp_user.save
  57 + sisp_user.activate
  58 + env.add_admin sisp_user.person
  59 + puts "SISP admin user created with success!"
  60 + puts "Type the password for this user"
  61 + $stdin.echo = false
  62 + sisp_user.password = $stdin.gets.strip
  63 + puts "Type the password confirmation"
  64 + sisp_user.password_confirmation = $stdin.gets.strip
  65 +
  66 + puts "Password not changed! Enter rails console and make it manually" unless sisp_user.save
  67 + $stdin.echo = true
  68 + else
  69 + puts "\nWARNING!!!!!!***********************************************"
  70 + puts "No user found with the given login '#{ENV['ADMINUSER']}'.... skipping"
  71 + puts "You can run this task again passing a valid user login with the following command:"
  72 + puts "rake sisp:create_env ADMINUSER=userlogin"
  73 + end
  74 + puts "\n\nSISP Environment created"
23 end 75 end
24 76
25 def create_link_blocks template 77 def create_link_blocks template
@@ -189,8 +241,9 @@ def create_identifier name @@ -189,8 +241,9 @@ def create_identifier name
189 end 241 end
190 242
191 def create_sisp_user #TODO change user info 243 def create_sisp_user #TODO change user info
192 - user = $env.users.find_by_login('sisp-admin')  
193 - user ||= User.new(:login => 'sisp-admin', :email => 'sisp_user@changeme.com', :password => 'sisp1234', :password_confirmation => 'sisp1234', :environment => $env) 244 + user = $env.users.find_by_login('sisp_admin')
  245 + password = SecureRandom.base64
  246 + user ||= User.new(:login => 'sisp_admin', :email => 'sisp_user@changeme.com', :password => password, :password_confirmation => password, :environment => $env)
194 user.save! 247 user.save!
195 user.activate if !user.activated? 248 user.activate if !user.activated?
196 user 249 user
src/noosfero-spb/software_communities/test/unit/software_info_test.rb
@@ -41,4 +41,19 @@ class SoftwareInfoValidationTest &lt; ActiveSupport::TestCase @@ -41,4 +41,19 @@ class SoftwareInfoValidationTest &lt; ActiveSupport::TestCase
41 assert_equal @software_info.license_info.link, another_license_link 41 assert_equal @software_info.license_info.link, another_license_link
42 end 42 end
43 43
  44 + should "search softwares on the correct environment when multi environments available" do
  45 + software_info = create_software_info("soft1")
  46 + another_software_info = create_software_info("soft2")
  47 + other_env = Environment.create!(name: "sisp")
  48 + another_soft_profile = another_software_info.community
  49 + another_soft_profile.environment_id = other_env.id
  50 + another_soft_profile.save
  51 +
  52 + assert_equal 2, SoftwareInfo.count
  53 + assert_equal 1, SoftwareInfo.search_by_query("", Environment.default).count
  54 + assert_equal software_info, SoftwareInfo.search_by_query("", Environment.default).first
  55 + assert_equal 1, SoftwareInfo.search_by_query("", other_env).count
  56 + assert_equal true, SoftwareInfo.search_by_query("", other_env).includes?(another_software_info)
  57 + end
  58 +
44 end 59 end