Commit ed4e22e2af91ef88e823fb0479c0a226d3ec5b06

Authored by Luciano Prestes
1 parent bb3b9e56

Add function to search filter for fields of software

Signed-off-by: Gustavo Jaruga <darksshades@hotmail.com>
Signed-off-by: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>
lib/mpog_software_plugin.rb
@@ -353,11 +353,16 @@ class MpogSoftwarePlugin &lt; Noosfero::Plugin @@ -353,11 +353,16 @@ class MpogSoftwarePlugin &lt; 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])  
360 - 356 + softwares = SoftwareInfo.search(params[:name], params[:database_description][:id],
  357 + params[:programming_language][:id], params[:operating_system][:id],
  358 + params[:license_info][:id], params[:e_ping], params[:e_mag], params[:internacionalizable],
  359 + params[:icp_brasil], params[:e_arq], params[:controlled_vocabulary])
  360 + communities = []
  361 +
  362 + softwares.each do |s|
  363 + communities << s.community
  364 + end
  365 + communities
361 else 366 else
362 [] # An empty list will trigger noosfero's default communities search 367 [] # An empty list will trigger noosfero's default communities search
363 end 368 end
lib/software_info.rb
@@ -21,9 +21,10 @@ class SoftwareInfo &lt; ActiveRecord::Base @@ -21,9 +21,10 @@ class SoftwareInfo &lt; 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=""| 24 + scope :search, lambda { |name="", database_description_id = "",
  25 + programming_language_id = "", operating_system_name_id = "",
  26 + license_info_id = "", e_ping = "", e_mag = "", internacionalizable = "",
  27 + icp_brasil = "", e_arq = "", controlled_vocabulary = "" |
27 28
28 like_sql = "" 29 like_sql = ""
29 values = [] 30 values = []
@@ -33,61 +34,66 @@ class SoftwareInfo &lt; ActiveRecord::Base @@ -33,61 +34,66 @@ class SoftwareInfo &lt; ActiveRecord::Base
33 values << "%#{name}%" 34 values << "%#{name}%"
34 end 35 end
35 36
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}%" 37 + if (not database_description_id.nil?) and (not database_description_id.blank?)
  38 + like_sql << "software_databases.database_description_id = ? AND "
  39 + values << "#{database_description_id}"
40 end 40 end
41 41
42 - unless programming_language.nil? and programming_language.blank?  
43 - like_sql << "programming_language_id ILIKE ? AND "  
44 - values << "%#{programming_language}%" 42 + if (not programming_language_id.nil?) and (not programming_language_id.blank?)
  43 + like_sql << "software_languages.programming_language_id = ? AND "
  44 + values << "#{programming_language_id}"
45 end 45 end
46 46
47 - unless operating_system.nil? and operating_system.blank?  
48 - like_sql << "operating_system_id ILIKE ? AND "  
49 - values << "%#{operating_system}%" 47 + if (not operating_system_name_id.nil?) and (not operating_system_name_id.blank?)
  48 + like_sql << "operating_systems.operating_system_name_id = ? AND "
  49 + values << "#{operating_system_name_id}"
50 end 50 end
51 51
52 - unless license_info.nil? and license_info.blank?  
53 - like_sql << "license_info_id ILIKE ? AND "  
54 - values << "%#{license_info}%" 52 + if (not license_info_id.nil?) and (not license_info_id.blank?)
  53 + like_sql << "license_info_id = ? AND "
  54 + values << "#{license_info_id}"
55 end 55 end
56 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}%" 57 + if (not internacionalizable.nil?) and (not internacionalizable.blank?)
  58 + like_sql << "internacionalizable = ? AND "
  59 + values << "#{internacionalizable}"
60 end 60 end
61 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}%" 62 + if (not icp_brasil.nil?) and (not icp_brasil.blank?)
  63 + like_sql << "icp_brasil = ? AND "
  64 + values << "#{icp_brasil}"
