Colin: adding avatar to collaboration systems and refactoring some user profile stuff. Added photo and avatar fields to user profile.

This commit is contained in:
Colin Kuskie 2005-11-13 18:42:08 +00:00
parent 852ba1ba15
commit e75988cd1f
37 changed files with 1000 additions and 279 deletions

View file

@ -17,6 +17,7 @@ use WebGUI::Operation::Auth;
use WebGUI::DateTime;
use WebGUI::ErrorHandler;
use WebGUI::FormProcessor;
use WebGUI::Form::DynamicField;
use WebGUI::Grouping;
use WebGUI::HTML;
use WebGUI::HTMLForm;
@ -36,47 +37,50 @@ 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});
if ($method eq "selectList") {
$values = WebGUI::Operation::Shared::secureEval($data->{dataValues});
# note: this big if statement doesn't look elegant, but doing regular ORs caused problems with the array reference.
if ($session{form}{$data->{fieldName}}) {
$default = [$session{form}{$data->{fieldName}}];
} elsif ($session{user}{$data->{fieldName}}) {
$default = [$session{user}{$data->{fieldName}}];
}
$hash{'profile.formElement'} = WebGUI::Form::selectList({
"name"=>$data->{fieldName},
"options"=>$values,
"value"=>$default
});
} else {
if ($session{form}{$data->{fieldName}}) {
$default = $session{form}{$data->{fieldName}};
} elsif (exists $session{user}{$data->{fieldName}}) {
$default = $session{user}{$data->{fieldName}};
} else {
$default = $data->{dataDefault};
}
my $cmd = 'WebGUI::Form::'.$method.'({"name"=>$data->{fieldName},"value"=>$default})';
$hash{'profile.formElement'} = eval($cmd);
}
$hash{'profile.formElement.label'} = $label;
push(@array,\%hash)
}
$a->finish;
return \@array;
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});
if ($method eq "selectList") {
$values = WebGUI::Operation::Shared::secureEval($data->{dataValues});
# note: this big if statement doesn't look elegant, but doing regular ORs caused problems with the array reference.
if ($session{form}{$data->{fieldName}}) {
$default = [$session{form}{$data->{fieldName}}];
}
elsif ($session{user}{$data->{fieldName}}) {
$default = [$session{user}{$data->{fieldName}}];
}
$hash{'profile.formElement'} = WebGUI::Form::selectList({
"name"=>$data->{fieldName},
"options"=>$values,
"value"=>$default
});
}
else {
if ($session{form}{$data->{fieldName}}) {
$default = $session{form}{$data->{fieldName}};
}
elsif (exists $session{user}{$data->{fieldName}}) {
$default = $session{user}{$data->{fieldName}};
}
else {
$default = $data->{dataDefault};
}
my $cmd = 'WebGUI::Form::'.$method.'({"name"=>$data->{fieldName},"value"=>$default})';
$hash{'profile.formElement'} = eval($cmd);
}
$hash{'profile.formElement.label'} = $label;
push(@array,\%hash)
}
$a->finish;
return \@array;
}
#-------------------------------------------------------------------
@ -109,105 +113,98 @@ 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 $fieldData = WebGUI::FormProcessor::process($field{fieldName},$field{dataType}, $field{dataDefault});
WebGUI::Macro::negate(\$fieldData);
$data{$field{fieldName}} = $fieldData;
if ($field{required} && $data{$field{fieldName}} eq "") {
$error .= '<li>'.(WebGUI::Operation::Shared::secureEval($field{fieldLabel})).' '.WebGUI::International::get(451).'</li>';
}elsif($field{fieldName} eq "email" && isDuplicateEmail($data{$field{fieldName}})){
$warning .= '<li>'.WebGUI::International::get(1072).'</li>';
}
}
$a->finish;
return (\%data, $error, $warning);
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) {
$data{$field{fieldName}} = WebGUI::Macro::negate(WebGUI::FormProcessor::process($field{fieldName},$field{dataType}, $field{dataDefault}));
if ($field{required} && $data{$field{fieldName}} eq "") {
$error .= '<li>'.(WebGUI::Operation::Shared::secureEval($field{fieldLabel})).' '.WebGUI::International::get(451).'</li>';
}
elsif($field{fieldName} eq "email" && isDuplicateEmail($data{$field{fieldName}})){
$warning .= '<li>'.WebGUI::International::get(1072).'</li>';
}
}
$a->finish;
return (\%data, $error, $warning);
}
#-------------------------------------------------------------------
sub www_editProfile {
my ($a, $data, $method, $values, $category, $label, $default, $previousCategory, $subtext, $vars, @profile, @array);
return WebGUI::Operation::Auth::www_auth("init") if($session{user}{userId} eq '1');
$vars->{displayTitle} .= '<h1>'.WebGUI::International::get(338).'</h1>';
$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 = ();
$category = WebGUI::Operation::Shared::secureEval($data->{categoryName});
$method = $data->{dataType};
$label = WebGUI::Operation::Shared::secureEval($data->{fieldLabel});
$default = WebGUI::Operation::Shared::secureEval($data->{dataDefault});
if ($method eq "selectList" || $method eq "checkList" || $method eq "radioList") {
$values = WebGUI::Operation::Shared::secureEval($data->{dataValues});
my $orderedValues = {};
tie %{$orderedValues}, 'Tie::IxHash';
foreach my $ov (sort keys %{$values}) {
$orderedValues->{$ov} = $values->{$ov};
}
# note: this big if statement doesn't look elegant, but doing regular ORs caused problems with the array reference.
if ($session{form}{$data->{fieldName}}) {
$default = [$session{form}{$data->{fieldName}}];
} elsif ($session{user}{$data->{fieldName}}) {
$default = [$session{user}{$data->{fieldName}}];
}
$hash{'profile.form.element'} = WebGUI::Form::selectList({
"name"=>$data->{fieldName},
"options"=>$values,
"value"=>$default
});
} else {
if ($session{form}{$data->{fieldName}}) {
$default = $session{form}{$data->{fieldName}};
} elsif (exists $session{user}{$data->{fieldName}}) {
$default = $session{user}{$data->{fieldName}};
}
my $cmd = 'WebGUI::Form::'.$method.'({"name"=>$data->{fieldName},"value"=>$default})';
$hash{'profile.form.element'} = eval($cmd);
}
$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;
}
$a->finish;
my ($a, $data, $previousCategory, $subtext, $vars, @profile, @array);
return WebGUI::Operation::Auth::www_auth("init") if($session{user}{userId} eq '1');
$vars->{displayTitle} .= '<h1>'.WebGUI::International::get(338).'</h1>';
$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 $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'} = "*";
}
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(@profile,\%hash);
}
$a->finish;
$vars->{'profile.form.elements'} = \@array;
$vars->{'profile.form.submit'} = WebGUI::Form::submit({});
$vars->{'profile.accountOptions'} = WebGUI::Operation::Shared::accountOptions();
$vars->{'profile.form.submit'} = WebGUI::Form::submit({});
$vars->{'profile.accountOptions'} = WebGUI::Operation::Shared::accountOptions();
return WebGUI::Operation::Shared::userStyle(WebGUI::Asset::Template->new("PBtmpl0000000000000051")->process($vars));
}
#-------------------------------------------------------------------
sub www_editProfileSave {
my ($profile, $fieldName, $error, $u, $warning);
return WebGUI::Operation::Auth::www_auth("init") if ($session{user}{userId} eq '1');
return WebGUI::Operation::Auth::www_auth("init") if ($session{user}{userId} eq '1');
($profile, $error, $warning) = validateProfileData();
$error .= $warning;
@ -215,8 +212,8 @@ sub www_editProfileSave {
return www_editProfile('<ul>'.$error.'</ul>') if($error ne "");
$u = WebGUI::User->new($session{user}{userId});
foreach $fieldName (keys %{$profile}) {
$u->profileField($fieldName,WebGUI::HTML::filter(${$profile}{$fieldName},"javascript"));
foreach $fieldName (keys %{$profile}) {
$u->profileField($fieldName,WebGUI::HTML::filter(${$profile}{$fieldName},"javascript"));
}
WebGUI::Session::refreshUserInfo($session{user}{userId});
return WebGUI::Operation::Auth::www_auth();
@ -224,48 +221,63 @@ sub www_editProfileSave {
#-------------------------------------------------------------------
sub www_viewProfile {
my ($a, %data, $category, $label, $value, $previousCategory, $u, %gender,$vars,@array);
%gender = ('neuter'=>WebGUI::International::get(403),'male'=>WebGUI::International::get(339),'female'=>WebGUI::International::get(340));
my ($a, %data, $category, $label, $value, $previousCategory, $u, $vars, @array);
$u = WebGUI::User->new($session{form}{uid});
$vars->{displayTitle} = '<h1>'.WebGUI::International::get(347).' '.$u->username.'</h1>';
$vars->{displayTitle} = '<h1>'.WebGUI::International::get(347).' '.$u->username.'</h1>';
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
$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);
}
$label = WebGUI::Operation::Shared::secureEval($data{fieldLabel});
if ($data{dataValues}) {
$value = WebGUI::Operation::Shared::secureEval($data{dataValues});
$value = ${$value}{$u->profileField($data{fieldName})};
} else {
$value = $u->profileField($data{fieldName});
}
if ($data{dataType} eq "date") {
$value = WebGUI::DateTime::epochToHuman($value,"%z");
}
unless ($data{fieldName} eq "email" and $u->profileField("publicEmail") < 1) {
my $hash;
$hash->{'profile.label'} = $label;
$hash->{'profile.value'} = $value;
push(@array,$hash);
}
$previousCategory = $category;
}
$vars->{'profile.elements'} = \@array;
$a->finish;
if ($session{user}{userId} eq $session{form}{uid}) {
$vars->{'profile.accountOptions'} = WebGUI::Operation::Shared::accountOptions();
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;
}
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);
}
return WebGUI::Operation::Shared::userStyle(WebGUI::Asset::Template->new("PBtmpl0000000000000052")->process($vars));
$vars->{'profile.elements'} = \@array;
$a->finish;
if ($session{user}{userId} eq $session{form}{uid}) {
$vars->{'profile.accountOptions'} = WebGUI::Operation::Shared::accountOptions();
}
return WebGUI::Operation::Shared::userStyle(WebGUI::Asset::Template->new("PBtmpl0000000000000052")->process($vars));
}
1;

