--- loncom/homework/structuretags.pm 2003/10/15 22:24:06 1.200.2.4
+++ loncom/homework/structuretags.pm 2003/10/14 00:21:12 1.217
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: structuretags.pm,v 1.200.2.4 2003/10/15 22:24:06 albertel Exp $
+# $Id: structuretags.pm,v 1.217 2003/10/14 00:21:12 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -36,6 +36,7 @@ use strict;
use Apache::lonnet;
use Apache::File();
use Apache::lonmenu;
+use Apache::lonlocal;
BEGIN {
&Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext',
@@ -83,7 +84,10 @@ sub page_start {
if (!defined($found{'html'})) {
$result=&Apache::londefdef::start_html($target,$token,$tagstack,
$parstack,$parser,$safeeval);
- $head_tag_start='
'.&Apache::lonmenu::registerurl(undef,$target);
+ $head_tag_start='';
+ if ($ENV{'request.state'} eq 'published') {
+ $head_tag_start.=&Apache::lonmenu::registerurl(undef,$target);
+ }
}
my $body_tag_start;
if (!defined($found{'body'})) {
@@ -114,7 +118,7 @@ sub page_start {
&Apache::lonxml::whichuser();
if ($symb eq '' && !$publicuser) {
my $help = &Apache::loncommon::help_open_topic("Ambiguous_Reference");
- $help="Browsing resource, all submissions are temporary. ";
+ $help=&mt("Browsing resource, all submissions are temporary.")." ";
$body_tag_start.=$help;
}
}
@@ -130,11 +134,18 @@ sub page_start {
#use Time::HiRes();
sub get_resource_name {
my ($parstack,$safeeval)=@_;
+ if (defined($Apache::lonhomework::name)) {
+ return $Apache::lonhomework::name;
+ }
my $name=&Apache::lonnet::gettitle();
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-;
+ }
$Apache::lonhomework::name=$name;
return $name;
}
@@ -152,8 +163,8 @@ sub setup_rndseed {
$ENV{'form.rndseed'}=$rndseed;
}
}
- if ($ENV{'form.resetdata'} eq 'New Problem Variation' ||
- $ENV{'form.newrandomization'} eq '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;
@@ -171,43 +182,44 @@ sub setup_rndseed {
sub problem_edit_header {
return '
-
-
-
-
-
-
+
+
+
+
+
+
';
}
sub problem_edit_footer {
- return '
- ';
+ return '
+ ';
}
sub problem_web_to_edit_header {
my ($rndseed)=@_;
- my $result.='
-
-
-
-
-
+ my $result.='
+
+
+
+
+
Show All Foils
+ $result.= ' />'.&mt(' Show All Foils').'
';
my $numtoanalyze=$ENV{'form.numtoanalyze'};
if (!$numtoanalyze) { $numtoanalyze=20; }
- $result.= ' for
+ $result.= ' for
versions of this problem.'.
- &Apache::loncommon::help_open_topic("Analyze_Problem",
+ $numtoanalyze.'" size="5" /> '.&mt('versions of this problem').
+ '.'.&Apache::loncommon::help_open_topic("Analyze_Problem",
'',undef,undef,300).
- '';
+ '';
return $result;
}
@@ -253,21 +265,62 @@ sub finalize_storage {
}
sub checkout_msg {
+ my %lt=&Apache::lonlocal::texthash(
+ 'resource'=>'The resource needs to be checked out',
+ 'id_expln'=>'As a resource gets checked out, a unique timestamped ID is given to it, and a permanent record is left in the system.',
+ 'warning'=>'Checking out resources is subject to course policies, and may exclude future credit even if done erroneously.',
+ 'checkout'=>'Check out Exam for Viewing',
+ 'checkout?'=>'Check out Exam?');
return (<The resource needs to be checked out
-As a resource gets checked out, a unique timestamped ID is given to it, and a
-permanent record is left in the system.
-
-Checking out resources is subject to course policies, and may exclude future
-credit even if done erroneously.
+
$lt{'resource'}
+
$lt{'id_expln'}
+
+
$lt{'warning'}
ENDCHECKOUT
}
+sub init_problem_globals {
+ my ($type)=@_;
+ #initialize globals
+ if ($type eq 'problem') {
+ $Apache::inputtags::part='0';
+ @Apache::inputtags::partlist=('0');
+ $Apache::lonhomework::problemstatus=
+ &Apache::lonnet::EXT('resource.0.problemstatus');
+ } else {
+ $Apache::inputtags::part='';
+ @Apache::inputtags::partlist=();
+ $Apache::lonhomework::problemstatus='';
+ }
+ @Apache::inputtags::responselist = ();
+ @Apache::inputtags::importlist = ();
+ @Apache::inputtags::previous=();
+ @Apache::inputtags::previous_version=();
+ $Apache::structuretags::printanswer='No';
+ @Apache::structuretags::whileconds=();
+ @Apache::structuretags::whilebody=();
+ @Apache::structuretags::whileline=();
+ $Apache::lonhomework::scantronmode=0;
+ undef($Apache::lonhomework::name);
+
+}
+
+sub reset_problem_globals {
+ my ($type)=@_;
+ undef(%Apache::lonhomework::history);
+ undef(%Apache::lonhomework::results);
+ undef($Apache::inputtags::part);
+#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
+# undef($Apache::lonhomework::parsing_a_problem);
+ undef($Apache::lonhomework::name);
+}
+
sub start_problem {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
@@ -279,20 +332,7 @@ sub start_problem {
}
$Apache::lonhomework::parsing_a_problem=1;
-#initialize globals
- $Apache::inputtags::part='0';
- @Apache::inputtags::partlist=('0');
- @Apache::inputtags::responselist = ();
- @Apache::inputtags::importlist = ();
- @Apache::inputtags::previous=();
- @Apache::inputtags::previous_version=();
- $Apache::structuretags::printanswer='No';
- @Apache::structuretags::whileconds=();
- @Apache::structuretags::whilebody=();
- @Apache::structuretags::whileline=();
- $Apache::lonhomework::scantronmode=0;
- $Apache::lonhomework::problemstatus=
- &Apache::lonnet::EXT('resource.0.problemstatus');
+ &init_problem_globals('problem');
if (defined($ENV{'scantron.maxquest'})) {
$Apache::lonhomework::scantronmode=1;
@@ -318,7 +358,7 @@ sub start_problem {
}
#added vars to the scripting enviroment
- my $expression='$external::part='.$Apache::inputtags::part.';';
+ my $expression='$external::part=\''.$Apache::inputtags::part.'\';';
&Apache::run::run($expression,$safeeval);
my $status;
my $accessmsg;
@@ -350,7 +390,7 @@ sub start_problem {
$form_tag_start.=''.
''.
+ value="'.&mt('New Problem Variation').'" />'.
' ';
}
@@ -370,9 +410,9 @@ sub start_problem {
$result.= $head_tag_start.'';
my $msg=$body_tag_start;
if ($status eq 'UNAVAILABLE') {
- $result.='
Unable to determine if this resource is open due to network problems. Please try again later.
';
+ $result.='
'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'
';
} else {
- $result.='
Not open to be viewed
';
+ $result.='
'.&mt('Not open to be viewed').'
';
}
if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
$msg.='The problem '.$accessmsg;
@@ -383,9 +423,9 @@ sub start_problem {
} elsif ($target eq 'tex') {
$result.='\begin{document}\noindent \vskip 1 mm \begin{minipage}{\textwidth}\vskip 0 mm';
if ($status eq 'UNAVAILABLE') {
- $result.='Unable to determine if this resource is open due to network problems. Please try again later.\vskip 0 mm ';
+ $result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm ';
} else {
- $result.="Problem is not open to be viewed. It $accessmsg \\vskip 0 mm ";
+ $result.=&mt('Problem is not open to be viewed. It')." $accessmsg \\vskip 0 mm ";
}
}
} elsif ($target eq 'web') {
@@ -416,12 +456,6 @@ sub start_problem {
if (not $ENV{'form.problem_split'}=~/yes/) {
$startminipage = '\begin{minipage}{\textwidth}';
}
- my $name= &Apache::lonxml::get_param('name',$parstack,$safeeval);
- if ($name eq '') {
- $name=&Apache::lonnet::EXT('resource.title');
- if ($name eq 'con_lost') { $name = ''; }
- }
- $Apache::lonhomework::name=$name;
my $id = $Apache::inputtags::part;
my $weight = &Apache::lonnet::EXT("resource.$id.weight");
my $allkeys=&Apache::lonnet::metadata($ENV{'request.uri'},'keys');
@@ -450,9 +484,9 @@ sub start_problem {
print $temp_file "$duedate\n";
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;
+ $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;
+ $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 {
@@ -460,7 +494,7 @@ sub start_problem {
}
} 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;
+ $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 \\\\\\\\';
@@ -545,6 +579,7 @@ sub end_problem {
@Apache::inputtags::response=();
$result=&Apache::response::mandatory_part_meta;
}
+ $result.=&Apache::response::meta_part_order();
} elsif ($target eq 'edit') {
&Apache::lonxml::debug("in end_problem with $target, edit");
$result = &problem_edit_footer();
@@ -553,10 +588,8 @@ sub end_problem {
if ($ENV{'request.state'} eq 'construct' && $target eq 'web') {
&Apache::inputtags::check_for_duplicate_ids();
}
- undef(%Apache::lonhomework::history);
- undef(%Apache::lonhomework::results);
- undef($Apache::inputtags::part);
- undef($Apache::lonhomework::parsing_a_problem);
+
+ &reset_problem_globals('problem');
return $result;
}
@@ -565,7 +598,7 @@ sub end_problem {
sub start_library {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my ($result,$head_tag_start,$body_tag_start,$form_tag_start);
-
+ if ($$tagstack[0] eq 'library') { &init_problem_globals('library') };
if ($target eq 'edit') {
($result,$head_tag_start,$body_tag_start,$form_tag_start)=
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);
@@ -599,6 +632,7 @@ sub end_library {
$ENV{'request.state'} eq "construct") {
$result.=''.&Apache::lonxml::xmlend();
}
+ if ($$tagstack[0] eq 'library') { &reset_problem_globals('library') };
return $result;
}
@@ -627,14 +661,14 @@ sub end_definetag {
}
sub start_block {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result;
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
$target eq 'tex' || $target eq 'analyze') {
my $code = $token->[2]->{'condition'};
- if ($code) {
+ if (defined($code)) {
if (!$Apache::lonxml::default_homework_loaded) {
&Apache::lonxml::default_homework_load($safeeval);
}
@@ -644,7 +678,7 @@ sub start_block {
$result='1';
}
if ( ! $result ) {
- my $skip=&Apache::lonxml::get_all_text("/block",$parser);
+ my $skip=&Apache::lonxml::get_all_text("/block",$parser,$style);
&Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");
}
$result='';
@@ -671,18 +705,38 @@ sub end_block {
}
sub start_languageblock {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result;
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
$target eq 'tex' || $target eq 'analyze') {
- &Apache::lonxml::startredirection();
+ 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'; }
+ }
+ }
+ if ( ! $result ) {
+ my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser,
+ $style);
+ &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");
+ }
+ $result='';
} elsif ($target eq 'edit') {
$result .=&Apache::edit::tag_start($target,$token);
- $result .=&Apache::edit::text_arg('Include Language:','include',
+ $result .=&Apache::edit::text_arg(&mt('Include Language:'),'include',
$token,40);
- $result .=&Apache::edit::text_arg('Exclude Language:','exclude',
+ $result .=&Apache::edit::text_arg(&mt('Exclude Language:'),'exclude',
$token,40);
$result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
} elsif ($target eq 'modified') {
@@ -697,38 +751,14 @@ sub start_languageblock {
sub end_languageblock {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $result;
-
- if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
- $target eq 'tex' || $target eq 'analyze') {
- my $text=&Apache::lonxml::endredirection();
- my $include= &Apache::lonxml::get_param('include',$parstack,$safeeval);
- my $exclude= &Apache::lonxml::get_param('exclude',$parstack,$safeeval);
- 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'; }
- }
- }
- if ( ! $result ) {
- $result='';
- } else {
- $result=$text;
- }
- } elsif ($target eq "edit") {
+ if ($target eq "edit") {
$result.= &Apache::edit::tag_end($target,$token,'');
}
return $result;
}
sub start_instructorcomment {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result;
@@ -736,7 +766,8 @@ sub start_instructorcomment {
$target eq 'tex' || $target eq 'analyze') {
$result=($ENV{'request.role'}=~/^(in|cc|au|ca|li)/);
if ( ! $result ) {
- my $skip=&Apache::lonxml::get_all_text("/instructorcomment",$parser);
+ my $skip=&Apache::lonxml::get_all_text("/instructorcomment",
+ $parser,$style);
&Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");
}
$result='';
@@ -778,7 +809,7 @@ sub start_while {
}
} elsif ($target eq 'edit') {
$result .=&Apache::edit::tag_start($target,$token);
- $result .=&Apache::edit::text_arg('Test Condition:','condition',
+ $result .=&Apache::edit::text_arg(&mt('Test Condition:'),'condition',
$token,40);
$result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
} elsif ($target eq 'modified') {
@@ -810,7 +841,7 @@ sub end_while {
$return = &Apache::run::run($code,$safeeval);
}
if ($error) {
- &Apache::lonxml::error('
Code ran too long. It ran for more than '.$Apache::lonnet::perlvar{'lonScriptTimeout'}.' 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$gt; on line').' '.$line.'
');
}
} elsif ($target eq "edit") {
$result.= &Apache::edit::tag_end($target,$token,'');
@@ -914,6 +945,8 @@ sub start_part {
$Apache::lonhomework::problemstatus=
&Apache::lonnet::EXT("resource.$id.problemstatus");
my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part);
+ my $expression='$external::part=\''.$Apache::inputtags::part.'\';';
+ &Apache::run::run($expression,$safeeval);
if ($target eq 'meta') {
return &Apache::response::mandatory_part_meta;
@@ -934,12 +967,12 @@ sub start_part {
( $status eq 'INVALID_ACCESS')) {
my $bodytext=&Apache::lonxml::get_all_text("/part",$parser);
if ( $target eq "web" ) {
- $result=" Part is not open to be viewed. It $accessmsg ";
+ $result=" ".&mt('Part is not open to be viewed. It')." $accessmsg ";
} elsif ( $target eq 'tex' ) {
if (not $ENV{'form.problem_split'}=~/yes/) {
- $result="\\end{minipage}\\vskip 0 mm Part is not open to be viewed. It $accessmsg \\\\\\begin{minipage}{\\textwidth}";
+ $result="\\end{minipage}\\vskip 0 mm ".&mt('Part is not open to be viewed. It')." $accessmsg \\\\\\begin{minipage}{\\textwidth}";
} else {
- $result="\\vskip 0 mm Part is not open to be viewed. It $accessmsg \\\\";
+ $result="\\vskip 0 mm ".&mt('Part is not open to be viewed. It')." $accessmsg \\\\";
}
}
} else {
@@ -1073,8 +1106,8 @@ sub end_startouttext {
if ($target eq 'edit') {
$text=&Apache::lonxml::get_all_text("endouttext",$parser);
- $result.=&Apache::edit::start_table($token)."
".
@@ -1133,7 +1166,7 @@ sub start_simpleeditbutton {
my $url=$ENV{'REQUEST_URI'};
$url=~s/\?.*$//;
$result='
'.
- 'Simple Problem Editor - Note: it can take up to 10 minutes for changes to take effect for all users.'.
+ ''.&mt('Simple Problem Editor').' - '.&mt('Note: it can take up to 10 minutes for changes to take effect for all users.').
&Apache::loncommon::help_open_topic('Caching').'