--- loncom/homework/structuretags.pm 2004/09/22 20:49:45 1.260.2.5 +++ loncom/homework/structuretags.pm 2005/07/05 18:59:03 1.297 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.260.2.5 2004/09/22 20:49:45 albertel Exp $ +# $Id: structuretags.pm,v 1.297 2005/07/05 18:59:03 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,7 +36,7 @@ use Apache::File(); use Apache::lonmenu; use Apache::lonlocal; use Apache::lonxml; - +use Time::HiRes qw( gettimeofday tv_interval ); BEGIN { &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag')); } @@ -61,13 +61,41 @@ sub start_tex { if ($target eq 'tex') { return $bodytext.' '; } - return $result; + return $result;; } sub end_tex { return ''; } +sub body_tag_start { + my ($target,$background,$bgcolor)=@_; + my $body_tag_start=''; + $form_tag_start='
'; } return ($result,$head_tag_start,$body_tag_start,$form_tag_start); } @@ -134,13 +156,14 @@ sub get_resource_name { if (defined($Apache::lonhomework::name)) { return $Apache::lonhomework::name; } - my $name=&Apache::lonnet::gettitle(); + my ($symb)=&Apache::lonxml::whichuser(); + my $name=&Apache::lonnet::gettitle($symb); if ($name eq '') { $name=&Apache::lonnet::EXT('resource.title'); if ($name eq 'con_lost') { $name = ''; } } if ($name!~/\S+/) { - $name=$ENV{'request.uri'}; + $name=$env{'request.uri'}; $name=~s-.*/([^/]+)$-$1-; } $Apache::lonhomework::name=$name; @@ -151,23 +174,23 @@ sub setup_rndseed { my ($safeeval)=@_; my $rndseed; my ($symb)=&Apache::lonxml::whichuser(); - if ($ENV{'request.state'} eq "construct" || $symb eq '' || + if ($env{'request.state'} eq "construct" || $symb eq '' || $Apache::lonhomework::history{'resource.CODE'}) { - $rndseed=$ENV{'form.rndseed'}; + $rndseed=$env{'form.rndseed'}; if (!$rndseed) { $rndseed=$Apache::lonhomework::history{'rndseed'}; if (!$rndseed) { $rndseed=time; } - $ENV{'form.rndseed'}=$rndseed; + $env{'form.rndseed'}=$rndseed; } - if ($ENV{'form.resetdata'} eq &mt('New Problem Variation') || - $ENV{'form.newrandomization'} eq &mt('New Randomization')) { + if ($env{'form.resetdata'} eq &mt('New Problem Variation') || + $env{'form.newrandomization'} eq &mt('New Randomization')) { srand(time); $rndseed=int(rand(2100000000)); - $ENV{'form.rndseed'}=$rndseed; - delete($ENV{'form.resetdata'}); - delete($ENV{'form.newrandomization'}); + $env{'form.rndseed'}=$rndseed; + delete($env{'form.resetdata'}); + delete($env{'form.newrandomization'}); } if (defined($rndseed) && $rndseed ne int($rndseed)) { $rndseed=join(',',&Math::Random::random_seed_from_phrase($rndseed)); @@ -183,8 +206,16 @@ sub setup_rndseed { return $rndseed; } +sub remember_problem_state { + return ' + + + '; +} + sub problem_edit_header { - return ' + return ''. + &Apache::structuretags::remember_problem_state().' @@ -193,20 +224,20 @@ sub problem_edit_header {
'. &Apache::loncommon::help_open_menu('','Problem Editing Help','Problem_Editor_XML_Index','',5,'Authoring',undef,undef,undef,'Problem Editing Help') .'
'. - '
'; + '
'; } sub problem_edit_footer { return '

