[LON-CAPA-cvs] cvs: loncom /homework structuretags.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Thu, 03 Apr 2003 14:31:59 -0000
This is a MIME encoded message
--albertel1049380319
Content-Type: text/plain
albertel Thu Apr 3 09:31:59 2003 EDT
Modified files:
/loncom/homework structuretags.pm
Log:
- retabinate
--albertel1049380319
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20030403093159.txt"
Index: loncom/homework/structuretags.pm
diff -u loncom/homework/structuretags.pm:1.158 loncom/homework/structuretags.pm:1.159
--- loncom/homework/structuretags.pm:1.158 Wed Apr 2 15:52:25 2003
+++ loncom/homework/structuretags.pm Thu Apr 3 09:31:58 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: structuretags.pm,v 1.158 2003/04/02 20:52:25 sakharuk Exp $
+# $Id: structuretags.pm,v 1.159 2003/04/03 14:31:58 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -38,17 +38,16 @@
use Apache::lonmenu;
BEGIN {
- &Apache::lonxml::register('Apache::structuretags',('block','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext'));
-# &Apache::lonxml::register_insert('problem','',('part','postanswerdate','preduedate'))
+ &Apache::lonxml::register('Apache::structuretags',('block','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext'));
}
sub start_web {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my $bodytext=&Apache::lonxml::get_all_text("/web",$parser);
- if ($target eq 'web') {
- return $bodytext;
- }
- return '';
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my $bodytext=&Apache::lonxml::get_all_text("/web",$parser);
+ if ($target eq 'web') {
+ return $bodytext;
+ }
+ return '';
}
sub end_web {
@@ -56,12 +55,12 @@
}
sub start_tex {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser);
- if ($target eq 'tex') {
- return $bodytext.' ';
- }
- return '';
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser);
+ if ($target eq 'tex') {
+ return $bodytext.' ';
+ }
+ return '';
}
sub end_tex {
@@ -69,85 +68,87 @@
}
sub page_start {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my %found;
- foreach my $taginside ($tagstack) {
- foreach my $taglookedfor ('html','body','form') {
- if ($taginside =~ /^$taglookedfor$/i) { $found{$taglookedfor} = 1; }
- }
- }
-
- my $result;
- my $head_tag_start;
- if (!defined($found{'html'})) {
- $result=&Apache::londefdef::start_html($target,$token,$tagstack,$parstack,
- $parser,$safeeval);
- $head_tag_start='<head>'.&Apache::lonmenu::registerurl(undef,$target);
- }
- my $body_tag_start;
- if (!defined($found{'body'})) {
- $body_tag_start='<body onLoad="'.&Apache::lonmenu::loadevents().'" '.
- 'onUnload="'.&Apache::lonmenu::unloadevents().'" ';
- my $background=&Apache::lonxml::get_param('background',$parstack,$safeeval);
- if ($background) {
- $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
- $background;
- $body_tag_start.='background="'.$background.'" ';
- } else {
- my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack,$safeeval);
- if ($bgcolor) {
- $body_tag_start.='bgcolor="'.$bgcolor.'" ';
- } else {
- $body_tag_start.='bgcolor="#ffffff"';
- }
- }
- $body_tag_start.='>'.&Apache::lonmenu::menubuttons(undef,$target,1);
- if ($target eq 'web' && $ENV{'request.state'} ne 'construct') {
- my ($symb)=&Apache::lonxml::whichuser();
- if ($symb eq '') {
- my $help = &Apache::loncommon::help_open_topic("Ambiguous_Reference");
- $help="Browsing or <a href=\"/adm/ambiguous\">ambiguous</a> reference, submissions ignored $help<br />";
- $body_tag_start.=$help;
- }
- }
- }
- my $form_tag_start;
- if (!defined($found{'form'})) {
- $form_tag_start='<form name="lonhomework" method="POST" action="'.
- $ENV{'request.uri'}.'">';
- }
- return ($result,$head_tag_start,$body_tag_start,$form_tag_start);
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my %found;
+ foreach my $taginside ($tagstack) {
+ foreach my $taglookedfor ('html','body','form') {
+ if ($taginside =~ /^$taglookedfor$/i) {$found{$taglookedfor} = 1;}
+ }
+ }
+
+ my $result;
+ my $head_tag_start;
+ if (!defined($found{'html'})) {
+ $result=&Apache::londefdef::start_html($target,$token,$tagstack,
+ $parstack,$parser,$safeeval);
+ $head_tag_start='<head>'.&Apache::lonmenu::registerurl(undef,$target);
+ }
+ my $body_tag_start;
+ if (!defined($found{'body'})) {
+ $body_tag_start='<body onLoad="'.&Apache::lonmenu::loadevents().'" '.
+ 'onUnload="'.&Apache::lonmenu::unloadevents().'" ';
+ my $background=&Apache::lonxml::get_param('background',$parstack,
+ $safeeval);
+ if ($background) {
+ $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
+ $background;
+ $body_tag_start.='background="'.$background.'" ';
+ } else {
+ my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack,
+ $safeeval);
+ if ($bgcolor) {
+ $body_tag_start.='bgcolor="'.$bgcolor.'" ';
+ } else {
+ $body_tag_start.='bgcolor="#ffffff"';
+ }
+ }
+ $body_tag_start.='>'.&Apache::lonmenu::menubuttons(undef,$target,1);
+ if ($target eq 'web' && $ENV{'request.state'} ne 'construct') {
+ my ($symb)=&Apache::lonxml::whichuser();
+ if ($symb eq '') {
+ my $help = &Apache::loncommon::help_open_topic("Ambiguous_Reference");
+ $help="Browsing or <a href=\"/adm/ambiguous\">ambiguous</a> reference, submissions ignored $help<br />";
+ $body_tag_start.=$help;
+ }
+ }
+ }
+ my $form_tag_start;
+ if (!defined($found{'form'})) {
+ $form_tag_start='<form name="lonhomework" method="POST" action="'.
+ $ENV{'request.uri'}.'">';
+ }
+ return ($result,$head_tag_start,$body_tag_start,$form_tag_start);
}
#use Time::HiRes();
sub get_resource_name {
- my ($parstack,$safeeval)=@_;
- my $name=&Apache::lonnet::gettitle();
- if ($name eq '') {
- $name=&Apache::lonnet::EXT('resource.title');
- if ($name eq 'con_lost') { $name = ''; }
- }
- $Apache::lonhomework::name=$name;
- return $name;
+ my ($parstack,$safeeval)=@_;
+ my $name=&Apache::lonnet::gettitle();
+ if ($name eq '') {
+ $name=&Apache::lonnet::EXT('resource.title');
+ if ($name eq 'con_lost') { $name = ''; }
+ }
+ $Apache::lonhomework::name=$name;
+ return $name;
}
sub setup_rndseed {
- my ($safeeval)=@_;
- my $rndseed;
- if ($ENV{'request.state'} eq "construct") {
- $rndseed=$ENV{'form.rndseed'};
- if (!$rndseed) {
- $rndseed=time;
- $ENV{'form.rndseed'}=$rndseed;
- }
- &Apache::lonxml::debug("Setting rndseed to $rndseed");
- &Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval);
- }
- return $rndseed;
+ my ($safeeval)=@_;
+ my $rndseed;
+ if ($ENV{'request.state'} eq "construct") {
+ $rndseed=$ENV{'form.rndseed'};
+ if (!$rndseed) {
+ $rndseed=time;
+ $ENV{'form.rndseed'}=$rndseed;
+ }
+ &Apache::lonxml::debug("Setting rndseed to $rndseed");
+ &Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval);
+ }
+ return $rndseed;
}
sub problem_edit_header {
- return '<input type="hidden" name="submitted" value="edit" />
+ return '<input type="hidden" name="submitted" value="edit" />
<input type="hidden" name="problemmode" value="Edit" />
<input type="submit" name="problemmode" value="Discard Edits and View" />
<input type="submit" name="problemmode" value="EditXML" />
@@ -158,13 +159,13 @@
}
sub problem_edit_footer {
- return '</td></tr></table><br /><input type="submit" name="submit" value="Submit Changes and Edit" />
+ return '</td></tr></table><br /><input type="submit" name="submit" value="Submit Changes and Edit" />
<input type="submit" name="submit" value="Submit Changes and View" />';
}
sub problem_web_to_edit_header {
- my ($rndseed)=@_;
- my $result.='<input type="hidden" name="problemmode" value="View" />
+ my ($rndseed)=@_;
+ my $result.='<input type="hidden" name="problemmode" value="View" />
<input type="submit" name="problemmode" value="Edit" />
<input type="submit" name="problemmode" value="EditXML" />
Random Seed:<input type="text" name="rndseed" width="10" value="'.
@@ -172,32 +173,32 @@
<input type="submit" name="changerandseed" value="Change" />
<input type="submit" name="resetdata" value="Reset Submissions" />
<input type="checkbox" name="showallfoils" ';
- if (defined($ENV{'form.showallfoils'})) { $result.='checked="on"'; }
- $result.= ' /> Show All Foils
+ if (defined($ENV{'form.showallfoils'})) { $result.='checked="on"'; }
+ $result.= ' /> Show All Foils
<hr />';
- my $numtoanalyze=$ENV{'form.numtoanalyze'};
- if (!$numtoanalyze) { $numtoanalyze=100; }
- $result.= '<input type="submit" name="problemmode" value="Answer Distribution" />
+ my $numtoanalyze=$ENV{'form.numtoanalyze'};
+ if (!$numtoanalyze) { $numtoanalyze=100; }
+ $result.= '<input type="submit" name="problemmode" value="Answer Distribution" />
<input type="text" name="numtoanalyze" value="'.
- $numtoanalyze.'" size="5" /> <hr />';
- return $result;
+ $numtoanalyze.'" size="5" /> <hr />';
+ return $result;
}
sub initialize_storage {
- %Apache::lonhomework::results=();
- my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
- if ($ENV{'request.state'} eq 'construct') {
- %Apache::lonhomework::history=
- &Apache::lonnet::tmprestore($ENV{'request.uri'},'',$domain,$name);
+ %Apache::lonhomework::results=();
+ my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
+ if ($ENV{'request.state'} eq 'construct') {
+ %Apache::lonhomework::history=
+ &Apache::lonnet::tmprestore($ENV{'request.uri'},'',$domain,$name);
+ my ($temp)=keys %Apache::lonhomework::history ;
+ &Apache::lonxml::debug("Return message of $temp");
+ } else {
+ %Apache::lonhomework::history=
+ &Apache::lonnet::restore($symb,$courseid,$domain,$name);
+ }
+ #ignore error conditions
my ($temp)=keys %Apache::lonhomework::history ;
- &Apache::lonxml::debug("Return message of $temp");
- } else {
- %Apache::lonhomework::history=
- &Apache::lonnet::restore($symb,$courseid,$domain,$name);
- }
- #ignore error conditions
- my ($temp)=keys %Apache::lonhomework::history ;
- if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); }
+ if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); }
}
# -------------------------------------------------------------finalize_storage
@@ -205,25 +206,25 @@
# checks form.grade_ for specific values, other wises stores
# to the running users environment
sub finalize_storage {
- my $result;
- my ($temp) = keys %Apache::lonhomework::results;
- if ( $temp ne '' ) {
- my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
- if ($ENV{'request.state'} eq 'construct') {
- $result=&Apache::lonnet::tmpstore(\%Apache::lonhomework::results,
- $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);
+ my $result;
+ my ($temp) = keys %Apache::lonhomework::results;
+ if ( $temp ne '' ) {
+ my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
+ if ($ENV{'request.state'} eq 'construct') {
+ $result=&Apache::lonnet::tmpstore(\%Apache::lonhomework::results,
+ $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);
+ }
}
- }
- return $result;
+ return $result;
}
sub checkout_msg {
-return (<<ENDCHECKOUT);
+ return (<<ENDCHECKOUT);
<h2>The resource needs to be checked out</h2>
As a resource gets checked out, a unique timestamped ID is given to it, and a
permanent record is left in the system.<p />
@@ -239,293 +240,299 @@
}
sub start_problem {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- $Apache::lonhomework::parsing_a_problem=1;
- # meta is called from lonpublisher, which doesn't uses the normal
- # lonhomework method of parsing the file which means that inputtags
- # won't get reset
- if ( $Apache::inputtags::part ne '' && $target != 'meta' ) {
- &Apache::lonxml::error('Only one problem allowed in a .problem file');
- my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser);
- return '';
- }
-#intialize globals
- $Apache::inputtags::part='0';
- @Apache::inputtags::responselist = ();
- @Apache::inputtags::previous=();
- @Apache::inputtags::previous_version=();
- $Apache::structuretags::printanswer='No';
- if ($target ne 'analyze') {
- &initialize_storage();
- if ($target eq 'web') {
- &Apache::lonhomework::showhash(%Apache::lonhomework::history);
+ $Apache::lonhomework::parsing_a_problem=1;
+ # meta is called from lonpublisher, which doesn't uses the normal
+ # lonhomework method of parsing the file which means that inputtags
+ # won't get reset
+ if ( $Apache::inputtags::part ne '' && $target != 'meta' ) {
+ &Apache::lonxml::error('Only one problem allowed in a .problem file');
+ my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser);
+ return '';
}
- $Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type');
- &Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:");
- }
- if ($Apache::lonhomework::type eq '') {
- my $uri=$ENV{'request.uri'};
- if ($uri=~/\.(\w+)$/) {
- $Apache::lonhomework::type=$1;
- &Apache::lonxml::debug("Using type of $1");
- } else {
- $Apache::lonhomework::type='problem';
- &Apache::lonxml::debug("Using default type, problem, :$uri:");
+#intialize globals
+ $Apache::inputtags::part='0';
+ @Apache::inputtags::responselist = ();
+ @Apache::inputtags::previous=();
+ @Apache::inputtags::previous_version=();
+ $Apache::structuretags::printanswer='No';
+ if ($target ne 'analyze') {
+ &initialize_storage();
+ if ($target eq 'web') {
+ &Apache::lonhomework::showhash(%Apache::lonhomework::history);
+ }
+ $Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type');
+ &Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:");
+ }
+ if ($Apache::lonhomework::type eq '') {
+ my $uri=$ENV{'request.uri'};
+ if ($uri=~/\.(\w+)$/) {
+ $Apache::lonhomework::type=$1;
+ &Apache::lonxml::debug("Using type of $1");
+ } else {
+ $Apache::lonhomework::type='problem';
+ &Apache::lonxml::debug("Using default type, problem, :$uri:");
+ }
}
- }
- #added vars to the scripting enviroment
- my $expression='$external::part='.$Apache::inputtags::part.';';
- &Apache::run::run($expression,$safeeval);
- my $status;
- my $accessmsg;
-
- #should get back a <html> 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 'analyze') { my $rndseed=&setup_rndseed($safeeval); }
- if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
- #handle exam checkout
- if ($Apache::lonhomework::type eq 'exam') {
- my $token=$Apache::lonhomework::history{"resource.0.outtoken"};
- if (($ENV{'form.doescheckout'}) && (!$token)) {
- $token=&Apache::lonxml::maketoken();
- $Apache::lonhomework::history{"resource.0.outtoken"}=$token;
- }
- $body_tag_start.=&Apache::lonxml::printtokenheader($target,$token);
- }
-
- #handle rand seed in construction space
- my $rndseed=&setup_rndseed($safeeval);
- ($status,$accessmsg) = &Apache::lonhomework::check_access('0');
- push (@Apache::inputtags::status,$status);
- my $expression='$external::datestatus="'.$status.'";';
- $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.0.solved"}.'";';
+ #added vars to the scripting enviroment
+ my $expression='$external::part='.$Apache::inputtags::part.';';
&Apache::run::run($expression,$safeeval);
- &Apache::lonxml::debug("Got $status");
- if (( $status eq 'CLOSED' ) ||
- ( $status eq 'UNCHECKEDOUT') ||
- ( $status eq 'BANNED') ||
- ( $status eq 'UNAVAILABLE')) {
- my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser);
- if ( $target eq "web" ) {
- $result.= $head_tag_start.'</head>';
- my $msg=$body_tag_start;
- if ($status eq 'UNAVAILABLE') {
- $result.='<h1>Unable to determine if this resource is open due to network problems. Please try again later.</h1>';
- } else {
- $result.='<h1>Not open to be viewed</h1>';
- }
- if ($status eq 'CLOSED') {
- $msg.='The problem '.$accessmsg;
- } elsif ($status eq 'UNCHECKEDOUT') {
- $msg.=&checkout_msg;
- }
- $result.=$msg.'<br />';
- } 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 ';
- } else {
- $result.="Problem is not open to be viewed. It $accessmsg \\vskip 0 mm ";
- }
- }
- } elsif ($target eq 'web') {
- my $name= &get_resource_name($parstack,$safeeval);
- if ($status eq 'CAN_ANSWER') {
- # create a page header and exit
- $result.="$head_tag_start<title>$name</title></head>
- $body_tag_start \n $form_tag_start".
- '<input type="hidden" name="submitted" value="yes" />';
- if ($ENV{'request.state'} eq "construct") {
- $result.= &problem_web_to_edit_header($rndseed);
- }
- # if we are viewing someone else preserve that info
- if (defined $ENV{'form.grade_symb'}) {
- foreach my $field ('symb','courseid','domain','username') {
- $result .= '<input type="hidden" name="grade_'.$field.
- '" value="'.$ENV{"form.grade_$field"}.'" />'."\n";
- }
- }
- } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER'
- || $status eq 'CLOSED' || $status eq 'UNAVALAILABLE') {
- $result.=$head_tag_start.
- "<title>$name</title></head>\n$body_tag_start\n";
- }
- } elsif ($target eq 'tex') {
- 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');
- my @allkeys = split /,/,$allkeys;
- my $allow_print_points = 0;
- foreach my $partial_key (@allkeys) {
- if ($partial_key=~m/weight/) {
- $allow_print_points++;
- }
- }
- 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";
- if (-e $filename) {
- $temp_file = Apache::File->new($filename);
- } else {
- $temp_file = Apache::File->new('>>'.$filename);
+ my $status;
+ my $accessmsg;
+
+ #should get back a <html> 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 'analyze') { my $rndseed=&setup_rndseed($safeeval); }
+ if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
+ $target eq 'tex') {
+ #handle exam checkout
+ if ($Apache::lonhomework::type eq 'exam') {
+ my $token=
+ $Apache::lonhomework::history{"resource.0.outtoken"};
+ if (($ENV{'form.doescheckout'}) && (!$token)) {
+ $token=&Apache::lonxml::maketoken();
+ $Apache::lonhomework::history{"resource.0.outtoken"}=
+ $token;
+ }
+ $body_tag_start.=&Apache::lonxml::printtokenheader($target,$token);
}
- my @due_file_content = <$temp_file>;
- my $due_file_content = $due_file_content[$#due_file_content];
- chomp $due_file_content;
- my $name_of_resourse= &get_resource_name($parstack,$safeeval);
- 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 $duedate=~m/1969/ and $Apache::lonhomework::type ne 'exam') {
- $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$ENV{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent\textit{Due date: '.$duedate.'} \vskip 1 mm\noindent \begin{minipage}{\textwidth}';
+
+ #handle rand seed in construction space
+ my $rndseed=&setup_rndseed($safeeval);
+ ($status,$accessmsg) = &Apache::lonhomework::check_access('0');
+ push (@Apache::inputtags::status,$status);
+ my $expression='$external::datestatus="'.$status.'";';
+ $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.0.solved"}.'";';
+ &Apache::run::run($expression,$safeeval);
+ &Apache::lonxml::debug("Got $status");
+ if (( $status eq 'CLOSED' ) ||
+ ( $status eq 'UNCHECKEDOUT') ||
+ ( $status eq 'BANNED') ||
+ ( $status eq 'UNAVAILABLE')) {
+ my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser);
+ if ( $target eq "web" ) {
+ $result.= $head_tag_start.'</head>';
+ my $msg=$body_tag_start;
+ if ($status eq 'UNAVAILABLE') {
+ $result.='<h1>Unable to determine if this resource is open due to network problems. Please try again later.</h1>';
} else {
- $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$ENV{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent \vskip 1 mm \noindent\begin{minipage}{\textwidth}';
- if ($Apache::lonhomework::type eq 'exam' and $allow_print_points==1) { $result .= '\fbox{\textit{'.$weight.' pt}}';}
+ $result.='<h1>Not open to be viewed</h1>';
+ }
+ if ($status eq 'CLOSED') {
+ $msg.='The problem '.$accessmsg;
+ } elsif ($status eq 'UNCHECKEDOUT') {
+ $msg.=&checkout_msg;
+ }
+ $result.=$msg.'<br />';
+ } 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 ';
+ } else {
+ $result.="Problem is not open to be viewed. It $accessmsg \\vskip 0 mm ";
+ }
+ }
+ } elsif ($target eq 'web') {
+ my $name= &get_resource_name($parstack,$safeeval);
+ if ($status eq 'CAN_ANSWER') {
+ # create a page header and exit
+ $result.="$head_tag_start<title>$name</title></head>
+ $body_tag_start \n $form_tag_start".
+ '<input type="hidden" name="submitted" value="yes" />';
+ if ($ENV{'request.state'} eq "construct") {
+ $result.= &problem_web_to_edit_header($rndseed);
+ }
+ # if we are viewing someone else preserve that info
+ if (defined $ENV{'form.grade_symb'}) {
+ foreach my $field ('symb','courseid','domain','username') {
+ $result .= '<input type="hidden" name="grade_'.$field.
+ '" value="'.$ENV{"form.grade_$field"}.'" />'."\n";
+ }
+ }
+ } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER'
+ || $status eq 'CLOSED' || $status eq 'UNAVALAILABLE') {
+ $result.=$head_tag_start.
+ "<title>$name</title></head>\n$body_tag_start\n";
+ }
+ } elsif ($target eq 'tex') {
+ 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');
+ my @allkeys = split /,/,$allkeys;
+ my $allow_print_points = 0;
+ foreach my $partial_key (@allkeys) {
+ if ($partial_key=~m/weight/) {
+ $allow_print_points++;
}
+ }
+ 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";
+ if (-e $filename) {
+ $temp_file = Apache::File->new($filename);
} else {
- $result .= '\vskip 1mm\textit{Due date: '.$duedate.'} \\\\\\\\';
- }
- } else {
- if (not $ENV{'request.symb'} =~ m/\.page_/) {
- $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$ENV{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent \vskip 1 mm\noindent\begin{minipage}{\textwidth}';
- if (($Apache::lonhomework::type eq 'exam') and ($allow_print_points==1)) { $result .= '\fbox{\textit{'.$weight.' pt}}';}
+ $temp_file = Apache::File->new('>>'.$filename);
+ }
+ my @due_file_content = <$temp_file>;
+ my $due_file_content = $due_file_content[$#due_file_content];
+ chomp $due_file_content;
+ my $name_of_resourse= &get_resource_name($parstack,$safeeval);
+ 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 $duedate=~m/1969/ and $Apache::lonhomework::type ne 'exam') {
+ $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$ENV{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent\textit{Due date: '.$duedate.'} \vskip 1 mm\noindent \begin{minipage}{\textwidth}';
+ } else {
+ $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$ENV{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent \vskip 1 mm \noindent\begin{minipage}{\textwidth}';
+ 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 {
- $result .= '\vskip 1mm \\\\\\\\';
- }
+ if (not $ENV{'request.symb'} =~ m/\.page_/) {
+ $result .= '\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$ENV{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent \vskip 1 mm\noindent\begin{minipage}{\textwidth}';
+ if (($Apache::lonhomework::type eq 'exam') and ($allow_print_points==1)) { $result .= '\fbox{\textit{'.$weight.' pt}}';}
+ } else {
+ $result .= '\vskip 1mm \\\\\\\\';
+ }
+ }
}
+ } elsif ($target eq 'edit') {
+ $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.
+ &problem_edit_header();
+ my $temp=&Apache::edit::insertlist($target,$token);
+ $result.=$temp;
+ } elsif ($target eq 'modified') {
+ $result=$token->[4];
+ $result.=&Apache::edit::handle_insert();
+ } else {
+ # page_start returned a starting result, delete it if we don't need it
+ $result = '';
}
- } elsif ($target eq 'edit') {
- $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.
- &problem_edit_header();
- my $temp=&Apache::edit::insertlist($target,$token);
- $result.=$temp;
- } elsif ($target eq 'modified') {
- $result=$token->[4];
- $result.=&Apache::edit::handle_insert();
- } else {
- # page_start returned a starting result, delete it if we don't need it
- $result = '';
- }
- return $result;
+ return $result;
}
sub end_problem {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my $result='';
- my $status=$Apache::inputtags::status['-1'];
- if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || $target eq 'tex') {
- if ( $target eq 'grade' && $Apache::inputtags::part eq '0' && $status eq 'CAN_ANSWER' ) {
- # if part is zero, no <part>s existed, so we need to the grading
- &Apache::inputtags::grade;
- } elsif ( ($target eq 'web' || $target eq 'tex') && $Apache::inputtags::part eq '0' &&
- $status ne 'UNCHECKEDOUT') {
- # if part is zero, no <part>s existed, so we need show the current
- # grading status
- my $gradestatus = &Apache::inputtags::gradestatus($Apache::inputtags::part,$target);
- $result.= $gradestatus;
- }
- if (
- (($target eq 'web') && ($ENV{'request.state'} ne 'construct')) ||
- ($target eq 'answer') || ($target eq 'tex')
- ) {
- if ($status eq 'CAN_ANSWER') {
- if ($target ne 'tex') {
- $result.="</form></body>\n";
- }
- } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' ||
- $status eq 'UNCHECKEDOUT' ) {
- if ($target ne 'tex') {
- $result.="</body>\n";
- }
- }
- if ($target eq 'web') {
- $result.=&Apache::lonxml::xmlend();
- } elsif ($target eq 'tex') {
- $result .= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}';
- if (not $ENV{'request.symb'} =~ m/\.page_/) {
- $result .= '\end{minipage}\end{document} ';
- } else {
- $result .= '';
- }
- }
- }
- if ($target eq 'grade') {
- &Apache::lonhomework::showhash(%Apache::lonhomework::results);
- &finalize_storage();
- }
- if ($target eq 'answer' && ($ENV{'request.state'} eq 'construct') ) {
- $result.='</html>'; #normally we get it from xmlend, but in CSTR
- # we always show answer mode too.
- }
- } elsif ($target eq 'meta') {
- if ($Apache::inputtags::part eq '0') {
- $result=&Apache::response::mandatory_part_meta;
- }
- } elsif ($target eq 'edit') {
- &Apache::lonxml::debug("in end_problem with $target, edit");
- $result = &problem_edit_footer();
- }
-
- undef(%Apache::lonhomework::history);
- undef(%Apache::lonhomework::results);
- undef($Apache::inputtags::part);
- undef($Apache::lonhomework::parsing_a_problem);
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my $result='';
+ my $status=$Apache::inputtags::status['-1'];
+ if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
+ $target eq 'tex') {
+ if ( $target eq 'grade' && $Apache::inputtags::part eq '0' &&
+ $status eq 'CAN_ANSWER' ) {
+ # if part is zero, no <part>s existed, so we need to the grading
+ &Apache::inputtags::grade;
+ } elsif ( ($target eq 'web' || $target eq 'tex') &&
+ $Apache::inputtags::part eq '0' &&
+ $status ne 'UNCHECKEDOUT') {
+ # if part is zero, no <part>s existed, so we need show the current
+ # grading status
+ my $gradestatus = &Apache::inputtags::gradestatus($Apache::inputtags::part,$target);
+ $result.= $gradestatus;
+ }
+ if (
+ (($target eq 'web') && ($ENV{'request.state'} ne 'construct')) ||
+ ($target eq 'answer') || ($target eq 'tex')
+ ) {
+ if ($status eq 'CAN_ANSWER') {
+ if ($target ne 'tex') {
+ $result.="</form></body>\n";
+ }
+ } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' ||
+ $status eq 'UNCHECKEDOUT' ) {
+ if ($target ne 'tex') {
+ $result.="</body>\n";
+ }
+ }
+ if ($target eq 'web') {
+ $result.=&Apache::lonxml::xmlend();
+ } elsif ($target eq 'tex') {
+ $result .= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}';
+ if (not $ENV{'request.symb'} =~ m/\.page_/) {
+ $result .= '\end{minipage}\end{document} ';
+ } else {
+ $result .= '';
+ }
+ }
+ }
+ if ($target eq 'grade') {
+ &Apache::lonhomework::showhash(%Apache::lonhomework::results);
+ &finalize_storage();
+ }
+ if ($target eq 'answer' && ($ENV{'request.state'} eq 'construct') ) {
+ $result.='</html>'; #normally we get it from xmlend, but in CSTR
+ # we always show answer mode too.
+ }
+ } elsif ($target eq 'meta') {
+ if ($Apache::inputtags::part eq '0') {
+ $result=&Apache::response::mandatory_part_meta;
+ }
+ } elsif ($target eq 'edit') {
+ &Apache::lonxml::debug("in end_problem with $target, edit");
+ $result = &problem_edit_footer();
+ }
- return $result;
+ undef(%Apache::lonhomework::history);
+ undef(%Apache::lonhomework::results);
+ undef($Apache::inputtags::part);
+ undef($Apache::lonhomework::parsing_a_problem);
+
+ return $result;
}
sub start_library {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my ($result,$head_tag_start,$body_tag_start,$form_tag_start);
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my ($result,$head_tag_start,$body_tag_start,$form_tag_start);
- if ($target eq 'edit') {
- ($result,$head_tag_start,$body_tag_start,$form_tag_start)=
- &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);
- $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.
- &problem_edit_header();
- my $temp=&Apache::edit::insertlist($target,$token);
- $result.=$temp;
- } elsif ($target eq 'modified') {
- $result=$token->[4];
- $result.=&Apache::edit::handle_insert();
- } elsif ($target eq 'web' && $$tagstack[0] ne 'problem' &&
- $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);
- my $rndseed=&setup_rndseed($safeeval);
- $result.="$head_tag_start<title>$name</title></head>
+ if ($target eq 'edit') {
+ ($result,$head_tag_start,$body_tag_start,$form_tag_start)=
+ &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);
+ $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.
+ &problem_edit_header();
+ my $temp=&Apache::edit::insertlist($target,$token);
+ $result.=$temp;
+ } elsif ($target eq 'modified') {
+ $result=$token->[4];
+ $result.=&Apache::edit::handle_insert();
+ } elsif ($target eq 'web' && $$tagstack[0] ne 'problem' &&
+ $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);
+ my $rndseed=&setup_rndseed($safeeval);
+ $result.="$head_tag_start<title>$name</title></head>
$body_tag_start \n $form_tag_start".
- '<input type="hidden" name="submitted" value="yes" />';
- $result.=&problem_web_to_edit_header($rndseed);
- }
- return $result;
+ '<input type="hidden" name="submitted" value="yes" />';
+ $result.=&problem_web_to_edit_header($rndseed);
+ }
+ return $result;
}
sub end_library {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my $result='';
- if ($target eq 'edit') {
- $result=&problem_edit_footer();
- } elsif ($target eq 'web' && $$tagstack[0] ne 'problem' &&
- $ENV{'request.state'} eq "construct") {
- $result.='</form></body>'.&Apache::lonxml::xmlend();
- }
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my $result='';
+ if ($target eq 'edit') {
+ $result=&problem_edit_footer();
+ } elsif ($target eq 'web' && $$tagstack[0] ne 'problem' &&
+ $ENV{'request.state'} eq "construct") {
+ $result.='</form></body>'.&Apache::lonxml::xmlend();
+ }
+ return $result;
}
sub start_block {
@@ -535,10 +542,8 @@
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
$target eq 'tex' || $target eq 'analyze') {
- my $code = @$parstack[$#$parstack];
+ my $code = $token->[2]->{'condition'};
if ($code) {
- $code =~ s/\"//g;
- $code .=';return $condition;';
if (!$Apache::lonxml::default_homework_loaded) {
&Apache::lonxml::default_homework_load($safeeval);
}
@@ -566,38 +571,39 @@
}
sub end_block {
- return '';
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my @result=('','');
+ if ($target eq "edit" || $target eq 'modified') { @result=('','no'); }
+ return (@result);
}
sub start_while {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+
+ my $code = $token->[2]->{'condition'};
- my $code = @$parstack[$#$parstack];
- $code =~ s/\"//g;
- $code .=';return $condition;';
-
- push( @Apache::structuretags::whileconds, $code);
- if (!$Apache::lonxml::default_homework_loaded) {
- &Apache::lonxml::default_homework_load($safeeval);
- }
- my $result = &Apache::run::run($code,$safeeval);
- my $bodytext=$$parser[$#$parser]->get_text("/while");
- push( @Apache::structuretags::whilebody, $bodytext);
- if ( $result ) {
- &Apache::lonxml::newparser($parser,\$bodytext);
- }
- return "";
+ push( @Apache::structuretags::whileconds, $code);
+ if (!$Apache::lonxml::default_homework_loaded) {
+ &Apache::lonxml::default_homework_load($safeeval);
+ }
+ my $result = &Apache::run::run($code,$safeeval);
+ my $bodytext=$$parser[$#$parser]->get_text("/while");
+ push( @Apache::structuretags::whilebody, $bodytext);
+ if ( $result ) {
+ &Apache::lonxml::newparser($parser,\$bodytext);
+ }
+ return "";
}
sub end_while {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my $code = pop @Apache::structuretags::whileconds;
- my $bodytext = pop @Apache::structuretags::whilebody;
- my $result = &Apache::run::run($code,$safeeval);
- if ( $result ) {
- &Apache::lonxml::newparser($parser,\$bodytext);
- }
- return "";
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my $code = pop @Apache::structuretags::whileconds;
+ my $bodytext = pop @Apache::structuretags::whilebody;
+ my $result = &Apache::run::run($code,$safeeval);
+ if ( $result ) {
+ &Apache::lonxml::newparser($parser,\$bodytext);
+ }
+ return "";
}
# <randomlist show="1">
@@ -607,283 +613,295 @@
# ...
# </randomlist>
sub start_randomlist {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my $result;
- if ($target eq 'answer' || $target eq 'grade' || $target eq 'web' ||
- $target eq 'tex' || $target eq 'analyze') {
- my $body= &Apache::lonxml::get_all_text("/randomlist",$parser);
- my $b_parser= HTML::TokeParser->new(\$body);
- my $b_tok;
- my @randomlist;
- my $list_item;
- while($b_tok = $b_parser->get_token() ) {
- if($b_tok->[0] eq 'S') { # start tag
- # get content of the tag until matching end tag
- # get all text upto the matching tag
- # and push the content into @randomlist
- $list_item = &Apache::lonxml::get_all_text('/'.$b_tok->[1],$b_parser);
- $list_item = "$b_tok->[4]"."$list_item"."</$b_tok->[1]>";
- push(@randomlist,$list_item);
- # print "<br /><b>START-TAG $b_tok->[1], $b_tok->[4], $list_item</b>";
- }
- if($b_tok->[0] eq 'T') { # text
- # what to do with text in between tags?
- # print "<b>TEXT $b_tok->[1]</b><br />";
- }
- # if($b_tok->[0] eq 'E') { # end tag, should not happen
- # print "<b>END-TAG $b_tok->[1]</b><br />";
- # }
- }
- my @idx_arr = (0 .. $#randomlist);
- &Apache::structuretags::shuffle(\@idx_arr);
- my $bodytext = '';
- my $show=$#randomlist;
- my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval);
- $showarg--;
- if ( ($showarg >= 0) && ($showarg < $show) ) { $show = $showarg; }
- for(0 .. $show) {
- $bodytext .= "$randomlist[ $idx_arr[$_] ]";
- }
- &Apache::lonxml::newparser($parser,\$bodytext);
- } elsif ($target eq 'edit' ) {
- $result .= &Apache::edit::tag_start($target,$token);
- $result .= &Apache::edit::text_arg('Maximum Tags to Show:','show',$token,5);
- $result .= &Apache::edit::end_row().&Apache::edit::start_spanning_row();
- } elsif ($target eq 'modified' ) {
- my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,
- 'show');
- if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
- }
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my $result;
+ if ($target eq 'answer' || $target eq 'grade' || $target eq 'web' ||
+ $target eq 'tex' || $target eq 'analyze') {
+ my $body= &Apache::lonxml::get_all_text("/randomlist",$parser);
+ my $b_parser= HTML::TokeParser->new(\$body);
+ my $b_tok;
+ my @randomlist;
+ my $list_item;
+ while($b_tok = $b_parser->get_token() ) {
+ if($b_tok->[0] eq 'S') { # start tag
+ # get content of the tag until matching end tag
+ # get all text upto the matching tag
+ # and push the content into @randomlist
+ $list_item = &Apache::lonxml::get_all_text('/'.$b_tok->[1],
+ $b_parser);
+ $list_item = "$b_tok->[4]"."$list_item"."</$b_tok->[1]>";
+ push(@randomlist,$list_item);
+ # print "<br /><b>START-TAG $b_tok->[1], $b_tok->[4],
+ # $list_item</b>";
+ }
+ if($b_tok->[0] eq 'T') { # text
+ # what to do with text in between tags?
+ # print "<b>TEXT $b_tok->[1]</b><br />";
+ }
+ # if($b_tok->[0] eq 'E') { # end tag, should not happen
+ # print "<b>END-TAG $b_tok->[1]</b><br />";
+ # }
+ }
+ my @idx_arr = (0 .. $#randomlist);
+ &Apache::structuretags::shuffle(\@idx_arr);
+ my $bodytext = '';
+ my $show=$#randomlist;
+ my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval);
+ $showarg--;
+ if ( ($showarg >= 0) && ($showarg < $show) ) { $show = $showarg; }
+ for(0 .. $show) {
+ $bodytext .= "$randomlist[ $idx_arr[$_] ]";
+ }
+ &Apache::lonxml::newparser($parser,\$bodytext);
+ } elsif ($target eq 'edit' ) {
+ $result .=&Apache::edit::tag_start($target,$token);
+ $result .=&Apache::edit::text_arg('Maximum Tags to Show:','show',
+ $token,5);
+ $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
+ } elsif ($target eq 'modified' ) {
+ my $constructtag=&Apache::edit::get_new_args($token,$parstack,
+ $safeeval,'show');
+ if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
+ }
+ return $result;
}
sub shuffle {
my $a=shift;
my $i;
if (defined(@$a)) {
- &Apache::response::setrandomnumber();
- for($i=@$a;--$i;) {
- my $j=int(&Math::Random::random_uniform() * ($i+1));
- next if $i == $j;
- @$a[$i,$j] = @$a[$j,$i];
- }
+ &Apache::response::setrandomnumber();
+ for($i=@$a;--$i;) {
+ my $j=int(&Math::Random::random_uniform() * ($i+1));
+ next if $i == $j;
+ @$a[$i,$j] = @$a[$j,$i];
+ }
}
}
sub end_randomlist {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my $result;
- if ($target eq 'edit' ) {
- $result=&Apache::edit::tag_end($target,$token,'End Randomly Parsed Block');
- }
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my $result;
+ if ($target eq 'edit' ) {
+ $result=&Apache::edit::tag_end($target,$token,
+ 'End Randomly Parsed Block');
+ }
+ return $result;
}
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; }
- $Apache::inputtags::part=$id;
- @Apache::inputtags::responselist = ();
- @Apache::inputtags::previous=();
- @Apache::inputtags::previous_version=();
- my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part);
-
- if ($target eq 'meta') {
- return &Apache::response::mandatory_part_meta;
- } elsif ($target eq 'web' || $target eq 'grade' ||
- $target eq 'answer' || $target eq 'tex') {
- if ($hidden) {
- my $bodytext=&Apache::lonxml::get_all_text("/part",$parser);
- } else {
- my ($status,$accessmsg) = &Apache::lonhomework::check_access($id);
- push (@Apache::inputtags::status,$status);
- my $expression='$external::datestatus="'.$status.'";';
- $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$id.solved"}.'";';
- &Apache::run::run($expression,$safeeval);
- if ( $status eq 'CLOSED' ) {
- my $bodytext=&Apache::lonxml::get_all_text("/part",$parser);
- if ( $target eq "web" ) {
- $result="<br />Part is not open to be viewed. It $accessmsg<br />";
- } elsif ( $target eq 'tex' ) {
- $result="\\end{minipage}\\vskip 0 mm Part is not open to be viewed. It $accessmsg \\\\\\begin{minipage}{\\textwidth}";
- }
- } else {
- if ($target eq 'tex') {
- $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';
- my $weight = &Apache::lonnet::EXT("resource.$id.weight");
- if ($Apache::lonhomework::type eq 'exam') { $result .= '\fbox{\textit{'.$weight.' pt}}';}
- }
- }
- }
- } elsif ($target eq 'edit') {
- $result.=&Apache::edit::tag_start($target,$token);
- $result.=&Apache::edit::text_arg('Part ID:','id',$token).
- &Apache::loncommon::help_open_topic("Part_Tag_Edit_Help").
- &Apache::edit::end_row().&Apache::edit::start_spanning_row();
-
- } elsif ($target eq 'modified') {
- my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,
- 'id');
- if ($constructtag) {
- $result = &Apache::edit::rebuild_tag($token);
- $result.=&Apache::edit::handle_insert();
- }
- }
- return $result;
+ 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; }
+ $Apache::inputtags::part=$id;
+ @Apache::inputtags::responselist = ();
+ @Apache::inputtags::previous=();
+ @Apache::inputtags::previous_version=();
+ my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part);
+
+ if ($target eq 'meta') {
+ return &Apache::response::mandatory_part_meta;
+ } elsif ($target eq 'web' || $target eq 'grade' ||
+ $target eq 'answer' || $target eq 'tex') {
+ if ($hidden) {
+ my $bodytext=&Apache::lonxml::get_all_text("/part",$parser);
+ } else {
+ my ($status,$accessmsg) = &Apache::lonhomework::check_access($id);
+ push (@Apache::inputtags::status,$status);
+ my $expression='$external::datestatus="'.$status.'";';
+ $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$id.solved"}.'";';
+ &Apache::run::run($expression,$safeeval);
+ if ( $status eq 'CLOSED' ) {
+ my $bodytext=&Apache::lonxml::get_all_text("/part",$parser);
+ if ( $target eq "web" ) {
+ $result="<br />Part is not open to be viewed. It $accessmsg<br />";
+ } elsif ( $target eq 'tex' ) {
+ $result="\\end{minipage}\\vskip 0 mm Part is not open to be viewed. It $accessmsg \\\\\\begin{minipage}{\\textwidth}";
+ }
+ } else {
+ if ($target eq 'tex') {
+ $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';
+ my $weight = &Apache::lonnet::EXT("resource.$id.weight");
+ if ($Apache::lonhomework::type eq 'exam') { $result .= '\fbox{\textit{'.$weight.' pt}}';}
+ }
+ }
+ }
+ } elsif ($target eq 'edit') {
+ $result.=&Apache::edit::tag_start($target,$token);
+ $result.=&Apache::edit::text_arg('Part ID:','id',$token).
+ &Apache::loncommon::help_open_topic("Part_Tag_Edit_Help").
+ &Apache::edit::end_row().&Apache::edit::start_spanning_row();
+ } elsif ($target eq 'modified') {
+ my $constructtag=&Apache::edit::get_new_args($token,$parstack,
+ $safeeval,'id');
+ if ($constructtag) {
+ $result = &Apache::edit::rebuild_tag($token);
+ $result.=&Apache::edit::handle_insert();
+ }
+ }
+ return $result;
}
sub end_part {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- &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 $result='';
- if ( $target eq 'meta' ) {
- $result='';
- } elsif ( $target eq 'grade' && $status eq 'CAN_ANSWER' && !$hidden) {
- $result=&Apache::inputtags::grade;
- } elsif (($target eq 'web' || $target eq 'tex') && !$hidden ) {
- my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part,
- $target);
- if ($Apache::lonhomework::type eq 'exam') {$gradestatus='';}
- $result=$gradestatus;
- }
- pop @Apache::inputtags::status;
- $Apache::inputtags::part='';
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ &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 $result='';
+ if ( $target eq 'meta' ) {
+ $result='';
+ } elsif ( $target eq 'grade' && $status eq 'CAN_ANSWER' && !$hidden) {
+ $result=&Apache::inputtags::grade;
+ } elsif (($target eq 'web' || $target eq 'tex') && !$hidden ) {
+ my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part,
+ $target);
+ if ($Apache::lonhomework::type eq 'exam') {$gradestatus='';}
+ $result=$gradestatus;
+ }
+ pop @Apache::inputtags::status;
+ $Apache::inputtags::part='';
+ return $result;
}
sub start_preduedate {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
- if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' &&
- $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER' &&
- $Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {
- &Apache::lonxml::get_all_text("/preduedate",$parser);
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
+ if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' &&
+ $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER' &&
+ $Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {
+ &Apache::lonxml::get_all_text("/preduedate",$parser);
+ }
}
- }
- return '';
+ return '';
}
sub end_preduedate {
- return '';
+ return '';
}
sub start_postanswerdate {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') {
- if ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {
- &Apache::lonxml::get_all_text("/postanswerdate",$parser);
- }
- } elsif ($target eq 'tex') {
- return '\vskip 0 mm \noindent';
- }
- return '';
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') {
+ if ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {
+ &Apache::lonxml::get_all_text("/postanswerdate",$parser);
+ }
+ } elsif ($target eq 'tex') {
+ return '\vskip 0 mm \noindent';
+ }
+ return '';
}
sub end_postanswerdate {
- return '';
+ return '';
}
sub start_notsolved {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
- my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
- &Apache::lonxml::debug("not solved has :$gradestatus:");
- if ($gradestatus =~ /^correct/) {
- &Apache::lonxml::debug("skipping");
- &Apache::lonxml::get_all_text("/notsolved",$parser);
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
+ $target eq 'tex') {
+ my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
+ &Apache::lonxml::debug("not solved has :$gradestatus:");
+ if ($gradestatus =~ /^correct/) {
+ &Apache::lonxml::debug("skipping");
+ &Apache::lonxml::get_all_text("/notsolved",$parser);
+ }
}
- }
- return '';
+ return '';
}
sub end_notsolved {
- return '';
+ return '';
}
sub start_solved {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
- my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
- if ($gradestatus !~ /^correct/) {
- &Apache::lonxml::get_all_text("/solved",$parser);
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
+ $target eq 'tex') {
+ my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
+ if ($gradestatus !~ /^correct/) {
+ &Apache::lonxml::get_all_text("/solved",$parser);
+ }
}
- }
- return '';
+ return '';
}
sub end_solved {
- return '';
+ return '';
}
sub start_startouttext {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my @result=(''.'');
- if ($target eq 'edit' || $target eq 'modified' ) { @result=('','no'); }
- return (@result);
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my @result=(''.'');
+ if ($target eq 'edit' || $target eq 'modified' ) { @result=('','no'); }
+ return (@result);
}
+
sub end_startouttext {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my $result='';
- my $text='';
-
- if ($target eq 'edit') {
- $text=&Apache::lonxml::get_all_text("endouttext",$parser);
- $result.=&Apache::edit::start_table($token)."<tr><td>Text Block</td>
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my $result='';
+ my $text='';
+
+ if ($target eq 'edit') {
+ $text=&Apache::lonxml::get_all_text("endouttext",$parser);
+ $result.=&Apache::edit::start_table($token)."<tr><td>Text Block</td>
<td>Delete:".
- &Apache::edit::deletelist($target,$token)
- ."</td>
+ &Apache::edit::deletelist($target,$token)
+ ."</td>
<td>".
- &Apache::edit::insertlist($target,$token).
- &Apache::edit::end_row().&Apache::edit::start_spanning_row()."\n"
- .'<table><tr><td>'.
- &Apache::loncommon::help_open_topic("Greek_Symbols",'Greek Symbols',
- undef,undef,600)
- .'</td><td>'.
- &Apache::loncommon::help_open_topic("Other_Symbols",'Other Symbols',
- undef,undef,600)
- .'</td></tr></table>'.
- &Apache::edit::editfield($token->[1],$text,"",80,4);
- }
- if ($target eq 'modified') {
- $text=&Apache::lonxml::get_all_text("endouttext",$parser);
- $result='<startouttext />'.&Apache::edit::modifiedfield();
- }
- if ($target eq 'tex') {
- $result .= '\noindent ';
- }
- return $result;
+ &Apache::edit::insertlist($target,$token).
+ &Apache::edit::end_row().
+ &Apache::edit::start_spanning_row()."\n"
+ .'<table><tr><td>'.
+ &Apache::loncommon::help_open_topic("Greek_Symbols",
+ 'Greek Symbols',
+ undef,undef,600)
+ .'</td><td>'.
+ &Apache::loncommon::help_open_topic("Other_Symbols",
+ 'Other Symbols',
+ undef,undef,600)
+ .'</td></tr></table>'.
+ &Apache::edit::editfield($token->[1],$text,"",80,4);
+ }
+ if ($target eq 'modified') {
+ $text=&Apache::lonxml::get_all_text("endouttext",$parser);
+ $result='<startouttext />'.&Apache::edit::modifiedfield();
+ }
+ if ($target eq 'tex') {
+ $result .= '\noindent ';
+ }
+ return $result;
}
+
sub start_endouttext {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my $result='';
- if ($target eq "edit" ) { $result="</td></tr>".&Apache::edit::end_table()."\n"; }
- if ($target eq "modified") {
- $result='<endouttext />'.
- &Apache::edit::handle_insertafter('startouttext'); }
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my $result='';
+ if ($target eq "edit" ) { $result="</td></tr>".&Apache::edit::end_table()."\n"; }
+ if ($target eq "modified") {
+ $result='<endouttext />'.
+ &Apache::edit::handle_insertafter('startouttext'); }
+ return $result;
}
+
sub end_endouttext {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my @result=('','');
- if ($target eq "edit" || $target eq 'modified') { @result=('','no'); }
- return (@result);
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my @result=('','');
+ if ($target eq "edit" || $target eq 'modified') { @result=('','no'); }
+ return (@result);
}
+
sub delete_startouttext {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
-# my $text=&Apache::lonxml::get_all_text("endouttext",$parser);
- my $text=$$parser['-1']->get_text("/endouttext");
- my $ntoken=$$parser['-1']->get_token();
- &Apache::lonxml::debug("Deleting :$text: and :$ntoken->[0]:$ntoken->[1]:$ntoken->[2]: for startouttext");
- &Apache::lonxml::end_tag($tagstack,$parstack,$ntoken);
- # Deleting 2 parallel tag pairs, but we need the numbers later to look like
- # they did the last time round
- &Apache::lonxml::increasedepth($ntoken);
- &Apache::lonxml::decreasedepth($ntoken);
- return 1;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ # my $text=&Apache::lonxml::get_all_text("endouttext",$parser);
+ my $text=$$parser['-1']->get_text("/endouttext");
+ my $ntoken=$$parser['-1']->get_token();
+ &Apache::lonxml::debug("Deleting :$text: and :$ntoken->[0]:$ntoken->[1]:$ntoken->[2]: for startouttext");
+ &Apache::lonxml::end_tag($tagstack,$parstack,$ntoken);
+ # Deleting 2 parallel tag pairs, but we need the numbers later to look like
+ # they did the last time round
+ &Apache::lonxml::increasedepth($ntoken);
+ &Apache::lonxml::decreasedepth($ntoken);
+ return 1;
}
1;
--albertel1049380319--