From 5941f6d3f8f9ab5e8dceee1d4066325a9ce69185 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Wed, 7 Dec 2005 17:20:11 +0000 Subject: [PATCH] migrated user level profile functions to new backend --- lib/WebGUI/Operation/Profile.pm | 185 ++++++++------------------------ lib/WebGUI/ProfileField.pm | 54 +++++++++- 2 files changed, 95 insertions(+), 144 deletions(-) diff --git a/lib/WebGUI/Operation/Profile.pm b/lib/WebGUI/Operation/Profile.pm index 5b8d261eb..450d751eb 100644 --- a/lib/WebGUI/Operation/Profile.pm +++ b/lib/WebGUI/Operation/Profile.pm @@ -38,40 +38,13 @@ use WebGUI::Operation::Shared; #------------------------------------------------------------------- # Builds Extra form requirements for anonymous registration. sub getRequiredProfileFields { - my ($f,$a,$method,$label,$default,$values,$data,@array); - - #$f = WebGUI::HTMLForm->new(); - - $a = WebGUI::SQL->read("select * from userProfileField, userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId and - userProfileField.required=1 order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber",WebGUI::SQL->getSlave); - while($data = $a->hashRef) { - my %hash = (); - $method = $data->{dataType}; - $label = WebGUI::Operation::Shared::secureEval($data->{fieldLabel}); - $default = WebGUI::Operation::Shared::secureEval($data->{dataDefault}); - $values = WebGUI::Operation::Shared::secureEval($data->{dataValues}); - my $default; - if ($session{form}{$data->{fieldName}}) { - $default = $session{form}{$data->{fieldName}}; - } - elsif ($session{user}{$data->{fieldName}}) { - $default = $session{user}{$data->{fieldName}}; - } - else { - $default = WebGUI::Operation::Shared::secureEval($data->{dataDefault}); - } - my $form = WebGUI::Form::DynamicField->new( - name => $data->{fieldName}, - value => $default, - options => $values, - fieldType => $method, - ); - - $hash{'profile.formElement'} = $form->displayForm(); - $hash{'profile.formElement.label'} = $label; - push(@array,\%hash) - } - $a->finish; + my @array; + foreach my $field (@{WebGUI::ProfileField->getRequiredFields}) { + push(@array, { + 'profile.formElement' => $field->formField, + 'profile.formElement.label' => $field->getLabel + }); + } return \@array; } @@ -105,90 +78,46 @@ sub saveProfileFields { #------------------------------------------------------------------- sub validateProfileData { - my (%data, $error, $a, %field, $warning); - tie %field, 'Tie::CPHash'; - $a = WebGUI::SQL->read("select * from userProfileField,userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId - and userProfileCategory.editable=1 and userProfileField.editable=1 order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber"); - while (%field = $a->hash) { - my $holder = WebGUI::FormProcessor::process($field{fieldName},$field{dataType}, $field{dataDefault}); - WebGUI::Macro::negate(\$holder); - $data{$field{fieldName}} = $holder; - if ($field{required} && !($data{$field{fieldName}})) { - $error .= '
  • '.(WebGUI::Operation::Shared::secureEval($field{fieldLabel})).' '.WebGUI::International::get(451).'
  • '; - } - elsif($field{fieldName} eq "email" && isDuplicateEmail($data{$field{fieldName}})){ + my %data = (); + my $error = ""; + my $warning = ""; + foreach my $field (@{WebGUI::ProfileField->getEditableFields}) { + $data{$field->getId} = $field->formProcess; + if ($field->get("required") && !$data{$field->getId}) { + $error .= '
  • '.$field->getLabel.' '.WebGUI::International::get(451).'
  • '; + } elsif ($field->getId eq "email" && isDuplicateEmail($data{$field->getId})) { $warning .= '
  • '.WebGUI::International::get(1072).'
  • '; } } - $a->finish; return (\%data, $error, $warning); } #------------------------------------------------------------------- sub www_editProfile { - my ($a, $data, $previousCategory, $subtext, $vars, @profile, @array); return WebGUI::Operation::Auth::www_auth("init") if($session{user}{userId} eq '1'); - + my $vars = {}; $vars->{displayTitle} .= '

    '.WebGUI::International::get(338).'

    '; - $vars->{'profile.message'} = $_[0] if($_[0]); $vars->{'profile.form.header'} = "\n\n".WebGUI::Form::formHeader({}); $vars->{'profile.form.footer'} = WebGUI::Form::formFooter(); $vars->{'profile.form.hidden'} = WebGUI::Form::hidden({"name"=>"op","value"=>"editProfileSave"}); $vars->{'profile.form.hidden'} .= WebGUI::Form::hidden({"name"=>"uid","value"=>$session{user}{userId}}); - - $a = WebGUI::SQL->read("select * from userProfileField,userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId - and userProfileCategory.editable=1 and userProfileField.editable=1 order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber"); - my $counter = 0; - while($data = $a->hashRef) { - $counter++; - my %hash = (); - my $category = WebGUI::Operation::Shared::secureEval($data->{categoryName}); - my $label = WebGUI::Operation::Shared::secureEval($data->{fieldLabel}); - my $values = WebGUI::Operation::Shared::secureEval($data->{dataValues}); - my $method = $data->{dataType}; - my $orderedValues = {}; - tie %{$orderedValues}, 'Tie::IxHash'; - foreach my $ov (sort keys %{$values}) { - $orderedValues->{$ov} = $values->{$ov}; + my @array = (); + foreach my $category (@{WebGUI::ProfileCategory->getCategories}) { + my @temp = (); + foreach my $field (@{$category->getFields}) { + push(@temp, { + 'profile.form.element' => $field->formField, + 'profile.form.element.label' => $field->getLabel, + 'profile.form.element.subtext' => $field->get("required") ? "*" : undef + }); } - my $default; - if ($session{form}{$data->{fieldName}}) { - $default = $session{form}{$data->{fieldName}}; - } - elsif ($session{user}{$data->{fieldName}}) { - $default = $session{user}{$data->{fieldName}}; - } - else { - $default = WebGUI::Operation::Shared::secureEval($data->{dataDefault}); - } - my $form = WebGUI::Form::DynamicField->new( - name => $data->{fieldName}, - value => $default, - options => $orderedValues, - fieldType => $method, - ); - - $hash{'profile.form.element'} = $form->displayForm(); - $hash{'profile.form.element.label'} = $label; - - if ($data->{required}) { - $hash{'profile.form.element.subtext'} = "*"; - } - push(@profile,\%hash); - if (($previousCategory && $category ne $previousCategory) || $counter eq $a->rows) { - my @temp = @profile; - my $hashRef; - $hashRef->{'profile.form.category'} = $previousCategory; - $hashRef->{'profile.form.category.loop'} = \@temp; - push(@array,$hashRef); - @profile = (); - } - $previousCategory = $category; + push(@array, { + 'profile.form.category' => $category->getLabel, + 'profile.form.category.loop' => \@temp + }); } - $a->finish; - $vars->{'profile.form.elements'} = \@array; $vars->{'profile.form.submit'} = WebGUI::Form::submit({}); $vars->{'profile.accountOptions'} = WebGUI::Operation::Shared::accountOptions(); @@ -215,59 +144,29 @@ sub www_editProfileSave { #------------------------------------------------------------------- sub www_viewProfile { - my ($a, %data, $category, $label, $value, $previousCategory, $u, $vars, @array); - $u = WebGUI::User->new($session{form}{uid}); + my $u = WebGUI::User->new($session{form}{uid}); + my $vars = {}; $vars->{displayTitle} = '

    '.WebGUI::International::get(347).' '.$u->username.'

    '; return WebGUI::Privilege::notMember() if($u->username eq ""); return WebGUI::Operation::Shared::userStyle($vars->{displayTitle}.WebGUI::International::get(862)) if($u->profileField("publicProfile") < 1 && ($session{user}{userId} ne $session{form}{uid} || WebGUI::Grouping::isInGroup(3))); - return WebGUI::Privilege::insufficient() if(!WebGUI::Grouping::isInGroup(2)); - $a = WebGUI::SQL->read("select * from userProfileField,userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId - and userProfileCategory.visible=1 and userProfileField.visible=1 order by userProfileCategory.sequenceNumber, - userProfileField.sequenceNumber",WebGUI::SQL->getSlave); - - while (%data = $a->hash) { - - $category = WebGUI::Operation::Shared::secureEval($data{categoryName}); - if ($category ne $previousCategory) { - my $header; - $header->{'profile.category'} = $category; - push(@array,$header); - $previousCategory = $category; + my @array = (); + foreach my $category (@{WebGUI::ProfileCategory->getCategories}) { + next unless ($category->get("visible"); + push(@array, {'profile.category' => $category->getLabel}); + foreach my $field (@{$category->getFields}) { + next unless ($field->get("visible")); + next if ($field->get("fieldName") eq "email" && !$u->profileField("publicEmail") + push(@array, { + 'profile.label' => $field->getLabel, + 'profile.value' => $u->profileField($field->getId) + }); } - - next if ($data{fieldName} eq "email" and $u->profileField("publicEmail")); - - $label = WebGUI::Operation::Shared::secureEval($data{fieldLabel}); - - ##If the form field has multiple selections, only display the one the user - ##currently has selected. - if ($data{dataValues}) { - $value = WebGUI::Operation::Shared::secureEval($data{dataValues}); - $value = ${$value}{$u->profileField($data{fieldName})}; - } - else { - $value = $u->profileField($data{fieldName}); - } - - my $form = WebGUI::Form::DynamicField->new( - value => $value, - fieldType => $data{dataType}, - ); - - $value = $form->displayValue(); - - my $hash; - - $hash->{'profile.label'} = $label; - $hash->{'profile.value'} = $value; - push(@array,$hash); } $vars->{'profile.elements'} = \@array; - $a->finish; if ($session{user}{userId} eq $session{form}{uid}) { $vars->{'profile.accountOptions'} = WebGUI::Operation::Shared::accountOptions(); } diff --git a/lib/WebGUI/ProfileField.pm b/lib/WebGUI/ProfileField.pm index de8fbf2fe..cef17c4db 100644 --- a/lib/WebGUI/ProfileField.pm +++ b/lib/WebGUI/ProfileField.pm @@ -22,6 +22,7 @@ use WebGUI::SQL; use WebGUI::Form; use WebGUI::FormProcessor; use WebGUI::Operation::Shared; +use WebGUI::Macro; =head1 NAME @@ -150,7 +151,7 @@ Returns the value retrieved from a form post. sub formProcess { my $self = shift; - return WebGUI::FormProcessor::process($self->getId,$self->get("fieldType"),WebGUI::Operation::Shared::secureEval($self->get("possibleValues"))); + return WebGUI::Macro::negate(WebGUI::FormProcessor::process($self->getId,$self->get("fieldType"),WebGUI::Operation::Shared::secureEval($self->get("possibleValues")))); } #------------------------------------------------------------------- @@ -188,6 +189,40 @@ sub getCategory { } +#------------------------------------------------------------------- + +=head2 getEditableFields () + +Returns an array reference of WebGUI::ProfileField objects that are marked "editable" or "required". This is a class method. + +=cut + +sub getEditableFields { + my $self = shift; + my @fields = (); + foreach my $fieldName (WebGUI::SQL->buildArray("select fieldName from userProfileField where required=1 or editable=1 order by sequenceNumber")) { + push(@fields,WebGUI::ProfileField->new($fieldName)); + } + return \@fields; +} + +#------------------------------------------------------------------- + +=head2 getFields () + +Returns an array reference of WebGUI::ProfileField objects. This is a class method. + +=cut + +sub getFields { + my $self = shift; + my @fields = (); + foreach my $fieldName (WebGUI::SQL->buildArray("select fieldName from userProfileField order by sequenceNumber")) { + push(@fields,WebGUI::ProfileField->new($fieldName)); + } + return \@fields; +} + #------------------------------------------------------------------- =head2 getId () @@ -218,6 +253,23 @@ sub getLabel { #------------------------------------------------------------------- +=head2 getRequiredFields () + +Returns an array reference of WebGUI::ProfileField objects that are marked "required". This is a class method. + +=cut + +sub getRequiredFields { + my $self = shift; + my @fields = (); + foreach my $fieldName (WebGUI::SQL->buildArray("select fieldName from userProfileField where required=1 order by sequenceNumber")) { + push(@fields,WebGUI::ProfileField->new($fieldName)); + } + return \@fields; +} + +#------------------------------------------------------------------- + =head2 moveDown () Moves this field down one position within it's category.