Group.t: group karma tests, better clean-up at end

User.t: better clean-up at end
Scratch.t: no newlines in test output
Session/Scratch.pm: convert to use placeholders
Ad.pm: Add missing line of POD.
Group.pm: add method to get all users in a group by karma.
User.pm: isInGroup to use getKarmaUsers.
This commit is contained in:
Colin Kuskie 2006-04-06 16:52:34 +00:00
parent fd5be2ce2d
commit 3e179fa4ad
7 changed files with 120 additions and 47 deletions

View file

@ -232,6 +232,8 @@ The number of clicks that have been purchased for this ad.
=head4 impressionsBought
The number of times the user has paid for this ad to be displayed on the site.
=cut
sub set {

View file

@ -421,19 +421,17 @@ sub expireOffset {
#-------------------------------------------------------------------
=head2 externalUsers ( )
=head2 getDatabaseUsers ( )
Get the set of users allowed to be in this group via external means, such as database
queries, LDAP and/or IP filtering.
Get the set of users allowed to be in this group via a database query.
=cut
sub externalUsers {
sub getDatabaseUsers {
my $self = shift;
my @dbUsers = ();
my $gid = $self->getId;
my @externalUsers = ();
my $isInGroup = $self->session->stow->get('isInGroup');
### Check external database
### Check db database
if ($self->get("dbQuery") && defined $self->get("databaseLinkId")) {
my $dbLink = WebGUI::DatabaseLink->new($self->session,$self->get("databaseLinkId"));
my $dbh = $dbLink->db;
@ -446,16 +444,29 @@ sub externalUsers {
}
else {
while(my ($userId)=$sth->array) {
push @externalUsers, $userId;
$isInGroup->{$userId}{$gid} = 1;
push @dbUsers, $userId;
}
}
$sth->finish;
$dbLink->disconnect;
}
}
$self->session->stow->set("isInGroup",$isInGroup);
return \@externalUsers;
return \@dbUsers;
}
#-------------------------------------------------------------------
=head2 getKarmaUsers ( )
Get the set of users allowed to be in this group via their current karma setting
and this group's karmaThreshold. All users with
=cut
sub getKarmaUsers {
my $self = shift;
return [] unless $self->session->setting->get('useKarma');
return $self->session->db->buildArrayRef('select userId from users where karma >= ?', [$self->karmaThreshold]);
}
#-------------------------------------------------------------------
@ -591,7 +602,6 @@ A boolean value to determine whether the method should return the users directly
A boolean that if set true will return the users list minus the expired groupings.
=cut
sub getUsers {
my $self = shift;
my $recursive = shift;
@ -615,12 +625,19 @@ sub getUsers {
}
##Have to iterate twice due to the withoutExpired clause.
foreach my $groupId (@{ $groups }) {
push @externalUsers, @{ WebGUI::Group->new($self->session, $groupId)->externalUsers() };
my $extGroup = WebGUI::Group->new($self->session, $groupId);
push @externalUsers,
@{ $extGroup->getDatabaseUsers() },
@{ $extGroup->getKarmaUsers() },
;
}
}
$clause .= ")";
my @localUsers = $self->session->db->buildArray("select userId from groupings where $clause");
push @externalUsers, @{ $self->externalUsers() };
push @externalUsers,
@{ $self->getDatabaseUsers() },
@{ $self->getKarmaUsers() },
;
my @users = ( @localUsers, @externalUsers );
return \@users;
}

View file

@ -174,7 +174,7 @@ The current session.
sub new {
my $class = shift;
my $session = shift;
my $data = $session->db->buildHashRef("select name,value from userSessionScratch where sessionId=".$session->db->quote($session->getId));
my $data = $session->db->buildHashRef("select name,value from userSessionScratch where sessionId=?",[$session->getId]);
bless {_session=>$session,_sessionId=>$session->getId, _data=>$data}, $class;
}
@ -215,7 +215,7 @@ sub set {
my $value = shift;
return undef unless ($name);
$self->{_data}{$name} = $value;
$self->session->db->write("replace into userSessionScratch (sessionId, name, value) values (".$self->session->db->quoteAndJoin([$self->{_sessionId}, $name, $value]).")");
$self->session->db->write("replace into userSessionScratch (sessionId, name, value) values (?,?,?)", [$self->{_sessionId}, $name, $value]);
}

View file

@ -299,14 +299,6 @@ sub isInGroup {
return 1;
}
}
}
### Check karma levels.
if ($self->session->setting->get("useKarma")) {
if ($self->karma >= $group->get("karmaThreshold")) {
$isInGroup->{$uid}{$gid} = 1;
$self->session->stow->set("isInGroup",$isInGroup);
return 1;
}
}
### Check ldap
if ($group->get("ldapGroup") && $group->get("ldapGroupProperty")) {
@ -349,9 +341,15 @@ sub isInGroup {
}
}
if ($group->get("dbQuery") && defined $group->get("databaseLinkId")) {
my @externalUsers = @{ $group->externalUsers() } ;
foreach my $extUserId ( @externalUsers ) {
if (my @dbUsers = @{ $group->getDatabaseUsers() }) {
foreach my $extUserId ( @dbUsers ) {
$isInGroup->{$extUserId}{$gid} = 1;
}
$self->session->stow->set("isInGroup",$isInGroup);
return 1 if ($isInGroup->{$uid}{$gid});
}
if (my @karmaUsers = @{ $group->getKarmaUsers() }) {
foreach my $extUserId ( @karmaUsers ) {
$isInGroup->{$extUserId}{$gid} = 1;
}
$self->session->stow->set("isInGroup",$isInGroup);
@ -401,8 +399,8 @@ sub karma {
if (defined $amount && defined $source && defined $description) {
$self->uncache;
$self->{_user}{karma} += $amount;
$self->session->db->write("update users set karma=karma+".$self->session->db->quote($amount)." where userId=".$self->session->db->quote($self->userId));
$self->session->db->write("insert into karmaLog values (".$self->session->db->quote($self->userId).",$amount,".$self->session->db->quote($source).",".$self->session->db->quote($description).",".$self->session->datetime->time().")");
$self->session->db->write("update users set karma=karma+? where userId=?", [$amount, $self->userId]);
$self->session->db->write("insert into karmaLog values (?,?,?,?,?)",[$self->userId, $amount, $source, $description, $self->session->datetime->time()]);
}
return $self->{_user}{karma};
}