--- loncom/homework/bridgetask.pm 2006/05/25 19:55:10 1.156 +++ loncom/homework/bridgetask.pm 2006/06/12 23:17:56 1.167 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.156 2006/05/25 19:55:10 albertel Exp $ +# $Id: bridgetask.pm,v 1.167 2006/06/12 23:17:56 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,9 +38,12 @@ use Apache::lonlocal; use Apache::lonxml; use Apache::slotrequest(); use Time::HiRes qw( gettimeofday tv_interval ); +use lib '/home/httpd/lib/perl/'; +use LONCAPA; + BEGIN { - &Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Question','Instance','InstanceText','Criteria','ClosingParagraph')); + &Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Question','QuestionText','Setup','Instance','InstanceText','Criteria','ClosingParagraph')); } sub initialize_bridgetask { @@ -263,7 +266,7 @@ STUFF } if ($env{'request.enc'}) { $symb=&Apache::lonenc::encrypted($symb); } - $symb=&Apache::lonnet::escape($symb); + $symb=&escape($symb); $result.='<form method="post" action="/adm/slotrequest">'. '<input type="hidden" name="symb" value="'.$symb.'" />'. '<input type="hidden" name="command" value="'.$action.'" />'. @@ -362,26 +365,44 @@ sub file_list { my $file=$file_url.$partial_file; $file=~s|/+|/|g; &Apache::lonnet::allowuploaded('/adm/bridgetask',$file); - $file_list.='<li><nobr><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'. - &Apache::loncommon::icon($file).'" border="0"> '.$file. - '</a></nobr></li>'."\n"; + $file_list.='<li><span style="white-space: nowrap;"><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'. + &Apache::loncommon::icon($file).'" alt="file icon" border="0" /> '.$file. + '</a></span></li>'."\n"; } $file_list.="</ul>\n"; return $file_list; } +sub grade_mode { + if ($env{'form.regrade'} || $env{'form.regradeaspecificsubmission'}) { + return 'regrade'; + } + return 'queue_grade'; +} + sub webgrade_standard_info { my ($version)=&get_version(); my $file_list = &file_list($Apache::lonhomework::history{"resource.$version.0.bridgetask.portfiles"}); - my %lt=&Apache::lonlocal::texthash('done' => 'Next Item', - 'stop' => 'Quit Grading', - 'fail' => 'Fail Rest', - ); - + my %lt=('done' => 'Next Item', + 'stop' => 'Quit Grading', + 'fail' => 'Fail Rest', + 'cancel' => 'Cancel', + ); + my %lt=&Apache::lonlocal::texthash(%lt); + my $result=<<INFO; <div class="LC_GRADING_maincontrols"> +INFO + + if (&grade_mode() eq 'regrade') { + $result.=<<INFO; + <input type="submit" name="cancel" value="$lt{'cancel'}" /> +INFO + } + + $result.=<<INFO; <input type="submit" name="next" value="$lt{'done'}" /> <input type="submit" name="stop" value="$lt{'stop'}" /> <input type="button" name="fail" value="$lt{'fail'}" @@ -392,6 +413,58 @@ INFO return $result; } +sub done_screen { + my ($version) = @_; + my $title=&Apache::lonnet::gettitle(); + my @files=split(',',$Apache::lonhomework::history{'resource.'.$version.'.0.bridgetask.portfiles'}); + my (undef,undef,$domain,$user)= &Apache::lonxml::whichuser(); + my $files = '<ul>'; + my $msg; + foreach my $file (@files) { + my $url="/uploaded/$domain/$user/portfolio$file"; + if (! &Apache::lonnet::stat_file($url)) { + $file = &mt('<span class="LC_error"> Nonexistent file:</span> '. + '<span class="LC_filename">[_1]</span>',$file); + $msg .= "<p>Submitted non-existant file $file</p>\n"; + } else { + $file = '<span class="LC_filename">'.$file.'</span>'; + $msg .= "<p>Submitted file $file</p>\n"; + } + $files .= '<li>'.$file.'</li>'; + } + $files.='</ul>'; + my $subject = "Submission message for $title"; + my ($message_status,$comment_status); + my $setting = $env{'course.'.$env{'request.course.id'}.'.task_messages'}; + $setting =~ s/^\s*(\S*)\s*$/$1/; + $setting = lc($setting); + if ($setting eq 'only_student' + || $setting eq 'student_and_user_notes_screen') { + $message_status = + &Apache::lonmsg::user_normal_msg($user,$domain,$subject,$msg); + $message_status = '<p>'.&mt('Message sent to user: [_1]', + $message_status).' </p>'; + } + if ($setting eq 'student_and_user_notes_screen') { + $comment_status = + &Apache::lonmsg::store_instructor_comment($subject.'<br />'. + $msg,$user,$domain); + $comment_status = '<p>'.&mt('Message sent to instructor: [_1]', + $comment_status).' </p>'; + } + return <<DONESCREEN; +<h2>$title</h2> +<p> Files submitted: $files </p> +<p> You are now done with this Bridge Task </p> +<hr /> +<p> <a href="/adm/logout">Logout</a> </p> +<p> <a href="/adm/roles">Change to a different course</a> </p> +$message_status +$comment_status +DONESCREEN + +} + sub start_Task { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; @@ -452,8 +525,10 @@ sub start_Task { if ($target eq 'web' && $env{'request.state'} eq 'construct') { $form_tag_start.=&Apache::structuretags::problem_web_to_edit_header($env{'form.rndseed'}); } - if ($target eq 'web' || ($target eq 'grade' && !$env{'form.webgrade'}) || $target eq 'answer' || - $target eq 'tex') { + if ($target eq 'web' + || ($target eq 'grade' && !$env{'form.webgrade'}) + || $target eq 'answer' + || $target eq 'tex') { my ($version,$previous)=&get_version(); ($status,$accessmsg,my $slot_name,$slot) = &Apache::lonhomework::check_slot_access('0','Task'); @@ -490,30 +565,7 @@ sub start_Task { } elsif ($status eq 'WAITING_FOR_GRADE') { $msg.='<h1>'.&mt('Your submission is in the grading queue.').'</h1>'; } elsif ($env{'form.donescreen'}) { - my $title=&Apache::lonnet::gettitle(); - my @files=split(',',$Apache::lonhomework::history{'resource.'.$version.'.0.bridgetask.portfiles'}); - my (undef,undef,$domain,$user)= - &Apache::lonxml::whichuser(); - my $files = '<ul>'; - foreach my $file (@files) { - my $url="/uploaded/$domain/$user/portfolio$file"; - if (! &Apache::lonnet::stat_file($url)) { - $file = &mt('<font color="red"> Nonexistant file:</font> <tt>[_1]</tt>',$file); - } else { - $file = '<tt>'.$file.'</tt>'; - } - $files .= '<li>'.$file.'</li>'; - } - $files.='</ul>'; - - $result.=<<DONESCREEN; -<h2>$title</h2> -<p> Files submitted: $files </p> -<p> You are now done with this Bridge Task </p> -<hr /> -<p> <a href="/adm/logout">Logout</a> </p> -<p> <a href="/adm/roles">Change to a different course</a> </p> -DONESCREEN + $result .= &done_screen($version); } elsif ($status ne 'NOT_YET_VIEWED') { $msg.='<h1>'.&mt('Not open to be viewed').'</h1>'; } @@ -574,7 +626,7 @@ DONESCREEN &Apache::lonnet::gettitle($symb).' for '.$uname.' at '.$udom.'</td></tr></table>'; $form_tag_start.= '<input type="hidden" name="gradingkey" value="'. - &Apache::lonnet::escape($todo).'" />'; + &escape($todo).'" />'; $Apache::bridgetask::queue_key=$todo; &Apache::structuretags::initialize_storage(); &Apache::lonhomework::showhash(%Apache::lonhomework::history); @@ -589,6 +641,17 @@ DONESCREEN &mt('Return to resource').'</a></p>'; if ($status_code eq 'stop') { $result.='<b>'.&mt("Stopped grading.").'</b>'.$back; + } elsif ($status_code eq 'cancel') { + $result.='<b>'.&mt("Cancelled grading.").'</b>'.$back; + } elsif ($status_code eq 'never_versioned') { + $result.='<b>'. + &mt("Requested user has never accessed the task."). + '</b>'.$back; + } elsif ($status_code =~ /still_open:(.*)/) { + my $date = &Apache::lonlocal::locallocaltime($1); + $result.='<b>'. + &mt("Task is still open, will close at [_1].",$date). + '</b>'.$back; } elsif ($status_code eq 'lock_failed') { $result.='<b>'.&mt("Failed to lock the requested record.") .'</b>'.$back; @@ -609,6 +672,8 @@ DONESCREEN } } $webgrade='no'; + } + if (!$todo || $env{'form.cancel'}) { my $bodytext=&Apache::lonxml::get_all_text("/task",$parser,$style); } if ($target eq 'webgrade' && defined($env{'form.queue'})) { @@ -651,6 +716,20 @@ DONESCREEN return $result; } +sub get_task_end_time { + my ($queue_entry,$symb,$udom,$uname) = @_; + + my $end_time; + if (my $slot = &slotted_access($queue_entry)) { + my %slot_data=&Apache::lonnet::get_slot($slot); + $end_time = $slot_data{'endtime'}; + } else { + $end_time = &Apache::lonhomework::due_date('0',$symb, + $udom,$uname); + } + return $end_time; +} + sub get_key_todo { my ($target)=@_; my $todo; @@ -699,18 +778,34 @@ sub get_key_todo { if (!$queue) { $env{'form.queue'} = $queue = 'none'; #not queued so doing either a re or pre grade + my %status = &Apache::lonnet::restore($symb,$cid,$udom,$uname); + if ($status{'resource.0.version'} < 1) { + return (undef,'never_versioned'); + } return ($gradingkey); } + if ($queue) { + my $queue_entry = &get_queue_data($queue,$udom,$uname); + + my $end_time = &get_task_end_time($queue_entry,$symb, + $udom,$uname); + if ($end_time > time) { + return (undef,"still_open:$end_time"); + } + } + my $who=&queue_key_locked($queue,$gradingkey); if ($who eq $me) { #already have the lock - $env{'form.gradingkey'}=&Apache::lonnet::escape($gradingkey); + $env{'form.gradingkey'}=&escape($gradingkey); + &Apache::lonxml::debug("already locked"); return ($gradingkey); } if (!defined($who)) { if (&lock_key($queue,$gradingkey)) { + &Apache::lonxml::debug("newly locked"); return ($gradingkey); } else { return (undef,'lock_failed'); @@ -730,13 +825,15 @@ sub get_key_todo { $env{'form.queue'}=$queue='gradingqueue'; } - my $gradingkey=&Apache::lonnet::unescape($env{'form.gradingkey'}); + my $gradingkey=&unescape($env{'form.gradingkey'}); if ($env{'form.queue'} eq 'none') { if (defined($env{'form.gradingkey'})) { if ($target eq 'webgrade') { if ($env{'form.stop'}) { return (undef,'stop'); + } elsif ($env{'form.cancel'}) { + return (undef,'cancel'); } elsif ($env{'form.next'}) { return (undef,'select_user'); } @@ -782,7 +879,8 @@ sub get_key_todo { if ($env{'form.queuemode'} ne 'selected') { # don't get something new from the queue if they hit the stop button - if (!($env{'form.stop'} && $target eq 'webgrade') + if (!(($env{'form.cancel'} || $env{'form.stop'}) + && $target eq 'webgrade') && !$env{'form.gradingaction'}) { &Apache::lonxml::debug("Getting anew $queue"); return (&get_from_queue($queue)); @@ -934,7 +1032,12 @@ DONEBUTTON } elsif ($Apache::lonhomework::results{'INTERNAL_store'}) { &Apache::structuretags::finalize_storage(); } - if ($target eq 'grade' && $env{'form.webgrade'} eq 'yes') { + if ($target eq 'grade' && $env{'form.webgrade'} eq 'yes' + && exists($env{'form.cancel'})) { + &check_queue_unlock($env{'form.queue'}); + &Apache::lonxml::debug(" cancelled grading .".$env{'form.queue'}); + } elsif ($target eq 'grade' && $env{'form.webgrade'} eq 'yes' + && !exists($env{'form.cancel'})) { my $optional_required= &Apache::lonxml::get_param('OptionalRequired',$parstack, $safeeval); @@ -1088,6 +1191,7 @@ sub check_queue_unlock { my $me=$env{'user.name'}.':'.$env{'user.domain'}; my $who=&queue_key_locked($queue,$key,$cdom,$cnum); if ($who eq $me) { + &Apache::lonxml::debug("unlocking my own $who"); return &Apache::lonnet::del($queue,["$key\0locked"],$cdom,$cnum); } elsif ($allow_not_me) { &Apache::lonxml::debug("unlocking $who by $me"); @@ -1144,8 +1248,12 @@ sub setup_env_for_other_user { } sub get_queue_data { - my ($queue)=@_; - my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); + my ($queue,$udom,$uname)=@_; + my ($symb,$cid,$other_udom,$other_uname)=&Apache::lonxml::whichuser(); + if (!$uname || !$udom) { + $uname=$other_uname; + $udom =$other_udom; + } my $cnum=$env{'course.'.$cid.'.num'}; my $cdom=$env{'course.'.$cid.'.domain'}; my $todo="$symb\0queue\0$uname:$udom"; @@ -1202,8 +1310,14 @@ 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 (!grep('all',@{ $sections })) { + if (ref($sections) && !grep('all',@{ $sections })) { foreach my $student (keys(%$classlist)) { my $section = $classlist->{$student}[&Apache::loncoursedata::CL_SECTION()]; @@ -1248,12 +1362,20 @@ sub show_queue { my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); my ($tmp)=%queue; if ($tmp=~/^error: 2 /) { - return "\n<h3>Current Queue - $queue</h3><table border='1'><tr><td>Empty</td></tr></table>"; + return "\n<h3>Current Queue - $queue</h3>". + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_row(). + '<td>'.&mt('Empty').'</td>'. + &Apache::loncommon::end_data_table_row(). + &Apache::loncommon::end_data_table(); } my $title=&Apache::lonnet::gettitle($symb); - $result.="\n<h3>Current Queue - $title $queue </h3><table border='1'><tr>"; + $result.="\n<h3>Current Queue - $title $queue </h3>". + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(); if ($with_selects) { $result.="<th>Status</th><th></th>"; } - $result.="<th>user</th><th>data</th></tr>"; + $result.="<th>user</th><th>data</th>". + &Apache::loncommon::end_data_table_header_row(); foreach my $key (sort(keys(%queue))) { my ($symb,$uname,$udom) = &decode_queue_key($key); if (!defined($classlist->{$uname.':'.$udom})) { next; } @@ -1268,14 +1390,15 @@ sub show_queue { } if ($key=~/locked$/ && !$with_selects) { - $result.="<tr><td>$uname</td>"; + $result.= &Apache::loncommon::start_data_table_row(). + "<td>$uname</td>"; $result.='<td>'.$queue{$key}.'</td></tr>'; } elsif ($key=~/timestamp$/ && !$with_selects) { - $result.="<tr><td></td>"; + $result.=&Apache::loncommon::start_data_table_row()."<td></td>"; $result.='<td>'. &Apache::lonlocal::locallocaltime($queue{$key})."</td></tr>"; } elsif ($key!~/(timestamp|locked)$/) { - $result.="<tr>"; + $result.= &Apache::loncommon::start_data_table_row(); my ($end_time,$slot_text); if (my $slot=&slotted_access($queue{$key})) { my %slot_data=&Apache::lonnet::get_slot($slot); @@ -1286,7 +1409,7 @@ sub show_queue { $slot_text = ''; } if ($with_selects) { - my $ekey=&Apache::lonnet::escape($key); + my $ekey=&escape($key); my ($action,$description,$status)=('select',&mt('Select')); if (exists($queue{"$key\0locked"})) { my $me=$env{'user.name'}.':'.$env{'user.domain'}; @@ -1327,10 +1450,10 @@ FORM " <tt>($uname:$udom)</tt> </td>"; $result.='<td>'.$slot_text.' End time: '. &Apache::lonlocal::locallocaltime($end_time). - "</td></tr>"; + "</td>".&Apache::loncommon::end_data_table_row(); } } - $result.="</table><hr />\n"; + $result.= &Apache::loncommon::end_data_table()."<hr />\n"; return $result; } @@ -1341,7 +1464,7 @@ sub get_queue_counts { my $cnum=$env{'course.'.$cid.'.num'}; my $cdom=$env{'course.'.$cid.'.domain'}; - my $classlist=&Apache::loncoursedata::get_classlist(); + my $classlist=&get_limited_classlist(); my $regexp="^$symb\0"; my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); @@ -1485,7 +1608,7 @@ sub pick_from_queue_data { sub find_mid_grade { my ($queue,$symb,$cdom,$cnum)=@_; - my $todo=&Apache::lonnet::unescape($env{'form.gradingkey'}); + my $todo=&unescape($env{'form.gradingkey'}); my $me=$env{'user.name'}.':'.$env{'user.domain'}; if ($todo) { my $who=&queue_key_locked($queue,$todo,$cdom,$cnum); @@ -1526,7 +1649,7 @@ sub get_queue_symb_status { $cnum=$env{'course.'.$cid.'.num'}; $cdom=$env{'course.'.$cid.'.domain'}; } - my $classlist=&Apache::loncoursedata::get_classlist(); + my $classlist=&get_limited_classlist(); my $regexp="^$symb\0"; my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); @@ -1554,7 +1677,7 @@ sub get_from_queue { if ($todo) { return $todo; } my $attempts=0; - my $classlist=&Apache::loncoursedata::get_classlist(); + my $classlist=&get_limited_classlist(); while (1) { if ($attempts > 2) { @@ -1634,7 +1757,7 @@ sub select_user { $result.='<p> Showing only sections <tt>'.join(', ',@chosen_sections). '</tt>.</p> '."\n"; } - $result.='<table border="1">'; + $result.=&Apache::loncommon::start_data_table(); foreach my $student (sort {lc($classlist->{$a}[&Apache::loncoursedata::CL_FULLNAME()]) cmp lc($classlist->{$b}[&Apache::loncoursedata::CL_FULLNAME()]) } (keys(%$classlist))) { my ($uname,$udom) = split(/:/,$student); @@ -1657,9 +1780,10 @@ sub select_user { } } my $todo = - &Apache::lonnet::escape(&encode_queue_key($symb,$udom,$uname)); + &escape(&encode_queue_key($symb,$udom,$uname)); if ($cannot_grade) { - $result.='<tr><td> </td><td>'.$classlist->{$student}[&Apache::loncoursedata::CL_FULLNAME()]. + $result.=&Apache::loncommon::start_data_table_row(). + '<td> </td><td>'.$classlist->{$student}[&Apache::loncoursedata::CL_FULLNAME()]. '</td><td>'; } else { my $seclist; @@ -1667,8 +1791,8 @@ sub select_user { $seclist.='<input type="hidden" name="chosensections" value="'.$sec.'" />'; } + $result.=&Apache::loncommon::start_data_table_row(); $result.=<<RESULT; -<tr> <td> <form style="display: inline" method="post"> <input type="hidden" name="gradingkey" value="$todo" /> @@ -1717,9 +1841,9 @@ RESULT } else { $result.=" "; } - $result.= '</td></tr>'; + $result.= '</td>'.&Apache::loncommon::end_data_table_row(); } - $result.='</table>'; + $result.=&Apache::loncommon::end_data_table(); return $result; } @@ -1772,6 +1896,15 @@ sub get_id { } my %dimension; +sub start_Setup { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + undef(%dimension); + my $dim_id=&get_id($parstack,$safeeval); + $Apache::bridgetask::dimension=$dim_id; + undef(@Apache::bridgetask::instance); + &Apache::lonxml::startredirection(); + return &internal_location($dim_id); +} sub start_Question { return &start_Dimension(@_); } sub start_Dimension { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; @@ -1786,6 +1919,20 @@ sub start_Dimension { return &internal_location($dim_id); } +sub start_QuestionText { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $dim_id=$Apache::bridgetask::dimension; + my $text=&Apache::lonxml::get_all_text('/questiontext',$parser,$style); + if ($target eq 'grade' || $target eq 'web' || $target eq 'webgrade') { + $dimension{'questiontext'}=$text; + } + return ''; +} + +sub end_QuestionText { + return ''; +} + sub get_instance { my ($dim)=@_; my $rand_alg=&Apache::lonnet::get_rand_alg(); @@ -1846,9 +1993,12 @@ sub get_instance { if (&Apache::response::showallfoils()) { @instances = @{$dimension{'instances'}}; } + my $shown_question_text; foreach my $instance (@instances) { @Apache::scripttag::parser_env = @_; $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'}); + @Apache::scripttag::parser_env = @_; + $result.=&Apache::scripttag::xmlparse($dimension{'questiontext'}); if ($Apache::lonhomework::history{"resource.$version.0.status"} eq 'pass' || $Apache::lonhomework::history{"resource.$version.0.status"} eq 'fail') { @@ -1933,6 +2083,8 @@ sub get_instance { &Apache::scripttag::xmlparse($dimension{'intro'}); @Apache::scripttag::parser_env = @_; &Apache::scripttag::xmlparse($dimension{$instance.'.text'}); + @Apache::scripttag::parser_env = @_; + &Apache::scripttag::xmlparse($dimension{'questiontext'}); foreach my $id (@{$dimension{$instance.'.criterias'}}, @{$dimension{'criterias'}} ) { my $link=&link($id); @@ -1968,11 +2120,14 @@ sub get_instance { @Apache::scripttag::parser_env = @_; $result.=&Apache::scripttag::xmlparse($dimension{'intro'}); + @Apache::scripttag::parser_env = @_; + $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'}); + @Apache::scripttag::parser_env = @_; + &Apache::scripttag::xmlparse($dimension{'questiontext'}); + foreach my $id (@{$dimension{$instance.'.criterias'}}, @{$dimension{'criterias'}}) { my $link=&link($id); - @Apache::scripttag::parser_env = @_; - $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'}); my $status=$Apache::lonhomework::results{"resource.$version.0.$dim.$id.status"}=$env{'form.HWVAL_'.$link}; $Apache::lonhomework::results{"resource.$version.0.$dim.$id.comment"}=$env{'form.HWVAL_comment_'.$link}; my $mandatory=($dimension{'criteria.'.$id.'.mandatory'} ne 'N'); @@ -2016,6 +2171,41 @@ sub get_instance { } else { # any other targets no output undef($result); + } + return $result; + } + + sub end_Setup { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my $result=&Apache::lonxml::endredirection(); + my $dim=&get_id($parstack,$safeeval); + my $instance=&get_instance($dim); + my $version=&get_version(); + if ($target eq 'web') { + @Apache::scripttag::parser_env = @_; + $result.=&Apache::scripttag::xmlparse($dimension{'intro'}); + my @instances = $instance; + if (&Apache::response::showallfoils()) { + @instances = @{$dimension{'instances'}}; + } + foreach my $instance (@instances) { + @Apache::scripttag::parser_env = @_; + $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'}); + @Apache::scripttag::parser_env = @_; + $result.=&Apache::scripttag::xmlparse($dimension{'questiontext'}); + } + } elsif ($target eq 'webgrade' + || $target eq 'grade' && $env{'form.webgrade'}) { + # in case of any side effects that we need + @Apache::scripttag::parser_env = @_; + &Apache::scripttag::xmlparse($dimension{'intro'}); + @Apache::scripttag::parser_env = @_; + &Apache::scripttag::xmlparse($dimension{$instance.'.text'}); + @Apache::scripttag::parser_env = @_; + &Apache::scripttag::xmlparse($dimension{'questiontext'}); + } else { + # any other targets no output + undef($result); } return $result; }