From: Gavin L. v. a. <we...@ma...> - 2007-09-14 15:34:03
|
Log Message: ----------- Bug fix. Both the proctored test template and all taken versions of the test were being dropped from the ProblemSets page when the user didn't have the auth level to view proctored tests. Modified Files: -------------- webwork2/lib/WeBWorK/ContentGenerator: ProblemSets.pm Revision Data ------------- Index: ProblemSets.pm =================================================================== RCS file: /webwork/cvs/system/webwork2/lib/WeBWorK/ContentGenerator/ProblemSets.pm,v retrieving revision 1.90 retrieving revision 1.91 diff -Llib/WeBWorK/ContentGenerator/ProblemSets.pm -Llib/WeBWorK/ContentGenerator/ProblemSets.pm -u -r1.90 -r1.91 --- lib/WeBWorK/ContentGenerator/ProblemSets.pm +++ lib/WeBWorK/ContentGenerator/ProblemSets.pm @@ -139,7 +139,7 @@ debug("Begin collecting merged sets"); my @sets = $db->getMergedSets( @userSetIDs ); - + debug("Begin fixing merged sets"); # Database fix (in case of undefined published values) @@ -164,13 +164,15 @@ my $existVersions = 0; my @gwSets = (); my @nonGWsets = (); + my %gwSetNames = (); # this is necessary because we get a setname + # for all versions of g/w tests foreach ( @sets ) { if ( defined( $_->assignment_type() ) && $_->assignment_type() =~ /gateway/ ) { $existVersions = 1; - push( @gwSets, $_ ) - if ( $_->assignment_type() !~ /proctored/ || - $authz->hasPermissions($user,"view_proctored_tests") ); + + push( @gwSets, $_ ) if ( ! defined($gwSetNames{$_->set_id}) ); + $gwSetNames{$_->set_id} = 1; } else { push( @nonGWsets, $_ ); } @@ -221,6 +223,11 @@ } debug("Begin sorting merged sets"); + +# before building final set lists, exclude proctored gateway sets +# for users without permission to view them + my $viewPr = $authz->hasPermissions( $user, "view_proctored_tests" ); + @gwSets = grep {$_->assignment_type !~ /proctored/ || $viewPr} @gwSets; if ( $sort eq 'name' ) { @nonGWsets = sortByName("set_id", @nonGWsets); |