Skip to content

Commit

Permalink
group() function Survey::ExpressionEngine that returns 1/0 depending …
Browse files Browse the repository at this point in the history
…on whether the current user is in a group
  • Loading branch information
scottwalters committed Jun 19, 2012
1 parent 851844c commit eaa29c5
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 1 deletion.
1 change: 1 addition & 0 deletions docs/changelog/7.x.x.txt
Original file line number Original file line Diff line number Diff line change
@@ -1,4 +1,5 @@
7.10.25 7.10.25
- added: group() function for Survey::ExpressionEngine to test group membership
- added: give WebGUI::PseudoRequest a hostname method - added: give WebGUI::PseudoRequest a hostname method
- fixed: don't clobber the request handler if WebGUI::Test was loaded inside of mod_perl - fixed: don't clobber the request handler if WebGUI::Test was loaded inside of mod_perl
- fixed #12365: editing a metadata may cause a fatal error (Arjan Widlak / United Knowledge) - fixed #12365: editing a metadata may cause a fatal error (Arjan Widlak / United Knowledge)
Expand Down
29 changes: 29 additions & 0 deletions lib/WebGUI/Asset/Wobject/Survey/ExpressionEngine.pm
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ my $validate;
my $validTargets; my $validTargets;
my $otherInstances; my $otherInstances;
my $tags; my $tags;
my $groups;


=head2 value =head2 value
Expand Down Expand Up @@ -352,6 +353,24 @@ sub avg {
return sum(@vals) / @vals; return sum(@vals) / @vals;
} }


=head2 group ($name)
Utility sub that returns a boolean indicating whether the user taking the survey is a member of a specified group, by name
=head3 $name
The name of the group
=cut

sub group {
my ($name) = @_;
my $value = grep( $_ eq $name, @$groups ) ? 1 : 0;
# warn "group($name) resolves to [$value]; groups = " . join( " ", map ">>$_<<", @$groups ) . " for userId " . $session->user->getId;
$session->log->debug("group($name) resolves to [$value]; groups = @$groups");
return $value;
}

=head2 round =head2 round
Utility sub shared with Safe compartment to allows expressions to easily round numbers Utility sub shared with Safe compartment to allows expressions to easily round numbers
Expand Down Expand Up @@ -442,6 +461,15 @@ sub run {
$validTargets = $opts->{validTargets}; $validTargets = $opts->{validTargets};
$tags = $opts->{tags} || {}; $tags = $opts->{tags} || {};
$otherInstances = {}; $otherInstances = {};
$groups = $session->db->buildArrayRef( qq{
select groupName
from groupings
join groups using (groupId)
where groupings.userId = ?
and expireDate > now()
}, [
$session->user->getId,
] );


if ( !$session->config->get('enableSurveyExpressionEngine') ) { if ( !$session->config->get('enableSurveyExpressionEngine') ) {
$session->log->debug('enableSurveyExpressionEngine config option disabled, skipping'); $session->log->debug('enableSurveyExpressionEngine config option disabled, skipping');
Expand Down Expand Up @@ -469,6 +497,7 @@ sub run {
$compartment->share('&restart'); $compartment->share('&restart');
$compartment->share('&avg'); $compartment->share('&avg');
$compartment->share('&round'); $compartment->share('&round');
$compartment->share('&group');


# Give them all of List::Util too # Give them all of List::Util too
$compartment->share_from( 'List::Util', $compartment->share_from( 'List::Util',
Expand Down
9 changes: 8 additions & 1 deletion t/Asset/Wobject/Survey/ExpressionEngine.t
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ my $session = WebGUI::Test->session;


#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# Tests # Tests
my $tests = 60; my $tests = 62;
plan tests => $tests + 1; plan tests => $tests + 1;


#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
Expand Down Expand Up @@ -237,6 +237,13 @@ cmp_deeply( $e->run( $session, qq{jump {scoreX('$url', ext_s0) == 200} target},
cmp_deeply( $e->run( $session, qq{jump {taggedX('$url', ext_tag) == 199} target}, {userId => $user->userId} ), cmp_deeply( $e->run( $session, qq{jump {taggedX('$url', ext_tag) == 199} target}, {userId => $user->userId} ),
{ jump => 'target', tags => {} }, 'external tag lookups work too' ); { jump => 'target', tags => {} }, 'external tag lookups work too' );


# group() utility function
$session->user( { userId => 3 });
cmp_deeply( $e->run( $session, qq{jump { group('Admins') } target}, ),
{ jump => 'target', tags => { }, }, 'group() function recognizes us as Admins' );
cmp_deeply( $e->run( $session, qq{jump { group('Space Aliens') } target}, ),
{ jump => undef, tags => { }, }, 'group() function recognizes that we are not Space Aliens' );

# Test for nasty bugs caused by file-scoped lexicals not being properly initialised in L<ExpressionEngine::run> # Test for nasty bugs caused by file-scoped lexicals not being properly initialised in L<ExpressionEngine::run>
{ {
# Create a second test user # Create a second test user
Expand Down

0 comments on commit eaa29c5

Please sign in to comment.