Diff for /loncom/homework/structuretags.pm between versions 1.182 and 1.198

version 1.182, 2003/06/12 22:19:33 version 1.198, 2003/07/17 18:42:13
Line 38  use Apache::File(); Line 38  use Apache::File();
 use Apache::lonmenu;  use Apache::lonmenu;
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext'));      &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext',
   'simpleeditbutton','definetag'));
 }  }
   
 sub start_web {  sub start_web {
Line 56  sub end_web { Line 57  sub end_web {
   
 sub start_tex {  sub start_tex {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     if (!($target eq 'tex' || $target eq 'edit' || $target eq 'modified' ||      my $result='';
       if (!($target eq 'edit' || $target eq 'modified' ||
   $target eq 'answer' || $target eq 'grade' || $target eq 'meta' )) {    $target eq 'answer' || $target eq 'grade' || $target eq 'meta' )) {
  &Apache::lonxml::debug("tex 1");   &Apache::lonxml::debug("tex 1");
  my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser);   my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser);
       } elsif ($target eq 'tex') {
    $result=&Apache::lonxml::get_all_text("/tex",$parser);
     }      }
     return '';      return $result;;
 }  }
   
 sub end_tex {  sub end_tex {
Line 149  sub setup_rndseed { Line 153  sub setup_rndseed {
  }   }
  if ($ENV{'form.resetdata'} eq 'New Problem Variation' ||   if ($ENV{'form.resetdata'} eq 'New Problem Variation' ||
     $ENV{'form.newrandomization'} eq 'New Randomization') {      $ENV{'form.newrandomization'} eq 'New Randomization') {
     $rndseed=time;      srand(time);
     if ($rndseed eq $ENV{'form.rndseed'}) {      $rndseed=int(rand(2100000000));
  srand($rndseed);  
  $rndseed=int(rand(1000000000));  
     }  
     $ENV{'form.rndseed'}=$rndseed;      $ENV{'form.rndseed'}=$rndseed;
     delete($ENV{'form.resetdata'});      delete($ENV{'form.resetdata'});
     delete($ENV{'form.newrandomization'});      delete($ENV{'form.newrandomization'});
  }   }
    if (defined($rndseed) && $rndseed ne int($rndseed)) {
      $rndseed=join(',',&Math::Random::random_seed_from_phrase($rndseed));
           }
  &Apache::lonxml::debug("Setting rndseed to $rndseed");   &Apache::lonxml::debug("Setting rndseed to $rndseed");
  &Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval);   &Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval);
     }      }
Line 266  ENDCHECKOUT Line 270  ENDCHECKOUT
 sub start_problem {  sub start_problem {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   
     $Apache::lonhomework::parsing_a_problem=1;      if ( $Apache::inputtags::part ne '' ||
     # meta is called from lonpublisher, which doesn't uses the normal   $Apache::lonhomework::parsing_a_problem) {
     # lonhomework method of parsing the file which means that inputtags    &Apache::lonxml::error('Only one <problem> allowed in a .problem file');
     # won't get reset   #my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser);
     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 '';   return '';
     }      }
   
       $Apache::lonhomework::parsing_a_problem=1;
 #initialize globals  #initialize globals
     $Apache::inputtags::part='0';      $Apache::inputtags::part='0';
     @Apache::inputtags::partlist=('0');      @Apache::inputtags::partlist=('0');
Line 348  sub start_problem { Line 351  sub start_problem {
     '<input type="submit" name="resetdata"      '<input type="submit" name="resetdata"
                              value="New Problem Variation" />'.                               value="New Problem Variation" />'.
     '<input type="hidden" name="username"      '<input type="hidden" name="username"
                              value="'.$ENV{'form.username'}.'" />';                               value="'.$ENV{'form.username'}.'" /> <br />';
  }   }
  ($status,$accessmsg) = &Apache::lonhomework::check_access('0');   ($status,$accessmsg) = &Apache::lonhomework::check_access('0');
  push (@Apache::inputtags::status,$status);   push (@Apache::inputtags::status,$status);
Line 391  sub start_problem { Line 394  sub start_problem {
               $body_tag_start \n $form_tag_start".                $body_tag_start \n $form_tag_start".
   '<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.= &problem_web_to_edit_header($rndseed);      $result.= &problem_web_to_edit_header($ENV{'form.rndseed'});
  }   }
  # 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 407  sub start_problem { Line 410  sub start_problem {
     }      }
  } elsif ($target eq 'tex') {   } elsif ($target eq 'tex') {
     my $startminipage = '';      my $startminipage = '';
     if ($ENV{'form.problem_split'} ne 'yes') {      if (not $ENV{'form.problem_split'}=~/yes/) {
  $startminipage = '\begin{minipage}{\textwidth}';   $startminipage = '\begin{minipage}{\textwidth}';
     }      }
     my $name= &Apache::lonxml::get_param('name',$parstack,$safeeval);      my $name= &Apache::lonxml::get_param('name',$parstack,$safeeval);
Line 505  sub end_problem { Line 508  sub end_problem {
  }   }
     } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' ||      } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' ||
      $status eq 'UNCHECKEDOUT' ) {       $status eq 'UNCHECKEDOUT' ) {
  if ($target ne 'tex') {   if ($target ne 'tex' &&
       $ENV{'form.answer_output_mode'} ne 'tex') {
     $result.="</body>\n";      $result.="</body>\n";
  }   }
     }      }
