Commit bb3b9e56ee616b2d459559bc51f615f15b9f276f

Authored by Gabriela Navarro
1 parent 67f99b16

software_search: Add search scope. Needs atttention on language,database, controlled vocabulary

Signed-off-by: Gabriela Navarro <navarro1703@gmail.com>
Signed-off-by: Luciano Prestes <lucianopcbr@gmail.com>
Signed-off-by: Parley Martins <parley@outlook.com>
lib/mpog_software_plugin.rb
... ... @@ -353,6 +353,10 @@ class MpogSoftwarePlugin &lt; Noosfero::Plugin
353 353 elsif params[:action] == "communities" and params[:type] == "Institution"
354 354  
355 355 elsif params[:action] == "communities" and params[:type] == "Software"
  356 + SoftwareInfo.search(params[:name], params[:database_description][:id],
  357 + params[:programming_language][:id], params[:operating_system][:id],
  358 + params[:controlled_vocabulary], params[:license_info][:id], params[:e_ping], params[:e_mag],
  359 + params[:icp_brasil], params[:e_arq], params[:internacionalizable])
356 360  
357 361 else
358 362 [] # An empty list will trigger noosfero's default communities search
... ...
lib/software_info.rb
... ... @@ -21,6 +21,73 @@ class SoftwareInfo &lt; ActiveRecord::Base
21 21 joins(:community).where("name ilike ?", "%#{name}%")
22 22 }
23 23  
  24 + scope :search, lambda { |name="", database_description="", programming_language="", operating_system="",
  25 + controlled_vocabulary="", license_info="", e_ping="", e_mag="",
  26 + icp_brasil="", e_arq="", internacionalizable=""|
  27 +
  28 + like_sql = ""
  29 + values = []
  30 +
  31 + unless name.nil? and name.blank?
  32 + like_sql << "name ILIKE ? AND "
  33 + values << "%#{name}%"
  34 + end
  35 +
  36 + unless database_description.nil? and database_description.blank?
  37 + software_databases = SoftwareDatabase.where(:database_description_id => database_description)
  38 + like_sql << "software_databases ILIKE ? AND "
  39 + values << "%#{software_databases}%"
  40 + end
  41 +
  42 + unless programming_language.nil? and programming_language.blank?
  43 + like_sql << "programming_language_id ILIKE ? AND "
  44 + values << "%#{programming_language}%"
  45 + end
  46 +
  47 + unless operating_system.nil? and operating_system.blank?
  48 + like_sql << "operating_system_id ILIKE ? AND "
  49 + values << "%#{operating_system}%"
  50 + end
  51 +
  52 + unless license_info.nil? and license_info.blank?
  53 + like_sql << "license_info_id ILIKE ? AND "
  54 + values << "%#{license_info}%"
  55 + end
  56 +
  57 + unless e_ping.nil? and e_ping.blank? and e_ping == "Any"
  58 + like_sql << "e_ping ILIKE ? AND "
  59 + values << "%#{e_ping}%"
  60 + end
  61 +
  62 + unless e_mag.nil? and e_mag.blank? and e_mag == "Any"
  63 + like_sql << "e_mag ILIKE ? AND "
  64 + values << "%#{e_mag}%"
  65 + end
  66 +
  67 + unless icp_brasil.nil? and icp_brasil.blank? and icp_brasil == "Any"
  68 + like_sql << "icp_brasil ILIKE ? AND "
  69 + values << "%#{icp_brasil}%"
  70 + end
  71 +
  72 + unless e_arq.nil? and e_arq.blank? and e_arq == "Any"
  73 + like_sql << "e_arq ILIKE ? AND "
  74 + values << "%#{e_arq}%"
  75 + end
  76 +
  77 + unless internacionalizable.nil? and internacionalizable.blank? and internacionalizable == "Any"
  78 + like_sql << "internacionalizable ILIKE ? AND "
  79 + values << "%#{internacionalizable}%"
  80 + end
  81 +
  82 + like_sql = like_sql[0..like_sql.length-5]
  83 +
  84 + {
  85 + :joins => :community,
  86 + :conditions=>[like_sql, *values]
  87 + }
  88 + }
  89 +
  90 +
24 91 def validate_operating_platform
25 92 self.errors.add(:operating_platform, _("can't be blank")) if self.operating_platform.blank? && self.errors.messages[:operating_platform].nil?
26 93 end
... ...