Diff for /loncom/homework/inputtags.pm between versions 1.75 and 1.92

version 1.75, 2002/11/27 19:25:56 version 1.92, 2003/04/19 09:00:54
Line 30 Line 30
 package Apache::inputtags;  package Apache::inputtags;
 use HTML::Entities();  use HTML::Entities();
 use strict;  use strict;
   use Apache::loncommon;
   
 BEGIN {  BEGIN {
   &Apache::lonxml::register('Apache::inputtags',('textfield','textline'));    &Apache::lonxml::register('Apache::inputtags',('textfield','textline'));
Line 88  sub start_textfield { Line 89  sub start_textfield {
  if ( $cols eq '') { $cols = 80; }   if ( $cols eq '') { $cols = 80; }
  my $rows = &Apache::lonxml::get_param('rows',$parstack,$safeeval);   my $rows = &Apache::lonxml::get_param('rows',$parstack,$safeeval);
  if ( $rows eq '') { $rows = 10; }   if ( $rows eq '') { $rows = 10; }
  $result= '<textarea name="HWVAL'.$resid.'" '.   $result= '<textarea name="HWVAL_'.$resid.'" '.
     "rows=\"$rows\" cols=\"$cols\">".$oldresponse;      "rows=\"$rows\" cols=\"$cols\">".$oldresponse;
  if ($oldresponse ne '') {   if ($oldresponse ne '') {
     #get rid of any startup text if the user has already responded      #get rid of any startup text if the user has already responded
     &Apache::lonxml::get_all_text("/textfield",$$parser[-1]);      &Apache::lonxml::get_all_text("/textfield",$parser);
  }   }
     } else {      } else {
  #right or wrong don't show it   #right or wrong don't show it
  #$result='<table border="1"><tr><td><i>'.$oldresponse.'</i></td></tr></table>';   #$result='<table border="1"><tr><td><i>'.$oldresponse.'</i></td></tr></table>';
  $result='';   $result='';
  #get rid of any startup text   #get rid of any startup text
  &Apache::lonxml::get_all_text("/textfield",$$parser[-1]);   &Apache::lonxml::get_all_text("/textfield",$parser);
     }      }
   } elsif ($target eq 'grade') {    } elsif ($target eq 'grade') {
     my $seedtext=&Apache::lonxml::get_all_text("/textfield",$$parser[-1]);      my $seedtext=&Apache::lonxml::get_all_text("/textfield",$parser);
     if ($seedtext eq $ENV{'form.HWVAL'.$resid}) {      if ($seedtext eq $ENV{'form.HWVAL_'.$resid}) {
       # if the seed text is still there it wasn't a real submission        # if the seed text is still there it wasn't a real submission
       $ENV{'form.HWVAL'.$resid}='';        $ENV{'form.HWVAL_'.$resid}='';
     }      }
   } 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('Rows:','rows',$token,4);      $result.=&Apache::edit::text_arg('Rows:','rows',$token,4);
     $result.=&Apache::edit::text_arg('Columns:','cols',$token,4);      $result.=&Apache::edit::text_arg('Columns:','cols',$token,4);
     my $bodytext=&Apache::lonxml::get_all_text("/textfield",$$parser[-1]);      my $bodytext=&Apache::lonxml::get_all_text("/textfield",$parser);
     $result.=&Apache::edit::editfield($token->[1],$bodytext,'Text you want to appear by default:',80,2);      $result.=&Apache::edit::editfield($token->[1],$bodytext,'Text you want to appear by default:',80,2);
   } elsif ($target eq 'modified') {    } elsif ($target eq 'modified') {
     my $constructtag=&Apache::edit::get_new_args($token,$parstack,      my $constructtag=&Apache::edit::get_new_args($token,$parstack,
Line 122  sub start_textfield { Line 123  sub start_textfield {
       $result=$token->[4];        $result=$token->[4];
     }      }
     $result.=&Apache::edit::modifiedfield();      $result.=&Apache::edit::modifiedfield();
     } elsif ($target eq 'tex') {
         if ($$tagstack[-2] eq 'essayresponse' and $Apache::lonhomework::type eq 'exam') {
     my $number_of_lines= &Apache::lonxml::get_param('rows',$parstack,$safeeval);
     $result = '\fbox{\fbox{\parbox{\textwidth-5mm}{';
    for (my $i=0;$i<int $number_of_lines*2;$i++) {$result.='\strut \\\\ ';}
    $result.='\strut \\\\\strut \\\\\strut \\\\\strut \\\\}}}';
         }
   }    }
   return $result;    return $result;
 }  }
