lattes_curriculum_plugin.rb
3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
class LattesCurriculumPlugin < Noosfero::Plugin
def self.plugin_name
"Lattes Curriculum Plugin"
end
def self.plugin_description
_("A plugin that imports the lattes curriculum into the users profiles")
end
def js_files
["singup_complement.js"]
end
def stylesheet?
true
end
def extra_optional_fields
fields = []
lattes_url = {
:name => 'lattes_url',
:label => 'Lattes URL',
:object_name => :academic_infos,
:method => :lattes_url,
:value => context.profile.nil? ? "" : context.profile.academic_info.lattes_url
}
fields << lattes_url
return fields
end
def profile_tabs
if show_lattes_tab?
href = context.profile.academic_info.lattes_url
html_parser = Html_parser.new
{
:title => _("Lattes"),
:id => 'lattes_tab',
:content => lambda{html_parser.get_html(href)},
:start => false
}
end
end
def profile_editor_transaction_extras
if context.profile.person?
if context.params.has_key?(:academic_infos)
academic_info_transaction
end
end
end
def profile_editor_controller_filters
validate_lattes_url_block = proc do
if request.post?
if !params[:academic_infos].blank?
@profile_data = profile
academic_infos = {"academic_info_attributes" => params[:academic_infos]}
params_profile_data = params[:profile_data]
params_profile_data = params_profile_data.merge(academic_infos)
@profile_data.attributes = params_profile_data
@profile_data.valid?
@possible_domains = profile.possible_domains
unless AcademicInfo.matches?(params[:academic_infos])
@profile_data.errors.add(:lattes_url, _(' Invalid lattes url'))
render :action => :edit, :profile => profile.identifier
end
end
end
end
create_academic_info_block = proc do
if profile && profile.person? && profile.academic_info.nil?
profile.academic_info = AcademicInfo.new
end
end
[{:type => 'before_filter',
:method_name => 'validate_lattes_url',
:options => {:only => 'edit'},
:block => validate_lattes_url_block },
{:type => 'before_filter',
:method_name => 'create_academic_info',
:options => {:only => 'edit'},
:block => create_academic_info_block }]
end
def account_controller_filters
validate_lattes_url_block = proc do
if request.post?
params[:profile_data] ||= {}
params[:profile_data][:academic_info_attributes] = params[:academic_infos]
if !params[:academic_infos].blank? && !AcademicInfo.matches?(params[:academic_infos])
@person = Person.new(params[:profile_data])
@person.environment = environment
@user = User.new(params[:user])
@person.errors.add(:lattes_url, _(' Invalid lattes url'))
render :action => :signup
end
end
end
create_academic_info_block = proc do
if profile && profile.person? && profile.academic_info.nil?
profile.academic_info = AcademicInfo.new
end
end
[{:type => 'before_filter',
:method_name => 'validate_lattes_url',
:options => {:only => 'signup'},
:block => validate_lattes_url_block },
{:type => 'before_filter',
:method_name => 'create_academic_info',
:options => {:only => 'edit'},
:block => create_academic_info_block }]
end
protected
def academic_info_transaction
AcademicInfo.transaction do
context.profile.academic_info.update_attributes!(context.params[:academic_infos])
end
end
def show_lattes_tab?
return context.profile.person? && !context.profile.academic_info.nil? && !context.profile.academic_info.lattes_url.blank? && context.profile.public_fields.include?("lattes_url")
end
end