--- loncom/homework/structuretags.pm 2007/07/23 23:30:47 1.384 +++ loncom/homework/structuretags.pm 2007/09/12 08:35:44 1.399 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.384 2007/07/23 23:30:47 albertel Exp $ +# $Id: structuretags.pm,v 1.399 2007/09/12 08:35:44 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,7 +42,7 @@ use lib '/home/httpd/lib/perl/'; use LONCAPA; 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')); + &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag')); } sub start_web { @@ -157,6 +157,10 @@ function setSubmittedPart (part) { $body_args{'no_title'} = 1; $body_args{'force_register'} = 1; $body_args{'add_entries'} = \%add_entries; + if ($env{'environment.remote'} eq 'off' + && $env{'request.state'} eq 'construct') { + $body_args{'only_body'} = 1; + } } $body_args{'no_auto_mt_title'} = 1; my $page_start = &Apache::loncommon::start_page($name,$extra_head, @@ -202,20 +206,27 @@ function setSubmittedPart (part) { #use Time::HiRes(); sub get_resource_name { my ($parstack,$safeeval)=@_; + my $name; if (defined($Apache::lonhomework::name)) { - return $Apache::lonhomework::name; - } - my ($symb)=&Apache::lonnet::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=~s-.*/([^/]+)$-$1-; + $name = $Apache::lonhomework::name; + } else { + my ($symb)=&Apache::lonnet::whichuser(); + $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=~s-.*/([^/]+)$-$1-; + } + # The name has had html tags escaped: + + $name=~s/<//gs; + + $Apache::lonhomework::name=$name; } - $Apache::lonhomework::name=$name; return $name; } @@ -319,7 +330,7 @@ sub problem_web_to_edit_header { $result.= ' />'.$show_all_foils_text.''. &Apache::loncommon::help_open_topic('Problem_Editor_Testing_Area','Testing Problems'). '
'; - $result.=&mt('Apply style file').' + $result.=&mt('Apply style file: ').' &').'" /> '.&mt('Select').' @@ -458,7 +469,6 @@ sub finalize_storage { } return $result; } -use Data::Dumper; # -------------------------------------------------------------store_aggregates # Sends hash of values to be incremented in nohist_resourcetracker.db @@ -638,7 +648,6 @@ sub start_problem { } if ($target ne 'analyze') { - 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'})) { @@ -659,6 +668,11 @@ sub start_problem { $Apache::lonhomework::default_type = $Apache::lonhomework::type; &initialize_storage(); + if ($target ne 'analyze' + && $env{'request.state'} eq 'construct') { + &set_problem_state('0'); + } + if ($target eq 'web') { &Apache::lonxml::debug(" grading history "); &Apache::lonhomework::showhash(%Apache::lonhomework::history); @@ -751,7 +765,7 @@ sub start_problem { $msg.='

'.&mt('Not open to be viewed').'

'; } if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') { - $msg.='The problem '.$accessmsg; + $msg.=&mt('The problem ').$accessmsg; } elsif ($status eq 'UNCHECKEDOUT') { $msg.=&checkout_msg(); } elsif ($status eq 'NOT_YET_VIEWED') { @@ -1056,16 +1070,19 @@ sub start_definetag { my $name = $token->[2]->{'name'}; my $skip=&Apache::lonxml::get_all_text("/definetag",$parser,$style); - if ($name=~/^\//) { - $result= - '
'; - } else { - $result= - '
END '.$name.'
'; + if ($target eq 'web') { + if ($name=~/^\//) { + $result= + '
BEGIN '.$name.'
'; + } else { + $result= + '
'. + &mt('END [_1]'.''.$name.'').'
'; + } + $skip = &HTML::Entities::encode($skip, '<>&"'); + $result.='
'. + &mt('BEGIN [_1]'.''.$name.'').'
'.$skip.'
'; } - $skip=~s/\/\>\;/gs; - $result.='
'.$skip.'
'; return $result; } @@ -1081,7 +1098,7 @@ sub start_block { if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { my $code = $token->[2]->{'condition'}; - if (defined($code)) { + if (defined($code) && $code ne '') { if (!$Apache::lonxml::default_homework_loaded) { &Apache::lonxml::default_homework_load($safeeval); } @@ -1126,19 +1143,38 @@ sub start_languageblock { $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { my $include = $token->[2]->{'include'}; my $exclude = $token->[2]->{'exclude'}; - my %languages=&Apache::loncommon::display_languages(); - $result='1'; - if ($include) { - $result=''; - foreach (split(/\,/,$include)) { - if ($languages{$_}) { $result='1'; } - } - } - if ($exclude) { - foreach (split(/\,/,$exclude)) { - if ($languages{$_}) { $result='0'; } - } - } + my @preferred_languages=&Apache::loncommon::preferred_languages(); +# This should not even happen, since we should at least have the server language + if (!$preferred_languages[0]) { $preferred_languages[0]='en'; } +# Now loop over all languages in order of preference + foreach my $preferred_language (@preferred_languages) { +# If the languageblock has no arguments, show the contents + $result=1; + my $found=0; +# Do we have an include argument? + if ($include) { +# If include is specified, by default, don't render the block + $result=0; + foreach my $included_language (split(/\,/,$include)) { +# ... but if my preferred language is included, render it + if ($included_language eq $preferred_language) { + $result=1; + $found=1; + } + } + } +# Do we have an exclude argument? + if ($exclude) { + $result=1; + foreach my $excluded_language (split(/\,/,$exclude)) { + if ($excluded_language eq $preferred_language) { + $result=0; + $found=1; + } + } + } + if ($found) { last; } + } if ( ! $result ) { my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser, $style); @@ -1170,6 +1206,56 @@ sub end_languageblock { return $result; } +{ + my %available_texts; + sub start_translated { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + &Apache::lonxml::register('Apache::structuretags',('lang')); + undef(%available_texts); + } + + sub end_translated { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result; + #show the translation on viewable targets + if ($target eq 'web' || $target eq 'tex' || $target eq 'webgrade'|| + # or non-viewable targets, if it's embedded in something that + # wants the output + (($target eq 'answer' || $target eq 'analyze'|| $target eq 'grade') + && &Apache::lonxml::in_redirection() ) ) { + my @possibilities = keys(%available_texts); + my $which = + &Apache::loncommon::languages(\@possibilities) || 'default'; + $result = $available_texts{$which}; + } + undef(%available_texts); + &Apache::lonxml::deregister('Apache::structuretags',('lang')); + return $result; + } + + + sub start_lang { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { + &Apache::lonxml::startredirection(); + } + return ''; + } + + sub end_lang { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { + my $result = &Apache::lonxml::endredirection(); + my $which = &Apache::lonxml::get_param('which',$parstack, + $safeeval); + $available_texts{$which} = $result; + } + return ''; + } +} + sub start_instructorcomment { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; @@ -1375,8 +1461,7 @@ sub start_part { # duedates. } my $result=''; - my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval); - if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; } + my $id= &Apache::lonxml::get_id($parstack,$safeeval); $Apache::inputtags::part=$id; push(@Apache::inputtags::partlist,$id); @Apache::inputtags::response=(); @@ -1429,7 +1514,7 @@ sub start_part { if ($target eq 'tex') { if (not $env{'form.problem_split'}=~/yes/) { if ($$tagstack[-2] eq 'td') { - $result.='\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent'; + $result.='\noindent \begin{minipage}{\textwidth}\noindent'; } else { $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent'; }