--- loncom/homework/bridgetask.pm 2006/11/14 22:12:58 1.205 +++ loncom/homework/bridgetask.pm 2006/12/07 20:44:55 1.214 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.205 2006/11/14 22:12:58 albertel Exp $ +# $Id: bridgetask.pm,v 1.214 2006/12/07 20:44:55 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -380,6 +380,13 @@ sub nest { } } +sub start_delay { + push(@delay,1); +} +sub end_delay { + pop(@delay); +} + sub nested_parse { my ($str,$env,$args) = @_; my @old_env = @Apache::scripttag::parser_env; @@ -791,6 +798,9 @@ sub start_Task { if ($target eq 'webgrade') { $result.="\n".'
'; &Apache::lonxml::startredirection(); + &start_delay(); + $dimension{$top}{'result'}=$result; + undef($result); } } elsif ($target eq 'edit') { $result.=$form_tag_start. @@ -1051,27 +1061,30 @@ DONEBUTTON $start_time=&Apache::lonlocal::locallocaltime($start_time); my $status = - "\n
\n\t"; + "\n
\n\t"; + my $dim = $top; + my %counts = &get_counts($dim,undef,$parstack, + $safeeval); + my $question_status ="\n\t

". + &question_status_message(\%counts,-1). + "

\n"; + if ($bt_status eq 'pass') { $status.='

You passed the '.$title.' given on '. $start_time.'

'; + $status.=$question_status; } if ($bt_status eq 'fail') { $status.='

You did not pass the '.$title.' given on '. $start_time.'

'; + $status.=$question_status; if (!$previous) { $status.=&add_request_another_attempt_button(); } } - $status.="\n".'
'."\n"; - my $dim = $top; - my %counts = &get_counts($dim,undef,$parstack, - $safeeval); - $status.="\n
\n\t

". - &question_status_message(\%counts,-1). - "

\n
\n"; + $status.="\n".'
'."\n"; foreach my $id (@{$dimension{$dim}{'criterias'}}) { my $type = $dimension{$dim}{'criteria.'.$id.'.type'}; @@ -1257,7 +1270,13 @@ DONEBUTTON &Apache::structuretags::finalize_storage(); } } elsif ($target eq 'webgrade') { - $result.=&Apache::lonxml::endredirection(); + if (&nest()) { + &Apache::lonxml::endredirection(); + &end_delay(); + $result.=$dimension{$top}{'result'}; + } else { + $result.=&Apache::lonxml::endredirection(); + } my $dim = $top; foreach my $id (@{$dimension{$dim}{'criterias'}} ) { my $type = $dimension{$dim}{'criteria.'.$id.'.type'}; @@ -1269,7 +1288,12 @@ DONEBUTTON [@_]); $criteria = &layout_webgrade_Criteria($dim,$id,$criteria); my $internal_location=&internal_location($id); - $result=~s/\Q$internal_location\E/$criteria/; + if ($result =~ m/\Q$internal_location\E/) { + $result=~s/\Q$internal_location\E/$criteria/; + } else { + $result.=$criteria; + } + } } $result.="
"; @@ -1553,8 +1577,16 @@ sub show_queue { my $ekey=&escape($key); my ($action,$description,$status)=('select',&mt('Select')); if (exists($queue{"$key\0locked"})) { + my $locker = $queue{"$key\0locked"}; + my $time; + if (ref($queue{"$key\0locked"}) eq 'ARRAY') { + ($locker, $time) = @{$queue{"$key\0locked"}}; + $time = + &Apache::lonnavmaps::timeToHumanString($time, + 'start'); + } my $me=$env{'user.name'}.':'.$env{'user.domain'}; - $status=&mt('Locked by [_1]',$queue{"$key\0locked"}); + $status=&mt('Locked by [_1] [_2]',$locker,$time); if ($me eq $queue{"$key\0locked"}) { ($action,$description)=('resume',&mt('Resume')); } else { @@ -1773,7 +1805,7 @@ sub lock_key { my (undef,$cid)=&Apache::lonnet::whichuser(); my $cnum=$env{'course.'.$cid.'.num'}; my $cdom=$env{'course.'.$cid.'.domain'}; - my $success=&Apache::lonnet::newput($queue,{"$todo\0locked"=> $me}, + my $success=&Apache::lonnet::newput($queue,{"$todo\0locked"=> [$me,time]}, $cdom,$cnum); &Apache::lonxml::debug("success $success $todo"); if ($success eq 'ok') { @@ -2049,7 +2081,7 @@ sub start_Setup { my $dim = &get_id($parstack,$safeeval); push(@Apache::bridgetask::dimension,$dim); &Apache::lonxml::startredirection(); - return &internal_location($dim); + return;# &internal_location($dim); } { @@ -2101,13 +2133,14 @@ sub start_Dimension { $dimension{$top}{'criteria.'.$dim.'.mandatory'}= &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval); push(@{$dimension{$top}{'criterias'}},$dim); + $dimension{$dim}{'nested'}=$top; } push(@Apache::bridgetask::dimension,$dim); &Apache::lonxml::startredirection(); if (!&skip_dimension_parsing($dim)) { &enable_dimension_parsing($dim); } - return &internal_location($dim); + return;# &internal_location($dim); } sub start_QuestionText { @@ -2195,7 +2228,6 @@ sub end_Dimension { my $instance=&get_instance($dim); my $version=&get_version(); if ($target eq 'web') { - $result .= "\n".'
'."\n"; $result .= &nested_parse(\$dimension{$dim}{'intro'},[@_]); my @instances = $instance; if (&Apache::response::showallfoils()) { @@ -2229,13 +2261,15 @@ sub end_Dimension { } my $dim_info= "\n
\n\t"; - my $question = ('sub' x $dimension{$dim}{'depth'}).'question'; - $question =~ s/^(.)/uc($1)/e; + my $ucquestion = + my $question = + ('sub' x $dimension{$dim}{'depth'}).'question'; + $ucquestion =~ s/^(.)/uc($1)/e; if ($dim_status eq 'pass') { - $dim_info.='

