Diff for /loncom/homework/inputtags.pm between versions 1.118 and 1.134

version 1.118, 2003/09/23 15:43:39 version 1.134, 2004/03/05 21:31:07
Line 24 Line 24
 # /home/httpd/html/adm/gpl.txt  # /home/httpd/html/adm/gpl.txt
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  
 # 2/19 Guy   
   
 package Apache::inputtags;  package Apache::inputtags;
 use HTML::Entities();  use HTML::Entities();
Line 64  sub initialize_inputtags { Line 62  sub initialize_inputtags {
   @Apache::inputtags::import=();    @Apache::inputtags::import=();
   # list of all import ids seen    # list of all import ids seen
   @Apache::inputtags::importlist=();    @Apache::inputtags::importlist=();
     # just used to note whether we have seen a response that isn't in a part
     $Apache::inputtags::response_with_no_part=0;
 }  }
   
 sub check_for_duplicate_ids {  sub check_for_duplicate_ids {
Line 98  sub end_input { Line 98  sub end_input {
   return '';    return '';
 }  }
   
   sub addchars {
       my ($fieldid,$addchars)=@_;
       my $output='';
       foreach (split(/\,/,$addchars)) {
    $output.='<a href="javascript:void(document.forms.lonhomework.'.
       $fieldid.'.value+=\''.$_.'\')">'.$_.'</a> ';
       }
       return $output;
   }
   
 sub start_textfield {  sub start_textfield {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   my $result = "";    my $result = "";
Line 112  sub start_textfield { Line 122  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.'" '.   my $addchars=&Apache::lonxml::get_param('addchars',$parstack,$safeeval);
    $result='';
           if ($addchars) {
       $result.=&addchars('HWVAL_'.$resid,$addchars);
    }
    $result.= '<textarea wrap="hard" 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
Line 135  sub start_textfield { Line 150  sub start_textfield {
     $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);
       $result.=&Apache::edit::text_arg
    ('Click-On Texts (comma sep):','addchars',$token,10);
     my $bodytext=&Apache::lonxml::get_all_text("/textfield",$parser);      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,
  $safeeval,'rows','cols');     $safeeval,'rows','cols','addchars');
     if ($constructtag) {      if ($constructtag) {
       $result = &Apache::edit::rebuild_tag($token);        $result = &Apache::edit::rebuild_tag($token);
     } else {      } else {
       $result=$token->[4];        $result=$token->[4];
     }      }
     my $bodytext=&Apache::lonxml::get_all_text("/textfield",$parser);      $result.=&Apache::edit::modifiedfield("/textfield",$parser);
     $result.=&Apache::edit::modifiedfield();  
   } elsif ($target eq 'tex') {    } elsif ($target eq 'tex') {
       my $number_of_lines = &Apache::lonxml::get_param('rows',$parstack,$safeeval);        my $number_of_lines = &Apache::lonxml::get_param('rows',$parstack,$safeeval);
       my $width_of_box = &Apache::lonxml::get_param('cols',$parstack,$safeeval);        my $width_of_box = &Apache::lonxml::get_param('cols',$parstack,$safeeval);
Line 194  sub start_textline { Line 210  sub start_textline {
       }        }
       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="'.   my $addchars=&Apache::lonxml::get_param('addchars',$parstack,$safeeval);
    $result='';
           if ($addchars) {
       $result.=&addchars('HWVAL_'.$id,$addchars);
    }
           $result.= '<input type="text" name="HWVAL_'.$id.'" value="'.
     $oldresponse.'" size="'.$size.'" maxlength="'.$maxlength.'" />';      $oldresponse.'" size="'.$size.'" maxlength="'.$maxlength.'" />';
       }        }
     } else {      } else {
Line 204  sub start_textline { Line 225  sub start_textline {
     }      }
   } 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('Size:','size',$token,'5')."</td></tr>";      $result.=&Apache::edit::text_arg('Size:','size',$token,'5').
    &Apache::edit::text_arg
    ('Click-On Texts (comma sep):','addchars',$token,10)."</td></tr>";
     $result.=&Apache::edit::end_table;      $result.=&Apache::edit::end_table;
   } 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','addchars');
     if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }      if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
   } elsif ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {    } elsif ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {
       my $size = &Apache::lonxml::get_param('size',$parstack,$safeeval);        my $size = &Apache::lonxml::get_param('size',$parstack,$safeeval);
Line 348  sub decideoutput { Line 371  sub decideoutput {
    $ENV{'request.course.id'}.     $ENV{'request.course.id'}.
    '.disable_receipt_display'} eq 'yes') {      '.disable_receipt_display'} eq 'yes') { 
       $message.=(($target eq 'web')?'<br />':' ').        $message.=(($target eq 'web')?'<br />':' ').
   &mt('Your receipt is').' '.&Apache::lonnet::receipt().    &mt('Your receipt is').' '.&Apache::lonnet::receipt($Apache::inputtags::part).
        (($target eq 'web')?&Apache::loncommon::help_open_topic('Receipt'):'');         (($target eq 'web')?&Apache::loncommon::help_open_topic('Receipt'):'');
   }    }
       }        }