'. &Apache::lonhtmlcommon::htmlareaselectactive(@Apache::lonxml::htmlareafields). - "\n\n\n"; + "\n\n".&Apache::loncommon::endbodytag()."\n"; } sub option { my ($value,$name) = @_; my $result =" ".&option('problem','problemtype').&mt("Homework problem")." ".&option('survey' ,'problemtype').&mt("Survey Question")." @@ -260,7 +291,7 @@ Feedback Mode:
"; - my $numtoanalyze=$ENV{'form.numtoanalyze'}; + my $numtoanalyze=$env{'form.numtoanalyze'}; if (!$numtoanalyze) { $numtoanalyze=20; } $result.= ' for @@ -276,9 +307,9 @@ sub initialize_storage { %Apache::lonhomework::results=(); %Apache::lonhomework::history=(); my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); - if ($ENV{'request.state'} eq 'construct' || $symb eq '') { + if ($env{'request.state'} eq 'construct' || $symb eq '') { %Apache::lonhomework::history= - &Apache::lonnet::tmprestore($ENV{'request.uri'},'',$domain,$name); + &Apache::lonnet::tmprestore($env{'request.uri'},'',$domain,$name); my ($temp)=keys %Apache::lonhomework::history ; &Apache::lonxml::debug("Return message of $temp"); } else { @@ -294,24 +325,69 @@ sub initialize_storage { # Stores away the result has to a student's environment # checks form.grade_ for specific values, other wises stores # to the running users environment +# Will increment totals for attempts, students, and corrects +# if running user has student role. sub finalize_storage { my $result; - my ($temp) = keys %Apache::lonhomework::results; - if ( $temp ne '' ) { + if (%Apache::lonhomework::results) { my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); - if ($ENV{'request.state'} eq 'construct' || $symb eq '') { - $Apache::lonhomework::results{'rndseed'}=$ENV{'form.rndseed'}; + if ($env{'request.state'} eq 'construct' || $symb eq '') { + $Apache::lonhomework::results{'rndseed'}=$env{'form.rndseed'}; $result=&Apache::lonnet::tmpstore(\%Apache::lonhomework::results, - $ENV{'request.uri'},'',$domain,$name); + $env{'request.uri'},'',$domain,$name); &Apache::lonxml::debug('Construct Store return message:'.$result); } else { $result=&Apache::lonnet::cstore(\%Apache::lonhomework::results, $symb,$courseid,$domain,$name); &Apache::lonxml::debug('Store return message:'.$result); + if ($env{'request.role'} =~/^st/) { + &store_aggregates($symb,$courseid); + } } } return $result; } +use Data::Dumper; + +# -------------------------------------------------------------store_aggregates +# Sends hash of values to be incremented in nohist_resourcetracker.db +# for the course. Increments total number of attempts, unique students +# and corrects for each part for an instance of a problem, as appropriate. +sub store_aggregates { + my ($symb,$courseid) = @_; + my %aggregate; + my @parts; + my $cdomain = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cname = $env{'course.'.$env{'request.course.id'}.'.num'}; + foreach my $key (keys(%Apache::lonhomework::results)) { + if ($key =~ /resource\.([^\.]+)\.tries/) { + push(@parts, $1); + } + } + foreach my $part (@parts) { + if ($Apache::lonhomework::results{'resource.'.$part.'.award'} + eq 'APPROX_ANS' || + $Apache::lonhomework::results{'resource.'.$part.'.award'} + eq 'EXACT_ANS') { + $aggregate{$symb."\0".$part."\0correct"} = 1; + } + if ($Apache::lonhomework::results{'resource.'.$part.'.tries'} == 1) { + $aggregate{$symb."\0".$part."\0users"} = 1; + } else { + my (undef,$last_reset) = &Apache::grades::get_last_resets($symb,$env{'request.course.id'},[$part]); + if ($last_reset) { + if (&Apache::grades::get_num_tries(\%Apache::lonhomework::history,$last_reset,$part) == 0) { + $aggregate{$symb."\0".$part."\0users"} = 1; + } + } + } + $aggregate{$symb."\0".$part."\0attempts"} = 1; + } + if (keys (%aggregate) > 0) { + &Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate, + $cdomain,$cname); + } +} sub checkout_msg { my %lt=&Apache::lonlocal::texthash( @@ -326,7 +402,7 @@ sub checkout_msg {

