From: Gavin L. v. a. <we...@ma...> - 2005-12-22 18:53:04
|
Log Message: ----------- Gateway update: revise display of versioned and non-versioned sets. Now all regular sets are sorted to the top of the list, with gateway tests at the bottom. Use view_proctored_tests parameter to decide if proctored tests should be hidden. Now uses new listUserSets and listUserSetVersions routines from DB. 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.64 retrieving revision 1.65 diff -Llib/WeBWorK/ContentGenerator/ProblemSets.pm -Llib/WeBWorK/ContentGenerator/ProblemSets.pm -u -r1.64 -r1.65 --- lib/WeBWorK/ContentGenerator/ProblemSets.pm +++ lib/WeBWorK/ContentGenerator/ProblemSets.pm @@ -133,11 +133,15 @@ my $hardcopyPage = $urlpath->newFromModule("WeBWorK::ContentGenerator::Hardcopy", courseID => $courseName); my $actionURL = $self->systemLink($hardcopyPage, authen => 0); # no authen info for form action +# we have to get sets and versioned sets separately my @setIDs = $db->listUserSets($effectiveUser); + my @vSetIDs = $db->listUserSetVersions($effectiveUser); my @userSetIDs = map {[$effectiveUser, $_]} @setIDs; + my @vUserSetIDs = map {[$effectiveUser, /(.*),v\d+$/, $_]} @vSetIDs; debug("Begin collecting merged sets"); my @sets = $db->getMergedSets( @userSetIDs ); + my @vSets = (@vSetIDs) ? $db->getMergedVersionedSets(@vUserSetIDs) : (); debug("Begin fixing merged sets"); @@ -160,15 +164,21 @@ # differently, so check for those here debug("Begin set-type check"); my $existVersions = 0; + my @gwSets = (); + my @nonGWsets = (); foreach ( @sets ) { if ( defined( $_->assignment_type() ) && $_->assignment_type() =~ /gateway/ ) { $existVersions = 1; - last; + push( @gwSets, $_ ) + if ( $_->assignment_type() !~ /proctored/ || + $authz->hasPermissions($user,"view_proctored_tests") ); + } else { + push( @nonGWsets, $_ ); } } -# for gateways we change the default sort order if it isn't sent in - $sort = 'name' if ( $existVersions && ! $r->param("sort") ); + +# set sort method $sort = "status" unless $sort eq "status" or $sort eq "name"; # now set the headers for the table @@ -203,8 +213,19 @@ debug("Begin sorting merged sets"); - @sets = sortByName("set_id", @sets) if $sort eq "name"; - @sets = sort byUrgency @sets if $sort eq "status"; + if ( $sort eq 'name' ) { + @nonGWsets = sortByName("set_id", @nonGWsets); + @gwSets = sortByName("set_id", @gwSets); + } elsif ( $sort eq 'status' ) { + @nonGWsets = sort byUrgency @nonGWsets; + @gwSets = sort byUrgency @gwSets; + } +# we sort set versions by name; this at least in part relies on versions +# being finished by the time they show up on the list here. + @vSets = sortByName("set_id", @vSets); + +# put together a complete list of sorted sets to consider + @sets = (@nonGWsets, @gwSets, @vSets); debug("End preparing merged sets"); |