Diff for /loncom/homework/structuretags.pm between versions 1.77 and 1.95

version 1.77, 2002/01/23 14:36:19 version 1.95, 2002/05/24 21:57:38
Line 34  package Apache::structuretags; Line 34  package Apache::structuretags;
 use strict;  use strict;
 use Apache::lonnet;  use Apache::lonnet;
   
 sub 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'));
 #  &Apache::lonxml::register_insert('problem','',('part','postanswerdate','preduedate'))  #  &Apache::lonxml::register_insert('problem','',('part','postanswerdate','preduedate'))
 }  }
Line 67  sub end_tex { Line 67  sub end_tex {
   
 sub page_start {  sub page_start {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   my $result=&Apache::londefdef::start_html($target,$token,$tagstack,$parstack,$parser,$safeeval);    my %found;
   my $head_tag_start='<head>'.&Apache::lonxml::registerurl();    foreach my $taginside ($tagstack) {
   my $body_tag_start='<body onLoad="'.&Apache::lonxml::loadevents().'" '.      foreach my $taglookedfor ('html','body','form') {
   'onUnload="'.&Apache::lonxml::unloadevents().'" ';        if ($taginside =~ /^$taglookedfor$/i) { $found{$taglookedfor} = 1; }
   my $background=&Apache::lonxml::get_param('background',$parstack,$safeeval);      }
   if ($background) {    }
     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=  
                                         $background;    my $result;
     $body_tag_start.='background="'.$background.'" ';    my $head_tag_start;
   } else {    if (!defined($found{'html'})) {
     my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack,$safeeval);      $result=&Apache::londefdef::start_html($target,$token,$tagstack,$parstack,
     if ($bgcolor) {     $parser,$safeeval);
       $body_tag_start.='bgcolor="'.$bgcolor.'" ';      $head_tag_start='<head>'.&Apache::lonxml::registerurl(undef,$target);
     }
     my $body_tag_start;
     if (!defined($found{'body'})) {
       $body_tag_start='<body onLoad="'.&Apache::lonxml::loadevents().'" '.
         'onUnload="'.&Apache::lonxml::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 {      } else {
       $body_tag_start.='bgcolor="#ffffff"';        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.='>';
   }    }
   $body_tag_start.='>';  
   return ($result,$head_tag_start,$body_tag_start);    return ($result,$head_tag_start,$body_tag_start);
 }  }
   
Line 135  permanent record is left in the system.< Line 150  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 147  ENDCHECKOUT Line 161  ENDCHECKOUT
 sub start_problem {  sub start_problem {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   
     # 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[-1]);
       return '';
     }
 #intialize globals  #intialize globals
   $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 242  sub start_problem { Line 266  sub start_problem {
        $rndseed.'" />         $rndseed.'" />
              <input type="submit" name="changerandseed" value="Change" />               <input type="submit" name="changerandseed" value="Change" />
              <input type="submit" name="resetdata" value="Reset Submissions" />               <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 />';               <hr />';
  }   }
  # if we are viewing someone else preserve that info   # if we are viewing someone else preserve that info
Line 274  sub start_problem { Line 301  sub start_problem {
     $result=$token->[4];      $result=$token->[4];
     $result.=&Apache::edit::handle_insert();      $result.=&Apache::edit::handle_insert();
   } elsif ($target eq 'tex') {    } elsif ($target eq 'tex') {
       $result .= '\begin{document}\noindent\textbf{Problem.}\newline';        $result .= '\begin{document} ';
   } 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 287  sub end_problem { Line 314  sub end_problem {
   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' ) {
     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' && $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);        $result.= &Apache::inputtags::gradestatus($Apache::inputtags::part);
Line 302  sub end_problem { Line 329  sub end_problem {
        ) {         ) {
       if ($status eq 'CAN_ANSWER') {        if ($status eq 'CAN_ANSWER') {
  $result.="</form></body>\n";    $result.="</form></body>\n"; 
       } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {        } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' ||
          $status eq 'UNCHECKEDOUT' ) {
  $result.="</body>\n";   $result.="</body>\n";
       }        }
       $result.=&Apache::lonxml::xmlend();        $result.=&Apache::lonxml::xmlend();
Line 319  sub end_problem { Line 347  sub end_problem {
     &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='<br /><input type="submit" name="submit" value="Submit Changes" />';
   } elsif ($target eq 'tex') {    } elsif ($target eq 'tex') {
       $result .= '\end{document}';        $result .= '\vskip 0.5mm\noindent\makebox[9.0cm][b]{\hrulefill}\end{document}';
   }    }
   return $result;    return $result;
 }  }
Line 415  sub end_while { Line 443  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)=@_;
     my $result;
   if ($target eq 'answer' || $target eq 'grade' || $target eq 'web') {    if ($target eq 'answer' || $target eq 'grade' || $target eq 'web') {
     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);
Line 439  sub start_randomlist { Line 468  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 465  sub shuffle { Line 505  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 477  sub start_part { Line 523  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 486  sub start_part { Line 532  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 585  sub end_startouttext { Line 637  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.77  
changed lines
  Added in v.1.95


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