require_dependency 'person' require_dependency 'ext/person' class StoaPlugin < Noosfero::Plugin Person.human_names[:usp_id] = _('USP number') def self.plugin_name "Stoa" end def self.plugin_description _("Add Stoa features") end def stylesheet? true end def signup_extra_contents lambda { required(labelled_form_field(_('USP number'), text_field_tag('profile_data[usp_id]', '', :id => 'usp_id_field'))) + labelled_form_field(_('Select a confirmation data'), select_tag('confirmation_field', options_for_select([['CPF','cpf'], [_('Birth date (yyyy-mm-dd)'), 'birth_date']]) )) + required(labelled_form_field(_('Confirmation value'), text_field_tag('confirmation_value', '', :placeholder=>_('Confirmation value')))) + javascript_tag(<<-EOF jQuery("#usp_id_field").change(function(){ var me=this; jQuery(this).addClass('checking').removeClass('validated'); jQuery.getJSON('#{url_for(:controller => 'stoa_plugin', :action => 'check_usp_id')}?usp_id='+this.value, function(data){ if(data.exists) jQuery(me).removeClass('checking').addClass('validated'); else jQuery(me).removeClass('checking').addClass('invalid'); if(data.error) displayValidationUspIdError(data.error); } ); }); function displayValidationUspIdError(error){ jQuery.colorbox({html: '

'+error.message+'

'+error.backtrace.join("
"), height: "80%", width: "70%" }); } EOF ) } end def account_controller_filters block = lambda do params[:profile_data] ||= {} params[:profile_data][:invitation_code] = params[:invitation_code] if request.post? if !params[:invitation_code] && !StoaPlugin::UspUser.matches?(params[:profile_data][:usp_id], params[:confirmation_field], params[:confirmation_value]) @person = Person.new @person.errors.add(:usp_id, _(' validation failed')) render :action => :signup end end end [{ :type => 'before_filter', :method_name => 'validate_usp_id', :options => {:only => 'signup'}, :block => block }] end def invite_controller_filters [{ :type => 'before_filter', :method_name => 'check_usp_id_existence', :block => lambda {render_access_denied if profile.usp_id.blank?} }] end def control_panel_buttons { :title => _('Invite friends'), :icon => 'invite-friends', :url => {:controller => 'invite', :action => 'select_address_book'} } if !context.profile.usp_id.blank? end def remove_invite_friends_button true end end