Commit bb3b9e56ee616b2d459559bc51f615f15b9f276f
1 parent
67f99b16
Exists in
master
and in
5 other branches
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>
Showing
2 changed files
with
71 additions
and
0 deletions
Show diff stats
lib/mpog_software_plugin.rb
@@ -353,6 +353,10 @@ class MpogSoftwarePlugin < Noosfero::Plugin | @@ -353,6 +353,10 @@ class MpogSoftwarePlugin < Noosfero::Plugin | ||
353 | elsif params[:action] == "communities" and params[:type] == "Institution" | 353 | elsif params[:action] == "communities" and params[:type] == "Institution" |
354 | 354 | ||
355 | elsif params[:action] == "communities" and params[:type] == "Software" | 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 | else | 361 | else |
358 | [] # An empty list will trigger noosfero's default communities search | 362 | [] # An empty list will trigger noosfero's default communities search |
lib/software_info.rb
@@ -21,6 +21,73 @@ class SoftwareInfo < ActiveRecord::Base | @@ -21,6 +21,73 @@ class SoftwareInfo < ActiveRecord::Base | ||
21 | joins(:community).where("name ilike ?", "%#{name}%") | 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 | def validate_operating_platform | 91 | def validate_operating_platform |
25 | self.errors.add(:operating_platform, _("can't be blank")) if self.operating_platform.blank? && self.errors.messages[:operating_platform].nil? | 92 | self.errors.add(:operating_platform, _("can't be blank")) if self.operating_platform.blank? && self.errors.messages[:operating_platform].nil? |
26 | end | 93 | end |