Diff for /loncom/homework/structuretags.pm between versions 1.145 and 1.158

version 1.145, 2003/02/07 21:50:12 version 1.158, 2003/04/02 20:52:25
Line 35  package Apache::structuretags; Line 35  package Apache::structuretags;
 use strict;  use strict;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::File();  use Apache::File();
   use Apache::lonmenu;
   
 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 43  BEGIN { Line 44  BEGIN {
   
 sub start_web {  sub start_web {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   my $bodytext=&Apache::lonxml::get_all_text("/web",$$parser[$#$parser]);    my $bodytext=&Apache::lonxml::get_all_text("/web",$parser);
   if ($target eq 'web') {    if ($target eq 'web') {
     return $bodytext;      return $bodytext;
   }     } 
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)=@_;
   my $bodytext=&Apache::lonxml::get_all_text("/tex",$$parser[$#$parser]);    my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser);
   if ($target eq 'tex') {    if ($target eq 'tex') {
       return $bodytext.' ';        return $bodytext.' ';
   }    }
Line 81  sub page_start { Line 82  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(undef,$target);      $head_tag_start='<head>'.&Apache::lonmenu::registerurl(undef,$target);
   }    }
   my $body_tag_start;    my $body_tag_start;
   if (!defined($found{'body'})) {    if (!defined($found{'body'})) {
     $body_tag_start='<body onLoad="'.&Apache::lonxml::loadevents().'" '.      $body_tag_start='<body onLoad="'.&Apache::lonmenu::loadevents().'" '.
       'onUnload="'.&Apache::lonxml::unloadevents().'" ';        'onUnload="'.&Apache::lonmenu::unloadevents().'" ';
     my $background=&Apache::lonxml::get_param('background',$parstack,$safeeval);      my $background=&Apache::lonxml::get_param('background',$parstack,$safeeval);
     if ($background) {      if ($background) {
       $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=        $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
Line 100  sub page_start { Line 101  sub page_start {
  $body_tag_start.='bgcolor="#ffffff"';   $body_tag_start.='bgcolor="#ffffff"';
       }        }
     }      }
     $body_tag_start.='>';      $body_tag_start.='>'.&Apache::lonmenu::menubuttons(undef,$target,1);
     if ($target eq 'web' && $ENV{'request.state'} ne 'construct') {      if ($target eq 'web' && $ENV{'request.state'} ne 'construct') {
  my ($symb)=&Apache::lonxml::whichuser();   my ($symb)=&Apache::lonxml::whichuser();
  if ($symb eq '') {   if ($symb eq '') {
Line 240  ENDCHECKOUT Line 241  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;
   # meta is called from lonpublisher, which doesn't uses the normal    # meta is called from lonpublisher, which doesn't uses the normal
   # lonhomework method of parsing the file which means that inputtags     # lonhomework method of parsing the file which means that inputtags 
   # won't get reset    # won't get reset
   if ( $Apache::inputtags::part ne '' && $target != 'meta' ) {    if ( $Apache::inputtags::part ne '' && $target != 'meta' ) {
     &Apache::lonxml::error('Only one problem allowed in a .problem file');      &Apache::lonxml::error('Only one problem allowed in a .problem file');
     my $bodytext=&Apache::lonxml::get_all_text("/problem",$$parser[-1]);      my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser);
     return '';      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=();
     @Apache::inputtags::previous_version=();
     $Apache::structuretags::printanswer='No';
   if ($target ne 'analyze') {    if ($target ne 'analyze') {
     &initialize_storage();      &initialize_storage();
     if ($target eq 'web') {      if ($target eq 'web') {
Line 322  sub start_problem { Line 326  sub start_problem {
         }          }
  $result.=$msg.'<br />';   $result.=$msg.'<br />';
       } elsif ($target eq 'tex') {        } elsif ($target eq 'tex') {
   $result.="\\begin{document}\\noindent \\vskip 1 mm \\begin{minipage}{\\textwidth}\\vskip 0 mm ";    $result.='\begin{document}\noindent \vskip 1 mm  \begin{minipage}{\textwidth}\vskip 0 mm';
  if ($status eq 'UNAVAILABLE') {   if ($status eq 'UNAVAILABLE') {
     $result.='Unable to determine if this resource is open due to network problems. Please try again later.\vskip 0 mm ';      $result.='Unable to determine if this resource is open due to network problems. Please try again later.\vskip 0 mm ';
  } else {   } else {
Line 359  sub start_problem { Line 363  sub start_problem {
  }   }
  $Apache::lonhomework::name=$name;   $Apache::lonhomework::name=$name;
  my $id = $Apache::inputtags::part;   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");    my $duedate = &Apache::lonnet::EXT("resource.$id.duedate"); 
  $duedate = POSIX::strftime("%c",localtime($duedate));   $duedate = POSIX::strftime("%c",localtime($duedate));
  my $temp_file;   my $temp_file;
Line 371  sub start_problem { Line 384  sub start_problem {
  my @due_file_content = <$temp_file>;   my @due_file_content = <$temp_file>;
  my $due_file_content = $due_file_content[$#due_file_content];   my $due_file_content = $due_file_content[$#due_file_content];
         chomp $due_file_content;          chomp $due_file_content;
    my $name_of_resourse= &get_resource_name($parstack,$safeeval);
         if ($due_file_content ne $duedate) {              if ($due_file_content ne $duedate) {    
  $temp_file = Apache::File->new('>'.$filename);    $temp_file = Apache::File->new('>'.$filename); 
     print $temp_file "$duedate\n";          print $temp_file "$duedate\n";    
     if (not $ENV{'request.symb'} =~ m/\.page_/) {      if (not $ENV{'request.symb'} =~ m/\.page_/) {
  if(not $duedate=~m/1969/) {   if(not $duedate=~m/1969/ and $Apache::lonhomework::type ne 'exam') {
     $result .= '\begin{document} \noindent\textit{Due date: '.$duedate.'} \vskip 1 mm\noindent \begin{minipage}{\textwidth}';      $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 {   } else {
     $result .= '\begin{document} \noindent \vskip 1 mm \noindent\begin{minipage}{\textwidth}';      $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 {      } else {
  $result .= '\vskip 1mm\textit{Due date: '.$duedate.'} \\\\\\\\';   $result .= '\vskip 1mm\textit{Due date: '.$duedate.'} \\\\\\\\';
     }       } 
  } else {   } else {
     if (not $ENV{'request.symb'} =~ m/\.page_/) {      if (not $ENV{'request.symb'} =~ m/\.page_/) {
  $result .= '\begin{document} \noindent \vskip 1 mm\noindent\begin{minipage}{\textwidth}';   $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 {      } else {
  $result .= '\vskip 1mm \\\\\\\\';   $result .= '\vskip 1mm \\\\\\\\';
     }       } 
Line 419  sub end_problem { Line 435  sub end_problem {
       # 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
       my $gradestatus = &Apache::inputtags::gradestatus($Apache::inputtags::part,$target);        my $gradestatus = &Apache::inputtags::gradestatus($Apache::inputtags::part,$target);
       if ($Apache::lonhomework::type ne 'exam') {$result.= $gradestatus;}        $result.= $gradestatus;
     }      }
     if (      if (
  (($target eq 'web') && ($ENV{'request.state'} ne 'construct')) ||   (($target eq 'web') && ($ENV{'request.state'} ne 'construct')) ||
Line 462  sub end_problem { Line 478  sub end_problem {
     &Apache::lonxml::debug("in end_problem with $target, edit");      &Apache::lonxml::debug("in end_problem with $target, edit");
     $result = &problem_edit_footer();      $result = &problem_edit_footer();
   }    }
   
     undef(%Apache::lonhomework::history);
     undef(%Apache::lonhomework::results);
     undef($Apache::inputtags::part);
     undef($Apache::lonhomework::parsing_a_problem);
   
   return $result;    return $result;
 }  }
   
Line 526  sub start_block { Line 548  sub start_block {
     $result='1';      $result='1';
  }   }
  if ( ! $result ) {   if ( ! $result ) {
     my $skip=&Apache::lonxml::get_all_text("/block",$$parser[-1]);      my $skip=&Apache::lonxml::get_all_text("/block",$parser);
     &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");      &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");
  }   }
  $result='';   $result='';
Line 589  sub start_randomlist { Line 611  sub start_randomlist {
   my $result;    my $result;
   if ($target eq 'answer' || $target eq 'grade' || $target eq 'web' ||    if ($target eq 'answer' || $target eq 'grade' || $target eq 'web' ||
       $target eq 'tex' || $target eq 'analyze') {        $target eq 'tex' || $target eq 'analyze') {
     my $body= &Apache::lonxml::get_all_text("/randomlist",$$parser[$#$parser]);      my $body= &Apache::lonxml::get_all_text("/randomlist",$parser);
     my $b_parser= HTML::TokeParser->new(\$body);      my $b_parser= HTML::TokeParser->new(\$body);
     my $b_tok;      my $b_tok;
     my @randomlist;      my @randomlist;
Line 665  sub start_part { Line 687  sub start_part {
   $Apache::inputtags::part=$id;    $Apache::inputtags::part=$id;
   @Apache::inputtags::responselist = ();    @Apache::inputtags::responselist = ();
   @Apache::inputtags::previous=();    @Apache::inputtags::previous=();
     @Apache::inputtags::previous_version=();
     my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part);
   
   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' || $target eq 'tex') {    } elsif ($target eq 'web' || $target eq 'grade' ||
     my ($status,$accessmsg) = &Apache::lonhomework::check_access($id);     $target eq 'answer' || $target eq 'tex') {
     push (@Apache::inputtags::status,$status);        if ($hidden) {
     my $expression='$external::datestatus="'.$status.'";';    my $bodytext=&Apache::lonxml::get_all_text("/part",$parser);
     $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$id.solved"}.'";';        } else {
     &Apache::run::run($expression,$safeeval);    my ($status,$accessmsg) = &Apache::lonhomework::check_access($id);
     if ( $status eq 'CLOSED' ) {    push (@Apache::inputtags::status,$status);
       my $bodytext=&Apache::lonxml::get_all_text("/part",$$parser[$#$parser]);    my $expression='$external::datestatus="'.$status.'";';
       if ( $target eq "web" ) {    $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$id.solved"}.'";';
  $result="<br />Part is not open to be viewed. It $accessmsg<br />";    &Apache::run::run($expression,$safeeval);
       } elsif ( $target eq 'tex' ) {    if ( $status eq 'CLOSED' ) {
  $result="\\end{minipage}\\vskip 0 mm Part is not open to be viewed. It $accessmsg \\\\\\begin{minipage}{\\textwidth}";        my $bodytext=&Apache::lonxml::get_all_text("/part",$parser);
       }        if ( $target eq "web" ) {
     } else {    $result="<br />Part is not open to be viewed. It $accessmsg<br />";
       if ($target eq 'tex') {        } elsif ( $target eq 'tex' ) {
  if ($$tagstack[-2] ne 'problem') {    $result="\\end{minipage}\\vskip 0 mm Part is not open to be viewed. It $accessmsg \\\\\\begin{minipage}{\\textwidth}";
   $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';        }
  }    } 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') {    } elsif ($target eq 'edit') {
       $result.=&Apache::edit::tag_start($target,$token);        $result.=&Apache::edit::tag_start($target,$token);
       $result.=&Apache::edit::text_arg('Part ID:','id',$token).        $result.=&Apache::edit::text_arg('Part ID:','id',$token).
Line 708  sub end_part { Line 738  sub end_part {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   &Apache::lonxml::debug("in end_part $target ");    &Apache::lonxml::debug("in end_part $target ");
   my $status=$Apache::inputtags::status['-1'];    my $status=$Apache::inputtags::status['-1'];
     my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part);
   my $result='';    my $result='';
   if ( $target eq 'meta' ) {    if ( $target eq 'meta' ) {
       $result='';        $result='';
   } elsif ( $target eq 'grade' && $status eq 'CAN_ANSWER') {    } elsif ( $target eq 'grade' && $status eq 'CAN_ANSWER' && !$hidden) {
     $result=&Apache::inputtags::grade;      $result=&Apache::inputtags::grade;
   } elsif ($target eq 'web' || $target eq 'tex' ) {    } elsif (($target eq 'web' || $target eq 'tex') && !$hidden ) {
     my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part,      my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part,
     $target);      $target);
     if ($Apache::lonhomework::type eq 'exam') {$gradestatus='';}      if ($Apache::lonhomework::type eq 'exam') {$gradestatus='';}
     $result=$gradestatus;      $result=$gradestatus;
   }    }
   pop @Apache::inputtags::status;    pop @Apache::inputtags::status;
     $Apache::inputtags::part='';
   return $result;    return $result;
 }  }
   
Line 729  sub start_preduedate { Line 761  sub start_preduedate {
     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::inputtags::status['-1'] ne 'SHOW_ANSWER') {          $Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {
       &Apache::lonxml::get_all_text("/preduedate",$$parser[$#$parser]);        &Apache::lonxml::get_all_text("/preduedate",$parser);
     }      }
   }    }
   return '';    return '';
Line 743  sub start_postanswerdate { Line 775  sub start_postanswerdate {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') {    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);
     }      }
   } elsif ($target eq 'tex') {    } elsif ($target eq 'tex') {
       return '\vskip 0 mm \noindent';        return '\vskip 0 mm \noindent';
Line 762  sub start_notsolved { Line 794  sub start_notsolved {
     &Apache::lonxml::debug("not solved has :$gradestatus:");      &Apache::lonxml::debug("not solved has :$gradestatus:");
     if ($gradestatus =~ /^correct/) {      if ($gradestatus =~ /^correct/) {
       &Apache::lonxml::debug("skipping");        &Apache::lonxml::debug("skipping");
       &Apache::lonxml::get_all_text("/notsolved",$$parser[$#$parser]);        &Apache::lonxml::get_all_text("/notsolved",$parser);
     }      }
   }    }
   return '';    return '';
Line 777  sub start_solved { Line 809  sub start_solved {
   if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {    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);
     }      }
   }    }
   return '';    return '';
Line 799  sub end_startouttext { Line 831  sub end_startouttext {
   my $text='';    my $text='';
   
   if ($target eq 'edit') {    if ($target eq 'edit') {
     $text=&Apache::lonxml::get_all_text("endouttext",$$parser[-1]);      $text=&Apache::lonxml::get_all_text("endouttext",$parser);
     $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).
     &Apache::edit::end_row().&Apache::edit::start_spanning_row()."\n".      &Apache::edit::end_row().&Apache::edit::start_spanning_row()."\n"
       &Apache::edit::editfield($token->[1],$text,"",80,4);   .'<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') {    if ($target eq 'modified') {
     $text=&Apache::lonxml::get_all_text("endouttext",$$parser['-1']);      $text=&Apache::lonxml::get_all_text("endouttext",$parser);
     $result='<startouttext />'.&Apache::edit::modifiedfield();      $result='<startouttext />'.&Apache::edit::modifiedfield();
   }    }
   if ($target eq 'tex') {    if ($target eq 'tex') {
Line 835  sub end_endouttext { Line 874  sub end_endouttext {
 }  }
 sub delete_startouttext {  sub delete_startouttext {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
 #  my $text=&Apache::lonxml::get_all_text("endouttext",$$parser['-1']);  #  my $text=&Apache::lonxml::get_all_text("endouttext",$parser);
   my $text=$$parser['-1']->get_text("/endouttext");    my $text=$$parser['-1']->get_text("/endouttext");
   my $ntoken=$$parser['-1']->get_token();    my $ntoken=$$parser['-1']->get_token();
   &Apache::lonxml::debug("Deleting :$text: and :$ntoken->[0]:$ntoken->[1]:$ntoken->[2]: for startouttext");    &Apache::lonxml::debug("Deleting :$text: and :$ntoken->[0]:$ntoken->[1]:$ntoken->[2]: for startouttext");

Removed from v.1.145  
changed lines
  Added in v.1.158


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