65 end 65 end
66 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}%" 67 + if (not e_ping.nil?) and (not e_ping.blank?)
  68 + like_sql << "e_ping = ? AND "
  69 + values << "#{e_ping}"
70 end 70 end
71 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}%" 72 + if (not e_mag.nil?) and (not e_mag.blank?)
  73 + like_sql << "e_mag = ? AND "
  74 + values << "#{e_mag}"
75 end 75 end
76 76
77 - unless internacionalizable.nil? and internacionalizable.blank? and internacionalizable == "Any"  
78 - like_sql << "internacionalizable ILIKE ? AND "  
79 - values << "%#{internacionalizable}%" 77 + if (not e_arq.nil?) and (not e_arq.blank?)
  78 + like_sql << "e_arq = ? AND "
  79 + values << "#{e_arq}"
  80 + end
  81 +
  82 + if (not controlled_vocabulary.nil?) and (not controlled_vocabulary.blank?)
  83 + controlled_vocabulary = controlled_vocabulary.gsub(' ', '').underscore
  84 + like_sql << "controlled_vocabulary.#{controlled_vocabulary} = ? AND "
  85 + values << "true"
80 end 86 end
81 87
82 like_sql = like_sql[0..like_sql.length-5] 88 like_sql = like_sql[0..like_sql.length-5]
83 89
84 { 90 {
85 - :joins => :community, 91 + :joins => [:community, :software_databases, :software_languages,
  92 + :operating_systems, :controlled_vocabulary],
86 :conditions=>[like_sql, *values] 93 :conditions=>[like_sql, *values]
87 } 94 }
88 } 95 }
89 96
90 -  
91 def validate_operating_platform 97 def validate_operating_platform
92 self.errors.add(:operating_platform, _("can't be blank")) if self.operating_platform.blank? && self.errors.messages[:operating_platform].nil? 98 self.errors.add(:operating_platform, _("can't be blank")) if self.operating_platform.blank? && self.errors.messages[:operating_platform].nil?
93 end 99 end
public/mpog-search.js
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 } 19 }
20 20
21 function display_search_fields_on_page_load() { 21 function display_search_fields_on_page_load() {
22 - var active_search = jQuery(".search_type input[checked='checked'").val(); 22 + var active_search = jQuery(".search_type input[checked='checked']").val();
23 23
24 switch(active_search) { 24 switch(active_search) {
25 case "Community": show_community_fields(); break; 25 case "Community": show_community_fields(); break;
views/search/search_forms/_software_fields.html.erb
@@ -43,17 +43,17 @@ @@ -43,17 +43,17 @@
43 <td> <%= _("Adherent to e-PING ?") %> </td> 43 <td> <%= _("Adherent to e-PING ?") %> </td>
44 <td> 44 <td>
45 <label> 45 <label>
46 - <%= radio_button_tag(:e_ping, "any", true) %> 46 + <%= radio_button_tag(:e_ping, "", true) %>
47 <%= _("Any") %> 47 <%= _("Any") %>
48 </label> 48 </label>
49 49
50 <label> 50 <label>
51 - <%= radio_button_tag(:e_ping, "yes") %> 51 + <%= radio_button_tag(:e_ping, true) %>
52 <%= _("Yes") %> 52 <%= _("Yes") %>
53 </label> 53 </label>
54 54
55 <label> 55 <label>
56 - <%= radio_button_tag(:e_ping, "no") %> 56 + <%= radio_button_tag(:e_ping, false) %>
57 <%= _("No") %> 57 <%= _("No") %>
58 </label> 58 </label>
59 </td> 59 </td>
@@ -63,17 +63,17 @@ @@ -63,17 +63,17 @@
63 <td> <%= _("Adherent to e-MAG ?") %> </td> 63 <td> <%= _("Adherent to e-MAG ?") %> </td>
64 <td> 64 <td>
65 <label> 65 <label>
66 - <%= radio_button_tag(:e_mag, "any", true) %> 66 + <%= radio_button_tag(:e_mag, "", true) %>
67 <%= _("Any") %> 67 <%= _("Any") %>
68 </label> 68 </label>
69 69
70 <label> 70 <label>
71 - <%= radio_button_tag(:e_mag, "yes") %> 71 + <%= radio_button_tag(:e_mag, true) %>
72 <%= _("Yes") %> 72 <%= _("Yes") %>
73 </label> 73 </label>
74 74
75 <label> 75 <label>
76 - <%= radio_button_tag(:e_mag, "no") %> 76 + <%= radio_button_tag(:e_mag, false) %>
77 <%= _("No") %> 77 <%= _("No") %>
78 </label> 78 </label>
79 </td> 79 </td>
@@ -83,17 +83,17 @@ @@ -83,17 +83,17 @@
83 <td> <%= _("Adherent to ICP-Brasil ?") %> </td> 83 <td> <%= _("Adherent to ICP-Brasil ?") %> </td>
84 <td> 84 <td>
85 <label> 85 <label>
86 - <%= radio_button_tag(:icp_brasil, "any", true) %> 86 + <%= radio_button_tag(:icp_brasil, "", true) %>
87 <%= _("Any") %> 87 <%= _("Any") %>
88 </label> 88 </label>
89 89
90 <label> 90 <label>
91 - <%= radio_button_tag(:icp_brasil, "yes") %> 91 + <%= radio_button_tag(:icp_brasil, true) %>
92 <%= _("Yes") %> 92 <%= _("Yes") %>
93 </label> 93 </label>
94 94
95 <label> 95 <label>
96 - <%= radio_button_tag(:icp_brasil, "no") %> 96 + <%= radio_button_tag(:icp_brasil, false) %>
97 <%= _("No") %> 97 <%= _("No") %>
98 </label> 98 </label>
99 </td> 99 </td>
@@ -103,17 +103,17 @@ @@ -103,17 +103,17 @@
103 <td> <%= _("Adherent to e-ARQ ?") %> </td> 103 <td> <%= _("Adherent to e-ARQ ?") %> </td>
104 <td> 104 <td>
105 <label> 105 <label>
106 - <%= radio_button_tag(:e_arq, "any", true) %> 106 + <%= radio_button_tag(:e_arq, "", true) %>
107 <%= _("Any") %> 107 <%= _("Any") %>
108 </label> 108 </label>
109 109
110 <label> 110 <label>
111 - <%= radio_button_tag(:e_arq, "yes") %> 111 + <%= radio_button_tag(:e_arq, true) %>
112 <%= _("Yes") %> 112 <%= _("Yes") %>
113 </label> 113 </label>
114 114
115 <label> 115 <label>
116 - <%= radio_button_tag(:e_arq, "no") %> 116 + <%= radio_button_tag(:e_arq, false) %>
117 <%= _("No") %> 117 <%= _("No") %>
118 </label> 118 </label>
119 </td> 119 </td>
@@ -123,17 +123,17 @@ @@ -123,17 +123,17 @@
123 <td> <%= _("Internacionalizable ?") %> </td> 123 <td> <%= _("Internacionalizable ?") %> </td>
124 <td> 124 <td>
125 <label> 125 <label>
126 - <%= radio_button_tag(:internacionalizable, "any", true) %> 126 + <%= radio_button_tag(:internacionalizable, "", true) %>
127 <%= _("Any") %> 127 <%= _("Any") %>
128 </label> 128 </label>
129 129
130 <label> 130 <label>
131 - <%= radio_button_tag(:internacionalizable, "yes") %> 131 + <%= radio_button_tag(:internacionalizable, true) %>
132 <%= _("Yes") %> 132 <%= _("Yes") %>
133 </label> 133 </label>
134 134
135 <label> 135 <label>
136 - <%= radio_button_tag(:internacionalizable, "no") %> 136 + <%= radio_button_tag(:internacionalizable, false) %>
137 <%= _("No") %> 137 <%= _("No") %>
138 </label> 138 </label>
139 </td> 139 </td>