View file

@ -22,6 +22,7 @@ use WebGUI::Privilege;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::Operation::Shared;
use WebGUI::Form::FieldType;
#-------------------------------------------------------------------
sub _reorderCategories {
@ -212,14 +213,24 @@ sub www_editProfileField {
-hoverHelp=>WebGUI::International::get('474 description',"WebGUIProfile"),
-value=>$data{required}
);
$f->fieldType(
#WebGUI::ErrorHandler::warn("type=".$data{dataType});
my $fieldType = WebGUI::Form::FieldType->new(
-name=>"dataType",
-label=>WebGUI::International::get(486,"WebGUIProfile"),
-hoverHelp=>WebGUI::International::get('486 description',"WebGUIProfile"),
-value=>$data{dataType},
-defaultValue=>"text",
-types=>[qw(dateTime timeZone TimeField float zipcode text textarea HTMLArea url date email phone integer yesNo selectList radioList checkList)]
);
-value=>ucfirst $data{dataType},
-defaultValue=>"Text",
);
my @profileForms = ();
foreach my $form ( sort @{ $fieldType->{types} }) {
my $cmd = join '::', 'WebGUI::Form', $form;
eval "use $cmd";
my $w = eval "$cmd->new();";
push @profileForms, $form if $w->{profileEnabled};
}
$fieldType->{types} = \@profileForms;
$f->raw($fieldType->toHtmlWithWrapper());
$f->textarea(
-name => "dataValues",
-label => WebGUI::International::get(487,"WebGUIProfile"),

View file

@ -15,10 +15,11 @@ use Tie::CPHash;
use Tie::IxHash;
use WebGUI::AdminConsole;
use WebGUI::DateTime;
use WebGUI::Form;
use WebGUI::FormProcessor;
use WebGUI::Group;
use WebGUI::Grouping;
use WebGUI::Form;
use WebGUI::Form::DynamicField;
use WebGUI::HTMLForm;
use WebGUI::Icon;
use WebGUI::International;
@ -278,48 +279,39 @@ sub www_editUser {
where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId
order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber");
my $previousCategory;
while(my %data = $a->hash) {
my $category = WebGUI::Operation::Shared::secureEval($data{categoryName});
while(my $data = $a->hashRef) {
my $category = WebGUI::Operation::Shared::secureEval($data->{categoryName});
if ($category ne $previousCategory) {
$tabform->getTab("profile")->raw('<tr><td colspan="2" class="tableHeader">'.$category.'</td></tr>');
}
my $values = WebGUI::Operation::Shared::secureEval($data{dataValues});
my $method = $data{dataType};
my $label = WebGUI::Operation::Shared::secureEval($data{fieldLabel});
my $values = WebGUI::Operation::Shared::secureEval($data->{dataValues});
my $method = $data->{dataType};
my $label = WebGUI::Operation::Shared::secureEval($data->{fieldLabel});
my $default;
if ($method eq "selectList" || $method eq "checkList" || $method eq "radioList") {
my $orderedValues = {};
tie %{$orderedValues}, 'Tie::IxHash';
foreach my $ov (sort keys %{$values}) {
$orderedValues->{$ov} = $values->{$ov};
}
if ($session{form}{$data{fieldName}}) {
$default = [$session{form}{$data{fieldName}}];
} elsif (defined $u->profileField($data{fieldName}) && (defined($values->{$u->profileField($data{fieldName})}))) {
$default = [$u->profileField($data{fieldName})];
} else {
$default = WebGUI::Operation::Shared::secureEval($data{dataDefault});
}
$tabform->getTab("profile")->$method(
-name=>$data{fieldName},
-options=>$orderedValues,
-label=>$label,
-value=>$default
);
} elsif ($method) {
if ($session{form}{$data{fieldName}}) {
$default = $session{form}{$data{fieldName}};
} elsif (defined $u->profileField($data{fieldName})) {
$default = $u->profileField($data{fieldName});
} else {
$default = WebGUI::Operation::Shared::secureEval($data{dataDefault});
}
$tabform->getTab("profile")->$method(
-name=>$data{fieldName},
-label=>$label,
-value=>$default
);
}
my $orderedValues = {};
tie %{$orderedValues}, 'Tie::IxHash';
foreach my $ov (sort keys %{$values}) {
$orderedValues->{$ov} = $values->{$ov};
}
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},
label => $label,
value => $default,
options => $orderedValues,
fieldType => $method,
);
$tabform->getTab("profile")->raw($form->displayFormWithWrapper());
$previousCategory = $category;
}
$a->finish;