Diff for /loncom/homework/structuretags.pm between versions 1.50 and 1.66

version 1.50, 2001/08/03 17:48:24 version 1.66, 2001/08/22 19:21:36
Line 2 Line 2
 # definition of tags that give a structure to a document  # definition of tags that give a structure to a document
 # 2/19 Guy  # 2/19 Guy
 # 6/26/2001 fixed extra web display at end of <web></web> tags  # 6/26/2001 fixed extra web display at end of <web></web> tags
   # 8/17,8/18,8/20 Gerd Kortemeyer
   
 package Apache::structuretags;   package Apache::structuretags; 
   
 use strict;  use strict;
Line 61  sub page_start { Line 63  sub page_start {
   return ($result,$head_tag_start,$body_tag_start);    return ($result,$head_tag_start,$body_tag_start);
 }  }
   
   sub initialize_storage {
     %Apache::lonhomework::results=();
     my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
     %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=(); }
   }
   
   # -------------------------------------------------------------finalize_storage
   # Stores away the result has to a student's environment
   # 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();
       $result=&Apache::lonnet::cstore(\%Apache::lonhomework::results,
       $symb,$courseid,$domain,$name);
       &Apache::lonxml::debug("Store return message:".$result);
     }
     return $result;
   }
   
   sub checkout_msg {
   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 />
   <font color=red>
   Checking out resources is subject to course policies, and may exclude future
   credit even if done erroneously.<p />
   </font>  
   <form method=post>
   <input type=button name="doescheckout" 
   value="Check out Exam for Viewing" 
   onClick="if (confirm('Check out Exam?')) { this.form.submit(); }" />
   </form>
   ENDCHECKOUT
   }
   
 sub start_problem {  sub start_problem {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   
 #intialize globals  #intialize globals
   $Apache::inputtags::part='0';    $Apache::inputtags::part='0';
   @Apache::inputtags::responselist = ();    @Apache::inputtags::responselist = ();
     @Apache::inputtags::previous=();
     &initialize_storage();
   $Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type');    $Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type');
   &Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:");    &Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:");
   if ($Apache::lonhomework::type eq '') {    if ($Apache::lonhomework::type eq '') {
     $Apache::lonhomework::type='homework';      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:");
       }
   }    }
 #adeed vars to the scripting enviroment  
   #added vars to the scripting enviroment
   my $expression='$external::part='.$Apache::inputtags::part.';';    my $expression='$external::part='.$Apache::inputtags::part.';';
   &Apache::run::run($expression,$safeeval);    &Apache::run::run($expression,$safeeval);
   my $status;    my $status;
   my $datemsg;    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)=
     &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);      &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);
   
     if ($Apache::lonhomework::type eq 'exam') {
         if ($target eq 'web') {
             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);
         }
     }
   if ($target eq 'web' || $target eq 'grade') {    if ($target eq 'web' || $target eq 'grade') {
     ($status,$datemsg) = &Apache::lonhomework::check_date('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.'";';
     $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.0.solved"}.'";';      $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.0.solved"}.'";';
     &Apache::run::run($expression,$safeeval);      &Apache::run::run($expression,$safeeval);
     if ( $status eq 'CLOSED' ) {      if (( $status eq 'CLOSED' ) ||
           ( $status eq 'UNCHECKEDOUT') ||
           ( $status eq 'BANNED')) {
       my $bodytext=&Apache::lonxml::get_all_text("/problem",$$parser[$#$parser]);        my $bodytext=&Apache::lonxml::get_all_text("/problem",$$parser[$#$parser]);
       if ( $target eq "web" ) {        if ( $target eq "web" ) {
  $result.= $head_tag_start.'</head>';   $result.= $head_tag_start.'</head>';
  return $result . $body_tag_start .          my $msg=$body_tag_start.
   " <br />Problem is not open to be viewed. The problem $datemsg<br />";      '<h1>Not open to be viewed</h1>';
           if ($status eq 'CLOSED') {
       $msg.='The problem '.$accessmsg;
    } elsif ($status eq 'UNCHECKEDOUT') {
               $msg.=&checkout_msg;
           }
    return $result.$msg.'<br />';
       }        }
     }      }
   }    }
Line 114  sub start_problem { Line 187  sub start_problem {
  $result.='<input type="hidden" name="problemmode" value="View" />   $result.='<input type="hidden" name="problemmode" value="View" />
                  <input type="submit" name="problemmode" value="Edit" /><hr />';                   <input type="submit" name="problemmode" value="Edit" /><hr />';
       }        }
         # 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";
    }
         }
       return $result;        return $result;
     } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' || $status eq 'CLOSED') {      } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' || $status eq 'CLOSED') {
       return $result.$head_tag_start."<title>$name</title></head>\n$body_tag_start\n";        return $result.$head_tag_start."<title>$name</title></head>\n$body_tag_start\n";
Line 162  sub end_problem { Line 242  sub end_problem {
       }        }
       $result.=&Apache::lonxml::xmlend();        $result.=&Apache::lonxml::xmlend();
     }      }
   }      if ($target eq 'grade') { 
   if ($target eq 'meta') {        &Apache::lonhomework::showhash(%Apache::lonhomework::results);
         &finalize_storage();
       }
     } elsif ($target eq 'meta') {
     if ($Apache::inputtags::part eq '0') {      if ($Apache::inputtags::part eq '0') {
       $result=&Apache::response::mandatory_part_meta;        $result=&Apache::response::mandatory_part_meta;
     }      }
   }    } elsif ($target eq 'edit') {
   if ($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='<br /><input type="submit" name="submit" value="Submit Changes" />';
   }    }
Line 304  sub start_randomlist { Line 386  sub start_randomlist {
 sub shuffle {  sub shuffle {
     my $a=shift;      my $a=shift;
     my $i;      my $i;
       &Apache::response::setrandomnumber();
     for($i=@$a;--$i;) {      for($i=@$a;--$i;) {
       my $j=int rand($i+1);        my $j=int rand($i+1);
       next if $i == $j;        next if $i == $j;
Line 321  sub start_part { Line 404  sub start_part {
   if ($id eq '') { $id = $Apache::lonxml::curdepth; }    if ($id eq '') { $id = $Apache::lonxml::curdepth; }
   $Apache::inputtags::part=$id;    $Apache::inputtags::part=$id;
   @Apache::inputtags::responselist = ();    @Apache::inputtags::responselist = ();
     @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') {    } elsif ($target eq 'web' || $target eq 'grade') {
     my ($status,$datemsg) = &Apache::lonhomework::check_date($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.'";';
     $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$id.solved"}.'";';      $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$id.solved"}.'";';
Line 332  sub start_part { Line 416  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 $datemsg<br />";   return "<br />Part is not open to be viewed. It $accessmsg<br />";
       }        }
     }      }
   }    }

Removed from v.1.50  
changed lines
  Added in v.1.66


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