version 1.220, 2003/11/01 16:37:21
|
version 1.239, 2004/02/16 19:50:10
|
Line 37 use Apache::lonnet;
|
Line 37 use Apache::lonnet;
|
use Apache::File(); |
use Apache::File(); |
use Apache::lonmenu; |
use Apache::lonmenu; |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
use Apache::lonxml; |
|
|
BEGIN { |
BEGIN { |
&Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext', |
&Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext', |
Line 157 sub setup_rndseed {
|
Line 158 sub setup_rndseed {
|
$rndseed=$Apache::lonhomework::history{'rndseed'}; |
$rndseed=$Apache::lonhomework::history{'rndseed'}; |
if (!$rndseed) { |
if (!$rndseed) { |
$rndseed=time; |
$rndseed=time; |
$ENV{'form.rndseed'}=$rndseed; |
|
} |
} |
|
$ENV{'form.rndseed'}=$rndseed; |
} |
} |
if ($ENV{'form.resetdata'} eq &mt('New Problem Variation') || |
if ($ENV{'form.resetdata'} eq &mt('New Problem Variation') || |
$ENV{'form.newrandomization'} eq &mt('New Randomization')) { |
$ENV{'form.newrandomization'} eq &mt('New Randomization')) { |
Line 171 sub setup_rndseed {
|
Line 172 sub setup_rndseed {
|
if (defined($rndseed) && $rndseed ne int($rndseed)) { |
if (defined($rndseed) && $rndseed ne int($rndseed)) { |
$rndseed=join(',',&Math::Random::random_seed_from_phrase($rndseed)); |
$rndseed=join(',',&Math::Random::random_seed_from_phrase($rndseed)); |
} |
} |
&Apache::lonxml::debug("Setting rndseed to $rndseed"); |
if ($safeeval) { |
&Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval); |
&Apache::lonxml::debug("Setting rndseed to $rndseed"); |
|
&Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval); |
|
} |
} |
} |
return $rndseed; |
return $rndseed; |
} |
} |
Line 184 sub problem_edit_header {
|
Line 187 sub problem_edit_header {
|
<input type="submit" name="problemmode" value="'.&mt('EditXML').'" /> |
<input type="submit" name="problemmode" value="'.&mt('EditXML').'" /> |
<input type="submit" name="Undo" value="'.&mt('undo').'" /> <hr /> |
<input type="submit" name="Undo" value="'.&mt('undo').'" /> <hr /> |
<input type="submit" name="submit" value="'.&mt('Submit Changes and Edit').'" /> |
<input type="submit" name="submit" value="'.&mt('Submit Changes and Edit').'" /> |
<input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" /><br /><p> </p><table border="0"><tr><td bgcolor="#DDDDDD"> |
<input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" /><table><tr><td>'. |
'; |
&Apache::loncommon::help_open_topic('Problem_Editor_XML_Index', |
|
'Problem Editing Help').'</td><td>'. |
|
&Apache::loncommon::help_open_faq(5). |
|
&Apache::loncommon::help_open_bug('Authoring').'</td></tr></table>'. |
|
'<table border="0"><tr><td bgcolor="#DDDDDD">'; |
} |
} |
|
|
sub problem_edit_footer { |
sub problem_edit_footer { |
Line 193 sub problem_edit_footer {
|
Line 200 sub problem_edit_footer {
|
<input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" />'; |
<input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" />'; |
} |
} |
|
|
|
sub option { |
|
my ($value,$name) = @_; |
|
my $result ="<option value='".$value."' "; |
|
if ($ENV{'form.'.$name} eq $value) { |
|
$result.=" selected='on' "; |
|
} |
|
$result.='>'; |
|
return $result; |
|
} |
|
|
sub problem_web_to_edit_header { |
sub problem_web_to_edit_header { |
my ($rndseed)=@_; |
my ($rndseed)=@_; |
my $result.='<input type="hidden" name="problemmode" value="'.&mt('View').'" /> |
my $result.='<input type="hidden" name="problemmode" value="'.&mt('View').'" /> |
Line 206 sub problem_web_to_edit_header {
|
Line 223 sub problem_web_to_edit_header {
|
onChange="javascript:document.lonhomework.changerandseed.click()" /></nobr> |
onChange="javascript:document.lonhomework.changerandseed.click()" /></nobr> |
<input type="checkbox" name="showallfoils" '; |
<input type="checkbox" name="showallfoils" '; |
if (defined($ENV{'form.showallfoils'})) { $result.='checked="on"'; } |
if (defined($ENV{'form.showallfoils'})) { $result.='checked="on"'; } |
$result.= ' />'.&mt(' Show All Foils').' |
$result.= ' />'.&mt(' Show All Foils'). |
<hr />'; |
&Apache::loncommon::help_open_topic('Problem_Editor_Testing_Area','Testing Problems'). |
|
'<hr />'; |
|
$result.=" |
|
<nobr> |
|
Problem Status: |
|
<select name='problemstate'> |
|
<option name=''></option> |
|
".&option('CLOSED' ,'problemstate').&mt("Closed")."</option> |
|
".&option('CAN_ANSWER' ,'problemstate').&mt("Answerable")."</option> |
|
".&option('CANNOT_ANSWER_tries' ,'problemstate').&mt("Open with full tries")."</option> |
|
".&option('CANNOT_ANSWER_correct','problemstate').&mt("Open and correct")."</option> |
|
".&option('SHOW_ANSWER' ,'problemstate').&mt("Show Answer")."</option> |
|
</select> |
|
</nobr> |
|
<nobr> |
|
Problem Type: |
|
<select name='problemtype'> |
|
<option name=''></option> |
|
".&option('exam' ,'problemtype')."Exam Problem</option> |
|
".&option('problem','problemtype')."Homework problem</option> |
|
".&option('survey' ,'problemtype')."Survey Question</option> |
|
</select> |
|
</nobr> |
|
<nobr> |
|
Feedback Mode: |
|
<select name='problemstatus'> |
|
<option value=''></option> |
|
".&option('yes','problemstatus')."Show Feedback</option> |
|
".&option('no', 'problemstatus')."Don\'t Show Feedback</option> |
|
</select> |
|
<input type='submit' name='changeproblemmode' value='Change' /> |
|
</nobr> |
|
<hr />"; |
my $numtoanalyze=$ENV{'form.numtoanalyze'}; |
my $numtoanalyze=$ENV{'form.numtoanalyze'}; |
if (!$numtoanalyze) { $numtoanalyze=20; } |
if (!$numtoanalyze) { $numtoanalyze=20; } |
$result.= '<input type="submit" name="problemmode" value='. |
$result.= '<input type="submit" name="problemmode" value='. |
Line 289 sub init_problem_globals {
|
Line 338 sub init_problem_globals {
|
@Apache::inputtags::partlist=('0'); |
@Apache::inputtags::partlist=('0'); |
$Apache::lonhomework::problemstatus= |
$Apache::lonhomework::problemstatus= |
&Apache::lonnet::EXT('resource.0.problemstatus'); |
&Apache::lonnet::EXT('resource.0.problemstatus'); |
|
&Apache::lonxml::debug("problem status is $Apache::lonhomework::problemstatus"); |
|
&Apache::lonxml::debug("env probstat is ".$ENV{'form.problemstatus'}); |
|
if ($ENV{'request.state'} eq 'construct' && |
|
defined($ENV{'form.problemstatus'})) { |
|
$Apache::lonhomework::problemstatus=$ENV{'form.problemstatus'}; |
|
} |
} else { |
} else { |
$Apache::inputtags::part=''; |
$Apache::inputtags::part=''; |
@Apache::inputtags::partlist=(); |
@Apache::inputtags::partlist=(); |
Line 340 sub start_problem {
|
Line 395 sub start_problem {
|
if ($target eq 'web') { |
if ($target eq 'web') { |
&Apache::lonhomework::showhash(%Apache::lonhomework::history); |
&Apache::lonhomework::showhash(%Apache::lonhomework::history); |
} |
} |
|
if ($ENV{'request.state'} eq 'construct' && |
|
$ENV{'form.problemstate'} eq 'CANNOT_ANSWER_correct' ) { |
|
$Apache::lonhomework::history{'resource.0.solved'}= |
|
'correct_by_student'; |
|
} |
$Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type'); |
$Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type'); |
|
if (($ENV{'request.state'} eq 'construct') && |
|
defined($ENV{'form.problemtype'})) { |
|
$Apache::lonhomework::type=$ENV{'form.problemtype'}; |
|
} |
&Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:"); |
&Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:"); |
} |
} |
if ($Apache::lonhomework::type eq '' ) { |
if ($Apache::lonhomework::type eq '' ) { |
Line 427 sub start_problem {
|
Line 491 sub start_problem {
|
} |
} |
} elsif ($target eq 'web') { |
} elsif ($target eq 'web') { |
my $name= &get_resource_name($parstack,$safeeval); |
my $name= &get_resource_name($parstack,$safeeval); |
if ($status eq 'CAN_ANSWER') { |
$result.="$head_tag_start<title>$name</title></head> |
# create a page header and exit |
|
$result.="$head_tag_start<title>$name</title></head> |
|
$body_tag_start \n $form_tag_start". |
$body_tag_start \n $form_tag_start". |
'<input type="hidden" name="submitted" value="yes" />'; |
'<input type="hidden" name="submitted" value="yes" />'; |
if ($ENV{'request.state'} eq "construct") { |
# create a page header and exit |
$result.= &problem_web_to_edit_header($ENV{'form.rndseed'}); |
if ($ENV{'request.state'} eq "construct") { |
} |
$result.= &problem_web_to_edit_header($ENV{'form.rndseed'}); |
# if we are viewing someone else preserve that info |
} |
if (defined $ENV{'form.grade_symb'}) { |
# if we are viewing someone else preserve that info |
foreach my $field ('symb','courseid','domain','username') { |
if (defined $ENV{'form.grade_symb'}) { |
$result .= '<input type="hidden" name="grade_'.$field. |
foreach my $field ('symb','courseid','domain','username') { |
'" value="'.$ENV{"form.grade_$field"}.'" />'."\n"; |
$result .= '<input type="hidden" name="grade_'.$field. |
} |
'" value="'.$ENV{"form.grade_$field"}.'" />'."\n"; |
} |
} |
} elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' |
|
|| $status eq 'CLOSED' || $status eq 'UNAVALAILABLE' || |
|
$status eq 'INVALID_ACCESS') { |
|
$result.=$head_tag_start. |
|
"<title>$name</title></head>\n$body_tag_start\n"; |
|
} |
} |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $startminipage = ''; |
my $startminipage = ''; |
Line 455 sub start_problem {
|
Line 512 sub start_problem {
|
} |
} |
my $id = $Apache::inputtags::part; |
my $id = $Apache::inputtags::part; |
my $weight = &Apache::lonnet::EXT("resource.$id.weight"); |
my $weight = &Apache::lonnet::EXT("resource.$id.weight"); |
my $allkeys=&Apache::lonnet::metadata($ENV{'request.uri'},'keys'); |
my $packages=&Apache::lonnet::metadata($ENV{'request.uri'},'packages'); |
my @allkeys = split /,/,$allkeys; |
my @packages = split /,/,$packages; |
my $allow_print_points = 0; |
my $allow_print_points = 0; |
foreach my $partial_key (@allkeys) { |
foreach my $partial_key (@packages) { |
if ($partial_key=~m/weight/) { |
if ($partial_key=~m/^part_0$/) { |
$allow_print_points++; |
$allow_print_points=1; |
} |
} |
} |
} |
my $duedate = &Apache::lonnet::EXT("resource.$id.duedate"); |
my $duedate = &Apache::lonnet::EXT("resource.$id.duedate"); |
Line 475 sub start_problem {
|
Line 532 sub start_problem {
|
my @due_file_content = <$temp_file>; |
my @due_file_content = <$temp_file>; |
my $due_file_content = $due_file_content[$#due_file_content]; |
my $due_file_content = $due_file_content[$#due_file_content]; |
chomp $due_file_content; |
chomp $due_file_content; |
my $name_of_resourse= &get_resource_name($parstack,$safeeval); |
my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval)); |
if ($due_file_content ne $duedate) { |
if ($due_file_content ne $duedate) { |
$temp_file = Apache::File->new('>'.$filename); |
$temp_file = Apache::File->new('>'.$filename); |
print $temp_file "$duedate\n"; |
print $temp_file "$duedate\n"; |
Line 501 sub start_problem {
|
Line 558 sub start_problem {
|
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start. |
$result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start. |
&problem_edit_header(); |
&problem_edit_header(); |
|
$Apache::lonxml::warnings_error_header= |
|
&mt("Editor Errors - these errors might not effect the running of the problem, but they will likely cause problems with further use of the Edit mode. Please use the EditXML mode to fix these errors.")."<br />"; |
my $temp=&Apache::edit::insertlist($target,$token); |
my $temp=&Apache::edit::insertlist($target,$token); |
$result.=$temp; |
$result.=$temp; |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
Line 520 sub end_problem {
|
Line 579 sub end_problem {
|
if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || |
if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || |
$target eq 'tex') { |
$target eq 'tex') { |
if ( $target eq 'grade' && $Apache::inputtags::part eq '0' && |
if ( $target eq 'grade' && $Apache::inputtags::part eq '0' && |
$status eq 'CAN_ANSWER' ) { |
($status eq 'CAN_ANSWER' || $Apache::lonhomework::scantronmode)) { |
# if part is zero, no <part>s existed, so we need to the grading |
# if part is zero, no <part>s existed, so we need to the grading |
&Apache::inputtags::grade; |
&Apache::inputtags::grade; |
} elsif ( ($target eq 'web' || $target eq 'tex') && |
} elsif ( ($target eq 'web' || $target eq 'tex') && |
Line 535 sub end_problem {
|
Line 594 sub end_problem {
|
(($target eq 'web') && ($ENV{'request.state'} ne 'construct')) || |
(($target eq 'web') && ($ENV{'request.state'} ne 'construct')) || |
($target eq 'answer') || ($target eq 'tex') |
($target eq 'answer') || ($target eq 'tex') |
) { |
) { |
if ($status eq 'CAN_ANSWER') { |
if ($target ne 'tex' && |
if ($target ne 'tex' && |
$ENV{'form.answer_output_mode'} ne 'tex') { |
$ENV{'form.answer_output_mode'} ne 'tex') { |
$result.="</form></body>\n"; |
$result.="</form></body>\n"; |
|
} |
|
} elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' || |
|
$status eq 'UNCHECKEDOUT' || $status eq 'INVALID_ACCESS') { |
|
if ($target ne 'tex' && |
|
$ENV{'form.answer_output_mode'} ne 'tex') { |
|
$result.="</body>\n"; |
|
} |
|
} |
} |
if ($target eq 'web') { |
if ($target eq 'web') { |
$result.=&Apache::lonxml::xmlend(); |
$result.=&Apache::lonxml::xmlend(); |
Line 946 sub start_part {
|
Line 997 sub start_part {
|
&Apache::run::run($expression,$safeeval); |
&Apache::run::run($expression,$safeeval); |
|
|
if ($target eq 'meta') { |
if ($target eq 'meta') { |
return &Apache::response::mandatory_part_meta; |
my $display=&Apache::lonxml::get_param('display',$parstack,$safeeval); |
|
return &Apache::response::mandatory_part_meta. |
|
&Apache::response::meta_parameter_write('display','string',$display,'Part Description'); |
} elsif ($target eq 'web' || $target eq 'grade' || |
} elsif ($target eq 'web' || $target eq 'grade' || |
$target eq 'answer' || $target eq 'tex') { |
$target eq 'answer' || $target eq 'tex') { |
if ($hidden) { |
if ($hidden) { |
Line 978 sub start_part {
|
Line 1031 sub start_part {
|
$result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent'; |
$result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent'; |
} |
} |
my $weight = &Apache::lonnet::EXT("resource.$id.weight"); |
my $weight = &Apache::lonnet::EXT("resource.$id.weight"); |
if ($Apache::lonhomework::type eq 'exam') { $result .= '\fbox{\textit{'.$weight.' pt}}';} |
my $allkeys=&Apache::lonnet::metadata($ENV{'request.uri'},'packages'); |
|
my @allkeys = split /,/,$allkeys; |
|
my $allow_print_points = 0; |
|
foreach my $partial_key (@allkeys) { |
|
if ($partial_key=~m/^part_(.*)$/) { |
|
if ($1 ne '0') {$allow_print_points=1;} |
|
} |
|
} |
|
if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { $result .= '\fbox{\textit{'.$weight.' pt}}';} |
|
} elsif ($target eq 'web') { |
|
$result.='<a name="'.&Apache::lonnet::escape($Apache::inputtags::part).'" />'; |
} |
} |
} |
} |
} |
} |
Line 986 sub start_part {
|
Line 1049 sub start_part {
|
$result.=&Apache::edit::tag_start($target,$token); |
$result.=&Apache::edit::tag_start($target,$token); |
$result.=&Apache::edit::text_arg('Part ID:','id',$token). |
$result.=&Apache::edit::text_arg('Part ID:','id',$token). |
&Apache::loncommon::help_open_topic("Part_Tag_Edit_Help"). |
&Apache::loncommon::help_open_topic("Part_Tag_Edit_Help"). |
|
' '. |
|
&Apache::edit::text_arg('Displayed Part Description:','display',$token). |
&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $constructtag=&Apache::edit::get_new_args($token,$parstack, |
my $constructtag=&Apache::edit::get_new_args($token,$parstack, |
$safeeval,'id'); |
$safeeval,'id','display'); |
if ($constructtag) { |
if ($constructtag) { |
|
#limiting ids to only letters numbers, and space |
|
$token->[2]->{'id'}=~s/[^A-Za-z0-9 ]//gs; |
$result = &Apache::edit::rebuild_tag($token); |
$result = &Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::handle_insert(); |
$result.=&Apache::edit::handle_insert(); |
} |
} |
Line 1006 sub end_part {
|
Line 1073 sub end_part {
|
my $result=''; |
my $result=''; |
if ( $target eq 'meta' ) { |
if ( $target eq 'meta' ) { |
$result=''; |
$result=''; |
} elsif ( $target eq 'grade' && $status eq 'CAN_ANSWER' && !$hidden) { |
} elsif ($target eq 'grade' && |
|
($status eq 'CAN_ANSWER' || $Apache::lonhomework::scantronmode) && |
|
!$hidden) { |
$result=&Apache::inputtags::grade; |
$result=&Apache::inputtags::grade; |
} elsif (($target eq 'web' || $target eq 'tex') && !$hidden ) { |
} elsif (($target eq 'web' || $target eq 'tex') && !$hidden ) { |
my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part, |
my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part, |
Line 1026 sub end_part {
|
Line 1095 sub end_part {
|
sub start_preduedate { |
sub start_preduedate { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') { |
|
&Apache::lonxml::debug("State in preduedate is ". $Apache::inputtags::status['-1']); |
if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' && |
if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' && |
$Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER' && |
$Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER') { |
$Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') { |
&Apache::lonxml::debug("Wha? ". ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER')); |
&Apache::lonxml::get_all_text("/preduedate",$parser); |
&Apache::lonxml::get_all_text("/preduedate",$parser); |
} |
} |
} |
} |
Line 1041 sub end_preduedate {
|
Line 1111 sub end_preduedate {
|
|
|
sub start_postanswerdate { |
sub start_postanswerdate { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'grade') { |
if ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') { |
if ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') { |
&Apache::lonxml::get_all_text("/postanswerdate",$parser); |
&Apache::lonxml::get_all_text("/postanswerdate",$parser); |
} |
} |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
return '\vskip 0 mm \noindent'; |
&Apache::lonxml::get_all_text("/postanswerdate",$parser); |
} |
} |
return ''; |
return ''; |
} |
} |
Line 1061 sub start_notsolved {
|
Line 1131 sub start_notsolved {
|
$target eq 'tex') { |
$target eq 'tex') { |
my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; |
my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; |
&Apache::lonxml::debug("not solved has :$gradestatus:"); |
&Apache::lonxml::debug("not solved has :$gradestatus:"); |
if ($gradestatus =~ /^correct/) { |
if ($gradestatus =~ /^correct/ && |
|
&Apache::response::show_answer()) { |
&Apache::lonxml::debug("skipping"); |
&Apache::lonxml::debug("skipping"); |
&Apache::lonxml::get_all_text("/notsolved",$parser); |
&Apache::lonxml::get_all_text("/notsolved",$parser); |
} |
} |
Line 1078 sub start_solved {
|
Line 1149 sub start_solved {
|
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || |
$target eq 'tex') { |
$target eq 'tex') { |
my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; |
my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; |
if ($gradestatus !~ /^correct/) { |
if ($gradestatus !~ /^correct/ || |
|
!&Apache::response::show_answer()) { |
&Apache::lonxml::get_all_text("/solved",$parser); |
&Apache::lonxml::get_all_text("/solved",$parser); |
} |
} |
} |
} |