$lt{'warning'}

-
+
@@ -340,7 +416,7 @@ sub firstaccess_msg { &Apache::lonxml::debug("map is $map title is $foldertitle"); return (<The resources in "$foldertitle" are open for a limited time. Once you click the 'Show Resource' button below you have $time to complete all resources "$foldertitle". -
+
@@ -387,7 +463,7 @@ sub reset_problem_globals { sub set_problem_state { my ($part)=@_; - if ($ENV{'form.problemstate'} eq 'CANNOT_ANSWER_correct') { + if ($env{'form.problemstate'} eq 'CANNOT_ANSWER_correct') { $Apache::lonhomework::history{"resource.$part.solved"}= 'correct_by_student'; } @@ -395,12 +471,14 @@ sub set_problem_state { sub get_problem_status { my ($part)=@_; - my $problem_status=&Apache::lonnet::EXT("resource.$part.problemstatus"); - &Apache::lonxml::debug("problem status for $part is $problem_status"); - &Apache::lonxml::debug("env probstat is ".$ENV{'form.problemstatus'}); - if ($ENV{'request.state'} eq 'construct' && - defined($ENV{'form.problemstatus'})) { - $problem_status=$ENV{'form.problemstatus'}; + my $problem_status; + if ($env{'request.state'} eq 'construct' && + defined($env{'form.problemstatus'})) { + $problem_status=$env{'form.problemstatus'}; + } else { + $problem_status=&Apache::lonnet::EXT("resource.$part.problemstatus"); + &Apache::lonxml::debug("problem status for $part is $problem_status"); + &Apache::lonxml::debug("env probstat is ".$env{'form.problemstatus'}); } return $problem_status; } @@ -418,7 +496,7 @@ sub start_problem { $Apache::lonhomework::parsing_a_problem=1; &init_problem_globals('problem'); - if (defined($ENV{'scantron.maxquest'})) { + if (defined($env{'scantron.maxquest'})) { $Apache::lonhomework::scantronmode=1; } @@ -427,16 +505,17 @@ sub start_problem { if ($target eq 'web') { &Apache::lonhomework::showhash(%Apache::lonhomework::history); } - if ($ENV{'request.state'} eq 'construct') { &set_problem_state('0'); } + if ($env{'request.state'} eq 'construct') { &set_problem_state('0'); } $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'}; + if (($env{'request.state'} eq 'construct') && + defined($env{'form.problemtype'})) { + $Apache::lonhomework::type=$env{'form.problemtype'}; } + $Apache::lonhomework::default_type = $Apache::lonhomework::type; &Apache::lonxml::debug("Found this to be of type :$Apache::ltonhomework::type:"); } if ($Apache::lonhomework::type eq '' ) { - my $uri=$ENV{'request.uri'}; + my $uri=$env{'request.uri'}; if ($uri=~/\.(\w+)$/) { $Apache::lonhomework::type=$1; &Apache::lonxml::debug("Using type of $1"); @@ -456,7 +535,7 @@ sub start_problem { #should get back a or the neccesary stuff to start XML/MathML my ($result,$head_tag_start,$body_tag_start,$form_tag_start)= &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval); - if ($target eq 'tex' and $ENV{'request.symb'} =~ m/\.page_/) {$result='';} + if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';} if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval); } if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || @@ -465,26 +544,35 @@ sub start_problem { if ($Apache::lonhomework::type eq 'exam') { my $token= $Apache::lonhomework::history{"resource.0.outtoken"}; - if (($ENV{'form.doescheckout'}) && (!$token)) { + if (($env{'form.doescheckout'}) && (!$token)) { $token=&Apache::lonxml::maketoken(); $Apache::lonhomework::history{"resource.0.outtoken"}= $token; } $body_tag_start.=&Apache::lonxml::printtokenheader($target,$token); } - if ($ENV{'form.markaccess'}) { + if ($env{'form.markaccess'}) { &Apache::lonnet::set_first_access('map'); } #handle rand seed in construction space my $rndseed=&setup_rndseed($safeeval); my ($symb)=&Apache::lonxml::whichuser(); - if ($ENV{'request.state'} ne "construct" && $symb eq '') { + if ($env{'request.state'} ne "construct" && $symb eq '') { $form_tag_start.=''. ''. '
'; + value="'.$env{'form.username'}.'" />'; + if ($env{'user.adv'}) { + $form_tag_start.= + ' '; # create a page header and exit - if ($ENV{'request.state'} eq "construct") { - $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 (defined $env{'form.grade_symb'}) { foreach my $field ('symb','courseid','domain','username') { $result .= ''."\n"; + '" value="'.$env{"form.grade_$field"}.'" />'."\n"; } } } elsif ($target eq 'tex') { my $startminipage = ''; - if (not $ENV{'form.problem_split'}=~/yes/) { + if (not $env{'form.problem_split'}=~/yes/) { $startminipage = '\begin{minipage}{\textwidth}'; } my $id = $Apache::inputtags::part; my $weight = &Apache::lonnet::EXT("resource.$id.weight"); - my $packages=&Apache::lonnet::metadata($ENV{'request.uri'},'packages'); + my $packages=&Apache::lonnet::metadata($env{'request.uri'},'packages'); my @packages = split /,/,$packages; my $allow_print_points = 0; foreach my $partial_key (@packages) { @@ -554,10 +642,12 @@ sub start_problem { $allow_print_points=1; } } + my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); + if (defined($maxtries) && $maxtries < 0) { $allow_print_points=0; } my $duedate = &Apache::lonnet::EXT("resource.$id.duedate"); $duedate = POSIX::strftime("%c",localtime($duedate)); my $temp_file; - my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.due"; + my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due"; if (-e $filename) { $temp_file = Apache::File->new($filename); } else { @@ -570,19 +660,19 @@ sub start_problem { if ($due_file_content ne $duedate) { $temp_file = Apache::File->new('>'.$filename); print $temp_file "$duedate\n"; - if (not $ENV{'request.symb'} =~ m/\.page_/) { + if (not $env{'request.symb'} =~ m/\.page_/) { if(not $duedate=~m/1969/ and $Apache::lonhomework::type ne 'exam') { - $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource

"'.$name_of_resourse.'"

located in
'.$ENV{'request.uri'}.'
STAMPOFPASSEDRESOURCEEND} \noindent\textit{Due date: '.$duedate.'} \vskip 1 mm\noindent '.$startminipage.'\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}'; + $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource

"'.$name_of_resourse.'"

located in
'.$env{'request.uri'}.'
STAMPOFPASSEDRESOURCEEND} \noindent\textit{Due date: '.$duedate.'} \vskip 1 mm\noindent '.$startminipage.'\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}'; } else { - $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource

"'.$name_of_resourse.'"

located in
'.$ENV{'request.uri'}.'
STAMPOFPASSEDRESOURCEEND} \noindent \vskip 1 mm \noindent'.$startminipage.'\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}'; + $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource

"'.$name_of_resourse.'"

located in
'.$env{'request.uri'}.'
STAMPOFPASSEDRESOURCEEND} \noindent \vskip 1 mm \noindent'.$startminipage.'\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}'; if ($Apache::lonhomework::type eq 'exam' and $allow_print_points==1) { $result .= '\fbox{\textit{'.$weight.' pt}}';} } } else { $result .= '\vskip 1mm\textit{Due date: '.$duedate.'} \\\\\\\\'; } } else { - if (not $ENV{'request.symb'} =~ m/\.page_/) { - $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource

"'.$name_of_resourse.'"

located in
'.$ENV{'request.uri'}.'
STAMPOFPASSEDRESOURCEEND} \noindent \vskip 1 mm\noindent'.$startminipage.'\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}'; + if (not $env{'request.symb'} =~ m/\.page_/) { + $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource

"'.$name_of_resourse.'"

located in
'.$env{'request.uri'}.'
STAMPOFPASSEDRESOURCEEND} \noindent \vskip 1 mm\noindent'.$startminipage.'\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}'; if (($Apache::lonhomework::type eq 'exam') and ($allow_print_points==1)) { $result .= '\fbox{\textit{'.$weight.' pt}}';} } else { $result .= '\vskip 1mm \\\\\\\\'; @@ -629,31 +719,31 @@ sub end_problem { $result.= $gradestatus; } if ( - (($target eq 'web') && ($ENV{'request.state'} ne 'construct')) || + (($target eq 'web') && ($env{'request.state'} ne 'construct')) || ($target eq 'answer') || ($target eq 'tex') ) { if ($target ne 'tex' && - $ENV{'form.answer_output_mode'} ne 'tex') { + $env{'form.answer_output_mode'} ne 'tex') { $result.=""; $result.=&Apache::lonhtmlcommon::htmlareaselectactive(@Apache::lonxml::htmlareafields); - $result.="\n"; } if ($target eq 'web') { - $result.=&Apache::lonxml::xmlend(); + $result.=&Apache::lonxml::xmlend().''; } elsif ($target eq 'tex') { my $endminipage = ''; - if (not $ENV{'form.problem_split'}=~/yes/) { + if (not $env{'form.problem_split'}=~/yes/) { $endminipage = '\end{minipage}'; } - if ($ENV{'form.print_discussions'} eq 'yes') { - $result.=&Apache::lonxml::xmlend(); + if ($env{'form.print_discussions'} eq 'yes') { + $result.=&Apache::lonxml::xmlend($target,$parser); $result=~s/<\/html>//; - } - $result .= '\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}'; - if (not $ENV{'request.symb'} =~ m/\.page_/) { - $result .= $endminipage.'\end{document} '; } else { - $result .= ''; + $result .= '\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}'; + if (not $env{'request.symb'} =~ m/\.page_/) { + $result .= $endminipage.'\end{document} '; + } else { + $result .= ''; + } } } } @@ -661,9 +751,10 @@ sub end_problem { &Apache::lonhomework::showhash(%Apache::lonhomework::results); &finalize_storage(); } - if ($target eq 'answer' && ($ENV{'request.state'} eq 'construct') - && $ENV{'form.answer_output_mode'} ne 'tex') { - $result.=''; # normally we get it from xmlend, but in CSTR + if ($target eq 'answer' && ($env{'request.state'} eq 'construct') + && $env{'form.answer_output_mode'} ne 'tex') { + $result.=&Apache::lonxml::xmlend().''; + # normally we get it from above, but in CSTR # we always show answer mode too. } } elsif ($target eq 'meta') { @@ -678,7 +769,7 @@ sub end_problem { $result = &problem_edit_footer(); } - if ($ENV{'request.state'} eq 'construct' && $target eq 'web') { + if ($env{'request.state'} eq 'construct' && $target eq 'web') { &Apache::inputtags::check_for_duplicate_ids(); } @@ -706,7 +797,7 @@ sub start_library { $result=$token->[4]; $result.=&Apache::edit::handle_insert(); } elsif ($target eq 'web' && $$tagstack[0] ne 'problem' && - $ENV{'request.state'} eq "construct" ) { + $env{'request.state'} eq "construct" ) { ($result,$head_tag_start,$body_tag_start,$form_tag_start)= &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval); my $name=&get_resource_name($parstack,$safeeval); @@ -725,8 +816,9 @@ sub end_library { if ($target eq 'edit') { $result=&problem_edit_footer(); } elsif ($target eq 'web' && $$tagstack[0] ne 'problem' && - $ENV{'request.state'} eq "construct") { - $result.=''.&Apache::lonxml::xmlend(); + $env{'request.state'} eq "construct") { + $result.=''.&Apache::loncommon::endbodytag(). + &Apache::lonxml::xmlend(); } if ($$tagstack[0] eq 'library') { &reset_problem_globals('library') }; return $result; @@ -860,8 +952,8 @@ sub start_instructorcomment { if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze') { - $result=($ENV{'request.role'}=~/^(in|cc|au|ca|li)/); - if ( (! $result) or ($ENV{'form.instructor_comments'} eq 'hide')) { + $result=($env{'request.role'}=~/^(in|cc|au|ca|li)/); + if ( (! $result) or ($env{'form.instructor_comments'} eq 'hide')) { my $skip=&Apache::lonxml::get_all_text("/instructorcomment", $parser,$style); &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]"); @@ -931,13 +1023,13 @@ sub end_while { while ($return) { if (time-$starttime > $Apache::lonnet::perlvar{'lonScriptTimeout'}) { - $return = 0; $error=1; next; + #$return = 0; $error=1; next; } $result.=&Apache::scripttag::xmlparse($bodytext); $return = &Apache::run::run($code,$safeeval); } if ($error) { - &Apache::lonxml::error('
'.&mt('Code ran too long. It ran for more than').' '.$Apache::lonnet::perlvar{'lonScriptTimeout'}.' '.&mt('seconds occured while running <while$gt; on line').' '.$line.'
'); + &Apache::lonxml::error('
'.&mt('Code ran too long. It ran for more than').' '.$Apache::lonnet::perlvar{'lonScriptTimeout'}.' '.&mt('seconds occured while running <while> on line').' '.$line.'
'); } } elsif ($target eq "edit") { $result.= &Apache::edit::tag_end($target,$token,''); @@ -1029,11 +1121,22 @@ sub end_randomlist { return $result; } +sub ordered_show_check { + my $last_part=$Apache::inputtags::partlist[-2]; + my $in_order= + &Apache::lonnet::EXT('resource.'.$Apache::inputtags::part.'.ordered'); + my $in_order_show=1; + if ($last_part ne '0' && lc($in_order) eq 'yes') { + $in_order_show=&Apache::response::check_status($last_part); + } + return $in_order_show; +} + sub start_part { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $result=''; my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval); - if ($id eq '') { $id = $Apache::lonxml::curdepth; } + if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; } $Apache::inputtags::part=$id; push(@Apache::inputtags::partlist,$id); @Apache::inputtags::response=(); @@ -1043,7 +1146,7 @@ sub start_part { my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part); my $newtype=&Apache::lonnet::EXT("resource.$id.type"); if ($newtype) { $Apache::lonhomework::type=$newtype; } - + my $in_order_show=&ordered_show_check(); my $expression='$external::part=\''.$Apache::inputtags::part.'\';'; $expression.='$external::type=\''.$Apache::lonhomework::type.'\';'; &Apache::run::run($expression,$safeeval); @@ -1054,7 +1157,7 @@ sub start_part { &Apache::response::meta_parameter_write('display','string',$display,'Part Description'); } elsif ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') { - if ($hidden) { + if ($hidden || !$in_order_show) { my $bodytext=&Apache::lonxml::get_all_text("/part",$parser); } else { my ($status,$accessmsg) = &Apache::lonhomework::check_access($id); @@ -1062,7 +1165,7 @@ sub start_part { my $expression='$external::datestatus="'.$status.'";'; $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$id.solved"}.'";'; &Apache::run::run($expression,$safeeval); - if ($ENV{'request.state'} eq 'construct') { + if ($env{'request.state'} eq 'construct') { &set_problem_state($Apache::inputtags::part); } if (( $status eq 'CLOSED' ) || @@ -1075,7 +1178,7 @@ sub start_part { if ( $target eq "web" ) { $result="
".&mt('Part is not open to be viewed. It')." $accessmsg
"; } elsif ( $target eq 'tex' ) { - if (not $ENV{'form.problem_split'}=~/yes/) { + if (not $env{'form.problem_split'}=~/yes/) { $result="\\end{minipage}\\vskip 0 mm ".&mt('Part is not open to be viewed. It')." $accessmsg \\\\\\begin{minipage}{\\textwidth}"; } else { $result="\\vskip 0 mm ".&mt('Part is not open to be viewed. It')." $accessmsg \\\\"; @@ -1083,7 +1186,7 @@ sub start_part { } } else { if ($target eq 'tex') { - if (not $ENV{'form.problem_split'}=~/yes/) { + if (not $env{'form.problem_split'}=~/yes/) { if ($$tagstack[-2] eq 'td') { $result.='\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent'; } else { @@ -1091,7 +1194,7 @@ sub start_part { } } my $weight = &Apache::lonnet::EXT("resource.$id.weight"); - my $allkeys=&Apache::lonnet::metadata($ENV{'request.uri'},'packages'); + my $allkeys=&Apache::lonnet::metadata($env{'request.uri'},'packages'); my @allkeys = split /,/,$allkeys; my $allow_print_points = 0; foreach my $partial_key (@allkeys) { @@ -1099,6 +1202,10 @@ sub start_part { if ($1 ne '0') {$allow_print_points=1;} } } + my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); + if (defined($maxtries) && $maxtries < 0) { + $allow_print_points=0; + } if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { $result .= '\fbox{\textit{'.$weight.' pt}}';} } elsif ($target eq 'web') { $result.=''; @@ -1130,18 +1237,20 @@ sub end_part { &Apache::lonxml::debug("in end_part $target "); my $status=$Apache::inputtags::status['-1']; my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part); + my $in_order_show=&ordered_show_check(); my $result=''; if ( $target eq 'meta' ) { $result=''; } elsif ($target eq 'grade') { if (($status eq 'CAN_ANSWER' || $Apache::lonhomework::scantronmode) && - !$hidden) { + !$hidden && $in_order_show) { $result=&Apache::inputtags::grade; } else { # move any submission data to .hidden &Apache::inputtags::hidealldata($Apache::inputtags::part); } - } elsif (($target eq 'web' || $target eq 'tex') && !$hidden ) { + } elsif (($target eq 'web' || $target eq 'tex') && + !$hidden && $in_order_show) { my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part, $target); if ($Apache::lonhomework::type eq 'exam' && $target eq 'tex') { @@ -1154,6 +1263,7 @@ sub end_part { } pop @Apache::inputtags::status; $Apache::inputtags::part=''; + $Apache::lonhomework::type = $Apache::lonhomework::default_type; return $result; } @@ -1336,12 +1446,14 @@ sub delete_startouttext { sub start_simpleeditbutton { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $result=''; - if (($target eq 'web') && - (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) { - my $url=$ENV{'request.noversionuri'}; + if (($env{'form.simple_edit_button'} ne 'off') && + ($target eq 'web') && + (&Apache::lonnet::allowed('srm',$env{'request.course.id'}))) { + my $url=$env{'request.noversionuri'}; $url=~s/\?.*$//; + my ($symb) = &Apache::lonxml::whichuser(); $result='
'. - ''.&mt('Simple Problem Editor').' - '.&mt('Note: it can take up to 10 minutes for changes to take effect for all users.'). + ''.&mt('Edit').' - '.&mt('Note: it can take up to 10 minutes for changes to take effect for all users.'). &Apache::loncommon::help_open_topic('Caching').'

'; } return $result;