Profile field defaulting fixes.

This commit is contained in:
Drake 2006-12-06 16:45:52 +00:00
parent 4eb99cebfb
commit aa3b8b6d24
4 changed files with 22 additions and 19 deletions

View file

@ -43,6 +43,7 @@
- add: workflow activity for expiry of email-unvalidated users. This is not - add: workflow activity for expiry of email-unvalidated users. This is not
enabled by default; add an instance of it to an appropriate workflow if you enabled by default; add an instance of it to an appropriate workflow if you
want it to run. want it to run.
- fix: new profile fields and new users not handling profile defaults right
- The Events Calendar is now the new Calendar with some fun new features. - The Events Calendar is now the new Calendar with some fun new features.
All your existing Events Calendars will be migrated automatically. All your existing Events Calendars will be migrated automatically.
- Major change: password recovery is now based on profile fields rather than - Major change: password recovery is now based on profile fields rather than

View file

@ -351,10 +351,11 @@ sub www_editUser {
foreach my $field (@{$category->getFields}) { foreach my $field (@{$category->getFields}) {
next if $field->getId =~ /contentPositions/; next if $field->getId =~ /contentPositions/;
my $label = $field->getLabel . ($field->isRequired ? "*" : ''); my $label = $field->getLabel . ($field->isRequired ? "*" : '');
my $defaultValue = WebGUI::Operation::Shared::secureEval($session, $field->get('dataDefault'));
if ($field->getId eq "alias" && $u->userId eq '1') { if ($field->getId eq "alias" && $u->userId eq '1') {
$tabform->getTab("profile")->raw($field->formField({label=>$label},1,undef,1)); $tabform->getTab("profile")->raw($field->formField({label=>$label, value=>$defaultValue},1,undef,1));
} else { } else {
$tabform->getTab("profile")->raw($field->formField({label=>$label},1,$u)); $tabform->getTab("profile")->raw($field->formField({label=>$label, value=>$defaultValue},1,$u));
} }
} }
$tabform->getTab("profile")->fieldSetEnd($category->getLabel); $tabform->getTab("profile")->fieldSetEnd($category->getLabel);

View file

@ -107,6 +107,14 @@ sub create {
my $self = $class->new($session,$id); my $self = $class->new($session,$id);
$self->setCategory($categoryId); $self->setCategory($categoryId);
$self->set($properties); $self->set($properties);
# Since we're creating a new profile field, give every user the default value for it.
my $default = WebGUI::Operation::Shared::secureEval($session,$properties->{dataDefault});
foreach my $userId ($session->db->buildArray("SELECT userId FROM users")) {
my $user = WebGUI::User->new($session, $userId);
$user->profileField($id, $default);
}
return $self; return $self;
} }
@ -183,7 +191,7 @@ sub formField {
} else { } else {
$default = WebGUI::Operation::Shared::secureEval($self->session,$properties->{dataDefault}); $default = WebGUI::Operation::Shared::secureEval($self->session,$properties->{dataDefault});
} }
$properties->{value} = $default; $properties->{value} = $default unless defined $properties->{value};
if ($withWrapper == 1) { if ($withWrapper == 1) {
return WebGUI::Form::DynamicField->new($self->session,%{$properties})->displayFormWithWrapper; return WebGUI::Form::DynamicField->new($self->session,%{$properties})->displayFormWithWrapper;
} elsif ($withWrapper == 2) { } elsif ($withWrapper == 2) {

View file

@ -63,6 +63,13 @@ sub _create {
$session->db->write("insert into users (userId,dateCreated) values (?,?)",[$userId, time()]); $session->db->write("insert into users (userId,dateCreated) values (?,?)",[$userId, time()]);
WebGUI::Group->new($session,2)->addUsers([$userId]); WebGUI::Group->new($session,2)->addUsers([$userId]);
WebGUI::Group->new($session,7)->addUsers([$userId]); WebGUI::Group->new($session,7)->addUsers([$userId]);
# Give user all profile fields as default values.
foreach my $field (@{WebGUI::ProfileField->getFields($session)}) {
my $defaultValue = WebGUI::Operation::Shared::secureEval($session, $field->get('dataDefault'));
$session->db->write("INSERT INTO userProfileData (userId, fieldName, fieldData) VALUES (?, ?, ?)", [$userId, $field->getId, $defaultValue]);
}
return $userId; return $userId;
} }
@ -385,22 +392,8 @@ sub new {
my %user; my %user;
tie %user, 'Tie::CPHash'; tie %user, 'Tie::CPHash';
%user = $session->db->quickHash("select * from users where userId=".$session->db->quote($userId)); %user = $session->db->quickHash("select * from users where userId=".$session->db->quote($userId));
my %profile = $session->db->buildHash("select userProfileField.fieldName, userProfileData.fieldData my %profile = $session->db->buildHash("SELECT fieldName, fieldData FROM userProfileData WHERE userId = ?", [$user{userId}]);
from userProfileField, userProfileData where userProfileField.fieldName=userProfileData.fieldName and $profile{alias} = $user{username} if $profile{alias} !~ /\w/;
userProfileData.userId=".$session->db->quote($user{userId}));
my %default = $session->db->buildHash("select fieldName, dataDefault from userProfileField");
foreach my $key (keys %default) {
my $value;
if ($profile{$key} eq "" && $default{$key}) {
$value = eval($default{$key});
if (ref $value eq "ARRAY") {
$profile{$key} = $$value[0];
} else {
$profile{$key} = $value;
}
}
}
$profile{alias} = $user{username} if ($profile{alias} =~ /^\W+$/ || $profile{alias} eq "");
$userData = { $userData = {
_userId => $userId, _userId => $userId,
_user => \%user, _user => \%user,