plugins/lattes_curriculum/lib/lattes_curriculum_plugin.rb
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
parameters = params.to_h.with_indifferent_access
if request.post?
if !parameters[:academic_infos].blank?
@profile_data = profile
academic_infos = { "academic_info_attributes" => parameters[:academic_infos] }
params_profile_data = parameters[: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?(parameters[:academic_infos])
@profile_data.errors.add(:lattes_url, _(" Invalid lattes url"))
render action: :informations, 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_action",
method_name: "validate_lattes_url",
options: { only: "informations" },
block: validate_lattes_url_block },
{ type: "before_action",
method_name: "create_academic_info",
options: { only: "informations" },
block: create_academic_info_block }]
end
def account_controller_filters
validate_lattes_url_block = proc do
parameters = params.to_h.with_indifferent_access
if request.post?
parameters[:profile_data] ||= {}
parameters[:profile_data][:academic_info_attributes] = parameters[:academic_infos]
if !parameters[:academic_infos].blank? && !AcademicInfo.matches?(parameters[:academic_infos])
@person = Person.new(parameters[:profile_data])
@person.environment = environment
@user = User.new(parameters[: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_action",
method_name: "validate_lattes_url",
options: { only: "signup" },
block: validate_lattes_url_block },
{ type: "before_action",
method_name: "create_academic_info",
options: { only: "informations" },
block: create_academic_info_block }]
end
protected
def academic_info_transaction
AcademicInfo.transaction do
context.profile.academic_info.update!(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