--- loncom/homework/structuretags.pm 2007/08/14 04:29:37 1.390 +++ loncom/homework/structuretags.pm 2007/10/16 23:20:25 1.404 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.390 2007/08/14 04:29:37 albertel Exp $ +# $Id: structuretags.pm,v 1.404 2007/10/16 23:20:25 albertel 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 { @@ -92,6 +92,31 @@ sub end_tex { return ''; } +sub homework_js { + return &Apache::loncommon::resize_textarea_js(). + <<'JS'; + +JS +} + sub page_start { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name, $extra_head)=@_; @@ -108,13 +133,7 @@ sub page_start { $parstack,$parser,$safeeval); } - $extra_head.= ' - -'; + $extra_head .= &homework_js(); my %body_args; if (defined($found{'html'})) { @@ -139,7 +158,9 @@ function setSubmittedPart (part) { } elsif (!defined($found{'body'}) && $env{'request.state'} eq 'construct') { if ($target eq 'web' || $target eq 'edit') { - # no extra args to bodytag + if ($env{'environment.remote'} ne 'off') { + $body_args{'only_body'} = 1; + } } } elsif (!defined($found{'body'})) { my %add_entries; @@ -157,6 +178,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, @@ -207,7 +232,7 @@ sub get_resource_name { $name = $Apache::lonhomework::name; } else { my ($symb)=&Apache::lonnet::whichuser(); - my $name=&Apache::lonnet::gettitle($symb); + $name=&Apache::lonnet::gettitle($symb); if ($name eq '') { $name=&Apache::lonnet::EXT('resource.title'); if ($name eq 'con_lost') { $name = ''; } @@ -761,7 +786,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') { @@ -1066,16 +1091,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; } @@ -1136,19 +1164,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); @@ -1180,6 +1227,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)=@_; @@ -1392,6 +1489,8 @@ sub start_part { @Apache::inputtags::previous=(); @Apache::inputtags::previous_version=(); $Apache::lonhomework::problemstatus=&get_problem_status($id); + &Apache::response::reset_params(); + 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; } @@ -1648,6 +1747,13 @@ sub start_startouttext { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my @result=(''.''); if ($target eq 'edit' || $target eq 'modified' ) { @result=('','no'); } + + my $nesting = + &Apache::lonxml::set_state('outtext', + &Apache::lonxml::get_state('outtext')+1); + if ($nesting > 1 && $env{'request.state'} eq 'construct') { + &Apache::lonxml::error("Nesting of <startouttext /> not allowed, on line ".$token->[5]); + } return (@result); } @@ -1687,6 +1793,14 @@ sub start_endouttext { $result=''. &Apache::edit::handle_insertafter('startouttext'); } + + my $nesting = + &Apache::lonxml::set_state('outtext', + &Apache::lonxml::get_state('outtext')-1); + if ($nesting < 0 && $env{'request.state'} eq 'construct') { + &Apache::lonxml::error(" Extraneous <endouttext /> not allowed on line ".$token->[5]); + &Apache::lonxml::set_state('outtext', 0); + } return $result; } 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.