Line 156  sub start_textline { Line 164  sub start_textline {
       my $id=$Apache::inputtags::response[-1];        my $id=$Apache::inputtags::response[-1];
       my $oldresponse = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$partid.$id.submission"});        my $oldresponse = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$partid.$id.submission"});
       if ($Apache::lonhomework::type ne 'exam') {        if ($Apache::lonhomework::type ne 'exam') {
         $result= '<input type="text" name="HWVAL'.$id.'" value="'.          $result= '<input type="text" name="HWVAL_'.$id.'" value="'.
     $oldresponse.'" size="'.$size.'" maxlength="'.$maxlength.'" />';      $oldresponse.'" size="'.$size.'" maxlength="'.$maxlength.'" />';
       }        }
     } else {      } else {
Line 171  sub start_textline { Line 179  sub start_textline {
   } elsif ($target eq 'modified') {    } elsif ($target eq 'modified') {
     my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'size');      my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'size');
     if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }      if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
   } elsif ($target eq 'tex') {    } elsif ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {
       $result='\framebox[1cm][s]{\hfill}';        my $size = &Apache::lonxml::get_param('size',$parstack,$safeeval);
         if ($size != 0) {$size=$size*2; $size.=' mm';} else {$size='40 mm';}
         $result='\framebox['.$size.'][s]{\tiny\strut}';
   }    }
   return $result;    return $result;
 }  }
Line 230  sub finalizeawards { Line 240  sub finalizeawards {
     foreach $award (@_) { if ($award eq 'INCORRECT') {$result=$award; last;} }      foreach $award (@_) { if ($award eq 'INCORRECT') {$result=$award; last;} }
   }    }
   if ($result eq '' ) {    if ($result eq '' ) {
         foreach $award (@_) { if ($award eq 'MISORDERED_RANK') {$result=$award; last;} }
     }
     if ($result eq '' ) {
         foreach $award (@_) { if ($award eq 'INVALID_FILETYPE') {$result=$award; last;} }
     }
     if ($result eq '' ) {
     foreach $award (@_) { if ($award eq 'DRAFT') {$result=$award; last;} }      foreach $award (@_) { if ($award eq 'DRAFT') {$result=$award; last;} }
   }    }
   if ($result eq '' ) {    if ($result eq '' ) {
     foreach $award (@_) { if ($award eq 'SUBMITTED') {$result=$award; last;} }      foreach $award (@_) { if ($award eq 'SUBMITTED') {$result=$award; last;} }
   }    }
   if ($result eq '' ) {    if ($result eq '' ) {
       foreach $award (@_) { if ($award eq 'ASSIGNED_SCORE') {$result=$award; last;} }
     }
     if ($result eq '' ) {
     foreach $award (@_) { if ($award eq 'APPROX_ANS') {$result=$award; last;} }      foreach $award (@_) { if ($award eq 'APPROX_ANS') {$result=$award; last;} }
   }    }
   if ($result eq '' ) { $result='EXACT_ANS'; }    if ($result eq '' ) { $result='EXACT_ANS'; }