Line 375  sub decideoutput { Line 398  sub decideoutput {
    $ENV{'request.course.id'}.     $ENV{'request.course.id'}.
    '.disable_receipt_display'} eq 'yes') {      '.disable_receipt_display'} eq 'yes') { 
       $message.=(($target eq 'web')?'<br />':' ').        $message.=(($target eq 'web')?'<br />':' ').
   'Your receipt is '.&Apache::lonnet::receipt().    'Your receipt is '.&Apache::lonnet::receipt($Apache::inputtags::part).
        (($target eq 'web')?&Apache::loncommon::help_open_topic('Receipt'):'');         (($target eq 'web')?&Apache::loncommon::help_open_topic('Receipt'):'');
   }    }
   $bgcolor=$possiblecolors{'correct'};    $bgcolor=$possiblecolors{'correct'};
Line 387  sub decideoutput { Line 410  sub decideoutput {
       $bgcolor=$possiblecolors{'no_feedback'};        $bgcolor=$possiblecolors{'no_feedback'};
       $button=1;        $button=1;
   } elsif ($award eq 'MISSING_ANSWER') {    } elsif ($award eq 'MISSING_ANSWER') {
       $message = &mt('Some parts were not submitted.');        $message = &mt('Some items were not submitted.');
       $bgcolor=$possiblecolors{'not_charged_try'};        $bgcolor=$possiblecolors{'not_charged_try'};
       $button = 1;        $button = 1;
   } elsif ($award eq 'ERROR') {    } elsif ($award eq 'ERROR') {
Line 414  sub decideoutput { Line 437  sub decideoutput {
       $bgcolor=$possiblecolors{'not_charged_try'};        $bgcolor=$possiblecolors{'not_charged_try'};
       $button=1;        $button=1;
   } elsif ($award eq 'SIG_FAIL') {    } elsif ($award eq 'SIG_FAIL') {
       $message = &mt("Please adjust significant figures.");# you provided %s significant figures";        $message = &mt("Significant figures are incorrect, submission was not graded.");# you provided %s significant figures";
       $bgcolor=$possiblecolors{'not_charged_try'};        $bgcolor=$possiblecolors{'not_charged_try'};
       $button=1;        $button=1;
   } elsif ($award eq 'UNIT_FAIL') {    } elsif ($award eq 'UNIT_FAIL') {
Line 457  sub decideoutput { Line 480  sub decideoutput {
   }    }
   if (lc($Apache::lonhomework::problemstatus) eq 'no'  &&     if (lc($Apache::lonhomework::problemstatus) eq 'no'  && 
       $Apache::inputtags::status[-1] ne 'SHOW_ANSWER') {        $Apache::inputtags::status[-1] ne 'SHOW_ANSWER') {
       $message = &mt("Answer Submitted");        $message = &mt("Answer Submitted: Your final submission will be graded after the due date.");
       $bgcolor=$possiblecolors{'correct'};        $bgcolor=$possiblecolors{'correct'};
       $button=1;        $button=1;
   }    }
Line 477  sub removealldata { Line 500  sub removealldata {
 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
   if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' &&    if (!$Apache::lonhomework::scantronmode &&
         $Apache::inputtags::status['-1'] ne 'CAN_ANSWER' &&
       $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER') {        $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER') {
     $Apache::lonhomework::results{"resource.$id.afterduedate"}=$award;      $Apache::lonhomework::results{"resource.$id.afterduedate"}=$award;
     return '';      return '';
Line 518  sub setgradedata { Line 542  sub setgradedata {
     } elsif ( $award eq 'INCORRECT' ) {      } elsif ( $award eq 'INCORRECT' ) {
       $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;
       if (lc($Apache::lonhomework::problemstatus) ne 'no') {        if (lc($Apache::lonhomework::problemstatus) eq 'no') {
   $Apache::lonhomework::results{"resource.$id.awarded"} = 0;    $Apache::lonhomework::results{"resource.$id.awarded"} = 0;
       }        }
       $Apache::lonhomework::results{"resource.$id.solved"} =        $Apache::lonhomework::results{"resource.$id.solved"} =
Line 544  sub setgradedata { Line 568  sub setgradedata {
       }        }
     }      }
   
     # check if this was a previous submission if it was delete the      # did either of the overall awards chage? If so ignore the 
     # unneeded data and update the previously_used attribute      # previous check
     if ( $previously_used eq 'PREVIOUSLY_USED') {      if (($Apache::lonhomework::results{"resource.$id.awarded"} eq
  if (lc($Apache::lonhomework::problemstatus) ne 'no') {   $Apache::lonhomework::history{"resource.$id.awarded"}) &&
     delete($Apache::lonhomework::results{"resource.$id.tries"});          ($Apache::lonhomework::results{"resource.$id.solved"} eq
     $Apache::lonhomework::results{"resource.$id.previous"} = '1';           $Apache::lonhomework::history{"resource.$id.solved"})) {
  }   # check if this was a previous submission if it was delete the
     } elsif ( $previously_used eq 'PREVIOUSLY_LAST') {   # unneeded data and update the previously_used attribute
       #delete all data as they student didn't do anything, but save   if ( $previously_used eq 'PREVIOUSLY_USED') {
       #the list of collaborators.      if (lc($Apache::lonhomework::problemstatus) ne 'no') {
       &removealldata($id);   delete($Apache::lonhomework::results{"resource.$id.tries"});
       #and since they didn't do anything we were never here   $Apache::lonhomework::results{"resource.$id.previous"} = '1';
       return '';      }
     } else {   } elsif ( $previously_used eq 'PREVIOUSLY_LAST') {
       $Apache::lonhomework::results{"resource.$id.previous"} = '0';      #delete all data as they student didn't do anything, but save
       #the list of collaborators.
       &removealldata($id);
       #and since they didn't do anything we were never here
       return '';
    } else {
       $Apache::lonhomework::results{"resource.$id.previous"} = '0';
    }
     }      }
   } elsif ( $Apache::lonhomework::history{"resource.$id.solved"} =~    } elsif ( $Apache::lonhomework::history{"resource.$id.solved"} =~
     /^correct/ ) {      /^correct/ ) {
Line 621  sub gradestatus { Line 652  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' && $status ne 'UNAVAILABLE') {      if ( $status ne 'CLOSED' && $status ne 'UNAVAILABLE' &&
          $status ne 'INVALID_ACCESS') {  
     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 631  sub gradestatus { Line 663  sub gradestatus {
       ($showbutton,$bgcolor,$message,$previousmsg) =        ($showbutton,$bgcolor,$message,$previousmsg) =
  &decideoutput($award,$solved,$previous,$target);   &decideoutput($award,$solved,$previous,$target);
       if ($target eq 'tex') {        if ($target eq 'tex') {
  $message=' '.$message.' ';   $message='\vskip 2 mm '.$message.' ';
       } else {        } else {
  $message="<td bgcolor=\"$bgcolor\">$message</td>";   $message="<td bgcolor=\"$bgcolor\">$message</td>";
  if ($previousmsg) {   if ($previousmsg) {
Line 642  sub gradestatus { Line 674  sub gradestatus {
     my $tries = $Apache::lonhomework::history{"resource.$id.tries"};      my $tries = $Apache::lonhomework::history{"resource.$id.tries"};
     my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries");      my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries");
     &Apache::lonxml::debug("got maxtries of :$maxtries:");      &Apache::lonxml::debug("got maxtries of :$maxtries:");
       #if tries are set to negative turn off the Tries/Button and messages
       if (defined($maxtries) && $maxtries < 0) { return ''; }
     if ( $tries eq '' ) { $tries = '0'; }      if ( $tries eq '' ) { $tries = '0'; }
     if ( $maxtries eq '' ) { $maxtries = '2'; }       if ( $maxtries eq '' ) { $maxtries = '2'; } 
     if ( $maxtries eq 'con_lost' ) { $maxtries = '0'; }       if ( $maxtries eq 'con_lost' ) { $maxtries = '0'; } 
       my $tries_text=&mt('Tries');
       if ( $Apache::lonhomework::type eq 'survey') { $tries_text=&mt('Submissions'); }
     if ( $showbutton ) {      if ( $showbutton ) {
       if ($target eq 'tex') {        if ($target eq 'tex') {
   if ($ENV{'request.state'} ne "construct" && $Apache::lonhomework::type ne 'exam') {    if ($ENV{'request.state'} ne "construct" && $Apache::lonhomework::type ne 'exam') {
       $trystr = ' {\vskip 1 mm \small \textit{'.&mt('Tries').'} '.$tries.'/'.$maxtries.'} \vskip 2 mm ';        $trystr = ' {\vskip 1 mm \small \textit{'.$tries_text.'} '.$tries.'/'.$maxtries.'} \vskip 2 mm ';
   } else {    } else {
       $trystr = '\vskip 0 mm ';        $trystr = '\vskip 0 mm ';
   }    }
       } else {        } else {
          $trystr = "<td>".&mt('Tries')." $tries/$maxtries</td>";    $trystr = "<td>".$tries_text." $tries";
     if($ENV{'request.state'} ne 'construct') {
         $trystr.="/$maxtries";
     } else {
         if (defined($Apache::inputtags::params{'maxtries'})) {
     $trystr.="/".$Apache::inputtags::params{'maxtries'};
         }
     }
     $trystr.="</td>";
       }        }
     }      }
     if ( $status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {$showbutton = 0;}      if ( $status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {$showbutton = 0;}
     if ( $showbutton ) {       if ( $showbutton ) { 
       if ($target ne 'tex') {        if ($target ne 'tex') {
         $button = '<br /><input type="submit" name="submit" value="'.&mt('Submit Answer').'" />';          $button = '<input type="submit" name="submit" value="'.&mt('Submit Answer').'" />';
       }        }
     }      }
     if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {      if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {
Line 678  sub gradestatus { Line 722  sub gradestatus {
     if ($target eq 'tex') {      if ($target eq 'tex') {
       return $button.' \vskip 0 mm '.$output.' ';        return $button.' \vskip 0 mm '.$output.' ';
     } else {      } else {
       return $button.'<table><tr>'.$output.'</tr></table>';        return '<table><tr><td>'.$button.'</td>'.$output.'</tr></table>';
     }      }
   }    }
 }  }

Removed from v.1.118  
changed lines
  Added in v.1.134


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