plugins/stoa/lib/stoa_plugin.rb
require_dependency "person"
class StoaPlugin < Noosfero::Plugin
def self.plugin_name
"Stoa"
end
def self.plugin_description
_("Add Stoa features")
end
def stylesheet?
true
end
def signup_extra_contents
proc {
content_tag(:div, labelled_form_field(_("USP number"), text_field(:profile_data, :usp_id, id: "usp_id_field")) +
content_tag(:small, _("The usp id grants you special powers in the network. Don't forget to fill it with a valid number if you have one."), id: "usp-id-balloon") +
content_tag("p", _("Either this usp number is being used by another user or is not valid"), id: "usp-id-invalid") +
content_tag("p", _("Checking usp number..."), id: "usp-id-checking"), id: "signup-usp-id") +
content_tag("div", required(labelled_form_field(_("Birth date (yyyy-mm-dd)"), text_field_tag("birth_date", ""))) +
content_tag(:small, _("Confirm your birth date. Pay attention to the format: yyyy-mm-dd."), id: "usp-birth-date-balloon"), id: "signup-birth-date", style: "display: none") +
content_tag("div", required(labelled_form_field(_("CPF"), text_field_tag("cpf", ""))) +
content_tag(:small, _("Confirm your CPF number."), id: "usp-cpf-balloon"), id: "signup-cpf", style: "display: none") +
javascript_include_tag("plugins/stoa/javascripts/jquery.observe_field", "plugins/stoa/javascripts/signup_complement")
}
end
def profile_info_extra_contents
if context.profile.person?
usp_id = context.profile.usp_id
lambda {
content_tag("div", labelled_form_field(_("USP number"), text_field_tag("profile_data[usp_id]", usp_id, id: "usp_id_field", disabled: usp_id.present?)) +
content_tag(:small, _("The usp id grants you special powers in the network. Don't forget to fill it if you have one.")) +
content_tag("div", labelled_check_box(c_("Public"), "", "", false, disabled: true, title: _("This field must be private"), class: "disabled"), class: "field-privacy-selector"), class: "field-with-privacy-selector") +
content_tag("div", required(labelled_form_field(_("Birth date (yyyy-mm-dd)"), text_field_tag("birth_date", ""))), id: "signup-birth-date", style: "display: none") +
content_tag("div", required(labelled_form_field(_("CPF"), text_field_tag("cpf", ""))), id: "signup-cpf", style: "display:none") +
javascript_include_tag("plugins/stoa/javascripts/jquery.observe_field", "plugins/stoa/javascripts/signup_complement")
}
end
end
def login_extra_contents
proc {
content_tag("div", labelled_form_field(_("USP number / Username"), text_field_tag("usp_id_login", "", id: "stoa_field_login")) +
labelled_form_field(c_("Password"), password_field_tag("password", "", id: "stoa_field_password")), id: "stoa-login-fields")
}
end
def alternative_authentication
person = Person.find_by usp_id: context.params[:usp_id_login]
if person
user = User.authenticate(person.user.login, context.params[:password])
else
user = User.authenticate(context.params[:usp_id_login], context.params[:password])
end
user
end
def account_controller_filters
block = proc do
params[:profile_data] ||= {}
params[:profile_data][:invitation_code] = params[:invitation_code]
invitation = Task.pending.where(code: params[:invitation_code]).first
if request.post?
if !invitation && !StoaPlugin::UspUser.matches?(params[:profile_data][:usp_id], params[:confirmation_field], params[params[:confirmation_field]])
# `self` below is evaluated in the context of account_controller
@person = Person.new(environment: self.environment)
@person.errors.add(:usp_id, _(" validation failed"))
render action: :signup
end
end
end
[{ type: "before_action",
method_name: "validate_usp_id",
options: { only: "signup" },
block: block }]
end
def profile_editor_controller_filters
block = proc do
if request.post?
if !params[:profile_data][:usp_id].blank? && !StoaPlugin::UspUser.matches?(params[:profile_data][:usp_id], params[:confirmation_field], params[params[:confirmation_field]])
@profile_data = profile
@profile_data.attributes = params[:profile_data]
@profile_data.valid?
@profile_data.errors.add(:usp_id, _(" validation failed"))
@profile_data.usp_id = nil
@possible_domains = profile.possible_domains
render action: :edit
end
end
end
[{ type: "before_action",
method_name: "validate_usp_id",
options: { only: "edit" },
block: block }]
end
def invite_controller_filters
[{ type: "before_action",
method_name: "check_usp_id_existence",
block: proc { render_access_denied if !user || user.usp_id.blank? } }]
end
def control_panel_entries
[StoaPlugin::ControlPanel::InviteFriends]
end
def remove_invite_friends_button
true
end
def change_password_fields
{ field: :usp_id, name: _("USP Number"), model: "person" }
end
def search_friend_fields
[{ field: :usp_id, name: _("USP Number") }]
end
end