Diff for /loncom/homework/structuretags.pm between versions 1.81 and 1.114

version 1.81, 2002/02/08 20:58:39 version 1.114, 2002/09/16 20:40:38
Line 33  package Apache::structuretags; Line 33  package Apache::structuretags;
   
 use strict;  use strict;
 use Apache::lonnet;  use Apache::lonnet;
   use Apache::File();
   
 BEGIN {  BEGIN {
   &Apache::lonxml::register('Apache::structuretags',('block','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext'));    &Apache::lonxml::register('Apache::structuretags',('block','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext'));
Line 56  sub start_tex { Line 57  sub start_tex {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   my $bodytext=&Apache::lonxml::get_all_text("/tex",$$parser[$#$parser]);    my $bodytext=&Apache::lonxml::get_all_text("/tex",$$parser[$#$parser]);
   if ($target eq 'tex') {    if ($target eq 'tex') {
     return $bodytext        return $bodytext.' ';
   }    }
   return '';    return '';
 }  }
Line 79  sub page_start { Line 80  sub page_start {
   if (!defined($found{'html'})) {    if (!defined($found{'html'})) {
     $result=&Apache::londefdef::start_html($target,$token,$tagstack,$parstack,      $result=&Apache::londefdef::start_html($target,$token,$tagstack,$parstack,
    $parser,$safeeval);     $parser,$safeeval);
     $head_tag_start='<head>'.&Apache::lonxml::registerurl();      $head_tag_start='<head>'.&Apache::lonxml::registerurl(undef,$target);
   }    }
   my $body_tag_start;    my $body_tag_start;
   if (!defined($found{'body'})) {    if (!defined($found{'body'})) {
Line 100  sub page_start { Line 101  sub page_start {
     }      }
     $body_tag_start.='>';      $body_tag_start.='>';
   }    }
   return ($result,$head_tag_start,$body_tag_start);    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);
   }
   
   sub get_resource_name {
     my ($parstack,$safeeval)=@_;
     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;
     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::run::run('$external::randomseed='.$rndseed.';',$safeeval);
     }
     return $rndseed;
   }
   
   sub problem_edit_header {
     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" />
          <input type="submit" name="Undo" value="undo" /> <hr />
          <input type="submit" name="submit" value="Submit Changes" />
          <input type="submit" name="submit" value="Submit Changes and View" /><br />
         ';
   }
   
   sub problem_edit_footer {
     return '<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" />
                <input type="submit" name="problemmode" value="Edit" />
                <input type="submit" name="problemmode" value="EditXML" />
                Random Seed:<input type="text" name="rndseed" width="10" value="'.
          $rndseed.'" />
                <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
                <hr />';
 }  }
   
 sub initialize_storage {  sub initialize_storage {
Line 150  permanent record is left in the system.< Line 212  permanent record is left in the system.<
 <font color=red>  <font color=red>
 Checking out resources is subject to course policies, and may exclude future  Checking out resources is subject to course policies, and may exclude future
 credit even if done erroneously.<p />  credit even if done erroneously.<p />
 </font>    </font>
 <form method=post>  <form name="checkout" method="POST" action="$ENV{'request.uri'}">
 <input type=button name="doescheckout"   <input type="hidden" name="doescheckout" value="yes" />
 value="Check out Exam for Viewing"   <input type="button" name="checkoutbutton" value="Check out Exam for Viewing" onClick="javascript:if (confirm('Check out Exam?')) { document.checkout.submit(); }" />
 onClick="if (confirm('Check out Exam?')) { this.form.submit(); }" />  
 </form>  </form>
 ENDCHECKOUT  ENDCHECKOUT
 }  }
Line 174  sub start_problem { Line 235  sub start_problem {
   $Apache::inputtags::part='0';    $Apache::inputtags::part='0';
   @Apache::inputtags::responselist = ();    @Apache::inputtags::responselist = ();
   @Apache::inputtags::previous=();    @Apache::inputtags::previous=();
   &initialize_storage();    if ($target ne 'analyze') {
   if ($target eq 'web') {      &initialize_storage();
     &Apache::lonhomework::showhash(%Apache::lonhomework::history);      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:");
   }    }
   $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 '') {    if ($Apache::lonhomework::type eq '') {
     my $uri=$ENV{'request.uri'};      my $uri=$ENV{'request.uri'};
     if ($uri=~/\.(\w+)$/) {      if ($uri=~/\.(\w+)$/) {
Line 198  sub start_problem { Line 261  sub start_problem {
   my $accessmsg;    my $accessmsg;
   
   #should get back a <html> or the neccesary stuff to start XML/MathML    #should get back a <html> or the neccesary stuff to start XML/MathML
   my ($result,$head_tag_start,$body_tag_start)=    my ($result,$head_tag_start,$body_tag_start,$form_tag_start)=
     &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);      &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);
     if ($target eq 'tex' and $ENV{'request.symb'} =~ m/\.page_/) { $result = '';}
   
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
   if ($target eq 'web' || $target eq 'grade' || $target eq 'answer') {  
     #handle exam checkout      #handle exam checkout
     if ($Apache::lonhomework::type eq 'exam') {      if ($Apache::lonhomework::type eq 'exam') {
       my $token=$Apache::lonhomework::history{"resource.0.outtoken"};        my $token=$Apache::lonhomework::history{"resource.0.outtoken"};
Line 214  sub start_problem { Line 277  sub start_problem {
     }      }
   
     #handle rand seed in construction space      #handle rand seed in construction space
     my $rndseed;      my $rndseed=&setup_rndseed($safeeval);
     if ($ENV{'request.state'} eq "construct") {  
       $rndseed=$ENV{'form.rndseed'};  
       if (!$rndseed) {  
  $rndseed=time;  
  $ENV{'form.rndseed'}=$rndseed;  
       }  
       &Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval);  
     }  
     ($status,$accessmsg) = &Apache::lonhomework::check_access('0');      ($status,$accessmsg) = &Apache::lonhomework::check_access('0');
     push (@Apache::inputtags::status,$status);      push (@Apache::inputtags::status,$status);
     my $expression='$external::datestatus="'.$status.'";';      my $expression='$external::datestatus="'.$status.'";';
Line 244  sub start_problem { Line 299  sub start_problem {
  $result.=$msg.'<br />';   $result.=$msg.'<br />';
       }        }
     } elsif ($target eq 'web') {      } elsif ($target eq 'web') {
       my $name= &Apache::lonxml::get_param('name',$parstack,$safeeval);        my $name= &get_resource_name($parstack,$safeeval);
       if ($name eq '') {   
  $name=&Apache::lonnet::EXT('resource.title');  
  if ($name eq 'con_lost') { $name = ''; }  
       }  
       $Apache::lonhomework::name=$name;  
       if ($status eq 'CAN_ANSWER') {        if ($status eq 'CAN_ANSWER') {
  # create a page header and exit   # create a page header and exit
  $result.="$head_tag_start<title>$name</title></head>\n   $result.="$head_tag_start<title>$name</title></head>
               $body_tag_start\n                $body_tag_start \n $form_tag_start".
               <form name=\"lonhomework\" method=\"POST\" action=\"".$ENV{'request.uri'}."\">".  
  '<input type="hidden" name="submitted" value="yes" />';   '<input type="hidden" name="submitted" value="yes" />';
  if ($ENV{'request.state'} eq "construct") {   if ($ENV{'request.state'} eq "construct") {
   $result.=    $result.= &problem_web_to_edit_header($rndseed);
     '<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="'.  
        $rndseed.'" />  
              <input type="submit" name="changerandseed" value="Change" />  
              <input type="submit" name="resetdata" value="Reset Submissions" />  
              <hr />';  
  }   }
  # if we are viewing someone else preserve that info   # if we are viewing someone else preserve that info
  if (defined $ENV{'form.grade_symb'}) {   if (defined $ENV{'form.grade_symb'}) {
Line 279  sub start_problem { Line 320  sub start_problem {
  $result.=$head_tag_start.   $result.=$head_tag_start.
   "<title>$name</title></head>\n$body_tag_start\n";    "<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 $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 @due_file_content = <$temp_file>;
    my $due_file_content = $due_file_content[$#due_file_content];
           chomp $due_file_content;
           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/) {
       $result .= '\begin{document} \noindent\textit{Due date: '.$duedate.'} \vskip 1 mm';
    } else {
       $result .= '\begin{document} \noindent \vskip 1 mm';
    }
       } else {
    $result .= '\parbox{\minipagewidth}{\vskip 1mm\textit{Due date: '.$duedate.'} \\\\\\\\';
       } 
    } else {
       if (not $ENV{'request.symb'} =~ m/\.page_/) {
    $result .= '\begin{document} \noindent \vskip 1 mm';
       } else {
    $result .= '\parbox{\minipagewidth}{\vskip 1mm \\\\\\\\';
       } 
    }
     }      }
   } elsif ($target eq 'edit') {    } elsif ($target eq 'edit') {
     $result.=$head_tag_start."</head>".$body_tag_start.      $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.
       '<form name="lonhomework" method="POST" action="'.        &problem_edit_header();
  $ENV{'request.uri'}.'">  
        <input type="hidden" name="submitted" value="edit" />  
        <input type="hidden" name="problemmode" value="Edit" />  
        <input type="submit" name="problemmode" value="View" />  
        <input type="submit" name="problemmode" value="EditXML" />  
        <input type="submit" name="Undo" value="undo" /> <hr />  
        <input type="submit" name="submit" value="Submit Changes" /><br />  
       ';  
     my $temp=&Apache::edit::insertlist($target,$token);      my $temp=&Apache::edit::insertlist($target,$token);
     $result.=$temp;      $result.=$temp;
   } elsif ($target eq 'modified') {    } elsif ($target eq 'modified') {
     $result=$token->[4];      $result=$token->[4];
     $result.=&Apache::edit::handle_insert();      $result.=&Apache::edit::handle_insert();
   } elsif ($target eq 'tex') {  
       $result .= '\begin{document}\noindent\textbf{Problem.}\newline';  
   } else {    } else {
     # page_start returned a starting result, delete it if we don't need it      # page_start returned a starting result, delete it if we don't need it
     $result = '';      $result = '';
Line 309  sub end_problem { Line 379  sub end_problem {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   my $result='';    my $result='';
   my $status=$Apache::inputtags::status['-1'];    my $status=$Apache::inputtags::status['-1'];
   if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ) {    if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || $target eq 'tex') {
     if ( $target eq 'grade' && $Apache::inputtags::part eq '0' &&      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        # if part is zero, no <part>s existed, so we need to the grading
       &Apache::inputtags::grade;        &Apache::inputtags::grade;
     } elsif ( $target eq 'web' && $Apache::inputtags::part eq '0') {      } 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         # if part is zero, no <part>s existed, so we need show the current 
       # grading status        # grading status
       $result.= &Apache::inputtags::gradestatus($Apache::inputtags::part);        my $gradestatus = &Apache::inputtags::gradestatus($Apache::inputtags::part);
         #FIXME this is ugly we should just generate tex in inputtags
         if ($target eq 'tex') { $gradestatus=&html_to_tex($gradestatus); }
         $result.= $gradestatus;
     }      }
     if (      if (
  ($target eq 'web' && ($ENV{'request.state'} ne 'construct')) ||   (($target eq 'web') && ($ENV{'request.state'} ne 'construct')) ||
  ($target eq 'answer')   ($target eq 'answer') || ($target eq 'tex')
        ) {         ) {
       if ($status eq 'CAN_ANSWER') {        if ($status eq 'CAN_ANSWER') {
  $result.="</form></body>\n";     if ($target ne 'tex') {
       } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {        $result.="</form></body>\n";
  $result.="</body>\n";    } 
         } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' ||
          $status eq 'UNCHECKEDOUT' ) {
     if ($target ne 'tex') {
         $result.="</body>\n";
     }
         }
         if ($target ne 'tex') {
     $result.=&Apache::lonxml::xmlend();
         } else {
         $result .= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}';
         if (not $ENV{'request.symb'} =~ m/\.page_/) {
     $result .= '\end{document} ';
         } else {
     $result .= '} ';
         }
       }        }
       $result.=&Apache::lonxml::xmlend();  
     }      }
     if ($target eq 'grade') {       if ($target eq 'grade') { 
       &Apache::lonhomework::showhash(%Apache::lonhomework::results);        &Apache::lonhomework::showhash(%Apache::lonhomework::results);
Line 340  sub end_problem { Line 427  sub end_problem {
     }      }
   } elsif ($target eq 'edit') {    } elsif ($target eq 'edit') {
     &Apache::lonxml::debug("in end_problem with $target, edit");      &Apache::lonxml::debug("in end_problem with $target, edit");
     $result='<br /><input type="submit" name="submit" value="Submit Changes" />';      $result = &problem_edit_footer();
   } elsif ($target eq 'tex') {    } 
       $result .= '\end{document}';  
   }  
   return $result;    return $result;
 }  }
   
   #FIXME I am ugly shoot me
   sub html_to_tex {
     my ($string)=@_;
     $string =~ s/<table>//;
     $string =~ s/<\/table>//;
     $string =~ s/<tr([^>]*)>//g;
     $string =~ s/<\/tr>//g;
     $string =~ s/<td([^>]*)>//g;
     $string =~ s/<\/td>//g;
     $string =~ s/<b>/\\textbf{/g;
     $string =~ s/<\/b>/}/g;
     $string =~ s/<br \/>/\\vskip 0 mm /g;
     $string =~ s/<input([^>]*)>//g;
     return $string;
   }
   
 sub start_library {  sub start_library {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   my ($result,$head_tag_start,$body_tag_start)=    my ($result,$head_tag_start,$body_tag_start,$form_tag_start);
     &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);  
   if ($target eq 'edit') {    if ($target eq 'edit') {
     $result.=$head_tag_start."</head>".$body_tag_start.      ($result,$head_tag_start,$body_tag_start,$form_tag_start)=
       '<form name="lonhomework" method="POST" action="'.$ENV{'request.uri'}.'">        &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);
        <input type="hidden" name="submitted" value="edit" />      $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.
        <input type="hidden" name="problemmode" value="Edit" />        &problem_edit_header();
        <input type="submit" name="problemmode" value="View" />  
        <input type="submit" name="Undo" value="undo" /> <hr />  
       ';  
     my $temp=&Apache::edit::insertlist($target,$token);      my $temp=&Apache::edit::insertlist($target,$token);
     $result.=$temp;      $result.=$temp;
     return $result;    } elsif ($target eq 'modified') {
   }  
   if ($target eq 'modified') {  
     $result=$token->[4];      $result=$token->[4];
     $result.=&Apache::edit::handle_insert();      $result.=&Apache::edit::handle_insert();
     return $result;    } 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 '';    return $result;
 }  }
   
 sub end_library {  sub end_library {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   my $result='';    my $result='';
   if ($target eq 'edit') {    if ($target eq 'edit') {
     $result='<br /><input type="submit" name="submit" value="Submit Changes" />';      $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;    return $result;
 }  }
Line 383  sub end_library { Line 491  sub end_library {
 sub start_block {  sub start_block {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   
   if ($target eq 'web' || $target eq 'grade' || $target eq 'answer') {    if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
     my $code = @$parstack[$#$parstack];      my $code = @$parstack[$#$parstack];
     $code =~ s/\"//g;      $code =~ s/\"//g;
     $code .=';return $condition;';      $code .=';return $condition;';
Line 430  sub end_while { Line 538  sub end_while {
   return "";    return "";
 }  }
   
 # <randomlist>   # <randomlist show="1"> 
 #  <tag1>..</tag1>  #  <tag1>..</tag1>
 #  <tag2>..</tag2>  #  <tag2>..</tag2>
 #  <tag3>..</tag3>  #  <tag3>..</tag3>
Line 438  sub end_while { Line 546  sub end_while {
 # </randomlist>  # </randomlist>
 sub start_randomlist {  sub start_randomlist {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   if ($target eq 'answer' || $target eq 'grade' || $target eq 'web') {    my $result;
     if ($target eq 'answer' || $target eq 'grade' || $target eq 'web' ||
         $target eq 'tex') {
     my $body= &Apache::lonxml::get_all_text("/randomlist",$$parser[$#$parser]);      my $body= &Apache::lonxml::get_all_text("/randomlist",$$parser[$#$parser]);
     my $b_parser= HTML::TokeParser->new(\$body);      my $b_parser= HTML::TokeParser->new(\$body);
     my $b_tok;      my $b_tok;
Line 462  sub start_randomlist { Line 572  sub start_randomlist {
       #  print "<b>END-TAG $b_tok->[1]</b><br />";        #  print "<b>END-TAG $b_tok->[1]</b><br />";
       # }        # }
     }      }
   
     my @idx_arr = (0 .. $#randomlist);      my @idx_arr = (0 .. $#randomlist);
     &Apache::structuretags::shuffle(\@idx_arr);      &Apache::structuretags::shuffle(\@idx_arr);
     my $bodytext = '';      my $bodytext = '';
     for(0 .. $#randomlist) {      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[$_] ]";        $bodytext .= "$randomlist[ $idx_arr[$_] ]";
     }      }
     &Apache::lonxml::newparser($parser,\$bodytext);      &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 "";    return $result;
 }  }
   
 sub shuffle {  sub shuffle {
Line 488  sub shuffle { Line 609  sub shuffle {
 }  }
   
 sub end_randomlist {  sub end_randomlist {
   return '';    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 {  sub start_part {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result='';
   my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval);    my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval);
   if ($id eq '') { $id = $Apache::lonxml::curdepth; }    if ($id eq '') { $id = $Apache::lonxml::curdepth; }
   $Apache::inputtags::part=$id;    $Apache::inputtags::part=$id;
Line 500  sub start_part { Line 627  sub start_part {
   @Apache::inputtags::previous=();    @Apache::inputtags::previous=();
   if ($target eq 'meta') {    if ($target eq 'meta') {
     return &Apache::response::mandatory_part_meta;      return &Apache::response::mandatory_part_meta;
   } elsif ($target eq 'web' || $target eq 'grade' || $target eq 'answer') {    } elsif ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
     my ($status,$accessmsg) = &Apache::lonhomework::check_access($id);      my ($status,$accessmsg) = &Apache::lonhomework::check_access($id);
     push (@Apache::inputtags::status,$status);      push (@Apache::inputtags::status,$status);
     my $expression='$external::datestatus="'.$status.'";';      my $expression='$external::datestatus="'.$status.'";';
Line 509  sub start_part { Line 636  sub start_part {
     if ( $status eq 'CLOSED' ) {      if ( $status eq 'CLOSED' ) {
       my $bodytext=&Apache::lonxml::get_all_text("/part",$$parser[$#$parser]);        my $bodytext=&Apache::lonxml::get_all_text("/part",$$parser[$#$parser]);
       if ( $target eq "web" ) {        if ( $target eq "web" ) {
  return "<br />Part is not open to be viewed. It $accessmsg<br />";   $result="<br />Part is not open to be viewed. It $accessmsg<br />";
         } elsif ( $target eq 'tex' ) {
    $result="\\vskip 0 mm Part is not open to be viewed. It $accessmsg \\\\";
         }
       } else {
         if ($target eq 'tex') {
    $result='\vskip 0 mm';
       }        }
     }      }
   }    }
   return '';    return $result;
 }  }
   
 sub end_part {  sub end_part {
Line 525  sub end_part { Line 658  sub end_part {
   if ( $target eq 'grade' && $status eq 'CAN_ANSWER') {    if ( $target eq 'grade' && $status eq 'CAN_ANSWER') {
     return &Apache::inputtags::grade;      return &Apache::inputtags::grade;
   }    }
   if ($target eq 'web') {    if ($target eq 'web' || $target eq 'tex' ) {
     return &Apache::inputtags::gradestatus($Apache::inputtags::part);      my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part);
       #FIXME this is ugly we should just generate tex in inputtags
       if ($target eq 'tex') { $gradestatus=&html_to_tex($gradestatus); }
       return $gradestatus;
   }    }
   return '';    return '';
 }  }
   
 sub start_preduedate {  sub start_preduedate {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   if ($target eq 'web' || $target eq 'grade' || $target eq 'answer') {    if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
     if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' &&      if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' &&
  $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER' ) {   $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER' ) {
       &Apache::lonxml::get_all_text("/preduedate",$$parser[$#$parser]);        &Apache::lonxml::get_all_text("/preduedate",$$parser[$#$parser]);
Line 548  sub end_preduedate { Line 684  sub end_preduedate {
   
 sub start_postanswerdate {  sub start_postanswerdate {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   if ($target eq 'web' || $target eq 'grade') {    if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') {
     if ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {      if ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {
       &Apache::lonxml::get_all_text("/postanswerdate",$$parser[$#$parser]);        &Apache::lonxml::get_all_text("/postanswerdate",$$parser[$#$parser]);
     }      }
     } elsif ($target eq 'tex') {
         return '\vskip 0 mm \noindent';
   }    }
   return '';    return '';
 }  }
Line 562  sub end_postanswerdate { Line 700  sub end_postanswerdate {
   
 sub start_notsolved {  sub start_notsolved {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   if ($target eq 'web' || $target eq 'grade' || $target eq 'answer') {    if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
     my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};      my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
     &Apache::lonxml::debug("not solved has :$gradestatus:");      &Apache::lonxml::debug("not solved has :$gradestatus:");
     if ($gradestatus =~ /^correct/) {      if ($gradestatus =~ /^correct/) {
Line 579  sub end_notsolved { Line 717  sub end_notsolved {
   
 sub start_solved {  sub start_solved {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   if ($target eq 'web' || $target eq 'grade' || $target eq 'answer') {    if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {
     my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};      my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
     if ($gradestatus !~ /^correct/) {      if ($gradestatus !~ /^correct/) {
       &Apache::lonxml::get_all_text("/solved",$$parser[$#$parser]);        &Apache::lonxml::get_all_text("/solved",$$parser[$#$parser]);
Line 608  sub end_startouttext { Line 746  sub end_startouttext {
     $result.=&Apache::edit::start_table($token)."<tr><td>Text Block</td>      $result.=&Apache::edit::start_table($token)."<tr><td>Text Block</td>
 <td>Delete:".  <td>Delete:".
   &Apache::edit::deletelist($target,$token)    &Apache::edit::deletelist($target,$token)
   ."</td>      ."</td>
 <td>".  <td>".
   &Apache::edit::insertlist($target,$token).    &Apache::edit::insertlist($target,$token).
     "</td>      &Apache::edit::end_row().&Apache::edit::start_spanning_row()."\n".
 </tr><tr><td colspan=\"3\">\n".        &Apache::edit::editfield($token->[1],$text,"",50,4);
  &Apache::edit::editfield($token->[1],$text,"",50,4);  
   }    }
   if ($target eq 'modified') {    if ($target eq 'modified') {
     $text=&Apache::lonxml::get_all_text("endouttext",$$parser['-1']);      $text=&Apache::lonxml::get_all_text("endouttext",$$parser['-1']);
     $result='<startouttext />'.&Apache::edit::modifiedfield();      $result='<startouttext />'.&Apache::edit::modifiedfield();
   }    }
     if ($target eq 'tex') {
         $result .= '\noindent ';
     }
   return $result;    return $result;
 }  }
 sub start_endouttext {  sub start_endouttext {

Removed from v.1.81  
changed lines
  Added in v.1.114


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>