'.$question.' : you passed the above '.$mandatory.' question

'; + $dim_info.='

'.$ucquestion.' : you passed the above '.$mandatory.' '.$question.'

'; } if ($dim_status eq 'fail') { - $dim_info.='

'.$question.' : you did not pass the above '.$mandatory.' question

'; + $dim_info.='

'.$ucquestion.' : you did not pass the above '.$mandatory.' '.$question.'

'; } my %counts = &get_counts($dim,$instance,$parstack, $safeeval); @@ -2272,7 +2306,22 @@ sub end_Dimension { # $result=~s/\Q$internal_location\E/$dim_info/; } } - $result .= "\n
\n"; + if ($result !~ /^\s*$/s) { + # FIXME? this maybe unneccssary in the future, (CSE101 BT + # from Fall 2006 geenrate a div that attempts to hide some + # of the output in an odd way, this is a workaround so + # those old ones will continue to work. # It puts the + # LC_question div to come after any starting closie div + # that the dimension produces + if ($result =~ m{^\s*
}) { + $result =~ s{^(\s*)} + {$1\n
}; + } else { + $result = "\n".'
'. + "\n".$result; + } + $result .= "\n
\n"; + } } elsif ($target eq 'webgrade') { # in case of any side effects that we need &nested_parse(\$dimension{$dim}{'intro'},[@_]); @@ -2295,7 +2344,11 @@ sub end_Dimension { [@_]); $criteria = &layout_webgrade_Criteria($dim,$id,$criteria); my $internal_location=&internal_location($id); - $result=~s/\Q$internal_location\E/$criteria/; + if ($result =~ m/\Q$internal_location\E/) { + $result =~ s/\Q$internal_location\E/$criteria/; + } else { + $result.=$criteria ; + } } } if (&nest()) { @@ -2389,7 +2442,7 @@ sub question_status_message { foreach my $type ('cri','dim') { if ($counts->{$req.'_'.$type}) { push(@sections, - $counts->{$req.'_'.$type.'_passed'}.' of '. + $counts->{$req.'_'.$type.'_passed'}.' of the '. $counts->{$req.'_'.$type}.' '. $req{$req}.' '.$type{$type}); } @@ -2604,12 +2657,12 @@ sub start_Criteria { my $dim = &get_dim_id(); my $id=&get_id($parstack,$safeeval); if ($target eq 'web' || $target eq 'webgrade') { - if ($target eq 'webgrade' && $dim ne 'top') { + if ($target eq 'webgrade') { &Apache::lonxml::debug(" for $dim $id stashing results into $dim "); $dimension{$dim}{'result'} .= &internal_location($id); } else { &Apache::lonxml::debug(" not stashing $dim $id"); - $result .= &internal_location($id); + #$result .= &internal_location($id); } } &Apache::lonxml::debug("Criteria $id with $dim");