--- loncom/homework/bridgetask.pm 2006/05/12 06:55:46 1.150 +++ loncom/homework/bridgetask.pm 2006/05/25 20:08:18 1.157 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.150 2006/05/12 06:55:46 albertel Exp $ +# $Id: bridgetask.pm,v 1.157 2006/05/25 20:08:18 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,7 +40,7 @@ use Apache::slotrequest(); use Time::HiRes qw( gettimeofday tv_interval ); BEGIN { - &Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Instance','InstanceText','Criteria','ClosingParagraph')); + &Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Question','Instance','InstanceText','Criteria','ClosingParagraph')); } sub initialize_bridgetask { @@ -95,7 +95,7 @@ sub create_new_version { my $version= $Apache::lonhomework::history{'resource.0.version'}; $version++; - + &Apache::lonxml::debug("Making version $version"); #clean out all current results foreach my $key (keys(%Apache::lonhomework::history)) { if ($key=~/^resource\.0\./) { @@ -108,6 +108,9 @@ sub create_new_version { if (defined($user) && defined($domain)) { $Apache::lonhomework::results{"resource.$version.0.checkedin"}= $user.':'.$domain; + } else { + $Apache::lonhomework::results{"resource.$version.0.checkedin"}= + $env{'user.name'}.':'.$env{'user.domain'}; } if (defined($slot_name)) { $Apache::lonhomework::results{"resource.$version.0.checkedin.slot"}= @@ -454,8 +457,11 @@ sub start_Task { my ($version,$previous)=&get_version(); ($status,$accessmsg,my $slot_name,$slot) = &Apache::lonhomework::check_slot_access('0','Task'); - if ($status eq 'CAN_ANSWER' && $version eq '' && $slot_name eq '') { - &create_new_version('Task'); + if ($status eq 'CAN_ANSWER' && $version eq '') { + &create_new_version('Task',undef,undef,$slot_name); + &add_to_queue('gradingqueue',{'type' => 'Task', + 'time' => time, + 'slot' => $slot_name}); ($version,$previous)=&get_version(); } @@ -528,7 +534,7 @@ DONESCREEN && defined($Apache::inputtags::slot_name)) { my $result= &add_to_queue('gradingqueue', - {'type' => 'task', + {'type' => 'Task', 'time' => time, 'slot' => $Apache::inputtags::slot_name}); @@ -878,6 +884,7 @@ DONEBUTTON $man_count++; } } + my $opt_req=&Apache::lonxml::get_param('OptionalRequired', $parstack,$safeeval); if ($opt_req !~ /\S/) { $opt_req='0'; } @@ -915,11 +922,11 @@ DONEBUTTON my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); if ($useslots =~ /^\s*no\s*$/i) { &add_to_queue('gradingqueue', - {'type' => 'task', + {'type' => 'Task', 'time' => time}); } elsif (defined($Apache::inputtags::slot_name)) { &add_to_queue('gradingqueue', - {'type' => 'task', + {'type' => 'Task', 'time' => time, 'slot' => $Apache::inputtags::slot_name}); } @@ -1191,6 +1198,30 @@ sub add_to_queue { return &Apache::lonnet::cput($queue,\%data,$cdom,$cnum); } +sub get_limited_classlist { + my ($sections) = @_; + + my $classlist = &Apache::loncoursedata::get_classlist(); + foreach my $student (keys(%$classlist)) { + if ( $classlist->{$student}[&Apache::loncoursedata::CL_STATUS()] + ne 'Active') { + delete($classlist->{$student}); + } + } + + if (ref($sections) && !grep('all',@{ $sections })) { + foreach my $student (keys(%$classlist)) { + my $section = + $classlist->{$student}[&Apache::loncoursedata::CL_SECTION()]; + if (! grep($section,@{ $sections })) { + delete($classlist->{$student}); + } + } + } + return $classlist; +} + + sub show_queue { my ($queue,$with_selects)=@_; my $result; @@ -1200,14 +1231,25 @@ sub show_queue { my @chosen_sections= &Apache::loncommon::get_env_multiple('form.chosensections'); - &Apache::grades::init_perm(); - my ($classlist,$section,$fullname)=&Apache::grades::getclasslist(\@chosen_sections,); - &Apache::grades::reset_perm(); + + my $classlist = &get_limited_classlist(\@chosen_sections); + if (!(grep(/^all$/,@chosen_sections))) { $result.='
Showing only sections '.join(', ',@chosen_sections). '.
'."\n"; } + my ($view,$view_section); + my $scope = $env{'request.course.id'}; + if (!($view=&Apache::lonnet::allowed('vgr',$scope))) { + $scope .= '/'.$env{'request.course.sec'}; + if ( $view = &Apache::lonnet::allowed('vgr',$scope)) { + $view_section=$env{'request.course.sec'}; + } else { + undef($view); + } + } + my $regexp="^$symb\0"; my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); my ($tmp)=%queue; @@ -1221,6 +1263,16 @@ sub show_queue { foreach my $key (sort(keys(%queue))) { my ($symb,$uname,$udom) = &decode_queue_key($key); if (!defined($classlist->{$uname.':'.$udom})) { next; } + + my $section = $classlist->{$uname.':'.$udom}[&Apache::loncoursedata::CL_SECTION()]; + + my $can_view=1; + if (!$view + || ($view_section && !$section) + || ($view_section && $section && ($view_section ne $section))) { + $can_view=0; + } + if ($key=~/locked$/ && !$with_selects) { $result.="