Line 513  sub end_problem { Line 517  sub end_problem {
  $result.=&Apache::lonxml::xmlend();   $result.=&Apache::lonxml::xmlend();
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $endminipage = '';   my $endminipage = '';
  if ($ENV{'form.problem_split'} ne 'yes') {   if (not $ENV{'form.problem_split'}=~/yes/) {
     $endminipage = '\end{minipage}';      $endminipage = '\end{minipage}';
  }   }
  $result .= '\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}';   $result .= '\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}';
Line 595  sub end_library { Line 599  sub end_library {
     return $result;      return $result;
 }  }
   
   sub start_definetag {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   
       my $result;
   
       my $name = $token->[2]->{'name'};
       my $skip=&Apache::lonxml::get_all_text("/definetag",$parser);
       if ($name=~/^\//) {
    $result=
    '<br /><table bgcolor="#FFBBBB"><tr><th>END <tt>'.$name.'</tt></th></tr>';
       } else {
    $result=
    '<br /><table bgcolor="#BBFFBB"><tr><th>BEGIN <tt>'.$name.'</tt></th></tr>';
       }
       $skip=~s/\</\&lt\;/gs;
       $skip=~s/\>/\&gt\;/gs;
       $result.='<tr><td><pre>'.$skip.'</pre></td></tr></table>';
       return $result;
   }
   
   sub end_definetag {
       return '';
   }
   
 sub start_block {  sub start_block {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   
Line 646  sub start_languageblock { Line 674  sub start_languageblock {
   
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
  $target eq 'tex' || $target eq 'analyze') {   $target eq 'tex' || $target eq 'analyze') {
  my $include = $token->[2]->{'include'};   &Apache::lonxml::startredirection();
  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);  
     &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");  
  }  
  $result='';  
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result .=&Apache::edit::tag_start($target,$token);   $result .=&Apache::edit::tag_start($target,$token);
  $result .=&Apache::edit::text_arg('Include Language:','include',   $result .=&Apache::edit::text_arg('Include Language:','include',
Line 685  sub start_languageblock { Line 694  sub start_languageblock {
 sub end_languageblock {  sub end_languageblock {
     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 '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") {
  $result.= &Apache::edit::tag_end($target,$token,'');   $result.= &Apache::edit::tag_end($target,$token,'');
     }      }
     return $result;      return $result;
Line 896  sub start_part { Line 929  sub start_part {
  if ( $target eq "web" ) {   if ( $target eq "web" ) {
     $result="<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' ) {   } elsif ( $target eq 'tex' ) {
     $result="\\end{minipage}\\vskip 0 mm Part is not open to be viewed. It $accessmsg \\\\\\begin{minipage}{\\textwidth}";      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}";
       } else {
    $result="\\vskip 0 mm Part is not open to be viewed. It $accessmsg \\\\";
       }
  }   }
     } else {      } else {
  if ($target eq 'tex') {   if ($target eq 'tex') {
     $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';      if (not $ENV{'form.problem_split'}=~/yes/) {
    $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';
       }
     my $weight = &Apache::lonnet::EXT("resource.$id.weight");      my $weight = &Apache::lonnet::EXT("resource.$id.weight");
     if ($Apache::lonhomework::type eq 'exam') { $result .= '\fbox{\textit{'.$weight.' pt}}';}      if ($Apache::lonhomework::type eq 'exam') { $result .= '\fbox{\textit{'.$weight.' pt}}';}
  }   }
Line 1033  sub end_startouttext { Line 1072  sub end_startouttext {
                  &Apache::edit::insertlist($target,$token).                   &Apache::edit::insertlist($target,$token).
  &Apache::edit::end_row().   &Apache::edit::end_row().
                  &Apache::edit::start_spanning_row()."\n"                   &Apache::edit::start_spanning_row()."\n"
  .'<table><tr><td>'.   . &Apache::loncommon::helpLatexCheatsheet () .
  &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);   &Apache::edit::editfield($token->[1],$text,"",80,4);
     }      }
     if ($target eq 'modified') {      if ($target eq 'modified') {
Line 1085  sub delete_startouttext { Line 1116  sub delete_startouttext {
     return 1;      return 1;
 }  }
   
   sub start_simpleeditbutton {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my $result='';
       if (($target eq 'web') &&
           (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
           my $url=$ENV{'REQUEST_URI'};
           $url=~s/\?.*$//;
    $result='<table width="100%" bgcolor="#FFFFAA" border="2"><tr><td>'.
                   '<a href="'.$url.'/smpedit">Simple Problem Editor</a> - Note: it can take up to 10 minutes for changes to take effect for all users.'.
   &Apache::loncommon::help_open_topic('Caching').'</td></tr></table><br />';
       }
       return $result;
   }
   
   sub end_simpleeditbutton {
       return '';
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.182  
changed lines
  Added in v.1.198


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