Commit 5c62082bf4c4dbc2a955c8af6a9942b4c46303ad
1 parent
f0dab8ba
Exists in
master
and in
79 other branches
Change mpog_plugin to its own repository
Signed-off-by: Alex de Souza <campelo.al1@gmail.com> Signed-off-by: Arthur Del Esposte <arthurmde@yahoo.com.br> Signed-off-by: Daniel Bucher <daniel.bucher88@gmail.com> Signed-off-by: David Carlos <ddavidcarlos1392@gmail.com> Signed-off-by: Fabio Teixeira <fabio1079@gmail.com> Signed-off-by: Gabriela Navarro <navarro1703@gmail.com> Signed-off-by: Gustavo Jaruga <darksshades@hotmail.com> Signed-off-by: Luciano Prestes <lucianopcbr@gmail.com> Signed-off-by: Matheus Faria <matheus.sousa.faria@gmail.com> Signed-off-by: Parley Martins <parley@outlook.com>
Showing
108 changed files
with
6300 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,67 @@ | @@ -0,0 +1,67 @@ | ||
1 | +README - MPOG Software Público Plugin | ||
2 | +================================ | ||
3 | + | ||
4 | +MPOG Software Público Plugin is a plugin that includes features to Novo Portal do Software Público Brasileiro (SPB). | ||
5 | + | ||
6 | +More information about SPB: https://www.participa.br/softwarepublico | ||
7 | + | ||
8 | +INSTALL | ||
9 | +======= | ||
10 | + | ||
11 | +Enable Plugin | ||
12 | +------------- | ||
13 | + | ||
14 | +Also, you need to enable MPOG Software Plugin on your Noosfero: | ||
15 | + | ||
16 | +cd <your_noosfero_dir> | ||
17 | +./script/noosfero-plugins enable mpog_software | ||
18 | + | ||
19 | +Activate Plugin | ||
20 | +--------------- | ||
21 | + | ||
22 | +As a Noosfero administrator user, go to administrator panel: | ||
23 | + | ||
24 | +- Click on "Enable/disable plugins" option | ||
25 | +- Click on "MPOG Software Plugin" check-box | ||
26 | + | ||
27 | +Schedule Institutions Update | ||
28 | +---------------------------- | ||
29 | + | ||
30 | +./plugins/mpog_software/script/schedule_institution_update.sh | ||
31 | + | ||
32 | + | ||
33 | +Running MPOG Software tests | ||
34 | +-------------------- | ||
35 | +$ ruby plugins/mpog_software/test/unit/name_of_file.rb | ||
36 | +$ cucumber plugins/mpog_software/features/ | ||
37 | + | ||
38 | +Get Involved | ||
39 | +============ | ||
40 | + | ||
41 | +If you find any bug and/or want to collaborate, please send an e-mail to arthurmde@gmail.com | ||
42 | + | ||
43 | +LICENSE | ||
44 | +======= | ||
45 | + | ||
46 | +Copyright (c) The Author developers. | ||
47 | + | ||
48 | +See Noosfero license. | ||
49 | + | ||
50 | + | ||
51 | +AUTHORS | ||
52 | +======= | ||
53 | + | ||
54 | +Alex Campelo (campelo.al1 at gmail.com) | ||
55 | +Arthur de Moura Del Esposte (arthurmde at gmail.com) | ||
56 | +Daniel Bucher (daniel.bucher88 at gmail.com) | ||
57 | +David Carlos (ddavidcarlos1392 at gmail.com) | ||
58 | +Fabio Teixeira (fabio1079 at gmail.com) | ||
59 | +Gustavo Jaruga (darksshades at gmail.com) | ||
60 | +Luciano Prestes (lucianopcbr at gmail.com) | ||
61 | +Matheus Faria (matheus.sousa.faria at gmail.com) | ||
62 | + | ||
63 | + | ||
64 | +ACKNOWLEDGMENTS | ||
65 | +=============== | ||
66 | + | ||
67 | +The authors have been supported by MPOG and UnB |
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +web_service: | ||
2 | + base_url: http://estruturaorganizacional.dados.gov.br/doc/estrutura-organizacional/resumida.json | ||
3 | + sphere_codes: | ||
4 | + federal: 1 | ||
5 | + power_codes: | ||
6 | + executive: 1 | ||
7 | + legislative: 2 | ||
8 | + judiciary: 3 | ||
9 | + additional_params: retornarOrgaoEntidadeVinculados=NAO |
@@ -0,0 +1,205 @@ | @@ -0,0 +1,205 @@ | ||
1 | +require 'csv' | ||
2 | +class MpogSoftwarePluginController < ApplicationController | ||
3 | + | ||
4 | + def archive_software | ||
5 | + per_page = 10 | ||
6 | + scope = SoftwareInfo | ||
7 | + @q = params[:q] | ||
8 | + @collection = find_by_contents(:community, scope, @q, {:per_page => per_page, :page => params[:npage]})[:results] | ||
9 | + end | ||
10 | + | ||
11 | + def deactivate | ||
12 | + community = SoftwareInfo.find(params[:id]).community_id | ||
13 | + Community.find(community).deactivate | ||
14 | + if params[:from_profile] | ||
15 | + redirect_to :back | ||
16 | + else | ||
17 | + redirect_to :action => 'archive_software' | ||
18 | + end | ||
19 | + end | ||
20 | + | ||
21 | + def activate | ||
22 | + community = SoftwareInfo.find(params[:id]).community_id | ||
23 | + Community.find(community).activate | ||
24 | + redirect_to :action => 'archive_software' | ||
25 | + end | ||
26 | + | ||
27 | + def check_reactivate_account | ||
28 | + if request.xhr? and params[:email] | ||
29 | + result = "" | ||
30 | + user = User.where(:email => params[:email]) | ||
31 | + | ||
32 | + if user.length == 1 | ||
33 | + result = "<span id='forgot_link'><a href='/account/forgot_password'> Reactive account</a></span>" unless user[0].person.visible | ||
34 | + end | ||
35 | + | ||
36 | + render :json => result.to_json | ||
37 | + end | ||
38 | + end | ||
39 | + | ||
40 | + def get_institutions | ||
41 | + list = [] | ||
42 | + | ||
43 | + if request.xhr? and params[:query] | ||
44 | + list = Institution.search_institution(params[:query]).map{ |institution| | ||
45 | + {:value=>institution.name, :id=>institution.id} | ||
46 | + } | ||
47 | + end | ||
48 | + | ||
49 | + render :json => list.to_json | ||
50 | + end | ||
51 | + | ||
52 | + def hide_registration_incomplete_percentage | ||
53 | + response = false | ||
54 | + | ||
55 | + if request.xhr? and params[:hide] | ||
56 | + session[:hide_incomplete_percentage] = true | ||
57 | + response = session[:hide_incomplete_percentage] | ||
58 | + end | ||
59 | + | ||
60 | + render :json=>response.to_json | ||
61 | + end | ||
62 | + | ||
63 | + def create_institution | ||
64 | + if request.xhr? | ||
65 | + render :layout=>false | ||
66 | + else | ||
67 | + redirect_to "/" | ||
68 | + end | ||
69 | + end | ||
70 | + | ||
71 | + def new_institution | ||
72 | + if request.xhr? and !params[:community].nil? and !params[:institution].nil? and !params[:recaptcha_response_field].nil? | ||
73 | + response_message = {} | ||
74 | + | ||
75 | + institution = create_institution | ||
76 | + | ||
77 | + response_message = if verify_recaptcha(:model=> institution, :message => _('Please type the word correctly')) | ||
78 | + if institution.errors.full_messages.empty? and institution.valid? and institution.save | ||
79 | + {:success => true, :message => _("Institution successful created!"), :institution_data=>{:name=>institution.name, :id=>institution.id}} | ||
80 | + else | ||
81 | + {:success => false, :message => _("Institution could not be created!"), :errors => institution.errors.full_messages} | ||
82 | + end | ||
83 | + else | ||
84 | + {:success => false, :message=>_('Please type the image text correctly'), :errors=>[]} | ||
85 | + end | ||
86 | + | ||
87 | + render :json => response_message.to_json | ||
88 | + else | ||
89 | + redirect_to "/" | ||
90 | + end | ||
91 | + end | ||
92 | + | ||
93 | + def institution_already_exists | ||
94 | + if request.xhr? and !params[:name].nil? | ||
95 | + already_exists = !Community.where(:name=>params[:name]).empty? | ||
96 | + | ||
97 | + render :json=>already_exists.to_json | ||
98 | + else | ||
99 | + redirect_to "/" | ||
100 | + end | ||
101 | + end | ||
102 | + | ||
103 | + def download | ||
104 | + respond_to do |format| | ||
105 | + format.html | ||
106 | + format.xml do | ||
107 | + softwares = software_list_to_correct_format(SoftwareInfo.all) | ||
108 | + send_data softwares.to_xml( | ||
109 | + :skip_types => true, | ||
110 | + :only => %w[name acronym demonstration_url e_arq e_mag e_ping features icp_brasil objectives operating_platform languages_list database_list]), | ||
111 | + :type => 'text/xml', | ||
112 | + :disposition => "attachment; filename=softwares.xml" | ||
113 | + end | ||
114 | + | ||
115 | + format.csv do | ||
116 | + softwares = software_list_to_correct_format(SoftwareInfo.all) | ||
117 | + csv_content = "" | ||
118 | + softwares.each { |s| | ||
119 | + csv_content << "name;acronym;demonstration_url;e_arq;e_mag;e_ping;features;icp_brasil;objectives;operating_platform\n" | ||
120 | + csv_content << CSV.generate_line([s['name'], s['acronym'], s['demonstration_url'], s['e_arq'], s['e_mag'], s['e_ping'], s['features'], s['icp_brasil'], s['objectives'], s['operating_platform']], {:col_sep => ';'}) | ||
121 | + | ||
122 | + csv_content << "\nlanguage_name;language_version;language_operating_system\n" | ||
123 | + s[:languages_list].each { |sl| | ||
124 | + csv_content << CSV.generate_line([sl[:name], sl[:version], sl[:operating_system]], {:col_sep => ';'}) | ||
125 | + } | ||
126 | + | ||
127 | + csv_content << "\ndatabase_name;database_version;database_operating_system\n" | ||
128 | + s[:database_list].each { |dl| | ||
129 | + csv_content << CSV.generate_line([dl[:name], dl[:version], dl[:operating_system]], {:col_sep => ';'}) | ||
130 | + } | ||
131 | + | ||
132 | + csv_content << "\n\n" | ||
133 | + } | ||
134 | + if csv_content.blank? | ||
135 | + csv_content = "name;acronym;demonstration_url;e_arq;e_mag;e_ping;features;icp_brasil;objectives;operating_platform\n" | ||
136 | + end | ||
137 | + | ||
138 | + render :text => csv_content, :content_type => 'text/csv', :layout => false | ||
139 | + end | ||
140 | + end | ||
141 | + end | ||
142 | + | ||
143 | + | ||
144 | + protected | ||
145 | + | ||
146 | + def create_institution | ||
147 | + community = Community.new(params[:community]) | ||
148 | + community.environment = environment | ||
149 | + | ||
150 | + institution = if params[:institution][:type] == "PublicInstitution" | ||
151 | + PublicInstitution::new params[:institution] | ||
152 | + else | ||
153 | + PrivateInstitution::new params[:institution] | ||
154 | + end | ||
155 | + | ||
156 | + institution.name = community[:name] | ||
157 | + institution.community = community | ||
158 | + | ||
159 | + if institution.type == "PublicInstitution" | ||
160 | + begin | ||
161 | + govPower = GovernmentalPower.find params[:governmental][:power] | ||
162 | + govSphere = GovernmentalSphere.find params[:governmental][:sphere] | ||
163 | + | ||
164 | + institution.governmental_power = govPower | ||
165 | + institution.governmental_sphere = govSphere | ||
166 | + rescue | ||
167 | + institution.errors.add(:governmental_fields, _("Could not find Governmental Power or Governmental Sphere")) | ||
168 | + end | ||
169 | + end | ||
170 | + | ||
171 | + if institution.cnpj.nil? or institution.cnpj.blank? | ||
172 | + institution.errors.add(:cnpj, _("can't be blank")) | ||
173 | + end | ||
174 | + | ||
175 | + institution | ||
176 | + end | ||
177 | + | ||
178 | + def software_list_to_correct_format software_list=[] | ||
179 | + if !software_list.empty? | ||
180 | + software_list.each do |software| | ||
181 | + software[:name] = Community.find(software.community_id).name | ||
182 | + software[:languages_list] = [] | ||
183 | + | ||
184 | + software.software_languages.each do |sl| | ||
185 | + software[:languages_list] << {} | ||
186 | + index = software[:languages_list].count - 1 | ||
187 | + software[:languages_list][index][:name] = ProgrammingLanguage.find(sl.programming_language_id).name | ||
188 | + software[:languages_list][index][:version] = sl.version | ||
189 | + software[:languages_list][index][:operating_system] = sl.operating_system | ||
190 | + end | ||
191 | + | ||
192 | + software[:database_list] = [] | ||
193 | + software.software_databases.each do |dd| | ||
194 | + software[:database_list] << {} | ||
195 | + index = software[:database_list].count - 1 | ||
196 | + software[:database_list][index][:name] = DatabaseDescription.find(dd.database_description_id).name | ||
197 | + software[:database_list][index][:version] = dd.version | ||
198 | + software[:database_list][index][:operating_system] = dd.operating_system | ||
199 | + end | ||
200 | + end | ||
201 | + end | ||
202 | + software_list | ||
203 | + end | ||
204 | + | ||
205 | +end |
controllers/mpog_software_plugin_myprofile_controller.rb
0 → 100644
@@ -0,0 +1,85 @@ | @@ -0,0 +1,85 @@ | ||
1 | +class MpogSoftwarePluginMyprofileController < MyProfileController | ||
2 | + append_view_path File.join(File.dirname(__FILE__) + '/../views') | ||
3 | + | ||
4 | + def index | ||
5 | + end | ||
6 | + | ||
7 | + def archive_software | ||
8 | + puts "="*80 | ||
9 | + nil | ||
10 | + end | ||
11 | + | ||
12 | + def new_software | ||
13 | + @errors = [] | ||
14 | + @community = Community.new(params[:community]) | ||
15 | + @community.environment = environment | ||
16 | + @software_info = SoftwareInfo.new(params[:software_info]) | ||
17 | + @list_libraries = LibraryHelper.list_libraries(params[:library]) | ||
18 | + @list_languages = SoftwareLanguageHelper.list_language(params[:language]) | ||
19 | + @list_databases = DatabaseHelper.list_database(params[:database]) | ||
20 | + @controlled_vocabulary = ControlledVocabulary::new params[:controlled_vocabulary] | ||
21 | + @list_operating_systems = OperatingSystemHelper.list_operating_system(params[:operating_system]) | ||
22 | + @license_info = if params[:license_info].nil? | ||
23 | + LicenseInfo::new | ||
24 | + else | ||
25 | + LicenseInfo.find(:first, :conditions=>"id = #{params[:license_info][:version]}") | ||
26 | + end | ||
27 | + | ||
28 | + if not @list_libraries.nil? | ||
29 | + @list_libraries.each do |library| | ||
30 | + @software_info.libraries << library | ||
31 | + end | ||
32 | + end | ||
33 | + | ||
34 | + if not @list_languages.nil? | ||
35 | + @list_languages.each do |language| | ||
36 | + @software_info.software_languages << language | ||
37 | + end | ||
38 | + end | ||
39 | + | ||
40 | + if not @list_databases.nil? | ||
41 | + @list_databases.each do |database| | ||
42 | + @software_info.software_databases << database | ||
43 | + end | ||
44 | + end | ||
45 | + | ||
46 | + if not @list_operating_systems.nil? | ||
47 | + @list_operating_systems.each do |operating_system| | ||
48 | + @software_info.operating_systems << operating_system | ||
49 | + end | ||
50 | + end | ||
51 | + | ||
52 | + valid_community = request.post? && @community.valid? | ||
53 | + valid_software_info = request.post? && @software_info.valid? | ||
54 | + valid_license = (request.post? && @license_info.valid?) | ||
55 | + valid_libraries = @list_libraries.empty? || LibraryHelper.valid_list_libraries?(@list_libraries) | ||
56 | + valid_database = DatabaseHelper.valid_list_database?(@list_databases) | ||
57 | + valid_language = SoftwareLanguageHelper.valid_list_language?(@list_languages) | ||
58 | + valid_operating_system = OperatingSystemHelper.valid_list_operating_system?(@list_operating_systems) | ||
59 | + | ||
60 | + if valid_software_info && valid_community && valid_libraries && valid_license && valid_language && valid_database && valid_operating_system | ||
61 | + @community = Community.create_after_moderation(user, {:environment => environment}.merge(params[:community]), @software_info, @license_info, @controlled_vocabulary) | ||
62 | + redirect_to :controller => 'memberships', :action => 'index' | ||
63 | + else | ||
64 | + @list_libraries.each do |lib| | ||
65 | + @errors |= lib.errors.full_messages | ||
66 | + end | ||
67 | + | ||
68 | + @list_languages.each do |lng| | ||
69 | + @errors |= lng.errors.full_messages | ||
70 | + end | ||
71 | + | ||
72 | + @list_databases.each do |db| | ||
73 | + @errors |= db.errors.full_messages | ||
74 | + end | ||
75 | + | ||
76 | + @list_operating_systems.each do |os| | ||
77 | + @errors |= os.errors.full_messages | ||
78 | + end | ||
79 | + @errors |= @community.errors.full_messages | ||
80 | + @errors |= @software_info.errors.full_messages | ||
81 | + @errors |= @license_info.errors.full_messages | ||
82 | + end | ||
83 | + end | ||
84 | + | ||
85 | +end |
db/migrate/20140523132016_create_controlled_vocabulary_table.rb
0 → 100644
@@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
1 | +class CreateControlledVocabularyTable < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + create_table :controlled_vocabulary do |t| | ||
4 | + t.references :software_info | ||
5 | + t.boolean :administration | ||
6 | + t.boolean :agriculture | ||
7 | + t.boolean :business_and_services | ||
8 | + t.boolean :communication | ||
9 | + t.boolean :culture | ||
10 | + t.boolean :national_defense | ||
11 | + t.boolean :economy_and_finances | ||
12 | + t.boolean :education | ||
13 | + t.boolean :energy | ||
14 | + t.boolean :sports | ||
15 | + t.boolean :habitation | ||
16 | + t.boolean :industry | ||
17 | + t.boolean :environment | ||
18 | + t.boolean :research_and_development | ||
19 | + t.boolean :social_security | ||
20 | + t.boolean :social_protection | ||
21 | + t.boolean :international_relations | ||
22 | + t.boolean :sanitation | ||
23 | + t.boolean :health | ||
24 | + t.boolean :security_public_order | ||
25 | + t.boolean :work | ||
26 | + t.boolean :transportation | ||
27 | + t.boolean :urbanism | ||
28 | + | ||
29 | + end | ||
30 | + end | ||
31 | + | ||
32 | + def down | ||
33 | + drop_table :controlled_vocabulary | ||
34 | + end | ||
35 | +end |
@@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
1 | +class AddExtraFieldsToUser < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + change_table :users do |t| | ||
4 | + t.string :secondary_email | ||
5 | + t.references :institution | ||
6 | + t.string :role | ||
7 | + end | ||
8 | + end | ||
9 | + | ||
10 | + def self.down | ||
11 | + change_table :users do |t| | ||
12 | + t.remove :secondary_email | ||
13 | + t.remove_references :institution | ||
14 | + t.remove :role | ||
15 | + end | ||
16 | + end | ||
17 | +end |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +class CreateLicenseInfosTable < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + create_table :license_infos do |t| | ||
4 | + t.string :version | ||
5 | + t.string :link | ||
6 | + end | ||
7 | + LicenseInfo.create(:version=>"CC-GPL-V2", :link=>"http://creativecommons.org/licenses/GPL/2.0/legalcode.pt") | ||
8 | + end | ||
9 | + | ||
10 | + def self.down | ||
11 | + drop_table :license_infos | ||
12 | + end | ||
13 | +end |
db/migrate/20140528193905_create_software_infos_table.rb
0 → 100644
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | +class CreateSoftwareInfosTable < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + create_table :software_infos do |t| | ||
4 | + t.references :license_info | ||
5 | + t.references :community | ||
6 | + t.boolean :e_mag, :default => false | ||
7 | + t.boolean :icp_brasil,:default => false | ||
8 | + t.boolean :intern, :default => false | ||
9 | + t.boolean :e_ping, :default => false | ||
10 | + t.boolean :e_arq, :default => false | ||
11 | + t.string :name, :default => ' ' | ||
12 | + t.string :operating_platform | ||
13 | + t.string :demonstration_url | ||
14 | + t.string :acronym | ||
15 | + t.text :objectives | ||
16 | + t.text :features | ||
17 | + end | ||
18 | + end | ||
19 | + | ||
20 | + def self.down | ||
21 | + drop_table :software_infos | ||
22 | + end | ||
23 | +end |
@@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
1 | +class CreateLibrariesTable < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + create_table :libraries do |t| | ||
4 | + t.string :name | ||
5 | + t.string :version | ||
6 | + t.string :license | ||
7 | + t.references :software_info | ||
8 | + end | ||
9 | + end | ||
10 | + | ||
11 | + def self.down | ||
12 | + drop_table :libraries | ||
13 | + end | ||
14 | +end |
db/migrate/20140528193956_create_programming_languages_table.rb
0 → 100644
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +class CreateProgrammingLanguagesTable < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + create_table :programming_languages do |t| | ||
4 | + t.string :name | ||
5 | + end | ||
6 | + | ||
7 | + SoftwareHelper.create_list_with_file("plugins/mpog_software/public/static/languages.txt", ProgrammingLanguage) | ||
8 | + end | ||
9 | + | ||
10 | + def self.down | ||
11 | + drop_table :programming_languages | ||
12 | + end | ||
13 | +end |
db/migrate/20140528194044_create_database_descriptions_table.rb
0 → 100644
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +class CreateDatabaseDescriptionsTable < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + create_table :database_descriptions do |t| | ||
4 | + t.string :name | ||
5 | + end | ||
6 | + | ||
7 | + SoftwareHelper.create_list_with_file("plugins/mpog_software/public/static/databases.txt", DatabaseDescription) | ||
8 | + end | ||
9 | + | ||
10 | + def self.down | ||
11 | + drop_table :database_descriptions | ||
12 | + end | ||
13 | +end |
db/migrate/20140528194129_create_software_databases_table.rb
0 → 100644
@@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
1 | +class CreateSoftwareDatabasesTable < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + create_table :software_databases do |t| | ||
4 | + t.string :version | ||
5 | + t.string :operating_system | ||
6 | + t.references :database_description | ||
7 | + t.references :software_info | ||
8 | + end | ||
9 | + end | ||
10 | + | ||
11 | + def self.down | ||
12 | + drop_table :software_databases | ||
13 | + end | ||
14 | +end |
db/migrate/20140528211914_create_software_languages_table.rb
0 → 100644
@@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
1 | +class CreateSoftwareLanguagesTable < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + create_table :software_languages do |t| | ||
4 | + t.references :software_info | ||
5 | + t.references :programming_language | ||
6 | + t.string :version | ||
7 | + t.string :operating_system | ||
8 | + end | ||
9 | + end | ||
10 | + | ||
11 | + def self.down | ||
12 | + drop_table :software_languages | ||
13 | + end | ||
14 | +end |
@@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
1 | +class AddNewFieldsInstitution < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + add_column :institutions, :acronym, :string | ||
4 | + add_column :institutions, :unit_code, :integer | ||
5 | + add_column :institutions, :parent_code, :integer | ||
6 | + add_column :institutions, :unit_type, :string | ||
7 | + add_column :institutions, :juridical_nature, :string | ||
8 | + add_column :institutions, :sub_juridical_nature, :string | ||
9 | + add_column :institutions, :normalization_level, :string | ||
10 | + add_column :institutions, :version, :string | ||
11 | + add_column :institutions, :cnpj, :string | ||
12 | + add_column :institutions, :type, :string | ||
13 | + end | ||
14 | + | ||
15 | + def down | ||
16 | + remove_column :institutions, :acronym | ||
17 | + remove_column :institutions, :unit_code | ||
18 | + remove_column :institutions, :parent_code | ||
19 | + remove_column :institutions, :unit_type | ||
20 | + remove_column :institutions, :juridical_nature | ||
21 | + remove_column :institutions, :sub_juridical_nature | ||
22 | + remove_column :institutions, :normalization_level | ||
23 | + remove_column :institutions, :version | ||
24 | + remove_column :institutions, :cnpj | ||
25 | + remove_column :institutions, :type | ||
26 | + end | ||
27 | +end |
db/migrate/20140617132133_create_governmental_spheres.rb
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
1 | +class CreateGovernmentalSpheres < ActiveRecord::Migration | ||
2 | + def change | ||
3 | + create_table :governmental_spheres do |t| | ||
4 | + t.string :name | ||
5 | + | ||
6 | + t.timestamps | ||
7 | + end | ||
8 | + | ||
9 | + SoftwareHelper.create_list_with_file("plugins/mpog_software/public/static/governmental_sphere.txt", GovernmentalSphere) | ||
10 | + end | ||
11 | +end |
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
1 | +class CreateGovernmentalPowers < ActiveRecord::Migration | ||
2 | + def change | ||
3 | + create_table :governmental_powers do |t| | ||
4 | + t.string :name | ||
5 | + | ||
6 | + t.timestamps | ||
7 | + end | ||
8 | + | ||
9 | + SoftwareHelper.create_list_with_file("plugins/mpog_software/public/static/governmental_powers.txt", GovernmentalPower) | ||
10 | + end | ||
11 | +end |
db/migrate/20140617134556_add_references_to_institution.rb
0 → 100644
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +class AddReferencesToInstitution < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + change_table :institutions do |t| | ||
4 | + t.references :governmental_power | ||
5 | + t.references :governmental_sphere | ||
6 | + end | ||
7 | + end | ||
8 | + | ||
9 | + def down | ||
10 | + change_table :institutions do |t| | ||
11 | + t.remove_references :governmental_power | ||
12 | + t.remove_references :governmental_sphere | ||
13 | + end | ||
14 | + end | ||
15 | +end |
db/migrate/20140630183326_add_relation_between_community_and_institution.rb
0 → 100644
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +class AddRelationBetweenCommunityAndInstitution < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + change_table :institutions do |t| | ||
4 | + t.references :community | ||
5 | + end | ||
6 | + end | ||
7 | + | ||
8 | + def down | ||
9 | + change_table :institutions do |t| | ||
10 | + t.remove_references :community | ||
11 | + end | ||
12 | + end | ||
13 | +end |
db/migrate/20140710185444_create_operating_system_table.rb
0 → 100644
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +class CreateOperatingSystemTable < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + create_table :operating_systems do |t| | ||
4 | + t.string :name | ||
5 | + t.string :version | ||
6 | + t.references :software_info | ||
7 | + end | ||
8 | + end | ||
9 | + | ||
10 | + def down | ||
11 | + drop_table :operating_systems | ||
12 | + end | ||
13 | +end |
db/migrate/20140711144012_remove_name_from_software_info.rb
0 → 100644
db/migrate/20140714133901_create_operating_name_table.rb
0 → 100644
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +class CreateOperatingNameTable < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + create_table :operating_system_names do |t| | ||
4 | + t.string :name | ||
5 | + end | ||
6 | + | ||
7 | + SoftwareHelper.create_list_with_file("plugins/mpog_software/public/static/operating_systems.txt", OperatingSystemName) | ||
8 | + end | ||
9 | + | ||
10 | + def down | ||
11 | + drop_table :operating_system_names | ||
12 | + end | ||
13 | +end |
db/migrate/20140714135007_change_operating_systems_table.rb
0 → 100644
@@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
1 | +class ChangeOperatingSystemsTable < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + change_table :operating_systems do |t| | ||
4 | + t.remove :name | ||
5 | + t.references :operating_system_name | ||
6 | + end | ||
7 | + | ||
8 | + end | ||
9 | + | ||
10 | + def down | ||
11 | + change_table :operating_systems do |t| | ||
12 | + t.string :name | ||
13 | + t.remove :operating_system_name_id | ||
14 | + end | ||
15 | + end | ||
16 | +end |
@@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
1 | +Feature: Institution Field | ||
2 | + As a user | ||
3 | + I want to sign up resgistring my institution | ||
4 | + So others users can use it | ||
5 | + | ||
6 | + Background: | ||
7 | + Given "MpogSoftwarePlugin" plugin is enabled | ||
8 | + And I am logged in as admin | ||
9 | + And I go to /admin/plugins | ||
10 | + And I check "MpogSoftwarePlugin" | ||
11 | + And I press "Save changes" | ||
12 | + And I go to /account/logout | ||
13 | + | ||
14 | + @selenium | ||
15 | + Scenario: Show new institution field when another institution is selected | ||
16 | + Given I go to /account/signup | ||
17 | + When I select "Other" from "Institution" | ||
18 | + And I should see "New Institution" | ||
19 | + And I fill in "institution_name" with "Test Institution" | ||
20 | + And I fill in "profile_data_name" with " " | ||
21 | + Then I should see "Test Institution" within "#user_institution_id" |
@@ -0,0 +1,44 @@ | @@ -0,0 +1,44 @@ | ||
1 | +Feature: deactivate user | ||
2 | + As a user | ||
3 | + I want to deactivate my account | ||
4 | + So I can reactivate my account later | ||
5 | + | ||
6 | + Background: | ||
7 | + Given "MpogSoftwarePlugin" plugin is enabled | ||
8 | + And I am logged in as admin | ||
9 | + And I go to /admin/plugins | ||
10 | + And I check "MpogSoftwarePlugin" | ||
11 | + And I press "Save changes" | ||
12 | + And I go to /account/logout | ||
13 | + And the following users | ||
14 | + | login | name | email | | ||
15 | + | joaosilva | Joao Silva | joaosilva@example.com | | ||
16 | + And I am logged in as "joaosilva" | ||
17 | + | ||
18 | +@selenium | ||
19 | + Scenario: successfull deactivation | ||
20 | + Given I go to joaosilva's control panel | ||
21 | + And I follow "Edit Profile" | ||
22 | + And I follow "Delete profile" | ||
23 | + And I follow "Yes, I am sure" | ||
24 | + Then I am not logged in | ||
25 | + When I go to /profile/joaosilva | ||
26 | + Then I should see "This profile is inaccessible." | ||
27 | + | ||
28 | +@selenium | ||
29 | + Scenario: successfull reactivation of account | ||
30 | + Given I go to joaosilva's control panel | ||
31 | + And I follow "Edit Profile" | ||
32 | + And I follow "Delete profile" | ||
33 | + And I follow "Yes, I am sure" | ||
34 | + And I go to the homepage | ||
35 | + When I follow "Login" | ||
36 | + And I follow "New user" | ||
37 | + And I fill in the following within ".no-boxes": | ||
38 | + | e-Mail | joaosilva@example.com | | ||
39 | + | Full name | 123 | | ||
40 | + And I follow "Reactive account" | ||
41 | + And I fill in the following within ".no-boxes": | ||
42 | + | Username or Email | joaosilva@example.com | | ||
43 | + And I press "Send instructions" | ||
44 | + Then I should see "An e-mail was just sent to your e-mail address" |
@@ -0,0 +1,59 @@ | @@ -0,0 +1,59 @@ | ||
1 | +Feature: | ||
2 | + As a administrator of a software | ||
3 | + I want to manage it | ||
4 | + | ||
5 | + Background: | ||
6 | + Given "MpogSoftwarePlugin" plugin is enabled | ||
7 | + And I am logged in as admin | ||
8 | + And I go to /admin/plugins | ||
9 | + And I check "MpogSoftwarePlugin" | ||
10 | + And I press "Save changes" | ||
11 | + And SoftwareInfo has initial default values on database | ||
12 | + | ||
13 | + @selenium | ||
14 | + Scenario: Deactivate a software | ||
15 | + Given the following software language | ||
16 | + | programing_language | version | operating_system | | ||
17 | + | Python | 1.0 | Linux | | ||
18 | + And the following software databases | ||
19 | + | database_name | version | operating_system | | ||
20 | + | PostgreSQL | 1.0 | Linux | | ||
21 | + And the following softwares | ||
22 | + | name | acronym | operating_platform | software_language | software_database | | ||
23 | + | teste | ts | I dont know | Python | PostgreSQL | | ||
24 | + And I go to /plugin/mpog_software/archive_software | ||
25 | + And I should see "teste" | ||
26 | + And I follow "Deactivate software" | ||
27 | + And I confirm the "Do you want to deactivate this software?" dialog | ||
28 | + And I go to /search/communities | ||
29 | + And I fill in "search-input" with "teste" | ||
30 | + And I press "Search" | ||
31 | + Then I should not see "teste" within "search-profile-item" | ||
32 | + | ||
33 | + @selenium | ||
34 | + Scenario: Activate a deactivated software | ||
35 | + Given the following software language | ||
36 | + | programing_language | version | operating_system | | ||
37 | + | Python | 1.0 | Linux | | ||
38 | + And the following software databases | ||
39 | + | database_name | version | operating_system | | ||
40 | + | PostgreSQL | 1.0 | Linux | | ||
41 | + And the following softwares | ||
42 | + | name | acronym | operating_platform | software_language | software_database | | ||
43 | + | teste | ts | I dont know | Python | PostgreSQL | | ||
44 | + And I go to /plugin/mpog_software/archive_software | ||
45 | + And I should see "teste" | ||
46 | + And I follow "Deactivate software" | ||
47 | + And I confirm the "Do you want to deactivate this software?" dialog | ||
48 | + And I go to /search/communities | ||
49 | + And I fill in "search-input" with "teste" | ||
50 | + And I press "Search" | ||
51 | + And I should not see "Teste" within "search-profile-item" | ||
52 | + And I go to /plugin/mpog_software/archive_software | ||
53 | + And I should see "teste" | ||
54 | + And I follow "Activate Software" | ||
55 | + And I confirm the "Do you want to activate this software?" dialog | ||
56 | + And I follow "Communities" | ||
57 | + And I fill in "search-input" with "teste" | ||
58 | + And I press "Search" | ||
59 | + Then I should see "teste" within "search-profile-item" |
@@ -0,0 +1,62 @@ | @@ -0,0 +1,62 @@ | ||
1 | +Feature: Mpog Search People | ||
2 | + As a user | ||
3 | + I want to search for people with one or more filter options | ||
4 | + So I can find another user | ||
5 | + | ||
6 | + Background: | ||
7 | + Given "MpogSoftwarePlugin" plugin is enabled | ||
8 | + And I am logged in as admin | ||
9 | + And I go to /admin/plugins | ||
10 | + And I check "MpogSoftwarePlugin" | ||
11 | + And I press "Save changes" | ||
12 | + And I go to /account/logout | ||
13 | + And the following users | ||
14 | + | login | name | state | city | email | | ||
15 | + | josecunha | Jose Cunha | DF | Gama | jose.cunha@gmail.com | | ||
16 | + | cunhajose | Cunha Jose | SP | Guarulhos | cunha.jose@gmail.com | | ||
17 | + | joaoperera | Joao Perera | NY | New York | joao.perera@gmail.com | | ||
18 | + | mariaperera | Maria Perera | NY | New York | maria.perera@gmail.com | | ||
19 | + | ||
20 | + Scenario: Search a person with name field | ||
21 | + Given I go to /search/people | ||
22 | + And I fill in "name" with "jo" | ||
23 | + And I press "Search" | ||
24 | + And I should see "Jose Cunha" | ||
25 | + Then I should see "Joao Perera" | ||
26 | + | ||
27 | + Scenario: Search a person with a state field | ||
28 | + Given I go to /search/people | ||
29 | + And I fill in "state" with "DF" | ||
30 | + And I press "Search" | ||
31 | + Then I should see "Jose Cunha" | ||
32 | + | ||
33 | + Scenario: Search a person with a city field | ||
34 | + Given I go to /search/people | ||
35 | + And I fill in "city" with "Guarulhos" | ||
36 | + And I press "Search" | ||
37 | + Then I should see "Cunha Jose" | ||
38 | + | ||
39 | + Scenario: Search a person with a email field | ||
40 | + Given I go to /search/people | ||
41 | + And I fill in "email" with "jo" | ||
42 | + And I press "Search" | ||
43 | + And I should see "Jose Cunha" | ||
44 | + And I should see "Cunha Jose" | ||
45 | + Then I should see "Joao Perera" | ||
46 | + | ||
47 | + Scenario: Search a person with name and state fields | ||
48 | + Given I go to /search/people | ||
49 | + And I fill in "name" with "perera" | ||
50 | + And I fill in "state" with "NY" | ||
51 | + And I press "Search" | ||
52 | + And I should see "Maria Perera" | ||
53 | + Then I should see "Joao Perera" | ||
54 | + | ||
55 | + Scenario: Search a person with all fields | ||
56 | + Given I go to /search/people | ||
57 | + And I fill in "name" with "perera" | ||
58 | + And I fill in "state" with "NY" | ||
59 | + And I fill in "city" with "New" | ||
60 | + And I fill in "email" with "joao" | ||
61 | + And I press "Search" | ||
62 | + Then I should see "Joao Perera" | ||
0 | \ No newline at end of file | 63 | \ No newline at end of file |
@@ -0,0 +1,435 @@ | @@ -0,0 +1,435 @@ | ||
1 | +Feature: | ||
2 | + As a user | ||
3 | + I want to create a new software | ||
4 | + | ||
5 | + Background: | ||
6 | + Given "MpogSoftwarePlugin" plugin is enabled | ||
7 | + And SoftwareInfo has initial default values on database | ||
8 | + And I am logged in as admin | ||
9 | + And I go to /admin/plugins | ||
10 | + And I check "MpogSoftwarePlugin" | ||
11 | + And I press "Save changes" | ||
12 | + | ||
13 | + @selenium | ||
14 | + Scenario: Do not show error message if all required fields are correctly filled | ||
15 | + Given I go to admin_user's control panel | ||
16 | + And I follow "Manage my groups" | ||
17 | + And I follow "Create a new software" | ||
18 | + And I fill in "community_name" with "test name" | ||
19 | + And I fill in "language__version" with "2.0.0" | ||
20 | + And I fill in "language__operating_system" with "Linux" | ||
21 | + And I fill in "database__version" with "3.0" | ||
22 | + And I fill in "database__operating_system" with "GNU" | ||
23 | + And I fill in "operating_system__version" with "3.0" | ||
24 | + And I fill in "software_info_operating_platform" with "test operating platform" | ||
25 | + And fill in "software_info_acronym" with "SFTW" | ||
26 | + And I press "Create" | ||
27 | + Then I should see "Manage my groups" | ||
28 | + | ||
29 | + Scenario: Show operating_platform errors if this field is blank | ||
30 | + Given I go to admin_user's control panel | ||
31 | + And I follow "Manage my groups" | ||
32 | + And I follow "Create a new software" | ||
33 | + And fill in "community_name" with "test" | ||
34 | + And fill in "language__version" with "2.0.0" | ||
35 | + And fill in "language__operating_system" with "Linux" | ||
36 | + And I fill in "database__version" with "3.0" | ||
37 | + And I fill in "database__operating_system" with "GNU" | ||
38 | + And fill in "software_info_acronym" with "SFTW" | ||
39 | + And I press "Create" | ||
40 | + Then I should see "Operating platform can't be blank" | ||
41 | + | ||
42 | + Scenario: Do not show operating_platform errors if this field is not blank | ||
43 | + Given I go to admin_user's control panel | ||
44 | + And I follow "Manage my groups" | ||
45 | + And I follow "Create a new software" | ||
46 | + And fill in "software_info_operating_platform" with "test operating platform" | ||
47 | + And fill in "language__version" with "2.0.0" | ||
48 | + And fill in "language__operating_system" with "Linux" | ||
49 | + And I fill in "database__version" with "3.0" | ||
50 | + And I fill in "database__operating_system" with "GNU" | ||
51 | + And I press "Create" | ||
52 | + Then I should not see "Operating platform can't be blank" | ||
53 | + | ||
54 | + @selenium | ||
55 | + Scenario: Show software_langue errors if this Version is blank | ||
56 | + Given I go to admin_user's control panel | ||
57 | + And I follow "Manage my groups" | ||
58 | + And I follow "Create a new software" | ||
59 | + And fill in "community_name" with "test" | ||
60 | + And fill in "language__operating_system" with "Linux" | ||
61 | + And I fill in "database__version" with "3.0" | ||
62 | + And I fill in "database__operating_system" with "GNU" | ||
63 | + And I press "Create" | ||
64 | + Then I should see "Software languages is invalid" | ||
65 | + | ||
66 | + Scenario: Show acronym errors if this field is blank | ||
67 | + Given I go to admin_user's control panel | ||
68 | + And I follow "Manage my groups" | ||
69 | + And I follow "Create a new software" | ||
70 | + And fill in "community_name" with "test" | ||
71 | + And fill in "language__version" with "2.0.0" | ||
72 | + And fill in "language__operating_system" with "Linux" | ||
73 | + And I fill in "database__version" with "3.0" | ||
74 | + And I fill in "database__operating_system" with "GNU" | ||
75 | + And I press "Create" | ||
76 | + Then I should see "Acronym can't be blank" | ||
77 | + | ||
78 | + @selenium | ||
79 | + Scenario: Show database_fields errors version is blank | ||
80 | + Given I go to admin_user's control panel | ||
81 | + And I follow "Manage my groups" | ||
82 | + And I follow "Create a new software" | ||
83 | + And fill in "community_name" with "test" | ||
84 | + And fill in "language__version" with "2.0.0" | ||
85 | + And fill in "language__operating_system" with "Linux" | ||
86 | + And I fill in "database__operating_system" with "GNU" | ||
87 | + And I press "Create" | ||
88 | + Then I should see "Software databases is invalid" | ||
89 | + | ||
90 | + Scenario: Show acronym errors if this field has more than 8 characters | ||
91 | + Given I go to admin_user's control panel | ||
92 | + And I follow "Manage my groups" | ||
93 | + And I follow "Create a new software" | ||
94 | + And fill in "community_name" with "test" | ||
95 | + And fill in "language__version" with "2.0.0" | ||
96 | + And fill in "language__operating_system" with "Linux" | ||
97 | + And I fill in "database__operating_system" with "GNU" | ||
98 | + And I fill in "database__version" with "3.0" | ||
99 | + And I press "Create" | ||
100 | + And fill in "software_info_acronym" with "123456789" | ||
101 | + And I press "Create" | ||
102 | + Then I should see "Acronym can't have more than 8 characteres" | ||
103 | + | ||
104 | + Scenario: Show operating system errors if this field is not filled | ||
105 | + Given I go to admin_user's control panel | ||
106 | + And I follow "Manage my groups" | ||
107 | + And I follow "Create a new software" | ||
108 | + And I press "Create" | ||
109 | + Then I should see "Operating system : at least one must be filled" | ||
110 | + | ||
111 | + @selenium | ||
112 | + Scenario: Show operating system errors if this field is not filled | ||
113 | + Given I go to admin_user's control panel | ||
114 | + And I follow "Manage my groups" | ||
115 | + And I follow "Create a new software" | ||
116 | + And I fill in "operating_system__version" with "3.0" | ||
117 | + And I press "Create" | ||
118 | + Then I should not see "Operating system : at least one must be filled" | ||
119 | + | ||
120 | + Scenario: Show library fields when click in New Library | ||
121 | + Given I go to admin_user's control panel | ||
122 | + And I follow "Manage my groups" | ||
123 | + And I follow "Create a new software" | ||
124 | + And I follow "New Library" | ||
125 | + Then I should see "Name" | ||
126 | + Then I should see "Version" | ||
127 | + Then I should see "License" | ||
128 | + | ||
129 | + @selenium | ||
130 | + Scenario: Show SoftwareLangue fields when click in New Language | ||
131 | + Given I go to admin_user's control panel | ||
132 | + And I follow "Manage my groups" | ||
133 | + And I follow "Create a new software" | ||
134 | + And I follow "New language" | ||
135 | + Then I should see "3" of this selector ".software-language-table" | ||
136 | + #3 because one is always hidden | ||
137 | + | ||
138 | + @selenium | ||
139 | + Scenario: Show databasefields when click in New database | ||
140 | + Given I go to admin_user's control panel | ||
141 | + And I follow "Manage my groups" | ||
142 | + And I follow "Create a new software" | ||
143 | + And I follow "New Database" | ||
144 | + Then I should see "3" of this selector ".database-table" | ||
145 | + #3 because one is always hidden | ||
146 | + | ||
147 | + @selenium | ||
148 | + Scenario: Create software with libraries | ||
149 | + Given I go to admin_user's control panel | ||
150 | + And I follow "Manage my groups" | ||
151 | + And I follow "Create a new software" | ||
152 | + And I follow "New Library" | ||
153 | + And I fill in "community_name" with "test123" | ||
154 | + And fill in "software_info_acronym" with "SFTW" | ||
155 | + And I fill in "software_info_operating_platform" with "test platform" | ||
156 | + And I fill in "library__name" with "test library name" | ||
157 | + And I fill in "library__version" with "test library version" | ||
158 | + And I fill in "library__license" with "test library license" | ||
159 | + And fill in "language__version" with "2.0.0" | ||
160 | + And fill in "language__operating_system" with "Linux" | ||
161 | + And I fill in "database__version" with "3.0" | ||
162 | + And I fill in "database__operating_system" with "GNU" | ||
163 | + And I fill in "operating_system__version" with "3.0" | ||
164 | + And I press "Create" | ||
165 | + And I go to /myprofile/test123/profile_editor/edit | ||
166 | + And I should see "Libraries" | ||
167 | + And selector ".library-table" should have any "test library name" | ||
168 | + And selector ".library-table" should have any "test library version" | ||
169 | + Then selector ".library-table" should have any "test library license" | ||
170 | + | ||
171 | + @selenium | ||
172 | + Scenario: Delete software libraries | ||
173 | + Given I go to admin_user's control panel | ||
174 | + And I follow "Manage my groups" | ||
175 | + And I follow "Create a new software" | ||
176 | + And I follow "New Library" | ||
177 | + And I fill in "community_name" with "test123" | ||
178 | + And fill in "software_info_acronym" with "SFTW" | ||
179 | + And I fill in "software_info_operating_platform" with "test platform" | ||
180 | + And I fill in "library__name" with "test name" | ||
181 | + And I fill in "library__version" with "test version" | ||
182 | + And I fill in "library__license" with "test license" | ||
183 | + And fill in "language__version" with "2.0.0" | ||
184 | + And fill in "language__operating_system" with "Linux" | ||
185 | + And I fill in "database__version" with "3.0" | ||
186 | + And I fill in "database__operating_system" with "GNU" | ||
187 | + And I fill in "operating_system__version" with "3.0" | ||
188 | + And I press "Create" | ||
189 | + And I go to /myprofile/test123/profile_editor/edit | ||
190 | + And I should see "Libraries" | ||
191 | + And selector ".library-table" should have any "test name" | ||
192 | + And selector ".library-table" should have any "test version" | ||
193 | + And selector ".library-table" should have any "test license" | ||
194 | + And I follow "Delete" | ||
195 | + And I press "Save" | ||
196 | + And I go to /myprofile/test123/profile_editor/edit | ||
197 | + And I should not see "test name" within "#library__name" | ||
198 | + And I should not see "test version" within "#library__version" | ||
199 | + Then I should not see "test license" within "#library__license" | ||
200 | + | ||
201 | + @selenium | ||
202 | + Scenario: Crete software libraries on software edit | ||
203 | + Given I go to admin_user's control panel | ||
204 | + And I follow "Manage my groups" | ||
205 | + And I follow "Create a new software" | ||
206 | + And I fill in "community_name" with "test123" | ||
207 | + And fill in "software_info_acronym" with "SFTW" | ||
208 | + And I fill in "software_info_operating_platform" with "test platform" | ||
209 | + And fill in "language__version" with "2.0.0" | ||
210 | + And fill in "language__operating_system" with "Linux" | ||
211 | + And I fill in "database__version" with "3.0" | ||
212 | + And I fill in "database__operating_system" with "GNU" | ||
213 | + And I fill in "operating_system__version" with "3.0" | ||
214 | + And I press "Create" | ||
215 | + And I go to /myprofile/test123/profile_editor/edit | ||
216 | + And I follow "New Library" | ||
217 | + And I fill in "library__name" with "test name" | ||
218 | + And I fill in "library__version" with "test version" | ||
219 | + And I fill in "library__license" with "test license" | ||
220 | + And I press "Save" | ||
221 | + And I go to /myprofile/test123/profile_editor/edit | ||
222 | + And I should see "Libraries" | ||
223 | + And selector ".library-table" should have any "test name" | ||
224 | + And selector ".library-table" should have any "test version" | ||
225 | + Then selector ".library-table" should have any "test license" | ||
226 | + | ||
227 | + @selenium | ||
228 | + Scenario: Edit software libraries on software edit | ||
229 | + Given I go to admin_user's control panel | ||
230 | + And I follow "Manage my groups" | ||
231 | + And I follow "Create a new software" | ||
232 | + And I follow "New Library" | ||
233 | + And I fill in "community_name" with "test123" | ||
234 | + And fill in "software_info_acronym" with "SFTW" | ||
235 | + And I fill in "software_info_operating_platform" with "test platform" | ||
236 | + And I fill in "library__name" with "test name" | ||
237 | + And I fill in "library__version" with "test version" | ||
238 | + And I fill in "library__license" with "test license" | ||
239 | + And fill in "language__version" with "2.0.0" | ||
240 | + And fill in "language__operating_system" with "Linux" | ||
241 | + And I fill in "database__version" with "3.0" | ||
242 | + And I fill in "database__operating_system" with "GNU" | ||
243 | + And I fill in "operating_system__version" with "3.0" | ||
244 | + And I press "Create" | ||
245 | + And I go to /myprofile/test123/profile_editor/edit | ||
246 | + And I should see "Libraries" | ||
247 | + And selector ".library-table" should have any "test name" | ||
248 | + And selector ".library-table" should have any "test version" | ||
249 | + And selector ".library-table" should have any "test license" | ||
250 | + And I follow "New Library" | ||
251 | + And I fill in "library__name" with "new name" | ||
252 | + And I fill in "library__version" with "new version" | ||
253 | + And I fill in "library__license" with "new license" | ||
254 | + And I press "Save" | ||
255 | + And I go to /myprofile/test123/profile_editor/edit | ||
256 | + And selector ".library-table" should have any "new name" | ||
257 | + And selector ".library-table" should have any "new version" | ||
258 | + Then selector ".library-table" should have any "new license" | ||
259 | + | ||
260 | + @selenium | ||
261 | + Scenario: change license field | ||
262 | + Given I go to admin_user's control panel | ||
263 | + And I follow "Manage my groups" | ||
264 | + And I follow "Create a new software" | ||
265 | + And I fill in "community_name" with "test123" | ||
266 | + And fill in "software_info_acronym" with "SFTW" | ||
267 | + And I fill in "software_info_operating_platform" with "test platform" | ||
268 | + And I select "GPL-2" from "license_info_version" | ||
269 | + And fill in "language__version" with "2.0.0" | ||
270 | + And fill in "language__operating_system" with "Linux" | ||
271 | + And I fill in "database__version" with "3.0" | ||
272 | + And I fill in "database__operating_system" with "GNU" | ||
273 | + And I fill in "operating_system__version" with "3.0" | ||
274 | + And I press "Create" | ||
275 | + And I go to /myprofile/test123/profile_editor/edit | ||
276 | + And I select "GPL-3" from "version" | ||
277 | + And I press "Save" | ||
278 | + And I go to /myprofile/test123/profile_editor/edit | ||
279 | + Then I should see "GPL-3" | ||
280 | + | ||
281 | + @selenium | ||
282 | + Scenario: license link appears on the create software page | ||
283 | + Given I go to admin_user's control panel | ||
284 | + And I follow "Manage my groups" | ||
285 | + And I follow "Create a new software" | ||
286 | + And I fill in "community_name" with "test123" | ||
287 | + And I fill in "software_info_operating_platform" with "test platform" | ||
288 | + And I select "GPL-2" from "license_info_version" | ||
289 | + Then I should see "www.gpl2.com" within "#version_link" | ||
290 | + | ||
291 | + @selenium | ||
292 | + Scenario: license link changes if the user choose a different license | ||
293 | + Given I go to admin_user's control panel | ||
294 | + And I follow "Manage my groups" | ||
295 | + And I follow "Create a new software" | ||
296 | + And I fill in "community_name" with "test123" | ||
297 | + And I fill in "software_info_operating_platform" with "test platform" | ||
298 | + And I select "GPL-2" from "license_info_version" | ||
299 | + And I should see "www.gpl2.com" within "#version_link" | ||
300 | + And I select "GPL-3" from "license_info_version" | ||
301 | + Then I should see "www.gpl3.com" within "#version_link" | ||
302 | + | ||
303 | + @selenium | ||
304 | + Scenario: Crete software with Language | ||
305 | + Given I go to admin_user's control panel | ||
306 | + And I follow "Manage my groups" | ||
307 | + And I follow "Create a new software" | ||
308 | + And I fill in "community_name" with "test123" | ||
309 | + And fill in "software_info_acronym" with "SFTW" | ||
310 | + And I fill in "software_info_operating_platform" with "test platform" | ||
311 | + And fill in "language__version" with "2.0.0" | ||
312 | + And fill in "language__operating_system" with "Linux" | ||
313 | + And I fill in "database__version" with "3.0" | ||
314 | + And I fill in "database__operating_system" with "GNU" | ||
315 | + And I fill in "operating_system__version" with "3.0" | ||
316 | + And I press "Create" | ||
317 | + And I go to /myprofile/test123/profile_editor/edit | ||
318 | + And I should see "Programming Languages" | ||
319 | + And selector ".software-language-table" should have any "2.0.0" | ||
320 | + Then selector ".software-language-table" should have any "Linux" | ||
321 | + | ||
322 | + @selenium | ||
323 | + Scenario: Edit softwareLanguage on profile editor | ||
324 | + Given I go to admin_user's control panel | ||
325 | + And I follow "Manage my groups" | ||
326 | + And I follow "Create a new software" | ||
327 | + And I fill in "community_name" with "test123" | ||
328 | + And fill in "software_info_acronym" with "SFTW" | ||
329 | + And I fill in "software_info_operating_platform" with "test platform" | ||
330 | + And fill in "language__version" with "2.0.0" | ||
331 | + And fill in "language__operating_system" with "Linux" | ||
332 | + And I fill in "database__version" with "3.0" | ||
333 | + And I fill in "database__operating_system" with "GNU" | ||
334 | + And I fill in "operating_system__version" with "3.0" | ||
335 | + And I press "Create" | ||
336 | + And I go to /myprofile/test123/profile_editor/edit | ||
337 | + And I should see "Programming Languages" | ||
338 | + And selector ".software-language-table" should have any "2.0.0" | ||
339 | + And selector ".software-language-table" should have any "Linux" | ||
340 | + And I select "Python" from "language__programming_language_id" | ||
341 | + And fill in "language__version" with "3.2" | ||
342 | + And fill in "language__operating_system" with "GNU" | ||
343 | + And I press "Save" | ||
344 | + And I go to /myprofile/test123/profile_editor/edit | ||
345 | + And selector ".software-language-table" should have any "Python" | ||
346 | + And selector ".software-language-table" should have any "3.2" | ||
347 | + Then selector ".software-language-table" should have any "GNU" | ||
348 | + | ||
349 | + @selenium | ||
350 | + Scenario: Adding new softwareLanguage on profile editor | ||
351 | + Given I go to admin_user's control panel | ||
352 | + And I follow "Manage my groups" | ||
353 | + And I follow "Create a new software" | ||
354 | + And I fill in "community_name" with "test123" | ||
355 | + And fill in "software_info_acronym" with "SFTW" | ||
356 | + And I fill in "software_info_operating_platform" with "test platform" | ||
357 | + And fill in "language__version" with "2.0.0" | ||
358 | + And fill in "language__operating_system" with "Linux" | ||
359 | + And I fill in "database__version" with "3.0" | ||
360 | + And I fill in "database__operating_system" with "GNU" | ||
361 | + And I fill in "operating_system__version" with "3.0" | ||
362 | + And I press "Create" | ||
363 | + And I go to /myprofile/test123/profile_editor/edit | ||
364 | + And I should see "Programming Languages" | ||
365 | + And selector ".software-language-table" should have any "2.0.0" | ||
366 | + And selector ".software-language-table" should have any "Linux" | ||
367 | + And I follow "New language" | ||
368 | + And I click on the first button with class ".delete-dynamic-table" | ||
369 | + And I click on table number "2" selector ".software-language-table" and select the value "Python" | ||
370 | + And I fill with "4.3" in field with name "language[][version]" of table number "2" with class ".software-language-table" | ||
371 | + And I fill with "Windows" in field with name "language[][operating_system]" of table number "2" with class ".software-language-table" | ||
372 | + And I press "Save" | ||
373 | + And I go to /myprofile/test123/profile_editor/edit | ||
374 | + And selector ".software-language-table" should have any "Python" | ||
375 | + And selector ".software-language-table" should have any "4.3" | ||
376 | + Then selector ".software-language-table" should have any "Windows" | ||
377 | + | ||
378 | + @selenium | ||
379 | + Scenario: Edit softwareDatabase on profile editor | ||
380 | + Given I go to admin_user's control panel | ||
381 | + And I follow "Manage my groups" | ||
382 | + And I follow "Create a new software" | ||
383 | + And I fill in "community_name" with "test123" | ||
384 | + And fill in "software_info_acronym" with "SFTW" | ||
385 | + And I fill in "software_info_operating_platform" with "test platform" | ||
386 | + And fill in "language__version" with "2.0.0" | ||
387 | + And fill in "language__operating_system" with "Linux" | ||
388 | + And I fill in "database__version" with "3.0" | ||
389 | + And I fill in "database__operating_system" with "GNU" | ||
390 | + And I fill in "operating_system__version" with "3.0" | ||
391 | + And I press "Create" | ||
392 | + And I go to /myprofile/test123/profile_editor/edit | ||
393 | + And I should see "Databases" | ||
394 | + And selector ".database-table" should have any "3.0" | ||
395 | + And selector ".database-table" should have any "GNU" | ||
396 | + And I select "PostgreSQL" from "database__database_description_id" | ||
397 | + And fill in "database__version" with "3.2" | ||
398 | + And fill in "database__operating_system" with "Linux" | ||
399 | + And I press "Save" | ||
400 | + And I go to /myprofile/test123/profile_editor/edit | ||
401 | + And selector ".database-table" should have any "PostgreSQL" | ||
402 | + And selector ".database-table" should have any "3.2" | ||
403 | + Then selector ".database-table" should have any "Linux" | ||
404 | + | ||
405 | + @selenium | ||
406 | + Scenario: Delete softwareDatabase on profile editor | ||
407 | + Given I go to admin_user's control panel | ||
408 | + And I follow "Manage my groups" | ||
409 | + And I follow "Create a new software" | ||
410 | + And I fill in "community_name" with "test123" | ||
411 | + And fill in "software_info_acronym" with "SFTW" | ||
412 | + And I fill in "software_info_operating_platform" with "test platform" | ||
413 | + And fill in "language__version" with "2.0.0" | ||
414 | + And fill in "language__operating_system" with "Linux" | ||
415 | + And I fill in "database__version" with "3.5" | ||
416 | + And I fill in "database__operating_system" with "Solaris" | ||
417 | + And I fill in "operating_system__version" with "3.0" | ||
418 | + And I press "Create" | ||
419 | + And I go to /myprofile/test123/profile_editor/edit | ||
420 | + And I should see "Databases" | ||
421 | + And selector ".database-table" should have any "3.5" | ||
422 | + And selector ".database-table" should have any "Solaris" | ||
423 | + And I follow "New Database" | ||
424 | + And I click on table number "2" selector ".database-table" and select the value "MariaDB" | ||
425 | + And I fill with "4.3" in field with name "database[][version]" of table number "2" with class ".database-table" | ||
426 | + And I fill with "Windows" in field with name "database[][operating_system]" of table number "2" with class ".database-table" | ||
427 | + And I click on the first button with class ".database-table .delete-dynamic-table" | ||
428 | + And I press "Save" | ||
429 | + And I go to /myprofile/test123/profile_editor/edit | ||
430 | + And selector ".database-table" should have any "MariaDB" | ||
431 | + And selector ".database-table" should have any "4.3" | ||
432 | + And selector ".database-table" should have any "Windows" | ||
433 | + And I should not see "4th Dimension" | ||
434 | + And I should not see "3.5" | ||
435 | + And I should not see "Solaris" | ||
0 | \ No newline at end of file | 436 | \ No newline at end of file |
@@ -0,0 +1,133 @@ | @@ -0,0 +1,133 @@ | ||
1 | +Given /^SoftwareInfo has initial default values on database$/ do | ||
2 | + LicenseInfo.create(:version=>"None", :link=>"") | ||
3 | + LicenseInfo.create(:version=>"GPL-2", :link =>"www.gpl2.com") | ||
4 | + LicenseInfo.create(:version=>"GPL-3", :link =>"www.gpl3.com") | ||
5 | + | ||
6 | + ProgrammingLanguage.create(:name=>"C") | ||
7 | + ProgrammingLanguage.create(:name=>"C++") | ||
8 | + ProgrammingLanguage.create(:name=>"Ruby") | ||
9 | + ProgrammingLanguage.create(:name=>"Python") | ||
10 | + | ||
11 | + DatabaseDescription.create(:name => "Oracle") | ||
12 | + DatabaseDescription.create(:name => "MySQL") | ||
13 | + DatabaseDescription.create(:name => "Apache") | ||
14 | + DatabaseDescription.create(:name => "PostgreSQL") | ||
15 | + | ||
16 | + OperatingSystemName.create(:name=>"Debina") | ||
17 | + OperatingSystemName.create(:name=>"Fedora") | ||
18 | + OperatingSystemName.create(:name=>"CentOS") | ||
19 | +end | ||
20 | + | ||
21 | +Given /^Institutions has initial default values on database$/ do | ||
22 | + GovernmentalPower.create(:name => "Executivo") | ||
23 | + GovernmentalPower.create(:name => "Legislativo") | ||
24 | + GovernmentalPower.create(:name => "Judiciario") | ||
25 | + | ||
26 | + GovernmentalSphere.create(:name => "Federal") | ||
27 | +end | ||
28 | + | ||
29 | +Given /^I type in "([^"]*)" into autocomplete list "([^"]*)" and I choose "([^"]*)"$/ do |typed, input_institution, should_select| | ||
30 | + page.driver.browser.execute_script %Q{ jQuery('input[data-autocomplete]').trigger("focus") } | ||
31 | + fill_in("#{input_institution}",:with => typed) | ||
32 | + page.driver.browser.execute_script %Q{ jQuery('input[data-autocomplete]').trigger("keydown") } | ||
33 | + sleep 1 | ||
34 | + page.driver.browser.execute_script %Q{ jQuery('.ui-menu-item a:contains("#{should_select}")').trigger("mouseenter").trigger("click"); } | ||
35 | +end | ||
36 | + | ||
37 | +Given /^the following public institutions?$/ do |table| | ||
38 | + # table is a Cucumber::Ast::Table | ||
39 | + table.hashes.each do |item| | ||
40 | + governmental_power = GovernmentalPower.where(:name => item[:governmental_power]).first | ||
41 | + governmental_sphere = GovernmentalSphere.where(:name => item[:governmental_sphere]).first | ||
42 | + institution = PublicInstitution.create!(:name => item[:name], :type => "PublicInstitution", :acronym => item[:acronym], :cnpj => item[:cnpj], :governmental_power => governmental_power, :governmental_sphere => governmental_sphere) | ||
43 | + institution.save! | ||
44 | + end | ||
45 | +end | ||
46 | + | ||
47 | +Given /^the following software language$/ do |table| | ||
48 | + table.hashes.each do |item| | ||
49 | + programming_language = ProgrammingLanguage.where(:name=>item[:programing_language]).first | ||
50 | + software_language = SoftwareLanguage::new | ||
51 | + | ||
52 | + software_language.programming_language = programming_language | ||
53 | + software_language.version = item[:version] | ||
54 | + software_language.operating_system = item[:operating_system] | ||
55 | + | ||
56 | + software_language.save! | ||
57 | + end | ||
58 | +end | ||
59 | + | ||
60 | +Given /^the following software databases$/ do |table| | ||
61 | + table.hashes.each do |item| | ||
62 | + database_description = DatabaseDescription.where(:name=>item[:database_name]).first | ||
63 | + software_database = SoftwareDatabase::new | ||
64 | + | ||
65 | + software_database.database_description = database_description | ||
66 | + software_database.version = item[:version] | ||
67 | + software_database.operating_system = item[:operating_system] | ||
68 | + | ||
69 | + software_database.save! | ||
70 | + end | ||
71 | +end | ||
72 | + | ||
73 | +Given /^the following softwares$/ do |table| | ||
74 | + table.hashes.each do |item| | ||
75 | + community = Community.create :name=>item[:name] | ||
76 | + programming_language = ProgrammingLanguage.where(:name=>item[:software_language]).first | ||
77 | + database_description = DatabaseDescription.where(:name=>item[:software_database]).first | ||
78 | + | ||
79 | + software_language = SoftwareLanguage.where(:programming_language_id=>programming_language).first | ||
80 | + software_database = SoftwareDatabase.where(:database_description_id=>database_description).first | ||
81 | + | ||
82 | + software_info = SoftwareInfo::new(:acronym=>item[:acronym], :operating_platform=>item[:operating_platform]) | ||
83 | + software_info.community = community | ||
84 | + software_info.software_languages << software_language | ||
85 | + software_info.software_databases << software_database | ||
86 | + software_info.save! | ||
87 | + end | ||
88 | +end | ||
89 | + | ||
90 | +# Dynamic table steps | ||
91 | +Given /^I fill in first "([^"]*)" class with "([^"]*)"$/ do |selector, value| | ||
92 | + evaluate_script "jQuery('#{selector}').first().attr('value', '#{value}') && true" | ||
93 | +end | ||
94 | + | ||
95 | +Given /^I fill in last "([^"]*)" class with "([^"]*)"$/ do |selector, value| | ||
96 | + evaluate_script "jQuery('#{selector}').last().attr('value', '#{value}') && true" | ||
97 | +end | ||
98 | + | ||
99 | +Given /^I click on the first button with class "([^"]*)"$/ do |selector| | ||
100 | + evaluate_script "jQuery('#{selector}').first().trigger('click') && true" | ||
101 | +end | ||
102 | + | ||
103 | +Given /^I click on the last button with class "([^"]*)"$/ do |selector| | ||
104 | + evaluate_script "jQuery('#{selector}').last().trigger('click') && true" | ||
105 | +end | ||
106 | + | ||
107 | +Given /^the user "([^"]*)" has "([^"]*)" as secondary e\-mail$/ do |login, email| | ||
108 | + User[login].update_attributes(:secondary_email => email) | ||
109 | +end | ||
110 | + | ||
111 | +Given /^I click on anything with selector "([^"]*)"$/ do |selector| | ||
112 | + evaluate_script "jQuery('#{selector}').trigger('click') && true" | ||
113 | +end | ||
114 | + | ||
115 | +Given /^I should see "([^"]*)" of this selector "([^"]*)"$/ do |quantity, selector| | ||
116 | + evaluate_script "jQuery('#{selector}').length == '#{quantity}'" | ||
117 | +end | ||
118 | + | ||
119 | +Given /^selector "([^"]*)" should have any "([^"]*)"$/ do |selector, text| | ||
120 | + evaluate_script "jQuery('#{selector}').html().indexOf('#{text}') != -1" | ||
121 | +end | ||
122 | + | ||
123 | +Given /^I click on table number "([^"]*)" selector "([^"]*)" and select the value "([^"]*)"$/ do |number, selector, value| | ||
124 | + evaluate_script "jQuery('#{selector}:nth-child(#{number}) select option:contains(\"#{value}\")').selected() && true" | ||
125 | +end | ||
126 | + | ||
127 | +Given /^I fill with "([^"]*)" in field with name "([^"]*)" of table number "([^"]*)" with class "([^"]*)"$/ do |value, name, number, selector| | ||
128 | + evaluate_script "jQuery('#{selector}:nth-child(#{number}) input[name=\"#{name}\"]').val('#{value}') && true" | ||
129 | +end | ||
130 | + | ||
131 | +Given /^I sleep for (\d+) seconds$/ do |time| | ||
132 | + sleep time.to_i | ||
133 | +end | ||
0 | \ No newline at end of file | 134 | \ No newline at end of file |
@@ -0,0 +1,310 @@ | @@ -0,0 +1,310 @@ | ||
1 | +Feature: User Registration | ||
2 | + | ||
3 | + Background: | ||
4 | + Given "MpogSoftwarePlugin" plugin is enabled | ||
5 | + And I am logged in as admin | ||
6 | + And I go to /admin/plugins | ||
7 | + And I check "MpogSoftwarePlugin" | ||
8 | + And I press "Save changes" | ||
9 | + And I go to /admin/features/manage_fields | ||
10 | + And I check "person_fields_country_active" | ||
11 | + And I check "person_fields_country_required" | ||
12 | + And I check "person_fields_country_signup" | ||
13 | + And I check "person_fields_state_active" | ||
14 | + And I check "person_fields_state_required" | ||
15 | + And I check "person_fields_state_signup" | ||
16 | + And I check "person_fields_city_active" | ||
17 | + And I check "person_fields_city_required" | ||
18 | + And I check "person_fields_city_signup" | ||
19 | + And I press "Save changes" | ||
20 | + And the following blocks | ||
21 | + | owner | type | | ||
22 | + | environment | LoginBlock | | ||
23 | + And I go to /account/logout | ||
24 | + | ||
25 | + @selenium | ||
26 | + Scenario: Successfull registration with only required fields | ||
27 | + Given I go to /account/signup | ||
28 | + And I fill in the following within ".no-boxes": | ||
29 | + | e-Mail | josesilva@example.com | | ||
30 | + | Username | josesilva | | ||
31 | + | Password | secret | | ||
32 | + | Password confirmation | secret | | ||
33 | + | Full name | José da Silva | | ||
34 | + | State | Bahia | | ||
35 | + | City | Salvador | | ||
36 | + And I select "Brazil" from "profile_data[country]" | ||
37 | + And wait for the captcha signup time | ||
38 | + And I press "Create my account" | ||
39 | + When José da Silva's account is activated | ||
40 | + And I go to login page | ||
41 | + And I fill in "Username" with "josesilva" | ||
42 | + And I fill in "Password" with "secret" | ||
43 | + And I press "Log in" | ||
44 | + Then I should be logged in as "josesilva" | ||
45 | + | ||
46 | + @selenium | ||
47 | + Scenario: Successfull registration with governmental e-mail typing the name of the organization | ||
48 | + Given I go to /account/signup | ||
49 | + And Institutions has initial default values on database | ||
50 | + And the following public institutions | ||
51 | + | name | acronym | cnpj | governmental_power | governmental_sphere | | ||
52 | + | Ministerio das Cidades | MC | 58.745.189/0001-21 | Executivo | Federal | | ||
53 | + | Governo do DF | GDF | 12.645.166/0001-44 | Legislativo | Federal | | ||
54 | + | Ministerio do Planejamento | MP | 41.769.591/0001-43 | Judiciario | Federal | | ||
55 | + And I fill in the following within ".no-boxes": | ||
56 | + | e-Mail | josesilva@serpro.gov.br| | ||
57 | + | Username | josesilva | | ||
58 | + | Password | secret | | ||
59 | + | Password confirmation | secret | | ||
60 | + | Full name | José da Silva | | ||
61 | + | State | Bahia | | ||
62 | + | City | Salvador | | ||
63 | + | Secondary e-Mail | josesilva@example.com | | ||
64 | + | Role | TI analist | | ||
65 | + And I select "Brazil" from "profile_data[country]" | ||
66 | + And I type in "Minis" into autocomplete list "input_institution" and I choose "Ministerio do Planejamento" | ||
67 | + And wait for the captcha signup time | ||
68 | + And I press "Create my account" | ||
69 | + When José da Silva's account is activated | ||
70 | + And I go to login page | ||
71 | + And I fill in "Username" with "josesilva" | ||
72 | + And I fill in "Password" with "secret" | ||
73 | + And I press "Log in" | ||
74 | + Then I should be logged in as "josesilva" | ||
75 | + | ||
76 | + @selenium | ||
77 | + Scenario: Successfull registration with governmental e-mail typing the acronym of the organization | ||
78 | + Given I go to /account/signup | ||
79 | + And Institutions has initial default values on database | ||
80 | + And the following public institutions | ||
81 | + | name | acronym | cnpj | governmental_power | governmental_sphere | | ||
82 | + | Ministerio das Cidades | MC | 58.745.189/0001-21 | Executivo | Federal | | ||
83 | + | Governo do DF | GDF | 12.645.166/0001-44 | Legislativo | Federal | | ||
84 | + | Ministerio do Planejamento | MP | 41.769.591/0001-43 | Judiciario | Federal | | ||
85 | + And I fill in the following within ".no-boxes": | ||
86 | + | e-Mail | josesilva@serpro.gov.br| | ||
87 | + | Username | josesilva | | ||
88 | + | Password | secret | | ||
89 | + | Password confirmation | secret | | ||
90 | + | Full name | José da Silva | | ||
91 | + | State | Bahia | | ||
92 | + | City | Salvador | | ||
93 | + | Secondary e-Mail | josesilva@example.com | | ||
94 | + | Role | TI analist | | ||
95 | + And I select "Brazil" from "profile_data[country]" | ||
96 | + And I type in "MP" into autocomplete list "input_institution" and I choose "Ministerio do Planejamento" | ||
97 | + And wait for the captcha signup time | ||
98 | + And I press "Create my account" | ||
99 | + When José da Silva's account is activated | ||
100 | + And I go to login page | ||
101 | + And I fill in "Username" with "josesilva" | ||
102 | + And I fill in "Password" with "secret" | ||
103 | + And I press "Log in" | ||
104 | + Then I should be logged in as "josesilva" | ||
105 | + | ||
106 | + @selenium | ||
107 | + Scenario: Unsuccessfull registration due to the existance of e-mail as secondary another user's e-mail | ||
108 | + Given the following users | ||
109 | + | login | name | email | country | state | city | | ||
110 | + | maria | Maria Silva | maria@example.com | Brazil | DF | Brasilia | | ||
111 | + And the user "maria" has "user@example.com" as secondary e-mail | ||
112 | + And I go to /account/signup | ||
113 | + And I fill in the following within ".no-boxes": | ||
114 | + | e-Mail | user@example.com | | ||
115 | + | Username | josesilva | | ||
116 | + | Password | secret | | ||
117 | + | Password confirmation | secret | | ||
118 | + | Full name | José da Silva | | ||
119 | + | State | Bahia | | ||
120 | + | City | Salvador | | ||
121 | + And wait for the captcha signup time | ||
122 | + And I select "Brazil" from "profile_data[country]" | ||
123 | + When I press "Create my account" | ||
124 | + Then I should see "E-mail or secondary e-mail already taken." | ||
125 | + | ||
126 | + @selenium | ||
127 | + Scenario: Unsuccessfull registration due to the existance of secondary e-mail as another user's secondary e-mail | ||
128 | + Given the following users | ||
129 | + | login | name | email | country | state | city | | ||
130 | + | maria | Maria Silva | maria@example.com | Brazil | DF | Brasilia | | ||
131 | + And the user "maria" has "user@example.com" as secondary e-mail | ||
132 | + And I go to /account/signup | ||
133 | + And I fill in the following within ".no-boxes": | ||
134 | + | e-Mail | josesilva@example.com | | ||
135 | + | Username | josesilva | | ||
136 | + | Password | secret | | ||
137 | + | Password confirmation | secret | | ||
138 | + | Full name | José da Silva | | ||
139 | + | State | Bahia | | ||
140 | + | City | Salvador | | ||
141 | + | Secondary e-Mail | user@example.com | | ||
142 | + And I select "Brazil" from "profile_data[country]" | ||
143 | + And wait for the captcha signup time | ||
144 | + When I press "Create my account" | ||
145 | + Then I should see "E-mail or secondary e-mail already taken." | ||
146 | + | ||
147 | + @selenium | ||
148 | + Scenario: Unsuccessfull registration due to the existance of secondary e-mail as another user's e-mail | ||
149 | + Given the following users | ||
150 | + | login | name | email | country | state | city | | ||
151 | + | maria | Maria Silva | maria@example.com | Brazil | DF | Brasilia | | ||
152 | + And I go to /account/signup | ||
153 | + And I fill in the following within ".no-boxes": | ||
154 | + | e-Mail | josesilva@example.com | | ||
155 | + | Username | josesilva | | ||
156 | + | Password | secret | | ||
157 | + | Password confirmation | secret | | ||
158 | + | Full name | José da Silva | | ||
159 | + | State | Bahia | | ||
160 | + | City | Salvador | | ||
161 | + | Secondary e-Mail | user@example.com | | ||
162 | + And I select "Brazil" from "profile_data[country]" | ||
163 | + And wait for the captcha signup time | ||
164 | + When I press "Create my account" | ||
165 | + Then I should see "E-mail or secondary e-mail already taken." | ||
166 | + | ||
167 | + @selenium | ||
168 | + Scenario: Unsuccessfull registration due to both primary e-mail and secondary e-mail being equal | ||
169 | + Given I go to /account/signup | ||
170 | + And I fill in the following within ".no-boxes": | ||
171 | + | Username | josesilva | | ||
172 | + | e-Mail | josesilva@example.com | | ||
173 | + | Password | secret | | ||
174 | + | Password confirmation | secret | | ||
175 | + | Full name | José da Silva | | ||
176 | + | State | Bahia | | ||
177 | + | City | Salvador | | ||
178 | + | Secondary e-Mail | josesilva@example.com | | ||
179 | + And I select "Brazil" from "profile_data[country]" | ||
180 | + And wait for the captcha signup time | ||
181 | + When I press "Create my account" | ||
182 | + Then I should see "Email must be different from secondary email." | ||
183 | + | ||
184 | + @selenium | ||
185 | + Scenario: Unsuccessfull registration due to government fields being blank | ||
186 | + Given I go to /account/signup | ||
187 | + And I fill in the following within ".no-boxes": | ||
188 | + | Username | josesilva | | ||
189 | + | e-Mail | josesilva@serpro.gov.br| | ||
190 | + | Password | secret | | ||
191 | + | Password confirmation | secret | | ||
192 | + | Full name | José da Silva | | ||
193 | + | Secondary e-Mail | josesilva@example.com | | ||
194 | + And I select "Brazil" from "profile_data[country]" | ||
195 | + And wait for the captcha signup time | ||
196 | + When I press "Create my account" | ||
197 | + Then I should see "Role can't be blank if e-mail has governamental sulfixes." | ||
198 | + And I should see "Institution is obligatory if user has a government email." | ||
199 | + And I should see "State can't be blank" | ||
200 | + And I should see "City can't be blank" | ||
201 | + | ||
202 | + @selenium | ||
203 | + Scenario: Unsuccessfull registration due to secondary email is governmental and primary is not | ||
204 | + Given I go to /account/signup | ||
205 | + And I fill in the following within ".no-boxes": | ||
206 | + | Username | josesilva | | ||
207 | + | e-Mail | josesilva@example.com | | ||
208 | + | Password | secret | | ||
209 | + | Password confirmation | secret | | ||
210 | + | Full name | José da Silva | | ||
211 | + | State | Bahia | | ||
212 | + | City | Salvador | | ||
213 | + | Secondary e-Mail | josesilva@serpro.gov.br| | ||
214 | + And wait for the captcha signup time | ||
215 | + When I press "Create my account" | ||
216 | + Then I should see "The governamental email must be the primary one." | ||
217 | + | ||
218 | + @selenium | ||
219 | + Scenario: Show incomplete resgistration percentage | ||
220 | + Given I go to /account/signup | ||
221 | + And I fill in the following within ".no-boxes": | ||
222 | + | e-Mail | josesilva@gmail.com | | ||
223 | + | Password | secret | | ||
224 | + | Password confirmation | secret | | ||
225 | + | Full name | José da Silva | | ||
226 | + | State | Bahia | | ||
227 | + | City | Salvador | | ||
228 | + | Secondary e-Mail | josesilva@example.com | | ||
229 | + | Role | TI analist | | ||
230 | + And I select "Brazil" from "profile_data[country]" | ||
231 | + And I fill in "Username" with "josesilva" | ||
232 | + And wait for the captcha signup time | ||
233 | + And I press "Create my account" | ||
234 | + When José da Silva's account is activated | ||
235 | + And I go to login page | ||
236 | + And I fill in "Username" with "josesilva" | ||
237 | + And I fill in "Password" with "secret" | ||
238 | + And I press "Log in" | ||
239 | + Then I should see "Percentage incomplete: 63 %" | ||
240 | + | ||
241 | + @selenium | ||
242 | + Scenario: Remove the incomplete resgistration percentage message | ||
243 | + Given I go to /account/signup | ||
244 | + And I fill in the following within ".no-boxes": | ||
245 | + | e-Mail | josesilva@gmail.com | | ||
246 | + | Password | secret | | ||
247 | + | Password confirmation | secret | | ||
248 | + | Full name | José da Silva | | ||
249 | + | State | Bahia | | ||
250 | + | City | Salvador | | ||
251 | + | Secondary e-Mail | josesilva@example.com | | ||
252 | + | Role | TI analist | | ||
253 | + And I select "Brazil" from "profile_data[country]" | ||
254 | + And I fill in "Username" with "josesilva" | ||
255 | + And wait for the captcha signup time | ||
256 | + And I press "Create my account" | ||
257 | + When José da Silva's account is activated | ||
258 | + And I go to login page | ||
259 | + And I fill in "Username" with "josesilva" | ||
260 | + And I fill in "Password" with "secret" | ||
261 | + And I press "Log in" | ||
262 | + And I click on anything with selector ".hide-incomplete-percentage" | ||
263 | + Then I should not see "Percentage incomplete: 63 %" | ||
264 | + | ||
265 | + @selenium | ||
266 | + Scenario: When the user log out and log in again, the percentage registration message must appear | ||
267 | + Given the following users | ||
268 | + | login | name | email | country | state | city | | ||
269 | + | maria | Maria Silva | maria@example.com | Brazil | DF | Brasilia | | ||
270 | + When I am logged in as "maria" | ||
271 | + And I follow "Logout" | ||
272 | + And I am logged in as "maria" | ||
273 | + Then I should see "Percentage incomplete:" | ||
274 | + | ||
275 | + @selenium | ||
276 | + Scenario: When the user logged in and hide link of imcomplete percentage and user log out and log in again, the percentage registration link must appear | ||
277 | + Given the following users | ||
278 | + | login | name | email | country | state | city | | ||
279 | + | maria | Maria Silva | maria@example.com | Brazil | DF | Brasilia | | ||
280 | + When I am logged in as "maria" | ||
281 | + And I go to /profile/maria | ||
282 | + And I should see "Percentage incomplete:" | ||
283 | + And I click on anything with selector ".hide-incomplete-percentage" | ||
284 | + And I follow "Logout" | ||
285 | + And I am logged in as "maria" | ||
286 | + And I go to /profile/maria | ||
287 | + Then I should see "Percentage incomplete:" | ||
288 | + | ||
289 | + @selenium | ||
290 | + Scenario: When the user logged in and hide link of imcomplete percentage and user update page, the percentage registration link must not appear | ||
291 | + Given the following users | ||
292 | + | login | name | email | country | state | city | | ||
293 | + | maria | Maria Silva | maria@example.com | Brazil | DF | Brasilia | | ||
294 | + When I am logged in as "maria" | ||
295 | + And I go to /profile/maria | ||
296 | + And I should see "Percentage incomplete:" | ||
297 | + And I click on anything with selector ".hide-incomplete-percentage" | ||
298 | + And I should not see "Percentage incomplete:" | ||
299 | + And I go to /myprofile/maria/profile_editor/edit | ||
300 | + And I go to /profile/maria | ||
301 | + Then I should not see "Percentage incomplete:" | ||
302 | + | ||
303 | + @selenium | ||
304 | + Scenario: When the user press incomplete percentage link,he must be redirect to his edit profile page | ||
305 | + Given the following users | ||
306 | + | login | name | email | country | state | city | | ||
307 | + | maria | Maria Silva | maria@example.com | Brazil | DF | Brasilia | | ||
308 | + When I am logged in as "maria" | ||
309 | + And I follow "Percentage incomplete: 72 %" | ||
310 | + Then I should see "Profile settings" |
@@ -0,0 +1,85 @@ | @@ -0,0 +1,85 @@ | ||
1 | +module DatabaseHelper | ||
2 | + | ||
3 | + def self.list_database new_databases | ||
4 | + return [] if new_databases.nil? or new_databases.length == 0 | ||
5 | + list_databases = [] | ||
6 | + | ||
7 | + new_databases.each do |new_database| | ||
8 | + unless SoftwareHelper.all_table_is_empty? new_database, ["database_description_id"] | ||
9 | + database = SoftwareDatabase.new | ||
10 | + database.database_description_id = new_database[:database_description_id] | ||
11 | + database.version = new_database[:version] | ||
12 | + database.operating_system = new_database[:operating_system] | ||
13 | + list_databases << database | ||
14 | + end | ||
15 | + end | ||
16 | + | ||
17 | + list_databases | ||
18 | + end | ||
19 | + | ||
20 | + def self.valid_list_database? list_databases | ||
21 | + return false if list_databases.nil? or list_databases.length == 0 | ||
22 | + | ||
23 | + list_databases.each do |database| | ||
24 | + return false unless database.valid? | ||
25 | + end | ||
26 | + | ||
27 | + true | ||
28 | + end | ||
29 | + | ||
30 | + def self.database_as_tables(list_databases, have_delete_button = nil) | ||
31 | + extend( | ||
32 | + ActionView::Helpers::TagHelper, | ||
33 | + ActionView::Helpers::FormTagHelper, | ||
34 | + ActionView::Helpers::UrlHelper, | ||
35 | + ActionView::Helpers::FormOptionsHelper, | ||
36 | + ApplicationHelper | ||
37 | + ) | ||
38 | + | ||
39 | + return database_html_structure({:database_description_id => 1, :version => "", :operating_system => ""}, have_delete_button) if list_databases.nil? | ||
40 | + | ||
41 | + lambdas_list = [] | ||
42 | + | ||
43 | + list_databases.each do |database| | ||
44 | + lambdas_list << database_html_structure(database, have_delete_button) | ||
45 | + end | ||
46 | + | ||
47 | + lambdas_list | ||
48 | + end | ||
49 | + | ||
50 | + def self.database_html_structure(database_data, have_delete_button = nil) | ||
51 | + Proc::new do | ||
52 | + content_tag('table', | ||
53 | + content_tag('tr', | ||
54 | + content_tag('td', label_tag(_("database Name: ")))+ | ||
55 | + content_tag('td', select_tag("database[][database_description_id]", SoftwareHelper.select_options(DatabaseDescription.all, database_data[:database_description_id]) ))+ | ||
56 | + content_tag('td') | ||
57 | + )+ | ||
58 | + | ||
59 | + content_tag('tr', | ||
60 | + content_tag('td', label_tag(_("Version")))+ | ||
61 | + content_tag('td', text_field_tag("database[][version]", database_data[:version]))+ | ||
62 | + content_tag('td') | ||
63 | + )+ | ||
64 | + | ||
65 | + content_tag('tr', | ||
66 | + content_tag('td', label_tag(_("Operating System")))+ | ||
67 | + content_tag('td', text_field_tag("database[][operating_system]", database_data[:operating_system]))+ | ||
68 | + | ||
69 | + if have_delete_button.nil? | ||
70 | + content_tag('td', | ||
71 | + button_without_text(:delete, _('Delete'), "#" , :class=>"delete-dynamic-table"), | ||
72 | + :align => 'right' | ||
73 | + ) | ||
74 | + else | ||
75 | + content_tag('td') | ||
76 | + end | ||
77 | + ), :class => 'dynamic-table database-table' | ||
78 | + ) | ||
79 | + end | ||
80 | + end | ||
81 | + | ||
82 | + def self.add_dynamic_table | ||
83 | + database_as_tables(nil).call | ||
84 | + end | ||
85 | +end |
@@ -0,0 +1,51 @@ | @@ -0,0 +1,51 @@ | ||
1 | +require_dependency 'community' | ||
2 | + | ||
3 | +class Community | ||
4 | + | ||
5 | + attr_accessible :visible | ||
6 | + | ||
7 | + has_one :software_info, :dependent=>:delete | ||
8 | + has_one :institution, :dependent=>:delete | ||
9 | + | ||
10 | + def self.create_after_moderation(requestor, attributes = {}, software_info = nil, license_info = nil, controlled_vocabulary = nil) | ||
11 | + community = Community.new(attributes) | ||
12 | + if community.environment.enabled?('admin_must_approve_new_communities') | ||
13 | + CreateCommunity.create(attributes.merge(:requestor => requestor)) | ||
14 | + else | ||
15 | + community = Community.create(attributes) | ||
16 | + | ||
17 | + if not software_info.nil? | ||
18 | + if not license_info.nil? | ||
19 | + software_info.license_info = license_info | ||
20 | + end | ||
21 | + | ||
22 | + if not controlled_vocabulary.nil? | ||
23 | + software_info.controlled_vocabulary = controlled_vocabulary | ||
24 | + end | ||
25 | + | ||
26 | + community.software_info = software_info | ||
27 | + end | ||
28 | + | ||
29 | + community.add_admin(requestor) | ||
30 | + end | ||
31 | + community | ||
32 | + end | ||
33 | + | ||
34 | + def software? | ||
35 | + return !software_info.nil? | ||
36 | + end | ||
37 | + | ||
38 | + def institution? | ||
39 | + return !institution.nil? | ||
40 | + end | ||
41 | + | ||
42 | + def deactivate | ||
43 | + self.visible = false | ||
44 | + self.save! | ||
45 | + end | ||
46 | + | ||
47 | + def activate | ||
48 | + self.visible = true | ||
49 | + self.save! | ||
50 | + end | ||
51 | +end |
@@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
1 | +class ControlledVocabulary < ActiveRecord::Base | ||
2 | + self.table_name = "controlled_vocabulary" | ||
3 | + | ||
4 | + attr_accessible :administration , :agriculture , :business_and_services , :communication , | ||
5 | + :culture , :national_defense , :economy_and_finances , :education , | ||
6 | + :energy , :sports , :habitation , :industry , :environment , | ||
7 | + :research_and_development , :social_security , :social_protection , | ||
8 | + :international_relations , :sanitation , :health , | ||
9 | + :security_public_order , :work , :transportation , :urbanism | ||
10 | + | ||
11 | + belongs_to :software_info | ||
12 | +end | ||
0 | \ No newline at end of file | 13 | \ No newline at end of file |
@@ -0,0 +1,77 @@ | @@ -0,0 +1,77 @@ | ||
1 | +require_dependency 'person' | ||
2 | + | ||
3 | +class Person | ||
4 | + | ||
5 | + settings_items :area_interest, :type => :string, :default => "" | ||
6 | + settings_items :percentage_incomplete, :type => :string, :default => "" | ||
7 | + | ||
8 | + attr_accessible :area_interest | ||
9 | + attr_accessible :percentage_incomplete | ||
10 | + | ||
11 | + scope :search, lambda { |name="", state="", city="", email=""| | ||
12 | + like_sql = "" | ||
13 | + values = [] | ||
14 | + | ||
15 | + unless name.nil? and name.blank? | ||
16 | + like_sql << "name ILIKE ? AND " | ||
17 | + values << "%#{name}%" | ||
18 | + end | ||
19 | + | ||
20 | + unless state.nil? and state.blank? | ||
21 | + like_sql << "data ILIKE ? AND " | ||
22 | + values << "%:state: %#{state}%" | ||
23 | + end | ||
24 | + | ||
25 | + unless city.nil? and city.blank? | ||
26 | + like_sql << "data ILIKE ? AND " | ||
27 | + values << "%:city: %#{city}%" | ||
28 | + end | ||
29 | + | ||
30 | + unless email.nil? and email.blank? | ||
31 | + like_sql << "email ILIKE ? AND " | ||
32 | + values << "%#{email}%" | ||
33 | + end | ||
34 | + like_sql = like_sql[0..like_sql.length-5] | ||
35 | + | ||
36 | + { | ||
37 | + :joins => :user, | ||
38 | + :conditions=>[like_sql, *values] | ||
39 | + } | ||
40 | + } | ||
41 | + | ||
42 | + def secondary_email | ||
43 | + self.user.secondary_email unless self.user.nil? | ||
44 | + end | ||
45 | + | ||
46 | + def secondary_email= value | ||
47 | + self.user.secondary_email = value unless self.user.nil? | ||
48 | + end | ||
49 | + | ||
50 | + def institution | ||
51 | + self.user.institution.name if self.user and self.user.institution | ||
52 | + end | ||
53 | + | ||
54 | + def institution_id | ||
55 | + self.user.institution.id unless self.user.institution.nil? | ||
56 | + end | ||
57 | + | ||
58 | + def institution_id= value | ||
59 | + institution = Institution.find(:first, :conditions=>"id = #{value}") | ||
60 | + | ||
61 | + unless institution.nil? | ||
62 | + self.user.institution = institution | ||
63 | + end | ||
64 | + end | ||
65 | + | ||
66 | + def role | ||
67 | + self.user.role unless self.user.nil? | ||
68 | + end | ||
69 | + | ||
70 | + def role= value | ||
71 | + self.user.role = value unless self.user.nil? | ||
72 | + end | ||
73 | + | ||
74 | + def software? | ||
75 | + false | ||
76 | + end | ||
77 | +end |
@@ -0,0 +1,67 @@ | @@ -0,0 +1,67 @@ | ||
1 | +require_dependency 'user' | ||
2 | + | ||
3 | +class User | ||
4 | + | ||
5 | + belongs_to :institution | ||
6 | + | ||
7 | + validate :email_different_secondary?, :email_has_already_been_used?, | ||
8 | + :secondary_email_format, :email_suffix_is_gov?, :validate_role? | ||
9 | + | ||
10 | + scope :primary_or_secondary_email_already_used?, lambda { |email| | ||
11 | + where("email=? OR secondary_email=?", email, email) | ||
12 | + } | ||
13 | + | ||
14 | + def email_different_secondary? | ||
15 | + self.errors.add(:base, _("Email must be different from secondary email.")) if self.email == self.secondary_email | ||
16 | + end | ||
17 | + | ||
18 | + def email_has_already_been_used? | ||
19 | + user_already_saved = User.find(:first, :conditions=>["email = ?", self.email]) | ||
20 | + | ||
21 | + if user_already_saved.nil? | ||
22 | + primary_email_hasnt_been_used = User.primary_or_secondary_email_already_used?(self.email).empty? | ||
23 | + secondary_email_hasnt_been_used = User.primary_or_secondary_email_already_used?(self.secondary_email).empty? | ||
24 | + | ||
25 | + if !primary_email_hasnt_been_used or !secondary_email_hasnt_been_used | ||
26 | + self.errors.add(:base, _("E-mail or secondary e-mail already taken.")) | ||
27 | + end | ||
28 | + end | ||
29 | + end | ||
30 | + | ||
31 | + def secondary_email_format | ||
32 | + if !self.secondary_email.nil? and self.secondary_email.length > 0 | ||
33 | + test = /\A[^@]+@([^@\.]+\.)+[^@\.]+\z/ | ||
34 | + self.errors.add(:base, _("Invalid secondary email format.")) unless test.match(self.secondary_email) | ||
35 | + end | ||
36 | + end | ||
37 | + | ||
38 | + def email_suffix_is_gov? | ||
39 | + test = /^.*@[gov.br|jus.br|leg.br|mp.br]+$/ | ||
40 | + primary_email_has_gov_suffix = false | ||
41 | + secondary_email_has_gov_suffix = false | ||
42 | + | ||
43 | + if !self.email.nil? and self.email.length > 0 | ||
44 | + primary_email_has_gov_suffix = true if test.match(self.email) | ||
45 | + end | ||
46 | + | ||
47 | + unless primary_email_has_gov_suffix | ||
48 | + if !self.secondary_email.nil? and self.secondary_email.length > 0 | ||
49 | + secondary_email_has_gov_suffix = true if test.match(self.secondary_email) | ||
50 | + end | ||
51 | + self.errors.add(:base, _("The governamental email must be the primary one.")) if secondary_email_has_gov_suffix | ||
52 | + end | ||
53 | + | ||
54 | + self.errors.add(:base, _("Institution is obligatory if user has a government email.")) if primary_email_has_gov_suffix and self.institution.nil? | ||
55 | + end | ||
56 | + | ||
57 | + def validate_role? | ||
58 | + valid_sufix = ['gov.br','jus.br','leg.br','mp.br'] | ||
59 | + valid_sufix.each do |sufix| | ||
60 | + if (self.secondary_email =~ /#{sufix}(.*)/ || self.email =~ /#{sufix}(.*)/) and self.role.blank? | ||
61 | + errors.add(:role, _("can't be blank if e-mail has governamental sulfixes.")) | ||
62 | + break | ||
63 | + end | ||
64 | + end | ||
65 | + end | ||
66 | + | ||
67 | +end |
@@ -0,0 +1,10 @@ | @@ -0,0 +1,10 @@ | ||
1 | +class GovernmentalPower < ActiveRecord::Base | ||
2 | + attr_accessible :name | ||
3 | + | ||
4 | + validates :name, :presence=>true, :uniqueness=>true | ||
5 | + has_many :institutions | ||
6 | + | ||
7 | + def public_institutions | ||
8 | + Institution.where(:type=>"PublicInstitution", :governmental_power_id=>self.id) | ||
9 | + end | ||
10 | +end |
@@ -0,0 +1,30 @@ | @@ -0,0 +1,30 @@ | ||
1 | +class Institution < ActiveRecord::Base | ||
2 | + belongs_to :governmental_power | ||
3 | + belongs_to :governmental_sphere | ||
4 | + | ||
5 | + attr_accessible :name, :acronym, :unit_code, :parent_code, :unit_type, | ||
6 | + :juridical_nature, :sub_juridical_nature, :normalization_level, | ||
7 | + :version, :cnpj, :type, :governmental_power, :governmental_sphere | ||
8 | + has_many :users | ||
9 | + | ||
10 | + validates :name, :presence=>true, :uniqueness=>true | ||
11 | + | ||
12 | + before_save :verify_institution_type | ||
13 | + | ||
14 | + belongs_to :community | ||
15 | + | ||
16 | + scope :search_institution, lambda{ |value| | ||
17 | + where("name ilike ? OR acronym ilike ?", "%#{value}%", "%#{value}%" ) | ||
18 | + } | ||
19 | + | ||
20 | + protected | ||
21 | + | ||
22 | + def verify_institution_type | ||
23 | + valid_institutions_type = ["PublicInstitution", "PrivateInstitution"] | ||
24 | + | ||
25 | + unless valid_institutions_type.include? self.type | ||
26 | + self.errors.add(:type, _("invalid, only public and private institutions are allowed.")) | ||
27 | + false | ||
28 | + end | ||
29 | + end | ||
30 | +end |
@@ -0,0 +1,76 @@ | @@ -0,0 +1,76 @@ | ||
1 | +require "net/http" | ||
2 | +require "yaml" | ||
3 | + | ||
4 | +module InstitutionHelper | ||
5 | + | ||
6 | + SPHERES = ['federal'] | ||
7 | + POWERS = ['executive', 'legislative', 'judiciary'] | ||
8 | + | ||
9 | + def self.mass_update | ||
10 | + @web_service_info = self.web_service_info | ||
11 | + | ||
12 | + POWERS.each do |power| | ||
13 | + SPHERES.each do |sphere| | ||
14 | + json = self.get_json power, sphere | ||
15 | + | ||
16 | + units = json["unidades"] | ||
17 | + | ||
18 | + units.each do |unit| | ||
19 | + institution = Institution.where(:name=>unit["nome"]) | ||
20 | + | ||
21 | + institution = if institution.count == 0 | ||
22 | + Institution::new | ||
23 | + else | ||
24 | + institution.first | ||
25 | + end | ||
26 | + | ||
27 | + institution = self.set_institution_data institution, unit | ||
28 | + institution.save | ||
29 | + end | ||
30 | + end | ||
31 | + end | ||
32 | + end | ||
33 | + | ||
34 | + protected | ||
35 | + | ||
36 | + def self.web_service_info | ||
37 | + YAML.load_file(File.dirname(__FILE__) + '/../config/siorg.yml')['web_service'] | ||
38 | + end | ||
39 | + | ||
40 | + def self.service_url power, sphere | ||
41 | + base_url = @web_service_info['base_url'] | ||
42 | + power_code = @web_service_info['power_codes'][power].to_s | ||
43 | + sphere_code = @web_service_info['sphere_codes'][sphere].to_s | ||
44 | + additional_params = @web_service_info['additional_params'] | ||
45 | + | ||
46 | + return URI("#{base_url}?codigoPoder=#{power_code}&codigoEsfera=#{sphere_code}&#{additional_params}") | ||
47 | + end | ||
48 | + | ||
49 | + def self.get_json power, sphere | ||
50 | + uri = self.service_url power, sphere #URI(BASE_URL+"codigoPoder=#{power_code}&codigoEsfera=#{sphere_code}&retornarOrgaoEntidadeVinculados=NAO") | ||
51 | + data = Net::HTTP.get(uri) | ||
52 | + ActiveSupport::JSON.decode(data) | ||
53 | + end | ||
54 | + | ||
55 | + def self.retrieve_code unit, field | ||
56 | + data = unit[field] | ||
57 | + return data.split("/").last unless (data.blank? || data.nil?) | ||
58 | + return nil | ||
59 | + end | ||
60 | + | ||
61 | + def self.set_institution_data institution, unit | ||
62 | + institution.name = unit["nome"] | ||
63 | + institution.acronym = unit["sigla"] | ||
64 | + institution.unit_code = self.retrieve_code(unit,"codigoUnidade") | ||
65 | + institution.parent_code = self.retrieve_code(unit,"codigoUnidadePai") | ||
66 | + institution.unit_type = self.retrieve_code(unit,"codigoTipoUnidade") | ||
67 | + institution.juridical_nature = self.retrieve_code(unit,"codigoNaturezaJuridica") | ||
68 | + institution.sub_juridical_nature = self.retrieve_code(unit,"codigoSubNaturezaJuridica") | ||
69 | + institution.normalization_level = unit["nivelNormatizacao"] | ||
70 | + institution.version = unit["versaoConsulta"] | ||
71 | + institution.type = "PublicInstitution" | ||
72 | + institution.governmental_power = GovernmentalPower.where(:name=>self.retrieve_code(unit,"codigoPoder")).first | ||
73 | + institution.governmental_sphere = GovernmentalSphere.where(:name=>self.retrieve_code(unit,"codigoEsfera")).first | ||
74 | + institution | ||
75 | + end | ||
76 | +end |
@@ -0,0 +1,22 @@ | @@ -0,0 +1,22 @@ | ||
1 | +class Library < ActiveRecord::Base | ||
2 | + | ||
3 | + #TODO missing relations? | ||
4 | + | ||
5 | + attr_accessible :name, :version, :license, :software_info_id | ||
6 | + | ||
7 | + #TODO: review validations | ||
8 | + validate :validate_name, :validate_version, :validate_license | ||
9 | + | ||
10 | + def validate_name | ||
11 | + self.errors.add(:name, _("can't be blank")) if self.name.blank? && self.errors[:name].blank? | ||
12 | + end | ||
13 | + | ||
14 | + def validate_version | ||
15 | + self.errors.add(:version, _("can't be blank")) if self.version.blank? && self.errors[:version].blank? | ||
16 | + end | ||
17 | + | ||
18 | + def validate_license | ||
19 | + self.errors.add(:license, _("can't be blank")) if self.license.blank? && self.errors[:license].blank? | ||
20 | + end | ||
21 | + | ||
22 | +end |
@@ -0,0 +1,78 @@ | @@ -0,0 +1,78 @@ | ||
1 | +module LibraryHelper | ||
2 | + def self.list_libraries new_libraries | ||
3 | + return [] if new_libraries.nil? or new_libraries.length == 0 | ||
4 | + list_libraries = [] | ||
5 | + | ||
6 | + new_libraries.each do |new_library| | ||
7 | + unless SoftwareHelper.all_table_is_empty? new_library | ||
8 | + library = Library.new | ||
9 | + library.name = new_library[:name] | ||
10 | + library.version = new_library[:version] | ||
11 | + library.license = new_library[:license] | ||
12 | + list_libraries << library | ||
13 | + end | ||
14 | + end | ||
15 | + | ||
16 | + list_libraries | ||
17 | + end | ||
18 | + | ||
19 | + def self.valid_list_libraries? list_libraries | ||
20 | + return true if list_libraries.nil? or list_libraries.length == 0 | ||
21 | + | ||
22 | + list_libraries.each do |library| | ||
23 | + return false unless library.valid? | ||
24 | + end | ||
25 | + | ||
26 | + true | ||
27 | + end | ||
28 | + | ||
29 | + def self.library_as_tables list_libraries | ||
30 | + extend( | ||
31 | + ActionView::Helpers::TagHelper, | ||
32 | + ActionView::Helpers::FormTagHelper, | ||
33 | + ActionView::Helpers::UrlHelper, | ||
34 | + ApplicationHelper | ||
35 | + ) | ||
36 | + | ||
37 | + return library_html_structure({:name=>"", :version=>"", :license=>""}) if list_libraries.nil? | ||
38 | + | ||
39 | + lambdas_list = [] | ||
40 | + | ||
41 | + list_libraries.each do |library| | ||
42 | + lambdas_list << library_html_structure(library) | ||
43 | + end | ||
44 | + | ||
45 | + lambdas_list | ||
46 | + end | ||
47 | + | ||
48 | + def self.library_html_structure library_data | ||
49 | + Proc::new do | ||
50 | + content_tag('table', | ||
51 | + content_tag('tr', | ||
52 | + content_tag('td', label_tag(_("Name")))+ | ||
53 | + content_tag('td', text_field_tag("library[][name]", library_data[:name]))+ | ||
54 | + content_tag('td') | ||
55 | + )+ | ||
56 | + | ||
57 | + content_tag('tr', | ||
58 | + content_tag('td', label_tag(_("Version")))+ | ||
59 | + content_tag('td', text_field_tag("library[][version]", library_data[:version]))+ | ||
60 | + content_tag('td') | ||
61 | + )+ | ||
62 | + | ||
63 | + content_tag('tr', | ||
64 | + content_tag('td', label_tag(_("License")))+ | ||
65 | + content_tag('td', text_field_tag("library[][license]", library_data[:license])) + | ||
66 | + content_tag('td', | ||
67 | + button_without_text(:delete, _('Delete'), "#" , :class=>"delete-dynamic-table"), | ||
68 | + :align => 'right' | ||
69 | + ) | ||
70 | + ), :class => 'dynamic-table library-table' | ||
71 | + ) | ||
72 | + end | ||
73 | + end | ||
74 | + | ||
75 | + def self.add_dynamic_table | ||
76 | + library_as_tables(nil).call | ||
77 | + end | ||
78 | +end |
@@ -0,0 +1,346 @@ | @@ -0,0 +1,346 @@ | ||
1 | +class MpogSoftwarePlugin < Noosfero::Plugin | ||
2 | + include ActionView::Helpers::TagHelper | ||
3 | + include ActionView::Helpers::FormTagHelper | ||
4 | + include ActionView::Helpers::FormOptionsHelper | ||
5 | + include ActionView::Helpers::JavaScriptHelper | ||
6 | + include ActionView::Helpers::AssetTagHelper | ||
7 | + include FormsHelper | ||
8 | + include LibraryHelper | ||
9 | + | ||
10 | + def self.plugin_name | ||
11 | + "MpogSoftwarePlugin" | ||
12 | + end | ||
13 | + | ||
14 | + def self.plugin_description | ||
15 | + _("Add Public Software and MPOG features.") | ||
16 | + end | ||
17 | + | ||
18 | + def signup_extra_contents | ||
19 | + institutions = Institution.all | ||
20 | + | ||
21 | + Proc::new do | ||
22 | + content_tag(:div, | ||
23 | + required(labelled_form_field( | ||
24 | + _('Secondary e-Mail'), | ||
25 | + text_field(:user, :secondary_email, :id => 'secondary_email_field') + | ||
26 | + content_tag( | ||
27 | + :small, _("If you have a gov email, don't forget to use this email on the primary email") ,:class => 'signup-form',:id =>'secondary-email-balloon') | ||
28 | + )), | ||
29 | + :id => 'signup-secondary-email') + | ||
30 | + | ||
31 | + content_tag(:div, | ||
32 | + labelled_form_field( | ||
33 | + _('Role'), text_field(:user, :role, :id => 'role_field') + | ||
34 | + content_tag( | ||
35 | + :small,_('If your primary email has one of those sufix: gov.br, jus.br, leg.br or mp.br, dont forget to fill your role in the organization'),:class => 'signup-form',:id =>'role-balloon')), | ||
36 | + :id => 'signup-role' | ||
37 | + ) + | ||
38 | + | ||
39 | + content_tag(:div, | ||
40 | + labelled_form_field( | ||
41 | + _('Areas of Interest'), | ||
42 | + text_field(:profile_data, :area_interest, :id => 'area_interest_field')+ | ||
43 | + content_tag( | ||
44 | + :small,_('Fill with your interest areas'),:class => 'signup-form',:id =>'area-interest-balloon')), | ||
45 | + :id => 'signup-area-interest' | ||
46 | + ) + | ||
47 | + | ||
48 | + content_tag(:div, | ||
49 | + labelled_form_field( | ||
50 | + _('Institution'), | ||
51 | + text_field(:institution, :name, :id => 'input_institution')+ | ||
52 | + content_tag( | ||
53 | + :small, _('Fill with your institution') ,:class => 'signup-form', :id =>'institution-balloon' | ||
54 | + ) + | ||
55 | + content_tag(:div, _("The searched institution does not exist"), :id=>"institution_empty_ajax_message", :class=>"errorExplanation hide-field") + | ||
56 | + link_to(_("Add new institution"), "#", :id=>"create_institution_link", :class=>'button with-text icon-add')+ | ||
57 | + hidden_field_tag("user[institution_id]", "", :id => 'user_institution_id')+ | ||
58 | + content_tag(:div, "", :id=>"institution_dialog") | ||
59 | + ), | ||
60 | + :id => 'signup-institution' | ||
61 | + ) | ||
62 | + end | ||
63 | + end | ||
64 | + | ||
65 | + def profile_editor_extras | ||
66 | + if context.profile.person? | ||
67 | + expanded_template('person_editor_extras.html.erb') | ||
68 | + elsif context.profile.respond_to? :software_info and !context.profile.software_info.nil? | ||
69 | + expanded_template('software_editor_extras.html.erb') | ||
70 | + elsif context.profile.respond_to? :institution and !context.profile.institution.nil? | ||
71 | + expanded_template('institution_editor_extras.html.erb') | ||
72 | + end | ||
73 | + end | ||
74 | + | ||
75 | + def profile_editor_transaction_extras | ||
76 | + if context.profile.respond_to?(:software_info) | ||
77 | + if context.params.has_key?(:software_info) | ||
78 | + software_info_transaction | ||
79 | + end | ||
80 | + | ||
81 | + if context.params.has_key?(:library) | ||
82 | + libraries_transaction | ||
83 | + end | ||
84 | + | ||
85 | + if context.params.has_key?(:version) | ||
86 | + license_transaction | ||
87 | + end | ||
88 | + | ||
89 | + if context.params.has_key?(:language) | ||
90 | + language_transaction | ||
91 | + end | ||
92 | + | ||
93 | + if context.params.has_key?(:database) | ||
94 | + databases_transaction | ||
95 | + end | ||
96 | + | ||
97 | + if context.params.has_key?(:operating_system) | ||
98 | + operating_system_transaction | ||
99 | + end | ||
100 | + if context.params.has_key?(:institution) || context.params.has_key?(:governmental_power) || context.params.has_key?(:governmental_sphere) | ||
101 | + institution_transaction | ||
102 | + end | ||
103 | + | ||
104 | + if context.params.has_key?(:controlled_vocabulary) | ||
105 | + controlled_vocabulary_transaction | ||
106 | + end | ||
107 | + elsif context.profile.respond_to?(:user) | ||
108 | + if context.params.has_key?(:user) | ||
109 | + user_transaction | ||
110 | + end | ||
111 | + end | ||
112 | + end | ||
113 | + | ||
114 | + def profile_tabs | ||
115 | + if context.profile.person? | ||
116 | + { :title => _("Mpog"), | ||
117 | + :id => 'mpog-fields', | ||
118 | + :content => Proc::new do render :partial => 'profile_tab' end, | ||
119 | + :start => true } | ||
120 | + elsif context.profile.software? | ||
121 | + { :title => _("Software"), | ||
122 | + :id => 'mpog-fields', | ||
123 | + :content => Proc::new do render :partial => 'software_tab' end, | ||
124 | + :start => true } | ||
125 | + elsif context.profile.institution? | ||
126 | + { :title => _("Institution"), | ||
127 | + :id => 'mpog-fields', | ||
128 | + :content => Proc::new do render :partial => 'institution_tab' end, | ||
129 | + :start => true | ||
130 | + } | ||
131 | + end | ||
132 | + end | ||
133 | + | ||
134 | + def stylesheet? | ||
135 | + true | ||
136 | + end | ||
137 | + | ||
138 | + def js_files | ||
139 | + ["mpog-software-validations.js", "mpog-user-validations.js", "mpog-institution-validations.js"] | ||
140 | + end | ||
141 | + | ||
142 | + def alternative_exclusion | ||
143 | + if context.profile.person? | ||
144 | + if context.profile.disable | ||
145 | + context.session[:notice] = _('The profile was deactivated.') | ||
146 | + context.profile.user.forget_me | ||
147 | + context.session.delete(:user) | ||
148 | + | ||
149 | + true | ||
150 | + end | ||
151 | + elsif context.profile.community? | ||
152 | + context.profile.software_info.software_languages.delete_all | ||
153 | + context.profile.destroy | ||
154 | + | ||
155 | + mensage = context.profile.software_info.nil? ? "community" : "software" | ||
156 | + context.session[:notice] = _("The #{mensage} was deleted.") | ||
157 | + else | ||
158 | + false | ||
159 | + end | ||
160 | + end | ||
161 | + | ||
162 | + def add_new_organization_button | ||
163 | + Proc::new do | ||
164 | + button(:add, _('Create a new software'), :controller => 'mpog_software_plugin_myprofile', :action => 'new_software') | ||
165 | + end | ||
166 | + end | ||
167 | + | ||
168 | + def alternative_reactive_account(person) | ||
169 | + person.visible = true | ||
170 | + person.save | ||
171 | + true | ||
172 | + end | ||
173 | + | ||
174 | + # FIXME - if in error log apears has_permission?, try to use this method | ||
175 | + def has_permission?(person, permission, target) | ||
176 | + person.has_permission_without_plugins?(permission, target) | ||
177 | + end | ||
178 | + | ||
179 | + def incomplete_registration params | ||
180 | + person = User.find(params[:user]).person | ||
181 | + percentege = calc_percentage_registration(person) | ||
182 | + if percentege >= 0 and percentege <= 100 | ||
183 | + return _("Registration "+percentege.to_s+"% incomplete ") | ||
184 | + end | ||
185 | + end | ||
186 | + | ||
187 | + def calc_percentage_registration person | ||
188 | + empty_fields = 0 | ||
189 | + required_list = ["cell_phone","contact_phone","institution","comercial_phone","country","city","state","organization_website","role","area_interest","image"] | ||
190 | + required_list.each do |field| | ||
191 | + if person.send(field).blank? | ||
192 | + empty_fields = empty_fields + 1 | ||
193 | + end | ||
194 | + end | ||
195 | + percentege = (empty_fields*100)/required_list.count | ||
196 | + person.percentage_incomplete = percentege | ||
197 | + person.save(validate: false) | ||
198 | + percentege | ||
199 | + end | ||
200 | + | ||
201 | + def add_link_to_complete_registration person | ||
202 | + #find a better way to do it | ||
203 | + if context.session[:hide_incomplete_percentage] != true | ||
204 | + new_url = person.public_profile_url | ||
205 | + new_url[:controller] = 'profile_editor' | ||
206 | + new_url[:action] = 'edit' | ||
207 | + | ||
208 | + Proc::new do | ||
209 | + content_tag(:div, | ||
210 | + link_to( _("Percentage incomplete: #{person.percentage_incomplete.to_s} %" ), new_url) + | ||
211 | + link_to(image_tag("/images/icon_filter_exclude.png"), "#", :class => "hide-incomplete-percentage", :alt => "Hide Incomplete Percentage"), :class=>"mpog-incomplete-percentage" | ||
212 | + ) | ||
213 | + end | ||
214 | + end | ||
215 | + end | ||
216 | + | ||
217 | + def manage_software | ||
218 | + [{:title => _('Manage Software'), :url => {:controller => 'mpog_software_plugin', :action => 'archive_software'}}] | ||
219 | + end | ||
220 | + | ||
221 | + protected | ||
222 | + | ||
223 | + def operating_system_transaction | ||
224 | + OperatingSystem.transaction do | ||
225 | + list_operating = OperatingSystemHelper.list_operating_system(context.params[:operating_system]) | ||
226 | + | ||
227 | + if OperatingSystemHelper.valid_list_operating_system?(list_operating) | ||
228 | + OperatingSystem.where(:software_info_id => context.profile.software_info.id).destroy_all | ||
229 | + list_operating.each do |operating_system| | ||
230 | + operating_system.software_info = context.profile.software_info | ||
231 | + operating_system.save! | ||
232 | + end | ||
233 | + else | ||
234 | + raise 'Invalid Operating System fields' | ||
235 | + end | ||
236 | + end | ||
237 | + end | ||
238 | + | ||
239 | + def user_transaction | ||
240 | + User.transaction do | ||
241 | + context.profile.user.update_attributes!(context.params[:user]) | ||
242 | + end | ||
243 | + end | ||
244 | + | ||
245 | + def institution_transaction | ||
246 | + if context.params.has_key?(:governmental_power) | ||
247 | + context.profile.institution.governmental_power_id = context.params[:governmental_power] | ||
248 | + context.profile.institution.save! | ||
249 | + end | ||
250 | + | ||
251 | + if context.params.has_key?(:governmental_sphere) | ||
252 | + context.profile.institution.governmental_sphere_id = context.params[:governmental_sphere] | ||
253 | + context.profile.institution.save! | ||
254 | + end | ||
255 | + | ||
256 | + if context.params.has_key?(:institution) | ||
257 | + Institution.transaction do | ||
258 | + context.profile.institution.update_attributes!(context.params[:institution]) | ||
259 | + end | ||
260 | + end | ||
261 | + end | ||
262 | + | ||
263 | + def software_info_transaction | ||
264 | + SoftwareInfo.transaction do | ||
265 | + context.profile.software_info.update_attributes!(context.params[:software_info]) | ||
266 | + end | ||
267 | + end | ||
268 | + | ||
269 | + def libraries_transaction | ||
270 | + Library.transaction do | ||
271 | + list_libraries = LibraryHelper.list_libraries(context.params[:library]) | ||
272 | + | ||
273 | + if LibraryHelper.valid_list_libraries?(list_libraries) | ||
274 | + Library.where(:software_info_id=> context.profile.software_info.id).destroy_all | ||
275 | + | ||
276 | + list_libraries.each do |library| | ||
277 | + library.software_info_id = context.profile.software_info.id | ||
278 | + library.save! | ||
279 | + end | ||
280 | + else | ||
281 | + raise 'Invalid Library fields' | ||
282 | + end | ||
283 | + end | ||
284 | + end | ||
285 | + | ||
286 | + def databases_transaction | ||
287 | + SoftwareDatabase.transaction do | ||
288 | + list_databases = DatabaseHelper.list_database(context.params[:database]) | ||
289 | + | ||
290 | + if DatabaseHelper.valid_list_database?(list_databases) | ||
291 | + SoftwareDatabase.where(:software_info_id => context.profile.software_info.id).destroy_all | ||
292 | + list_databases.each do |database| | ||
293 | + database.software_info = context.profile.software_info | ||
294 | + database.save! | ||
295 | + end | ||
296 | + else | ||
297 | + raise 'Invalid Database fields' | ||
298 | + end | ||
299 | + end | ||
300 | + end | ||
301 | + | ||
302 | + def license_transaction | ||
303 | + license = LicenseInfo.find(context.params[:version]) | ||
304 | + context.profile.software_info.license_info = license | ||
305 | + context.profile.software_info.save! | ||
306 | + end | ||
307 | + | ||
308 | + def manage_software | ||
309 | + [{:title => _('Manage Software'), :url => {:controller => 'mpog_software_plugin_myprofile', :action => 'new_software'}}] | ||
310 | + end | ||
311 | + | ||
312 | + def language_transaction | ||
313 | + SoftwareLanguage.transaction do | ||
314 | + list_language = SoftwareLanguageHelper.list_language(context.params[:language]) | ||
315 | + | ||
316 | + if SoftwareLanguageHelper.valid_list_language?(list_language) | ||
317 | + SoftwareLanguage.where(:software_info_id => context.profile.software_info.id).destroy_all | ||
318 | + | ||
319 | + list_language.each do |language| | ||
320 | + language.software_info = context.profile.software_info | ||
321 | + language.save! | ||
322 | + end | ||
323 | + else | ||
324 | + raise 'Invalid Software Language fields' | ||
325 | + end | ||
326 | + end | ||
327 | + end | ||
328 | + | ||
329 | + def add_new_user_search_filter | ||
330 | + expanded_template('user_search/search_filter.html.erb') | ||
331 | + end | ||
332 | + | ||
333 | + def custom_people_search params | ||
334 | + Person.search(params[:name], | ||
335 | + params[:state], | ||
336 | + params[:city], | ||
337 | + params[:email] | ||
338 | + ) | ||
339 | + end | ||
340 | + | ||
341 | + def controlled_vocabulary_transaction | ||
342 | + ControlledVocabulary.transaction do | ||
343 | + context.profile.software_info.controlled_vocabulary.update_attributes!(context.params[:controlled_vocabulary]) | ||
344 | + end | ||
345 | + end | ||
346 | +end |
@@ -0,0 +1,8 @@ | @@ -0,0 +1,8 @@ | ||
1 | +class OperatingSystem < ActiveRecord::Base | ||
2 | + attr_accessible :version | ||
3 | + | ||
4 | + belongs_to :software_info | ||
5 | + belongs_to :operating_system_name | ||
6 | + | ||
7 | + validates :version, :operating_system_name, :presence=>true | ||
8 | +end | ||
0 | \ No newline at end of file | 9 | \ No newline at end of file |
@@ -0,0 +1,80 @@ | @@ -0,0 +1,80 @@ | ||
1 | +module OperatingSystemHelper | ||
2 | + def self.list_operating_system new_operating_systems | ||
3 | + return [] if new_operating_systems.nil? or new_operating_systems.length == 0 | ||
4 | + list_operating_system = [] | ||
5 | + | ||
6 | + new_operating_systems.each do |new_operating_system| | ||
7 | + unless SoftwareHelper.all_table_is_empty? new_operating_system, ["operating_system_name_id"] | ||
8 | + operating_system = OperatingSystem.new | ||
9 | + operating_system.operating_system_name = OperatingSystemName.find(new_operating_system[:operating_system_name_id]) | ||
10 | + operating_system.version = new_operating_system[:version] | ||
11 | + list_operating_system << operating_system | ||
12 | + end | ||
13 | + end | ||
14 | + list_operating_system | ||
15 | + end | ||
16 | + | ||
17 | + def self.valid_list_operating_system? list_operating_system | ||
18 | + return false if list_operating_system.nil? or list_operating_system.length == 0 | ||
19 | + | ||
20 | + list_operating_system.each do |operating_system| | ||
21 | + return false unless operating_system.valid? | ||
22 | + end | ||
23 | + true | ||
24 | + end | ||
25 | + | ||
26 | + def self.operating_system_as_tables (list_operating_system, have_delete_button = true, show_information = false) | ||
27 | + extend( | ||
28 | + ActionView::Helpers::TagHelper, | ||
29 | + ActionView::Helpers::FormTagHelper, | ||
30 | + ActionView::Helpers::UrlHelper, | ||
31 | + ActionView::Helpers::FormOptionsHelper, | ||
32 | + ApplicationHelper | ||
33 | + ) | ||
34 | + | ||
35 | + lambdas_list = [] | ||
36 | + | ||
37 | + if not show_information | ||
38 | + return operating_system_html_structure({:operating_system_name_id => "", :version => ""}, have_delete_button) if list_operating_system.nil? | ||
39 | + | ||
40 | + list_operating_system.each do |operating_system| | ||
41 | + lambdas_list << operating_system_html_structure(operating_system,have_delete_button) | ||
42 | + end | ||
43 | + else | ||
44 | + list_operating_system.each do |operating_system| | ||
45 | + lambdas_list << operating_system_html_structure(operating_system) | ||
46 | + end | ||
47 | + end | ||
48 | + | ||
49 | + lambdas_list | ||
50 | + end | ||
51 | + | ||
52 | + def self.operating_system_html_structure (operating_system_data,have_delete_button = true) | ||
53 | + Proc::new do | ||
54 | + content_tag('table', | ||
55 | + content_tag('tr', | ||
56 | + content_tag('td', label_tag(_("Name")))+ | ||
57 | + content_tag('td', select_tag("operating_system[][operating_system_name_id]", SoftwareHelper.select_options(OperatingSystemName.all, operating_system_data[:operating_system_name_id]) ))+ | ||
58 | + content_tag('td') | ||
59 | + )+ | ||
60 | + | ||
61 | + content_tag('tr', | ||
62 | + content_tag('td', label_tag(_("Version")))+ | ||
63 | + content_tag('td', text_field_tag("operating_system[][version]", operating_system_data[:version]))+ | ||
64 | + if have_delete_button | ||
65 | + content_tag('td', | ||
66 | + button_without_text(:delete, _('Delete'), "#" , :class=>"delete-dynamic-table"), | ||
67 | + :align => 'right' | ||
68 | + ) | ||
69 | + else | ||
70 | + content_tag('td', "") | ||
71 | + end | ||
72 | + ),:class => 'dynamic-table library-table' | ||
73 | + ) | ||
74 | + end | ||
75 | + end | ||
76 | + | ||
77 | + def self.add_dynamic_table | ||
78 | + operating_system_as_tables(nil).call | ||
79 | + end | ||
80 | +end |
@@ -0,0 +1,5 @@ | @@ -0,0 +1,5 @@ | ||
1 | +class PublicInstitution < Institution | ||
2 | + validates :acronym, :governmental_power, :governmental_sphere, :presence=>true | ||
3 | + validates_uniqueness_of :cnpj, :unit_code, :allow_nil => true, :allow_blank => true | ||
4 | + validates_format_of :cnpj, :with => /^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$/, :allow_nil => true, :allow_blank => true | ||
5 | +end | ||
0 | \ No newline at end of file | 6 | \ No newline at end of file |
@@ -0,0 +1,41 @@ | @@ -0,0 +1,41 @@ | ||
1 | +module SoftwareHelper | ||
2 | + def self.select_options programming_languages, selected=0 | ||
3 | + value = "" | ||
4 | + | ||
5 | + programming_languages.each do |language| | ||
6 | + value += "<option value=#{language.id} #{'selected' if selected == language.id}>#{language.name}</option>" | ||
7 | + end | ||
8 | + | ||
9 | + value | ||
10 | + end | ||
11 | + | ||
12 | + def self.create_list_with_file file_name, model | ||
13 | + list_file = File.open file_name, "r" | ||
14 | + | ||
15 | + list_file.each_line do |line| | ||
16 | + model.create(:name=>line.strip) | ||
17 | + end | ||
18 | + | ||
19 | + list_file.close | ||
20 | + end | ||
21 | + | ||
22 | + def self.all_table_is_empty? table, ignored_fields=[] | ||
23 | + filled_fields = [] | ||
24 | + | ||
25 | + table.each do |key, value| | ||
26 | + unless ignored_fields.include? key | ||
27 | + filled_fields << if value.empty? | ||
28 | + false | ||
29 | + else | ||
30 | + true | ||
31 | + end | ||
32 | + end | ||
33 | + end | ||
34 | + | ||
35 | + if filled_fields.include? true | ||
36 | + false | ||
37 | + else | ||
38 | + true | ||
39 | + end | ||
40 | + end | ||
41 | +end |
@@ -0,0 +1,63 @@ | @@ -0,0 +1,63 @@ | ||
1 | +class SoftwareInfo < ActiveRecord::Base | ||
2 | + attr_accessible :e_mag, :icp_brasil, :intern, :e_ping, :e_arq, :operating_platform, :demonstration_url, :acronym, :objectives, :features, :license_infos_id, :community_id | ||
3 | + | ||
4 | + has_many :libraries, :dependent => :destroy | ||
5 | + has_many :software_databases | ||
6 | + has_many :database_descriptions, :through => :software_databases | ||
7 | + has_many :software_languages | ||
8 | + has_many :operating_systems | ||
9 | + has_many :programming_languages, :through => :software_languages | ||
10 | + has_many :operating_system_names, :through => :operating_systems | ||
11 | + | ||
12 | + belongs_to :community | ||
13 | + belongs_to :license_info | ||
14 | + | ||
15 | + has_one :controlled_vocabulary | ||
16 | + | ||
17 | + validate :validate_operating_platform, :validate_acronym, :valid_software_info, :valid_databases, :valid_operating_systems | ||
18 | + | ||
19 | + # used on find_by_contents | ||
20 | + scope :like_search, lambda{ |name| | ||
21 | + joins(:community).where("name ilike ?", "%#{name}%") | ||
22 | + } | ||
23 | + | ||
24 | + 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? | ||
26 | + end | ||
27 | + | ||
28 | + def validate_acronym | ||
29 | + if self.acronym.blank? && self.errors.messages[:acronym].nil? | ||
30 | + self.errors.add(:acronym, _("can't be blank")) | ||
31 | + elsif self.acronym.length > 8 && self.errors.messages[:acronym].nil? | ||
32 | + self.errors.add(:acronym, _("can't have more than 8 characteres")) | ||
33 | + end | ||
34 | + end | ||
35 | + | ||
36 | + def valid_operating_systems | ||
37 | + self.errors.add(:operating_system, _(": at least one must be filled")) if self.operating_systems.empty? | ||
38 | + end | ||
39 | + | ||
40 | + def valid_software_info | ||
41 | + self.errors.add(:software_languages, _(": at least one must be filled")) if self.software_languages.empty? | ||
42 | + end | ||
43 | + | ||
44 | + def valid_databases | ||
45 | + self.errors.add(:software_databases, _(": at least one must be filled")) if self.software_databases.empty? | ||
46 | + end | ||
47 | + | ||
48 | + def visible? | ||
49 | + self.community.visible? | ||
50 | + end | ||
51 | + | ||
52 | + def name | ||
53 | + self.community.name | ||
54 | + end | ||
55 | + | ||
56 | + def short_name | ||
57 | + self.community.short_name | ||
58 | + end | ||
59 | + | ||
60 | + def identifier | ||
61 | + self.community.identifier | ||
62 | + end | ||
63 | +end |
@@ -0,0 +1,118 @@ | @@ -0,0 +1,118 @@ | ||
1 | +module SoftwareLanguageHelper | ||
2 | + | ||
3 | + def self.list_language new_languages | ||
4 | + return [] if new_languages.nil? or new_languages.length == 0 | ||
5 | + list_languages = [] | ||
6 | + | ||
7 | + new_languages.each do |new_language| | ||
8 | + unless SoftwareHelper.all_table_is_empty? new_language, ["programming_language_id"] | ||
9 | + language = SoftwareLanguage.new | ||
10 | + language.programming_language = ProgrammingLanguage.find(new_language[:programming_language_id]) | ||
11 | + language.version = new_language[:version] | ||
12 | + language.operating_system = new_language[:operating_system] | ||
13 | + list_languages << language | ||
14 | + end | ||
15 | + end | ||
16 | + | ||
17 | + list_languages | ||
18 | + end | ||
19 | + | ||
20 | + def self.valid_list_language? list_languages | ||
21 | + return false if list_languages.nil? or list_languages.length == 0 | ||
22 | + | ||
23 | + list_languages.each do |language| | ||
24 | + return false unless language.valid? | ||
25 | + end | ||
26 | + | ||
27 | + true | ||
28 | + end | ||
29 | + | ||
30 | + def self.language_as_tables(list_languages, have_delete_button = true, show_information = false) | ||
31 | + extend( | ||
32 | + ActionView::Helpers::TagHelper, | ||
33 | + ActionView::Helpers::FormTagHelper, | ||
34 | + ActionView::Helpers::UrlHelper, | ||
35 | + ActionView::Helpers::FormOptionsHelper, | ||
36 | + ApplicationHelper | ||
37 | + ) | ||
38 | + | ||
39 | + lambdas_list = [] | ||
40 | + | ||
41 | + if not show_information | ||
42 | + return language_html_structure({:programming_language_id => 1, :version => "", :operating_system => ""}, have_delete_button) if list_languages.nil? | ||
43 | + | ||
44 | + list_languages.each do |language| | ||
45 | + lambdas_list << language_html_structure(language, have_delete_button) | ||
46 | + end | ||
47 | + | ||
48 | + else | ||
49 | + list_languages.each do |language| | ||
50 | + lambdas_list << language_html_show_structure(language) | ||
51 | + end | ||
52 | + | ||
53 | + end | ||
54 | + | ||
55 | + | ||
56 | + lambdas_list | ||
57 | + end | ||
58 | + | ||
59 | + def self.language_html_structure(language_data, have_delete_button = true) | ||
60 | + Proc::new do | ||
61 | + content_tag('table', | ||
62 | + content_tag('tr', | ||
63 | + content_tag('td', label_tag(_("Language Name: ")))+ | ||
64 | + content_tag('td', select_tag("language[][programming_language_id]", SoftwareHelper.select_options(ProgrammingLanguage.all, language_data[:programming_language_id]) ))+ | ||
65 | + content_tag('td') | ||
66 | + )+ | ||
67 | + | ||
68 | + content_tag('tr', | ||
69 | + content_tag('td', label_tag(_("Version")))+ | ||
70 | + content_tag('td', text_field_tag("language[][version]", language_data[:version]))+ | ||
71 | + content_tag('td') | ||
72 | + )+ | ||
73 | + | ||
74 | + content_tag('tr', | ||
75 | + content_tag('td', label_tag(_("Operating System")))+ | ||
76 | + content_tag('td', text_field_tag("language[][operating_system]", language_data[:operating_system]))+ | ||
77 | + | ||
78 | + if have_delete_button | ||
79 | + content_tag('td', | ||
80 | + button_without_text(:delete, _('Delete'), "#" , :class=>"delete-dynamic-table"), | ||
81 | + :align => 'right' | ||
82 | + ) | ||
83 | + else | ||
84 | + content_tag('td', "") | ||
85 | + end | ||
86 | + ), :class => 'dynamic-table software-language-table' | ||
87 | + ) | ||
88 | + end | ||
89 | + end | ||
90 | + | ||
91 | + def self.language_html_show_structure(language) | ||
92 | + Proc::new do | ||
93 | + content_tag('table', | ||
94 | + content_tag('tr', | ||
95 | + content_tag('td', label_tag(_("Language Name: ")))+ | ||
96 | + content_tag('td', ProgrammingLanguage.where(:id => language[:programming_language_id])[0].name)+ | ||
97 | + content_tag('td') | ||
98 | + )+ | ||
99 | + | ||
100 | + content_tag('tr', | ||
101 | + content_tag('td', label_tag(_("Version")))+ | ||
102 | + content_tag('td', language[:version])+ | ||
103 | + content_tag('td') | ||
104 | + )+ | ||
105 | + | ||
106 | + content_tag('tr', | ||
107 | + content_tag('td', label_tag(_("Operating System")))+ | ||
108 | + content_tag('td', language[:operating_system])+ | ||
109 | + content_tag('td', "") | ||
110 | + ), :class => 'dynamic-table software-language-table' | ||
111 | + ) | ||
112 | + end | ||
113 | + end | ||
114 | + | ||
115 | + def self.add_dynamic_table | ||
116 | + language_as_tables(nil).call | ||
117 | + end | ||
118 | +end |
@@ -0,0 +1,129 @@ | @@ -0,0 +1,129 @@ | ||
1 | +(function(){ | ||
2 | + function open_create_institution_modal(evt) { | ||
3 | + evt.preventDefault(); | ||
4 | + | ||
5 | + jQuery.get("/plugin/mpog_software/create_institution", function(response){ | ||
6 | + jQuery("#institution_dialog").html(response); | ||
7 | + set_events(); | ||
8 | + | ||
9 | + jQuery("#institution_dialog").dialog({ | ||
10 | + modal: true, | ||
11 | + width: 500, | ||
12 | + height: 530, | ||
13 | + position: 'center', | ||
14 | + close: function() { | ||
15 | + jQuery("#institution_dialog").html(""); | ||
16 | + jQuery('#institution_empty_ajax_message').switchClass("show-field", "hide-field"); | ||
17 | + } | ||
18 | + }); | ||
19 | + }); | ||
20 | + } | ||
21 | + | ||
22 | + function show_public_institutions_fields() { | ||
23 | + jQuery(".public-institutions-fields").show(); | ||
24 | + jQuery("label[for='institutions_acronym']").html(jQuery("#acronym_translate").val()); | ||
25 | + } | ||
26 | + | ||
27 | + function show_private_institutions_fields() { | ||
28 | + jQuery(".public-institutions-fields").hide(); | ||
29 | + jQuery("label[for='institutions_acronym']").html(jQuery("#fantasy_name_translate").val()); | ||
30 | + | ||
31 | + jQuery("#institutions_governmental_power option").selected(0); | ||
32 | + jQuery("#institutions_governmental_sphere option").selected(0); | ||
33 | + } | ||
34 | + | ||
35 | + function get_selected_institution_type() { | ||
36 | + var radio_buttons = jQuery("input[type='radio'][name='type']"); | ||
37 | + var type = ""; | ||
38 | + | ||
39 | + for( var i = 0; i < radio_buttons.length; i++ ) { | ||
40 | + if( radio_buttons[i].checked ) { | ||
41 | + type = radio_buttons[i].value; | ||
42 | + break; | ||
43 | + } | ||
44 | + } | ||
45 | + | ||
46 | + return type; | ||
47 | + } | ||
48 | + | ||
49 | + function get_post_data() { | ||
50 | + return { | ||
51 | + community : { name : jQuery("#community_name").val()}, | ||
52 | + governmental : { | ||
53 | + power : jQuery("#institutions_governmental_power").selected().val(), | ||
54 | + sphere : jQuery("#institutions_governmental_sphere").selected().val() | ||
55 | + } , | ||
56 | + institution : { | ||
57 | + cnpj: jQuery("#institutions_cnpj").val(), | ||
58 | + type: get_selected_institution_type(), | ||
59 | + acronym : jQuery("#institutions_acronym").val() | ||
60 | + }, | ||
61 | + authenticity_token : jQuery("input[name='authenticity_token']").val(), | ||
62 | + recaptcha_response_field : jQuery('#recaptcha_response_field').val(), | ||
63 | + recaptcha_challenge_field : jQuery('#recaptcha_challenge_field').val() | ||
64 | + } | ||
65 | + } | ||
66 | + | ||
67 | + function success_ajax_response(response) { | ||
68 | + close_loading(); | ||
69 | + if(response.success){ | ||
70 | + jQuery("#institution_dialog").html("<div class='errorExplanation'><h2>"+response.message+"</h2></div>"); | ||
71 | + jQuery("#input_institution").val(response.institution_data.name); | ||
72 | + jQuery("#user_institution_id").val(response.institution_data.id); | ||
73 | + jQuery("#create_institution_errors").switchClass("show-field", "hide-field"); | ||
74 | + } else { | ||
75 | + var errors = "<ul>"; | ||
76 | + | ||
77 | + for(var i = 0; i < response.errors.length; i++) { | ||
78 | + errors += "<li>"+response.errors[i]+"</li>"; | ||
79 | + } | ||
80 | + errors += "</ul>"; | ||
81 | + | ||
82 | + jQuery("#create_institution_errors").switchClass("hide-field", "show-field").html("<h2>"+response.message+"</h2>"+errors); | ||
83 | + } | ||
84 | + } | ||
85 | + | ||
86 | + function save_institution(evt) { | ||
87 | + evt.preventDefault(); | ||
88 | + var form_data = jQuery("#institution_form").serialize(); | ||
89 | + | ||
90 | + open_loading(jQuery("#loading_message").val()); | ||
91 | + jQuery.ajax({ | ||
92 | + url: "/plugin/mpog_software/new_institution", | ||
93 | + data : get_post_data(), | ||
94 | + type: "POST", | ||
95 | + success: success_ajax_response, | ||
96 | + error: function() { | ||
97 | + close_loading(); | ||
98 | + var error_message = jQuery("#institution_error_message").val(); | ||
99 | + jQuery("#create_institution_errors").switchClass("hide-field", "show-field").html("<h2>"+error_message+"</h2>"); | ||
100 | + } | ||
101 | + }); | ||
102 | + } | ||
103 | + | ||
104 | + function institution_already_exists(){ | ||
105 | + if( this.value.length >= 3 ) { | ||
106 | + jQuery.get("/plugin/mpog_software/institution_already_exists", {name:this.value}, function(response){ | ||
107 | + if( response == true ) { | ||
108 | + jQuery("#already_exists_text").switchClass("hide-field", "show-field"); | ||
109 | + } else { | ||
110 | + jQuery("#already_exists_text").switchClass("show-field", "hide-field"); | ||
111 | + } | ||
112 | + }); | ||
113 | + } | ||
114 | + } | ||
115 | + | ||
116 | + function set_events() { | ||
117 | + jQuery("#create_institution_link").click(open_create_institution_modal); | ||
118 | + | ||
119 | + jQuery("#type_PrivateInstitution").click(show_private_institutions_fields); | ||
120 | + | ||
121 | + jQuery("#type_PublicInstitution").click(show_public_institutions_fields); | ||
122 | + | ||
123 | + jQuery('#save_institution_button').click(save_institution); | ||
124 | + | ||
125 | + jQuery("#community_name").keyup(institution_already_exists); | ||
126 | + } | ||
127 | + | ||
128 | + jQuery(document).ready(set_events); | ||
129 | +})(); | ||
0 | \ No newline at end of file | 130 | \ No newline at end of file |
@@ -0,0 +1,159 @@ | @@ -0,0 +1,159 @@ | ||
1 | +function delete_dynamic_table() { | ||
2 | + var button = jQuery(".delete-dynamic-table"); | ||
3 | + | ||
4 | + button.each(function(){ | ||
5 | + var table = jQuery(this).parent().parent().parent().parent(); | ||
6 | + var color = table.css("background-color"); | ||
7 | + | ||
8 | + jQuery(this).click(function(){ | ||
9 | + if( table.hasClass("software-language-table") && has_more_than_one("software-language-table")) | ||
10 | + table.remove(); | ||
11 | + | ||
12 | + if( table.hasClass("database-table") && has_more_than_one("database-table")) | ||
13 | + table.remove(); | ||
14 | + | ||
15 | + if( !table.hasClass("software-language-table") && !table.hasClass("database-table") ) | ||
16 | + table.remove(); | ||
17 | + | ||
18 | + return false; | ||
19 | + }).mouseover(function(){ | ||
20 | + table.css("background-color", "#eee"); | ||
21 | + }).mouseout(function(){ | ||
22 | + table.css("background-color", color); | ||
23 | + }); | ||
24 | + }); | ||
25 | +} | ||
26 | + | ||
27 | +function has_more_than_one(table_class) { | ||
28 | + return (jQuery("."+table_class).length > 2); // One is always added by defaul and its hidden | ||
29 | +} | ||
30 | + | ||
31 | +function add_dynamic_table(element_id, content) { | ||
32 | + Element.insert(element_id, {bottom: content}); | ||
33 | +} | ||
34 | + | ||
35 | +function get_license_link(select_id){ | ||
36 | + var selected = jQuery('#'+select_id).selected().val(); | ||
37 | + var link = jQuery("#version_" + selected).val(); | ||
38 | + | ||
39 | + jQuery("#version_link") | ||
40 | + .attr("href", link) | ||
41 | + .text(link); | ||
42 | +} | ||
43 | + | ||
44 | +function hide_infos(){ | ||
45 | + jQuery(".language-info").hide(); | ||
46 | + jQuery(".database-info").hide(); | ||
47 | + jQuery(".libraries-info").hide(); | ||
48 | + jQuery(".operating-system-info").hide(); | ||
49 | + jQuery(".language-button-hide").hide(); | ||
50 | + jQuery(".database-button-hide").hide(); | ||
51 | + jQuery(".libraries-button-hide").hide(); | ||
52 | + jQuery(".operating-system-button-hide").hide(); | ||
53 | + | ||
54 | + | ||
55 | +} | ||
56 | + | ||
57 | +function animate_fields() { | ||
58 | + jQuery(".expand-field").focus(function(){ | ||
59 | + jQuery(this).switchClass("expand-field", "expand-field-focus", 700, "easeInOutQuad"); | ||
60 | + }).blur(function(){ | ||
61 | + jQuery(this).switchClass("expand-field-focus", "expand-field", 700, "easeInOutQuad"); | ||
62 | + }); | ||
63 | +} | ||
64 | + | ||
65 | + | ||
66 | +jQuery(document).ready(function(){ | ||
67 | + var dynamic_tables = ["dynamic-databases", "dynamic-languages", "dynamic-libraries","dynamic-operating_systems"]; | ||
68 | + | ||
69 | + delete_dynamic_table(); | ||
70 | + | ||
71 | + jQuery(".new-dynamic-table").click(function(){ | ||
72 | + var link = jQuery(this); | ||
73 | + | ||
74 | + dynamic_tables.each(function(value){ | ||
75 | + if( link.hasClass(value) ) { | ||
76 | + var table_id = value.split("-")[1]; | ||
77 | + | ||
78 | + var table_html = jQuery("#table_structure_"+table_id).html(); | ||
79 | + add_dynamic_table(table_id, table_html); | ||
80 | + } | ||
81 | + }); | ||
82 | + | ||
83 | + delete_dynamic_table(); | ||
84 | + return false; | ||
85 | + }); | ||
86 | + | ||
87 | + hide_infos(); | ||
88 | + | ||
89 | + jQuery(".language-button-hide").click(function(event){ | ||
90 | + event.preventDefault(); | ||
91 | + jQuery(".language-info").hide(); | ||
92 | + jQuery(".language-button-show").show(); | ||
93 | + jQuery(".language-button-hide").hide(); | ||
94 | + }); | ||
95 | + | ||
96 | + jQuery(".language-button-show").click(function(event){ | ||
97 | + event.preventDefault(); | ||
98 | + jQuery(".language-info").show(); | ||
99 | + jQuery(".language-button-show").hide(); | ||
100 | + jQuery(".language-button-hide").show(); | ||
101 | + }); | ||
102 | + | ||
103 | + jQuery(".operating-system-button-hide").click(function(event){ | ||
104 | + event.preventDefault(); | ||
105 | + jQuery(".operating-system-info").hide(); | ||
106 | + jQuery(".operating-system-button-show").show(); | ||
107 | + jQuery(".operating-system-button-hide").hide(); | ||
108 | + }); | ||
109 | + | ||
110 | + jQuery(".operating-system-button-show").click(function(event){ | ||
111 | + event.preventDefault(); | ||
112 | + jQuery(".operating-system-info").show(); | ||
113 | + jQuery(".operating-system-button-show").hide(); | ||
114 | + jQuery(".operating-system-button-hide").show(); | ||
115 | + }); | ||
116 | + | ||
117 | + jQuery(".database-button-hide").click(function(event){ | ||
118 | + event.preventDefault(); | ||
119 | + jQuery(".database-info").hide(); | ||
120 | + jQuery(".database-button-show").show(); | ||
121 | + jQuery(".database-button-hide").hide(); | ||
122 | + }); | ||
123 | + | ||
124 | + jQuery(".database-button-show").click(function(event){ | ||
125 | + event.preventDefault(); | ||
126 | + jQuery(".database-info").show(); | ||
127 | + jQuery(".database-button-show").hide(); | ||
128 | + jQuery(".database-button-hide").show(); | ||
129 | + }); | ||
130 | + | ||
131 | + jQuery(".libraries-button-hide").click(function(event){ | ||
132 | + event.preventDefault(); | ||
133 | + jQuery(".libraries-info").hide(); | ||
134 | + jQuery(".libraries-button-show").show(); | ||
135 | + jQuery(".libraries-button-hide").hide(); | ||
136 | + }); | ||
137 | + | ||
138 | + jQuery(".libraries-button-show").click(function(event){ | ||
139 | + event.preventDefault(); | ||
140 | + jQuery(".libraries-info").show(); | ||
141 | + jQuery(".libraries-button-show").hide(); | ||
142 | + jQuery(".libraries-button-hide").show(); | ||
143 | + }); | ||
144 | + | ||
145 | + jQuery(".operating_systems-button-hide").click(function(event){ | ||
146 | + event.preventDefault(); | ||
147 | + jQuery(".operating_systems-info").hide(); | ||
148 | + jQuery(".operating_systems-button-show").show(); | ||
149 | + jQuery(".operating_systems-button-hide").hide(); | ||
150 | + }); | ||
151 | + | ||
152 | + jQuery(".operating_systems-button-show").click(function(event){ | ||
153 | + event.preventDefault(); | ||
154 | + jQuery(".operating_systems-info").show(); | ||
155 | + jQuery(".operating_systems-button-show").hide(); | ||
156 | + jQuery(".operating_systems-button-hide").show(); | ||
157 | + }); | ||
158 | + animate_fields(); | ||
159 | +}); |
@@ -0,0 +1,112 @@ | @@ -0,0 +1,112 @@ | ||
1 | +function check_reactivate_account(value, input_object){ | ||
2 | + jQuery.ajax({ | ||
3 | + url : "/plugin/mpog_software/check_reactivate_account", | ||
4 | + type: "GET", | ||
5 | + data: { "email": value }, | ||
6 | + success: function(response) { | ||
7 | + if( jQuery("#forgot_link").length == 0 ) | ||
8 | + jQuery(input_object).parent().append(response); | ||
9 | + else | ||
10 | + jQuery("#forgot_link").html(response); | ||
11 | + }, | ||
12 | + error: function(type, err, message) { | ||
13 | + console.log(type+" -- "+err+" -- "+message); | ||
14 | + } | ||
15 | + }); | ||
16 | +} | ||
17 | + | ||
18 | +function put_brazil_based_on_email(){ | ||
19 | + var suffixes = ['gov.br', 'jus.br', 'leg.br', 'mp.br']; | ||
20 | + var value = this.value; | ||
21 | + var input_object = this; | ||
22 | + | ||
23 | + suffixes.each(function(suffix){ | ||
24 | + var has_suffix = new RegExp("(.*)"+suffix+"$", "i"); | ||
25 | + | ||
26 | + if( has_suffix.test(value) ) | ||
27 | + jQuery("#profile_data_country").val("BR"); | ||
28 | + }); | ||
29 | + | ||
30 | + check_reactivate_account(value, input_object) | ||
31 | +} | ||
32 | + | ||
33 | +function validate_email_format(){ | ||
34 | + var correct_format_regex = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/; | ||
35 | + | ||
36 | + if( this.value.length > 0 ) { | ||
37 | + if(correct_format_regex.test(this.value)) | ||
38 | + this.className = "validated"; | ||
39 | + else | ||
40 | + this.className = "invalid"; | ||
41 | + } else | ||
42 | + this.className = ""; | ||
43 | +} | ||
44 | + | ||
45 | +function institution_autocomplete() { | ||
46 | + jQuery("#input_institution").autocomplete({ | ||
47 | + source : function(request, response){ | ||
48 | + jQuery.ajax({ | ||
49 | + type: "GET", | ||
50 | + url: "/plugin/mpog_software/get_institutions", | ||
51 | + data: {query: request.term}, | ||
52 | + success: function(result){ | ||
53 | + response(result); | ||
54 | + | ||
55 | + if( result.length == 0 ) { | ||
56 | + jQuery('#institution_empty_ajax_message').switchClass("hide-field", "show-field"); | ||
57 | + } else { | ||
58 | + jQuery('#institution_empty_ajax_message').switchClass("show-field", "hide-field"); | ||
59 | + } | ||
60 | + }, | ||
61 | + error: function(ajax, stat, errorThrown) { | ||
62 | + console.log('Link not found : ' + errorThrown); | ||
63 | + } | ||
64 | + }); | ||
65 | + }, | ||
66 | + | ||
67 | + minLength: 2, | ||
68 | + | ||
69 | + select : function (event, selected) { | ||
70 | + jQuery("#user_institution_id").val(selected.item.id); | ||
71 | + } | ||
72 | + }); | ||
73 | +} | ||
74 | + | ||
75 | + | ||
76 | +function hide_incomplete_percentage(evt) { | ||
77 | + evt.preventDefault(); | ||
78 | + var link_div = jQuery(this).parent(); | ||
79 | + | ||
80 | + jQuery.get("/plugin/mpog_software/hide_registration_incomplete_percentage", {hide:true}, function(response){ | ||
81 | + if( response == true ) | ||
82 | + link_div.hide(); | ||
83 | + }); | ||
84 | +} | ||
85 | + | ||
86 | +jQuery(document).ready(function(){ | ||
87 | + jQuery('#secondary_email_field').blur( | ||
88 | + validate_email_format | ||
89 | + ); | ||
90 | + | ||
91 | + jQuery("#user_email").blur( | ||
92 | + put_brazil_based_on_email | ||
93 | + ); | ||
94 | + | ||
95 | + jQuery(".hide-incomplete-percentage").click(hide_incomplete_percentage); | ||
96 | + | ||
97 | + jQuery('#secondary_email_field').focus(function() { jQuery('#secondary-email-balloon').fadeIn('slow'); }); | ||
98 | + jQuery('#secondary_email_field').blur(function() { jQuery('#secondary-email-balloon').fadeOut('slow'); }); | ||
99 | + | ||
100 | + jQuery('#role_field').focus(function() { jQuery('#role-balloon').fadeIn('slow'); }); | ||
101 | + jQuery('#role_field').blur(function() { jQuery('#role-balloon').fadeOut('slow'); }); | ||
102 | + | ||
103 | + jQuery('#area_interest_field').focus(function() { jQuery('#area-interest-balloon').fadeIn('slow'); }); | ||
104 | + jQuery('#area_interest_field').blur(function() { jQuery('#area-interest-balloon').fadeOut('slow'); }); | ||
105 | + | ||
106 | + institution_autocomplete(); | ||
107 | + | ||
108 | + jQuery("#input_institution").blur(function(){ | ||
109 | + if( this.value == "" ) | ||
110 | + jQuery("#user_institution_id").val(""); | ||
111 | + }); | ||
112 | +}); |
@@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
1 | +Array.prototype.removeValue = function(value) { | ||
2 | + for (var i = 0; i < this.length; i++) { | ||
3 | + if (this[i] === value) { | ||
4 | + this.splice(i, 1); | ||
5 | + i--; | ||
6 | + } | ||
7 | + } | ||
8 | + | ||
9 | + return this; | ||
10 | +} | ||
11 | + | ||
12 | +Array.prototype.removeIndex = function(index) { | ||
13 | + this.splice(index, 1); | ||
14 | + | ||
15 | + return this; | ||
16 | +} |
@@ -0,0 +1,176 @@ | @@ -0,0 +1,176 @@ | ||
1 | +4th Dimension | ||
2 | +Adabas D | ||
3 | +Aerospike | ||
4 | +AllegroGraph | ||
5 | +Alpha Five | ||
6 | +Altibase | ||
7 | +Amazon DynamoDB | ||
8 | +Apache Accumulo | ||
9 | +Apache Cassandra | ||
10 | +Apache CouchDB | ||
11 | +Apache Derby | ||
12 | +Apache Hbase | ||
13 | +Apache JENA | ||
14 | +Apache River | ||
15 | +Aster Data | ||
16 | +BaseX | ||
17 | +Berkeley DB | ||
18 | +BigTable | ||
19 | +BlackRay | ||
20 | +CA-Datacom | ||
21 | +CDB | ||
22 | +CSQL | ||
23 | +CUBRID | ||
24 | +Clarion | ||
25 | +Cloudant | ||
26 | +Cloudant Data Layer (CouchDB) | ||
27 | +Clusterpoint | ||
28 | +Clusterpoint XML database | ||
29 | +Clustrix | ||
30 | +Coherence | ||
31 | +CoreFoundation Property list | ||
32 | +Couchbase Server | ||
33 | +D3 Pick database | ||
34 | +DEX/Sparksee | ||
35 | +Daffodil database | ||
36 | +DataEase | ||
37 | +Database Management Library | ||
38 | +Dataphor | ||
39 | +Datastore on Google Appengine | ||
40 | +Derby aka Java DB | ||
41 | +Dynamo | ||
42 | +EXASolution | ||
43 | +ElasticSearch | ||
44 | +Empress Embedded Database | ||
45 | +EnterpriseDB | ||
46 | +Extensible Storage Engine (ESE/NT) | ||
47 | +FileMaker Pro | ||
48 | +Firebird | ||
49 | +FlockDB | ||
50 | +FoundationDB | ||
51 | +Freebase | ||
52 | +GT.M | ||
53 | +GemStone/S | ||
54 | +GigaSpaces | ||
55 | +Greenplum | ||
56 | +GroveSite | ||
57 | +H2 | ||
58 | +HSQLDB | ||
59 | +Hazelcast | ||
60 | +Helix database | ||
61 | +Hibari | ||
62 | +Hypertable | ||
63 | +IBM DB2 | ||
64 | +IBM DB2 Express-C | ||
65 | +IBM Informix C-ISAM | ||
66 | +IBM Lotus Approach | ||
67 | +IBM Notes and IBM Domino | ||
68 | +InfiniteGraph | ||
69 | +InfinityDB | ||
70 | +Infobright | ||
71 | +Informix | ||
72 | +Ingres | ||
73 | +InterBase | ||
74 | +InterSystems Caché | ||
75 | +JADE | ||
76 | +Jackrabbit | ||
77 | +Keyspace | ||
78 | +LevelDB | ||
79 | +Linter | ||
80 | +MariaDB | ||
81 | +MarkLogic | ||
82 | +MarkLogic Server | ||
83 | +MaxDB | ||
84 | +MemSQL | ||
85 | +MemcacheDB | ||
86 | +Microsoft Access | ||
87 | +Microsoft Jet Database Engine | ||
88 | +Microsoft SQL Server | ||
89 | +Microsoft SQL Server Express | ||
90 | +Microsoft Visual FoxPro | ||
91 | +Mimer SQL | ||
92 | +Mnesia | ||
93 | +MonetDB | ||
94 | +MongoDB | ||
95 | +MySQL | ||
96 | +NDBM | ||
97 | +Neo4j | ||
98 | +NeoDatis ODB | ||
99 | +Netezza | ||
100 | +NexusDB | ||
101 | +NonStop SQL | ||
102 | +ODABA | ||
103 | +OWLIM | ||
104 | +Object database | ||
105 | +ObjectDB | ||
106 | +ObjectDatabase++ | ||
107 | +ObjectStore | ||
108 | +Objectivity/DB | ||
109 | +Ontotext-OWLIM | ||
110 | +OpenLink Virtuoso | ||
111 | +OpenLink Virtuoso Universal Server | ||
112 | +OpenOffice.org Base | ||
113 | +OpenQM | ||
114 | +Openbase | ||
115 | +Oracle | ||
116 | +Oracle NoSQL Database | ||
117 | +Oracle Rdb for OpenVMS | ||
118 | +OrientDB | ||
119 | +Panorama | ||
120 | +Perst | ||
121 | +Pervasive PSQL | ||
122 | +Polyhedra | ||
123 | +PostgreSQL | ||
124 | +Postgres Plus Advanced Server | ||
125 | +Progress Software | ||
126 | +R:Base | ||
127 | +RDM Embedded | ||
128 | +RDM Server | ||
129 | +Revelation Software's OpenInsight | ||
130 | +Riak | ||
131 | +Rocket U2 | ||
132 | +SAND CDBMS | ||
133 | +SAP HANA | ||
134 | +SAP Sybase Adaptive Server Enterprise | ||
135 | +SAP Sybase IQ | ||
136 | +SQL Anywhere | ||
137 | +SQLBase | ||
138 | +SQLite | ||
139 | +ScimoreDB | ||
140 | +Sedna | ||
141 | +SimpleDB | ||
142 | +SmallSQL | ||
143 | +Solr | ||
144 | +Sones GraphDB | ||
145 | +SparkleDB | ||
146 | +Sqrrl Enterprise | ||
147 | +Sybase Advantage Database Server | ||
148 | +Tarantool | ||
149 | +Teradata | ||
150 | +The SAS system | ||
151 | +TimesTen | ||
152 | +TokuMX | ||
153 | +Tokyo Cabinet | ||
154 | +Tuple space | ||
155 | +UniData | ||
156 | +UniVerse | ||
157 | +Unisys RDMS 2200 | ||
158 | +VMDS | ||
159 | +Vectorwise | ||
160 | +Versant Object Database | ||
161 | +Vertica | ||
162 | +Virtuoso Universal Server | ||
163 | +WakandaDB | ||
164 | +XAP | ||
165 | +ZODB | ||
166 | +dBase | ||
167 | +db4o | ||
168 | +djondb | ||
169 | +eXist | ||
170 | +eXtremeDB | ||
171 | +mSQL | ||
172 | +memcached | ||
173 | +mizanSQL | ||
174 | +redis | ||
175 | +solidDB | ||
176 | +txtSQL |
@@ -0,0 +1,673 @@ | @@ -0,0 +1,673 @@ | ||
1 | +A# | ||
2 | +A-0 System | ||
3 | +A+ | ||
4 | +A++ | ||
5 | +ABAP | ||
6 | +ABC | ||
7 | +ABC ALGOL | ||
8 | +ABLE | ||
9 | +ABSET | ||
10 | +ABSYS | ||
11 | +ACC | ||
12 | +Accent | ||
13 | +Ace DASL | ||
14 | +ACL2 | ||
15 | +ACT-III | ||
16 | +Action! | ||
17 | +ActionScript | ||
18 | +Ada | ||
19 | +Adenine | ||
20 | +Agda | ||
21 | +Agilent VEE | ||
22 | +Agora | ||
23 | +AIMMS | ||
24 | +Alef | ||
25 | +ALF | ||
26 | +ALGOL 58 | ||
27 | +ALGOL 60 | ||
28 | +ALGOL 68 | ||
29 | +ALGOL W | ||
30 | +Alice | ||
31 | +Alma-0 | ||
32 | +AmbientTalk | ||
33 | +Amiga E | ||
34 | +AMOS | ||
35 | +AMPL | ||
36 | +APL | ||
37 | +AppleScript | ||
38 | +Arc | ||
39 | +ARexx | ||
40 | +Argus | ||
41 | +AspectJ | ||
42 | +Assembly language | ||
43 | +ATS | ||
44 | +Ateji PX | ||
45 | +AutoHotkey | ||
46 | +Autocoder | ||
47 | +AutoIt | ||
48 | +AutoLISP / Visual LISP | ||
49 | +Averest | ||
50 | +AWK | ||
51 | +Axum | ||
52 | +B | ||
53 | +Babbage | ||
54 | +BAIL | ||
55 | +Bash | ||
56 | +BASIC | ||
57 | +bc | ||
58 | +BCPL | ||
59 | +BeanShell | ||
60 | +Batch | ||
61 | +Bertrand | ||
62 | +BETA | ||
63 | +Bigwig | ||
64 | +Bistro | ||
65 | +BitC | ||
66 | +BLISS | ||
67 | +Blue | ||
68 | +Bon | ||
69 | +Boo | ||
70 | +Boomerang | ||
71 | +Bourne shell | ||
72 | +BREW | ||
73 | +BPEL | ||
74 | +BuildProfessional | ||
75 | +C | ||
76 | +C-- | ||
77 | +C++ | ||
78 | +C# | ||
79 | +C/AL | ||
80 | +Caché ObjectScript | ||
81 | +C Shell | ||
82 | +Caml | ||
83 | +Candle | ||
84 | +Cayenne | ||
85 | +CDuce | ||
86 | +Cecil | ||
87 | +Cel | ||
88 | +Cesil | ||
89 | +Ceylon | ||
90 | +CFML | ||
91 | +Cg | ||
92 | +Ch | ||
93 | +Chapel | ||
94 | +CHAIN | ||
95 | +Charity | ||
96 | +Charm | ||
97 | +Chef | ||
98 | +CHILL | ||
99 | +CHIP-8 | ||
100 | +chomski | ||
101 | +ChucK | ||
102 | +CICS | ||
103 | +Cilk | ||
104 | +CL (IBM) | ||
105 | +Claire | ||
106 | +Clarion | ||
107 | +Clean | ||
108 | +Clipper | ||
109 | +CLIST | ||
110 | +Clojure | ||
111 | +CLU | ||
112 | +CMS-2 | ||
113 | +COBOL | ||
114 | +Cobra | ||
115 | +CODE | ||
116 | +CoffeeScript | ||
117 | +Cola | ||
118 | +ColdC | ||
119 | +ColdFusion | ||
120 | +Cool | ||
121 | +COMAL | ||
122 | +Combined Programming Language | ||
123 | +Common Intermediate Language | ||
124 | +Common Lisp | ||
125 | +COMPASS | ||
126 | +Component Pascal | ||
127 | +COMIT | ||
128 | +Constraint Handling Rules | ||
129 | +Converge | ||
130 | +Coral 66 | ||
131 | +Corn | ||
132 | +CorVision | ||
133 | +Coq | ||
134 | +COWSEL | ||
135 | +CPL | ||
136 | +csh | ||
137 | +CSP | ||
138 | +Csound | ||
139 | +Curl | ||
140 | +Curry | ||
141 | +Cyclone | ||
142 | +Cython | ||
143 | +D | ||
144 | +DASL | ||
145 | +Dart | ||
146 | +DataFlex | ||
147 | +Datalog | ||
148 | +DATATRIEVE | ||
149 | +dBase | ||
150 | +dc | ||
151 | +Deesel | ||
152 | +Delphi | ||
153 | +DCL | ||
154 | +DinkC | ||
155 | +DIBOL | ||
156 | +Dog | ||
157 | +Draco | ||
158 | +DRAKON | ||
159 | +Dylan | ||
160 | +DYNAMO | ||
161 | +E | ||
162 | +E# | ||
163 | +Ease | ||
164 | +Easy PL/I | ||
165 | +EASYTRIEVE PLUS | ||
166 | +ECMAScript | ||
167 | +Edinburgh IMP | ||
168 | +EGL | ||
169 | +Eiffel | ||
170 | +ELAN | ||
171 | +Elixir | ||
172 | +Elm | ||
173 | +Emacs Lisp | ||
174 | +Emerald | ||
175 | +Epigram | ||
176 | +Erlang | ||
177 | +es | ||
178 | +Escapade | ||
179 | +Escher | ||
180 | +ESPOL | ||
181 | +Esterel | ||
182 | +Etoys | ||
183 | +Euclid | ||
184 | +Euler | ||
185 | +Euphoria | ||
186 | +EusLisp | ||
187 | +CMS EXEC | ||
188 | +EXEC 2 | ||
189 | +Executable UML | ||
190 | +F | ||
191 | +F# | ||
192 | +Factor | ||
193 | +Falcon | ||
194 | +Fancy | ||
195 | +Fantom | ||
196 | +FAUST | ||
197 | +Felix | ||
198 | +Ferite | ||
199 | +FFP | ||
200 | +Fjölnir | ||
201 | +FL | ||
202 | +Flavors | ||
203 | +Flex | ||
204 | +FLOW-MATIC | ||
205 | +FOCAL | ||
206 | +FOCUS | ||
207 | +FOIL | ||
208 | +FORMAC | ||
209 | +@Formula | ||
210 | +Forth | ||
211 | +Fortran | ||
212 | +Fortress | ||
213 | +FoxBase | ||
214 | +FoxPro | ||
215 | +FP | ||
216 | +FPr | ||
217 | +Franz Lisp | ||
218 | +F-Script | ||
219 | +FSProg | ||
220 | +G | ||
221 | +Game Maker Language | ||
222 | +GameMonkey Script | ||
223 | +GAMS | ||
224 | +GAP | ||
225 | +G-code | ||
226 | +Genie | ||
227 | +GDL | ||
228 | +Gibiane | ||
229 | +GJ | ||
230 | +GEORGE | ||
231 | +GLSL | ||
232 | +GNU E | ||
233 | +GM | ||
234 | +Go | ||
235 | +Go! | ||
236 | +GOAL | ||
237 | +Gödel | ||
238 | +Godiva | ||
239 | +GOM | ||
240 | +Goo | ||
241 | +Gosu | ||
242 | +GOTRAN | ||
243 | +GPSS | ||
244 | +GraphTalk | ||
245 | +GRASS | ||
246 | +Groovy | ||
247 | +Hack | ||
248 | +HAL/S | ||
249 | +Hamilton C shell | ||
250 | +Harbour | ||
251 | +Hartmann pipelines | ||
252 | +Haskell | ||
253 | +Haxe | ||
254 | +High Level Assembly | ||
255 | +HLSL | ||
256 | +Hop | ||
257 | +Hope | ||
258 | +Hugo | ||
259 | +Hume | ||
260 | +HyperTalk | ||
261 | +IBM Basic assembly language | ||
262 | +IBM HAScript | ||
263 | +IBM Informix-4GL | ||
264 | +IBM RPG | ||
265 | +ICI | ||
266 | +Icon | ||
267 | +Id | ||
268 | +IDL | ||
269 | +Idris | ||
270 | +IMP | ||
271 | +Inform | ||
272 | +Io | ||
273 | +Ioke | ||
274 | +IPL | ||
275 | +IPTSCRAE | ||
276 | +ISLISP | ||
277 | +ISPF | ||
278 | +ISWIM | ||
279 | +J | ||
280 | +J# | ||
281 | +J++ | ||
282 | +JADE | ||
283 | +Jako | ||
284 | +JAL | ||
285 | +Janus | ||
286 | +JASS | ||
287 | +Java | ||
288 | +JavaScript | ||
289 | +JCL | ||
290 | +JEAN | ||
291 | +Join Java | ||
292 | +JOSS | ||
293 | +Joule | ||
294 | +JOVIAL | ||
295 | +Joy | ||
296 | +JScript | ||
297 | +JavaFX Script | ||
298 | +Julia | ||
299 | +K | ||
300 | +Kaleidoscope | ||
301 | +Karel | ||
302 | +Karel++ | ||
303 | +KEE | ||
304 | +KIF | ||
305 | +Kojo | ||
306 | +Kotlin | ||
307 | +KRC | ||
308 | +KRL | ||
309 | +KRYPTON | ||
310 | +ksh | ||
311 | +L | ||
312 | +L# | ||
313 | +LabVIEW | ||
314 | +Ladder | ||
315 | +Lagoona | ||
316 | +LANSA | ||
317 | +Lasso | ||
318 | +LaTeX | ||
319 | +Lava | ||
320 | +LC-3 | ||
321 | +Leadwerks Script | ||
322 | +Leda | ||
323 | +Legoscript | ||
324 | +LIL | ||
325 | +LilyPond | ||
326 | +Limbo | ||
327 | +Limnor | ||
328 | +LINC | ||
329 | +Lingo | ||
330 | +Linoleum | ||
331 | +LIS | ||
332 | +LISA | ||
333 | +Lisaac | ||
334 | +Lisp | ||
335 | +Lite-C | ||
336 | +Lithe | ||
337 | +Little b | ||
338 | +Logo | ||
339 | +Logtalk | ||
340 | +LPC | ||
341 | +LSE | ||
342 | +LSL | ||
343 | +LiveCode | ||
344 | +LiveScript | ||
345 | +Lua | ||
346 | +Lucid | ||
347 | +Lustre | ||
348 | +LYaPAS | ||
349 | +Lynx | ||
350 | +M | ||
351 | +M2001 | ||
352 | +M4 | ||
353 | +Machine code | ||
354 | +MAD | ||
355 | +MAD/I | ||
356 | +Magik | ||
357 | +Magma | ||
358 | +make | ||
359 | +Maple | ||
360 | +MAPPER | ||
361 | +MARK-IV | ||
362 | +Mary | ||
363 | +MASM | ||
364 | +Mathematica | ||
365 | +MATLAB | ||
366 | +Maxima | ||
367 | +Max | ||
368 | +MaxScript | ||
369 | +Maya | ||
370 | +MDL | ||
371 | +Mercury | ||
372 | +Mesa | ||
373 | +Metacard | ||
374 | +Metafont | ||
375 | +MetaL | ||
376 | +Microcode | ||
377 | +MicroScript | ||
378 | +MIIS | ||
379 | +MillScript | ||
380 | +MIMIC | ||
381 | +Mirah | ||
382 | +Miranda | ||
383 | +MIVA Script | ||
384 | +ML | ||
385 | +Moby | ||
386 | +Model 204 | ||
387 | +Modelica | ||
388 | +Modula | ||
389 | +Modula-2 | ||
390 | +Modula-3 | ||
391 | +Mohol | ||
392 | +MOO | ||
393 | +Mortran | ||
394 | +Mouse | ||
395 | +MPD | ||
396 | +MSIL | ||
397 | +MSL | ||
398 | +MUMPS | ||
399 | +NASM | ||
400 | +NATURAL | ||
401 | +Napier88 | ||
402 | +Neko | ||
403 | +Nemerle | ||
404 | +nesC | ||
405 | +NESL | ||
406 | +Net.Data | ||
407 | +NetLogo | ||
408 | +NetRexx | ||
409 | +NewLISP | ||
410 | +NEWP | ||
411 | +Newspeak | ||
412 | +NewtonScript | ||
413 | +NGL | ||
414 | +Nial | ||
415 | +Nice | ||
416 | +Nickle | ||
417 | +NPL | ||
418 | +Not eXactly C | ||
419 | +Not Quite C | ||
420 | +NSIS | ||
421 | +Nu | ||
422 | +NWScript | ||
423 | +o:XML | ||
424 | +Oak | ||
425 | +Oberon | ||
426 | +Obix | ||
427 | +OBJ2 | ||
428 | +Object Lisp | ||
429 | +ObjectLOGO | ||
430 | +Object REXX | ||
431 | +Object Pascal | ||
432 | +Objective-C | ||
433 | +Objective-J | ||
434 | +Obliq | ||
435 | +Obol | ||
436 | +OCaml | ||
437 | +occam | ||
438 | +occam-π | ||
439 | +Octave | ||
440 | +OmniMark | ||
441 | +Onyx | ||
442 | +Opa | ||
443 | +Opal | ||
444 | +OpenEdge ABL | ||
445 | +OPL | ||
446 | +OPS5 | ||
447 | +OptimJ | ||
448 | +Orc | ||
449 | +ORCA/Modula-2 | ||
450 | +Oriel | ||
451 | +Orwell | ||
452 | +Oxygene | ||
453 | +Oz | ||
454 | +P# | ||
455 | +PARI/GP | ||
456 | +Pascal | ||
457 | +Pawn | ||
458 | +PCASTL | ||
459 | +PCF | ||
460 | +PEARL | ||
461 | +PeopleCode | ||
462 | +Perl | ||
463 | +PDL | ||
464 | +PHP | ||
465 | +Phrogram | ||
466 | +Pico | ||
467 | +Pict | ||
468 | +Pike | ||
469 | +PIKT | ||
470 | +PILOT | ||
471 | +Pipelines | ||
472 | +Pizza | ||
473 | +PL-11 | ||
474 | +PL/0 | ||
475 | +PL/B | ||
476 | +PL/C | ||
477 | +PL/I | ||
478 | +PL/M | ||
479 | +PL/P | ||
480 | +PL/SQL | ||
481 | +PL360 | ||
482 | +PLANC | ||
483 | +Plankalkül | ||
484 | +PLEX | ||
485 | +PLEXIL | ||
486 | +Plus | ||
487 | +POP-11 | ||
488 | +PostScript | ||
489 | +PortablE | ||
490 | +Powerhouse | ||
491 | +PowerBuilder | ||
492 | +PowerShell | ||
493 | +PPL | ||
494 | +Processing | ||
495 | +Processing.js | ||
496 | +Prograph | ||
497 | +PROIV | ||
498 | +Prolog | ||
499 | +Visual Prolog | ||
500 | +Promela | ||
501 | +PROSE modeling language | ||
502 | +PROTEL | ||
503 | +ProvideX | ||
504 | +Pro*C | ||
505 | +Pure | ||
506 | +Python | ||
507 | +Q | ||
508 | +Qalb | ||
509 | +Qi | ||
510 | +QtScript | ||
511 | +QuakeC | ||
512 | +QPL | ||
513 | +R | ||
514 | +R++ | ||
515 | +Racket | ||
516 | +RAPID | ||
517 | +Rapira | ||
518 | +Ratfiv | ||
519 | +Ratfor | ||
520 | +rc | ||
521 | +REBOL | ||
522 | +Red | ||
523 | +Redcode | ||
524 | +REFAL | ||
525 | +Reia | ||
526 | +Revolution | ||
527 | +rex | ||
528 | +REXX | ||
529 | +Rlab | ||
530 | +RobotC | ||
531 | +ROOP | ||
532 | +RPG | ||
533 | +RPL | ||
534 | +RSL | ||
535 | +RTL/2 | ||
536 | +Ruby | ||
537 | +Rust | ||
538 | +S | ||
539 | +S2 | ||
540 | +S3 | ||
541 | +S-Lang | ||
542 | +S-PLUS | ||
543 | +SA-C | ||
544 | +SabreTalk | ||
545 | +SAIL | ||
546 | +SALSA | ||
547 | +SAM76 | ||
548 | +SAS | ||
549 | +SASL | ||
550 | +Sather | ||
551 | +Sawzall | ||
552 | +SBL | ||
553 | +Scala | ||
554 | +Scheme | ||
555 | +Scilab | ||
556 | +Scratch | ||
557 | +Script.NET | ||
558 | +Sed | ||
559 | +Seed7 | ||
560 | +Self | ||
561 | +SenseTalk | ||
562 | +SequenceL | ||
563 | +SETL | ||
564 | +Shift Script | ||
565 | +SIMPOL | ||
566 | +SIMSCRIPT | ||
567 | +Simula | ||
568 | +Simulink | ||
569 | +SISAL | ||
570 | +SLIP | ||
571 | +SMALL | ||
572 | +Smalltalk | ||
573 | +Small Basic | ||
574 | +SML | ||
575 | +SNOBOL | ||
576 | +Snowball | ||
577 | +SOL | ||
578 | +Span | ||
579 | +SPARK | ||
580 | +SPIN | ||
581 | +SP/k | ||
582 | +SPS | ||
583 | +Squeak | ||
584 | +Squirrel | ||
585 | +SR | ||
586 | +S/SL | ||
587 | +Starlogo | ||
588 | +Strand | ||
589 | +Stata | ||
590 | +Stateflow | ||
591 | +Subtext | ||
592 | +SuperCollider | ||
593 | +SuperTalk | ||
594 | +SYMPL | ||
595 | +SyncCharts | ||
596 | +SystemVerilog | ||
597 | +T | ||
598 | +TACL | ||
599 | +TACPOL | ||
600 | +TADS | ||
601 | +TAL | ||
602 | +Tcl | ||
603 | +Tea | ||
604 | +TECO | ||
605 | +TELCOMP | ||
606 | +TeX | ||
607 | +TEX | ||
608 | +TIE | ||
609 | +Timber | ||
610 | +TMG, compiler-compiler | ||
611 | +Tom | ||
612 | +TOM | ||
613 | +Topspeed | ||
614 | +TPU | ||
615 | +Trac | ||
616 | +TTM | ||
617 | +T-SQL | ||
618 | +TTCN | ||
619 | +Turing | ||
620 | +TUTOR | ||
621 | +TXL | ||
622 | +TypeScript | ||
623 | +Turbo C++ | ||
624 | +Ubercode | ||
625 | +UCSD Pascal | ||
626 | +Umple | ||
627 | +Unicon | ||
628 | +Uniface | ||
629 | +UNITY | ||
630 | +Unix shell | ||
631 | +UnrealScript | ||
632 | +Vala | ||
633 | +VBA | ||
634 | +VBScript | ||
635 | +Verilog | ||
636 | +VHDL | ||
637 | +Visual Basic | ||
638 | +Visual Basic .NET | ||
639 | +Microsoft Visual C++ | ||
640 | +Visual C# | ||
641 | +Visual DataFlex | ||
642 | +Visual DialogScript | ||
643 | +Visual Fortran | ||
644 | +Visual FoxPro | ||
645 | +Visual J++ | ||
646 | +Visual J# | ||
647 | +Visual Objects | ||
648 | +VSXu | ||
649 | +Vvvv | ||
650 | +WATFIV, WATFOR | ||
651 | +WebDNA | ||
652 | +WebQL | ||
653 | +Windows PowerShell | ||
654 | +Winbatch | ||
655 | +X++ | ||
656 | +X# | ||
657 | +X10 | ||
658 | +XBL | ||
659 | +XC | ||
660 | +xHarbour | ||
661 | +XL | ||
662 | +XOTcl | ||
663 | +XPL | ||
664 | +XPL0 | ||
665 | +XQuery | ||
666 | +XSB | ||
667 | +XSLT | ||
668 | +Yorick | ||
669 | +YQL | ||
670 | +Z notation | ||
671 | +Zeno | ||
672 | +ZOPL | ||
673 | +ZPL | ||
0 | \ No newline at end of file | 674 | \ No newline at end of file |
@@ -0,0 +1,115 @@ | @@ -0,0 +1,115 @@ | ||
1 | +.mpog_hidden_field{ | ||
2 | + display: none; | ||
3 | +} | ||
4 | + | ||
5 | +#signup-form small#secondary-email-balloon , | ||
6 | +#signup-form small#role-balloon, | ||
7 | +#signup-form small#area-interest-balloon | ||
8 | +{ | ||
9 | + display: none; | ||
10 | + width: 142px; | ||
11 | + height: 69px; | ||
12 | + color: #FFFFFF; | ||
13 | + font-weight: bold; | ||
14 | + font-size: 11px; | ||
15 | + padding: 5px 10px 45px 10px; | ||
16 | + margin: 0; | ||
17 | + line-height: 1.5em; | ||
18 | + background: transparent url(/images/gray-balloon.png) bottom center no-repeat; | ||
19 | + position: absolute; | ||
20 | + z-index: 2; | ||
21 | + right: -150px; | ||
22 | +} | ||
23 | + | ||
24 | +#signup-form #signup-secondary-email, | ||
25 | +#signup-form #signup-role, | ||
26 | +#signup-form #signup-area-interest | ||
27 | +{ | ||
28 | + position: relative; | ||
29 | +} | ||
30 | + | ||
31 | +#signup-form small#secondary-email-balloon, | ||
32 | +#signup-form small#role-balloon, | ||
33 | +#signup-form small#area-interest-balloon | ||
34 | +{ | ||
35 | + top: -80px; | ||
36 | +} | ||
37 | + | ||
38 | +.dynamic-table { | ||
39 | + border: solid 1px #000; | ||
40 | + margin-top: 5px; | ||
41 | + margin-bottom: 15px; | ||
42 | +} | ||
43 | +.dynamic-table td, .dynamic-table tr { | ||
44 | + border: none; | ||
45 | +} | ||
46 | + | ||
47 | +.expand-field { | ||
48 | + height: 80px; | ||
49 | +} | ||
50 | + | ||
51 | +.expand-field-focus { | ||
52 | + height: 300px; | ||
53 | +} | ||
54 | + | ||
55 | +.mpog-incomplete-percentage img { | ||
56 | + margin-left: 5px; | ||
57 | +} | ||
58 | + | ||
59 | +.mpog-incomplete-percentage img:hover { | ||
60 | + cursor: pointer; | ||
61 | +} | ||
62 | + | ||
63 | +#institution_dialog { | ||
64 | + display: none; | ||
65 | +} | ||
66 | + | ||
67 | +.errorExplanation { | ||
68 | + color: red; | ||
69 | + margin-left: 10px; | ||
70 | +} | ||
71 | + | ||
72 | +.hide-field { | ||
73 | + display: none !important; | ||
74 | +} | ||
75 | + | ||
76 | +.show-field { | ||
77 | + display: block !important; | ||
78 | +} | ||
79 | + | ||
80 | +#user_filter_content { | ||
81 | + display: block; | ||
82 | + width: 100%; | ||
83 | + height: auto; | ||
84 | +} | ||
85 | + | ||
86 | +.user_filter_options { | ||
87 | + width: 80%; | ||
88 | + height: auto; | ||
89 | + position: relative; | ||
90 | + float: left; | ||
91 | +} | ||
92 | + | ||
93 | +.user_filter_options input[type='text'] { | ||
94 | + width: 78%; | ||
95 | + | ||
96 | +} | ||
97 | + | ||
98 | +.user_filter_actions { | ||
99 | + width: 18 %; | ||
100 | + height: auto; | ||
101 | + position: relative; | ||
102 | + float: right; | ||
103 | + text-align: right; | ||
104 | +} | ||
105 | + | ||
106 | +.search-table tr td:first-child { | ||
107 | + width: 40px; | ||
108 | +} | ||
109 | + | ||
110 | +.formfieldline { | ||
111 | + margin-top: 10px; | ||
112 | +} | ||
113 | +.formfieldline input[type="text"] { | ||
114 | + width: 180px; | ||
115 | +} | ||
0 | \ No newline at end of file | 116 | \ No newline at end of file |
@@ -0,0 +1,88 @@ | @@ -0,0 +1,88 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | +require File.dirname(__FILE__) + '/../../controllers/mpog_software_plugin_controller' | ||
3 | + | ||
4 | +class AccountController; def rescue_action(e) raise e end; end | ||
5 | + | ||
6 | +class AccountControllerTest < ActionController::TestCase | ||
7 | + | ||
8 | + def setup | ||
9 | + @response = ActionController::TestResponse.new | ||
10 | + @institution_list = [] | ||
11 | + @institution_list << create_institution("Ministerio Publico da Uniao", "MPU") | ||
12 | + @institution_list << create_institution("Tribunal Regional da Uniao", "TRU") | ||
13 | + | ||
14 | + @user_info = { | ||
15 | + :login=>"novo_usuario", | ||
16 | + :password=>"nova_senha", | ||
17 | + :password_confirmation=>"nova_senha", | ||
18 | + :email=>"um@novo.usuario", | ||
19 | + :secondary_email=>"outro@email.com", | ||
20 | + :role=>"um role ai", | ||
21 | + :institution_id=>@institution_list.last.id | ||
22 | + } | ||
23 | + | ||
24 | + @profile_data_info = { | ||
25 | + :name=>"Um novo usuario", | ||
26 | + :area_interest=>"uma area ai" | ||
27 | + } | ||
28 | + end | ||
29 | + | ||
30 | + should "Create a user without gov email and institution" do | ||
31 | + @user_info[:institution_id] = nil | ||
32 | + | ||
33 | + post :signup, :user => @user_info, :profile_data => @profile_data_info | ||
34 | + | ||
35 | + assert_equal assigns(:user).login, @user_info[:login] | ||
36 | + assert assigns(:user).save | ||
37 | + end | ||
38 | + | ||
39 | + should "Create a user with gov email and institution" do | ||
40 | + @user_info[:email] = "email@gov.br" | ||
41 | + | ||
42 | + post :signup, :user => @user_info, :profile_data => @profile_data_info | ||
43 | + | ||
44 | + assert_equal assigns(:user).login, @user_info[:login] | ||
45 | + assert assigns(:user).save | ||
46 | + end | ||
47 | + | ||
48 | + should "Do not create a user with gov email without institution" do | ||
49 | + @user_info[:email] = "email@gov.br" | ||
50 | + @user_info[:institution_id] = nil | ||
51 | + | ||
52 | + post :signup, :user => @user_info, :profile_data => @profile_data_info | ||
53 | + | ||
54 | + assert_equal assigns(:user).login, @user_info[:login] | ||
55 | + assert !assigns(:user).save | ||
56 | + end | ||
57 | + | ||
58 | + private | ||
59 | + | ||
60 | + def create_institution name, acronym | ||
61 | + institution = Institution.new | ||
62 | + institution.name = name | ||
63 | + institution.acronym = acronym | ||
64 | + institution.type = "PublicInstitution" | ||
65 | + institution.save | ||
66 | + institution | ||
67 | + end | ||
68 | + | ||
69 | + def form_params | ||
70 | + user = { | ||
71 | + :login=>"novo_usuario", | ||
72 | + :password=>"nova_senha", | ||
73 | + :password_confirmation=>"nova_senha", | ||
74 | + :email=>"um@novo.usuario", | ||
75 | + :secondary_email=>"outro@email.com", | ||
76 | + :role=>"um role ai", | ||
77 | + :institution_id=>@institution_list.last.id | ||
78 | + } | ||
79 | + | ||
80 | + profile_data = { | ||
81 | + :name=>"Um novo usuario", | ||
82 | + :area_interest=>"uma area ai" | ||
83 | + } | ||
84 | + | ||
85 | + user["profile_data"] = profile_data | ||
86 | + user | ||
87 | + end | ||
88 | +end | ||
0 | \ No newline at end of file | 89 | \ No newline at end of file |
@@ -0,0 +1,112 @@ | @@ -0,0 +1,112 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | +require File.dirname(__FILE__) + '/../../controllers/mpog_software_plugin_controller' | ||
3 | + | ||
4 | +class MpogSoftwarePluginController; def rescue_action(e) raise e end; end | ||
5 | + | ||
6 | + | ||
7 | +class MpogSoftwarePluginControllerTest < ActionController::TestCase | ||
8 | + | ||
9 | + def setup | ||
10 | + @govPower = GovernmentalPower.create(:name=>"Some Gov Power") | ||
11 | + @govSphere = GovernmentalSphere.create(:name=>"Some Gov Sphere") | ||
12 | + @response = ActionController::TestResponse.new | ||
13 | + @institution_list = [] | ||
14 | + @institution_list << create_public_institution("Ministerio Publico da Uniao", "MPU", @govPower, @govSphere) | ||
15 | + @institution_list << create_public_institution("Tribunal Regional da Uniao", "TRU", @govPower, @govSphere) | ||
16 | + end | ||
17 | + | ||
18 | + should "Search for institution with acronym" do | ||
19 | + xhr :get, :get_institutions, :query=>"TRU" | ||
20 | + | ||
21 | + json_response = ActiveSupport::JSON.decode(@response.body) | ||
22 | + | ||
23 | + assert_equal "Tribunal Regional da Uniao", json_response[0]["value"] | ||
24 | + end | ||
25 | + | ||
26 | + should "Search for institution with name" do | ||
27 | + xhr :get, :get_institutions, :query=>"Minis" | ||
28 | + | ||
29 | + json_response = ActiveSupport::JSON.decode(@response.body) | ||
30 | + | ||
31 | + assert_equal "Ministerio Publico da Uniao", json_response[0]["value"] | ||
32 | + end | ||
33 | + | ||
34 | + should "search with name or acronym and return a list with institutions" do | ||
35 | + xhr :get, :get_institutions, :query=>"uni" | ||
36 | + | ||
37 | + json_response = ActiveSupport::JSON.decode(@response.body) | ||
38 | + | ||
39 | + assert_equal "Ministerio Publico da Uniao", json_response[0]["value"] | ||
40 | + assert_equal "Tribunal Regional da Uniao", json_response[1]["value"] | ||
41 | + end | ||
42 | + | ||
43 | + should "method create_institution return the html for modal" do | ||
44 | + xhr :get, :create_institution | ||
45 | + assert_template 'create_institution' | ||
46 | + end | ||
47 | + | ||
48 | + should "create new institution with ajax" do | ||
49 | + @controller.stubs(:verify_recaptcha).returns(true) | ||
50 | + | ||
51 | + xhr :get, :new_institution, | ||
52 | + :authenticity_token=>"dsa45a6das52sd", | ||
53 | + :community=>{:name=>"foo bar"}, | ||
54 | + :institution => {:cnpj=>"12.234.567/8900-10", :acronym=>"fb", :type=>"PublicInstitution"}, | ||
55 | + :governmental=>{:power=>@govPower.id, :sphere=>@govSphere.id}, | ||
56 | + :recaptcha_response_field=>'' | ||
57 | + | ||
58 | + json_response = ActiveSupport::JSON.decode(@response.body) | ||
59 | + | ||
60 | + assert json_response["success"] | ||
61 | + end | ||
62 | + | ||
63 | + should "not create a institution that already exists" do | ||
64 | + @controller.stubs(:verify_recaptcha).returns(true) | ||
65 | + | ||
66 | + xhr :get, :new_institution, | ||
67 | + :authenticity_token=>"dsa45a6das52sd", | ||
68 | + :community=>{:name=>"Ministerio Publico da Uniao"}, | ||
69 | + :institution => {:cnpj=>"12.234.567/8900-10", :acronym=>"fb", :type=>"PublicInstitution"}, | ||
70 | + :governmental=>{:power=>@govPower.id, :sphere=>@govSphere.id}, | ||
71 | + :recaptcha_response_field=>'' | ||
72 | + | ||
73 | + json_response = ActiveSupport::JSON.decode(@response.body) | ||
74 | + | ||
75 | + assert !json_response["success"] | ||
76 | + end | ||
77 | + | ||
78 | + should "verify if institution name already exists" do | ||
79 | + xhr :get, :institution_already_exists, :name=>"Ministerio Publico da Uniao" | ||
80 | + assert_equal "true", @response.body | ||
81 | + | ||
82 | + xhr :get, :institution_already_exists, :name=>"Another name here" | ||
83 | + assert_equal "false", @response.body | ||
84 | + end | ||
85 | + | ||
86 | + | ||
87 | + should "response as XML to export softwares" do | ||
88 | + get :download, :format => 'xml' | ||
89 | + assert_equal 'text/xml', @response.content_type | ||
90 | + end | ||
91 | + | ||
92 | + should "response as CSV to export softwares" do | ||
93 | + get :download, :format => 'csv' | ||
94 | + assert_equal 'text/csv', @response.content_type | ||
95 | + assert_equal "name;acronym;demonstration_url;e_arq;e_mag;e_ping;features;icp_brasil;objectives;operating_platform\n", @response.body | ||
96 | + end | ||
97 | + | ||
98 | + | ||
99 | + private | ||
100 | + | ||
101 | + def create_public_institution name, acronym, gov_p, gov_s | ||
102 | + institution_community = Community::new :name=>name | ||
103 | + institution = PublicInstitution.new | ||
104 | + institution.community = institution_community | ||
105 | + institution.name = name | ||
106 | + institution.acronym = acronym | ||
107 | + institution.governmental_power = gov_p | ||
108 | + institution.governmental_sphere = gov_s | ||
109 | + institution.save | ||
110 | + institution | ||
111 | + end | ||
112 | +end |
@@ -0,0 +1,47 @@ | @@ -0,0 +1,47 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class ControlledVocabularyTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + @community = fast_create(Community) | ||
7 | + @language = ProgrammingLanguage.new(:name => 'C++') | ||
8 | + @language.save | ||
9 | + @software_language = SoftwareLanguage.new(:version => '1', :operating_system => 'os') | ||
10 | + @software_language.programming_language = @language | ||
11 | + @software_language.save | ||
12 | + @database = DatabaseDescription.new(:name => 'Oracle') | ||
13 | + @database.save | ||
14 | + @software_database = SoftwareDatabase.new(:version => '2', :operating_system => 'os2') | ||
15 | + @software_database.database_description = @database | ||
16 | + @software_database.save | ||
17 | + @software_info = SoftwareInfo.new(:community_id=>1, :acronym => "SFTW", :e_mag => true,:icp_brasil => true,:intern => true,:e_ping => true, | ||
18 | + :e_arq => true,:name => true,:operating_platform => true,:objectives => "",:features => "") | ||
19 | + @controlled_language = ControlledVocabulary.new() | ||
20 | + @controlled_vocabulary = ControlledVocabulary.new(:administration => true, :agriculture => true, :business_and_services => true, :communication => true, | ||
21 | + :culture => true, :national_defense => true, :economy_and_finances => true, :education => true, | ||
22 | + :energy => true, :sports => false , :habitation => true, :industry => true, :environment => true, | ||
23 | + :research_and_development => true, :social_security => false , :social_protection => true, | ||
24 | + :international_relations => true, :sanitation => true, :health => false, | ||
25 | + :security_public_order => true, :work => true, :transportation => true, :urbanism => true) | ||
26 | + @software_info.software_languages << @software_language | ||
27 | + @software_info.software_databases << @software_database | ||
28 | + @software_info.controlled_vocabulary = @controlled_vocabulary | ||
29 | + end | ||
30 | + | ||
31 | + should "save software correctly with ControlledVocabulary filds" do | ||
32 | + assert @software_info.save | ||
33 | + end | ||
34 | + | ||
35 | + should "set in software_info a reference to controlled_vocabulary" do | ||
36 | + @software_info.save | ||
37 | + @controlled_vocabulary.save | ||
38 | + assert_equal SoftwareInfo.last.controlled_vocabulary, ControlledVocabulary.last | ||
39 | + end | ||
40 | + | ||
41 | + should "return a valid value from database" do | ||
42 | + @software_info.save | ||
43 | + @controlled_vocabulary.save | ||
44 | + controlled_vocabulary = ControlledVocabulary.find(SoftwareInfo.last.controlled_vocabulary) | ||
45 | + assert_equal true, controlled_vocabulary.education | ||
46 | + end | ||
47 | +end |
@@ -0,0 +1,58 @@ | @@ -0,0 +1,58 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class DatabaseHelperTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + include DatabaseHelper | ||
6 | + | ||
7 | + def setup | ||
8 | + @database_objects = [{"database_description_id" => "1" ,"version" => "2.0", "operating_system" => "debian"}, | ||
9 | + {"database_description_id" => "2" ,"version" => "2.1", "operating_system" => "debian"}, | ||
10 | + {"database_description_id" => "3" ,"version" => "2.2", "operating_system" => "debian"}] | ||
11 | + @database_objects | ||
12 | + end | ||
13 | + | ||
14 | + def teardown | ||
15 | + @database_objects = nil | ||
16 | + end | ||
17 | + | ||
18 | + should "return an empty list" do | ||
19 | + empty_list = [] | ||
20 | + assert_equal [],DatabaseHelper.list_database(empty_list) | ||
21 | + end | ||
22 | + | ||
23 | + should "return a list with current database objects" do | ||
24 | + list_compare = [] | ||
25 | + assert_equal list_compare.class, DatabaseHelper.list_database(@database_objects).class | ||
26 | + end | ||
27 | + | ||
28 | + should "have same information from the list passed as parameter" do | ||
29 | + list_compare = DatabaseHelper.list_database(@database_objects) | ||
30 | + assert_equal @database_objects.first[:database_description_id], list_compare.first.database_description_id | ||
31 | + end | ||
32 | + | ||
33 | + should "return a list with the same size of the parameter" do | ||
34 | + list_compare = DatabaseHelper.list_database(@database_objects) | ||
35 | + assert_equal @database_objects.count, list_compare.count | ||
36 | + end | ||
37 | + | ||
38 | + should "return false if list_database are empty or null" do | ||
39 | + list_compare = [] | ||
40 | + assert_equal false,DatabaseHelper.valid_list_database?(list_compare) | ||
41 | + end | ||
42 | + | ||
43 | + should "return a html text with operating system equals to linux" do | ||
44 | + databases = [] | ||
45 | + | ||
46 | + database_description = DatabaseDescription.new | ||
47 | + database_description.name = "teste" | ||
48 | + | ||
49 | + software_database = SoftwareDatabase.new | ||
50 | + software_database.version = 2 | ||
51 | + software_database.operating_system = "linux" | ||
52 | + software_database.database_description = database_description | ||
53 | + | ||
54 | + databases << software_database | ||
55 | + | ||
56 | + assert_not_nil DatabaseHelper.database_as_tables(databases).first.call.index("linux") | ||
57 | + end | ||
58 | + end |
@@ -0,0 +1,36 @@ | @@ -0,0 +1,36 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class DatabaseValidationTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + @database_desc = DatabaseDescription.create(:name => "ABC") | ||
7 | + @database = SoftwareDatabase.new | ||
8 | + @database.database_description = @database_desc | ||
9 | + @database.version = "MYSQL" | ||
10 | + @database.operating_system = "debian" | ||
11 | + @database | ||
12 | + end | ||
13 | + | ||
14 | + def teardown | ||
15 | + @database = nil | ||
16 | + end | ||
17 | + | ||
18 | + should "Save database if all fields are filled" do | ||
19 | + assert_equal true, @database.save | ||
20 | + end | ||
21 | + | ||
22 | + should "Don't save database if database_description database_description is empty" do | ||
23 | + @database.database_description = nil | ||
24 | + assert_equal true, !@database.save | ||
25 | + end | ||
26 | + | ||
27 | + should "Don't save database if operating system are empty" do | ||
28 | + @database.operating_system = " " | ||
29 | + assert_equal true, !@database.save | ||
30 | + end | ||
31 | + | ||
32 | + should "Don't save database if version are empty" do | ||
33 | + @database.version = " " | ||
34 | + assert_equal true, !@database.save | ||
35 | + end | ||
36 | +end |
@@ -0,0 +1,45 @@ | @@ -0,0 +1,45 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class GovernmentalPowerTest < ActiveSupport::TestCase | ||
4 | + def teardown | ||
5 | + Institution.destroy_all | ||
6 | + end | ||
7 | + | ||
8 | + should "get public institutions" do | ||
9 | + gov_power = GovernmentalPower::new :name=>"Some gov power" | ||
10 | + | ||
11 | + assert build_institution("one").save | ||
12 | + assert build_institution("two").save | ||
13 | + assert build_institution("three").save | ||
14 | + | ||
15 | + assert gov_power.public_institutions.count == PublicInstitution.count | ||
16 | + end | ||
17 | + | ||
18 | + should "not get private institutions" do | ||
19 | + gov_power = GovernmentalPower::new :name=>"Some gov power" | ||
20 | + | ||
21 | + assert build_institution("one", "PrivateInstitution", "00.000.000/0000-00").save | ||
22 | + assert build_institution("two","PrivateInstitution", "00.000.000/0000-01").save | ||
23 | + assert build_institution("three","PrivateInstitution", "00.000.000/0000-02").save | ||
24 | + | ||
25 | + assert gov_power.public_institutions.count == 0 | ||
26 | + assert gov_power.public_institutions.count == PublicInstitution.count | ||
27 | + assert gov_power.public_institutions.count != PrivateInstitution.count | ||
28 | + end | ||
29 | + | ||
30 | + private | ||
31 | + | ||
32 | + def build_institution name, type="PublicInstitution", cnpj=nil | ||
33 | + institution = Institution::new | ||
34 | + institution.name = name | ||
35 | + institution.type = type | ||
36 | + institution.cnpj = cnpj | ||
37 | + | ||
38 | + if type == "PublicInstitution" | ||
39 | + institution.governmental_power = GovernmentalPower.first | ||
40 | + institution.governmental_sphere = GovernmentalSphere.first | ||
41 | + end | ||
42 | + | ||
43 | + institution | ||
44 | + end | ||
45 | +end | ||
0 | \ No newline at end of file | 46 | \ No newline at end of file |
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class InstitutionHelperTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + should "populate public institutions with data from SIORG" do | ||
6 | + Institution.destroy_all | ||
7 | + | ||
8 | + InstitutionHelper.mass_update | ||
9 | + | ||
10 | + assert Institution.count != 0 | ||
11 | + end | ||
12 | + | ||
13 | + should "receive json data from SIORG" do | ||
14 | + data = InstitutionHelper.get_json(2, 1) | ||
15 | + | ||
16 | + assert data["unidades"].count != 0 | ||
17 | + end | ||
18 | +end |
@@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class InstitutionTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + should "save public institutions without name" do | ||
6 | + institution = Institution::new | ||
7 | + assert !institution.save | ||
8 | + assert institution.errors.full_messages.include? "Name can't be blank" | ||
9 | + end | ||
10 | + | ||
11 | + should "not save if institution has invalid type" do | ||
12 | + institution = Institution::new :name => "teste", :type => "Other type" | ||
13 | + assert !institution.save | ||
14 | + assert institution.errors.full_messages.include? "Type invalid, only public and private institutions are allowed." | ||
15 | + end | ||
16 | +end | ||
0 | \ No newline at end of file | 17 | \ No newline at end of file |
@@ -0,0 +1,52 @@ | @@ -0,0 +1,52 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class LibraryHelperTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + include LibraryHelper | ||
6 | + | ||
7 | + def setup | ||
8 | + @license_objects = [{"name" => "license1" ,"version" => "2.0", "license" => "debian", "software_id" => "1"}, | ||
9 | + {"name" => "license2" ,"version" => "2.1", "license" => "debian", "software_id" => "1"}, | ||
10 | + {"name" => "license3" ,"version" => "2.2", "license" => "debian", "software_id" => "1"}] | ||
11 | + end | ||
12 | + | ||
13 | + def teardown | ||
14 | + @license_objects = nil | ||
15 | + end | ||
16 | + | ||
17 | + should "return an empty list" do | ||
18 | + empty_list = [] | ||
19 | + assert_equal [],LibraryHelper.list_libraries(empty_list) | ||
20 | + end | ||
21 | + | ||
22 | + should "return a list with current library objects" do | ||
23 | + list_compare = [] | ||
24 | + assert_equal list_compare.class, LibraryHelper.list_libraries(@license_objects).class | ||
25 | + end | ||
26 | + | ||
27 | + should "have same information from the list passed as parameter" do | ||
28 | + list_compare = LibraryHelper.list_libraries(@license_objects) | ||
29 | + assert_equal @license_objects.first[:name], list_compare.first.name | ||
30 | + end | ||
31 | + | ||
32 | + should "return a list with the same size of the parameter" do | ||
33 | + list_compare = LibraryHelper.list_libraries(@license_objects) | ||
34 | + assert_equal @license_objects.count, list_compare.count | ||
35 | + end | ||
36 | + | ||
37 | + should "return false if list_database are empty or null" do | ||
38 | + list_compare = [] | ||
39 | + assert_equal true, LibraryHelper.valid_list_libraries?(list_compare) | ||
40 | + end | ||
41 | + | ||
42 | + should "return a html text with license name equals to linux" do | ||
43 | + libraries = [] | ||
44 | + | ||
45 | + library_description = Library.new | ||
46 | + library_description.name = "Lib" | ||
47 | + | ||
48 | + libraries << library_description | ||
49 | + | ||
50 | + assert_not_nil LibraryHelper.library_as_tables(libraries).first.call.index("lib") | ||
51 | + end | ||
52 | +end |
@@ -0,0 +1,34 @@ | @@ -0,0 +1,34 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class LibraryValidationTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + @library = Library.new | ||
7 | + @library.name = "name" | ||
8 | + @library.version = "version" | ||
9 | + @library.license = "license" | ||
10 | + end | ||
11 | + | ||
12 | + def teardown | ||
13 | + @Libray = nil | ||
14 | + end | ||
15 | + | ||
16 | + should "Save Libray if all fields are filled" do | ||
17 | + assert @library.save | ||
18 | + end | ||
19 | + | ||
20 | + should "Don't save Library of name are not filed" do | ||
21 | + @library.name = "" | ||
22 | + assert !@library.save | ||
23 | + end | ||
24 | + | ||
25 | + should "Don't save Library of version are not filed" do | ||
26 | + @library.version = "" | ||
27 | + assert !@library.save | ||
28 | + end | ||
29 | + | ||
30 | + should "Don't save Library of license are not filed" do | ||
31 | + @library.license = "" | ||
32 | + assert !@library.save | ||
33 | + end | ||
34 | +end |
@@ -0,0 +1,60 @@ | @@ -0,0 +1,60 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class MpogSoftwarePluginTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + @plugin = MpogSoftwarePlugin.new | ||
7 | + @user = create_user | ||
8 | + @person = @user.person | ||
9 | + end | ||
10 | + | ||
11 | + def teardown | ||
12 | + @user.person.destroy | ||
13 | + @user.destroy | ||
14 | + end | ||
15 | + | ||
16 | + | ||
17 | + should 'be a noosfero plugin' do | ||
18 | + assert_kind_of Noosfero::Plugin, @plugin | ||
19 | + end | ||
20 | + | ||
21 | + should 'calculate the percentege of person incomplete fields' do | ||
22 | + @person.name = "Person Name" | ||
23 | + @person.cell_phone = "76888919" | ||
24 | + | ||
25 | + required_list = ["cell_phone","contact_phone","institution","comercial_phone","country","city","state","organization_website","role","area_interest","image"] | ||
26 | + | ||
27 | + empty_fields = required_list.count - 1 | ||
28 | + test_percentege = (empty_fields * 100) / required_list.count | ||
29 | + | ||
30 | + plugin_percentege = @plugin.calc_percentage_registration(@person) | ||
31 | + | ||
32 | + assert_equal(test_percentege, plugin_percentege) | ||
33 | + end | ||
34 | + | ||
35 | + should 'return message with percentege of incomplete registration' do | ||
36 | + @user.person.name = "Person Name" | ||
37 | + @user.person.cell_phone = "76888919" | ||
38 | + | ||
39 | + plugin_percentege = @plugin.calc_percentage_registration(@user.person) | ||
40 | + | ||
41 | + expected_result = "Registration " + plugin_percentege.to_s + "% incomplete "; | ||
42 | + plugin_result = @plugin.incomplete_registration({:user => @user}) | ||
43 | + | ||
44 | + assert_equal(expected_result, plugin_result) | ||
45 | + end | ||
46 | + | ||
47 | + private | ||
48 | + | ||
49 | + def create_user | ||
50 | + user = User.new | ||
51 | + user.login = "login" | ||
52 | + user.email = "user@email.com" | ||
53 | + user.password = "123456" | ||
54 | + user.password_confirmation = "123456" | ||
55 | + user.secondary_email = "user@secondary_email.com" | ||
56 | + user.save | ||
57 | + user.person.save | ||
58 | + user | ||
59 | + end | ||
60 | +end |
@@ -0,0 +1,121 @@ | @@ -0,0 +1,121 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class MpogSoftwarePluginUserTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + should 'not save user whose both email and secondary email are the same' do | ||
6 | + | ||
7 | + user = fast_create(User) | ||
8 | + user.email = "test@email.com" | ||
9 | + user.secondary_email = "test@email.com" | ||
10 | + | ||
11 | + assert !user.save | ||
12 | + end | ||
13 | + | ||
14 | + should 'not save user whose both email and secondary email have already been used' do | ||
15 | + user1 = create_default_user | ||
16 | + user2 = fast_create(User) | ||
17 | + | ||
18 | + user2.email = "primary@email.com" | ||
19 | + user2.secondary_email = "secondary@email.com" | ||
20 | + assert !user2.save | ||
21 | + end | ||
22 | + | ||
23 | + should 'not save user whose email has already been used' do | ||
24 | + user1 = create_default_user | ||
25 | + user2 = fast_create(User) | ||
26 | + | ||
27 | + user2.email = "primary@email.com" | ||
28 | + user2.secondary_email = "noosfero@email.com" | ||
29 | + assert !user2.save | ||
30 | + end | ||
31 | + | ||
32 | + should 'not save user whose email has already been used in another users secondary email' do | ||
33 | + user1 = create_default_user | ||
34 | + user2 = fast_create(User) | ||
35 | + | ||
36 | + user2.login = "another-login" | ||
37 | + user2.email = "secondary@email.com" | ||
38 | + user2.secondary_email = "noosfero@email.com" | ||
39 | + assert !user2.save | ||
40 | + end | ||
41 | + | ||
42 | + should 'not save user whose secondary email has already been used in another users email' do | ||
43 | + user1 = create_default_user | ||
44 | + user2 = fast_create(User) | ||
45 | + | ||
46 | + user2.login = "another-login" | ||
47 | + user2.email = "noosfero@email.com" | ||
48 | + user2.secondary_email = "primary@email.com" | ||
49 | + assert !user2.save | ||
50 | + end | ||
51 | + | ||
52 | + should 'not save user whose secondary email has already been used in another users secondary email' do | ||
53 | + user1 = create_default_user | ||
54 | + user2 = fast_create(User) | ||
55 | + | ||
56 | + user2.login = "another-login" | ||
57 | + user2.email = "noosfero@email.com" | ||
58 | + user2.secondary_email = "secondary@email.com" | ||
59 | + assert !user2.save | ||
60 | + end | ||
61 | + | ||
62 | + should 'not save user whose secondary email is in the wrong format' do | ||
63 | + user = fast_create(User) | ||
64 | + user.email = "test@email.com" | ||
65 | + user.secondary_email = "notarightformat.com" | ||
66 | + | ||
67 | + assert !user.save | ||
68 | + | ||
69 | + user.secondary_email = "not@arightformatcom" | ||
70 | + | ||
71 | + assert !user.save | ||
72 | + end | ||
73 | + | ||
74 | + should 'return an error if secondary email is governmental and primary is not' do | ||
75 | + user = fast_create(User) | ||
76 | + | ||
77 | + user.email = "test@email.com" | ||
78 | + user.secondary_email = "test@gov.br" | ||
79 | + | ||
80 | + assert !user.save | ||
81 | + assert user.errors.full_messages.include?("The governamental email must be the primary one.") | ||
82 | + end | ||
83 | + | ||
84 | + should 'have institution if email is governmental' do | ||
85 | + user = fast_create(User) | ||
86 | + | ||
87 | + user.email = "test@gov.br" | ||
88 | + user.role = "Developer" | ||
89 | + | ||
90 | + user.institution = nil | ||
91 | + assert !user.save | ||
92 | + | ||
93 | + user.institution = Institution::new(:name=>"Test Other institution") | ||
94 | + assert user.save | ||
95 | + end | ||
96 | + | ||
97 | + should 'have role if email is governmental' do | ||
98 | + user = fast_create(User) | ||
99 | + | ||
100 | + user.email = "test@gov.br" | ||
101 | + user.institution = Institution::new(:name=>"Test Other institution") | ||
102 | + | ||
103 | + user.role = nil | ||
104 | + assert !user.save | ||
105 | + | ||
106 | + user.role = "Developer" | ||
107 | + assert user.save | ||
108 | + end | ||
109 | + | ||
110 | + private | ||
111 | + | ||
112 | + def create_default_user | ||
113 | + user = fast_create(User) | ||
114 | + user.login = "a-login" | ||
115 | + user.email = "primary@email.com" | ||
116 | + user.secondary_email = "secondary@email.com" | ||
117 | + user.save | ||
118 | + | ||
119 | + return user | ||
120 | + end | ||
121 | +end |
@@ -0,0 +1,41 @@ | @@ -0,0 +1,41 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class MpogSoftwarePluginValidationTest < ActiveSupport::TestCase | ||
4 | + def setup | ||
5 | + @plugin = MpogSoftwarePlugin.new | ||
6 | + institution = Institution::new(:name => "Test institution") | ||
7 | + institution.save | ||
8 | + @user = fast_create(User) | ||
9 | + @user.institution = institution | ||
10 | + end | ||
11 | + | ||
12 | + def teardown | ||
13 | + @plugin = nil | ||
14 | + @user = nil | ||
15 | + end | ||
16 | + | ||
17 | + should 'be a noosfero plugin' do | ||
18 | + assert_kind_of Noosfero::Plugin, @plugin | ||
19 | + end | ||
20 | + | ||
21 | + should 'return true when the email has gov.br,jus.br,leg.br or mp.br as sufix and role its not empty' do | ||
22 | + @user.secondary_email = "test_email2@net.br" | ||
23 | + @user.email = "test_email@jus.br" | ||
24 | + @user.role = "Team" | ||
25 | + assert @user.save | ||
26 | + end | ||
27 | + | ||
28 | + should 'return false when the email has gov.br,jus.br,leg.br or mp.br as sufix and role its empty' do | ||
29 | + @user.role = "" | ||
30 | + @user.secondary_email = "test_email@leg.br" | ||
31 | + @user.email = "test_email@mp.br" | ||
32 | + assert !@user.save | ||
33 | + end | ||
34 | + | ||
35 | + should 'return true when the email has not gov.br,jus.br,leg.br or mp.br' do | ||
36 | + @user.role = "" | ||
37 | + @user.secondary_email = "test_email@com.br" | ||
38 | + @user.email = "test_email@net.br" | ||
39 | + assert @user.save | ||
40 | + end | ||
41 | +end |
@@ -0,0 +1,61 @@ | @@ -0,0 +1,61 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +OperatingSystemName.create(:name=>"Debina") | ||
4 | +OperatingSystemName.create(:name=>"Fedora") | ||
5 | +OperatingSystemName.create(:name=>"CentOS") | ||
6 | + | ||
7 | +class OperatingSystemHelperTest < ActiveSupport::TestCase | ||
8 | + | ||
9 | + include OperatingSystemHelper | ||
10 | + | ||
11 | + def setup | ||
12 | + @operating_system_objects = [{:operating_system_name_id => "1" ,:version => "2.0"}, | ||
13 | + {:operating_system_name_id => "2" ,"version" => "2.1"}, | ||
14 | + {:operating_system_name_id => "3" ,"version" => "2.2"}] | ||
15 | + @operating_system_objects | ||
16 | + end | ||
17 | + | ||
18 | + def teardown | ||
19 | + @database_objects = nil | ||
20 | + end | ||
21 | + | ||
22 | + should "return an empty list" do | ||
23 | + empty_list = [] | ||
24 | + assert_equal [],OperatingSystemHelper.list_operating_system(empty_list) | ||
25 | + end | ||
26 | + | ||
27 | + should "return a list with current OperatingSystems" do | ||
28 | + list_compare = [] | ||
29 | + assert_equal list_compare.class, OperatingSystemHelper.list_operating_system(@operating_system_objects).class | ||
30 | + end | ||
31 | + | ||
32 | + should "have same information from the list passed as parameter" do | ||
33 | + list_compare = OperatingSystemHelper.list_operating_system(@operating_system_objects) | ||
34 | + assert_equal @operating_system_objects.first[:operating_system_name_id], list_compare.first.operating_system_name_id.to_s | ||
35 | + end | ||
36 | + | ||
37 | + should "return a list with the same size of the parameter" do | ||
38 | + list_compare = OperatingSystemHelper.list_operating_system(@operating_system_objects) | ||
39 | + assert_equal @operating_system_objects.count, list_compare.count | ||
40 | + end | ||
41 | + | ||
42 | + should "return false if list_operating_system are empty or null" do | ||
43 | + list_compare = [] | ||
44 | + assert_equal false,OperatingSystemHelper.valid_list_operating_system?(list_compare) | ||
45 | + end | ||
46 | + | ||
47 | + should "return a html text with operating system" do | ||
48 | + operating_systems = [] | ||
49 | + | ||
50 | + operating_system = OperatingSystemName.new | ||
51 | + operating_system.name = "teste" | ||
52 | + | ||
53 | + software_operating_system = OperatingSystem.new | ||
54 | + software_operating_system.version = 2 | ||
55 | + software_operating_system.operating_system_name = operating_system | ||
56 | + | ||
57 | + operating_systems << software_operating_system | ||
58 | + | ||
59 | + assert_not_nil OperatingSystemHelper.operating_system_as_tables(operating_systems).first.call.index(OperatingSystemName.first.name) | ||
60 | + end | ||
61 | +end |
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class OperatingSystemValidationTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + operating_system_name = OperatingSystemName::new :name=>"Linux" | ||
7 | + @operating_system = OperatingSystem::new :version=>"3.0" | ||
8 | + @operating_system.operating_system_name = operating_system_name | ||
9 | + @operating_system | ||
10 | + end | ||
11 | + | ||
12 | + should "save OperatingSystem if all fields are filled" do | ||
13 | + assert @operating_system.save | ||
14 | + end | ||
15 | + | ||
16 | + should "not save if OperatingSystem does not have version" do | ||
17 | + @operating_system.version = " " | ||
18 | + assert !@operating_system.save | ||
19 | + end | ||
20 | + | ||
21 | + should "not save if OperatingSystem does not have operating_system_name" do | ||
22 | + @operating_system.operating_system_name = nil | ||
23 | + assert !@operating_system.save | ||
24 | + end | ||
25 | + | ||
26 | +end |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class PrivateInstitutionTest < ActiveSupport::TestCase | ||
4 | + def setup | ||
5 | + @institution = PrivateInstitution::new :name=>"Simple Private Institution", | ||
6 | + :cnpj=>"00.000.000/0001-00" | ||
7 | + end | ||
8 | + | ||
9 | + should "not save without a cnpj" do | ||
10 | + @institution.cnpj = nil | ||
11 | + | ||
12 | + assert !@institution.save | ||
13 | + assert @institution.errors.full_messages.include? "Cnpj can't be blank" | ||
14 | + end | ||
15 | + | ||
16 | + should "not save with a repeated cnpj" do | ||
17 | + assert @institution.save | ||
18 | + | ||
19 | + sec_institution = PrivateInstitution::new :name=>"Another Private Institution", | ||
20 | + :cnpj=>"00.000.000/0001-00" | ||
21 | + | ||
22 | + assert !sec_institution.save | ||
23 | + assert sec_institution.errors.full_messages.include? "Cnpj has already been taken" | ||
24 | + end | ||
25 | +end | ||
0 | \ No newline at end of file | 26 | \ No newline at end of file |
@@ -0,0 +1,38 @@ | @@ -0,0 +1,38 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class PublicInstitutionTest < ActiveSupport::TestCase | ||
4 | + def setup | ||
5 | + govPower = GovernmentalPower.create(:name=>"Some Gov Power") | ||
6 | + govSphere = GovernmentalSphere.create(:name=>"Some Gov Sphere") | ||
7 | + | ||
8 | + @institution = PublicInstitution::new :name=>"Simple Public Institution", :acronym=>"SPI", | ||
9 | + :governmental_power=>govPower, :governmental_sphere=>govSphere | ||
10 | + end | ||
11 | + | ||
12 | + should "save without a cnpj" do | ||
13 | + @institution.cnpj = nil | ||
14 | + | ||
15 | + assert @institution.save | ||
16 | + end | ||
17 | + | ||
18 | + should "Not save institution without an acronym" do | ||
19 | + @institution.acronym = nil | ||
20 | + | ||
21 | + assert !@institution.save | ||
22 | + assert @institution.errors.full_messages.include? "Acronym can't be blank" | ||
23 | + end | ||
24 | + | ||
25 | + should "Not save institution without a governmental_power" do | ||
26 | + @institution.governmental_power = nil | ||
27 | + | ||
28 | + assert !@institution.save | ||
29 | + assert @institution.errors.full_messages.include? "Governmental power can't be blank" | ||
30 | + end | ||
31 | + | ||
32 | + should "Not save institution without a governmental_sphere" do | ||
33 | + @institution.governmental_sphere = nil | ||
34 | + | ||
35 | + assert !@institution.save | ||
36 | + assert @institution.errors.full_messages.include? "Governmental sphere can't be blank" | ||
37 | + end | ||
38 | +end | ||
0 | \ No newline at end of file | 39 | \ No newline at end of file |
@@ -0,0 +1,64 @@ | @@ -0,0 +1,64 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class SearchPersonTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + create_person("Jose_Augusto", "DF", "Gama", "jose_augusto@email.com") | ||
7 | + create_person("Maria_cunha", "RJ", "Rio de Janeiro", "maria_cunha@email.com") | ||
8 | + create_person("Joao_da_silva_costa_cunha", "RJ", "Rio de Janeiro", "joao_da_silva_costa_cunha@gemail.com") | ||
9 | + end | ||
10 | + | ||
11 | + should "Find people with Jo in name" do | ||
12 | + people_list = Person.search("Jo") | ||
13 | + | ||
14 | + assert_equal 2, people_list.count | ||
15 | + end | ||
16 | + | ||
17 | + should "Find people with RJ in state" do | ||
18 | + people_list = Person.search("", "RJ") | ||
19 | + | ||
20 | + assert_equal 2, people_list.count | ||
21 | + end | ||
22 | + | ||
23 | + should "Find people with Gama in city" do | ||
24 | + people_list = Person.search("", "", "Gama") | ||
25 | + | ||
26 | + assert_equal 1, people_list.count | ||
27 | + end | ||
28 | + | ||
29 | + should "Find people with jose in email" do | ||
30 | + people_list = Person.search("", "", "", "jose") | ||
31 | + | ||
32 | + assert_equal 1, people_list.count | ||
33 | + end | ||
34 | + | ||
35 | + should "Find people with Jo in name and j in email" do | ||
36 | + people_list = Person.search("Jo", "", "", "j") | ||
37 | + | ||
38 | + assert_equal 2, people_list.count | ||
39 | + end | ||
40 | + | ||
41 | + should "Find people with Ma in name and RJ in state and Rio in city and ma in email" do | ||
42 | + people_list = Person.search("Ma", "RJ", "Rio", "ma") | ||
43 | + | ||
44 | + assert_equal 1, people_list.count | ||
45 | + end | ||
46 | + | ||
47 | + def create_person name, state, city, email | ||
48 | + user = User::new | ||
49 | + user.login = name.downcase | ||
50 | + user.email = email | ||
51 | + user.secondary_email = "#{name}_secondary@email2.com" | ||
52 | + user.password = "adlasdasd" | ||
53 | + user.password_confirmation = "adlasdasd" | ||
54 | + user.save! | ||
55 | + | ||
56 | + user.person.name = name | ||
57 | + user.person.state = state | ||
58 | + user.person.city = city | ||
59 | + user.person.save! | ||
60 | + | ||
61 | + user.save! | ||
62 | + end | ||
63 | + | ||
64 | +end | ||
0 | \ No newline at end of file | 65 | \ No newline at end of file |
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class SoftwareHelperTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + include SoftwareHelper | ||
6 | + | ||
7 | + should "Create ProgrammingLanguages based on file with languages names" do | ||
8 | + ProgrammingLanguage.delete_all | ||
9 | + SoftwareHelper.create_list_with_file("plugins/mpog_software/public/static/languages.txt", ProgrammingLanguage) | ||
10 | + | ||
11 | + list = File.open("plugins/mpog_software/public/static/languages.txt", "r") | ||
12 | + count = list.readlines.count | ||
13 | + list.close | ||
14 | + | ||
15 | + assert(ProgrammingLanguage.count == count) | ||
16 | + end | ||
17 | + | ||
18 | +end |
@@ -0,0 +1,47 @@ | @@ -0,0 +1,47 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class SoftwareInfoValidationTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + @community = fast_create(Community) | ||
7 | + @language = ProgrammingLanguage.new(:name => 'C++') | ||
8 | + @language.save | ||
9 | + @software_language = SoftwareLanguage.new(:version => '1', :operating_system => 'os') | ||
10 | + @software_language.programming_language = @language | ||
11 | + @software_language.save | ||
12 | + | ||
13 | + @database = DatabaseDescription.new(:name => 'Oracle') | ||
14 | + @database.save | ||
15 | + @software_database = SoftwareDatabase.new(:version => '2', :operating_system => 'os2') | ||
16 | + @software_database.database_description = @database | ||
17 | + @software_database.save | ||
18 | + @software_info = SoftwareInfo.new(:community_id=>1, :acronym => "SFTW", :e_mag => true,:icp_brasil => true,:intern => true,:e_ping => true, | ||
19 | + :e_arq => true,:name => true,:operating_platform => true,:objectives => "",:features => "") | ||
20 | + @software_info.software_languages << @software_language | ||
21 | + @software_info.software_databases << @software_database | ||
22 | + end | ||
23 | + | ||
24 | + should 'Save SoftwareInfo if all fields are filled' do | ||
25 | + assert_equal true, @software_info.save | ||
26 | + end | ||
27 | + | ||
28 | + should 'Not save SoftwareInfo if operating_platform is blank' do | ||
29 | + @software_info.operating_platform = '' | ||
30 | + assert_equal false, @software_info.save | ||
31 | + end | ||
32 | + | ||
33 | + should 'Save SoftwareInfo without demonstration_url be filled' do | ||
34 | + @software_info.demonstration_url = '' | ||
35 | + assert_equal true, @software_info.save | ||
36 | + end | ||
37 | + | ||
38 | + should "Not save SoftwareInfo if acronym is blank" do | ||
39 | + @software_info.acronym = "" | ||
40 | + assert_equal false, @software_info.save | ||
41 | + end | ||
42 | + | ||
43 | + should "Not save SoftwareInfo if acronym has more than 8 characters" do | ||
44 | + @software_info.acronym = "123456789" | ||
45 | + assert_equal false, @software_info.save | ||
46 | + end | ||
47 | +end |
@@ -0,0 +1,63 @@ | @@ -0,0 +1,63 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class SoftwareLanguageValidationTest < ActiveSupport::TestCase | ||
4 | + def setup | ||
5 | + create_programming_language | ||
6 | + @software_info = create_software_info | ||
7 | + @software_info.save | ||
8 | + end | ||
9 | + | ||
10 | + should "Save SoftwareLanguage if version and programming_language are filled" do | ||
11 | + @software_language = create_software_language | ||
12 | + assert_equal true, @software_language.save | ||
13 | + end | ||
14 | + | ||
15 | + should "Don't save SoftwareLanguage if programming_language is not filed" do | ||
16 | + @software_language = create_software_language | ||
17 | + @software_language.programming_language = nil | ||
18 | + assert_equal true, !@software_language.save | ||
19 | + end | ||
20 | + | ||
21 | + should "Don't save SoftwareLanguage if version is not filed" do | ||
22 | + @software_language = create_software_language | ||
23 | + @software_language.version = "" | ||
24 | + assert_equal true, !@software_language.save | ||
25 | + end | ||
26 | + | ||
27 | + should "Save SoftwareLanguage if operating_system is not filed" do | ||
28 | + @software_language = create_software_language | ||
29 | + @software_language.operating_system = "" | ||
30 | + assert_equal false, @software_language.save | ||
31 | + end | ||
32 | + | ||
33 | + private | ||
34 | + | ||
35 | + def create_software_language | ||
36 | + software_language = SoftwareLanguage.new | ||
37 | + software_language.software_info = @software_info | ||
38 | + software_language.programming_language = ProgrammingLanguage.last | ||
39 | + software_language.version = "version" | ||
40 | + software_language.operating_system = "GNU/Linux" | ||
41 | + software_language | ||
42 | + end | ||
43 | + | ||
44 | + def create_software_info | ||
45 | + software_info = SoftwareInfo.new | ||
46 | + software_info.community_id = fast_create(Community).id | ||
47 | + software_info.e_mag = true | ||
48 | + software_info.icp_brasil = true | ||
49 | + software_info.intern = true | ||
50 | + software_info.e_ping = true | ||
51 | + software_info.e_arq = true | ||
52 | + software_info.name = true | ||
53 | + software_info.operating_platform = true | ||
54 | + software_info | ||
55 | + end | ||
56 | + | ||
57 | + def create_programming_language | ||
58 | + ProgrammingLanguage.create(:name=>"C") | ||
59 | + ProgrammingLanguage.create(:name=>"C++") | ||
60 | + ProgrammingLanguage.create(:name=>"Ruby") | ||
61 | + ProgrammingLanguage.create(:name=>"Python") | ||
62 | + end | ||
63 | +end | ||
0 | \ No newline at end of file | 64 | \ No newline at end of file |
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
1 | +<h2><%= _('Institution Information') %></h2> | ||
2 | + | ||
3 | +<div class="formfield type-text"> | ||
4 | + <%= labelled_text_field(_("CNPJ"), 'institution[cnpj]', context.profile.institution.cnpj, :class=>"formlabel") %> | ||
5 | +</div> | ||
6 | + | ||
7 | +<span class='required-field'> | ||
8 | +<div class="formfield type-text"> | ||
9 | + <% if context.profile.institution.type == "PublicInstitution" %> | ||
10 | + <%= labelled_text_field(_("Acronym"), "institution[acronym]", context.profile.institution.acronym, :class=>"formlabel") %> | ||
11 | + <% else %> | ||
12 | + <%= labelled_text_field(_("Fantasy name"), "institution[acronym]", context.profile.institution.acronym, :class=>"formlabel") %> | ||
13 | + <% end %> | ||
14 | +</div> | ||
15 | +</span> | ||
16 | + | ||
17 | +<% if context.profile.institution.type == "PublicInstitution" %> | ||
18 | + <span class='public-institutions-fields'> | ||
19 | + <div class="formfield type-select"> | ||
20 | + <%= label_tag('governmental_power', _("Governmental Power")) %> | ||
21 | + <%= select_tag(:governmental_power, options_for_select(GovernmentalPower.all.map {|g| [g.name, g.id]}, :selected => context.profile.institution.governmental_power_id), :class=>"formlabel") %> | ||
22 | + </div> | ||
23 | + </span> | ||
24 | + | ||
25 | + <span class= 'public-institutions-fields'> | ||
26 | + <div class="formfield type-select"> | ||
27 | + <%= label_tag('governmental_sphere', _("Governmental Sphere")) %> | ||
28 | + <%= select_tag(:governmental_sphere, options_for_select(GovernmentalSphere.all.map {|s| [s.name, s.id]}, :selected => context.profile.institution.governmental_sphere_id), :class=>"formlabel") %> | ||
29 | + </div> | ||
30 | + </span> | ||
31 | +<% end %> | ||
0 | \ No newline at end of file | 32 | \ No newline at end of file |
@@ -0,0 +1,5 @@ | @@ -0,0 +1,5 @@ | ||
1 | +<% button_bar do %> | ||
2 | + <%= button :'text-plain', _('Software list as [CSV]'), :action => 'download.csv' %> | ||
3 | + <%= button :'text-html', _('Software list as [XML]'), :action => 'download.xml' %> | ||
4 | + <%= button :back, _('Back'), :controller => 'admin_panel' %> | ||
5 | +<% end %> | ||
0 | \ No newline at end of file | 6 | \ No newline at end of file |
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
1 | +<div class="environment-softwares-results-header"> | ||
2 | + <div style="clear: both"></div> | ||
3 | +</div> | ||
4 | + | ||
5 | +<table> | ||
6 | + <colgroup> | ||
7 | + <col width="80%"> | ||
8 | + <col width="20%"> | ||
9 | + </colgroup> | ||
10 | + <tr> | ||
11 | + <th><%= _('Software') %></th> | ||
12 | + <th><%= _('Actions') %></th> | ||
13 | + </tr> | ||
14 | + <% @collection.each do |s| %> | ||
15 | + <tr title="<%= s.name %>"> | ||
16 | + <td><%= link_to_profile s.short_name, s.identifier, :title => s.name %> </td> | ||
17 | + <td class='actions'> | ||
18 | + <div class="members-buttons-cell"> | ||
19 | + <% if !s.visible? %> | ||
20 | + <%= button_without_text :'activate-user', _('Activate Software'), {:action => 'activate', :id => s, :q => @q}, :filter => @filter, :confirm => _("Do you want to activate this software?") %> | ||
21 | + <% else %> | ||
22 | + <%= button_without_text :'deactivate-user', _('Deactivate software'), {:action => 'deactivate', :id => s, :q => @q,:from_profile => false}, :filter => @filter, :confirm => _("Do you want to deactivate this software?") %> | ||
23 | + <% end %> | ||
24 | + <%= button_without_text :'delete', _('Remove'), {:action => :destroy_user, :id => s, :q => @q}, :method => :post, :filter => @filter, :confirm => _("Do you want to remove this software?") %> | ||
25 | + </div> | ||
26 | + </td> | ||
27 | + </tr> | ||
28 | + <% end %> | ||
29 | +</table> | ||
30 | + | ||
31 | +<%= pagination_links @collection, {:param_name => 'npage', :page_links => true} %> |
views/mpog_software_plugin/_softwares_search_form.html.erb
0 → 100644
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +<h1><%= _('Manage softwares') %></h1> | ||
2 | + | ||
3 | +<%= form_tag( { :action => 'archive_software' }, :method => 'get', :class => 'users-search' ) do %> | ||
4 | + | ||
5 | +<div id="search-softwares"> | ||
6 | + <%= render :partial => 'softwares_search_form' %> | ||
7 | +</div> | ||
8 | +<div id="softwares-list"> | ||
9 | + <%= render :partial => 'software_list' %> | ||
10 | +</div> | ||
11 | +<% end %> | ||
12 | + | ||
13 | +<%= render :partial => 'index_buttons' %> | ||
0 | \ No newline at end of file | 14 | \ No newline at end of file |
@@ -0,0 +1,79 @@ | @@ -0,0 +1,79 @@ | ||
1 | +<h1><%= _('New Institution') %></h1> | ||
2 | + | ||
3 | +<% if environment.enabled?('admin_must_approve_new_communities') %> | ||
4 | + <div class='explanation'> | ||
5 | + <%= _("Note that the creation of communities in this environment is restricted. Your request to create this new community will be sent to %{environment} administrators and will be approved or rejected according to their methods and criteria.") % { :environment => environment.name }%> | ||
6 | + </div> | ||
7 | +<%end %> | ||
8 | + | ||
9 | +<% unless @errors.blank? %> | ||
10 | +<div class="errorExplanation" id="errorExplanation"> | ||
11 | + <h2> <%= _("Can`t create new Institution: #{@errors.length} errors") %> </h2> | ||
12 | + <ul> | ||
13 | + <% @errors.each do |error| %> | ||
14 | + <li> <%= error %> </li> | ||
15 | + <% end %> | ||
16 | + </ul> | ||
17 | +</div> | ||
18 | +<% end %> | ||
19 | + | ||
20 | +<div id = 'create_institution_errors' class='errorExplanation hide-field'></div> | ||
21 | + | ||
22 | +<div> | ||
23 | + <%= labelled_form_for :community, :html => { :multipart => true, :id=>"institution_form" } do |f| %> | ||
24 | + <%= required f.text_field(:name) %> | ||
25 | + <%= content_tag :span, _("Institution name already exists"), :id=>"already_exists_text", :class=>"errorExplanation hide-field" %> | ||
26 | + | ||
27 | + <%= fields_for :institutions do |inst| %> | ||
28 | + | ||
29 | + <span class='required-field'> | ||
30 | + <div class="formfield type-text"> | ||
31 | + <%= inst.label("cnpj" ,_("CNPJ"), :class=>"formlabel") %> | ||
32 | + <%= required inst.text_field(:cnpj) %> | ||
33 | + </div> | ||
34 | + </span> | ||
35 | + | ||
36 | + <span class=''> | ||
37 | + <div class='formfield type-radio'> | ||
38 | + <%= label_tag("type_PublicInstitution", _("Public Institution")) %> | ||
39 | + <%= radio_button_tag(:type,"PublicInstitution", true)%> | ||
40 | + <%= label_tag("type_PrivateInstitution", _("Private Institution")) %> | ||
41 | + <%= radio_button_tag(:type,"PrivateInstitution")%> | ||
42 | + </div> | ||
43 | + </span> | ||
44 | + | ||
45 | + <span class='required-field'> | ||
46 | + <div class="formfield type-text"> | ||
47 | + <%= hidden_field_tag "acronym_translate", _("Acronym") %> | ||
48 | + <%= hidden_field_tag "fantasy_name_translate", _("Fantasy name") %> | ||
49 | + <%= inst.label("acronym" ,_("Acronym"), :class=>"formlabel") %> | ||
50 | + <%= required inst.text_field(:acronym) %> | ||
51 | + </div> | ||
52 | + </span> | ||
53 | + | ||
54 | + <span class='required-field public-institutions-fields'> | ||
55 | + <div class="formfield type-text"> | ||
56 | + <%= inst.label("governmental_power_id" ,_("Governmental Power:"), :class=>"formlabel") %> | ||
57 | + <%= inst.select(:governmental_power, [[_("Select a Governmental Power"), 0]]|GovernmentalPower.all.map {|g| [g.name, g.id]}, {:selected=>0})%> | ||
58 | + </div> | ||
59 | + </span> | ||
60 | + | ||
61 | + <span class='required-field public-institutions-fields'> | ||
62 | + <div class="formfield type-text"> | ||
63 | + <%= inst.label("governmental_sphere_id" ,_("Governmental Sphere:"), :class=>"formlabel") %> | ||
64 | + <%= inst.select(:governmental_sphere, [[_("Select a Governmental Sphere"), 0]]|GovernmentalSphere.all.map {|s| [s.name, s.id]}, {:selected=>0})%> | ||
65 | + </div> | ||
66 | + </span> | ||
67 | + | ||
68 | + <br /> | ||
69 | + | ||
70 | + <div> | ||
71 | + <p><%= recaptcha_tags :ajax => true, :display => {:theme => 'clean'} %> </p> | ||
72 | + <%= link_to(_('Save'), '#', :id=>'save_institution_button', :class=>'button with-text icon-add') %> | ||
73 | + </div> | ||
74 | + <%= hidden_field_tag :institution_error_message, _("Could not send the form data to the server") %> | ||
75 | + <% end %> | ||
76 | + | ||
77 | + <% end %> | ||
78 | +</div> | ||
79 | +<%= hidden_field_tag :loading_message, _("Creating institution") %> | ||
0 | \ No newline at end of file | 80 | \ No newline at end of file |
views/mpog_software_plugin_myprofile/_database_fields.html.erb
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
1 | +<%= fields_for :database_description, @database_description do |db| %> | ||
2 | + | ||
3 | +<div id='databases'> | ||
4 | + <% DatabaseHelper.database_as_tables(database).each do |tab| %> | ||
5 | + <%= tab.call %> | ||
6 | + <%end%> | ||
7 | +</div> | ||
8 | + | ||
9 | +<div id='table_structure_databases' style="display:none"><%= DatabaseHelper.add_dynamic_table %></div> | ||
10 | +<%= link_to _('New Database'), "#", :class=>"button icon-add with-text new-dynamic-table dynamic-databases"%> | ||
11 | +<% end %> |
views/mpog_software_plugin_myprofile/_language_fields.html.erb
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
1 | +<%= fields_for :software_language, @software_language do |lng| %> | ||
2 | + | ||
3 | +<div id='languages'> | ||
4 | + <% SoftwareLanguageHelper.language_as_tables(languages).each do |tab| %> | ||
5 | + <%= tab.call %> | ||
6 | + <%end%> | ||
7 | +</div> | ||
8 | + | ||
9 | +<div id='table_structure_languages' style="display:none"><%= SoftwareLanguageHelper.add_dynamic_table %></div> | ||
10 | +<%= link_to _('New language'), "#", :class=>"button icon-add with-text new-dynamic-table dynamic-languages"%> | ||
11 | +<% end %> | ||
0 | \ No newline at end of file | 12 | \ No newline at end of file |
views/mpog_software_plugin_myprofile/_library_fields.html.erb
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
1 | +<%= fields_for :library ,@library do |lib| %> | ||
2 | + | ||
3 | +<div id='libraries'> | ||
4 | + <% LibraryHelper.library_as_tables(libraries).each do |tab| %> | ||
5 | + <%= tab.call %> | ||
6 | + <% end %> | ||
7 | +</div> | ||
8 | + | ||
9 | +<div id='table_structure_libraries' style="display:none"><%= LibraryHelper.add_dynamic_table %></div> | ||
10 | +<%= link_to _('New Library'), "#", :class=>"button icon-add with-text new-dynamic-table dynamic-libraries"%> | ||
11 | +<% end %> |
views/mpog_software_plugin_myprofile/_operating_system_fields.html.erb
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
1 | +<%= fields_for :operating_systems ,@operating_systems do |lib| %> | ||
2 | + | ||
3 | +<div id='operating_systems'> | ||
4 | + <% OperatingSystemHelper.operating_system_as_tables(operating_systems_fields).each do |tab| %> | ||
5 | + <%= tab.call %> | ||
6 | + <% end %> | ||
7 | +</div> | ||
8 | + | ||
9 | +<div id='table_structure_operating_systems' style="display:none"><%= OperatingSystemHelper.add_dynamic_table %></div> | ||
10 | +<%= link_to _('New Operating System'), "#", :class=>"button icon-add with-text new-dynamic-table dynamic-operating_systems"%> | ||
11 | +<% end %> |
views/mpog_software_plugin_myprofile/new_software.html.erb
0 → 100644
@@ -0,0 +1,254 @@ | @@ -0,0 +1,254 @@ | ||
1 | +<%= javascript_include_tag "mpog-validations" %> | ||
2 | + | ||
3 | +<h1><%= _('Creating new software') %></h1> | ||
4 | + | ||
5 | +<% if environment.enabled?('admin_must_approve_new_communities') %> | ||
6 | + <div class='explanation'> | ||
7 | + <%= _("Note that the creation of communities in this environment is restricted. Your request to create this new community will be sent to %{environment} administrators and will be approved or rejected according to their methods and criteria.") % { :environment => environment.name }%> | ||
8 | + </div> | ||
9 | +<%end %> | ||
10 | + | ||
11 | +<% unless @errors.blank? %> | ||
12 | +<div class="errorExplanation" id="errorExplanation"> | ||
13 | + <h2> <%= _("Can`t create new software: #{@errors.length} errors") %> </h2> | ||
14 | + <ul> | ||
15 | + <% @errors.each do |error| %> | ||
16 | + <li> <%= error %> </li> | ||
17 | + <% end %> | ||
18 | + </ul> | ||
19 | +</div> | ||
20 | +<% end %> | ||
21 | + | ||
22 | +<div> | ||
23 | + <%= labelled_form_for :community, :html => { :multipart => true } do |f| %> | ||
24 | + | ||
25 | + <%= required_fields_message %> | ||
26 | + | ||
27 | + <%= required f.text_field(:name) %> | ||
28 | + | ||
29 | + <%= fields_for @software_info do |swf| %> | ||
30 | + <span class='required-field'> | ||
31 | + <div class="formfield type-text"> | ||
32 | + <%= swf.label("acronym" ,_("Acronym"), :class=>"formlabel") %> | ||
33 | + <%= required swf.text_field(:acronym) %> | ||
34 | + </div> | ||
35 | + </span> | ||
36 | + | ||
37 | + <div class="formfieldline"> | ||
38 | + <%= swf.label _("Adherent to e-PING ?") %> | ||
39 | + | ||
40 | + <%= swf.label "e_ping_true", "Yes" %> | ||
41 | + <%= swf.radio_button(:e_ping,true)%> | ||
42 | + <%= swf.label "e_ping_false", "No"%> | ||
43 | + <%= swf.radio_button(:e_ping,false)%> | ||
44 | + </div> | ||
45 | + | ||
46 | + <div class="formfieldline"> | ||
47 | + <%= swf.label _("Adherent to e-MAG ?") %> | ||
48 | + | ||
49 | + <%= swf.label "e_mag_true", "Yes"%> | ||
50 | + <%= swf.radio_button(:e_mag,true)%> | ||
51 | + <%= swf.label "e_mag_false", "No"%> | ||
52 | + <%= swf.radio_button(:e_mag,false)%> | ||
53 | + </div> | ||
54 | + | ||
55 | + <div class="formfieldline"> | ||
56 | + <%= swf.label _("Adherent to ICP-Brasil ?") %> | ||
57 | + | ||
58 | + <%= swf.label "icp_brasil_true", "Yes"%> | ||
59 | + <%= swf.radio_button(:icp_brasil,true)%> | ||
60 | + <%= swf.label "icp_brasil_false", "No"%> | ||
61 | + <%= swf.radio_button(:icp_brasil,false)%> | ||
62 | + </div> | ||
63 | + | ||
64 | + <div class="formfieldline"> | ||
65 | + <%= swf.label _("Adherent to e-ARQ ?") %> | ||
66 | + | ||
67 | + <%= swf.label "e_arq_true", "Yes"%> | ||
68 | + <%= swf.radio_button(:e_arq,true)%> | ||
69 | + <%= swf.label "e_arq_false", "No"%> | ||
70 | + <%= swf.radio_button(:e_arq,false)%> | ||
71 | + </div> | ||
72 | + | ||
73 | + <div class="formfieldline"> | ||
74 | + <%= swf.label _("Internacionalizable ?") %> | ||
75 | + | ||
76 | + <%= swf.label "intern_true", "Yes" %> | ||
77 | + <%= swf.radio_button(:intern,true)%> | ||
78 | + <%= swf.label "intern_false", "No"%> | ||
79 | + <%= swf.radio_button(:intern,false)%> | ||
80 | + <div class="formfieldline"> | ||
81 | + <%= swf.label "operating_platform", _("Operating Platform: ") %> <br /> | ||
82 | + <%= swf.text_area(:operating_platform, :class=>"expand-field") %> | ||
83 | + </div> | ||
84 | + | ||
85 | + <div class="formfieldline"> | ||
86 | + <%= swf.label "objectives", _("Objectives: ")%><br /> | ||
87 | + <%= swf.text_area(:objectives, :class=>"expand-field") %> | ||
88 | + </div> | ||
89 | + | ||
90 | + <div class="formfieldline"> | ||
91 | + <%= swf.label "features", _("Features: ")%><br /> | ||
92 | + <%= swf.text_area(:features, :class=>"expand-field") %> | ||
93 | + </div> | ||
94 | + | ||
95 | + <div class="formfieldline formfield type-text"> | ||
96 | + <%= swf.label "demonstration_url", _("Demonstration URL: ") %> | ||
97 | + <%= swf.text_field(:demonstration_url) %> | ||
98 | + </div> | ||
99 | + <% end %> | ||
100 | + | ||
101 | + <div id='libraries_fields'> | ||
102 | + <h4> <%= _("Libraries") %> </h4> | ||
103 | + <%= render :partial => 'library_fields', :locals => { :f => f, :object_name => 'community', :profile => @community, :libraries => @list_libraries } %> | ||
104 | + </div> | ||
105 | + <br /> | ||
106 | + | ||
107 | + <div id='operating_system_fields'> | ||
108 | + <h4> <%= _("Operating Systems") %> </h4> | ||
109 | + <% if @list_operating_systems.blank? %> | ||
110 | + <%= OperatingSystemHelper.operating_system_as_tables(nil, false).call %> | ||
111 | + <% end %> | ||
112 | + <%= render :partial => 'operating_system_fields', :locals => { :f => f, :object_name => 'community', :profile => @community, :operating_systems_fields => @list_operating_systems} %> | ||
113 | + </div> | ||
114 | + <br /> | ||
115 | + | ||
116 | + <%= fields_for @license_info do |lcv| %> | ||
117 | + <div class="formfieldline"> | ||
118 | + <h4> <%= lcv.label _("License Version: ") %> | ||
119 | + <%= lcv.select(:version, LicenseInfo.all.map {|l| [l.version, l.id]}, {:selected=>1}, :onchange => "get_license_link('license_info_version')") %> | ||
120 | + </h4> | ||
121 | + <h4> <%= _("License link") %> </h4> | ||
122 | + <% LicenseHelper.getListLicenses.each do | license | %> | ||
123 | + <input type="hidden" id = "version_<%=license.id %>" value = "<%=license.link%>"> | ||
124 | + <% end %> | ||
125 | + <a id = "version_link" href="<%= LicenseInfo.first.link %>" target="_BLANK"> <%=LicenseInfo.first.link %> </a> | ||
126 | + | ||
127 | + </div> | ||
128 | + <% end %> | ||
129 | + | ||
130 | + <br /> | ||
131 | + <div id='programming_languages_fields'> | ||
132 | + <h4> <%= _("Programming languages") %> </h4> | ||
133 | + <% if @list_languages.blank? %> | ||
134 | + <%= SoftwareLanguageHelper.language_as_tables(nil, false).call %> | ||
135 | + <% end %> | ||
136 | + | ||
137 | + <%= render :partial => 'language_fields', :locals => { :f => f, :object_name => 'community', :profile => @community, :languages => @list_languages } %> | ||
138 | + </div> | ||
139 | + | ||
140 | + <br /> | ||
141 | + <div id='database_fields'> | ||
142 | + <h4> <%= _("Databases") %> </h4> | ||
143 | + <% if @list_databases.blank? %> | ||
144 | + <%= DatabaseHelper.database_as_tables(nil, true).call %> | ||
145 | + <% end %> | ||
146 | + | ||
147 | + <%= render :partial => 'database_fields', :locals => { :f => f, :object_name => 'community', :profile => @community, :database => @list_databases } %> | ||
148 | + </div> | ||
149 | + | ||
150 | + <%= fields_for @controlled_vocabulary do |cv| %> | ||
151 | + <div id="controlled_vocabulary_fields"> | ||
152 | + <h4> <%= _("Controlled Vocabulary of E-government") %> </h4> | ||
153 | + | ||
154 | + <%= cv.check_box :administration %> | ||
155 | + <%= cv.label :administration, _("Administration") %><br /> | ||
156 | + | ||
157 | + <%= cv.check_box :agriculture %> | ||
158 | + <%= cv.label :agriculture, _("Agriculture") %><br /> | ||
159 | + | ||
160 | + <%= cv.check_box :business_and_services %> | ||
161 | + <%= cv.label :business_and_services, _("Business_and Services") %><br /> | ||
162 | + | ||
163 | + <%= cv.check_box :communication %> | ||
164 | + <%= cv.label :communication, _("Communication") %><br /> | ||
165 | + | ||
166 | + <%= cv.check_box :culture %> | ||
167 | + <%= cv.label :culture, _("Culture") %><br /> | ||
168 | + | ||
169 | + <%= cv.check_box :national_defense %> | ||
170 | + <%= cv.label :national_defense, _("National Defense") %><br /> | ||
171 | + | ||
172 | + <%= cv.check_box :economy_and_finances %> | ||
173 | + <%= cv.label :economy_and_finances, _("Economy and Finances") %><br /> | ||
174 | + | ||
175 | + <%= cv.check_box :education %> | ||
176 | + <%= cv.label :education, _("Education") %><br /> | ||
177 | + | ||
178 | + <%= cv.check_box :energy %> | ||
179 | + <%= cv.label :energy, _("Energy") %><br /> | ||
180 | + | ||
181 | + <%= cv.check_box :sports %> | ||
182 | + <%= cv.label :sports, _("Sports") %><br /> | ||
183 | + | ||
184 | + <%= cv.check_box :habitation %> | ||
185 | + <%= cv.label :habitation, _("Habitation") %><br /> | ||
186 | + | ||
187 | + <%= cv.check_box :industry %> | ||
188 | + <%= cv.label :industry, _("Industry") %><br /> | ||
189 | + | ||
190 | + <%= cv.check_box :environment %> | ||
191 | + <%= cv.label :environment, _("Environment") %><br /> | ||
192 | + | ||
193 | + <%= cv.check_box :research_and_development %> | ||
194 | + <%= cv.label :research_and_development, _("Research and Development") %><br /> | ||
195 | + | ||
196 | + <%= cv.check_box :social_security %> | ||
197 | + <%= cv.label :social_security, _("Social Security") %><br /> | ||
198 | + | ||
199 | + <%= cv.check_box :social_protection %> | ||
200 | + <%= cv.label :social_protection, _("Social Protection") %><br /> | ||
201 | + | ||
202 | + <%= cv.check_box :sanitation %> | ||
203 | + <%= cv.label :sanitation, _("Sanitation") %><br /> | ||
204 | + | ||
205 | + <%= cv.check_box :health %> | ||
206 | + <%= cv.label :health, _("Health") %><br /> | ||
207 | + | ||
208 | + <%= cv.check_box :security_public_order %> | ||
209 | + <%= cv.label :security_public_order, _("Security and Public Order") %><br /> | ||
210 | + | ||
211 | + <%= cv.check_box :work %> | ||
212 | + <%= cv.label :work, _("Work") %><br /> | ||
213 | + | ||
214 | + <%= cv.check_box :transportation %> | ||
215 | + <%= cv.label :transportation, _("Transportation") %><br /> | ||
216 | + | ||
217 | + <%= cv.check_box :urbanism %> | ||
218 | + <%= cv.label :urbanism, _("Urbanism") %><br /> | ||
219 | + </div> | ||
220 | + <% end %> | ||
221 | + <%= render :partial => 'shared/organization_custom_fields', :locals => { :f => f, :object_name => 'community', :profile => @community } %> | ||
222 | + | ||
223 | + <%= f.fields_for :image_builder, @community.image do |i| %> | ||
224 | + <%= file_field_or_thumbnail(_('Image:'), @community.image, i) %> | ||
225 | + <% end %> | ||
226 | + | ||
227 | + <div style='margin-bottom: 1em; margin-top: 1em;'> | ||
228 | + <%= _('New members must be approved:')%> | ||
229 | + </div> | ||
230 | + <div style='margin-bottom: 0.5em' id='community-join-before'> | ||
231 | + <%= radio_button 'community', 'closed', 'true', :style => 'float: left' %> | ||
232 | + <div style='margin-left: 30px'> | ||
233 | + <%= _('<strong>Before</strong> joining this group (a moderator has to accept the member in pending request before member can access the intranet and/or the website).') %> | ||
234 | + </div> | ||
235 | + </div> | ||
236 | + <div id='community-join-after'> | ||
237 | + <%= radio_button 'community', 'closed', 'false', :style => 'float: left' %> | ||
238 | + <div style='margin-left: 30px'> | ||
239 | + <%= _('<strong>After</strong> joining this group (a moderator can always desactivate access for users later).') %> | ||
240 | + </div> | ||
241 | + </div> | ||
242 | + | ||
243 | + <%= template_options(:communities, 'community')%> | ||
244 | + | ||
245 | + <%= hidden_field_tag('back_to', @back_to) %> | ||
246 | + | ||
247 | + <% button_bar do %> | ||
248 | + <%= submit_button(:save, _('Create')) %> | ||
249 | + <%= button(:cancel, _('Cancel'), @back_to ) %> | ||
250 | + <% end %> | ||
251 | + | ||
252 | + <% end %> | ||
253 | + | ||
254 | +</div> |
@@ -0,0 +1,37 @@ | @@ -0,0 +1,37 @@ | ||
1 | +<div class="formfieldline"> | ||
2 | + <%= label_tag "user[secondary_email]", _('Secondary e-mail')+":", :class=>"formlabel" %> | ||
3 | + | ||
4 | + <div class="formfield type-text"> | ||
5 | + <%= text_field_tag "user[secondary_email]", context.profile.user.secondary_email %> | ||
6 | + </div> | ||
7 | +</div> | ||
8 | + | ||
9 | +<div class="formfieldline"> | ||
10 | + <%= label_tag 'user[role]', _('Your role in the organization'), :class=>"formlabel" %> | ||
11 | + | ||
12 | + <div class="formfield type-text"> | ||
13 | + <%= text_field_tag 'user[role]', context.profile.user.role %> | ||
14 | + </div> | ||
15 | +</div> | ||
16 | + | ||
17 | +<div class="formfieldline"> | ||
18 | + <%= label_tag 'profile_data[area_interest]', _('Areas of Interest'), :class=>"formlabel" %> | ||
19 | + | ||
20 | + <div class="formfield type-text"> | ||
21 | + <%= text_field_tag 'profile_data[area_interest]', context.profile.area_interest %> | ||
22 | + </div> | ||
23 | +</div> | ||
24 | + | ||
25 | +<div class="formfieldline" id="select_institution"> | ||
26 | + <%= label_tag "user[institution_id]", _('Institution'), :class=>"formlabel" %> | ||
27 | + | ||
28 | + <div class="formfield type-text"> | ||
29 | + <%= select_tag "user[institution_id]", options_for_select(Institution.all.map {|i| [i.name, i.id]}, context.profile.institution_id) %> | ||
30 | + </div> | ||
31 | +<script type="text/javascript"> | ||
32 | +jQuery(document).ready(function(){ | ||
33 | + var select = jQuery("#select_institution select"); | ||
34 | + select.append("<option value='-1'><%=_('Other')%></option>"); | ||
35 | +}); | ||
36 | +</script> | ||
37 | +</div> | ||
0 | \ No newline at end of file | 38 | \ No newline at end of file |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +<table> | ||
2 | + <tr> | ||
3 | + <th colspan='2'><%= _('Institution Information')%></th> | ||
4 | + </tr> | ||
5 | + | ||
6 | + <%= display_field(_('Type:'), profile.institution, :type, true) %> | ||
7 | + <%= display_field(_('CNPJ:'), profile.institution, :cnpj, true) %> | ||
8 | + <% if profile.institution.type == "PrivateInstitution"%> | ||
9 | + <%= display_field(_('Fantasy Name:'), profile.institution, :acronym, true) %> | ||
10 | + <% else %> | ||
11 | + <%= display_field(_('Acronym:'), profile.institution, :acronym, true) %> | ||
12 | + <%= display_field(_('Governmental Power:'), profile.institution.governmental_power, :name, true) %> | ||
13 | + <%= display_field(_('Governmental Sphere:'), profile.institution.governmental_sphere, :name, true) %> | ||
14 | + <% end %> | ||
15 | +</table> | ||
0 | \ No newline at end of file | 16 | \ No newline at end of file |
@@ -0,0 +1,10 @@ | @@ -0,0 +1,10 @@ | ||
1 | +<table> | ||
2 | + <tr> | ||
3 | + <th colspan='2'><%= _('Mpog Profile Information')%></th> | ||
4 | + </tr> | ||
5 | + | ||
6 | + <%= display_field(_('Secondary E-mail:'), profile, :secondary_email, true) %> | ||
7 | + <%= display_field(_('Role:'), profile, :role, true) %> | ||
8 | + <%= display_field(_('Areas of Interest:'), profile, :area_interest, true) %> | ||
9 | + <%= display_field(_('Institution:'), profile, :institution, true) %> | ||
10 | +</table> |
@@ -0,0 +1,106 @@ | @@ -0,0 +1,106 @@ | ||
1 | +<%= javascript_include_tag "mpog-validations" %> | ||
2 | +<table> | ||
3 | + <tr> | ||
4 | + <th colspan='2'><%= _('Software Information')%></th> | ||
5 | + </tr> | ||
6 | + | ||
7 | + <%= display_field(_('Name:'), profile, :name, true) %> | ||
8 | + <%= content_tag('tr', content_tag('td', _("Adherent to e_mag:")) + content_tag('td', profile.software_info.e_mag ? _("Yes") : _("No"))) %> | ||
9 | + <%= content_tag('tr', content_tag('td', _("Adherent to icp_brasil:")) + content_tag('td', profile.software_info.icp_brasil ? _("Yes") : _("No"))) %> | ||
10 | + <%= content_tag('tr', content_tag('td', _("Adherent to e_ping:")) + content_tag('td', profile.software_info.e_ping ? _("Yes") : _("No"))) %> | ||
11 | + <%= content_tag('tr', content_tag('td', _("Adherent to e_arq:")) + content_tag('td', profile.software_info.e_arq ? _("Yes") : _("No"))) %> | ||
12 | + <%= content_tag('tr', content_tag('td', _("Internacionalizable:")) + content_tag('td', profile.software_info.intern ? _("Yes") : _("No"))) %> | ||
13 | + <%= display_field(_('Operating Platform:'), profile.software_info, :operating_platform, true) %> | ||
14 | + <%= display_field(_('Demonstration URL:'), profile.software_info, :demonstration_url, true) %> | ||
15 | + <%= display_field(_('Acronym:'), profile.software_info, :acronym, true) %> | ||
16 | + <%= display_field(_('Objectives:'), profile.software_info, :objectives, true) %> | ||
17 | + <%= display_field(_('Features:'), profile.software_info, :features, true) %> | ||
18 | + | ||
19 | + <%= content_tag('tr', content_tag('td', _("License"))) %> | ||
20 | + <%= display_field(_('Version:'), profile.software_info.license_info, :version, true) %> | ||
21 | + <%= display_field(_('Link:'), profile.software_info.license_info, :link, true) %> | ||
22 | +</table> | ||
23 | + | ||
24 | +<table> | ||
25 | + <tr> | ||
26 | + <td><a href="#" class="libraries-button-show button with-text icon-add"><%= _('Show Libraries') %></a> | ||
27 | + <a href="#" class="libraries-button-hide button with-text icon-remove"><%= _('Hide Libraries') %></a> | ||
28 | + </td> | ||
29 | + </tr> | ||
30 | + | ||
31 | + <tr> | ||
32 | + <td> | ||
33 | + <table class = "libraries-info dynamic-table"> | ||
34 | + <%= content_tag('tr', content_tag('td', _("Libraries")) + content_tag('td', '')) %> | ||
35 | + <% profile.software_info.libraries.each do |library| %> | ||
36 | + <%= display_field(_('Name:'), library, :name, true) %> | ||
37 | + <%= display_field(_('Version:'), library, :version, true) %> | ||
38 | + <%= display_field(_('License:'), library, :license, true) %> | ||
39 | + <% end %> | ||
40 | + </table> | ||
41 | + </td> | ||
42 | + </tr> | ||
43 | + | ||
44 | + <tr> | ||
45 | + <td><a href="#" class="database-button-show button with-text icon-add"><%= _('Show Database') %></a> | ||
46 | + <a href="#" class="database-button-hide button with-text icon-remove"><%= _('Hide Database') %></a> | ||
47 | + </td> | ||
48 | + </tr> | ||
49 | + | ||
50 | + <tr> | ||
51 | + <td> | ||
52 | + <table class = "database-info dynamic-table"> | ||
53 | + <%= content_tag('tr', content_tag('td', _("Program Database")) + content_tag('td', '')) %> | ||
54 | + <% profile.software_info.software_databases.each do |database| %> | ||
55 | + <%= display_field(_('Name:'), DatabaseDescription.find(database.database_description_id), :name, true) %> | ||
56 | + <%= display_field(_('Version:'), database, :version, true) %> | ||
57 | + <%= display_field(_('Operating System:'), database, :operating_system, true) %> | ||
58 | + <% end %> | ||
59 | + </table> | ||
60 | + </td> | ||
61 | + </tr> | ||
62 | + | ||
63 | + <tr> | ||
64 | + <td><a href="#" class="language-button-show button with-text icon-add"><%= _('Show Languages') %></a> | ||
65 | + <a href="#" class="language-button-hide button with-text icon-remove"><%= _('Hide Languages') %></a> | ||
66 | + </td> | ||
67 | + </tr> | ||
68 | + | ||
69 | + <tr> | ||
70 | + <td> | ||
71 | + <table class = "language-info dynamic-table"> | ||
72 | + <%= content_tag('tr', content_tag('td', _("Programming Language")) + content_tag('td', '')) %> | ||
73 | + <% profile.software_info.software_languages.each do |language| %> | ||
74 | + <%= display_field(_('Name:'), language.programming_language , :name, true) %> | ||
75 | + <%= display_field(_('Version:'), language, :version, true) %> | ||
76 | + <%= display_field(_('Operating System:'), language, :operating_system, true) %> | ||
77 | + <% end %> | ||
78 | + </table> | ||
79 | + </td> | ||
80 | + </tr> | ||
81 | + | ||
82 | + <tr> | ||
83 | + <td><a href="#" class="operating-system-button-show button with-text icon-add"><%= _('Show Operating Systems') %></a> | ||
84 | + <a href="#" class="operating-system-button-hide button with-text icon-remove"><%= _('Hide Operating Systems') %></a> | ||
85 | + </td> | ||
86 | + </tr> | ||
87 | + | ||
88 | + <tr> | ||
89 | + <td> | ||
90 | + <table class = "operating-system-info dynamic-table"> | ||
91 | + <%= content_tag('tr', content_tag('td', _("Operating System")) + content_tag('td', '')) %> | ||
92 | + <% profile.software_info.operating_systems.each do |operating_system| %> | ||
93 | + <%= display_field(_('Name:'), operating_system.operating_system_name , :name, true) %> | ||
94 | + <%= display_field(_('Version:'), operating_system, :version, true) %> | ||
95 | + <% end %> | ||
96 | + </table> | ||
97 | + </td> | ||
98 | + </tr> | ||
99 | + </tr> | ||
100 | +</table> | ||
101 | + | ||
102 | +<% if profile.admins.include? current_person %> | ||
103 | + <%= label_tag _("Deactivate Software: ") %> | ||
104 | + <%= button_without_text :'deactivate-user', _('Deactivate software'), {:controller => "mpog_software_plugin", :action => 'deactivate', :id => profile.software_info.id, :q => @q, :from_profile => true}, :filter => @filter, :confirm => _("Do you want to deactivate this software?") %> | ||
105 | +<% end %> | ||
106 | + |
@@ -0,0 +1,153 @@ | @@ -0,0 +1,153 @@ | ||
1 | +<h2><%= _('Software Information') %></h2> | ||
2 | + | ||
3 | +<div class="formfieldline formfield type-text"> | ||
4 | + <%= labelled_text_field(_("Acronym"), 'software_info[acronym]', context.profile.software_info.acronym) %> | ||
5 | +</div> | ||
6 | + | ||
7 | +<div class="formfieldline"> | ||
8 | + <%= _("Adherent to e-PING?") %> | ||
9 | + <%= labelled_radio_button(_('Yes'), 'software_info[e_ping]', 'true', context.profile.software_info.e_ping)%> | ||
10 | + <%= labelled_radio_button(_('No'), 'software_info[e_ping]', 'false', !context.profile.software_info.e_ping)%> | ||
11 | +</div> | ||
12 | +<div class="formfieldline"> | ||
13 | + <%= _("Adherent to e-MAG?") %> | ||
14 | + <%= labelled_radio_button(_('Yes'), 'software_info[e_mag]', 'true', context.profile.software_info.e_mag)%> | ||
15 | + <%= labelled_radio_button(_('No'), 'software_info[e_mag]', 'false', !context.profile.software_info.e_mag)%> | ||
16 | +</div> | ||
17 | +<div class="formfieldline"> | ||
18 | + <%= _("Adherent to ICP-Brasil?") %> | ||
19 | + <%= labelled_radio_button(_('Yes'), 'software_info[icp_brasil]', 'true', context.profile.software_info.icp_brasil)%> | ||
20 | + <%= labelled_radio_button(_('No'), 'software_info[icp_brasil]', 'false', !context.profile.software_info.icp_brasil)%> | ||
21 | +</div> | ||
22 | +<div class="formfieldline"> | ||
23 | + <%= _("Adherent to e-ARQ?") %> | ||
24 | + <%= labelled_radio_button(_('Yes'), 'software_info[e_arq]', 'true', context.profile.software_info.e_arq)%> | ||
25 | + <%= labelled_radio_button(_('No'), 'software_info[e_arq]', 'false', !context.profile.software_info.e_arq)%> | ||
26 | +</div> | ||
27 | +<div class="formfieldline"> | ||
28 | + <%= _("Internacionalizable") %> | ||
29 | + <%= labelled_radio_button(_('Yes'), 'software_info[intern]', 'true', context.profile.software_info.intern)%> | ||
30 | + <%= labelled_radio_button(_('No'), 'software_info[intern]', 'false', !context.profile.software_info.intern)%> | ||
31 | +</div> | ||
32 | + | ||
33 | +<div class="formfieldline"> | ||
34 | + <%= label_tag('software_info[operating_platform]', 'Operating Platform:') %> | ||
35 | + <br /> | ||
36 | + <%= text_area_tag('software_info[operating_platform]', context.profile.software_info.operating_platform, :size => '40x20', :class=>"expand-field") %> | ||
37 | +</div> | ||
38 | + | ||
39 | +<div class="formfieldline"> | ||
40 | + <%= label_tag('software_info[objectives]', 'Objectives:') %> | ||
41 | + <br /> | ||
42 | + <%= text_area_tag('software_info[objectives]', context.profile.software_info.objectives, :size => '40x20', :class=>"expand-field") %> | ||
43 | +</div> | ||
44 | + | ||
45 | +<div class="formfieldline"> | ||
46 | + <%= label_tag('software_info[features]', 'Features:') %> | ||
47 | + <br /> | ||
48 | + <%= text_area_tag('software_info[features]', context.profile.software_info.features, :size => '40x20', :class=>"expand-field") %> | ||
49 | +</div> | ||
50 | + | ||
51 | +<div class="formfieldline formfield type-text"> | ||
52 | + <%= labelled_text_field('Demonstration URL', 'software_info[demonstration_url]', context.profile.software_info.demonstration_url) %> | ||
53 | +</div> | ||
54 | + | ||
55 | +<h3> <%= _("Licenses") %> </h3> | ||
56 | +<div id='licenses'> | ||
57 | + <%= select_tag(:version, options_for_select(LicenseHelper.getListLicenses.collect{|l| [l.version, l.id]}, :selected => context.profile.software_info.license_info.id), :onchange => "get_license_link('version')") %> | ||
58 | + <br /> | ||
59 | + | ||
60 | + <h4> <%= _("License link") %> </h4> | ||
61 | + <% LicenseHelper.getListLicenses.each do | license | %> | ||
62 | + <input type="hidden" id = "version_<%=license.id %>" value = "<%=license.link%>"> | ||
63 | + <% end %> | ||
64 | + | ||
65 | + <a id = "version_link" href="<%= context.profile.software_info.license_info.link %>" target="BLANK"> <%= context.profile.software_info.license_info.link %> </a> | ||
66 | +</div> | ||
67 | + | ||
68 | +<h3> <%= _("Libraries") %> </h3> | ||
69 | +<div id='libraries'> | ||
70 | + <% LibraryHelper.library_as_tables(context.profile.software_info.libraries).each do |tab| %> | ||
71 | + <%= tab.call %> | ||
72 | + <%end%> | ||
73 | +</div> | ||
74 | + | ||
75 | +<div id='table_structure_libraries' style="display:none"><%= LibraryHelper.add_dynamic_table %></div> | ||
76 | +<%= link_to _('New Library'), "#", :class=>"button icon-add with-text new-dynamic-table dynamic-libraries"%> | ||
77 | + | ||
78 | +<h3> <%= _("Programming Languages") %> </h3> | ||
79 | +<div id='languages'> | ||
80 | + <% SoftwareLanguageHelper.language_as_tables(context.profile.software_info.software_languages).each do |tab| %> | ||
81 | + <%= tab.call %> | ||
82 | + <%end%> | ||
83 | +</div> | ||
84 | + | ||
85 | +<div id='table_structure_languages' style="display:none"><%= SoftwareLanguageHelper.add_dynamic_table %></div> | ||
86 | +<%= link_to _('New language'), "#", :class=>"button icon-add with-text new-dynamic-table dynamic-languages"%> | ||
87 | + | ||
88 | +<h3> <%= _("Databases") %> </h3> | ||
89 | +<div id='databases'> | ||
90 | + <% DatabaseHelper.database_as_tables(context.profile.software_info.software_databases).each do |tab| %> | ||
91 | + <%= tab.call %> | ||
92 | + <%end%> | ||
93 | +</div> | ||
94 | + | ||
95 | +<div id='table_structure_databases' style="display:none"><%= DatabaseHelper.add_dynamic_table %></div> | ||
96 | +<%= link_to _('New Database'), "#", :class=>"button icon-add with-text new-dynamic-table dynamic-databases"%> | ||
97 | + | ||
98 | +<div id="controlled_vocabulary_fields"> | ||
99 | +<h4> <%= _("Controlled Vocabulary of E-government") %> </h4> | ||
100 | + | ||
101 | + <%= labelled_check_box _("Administration"), "controlled_vocabulary[administration]", "1", context.profile.software_info.controlled_vocabulary.administration %> <br /> | ||
102 | + | ||
103 | + <%= labelled_check_box _("Agriculture"), "controlled_vocabulary[agriculture]", "1", context.profile.software_info.controlled_vocabulary.agriculture %> <br /> | ||
104 | + | ||
105 | + <%= labelled_check_box _("Business_and Services"), "controlled_vocabulary[business_and_services]", "1", context.profile.software_info.controlled_vocabulary.business_and_services %> <br /> | ||
106 | + | ||
107 | + <%= labelled_check_box _("Communication"), "controlled_vocabulary[communication]", "1", context.profile.software_info.controlled_vocabulary.communication %> <br /> | ||
108 | + | ||
109 | + <%= labelled_check_box _("Culture"), "controlled_vocabulary[culture]", "1", context.profile.software_info.controlled_vocabulary.culture %> <br /> | ||
110 | + | ||
111 | + <%= labelled_check_box _("National Defense"), "controlled_vocabulary[national_defense]", "1", context.profile.software_info.controlled_vocabulary.national_defense %> <br /> | ||
112 | + | ||
113 | + <%= labelled_check_box _("Economy and Finances"), "controlled_vocabulary[economy_and_finances]", "1", context.profile.software_info.controlled_vocabulary.economy_and_finances %> <br /> | ||
114 | + | ||
115 | + <%= labelled_check_box _("Education"), "controlled_vocabulary[education]", "1", context.profile.software_info.controlled_vocabulary.education %> <br /> | ||
116 | + | ||
117 | + <%= labelled_check_box _("Energy"), "controlled_vocabulary[energy]", "1", context.profile.software_info.controlled_vocabulary.energy %> <br /> | ||
118 | + | ||
119 | + <%= labelled_check_box _("Sports"), "controlled_vocabulary[sports]", "1", context.profile.software_info.controlled_vocabulary.sports %> <br /> | ||
120 | + | ||
121 | + <%= labelled_check_box _("Habitation"), "controlled_vocabulary[habitation]", "1", context.profile.software_info.controlled_vocabulary.habitation %> <br /> | ||
122 | + | ||
123 | + <%= labelled_check_box _("Industry"), "controlled_vocabulary[industry]", "1", context.profile.software_info.controlled_vocabulary.industry %> <br /> | ||
124 | + | ||
125 | + <%= labelled_check_box _("Environment"), "controlled_vocabulary[environment]", "1", context.profile.software_info.controlled_vocabulary.environment %> <br /> | ||
126 | + | ||
127 | + <%= labelled_check_box _("Research and Development"), "controlled_vocabulary[research_and_development]", "1", context.profile.software_info.controlled_vocabulary.research_and_development %> <br /> | ||
128 | + | ||
129 | + <%= labelled_check_box _("Social Security"), "controlled_vocabulary[social_security]", "1", context.profile.software_info.controlled_vocabulary.social_security %> <br /> | ||
130 | + | ||
131 | + <%= labelled_check_box _("Social Protection"), "controlled_vocabulary[social_protection]", "1", context.profile.software_info.controlled_vocabulary.social_protection %> <br /> | ||
132 | + | ||
133 | + <%= labelled_check_box _("Sanitation"), "controlled_vocabulary[sanitation]", "1", context.profile.software_info.controlled_vocabulary.sanitation %> <br /> | ||
134 | + | ||
135 | + <%= labelled_check_box _("Health"), "controlled_vocabulary[health]", "1", context.profile.software_info.controlled_vocabulary.health %> <br /> | ||
136 | + | ||
137 | + <%= labelled_check_box _("Security and Public Order"), "controlled_vocabulary[security_public_order]", "1", context.profile.software_info.controlled_vocabulary.security_public_order %> <br /> | ||
138 | + | ||
139 | + <%= labelled_check_box _("Work"), "controlled_vocabulary[work]", "1", context.profile.software_info.controlled_vocabulary.work %> <br /> | ||
140 | + | ||
141 | + <%= labelled_check_box _("Transportation"), "controlled_vocabulary[transportation]", "1", context.profile.software_info.controlled_vocabulary.transportation %> <br /> | ||
142 | + | ||
143 | + <%= labelled_check_box _("Urbanism"), "controlled_vocabulary[urbanism]", "1", context.profile.software_info.controlled_vocabulary.urbanism %> <br /> | ||
144 | +</div> | ||
145 | + | ||
146 | +<h3> <%= _("Operating System") %> </h3> | ||
147 | +<div id='operating_system_fields'> | ||
148 | + <% OperatingSystemHelper.operating_system_as_tables(context.profile.software_info.operating_systems).each do |tab| %> | ||
149 | + <%= tab.call %> | ||
150 | + <%end%> | ||
151 | +</div> | ||
152 | +<div id='table_structure_operating_system' style="display:none"><%= OperatingSystemHelper.add_dynamic_table %></div> | ||
153 | +<%= link_to _('New Operating System'), "#", :class=>"button icon-add with-text new-dynamic-table dynamic-operating_system"%> |
@@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
1 | +<h2><%= _('Software Information') %></h2> | ||
2 | + | ||
3 | +<div class="formfieldline"> | ||
4 | + <%= _("Adherent to e-PING?") %> | ||
5 | + <%= labelled_radio_button(_('Sim'), 'software_info[e_ping]', 'sim', context.profile.software_info.e_ping == 'sim')%> | ||
6 | + <%= labelled_radio_button(_('Não'), 'software_info[e_ping]', 'nao', context.profile.software_info.e_ping == 'nao')%> | ||
7 | +</div> | ||
8 | +<div class="formfieldline"> | ||
9 | + <%= _("Adherent to e-MAG?") %> | ||
10 | + <%= labelled_radio_button(_('Sim'), 'software_info[e_mag]', 'sim', context.profile.software_info.e_mag == 'sim')%> | ||
11 | + <%= labelled_radio_button(_('Não'), 'software_info[e_mag]', 'nao', context.profile.software_info.e_mag == 'nao')%> | ||
12 | +</div> | ||
13 | +<div class="formfieldline"> | ||
14 | + <%= _("Adherent to ICP-Brasil?") %> | ||
15 | + <%= labelled_radio_button(_('Sim'), 'software_info[icp_brasil]', 'sim', context.profile.software_info.icp_brasil == 'sim')%> | ||
16 | + <%= labelled_radio_button(_('Não'), 'software_info[icp_brasil]', 'nao', context.profile.software_info.icp_brasil == 'nao')%> | ||
17 | +</div> | ||
18 | +<div class="formfieldline"> | ||
19 | + <%= _("Adherent to e-ARQ?") %> | ||
20 | + <%= labelled_radio_button(_('Sim'), 'software_info[e_arq]', 'sim', context.profile.software_info.e_arq == 'sim')%> | ||
21 | + <%= labelled_radio_button(_('Não'), 'software_info[e_arq]', 'nao', context.profile.software_info.e_arq == 'nao')%> | ||
22 | +</div> | ||
23 | +<div class="formfieldline"> | ||
24 | + <%= _("Internacionalizable") %> | ||
25 | + <%= labelled_radio_button(_('Sim'), 'software_info[intern]', 'sim', context.profile.software_info.intern == 'sim')%> | ||
26 | + <%= labelled_radio_button(_('Não'), 'software_info[intern]', 'nao', context.profile.software_info.intern == 'nao')%> | ||
27 | +</div> | ||
28 | + | ||
29 | +<div class="formfieldline"> | ||
30 | + <%= label_tag('software_info[operating_platform]', 'Operating Platform:') %> | ||
31 | + <%= text_area_tag('software_info[operating_platform]', context.profile.software_info.operating_platform, :size => '40x20') %> | ||
32 | +</div> | ||
33 | +<div class="formfieldline formfield type-text"> | ||
34 | + <%= labelled_text_field('Demonstration URL', 'software_info[demonstration_url]', context.profile.software_info.demonstration_url) %> | ||
35 | +</div> |
@@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
1 | +<form action="/search/people" name="user_filter" method="POST" class="search_form"> | ||
2 | + <div id="user_filter_content"> | ||
3 | + <div class="user_filter_options"> | ||
4 | + | ||
5 | + <table class="search-table"> | ||
6 | + <tr> | ||
7 | + <td> <%= label_tag :name, _("Name") %> </td> | ||
8 | + <td> <%= text_field_tag :name %> </td> | ||
9 | + </tr> | ||
10 | + <tr> | ||
11 | + <td> <%= label_tag :state, _("State") %> </td> | ||
12 | + <td> <%= text_field_tag :state %> </td> | ||
13 | + </tr> | ||
14 | + <tr> | ||
15 | + <td> <%= label_tag :city, _("City") %> </td> | ||
16 | + <td> <%= text_field_tag :city %> </td> | ||
17 | + </tr> | ||
18 | + <tr> | ||
19 | + <td> <%= label_tag :email, _("Email") %> </td> | ||
20 | + <td> <%= text_field_tag :email %> </td> | ||
21 | + </tr> | ||
22 | + <tr> | ||
23 | + <td> </td> | ||
24 | + <td> <%= submit_button(:search, _('Search')) %> </td> | ||
25 | + </tr> | ||
26 | + </table> | ||
27 | + </div> | ||
28 | + | ||
29 | + </br> | ||
30 | + | ||
31 | + <div class="user_filter_actions"> | ||
32 | + | ||
33 | + </div> | ||
34 | + </div> | ||
35 | +</form> | ||
0 | \ No newline at end of file | 36 | \ No newline at end of file |