From 4bfb2d200c14abc3b712b895585ce1f4b8694171 Mon Sep 17 00:00:00 2001 From: Frank Dillon Date: Mon, 17 Nov 2008 00:04:03 +0000 Subject: [PATCH] Fixed a number of issues with the profile and refactored some of the code to make it more efficient. --- .../packages-7.6.4/root_import_account.wgpkg | Bin 17154 -> 16487 bytes docs/upgrades/upgrade_7.6.3-7.6.4.pl | 3 +- lib/WebGUI/Account.pm | 10 +- lib/WebGUI/Account/Profile.pm | 249 ++++++++++-------- lib/WebGUI/i18n/English/Account_Profile.pm | 5 + www/extras/account/account.css | 5 +- www/extras/account/images/save_changes.gif | Bin 1589 -> 0 bytes 7 files changed, 148 insertions(+), 124 deletions(-) delete mode 100644 www/extras/account/images/save_changes.gif diff --git a/docs/upgrades/packages-7.6.4/root_import_account.wgpkg b/docs/upgrades/packages-7.6.4/root_import_account.wgpkg index c97df11937052b942373d497760390b25789217c..092afbd079ac8ac159182af32ff7aa75f4372494 100644 GIT binary patch literal 16487 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 Jz%2kc0sw5s8oB@g diff --git a/docs/upgrades/upgrade_7.6.3-7.6.4.pl b/docs/upgrades/upgrade_7.6.3-7.6.4.pl index 151182bc3..5be142581 100644 --- a/docs/upgrades/upgrade_7.6.3-7.6.4.pl +++ b/docs/upgrades/upgrade_7.6.3-7.6.4.pl @@ -368,8 +368,7 @@ sub upgradeAccount { #Add the settings for the profile module $setting->add("profileStyleTemplateId",""); #Use the userStyle by default - $setting->add("profileLayoutTemplateId","N716tpSna0iIQTKxS4gTWA"); - $setting->add("profileEditLayoutTemplateId","FJbUTvZ2nUTn65LpW6gjsA"); + $setting->add("profileLayoutTemplateId","FJbUTvZ2nUTn65LpW6gjsA"); $setting->add("profileEditTemplateId","75CmQgpcCSkdsL-oawdn3Q"); $setting->add("profileViewTempalteId","2CS-BErrjMmESOtGT90qOg"); $setting->add("profileErrorTempalteId","MBmWlA_YEA2I6D29OMGtRg"); diff --git a/lib/WebGUI/Account.pm b/lib/WebGUI/Account.pm index c16bb65e0..8a406310b 100644 --- a/lib/WebGUI/Account.pm +++ b/lib/WebGUI/Account.pm @@ -129,11 +129,11 @@ sub appendCommonVars { my $session = $self->session; my $user = $session->user; - $var->{'user_full_name' } = $user->getWholeName; - $var->{'user_member_since' } = $user->dateCreated; - $var->{'view_profile_url' } = $user->getProfileUrl; - $var->{'gateway_url' } = $session->url->page("op=account"); - $var->{'back_url' } = $session->env->get("HTTP_REFERER") || $var->{'view_profile_url'} + $var->{'user_full_name' } = $user->getWholeName; + $var->{'user_member_since'} = $user->dateCreated; + $var->{'view_profile_url' } = $user->getProfileUrl; + $var->{'root_url' } = $session->url->page("op=account"); + #$var->{'back_url' } = $session->env->get("HTTP_REFERER") || $var->{'view_profile_url'} } diff --git a/lib/WebGUI/Account/Profile.pm b/lib/WebGUI/Account/Profile.pm index ba14b5670..db218bd79 100644 --- a/lib/WebGUI/Account/Profile.pm +++ b/lib/WebGUI/Account/Profile.pm @@ -30,6 +30,69 @@ These subroutines are available from this package: #------------------------------------------------------------------- +=head2 appendCategoryVars ( var, category [,fields, errors] ) + + Appends cateogry variables to the hash ref passed in + +=head3 var + + The hash reference to append template variables to + +=head3 category + + WebGUI::ProfileCategory object to append variables for + +=head3 fields + + Optional array ref of fields in this category + +=head3 errors + + Optional array ref of errors to attach to the category loop + +=cut + +sub appendCategoryVars { + my $self = shift; + my $var = shift || {}; + my $category = shift; + my $fields = shift; + my $errors = shift; + my $selected = $self->store->{selected} || $self->session->form->get("selected"); + + my $categoryId = $category->getId; + my $categoryLabel = $category->getLabel; + my $shortCategoryLabel = $category->getShortLabel; + my $isActive = $categoryId eq $selected; + + my $index = scalar(@{$var->{'profile_category_loop'}}) + 1; + + push(@{ $var->{'profile_category_loop'} }, { + 'profile_category_id' => $categoryId, + 'profile_category_isActive' => $isActive, + 'profile_category_is_'.$categoryId => "true", #Test so users can tell what category they are at in the loop + 'profile_category_label' => $categoryLabel, + 'profile_category_shortLabel' => $shortCategoryLabel, + 'profile_category_index' => $index, + 'profile_fields_loop' => $fields, + 'profile_errors' => $errors, + }); + + $var->{'profile_category_'.$categoryId."_isActive" } = $isActive; + $var->{'profile_category_'.$categoryId."_label" } = $categoryLabel; + $var->{'profile_category_'.$categoryId."_shortLabel"} = $shortCategoryLabel; + $var->{'profile_category_'.$categoryId."_index" } = $index; + $var->{'profile_category_'.$categoryId."_fields" } = $fields; + + + #Update the isActive flag to determine the default active tab + $self->store->{hasActiveTab} = ($self->store->{hasActiveTab} || $isActive); + + #return $index; +} + +#------------------------------------------------------------------- + =head2 appendCommonVars ( var ) Appends common template variables that all profile templates use @@ -41,18 +104,33 @@ These subroutines are available from this package: =cut sub appendCommonVars { - my $self = shift; - my $var = shift; - my $session = $self->session; - my $user = $session->user; - my $pageUrl = $session->url->page; + my $self = shift; + my $var = shift; + my $session = $self->session; + my $user = $session->user; + my $pageUrl = $session->url->page; - $var->{'user_full_name' } = $user->getWholeName; - $var->{'user_member_since' } = $user->dateCreated; - $var->{'view_profile_url' } = $user->getProfileUrl($pageUrl); - $var->{'edit_profile_url' } = $self->getUrl("module=profile;do=edit"); - $var->{'back_url' } = $session->env->get("HTTP_REFERER") || $var->{'view_profile_url'}; - $var->{'invitations_enabled' } = $session->user->profileField('ableToBeFriend'); + $self->SUPER::appendCommonVars($var); + + $var->{'edit_profile_url' } = $self->getUrl("module=profile;do=edit"); + $var->{'invitations_enabled' } = $session->user->profileField('ableToBeFriend'); + $var->{'profile_category_loop'} = []; + + #Append the categories + my $categories = WebGUI::ProfileCategory->getCategories($session, { editable=>1 } ); + map { $self->appendCategoryVars($var,$_) } @ { $categories }; + unless ($self->store->{hasActiveTab}) { + $var->{'profile_category_loop'}->[0]->{'profile_category_isActive'} = 1; + } + + #Append the form submit if it's in edit mode + if($self->method eq "edit" || $self->uid eq "") { + $var->{'is_edit' } = "true"; + $var->{'form_header' } = WebGUI::Form::formHeader($session,{ + action => $self->getUrl("module=profile;do=editSave") + }); + $var->{'form_footer' } = WebGUI::Form::formFooter($session); + } } #------------------------------------------------------------------- @@ -84,13 +162,6 @@ sub editSettingsForm { label => $i18n->get("profile layout template label"), hoverHelp => $i18n->get("profile layout template hoverHelp") ); - $f->template( - name => "profileEditLayoutTemplateId", - value => $self->getEditLayoutTemplateId, - namespace => "Account/Layout", - label => $i18n->get("profile edit layout template label"), - hoverHelp => $i18n->get("profile edit layout template hoverHelp") - ); $f->template( name => "profileEditTemplateId", value => $self->getEditTemplateId, @@ -177,20 +248,6 @@ sub getExtrasStyle { return $requiredStyleOff; } - -#------------------------------------------------------------------- - -=head2 getDisplayLayoutTemplateId ( ) - -This method returns the template ID for the account layout. - -=cut - -sub getEditLayoutTemplateId { - my $self = shift; - return $self->session->setting->get("profileEditLayoutTemplateId") || "FJbUTvZ2nUTn65LpW6gjsA"; -} - #------------------------------------------------------------------- =head2 getEditTemplateId ( ) @@ -231,9 +288,7 @@ sub getLayoutTemplateId { my $session = $self->session; my $method = $self->method; my $uid = $self->uid; - - return $self->getEditLayoutTemplateId if($method eq "edit" || $uid eq ""); - return $session->setting->get("profileLayoutTemplateId") || $self->SUPER::getLayoutTemplateId; + return $session->setting->get("profileLayoutTemplateId") || "FJbUTvZ2nUTn65LpW6gjsA"; } #------------------------------------------------------------------- @@ -275,26 +330,35 @@ sub www_edit { my $errors = shift || {}; my $session = $self->session; my $user = $session->user; - my $selected = $errors->{errorCategory} || $session->form->get("selected"); #Allow users to template tabs or other category dividers my $var = {}; + + #Handle errors + my @errorFields = (); + $var->{'profile_errors'} = []; + + if( scalar(keys %{$errors}) ) { + #Warnings and errors are the same here - set the fields so we can tell which fields errored + @errorFields = (@{$errors->{errorFields}},@{$errors->{warningFields}}); + #Build the error message loop + map { + push( @{$var->{'profile_errors'}},{ error_message => $_ }) + } @{$errors->{errors}}; + } + + my $count = 0; + + #Set the active flag to the default. We'll know more later + $self->store->{hasActiveTab} = 0; - my $active = 0; #Whether or not a category is selected - my $counter = 1; #Count the number of categories being displayed - my $hasErrors = scalar(keys %{$errors}); + #Initialize the category template loop which gets filled inside the loop + $var->{'profile_category_loop'} = []; - my @errorFields = (); - @errorFields = (@{$errors->{errorFields}},@{$errors->{warningFields}}) if($hasErrors); - - $var->{'profile_errors' } = []; - map{ push(@{$var->{'profile_errors'}},{ error_message => $_ }) } @{$errors->{errors}} if($hasErrors); - $var->{'hasErrors' } = scalar(@{$var->{'profile_errors'}}) > 0; - - my @categories = (); - foreach my $category (@{WebGUI::ProfileCategory->getCategories($session)}) { - next unless $category->isEditable; + #Get the editable categories + my $categories = WebGUI::ProfileCategory->getCategories($session, { editable => 1 } ); + foreach my $category (@{ $categories } ) { my @fields = (); - foreach my $field (@{$category->getFields}) { - next unless ($field->isEditable); + use Data::Dumper; + foreach my $field (@{ $category->getFields( { editable => 1 } ) }) { next if $field->getId =~ m/contentPositions/; #This protects the contentPosition fields my $fieldId = $field->getId; my $fieldLabel = $field->getLabel; @@ -315,44 +379,18 @@ sub www_edit { 'profile_field_extras' => $field->getExtras, }); } - my $categoryId = $category->getId; - my $categoryLabel = $category->getLabel; - my $shortCategoryLabel = $category->getShortLabel; - my $isActive = $categoryId eq $selected; - my $categoryIndex = $counter++; - $var->{'profile_category_'.$categoryId."_isActive" } = $isActive; - $var->{'profile_category_'.$categoryId."_label" } = $categoryLabel; - $var->{'profile_category_'.$categoryId."_shortLabel"} = $shortCategoryLabel; - $var->{'profile_category_'.$categoryId."_fields" } = \@fields; - $var->{'profile_category_'.$categoryId."_index" } = $categoryIndex; - - push(@categories, { - 'profile_category_id' => $categoryId, - 'profile_category_isActive' => $isActive, - 'profile_category_is_'.$categoryId => "true", #Test so users can tell what category they are at in the loop - 'profile_category_label' => $categoryLabel, - 'profile_category_shortLabel' => $shortCategoryLabel, - 'profile_category_index' => $categoryIndex, - 'profile_fields_loop' => \@fields, - 'profile_errors' => $var->{'profile_errors'}, - }); - #This value will determine whether or not a valid category is active or not - $active ||= $isActive; + #Append the category variables + $self->appendCategoryVars($var,$category,\@fields,$var->{'profile_errors'}); } - + #If not category is selected, set the first category as the active one - $categories[0]->{profile_category_isActive} = 1 unless($active); - - $var->{'profile_category_loop'} = \@categories; + unless ($self->store->{hasActiveTab}) { + $var->{'profile_category_loop'}->[0]->{'profile_category_isActive'} = 1; + } - $var->{'profile_form_submit' } = WebGUI::Form::submit($session,{}); - $var->{'profile_form_header' } = WebGUI::Form::formHeader($session,{ - action => $self->getUrl("module=profile;do=editSave") - }); - $var->{'profile_form_footer' } = WebGUI::Form::formFooter($session); - - $self->appendCommonVars($var); + #Call the superclass common vars method cause we don't need to build the categories again + $self->SUPER::appendCommonVars($var); return $self->processTemplate($var,$self->getEditTemplateId); } @@ -375,10 +413,11 @@ sub www_editSave { push (@{$retHash->{errors}},@{$retHash->{warnings}}); unless(scalar(@{$retHash->{errors}})) { - foreach my $fieldName (keys %{$retHash->{profile}}) { - $session->user->profileField($fieldName,$retHash->{profile}->{$fieldName}); - } + $session->user->updateProfileFields( $retHash->{profile} ); } + + #Store the category the error occurred in the object for reference + $self->store->{selected} = $retHash->{errorCategory}; return $self->www_edit($retHash); } @@ -423,7 +462,7 @@ sub www_view { ); } - my @categories = (); + $var->{'profile_category_loop' } = []; foreach my $category (@{WebGUI::ProfileCategory->getCategories($session)}) { next unless $category->isViewable; my @fields = (); @@ -447,37 +486,19 @@ sub www_view { 'profile_field_raw' => $fieldRaw }); } - my $categoryId = $category->getId; - my $categoryLabel = $category->getLabel; - my $shortCategoryLabel = $category->getShortLabel; - my $isActive = $categoryId eq $selected; - my $categoryIndex = $counter++; - - $var->{'profile_category_'.$categoryId."_isActive" } = $isActive; - $var->{'profile_category_'.$categoryId."_label" } = $categoryLabel; - $var->{'profile_category_'.$categoryId."_shortLabel"} = $shortCategoryLabel; - $var->{'profile_category_'.$categoryId."_fields" } = \@fields; - $var->{'profile_category_'.$categoryId."_index" } = $categoryIndex; - push(@categories, { - 'profile_category_id' => $categoryId, - 'profile_category_isActive' => $isActive, - 'profile_category_is_'.$categoryId => "true", - 'profile_category_label' => $categoryLabel, - 'profile_category_shortLabel' => $shortCategoryLabel, - 'profile_category_index' => $categoryIndex, - 'profile_fields_loop' => \@fields, - }); - #This value will determine whether or not a valid category is active or not - $active ||= $isActive; + #Append the category variables + $self->appendCategoryVars($var,$category,\@fields); } #If not category is selected, set the first category as the active one - $categories[0]->{profile_category_isActive} = 1 unless($active); + unless ($self->store->{hasActiveTab}) { + $var->{'profile_category_loop'}->[0]->{'profile_category_isActive'} = 1; + } + my $privacySetting = $user->profileField("publicProfile") || "none"; $var->{'profile_privacy_'.$privacySetting } = "true"; - $var->{'profile_category_loop' } = \@categories; $var->{'profile_user_id' } = $user->userId; $var->{'can_edit_profile' } = $uid eq $session->user->userId; $var->{'acceptsPrivateMessages'} = $user->acceptsPrivateMessages($session->user->userId); @@ -486,6 +507,4 @@ sub www_view { return $self->processTemplate($var,$self->getViewTemplateId); } - - 1; diff --git a/lib/WebGUI/i18n/English/Account_Profile.pm b/lib/WebGUI/i18n/English/Account_Profile.pm index 22f952d89..83c2e926c 100644 --- a/lib/WebGUI/i18n/English/Account_Profile.pm +++ b/lib/WebGUI/i18n/English/Account_Profile.pm @@ -155,6 +155,11 @@ our $I18N = { lastUpdated => 1225724810, }, + 'save changes' => { + message => q{save changes}, + lastUpdated => 1225724810, + }, + }; diff --git a/www/extras/account/account.css b/www/extras/account/account.css index d75c73806..9d8899976 100644 --- a/www/extras/account/account.css +++ b/www/extras/account/account.css @@ -337,7 +337,7 @@ /* TABS - outer */ .bottombutton { - border: none; + #border: none; float:right; padding-right:2px; padding-top: 2px; @@ -351,7 +351,7 @@ border: solid #ffa700 6px; } .topbutton { - border: none; + #border: none; float:right; clear:both; padding-right:2px; @@ -434,6 +434,7 @@ ul.topTabs a.selected b { line-height:normal; padding-right:8px; padding-top:3px; + text-decoration: none; } .profile_displaySubContent { diff --git a/www/extras/account/images/save_changes.gif b/www/extras/account/images/save_changes.gif deleted file mode 100644 index 897b100d48de61aa1c07977f5401bce03eea5952..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1589 zcmV-52Fm$INk%w1VO{_g0Oo%HX=!PQh=|qK;pph-)YQ~TS%OnyiQ(blnxeORhNGIA znv#-|^6~Y;$JMm7w8zKC_V)I{#m_=hesy(q;^gZ1`1tbj^J;gO($(DB+S=UR-iMN` zpr*Rc&dz>`rt$OegN>;C`S-QE$wo#+{{H--p`psn)ig$Rt+T`A;o;`y=I-w7^7Qes zxW>P~zwq$zd&_eMrZWo2b)Xk52$H{1DXvoRN?CkE}-{IQa*|4_4mY%fc41ejE#u{3jj4|l$Dm3XImp$TYe)~n4zMhmRo0_XCtPc zr&_9&H2@0(iV98(9Tr}@yuH3&U|>~gU}R||zsbtWyGvdqWKz&dOVC_ZTuWd|yH6bp zP6~(t6F@gy=;`X~>0nD-Vqjb(V(j+!_~>BqB-!;`#jc6@hfax-8w3CZFr)wr3Nj1Vo}lL9k|Yf&`?aB#0n7PXY{4ejwQJV~p+Fd@(d>@&n2kzz7nE*o`4c0uRHR zh(I7BfsQg^!u&YB!9(;g4V*&{)7&`>4H*bHn4scM1^^v0Xo%3|0tOiH;p31X0mp>{ zG^W4@fddE{94DO6g$yYaSYQ_*7-*mbUCK(XrM<19ZZnHA03FL!2t(c&_#n&m|(_^K%g)M4Q7DQ1rTPOpdSuA_@ILS z0T-B|!jnUEv4;;-Rw;o2X80h%6j}OU0tz%F$-@b1sBpmvD)7*S8fKu-g$hFI7^MjY zoN$B+CIFGb0U7`iz#V@)5C9N)z@WkaIczWm4mfW-1G+2F zy21q#tgwP-@t$DszAIp`0fP~IF#rtTbnu4;0k|;08X`!5!VChK6)_EcP{3gS9C0v< z0|FR3NPz`1ctF?4(kAi73<%IL17Ih6Ai*0n7%+njGgE3c0xk?JPy!5uXt2QJ5Zs_V7uR1O0viCK^A0-K-_sA0_~Z*8K0rEb zumSAqoWF|_5J;_nSA}R$!UQD{FvC6Wzyn4<V84w*aAi(`fpa(>#zy%7J z001UP!3qK(3lyY-9W2N}3vRH3APiv#KM2AJD8L2fQG}xiP=p7#@P$QSLJ{u3ggV^e n0d;sG40XuE9{TWyKm=k7A5er2Xy6NuNTL##$iyc8ArJsNbY1vd