Line 251  sub decideoutput { Line 270  sub decideoutput {
   if ($previous) { $previousmsg='You have entered that answer before'; }    if ($previous) { $previousmsg='You have entered that answer before'; }
   
   if      ($solved =~ /^correct/) {    if      ($solved =~ /^correct/) {
     if ($target eq 'tex') {        if ($award eq 'ASSIGNED_SCORE') {
       $message = '\textbf{You are correct}. Your receipt is '.    $message = "A score has been assigned.";
       &Apache::lonnet::receipt;        } else {
     } else {    if ($target eq 'tex') {
       $message = "<b>You are correct.</b> Your receipt is ".        $message = '\textbf{You are correct}.';
       &Apache::lonnet::receipt;    } else {
     }        $message = "<b>You are correct.</b>";
     $button=0;    }
     $previousmsg='';    $message=' Your receipt is '.&Apache::lonnet::receipt;
         }
         $button=0;
         $previousmsg='';
   } elsif ($solved =~ /^excused/) {    } elsif ($solved =~ /^excused/) {
     $message = "<b>You are excused from the problem.</b>";        $message = "<b>You are excused from the problem.</b>";
     $button=0;  
     $previousmsg='';  
   } elsif ($award eq 'EXACT_ANS' || $award eq 'APPROX_ANS' ) {  
     if ($solved =~ /^incorrect/ || $solved eq '') {  
       $message = "Incorrect";  
       $button=1;  
     } else {  
       $message = "<b>You are correct.</b> Your receipt is ".  
  &Apache::lonnet::receipt;  
       $button=0;        $button=0;
       $previousmsg='';        $previousmsg='';
     }    } elsif ($award eq 'EXACT_ANS' || $award eq 'APPROX_ANS' ) {
         if ($solved =~ /^incorrect/ || $solved eq '') {
     $message = "Incorrect";
     $button=1;
         } else {
     $message = "<b>You are correct.</b> Your receipt is ".
      &Apache::lonnet::receipt;
     $button=0;
     $previousmsg='';
         }
   } elsif ($award eq 'NO_RESPONSE') {    } elsif ($award eq 'NO_RESPONSE') {
     $message = '';        $message = '';
     $button=1;        $button=1;
   } elsif ($award eq 'MISSING_ANSWER') {    } elsif ($award eq 'MISSING_ANSWER') {
     $message = 'Some parts were not submitted';        $message = 'Some parts were not submitted';
     $button = 1;        $button = 1;
   } elsif ($award eq 'WANTED_NUMERIC') {    } elsif ($award eq 'WANTED_NUMERIC') {
     $message = "This question expects a numeric answer";        $message = "This question expects a numeric answer";
     $button=1;        $button=1;
     } elsif ($award eq 'MISORDERED_RANK') {
         $message = 'You have provided an invalid ranking, please refer to '.
          &Apache::loncommon::help_open_topic('Ranking_Problems','help on ranking problems').'.';
         $button=1;
     } elsif ($award eq 'INVALID_FILETYPE') {
         $message = 'The filetype extension of the file you uploaded is not allowed.';
         $button=1;
   } elsif ($award eq 'SIG_FAIL') {    } elsif ($award eq 'SIG_FAIL') {
     $message = "Please adjust significant figures.";# you provided %s significant figures";        $message = "Please adjust significant figures.";# you provided %s significant figures";
     $button=1;        $button=1;
   } elsif ($award eq 'UNIT_FAIL') {    } elsif ($award eq 'UNIT_FAIL') {
     $message = "Units incorrect."; #Computer reads units as %s";        $message = "Units incorrect. ".
     $button=1;         &Apache::loncommon::help_open_topic('Physical_Units'); #Computer reads units as %s";
         $button=1;
   } elsif ($award eq 'UNIT_NOTNEEDED') {    } elsif ($award eq 'UNIT_NOTNEEDED') {
     $message = "Only a number required.";# Computer reads units of %s";        $message = "Only a number required.";# Computer reads units of %s";
     $button=1;        $button=1;
   } elsif ($award eq 'NO_UNIT') {    } elsif ($award eq 'NO_UNIT') {
     $message = "Units required";        $message = "Units required".
     $button=1;         &Apache::loncommon::help_open_topic('Physical_Units');
         $button=1;
   } elsif ($award eq 'BAD_FORMULA') {    } elsif ($award eq 'BAD_FORMULA') {
     $message = "Unable to understand formula";        $message = "Unable to understand formula";
     $button=1;        $button=1;
   } elsif ($award eq 'INCORRECT') {    } elsif ($award eq 'INCORRECT') {
     $message = "Incorrect";        $message = "Incorrect";
     $button=1;        $button=1;
   } elsif ($award eq 'SUBMITTED') {    } elsif ($award eq 'SUBMITTED') {
     $message = "Your submission has been recorded.";        $message = "Your submission has been recorded.";
     $button=1;        $button=1;
   } elsif ($award eq 'DRAFT') {    } elsif ($award eq 'DRAFT') {
     $message = "A draft copy has been saved.";        $message = "A draft copy has been saved.";
     $button=1;        $button=1;
     } elsif ($award eq 'ASSIGNED_SCORE') {
         $message = "A score has been assigned.";
         $button=0;
   } else {    } else {
     $message = "Unknown message: $award";        $message = "Unknown message: $award";
     $button=1;        $button=1;
     } 
     if (lc($Apache::lonhomework::problemstatus) ne 'yes') {
         $message = "Answer Submitted";
         $button=1;
   }    }
   return ($button,$message,$previousmsg);    return ($button,$message,$previousmsg);
 }  }
   
   sub removealldata {
       my ($id)=@_;
       foreach my $key (keys(%Apache::lonhomework::results)) {
    if (($key =~ /^resource\.\Q$id\E\./) && ($key !~ /\.collaborators$/)) {
       &Apache::lonxml::debug("Removing $key");
       delete($Apache::lonhomework::results{$key});
    }
       }
   }
   
 sub setgradedata {  sub setgradedata {
   my ($award,$id,$previously_used) = @_;    my ($award,$id,$previously_used) = @_;
   # if the student already has it correct, don't modify the status    # if the student already has it correct, don't modify the status
Line 327  sub setgradedata { Line 375  sub setgradedata {
     if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {      if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {
       $Apache::lonhomework::results{"resource.$id.afterduedate"}='';        $Apache::lonhomework::results{"resource.$id.afterduedate"}='';
     }      }
     if ( $award eq 'APPROX_ANS' || $award eq 'EXACT_ANS' ) {      if ( $award eq 'ASSIGNED_SCORE') {
    $Apache::lonhomework::results{"resource.$id.tries"} =
       $Apache::lonhomework::history{"resource.$id.tries"} + 1;
    $Apache::lonhomework::results{"resource.$id.solved"} =
       'correct_by_student';
    my $numawards=scalar(@Apache::inputtags::response);
    $Apache::lonhomework::results{"resource.$id.awarded"} = 0;
    foreach my $res (@Apache::inputtags::response) {
       $Apache::lonhomework::results{"resource.$id.awarded"}+=
          $Apache::lonhomework::results{"resource.$id.$res.awarded"};
    }
    $Apache::lonhomework::results{"resource.$id.awarded"}/=$numawards;
       } elsif ( $award eq 'APPROX_ANS' || $award eq 'EXACT_ANS' ) {
       $Apache::lonhomework::results{"resource.$id.tries"} =        $Apache::lonhomework::results{"resource.$id.tries"} =
  $Apache::lonhomework::history{"resource.$id.tries"} + 1;   $Apache::lonhomework::history{"resource.$id.tries"} + 1;
       $Apache::lonhomework::results{"resource.$id.solved"} =        $Apache::lonhomework::results{"resource.$id.solved"} =
Line 346  sub setgradedata { Line 406  sub setgradedata {
     } elsif ( $award eq 'DRAFT' ) {      } elsif ( $award eq 'DRAFT' ) {
       $Apache::lonhomework::results{"resource.$id.solved"} = '';        $Apache::lonhomework::results{"resource.$id.solved"} = '';
     } elsif ( $award eq 'NO_RESPONSE' ) {      } elsif ( $award eq 'NO_RESPONSE' ) {
       return '';   #no real response so delete any data that got stored
    &removealldata($id);
    return '';
     } else {      } else {
       $Apache::lonhomework::results{"resource.$id.solved"} =        $Apache::lonhomework::results{"resource.$id.solved"} =
  'incorrect_attempted';   'incorrect_attempted';
Line 360  sub setgradedata { Line 422  sub setgradedata {
     } elsif ( $previously_used eq 'PREVIOUSLY_LAST') {      } elsif ( $previously_used eq 'PREVIOUSLY_LAST') {
       #delete all data as they student didn't do anything, but save        #delete all data as they student didn't do anything, but save
       #the list of collaborators.        #the list of collaborators.
       foreach my $key (keys(%Apache::lonhomework::results)) {        &removealldata($id);
  if (($key =~ /^resource\.$id\./) && ($key !~ /\.collaborators$/)) {  
   &Apache::lonxml::debug("Removing $key");  
   delete($Apache::lonhomework::results{$key});  
  }  
       }  
       #and since they didn't do anything we were never here        #and since they didn't do anything we were never here
       return '';        return '';
     } else {      } else {
       $Apache::lonhomework::results{"resource.$id.previous"} = '0';        $Apache::lonhomework::results{"resource.$id.previous"} = '0';
     }      }
     } elsif ( $Apache::lonhomework::history{"resource.$id.solved"} =~
       /^correct/ ) {
         #delete all data as they student already has it correct
         &removealldata($id);
         #and since they didn't do anything we were never here
         return '';
   }    }
   $Apache::lonhomework::results{"resource.$id.award"} = $award;    $Apache::lonhomework::results{"resource.$id.award"} = $award;
 }  }
Line 425  sub gradestatus { Line 488  sub gradestatus {
   
   my $status = $Apache::inputtags::status['-1'];    my $status = $Apache::inputtags::status['-1'];
   &Apache::lonxml::debug("gradestatus has :$status:");    &Apache::lonxml::debug("gradestatus has :$status:");
   if ( $status ne 'CLOSED' ) {      if ( $status ne 'CLOSED' && $status ne 'UNAVAILABLE') {  
     my $award = $Apache::lonhomework::history{"resource.$id.award"};      my $award = $Apache::lonhomework::history{"resource.$id.award"};
     my $solved = $Apache::lonhomework::history{"resource.$id.solved"};      my $solved = $Apache::lonhomework::history{"resource.$id.solved"};
     my $previous = $Apache::lonhomework::history{"resource.$id.previous"};      my $previous = $Apache::lonhomework::history{"resource.$id.previous"};
Line 453  sub gradestatus { Line 516  sub gradestatus {
       if ($target eq 'tex') {        if ($target eq 'tex') {
   if ($ENV{'request.state'} ne "construct") {    if ($ENV{'request.state'} ne "construct") {
       $trystr = ' {\small \textit{Tries} '.$tries.'/'.$maxtries.'} \vskip 0 mm ';        $trystr = ' {\small \textit{Tries} '.$tries.'/'.$maxtries.'} \vskip 0 mm ';
     } else {
         $trystr = '\vskip 0 mm ';
   }    }
       } else {        } else {
          $trystr = "<td>Tries $tries/$maxtries</td>";           $trystr = "<td>Tries $tries/$maxtries</td>";

Removed from v.1.75  
changed lines
  Added in v.1.92


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.