version 1.497.2.1, 2011/12/12 11:19:53
|
version 1.498, 2011/12/10 17:53:45
|
Line 960 sub reset_problem_globals {
|
Line 960 sub reset_problem_globals {
|
undef(%Apache::lonhomework::history); |
undef(%Apache::lonhomework::history); |
undef(%Apache::lonhomework::results); |
undef(%Apache::lonhomework::results); |
undef($Apache::inputtags::part); |
undef($Apache::inputtags::part); |
|
if ($type eq 'Task') { |
|
undef($Apache::inputtags::slot_name); |
|
} |
#don't undef this, lonhomework.pm takes care of this, we use this to |
#don't undef this, lonhomework.pm takes care of this, we use this to |
#detect if we try to do 2 problems in one file |
#detect if we try to do 2 problems in one file |
# undef($Apache::lonhomework::parsing_a_problem); |
# undef($Apache::lonhomework::parsing_a_problem); |
Line 1539 sub end_block {
|
Line 1542 sub end_block {
|
} |
} |
return $result; |
return $result; |
} |
} |
# |
|
# <languageblock [include='lang1,lang2...'] [exclude='lang1,lang2...']> |
|
# ... |
|
# </languageblock> |
|
# |
|
# This declares the intent to provide content that can be rendered in the |
|
# set of languages in the include specificatino but not in the exclude |
|
# specification. If a currently preferred language is in the include list |
|
# the content in the <languageblock>...</languageblock> is rendered |
|
# If the currently preferred language is in the exclude list, |
|
# the content in the <languageblock>..></languageblock is not rendered. |
|
# |
|
# Pathalogical case handling: |
|
# - Include specified, without the preferred language but exclude specified |
|
# also without the preferred langauge results in rendering the block. |
|
# - Exclude specified without include and excluden not containing a |
|
# preferred language renders the block. |
|
# - Include and exclude both specifying the preferred language does not |
|
# render the block. |
|
# - If neither include/exclude is specified, the block gets rendered. |
|
# |
|
# This tag has no effect when target is in {edit, modified} |
|
# |
|
sub start_languageblock { |
sub start_languageblock { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
|
|
my $result = ''; |
my $result; |
|
|
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 'analyze' || $target eq 'webgrade') { |
$target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { |
my $include = $token->[2]->{'include'}; |
my $include = $token->[2]->{'include'}; |
my $exclude = $token->[2]->{'exclude'}; |
my $exclude = $token->[2]->{'exclude'}; |
my @preferred_languages=&Apache::lonlocal::preferred_languages(); |
my @preferred_languages=&Apache::lonlocal::preferred_languages(); |
|
# This should not even happen, since we should at least have the server language |
# 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 |
if (!$preferred_languages[0]) { |
|
$preferred_languages[0]='en'; |
|
} |
|
|
|
# Now loop over all languages in order of preference |
|
|
|
foreach my $preferred_language (@preferred_languages) { |
foreach my $preferred_language (@preferred_languages) { |
|
# If the languageblock has no arguments, show the contents |
# If neither include/nor exlude is present the block is going |
$result=1; |
# to get rendered. |
|
|
|
my $render=1; |
|
my $found=0; |
my $found=0; |
|
# Do we have an include argument? |
# If include is specified, don't render the block |
|
# unless the preferred language is included in the set. |
|
|
|
if ($include) { |
if ($include) { |
$render=0; |
# If include is specified, by default, don't render the block |
|
$result=0; |
foreach my $included_language (split(/\,/,$include)) { |
foreach my $included_language (split(/\,/,$include)) { |
|
# ... but if my preferred language is included, render it |
if ($included_language eq $preferred_language) { |
if ($included_language eq $preferred_language) { |
$render=1; |
$result=1; |
$found=1; |
$found=1; |
last; # Only need to find the first. |
|
} |
} |
} |
} |
} |
} |
# Do we have an exclude argument? |
# Do we have an exclude argument? |
# If so, and one of the languages matches a preferred language |
|
# inhibit rendering the block. Note that in the pathalogical case the |
|
# author has specified a preferred language in both the include and exclude |
|
# attribte exclude is preferred. |
|
|
|
if ($exclude) { |
if ($exclude) { |
$render=1; |
$result=1; |
foreach my $excluded_language (split(/\,/,$exclude)) { |
foreach my $excluded_language (split(/\,/,$exclude)) { |
if ($excluded_language eq $preferred_language) { |
if ($excluded_language eq $preferred_language) { |
$render=0; |
$result=0; |
$found=1; |
$found=1; |
last; # Only need to find the first. |
|
} |
} |
} |
} |
} |
} |
if ($found) { |
if ($found) { last; } |
last; # Done on any match of include or exclude. |
|
} |
|
} |
} |
# If $render not true skip the entire block until </languageblock> |
if ( ! $result ) { |
# |
|
|
|
if ( ! $render ) { |
|
my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser, |
my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser, |
$style); |
$style); |
&Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]"); |
&Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]"); |
} |
} |
# If $render is true, we've not skipped the contents of the <languageglock> |
$result=''; |
# and the normal loncapa processing flow will render it as a matter of course. |
|
|
|
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .=&Apache::edit::tag_start($target,$token); |
$result .=&Apache::edit::tag_start($target,$token); |
$result .=&Apache::edit::text_arg(&mt('Include Language:'),'include', |
$result .=&Apache::edit::text_arg(&mt('Include Language:'),'include', |