diff --git a/lib/WebGUI/Registration/Step/MailingSubscribe.pm b/lib/WebGUI/Registration/Step/MailingSubscribe.pm index ac45c06..a3ebdf2 100644 --- a/lib/WebGUI/Registration/Step/MailingSubscribe.pm +++ b/lib/WebGUI/Registration/Step/MailingSubscribe.pm @@ -1,10 +1,12 @@ package WebGUI::Registration::Step::MailingSubscribe; use strict; +use warnings; use Tie::IxHash; use List::MoreUtils qw{ uniq }; +use WebGUI::Form::Checkbox; use base qw{ WebGUI::Registration::Step }; @@ -79,7 +81,6 @@ sub getSummaryTemplateVars { map { WebGUI::Asset->newByDynamicClass( $session, $_ ) } @{ $mailings }; - # Preferred homepage url push @fields, { field_label => 'Subscribe to mailings', field_value => join( ', ', map { $_->getTitle } @assets ), @@ -103,36 +104,48 @@ sub getSummaryTemplateVars { sub getViewVars { my $self = shift; my $session = $self->session; + my $form = $session->form; my $user = $self->registration->instance->user; + my $availableMailings = $self->getAvailableMailings; + + # Figure out what mailings to check in the form + my @subscribeMailings; + if ( $form->checkList( 'subscribeMailings' ) ) { + # The user just posted but made an error + @subscribeMailings = $form->checkList( 'subscribeMailings' ); + } + elsif ( exists $self->getConfigurationData->{'subscribeMailings'} ) { + # The step is being changed + @subscribeMailings = @{ $self->getConfigurationData->{'subscribeMailings'} || [] }; + } + else { + # The step hasn't been done yet. + @subscribeMailings = grep { $_->isSubscribed( $user ) } @{ $availableMailings }; + } + + # Create lookup table + my %isSubscribed = map { $_ => 1 } @subscribeMailings; + my $var = $self->SUPER::getViewVars; - my @subscribed; - tie my %options, 'Tie::IxHash'; - my $availableMailings = $self->getAvailableMailings; + # Add form elems in alphabetic order. foreach my $mailing ( sort { $a->getTitle cmp $b->getTitle } @{ $availableMailings } ) { - push @subscribed, $mailing->getId if $mailing->isSubscribed( $user ); - - $options{ $mailing->getId } = $mailing->getTitle; - }; + my $id = $mailing->getId; - my @subscribeMailings = $self->session->form->checkList( 'subscribeMailings' ); - @subscribeMailings = @{ $self->getConfigurationData->{'subscribeMailings'} || [] } unless @subscribeMailings; - @subscribeMailings = @subscribed unless @subscribeMailings; - - push @{ $var->{ field_loop } }, ( - { - field_label => 'Subscribe to mailings', - field_formElement => - WebGUI::Form::checkList($self->session, { - name => 'subscribeMailings', - options => \%options, - value => [ uniq @subscribeMailings ], - vertical=> 1, - }), -# field_subtext => 'Hier komt de subtext voor dit veld' - } - ); + push @{ $var->{ field_loop } }, ( + { + field_label => $mailing->getTitle, + field_formElement => + WebGUI::Form::checkbox( $session, { + name => 'subscribeMailings', + value => $id, + checked => $isSubscribed{ $id }, + label => 'Subscribe to this mailing', + }), + } + ); + } return $var; }