Diff for /loncom/homework/lonhomework.pm between versions 1.70 and 1.83

version 1.70, 2002/01/30 17:39:13 version 1.83, 2002/07/29 20:40:34
Line 28 Line 28
 # Guy Albertelli  # Guy Albertelli
 # 11/30 Gerd Kortemeyer  # 11/30 Gerd Kortemeyer
 # 6/1,8/17,8/18 Gerd Kortemeyer  # 6/1,8/17,8/18 Gerd Kortemeyer
   # 7/18 Jeremy Bowers
   
 package Apache::lonhomework;  package Apache::lonhomework;
 use strict;  use strict;
 use Apache::style;  use Apache::style();
 use Apache::lonxml;  use Apache::lonxml();
 use Apache::lonnet;  use Apache::lonnet();
 use Apache::lonplot;  use Apache::lonplot();
 use Apache::inputtags;  use Apache::inputtags();
 use Apache::structuretags;  use Apache::structuretags();
 use Apache::randomlabel;  use Apache::randomlabel();
 use Apache::response;  use Apache::response();
 use Apache::hint;  use Apache::hint();
 use Apache::outputtags;  use Apache::outputtags();
   use Apache::caparesponse();
   use Apache::radiobuttonresponse();
   use Apache::optionresponse();
   use Apache::imageresponse();
   use Apache::essayresponse();
   use Apache::externalresponse();
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
   use HTML::Entities();
   use Apache::loncommon();
 #use Time::HiRes qw( gettimeofday tv_interval );  #use Time::HiRes qw( gettimeofday tv_interval );
   
 BEGIN {  BEGIN {
Line 60  sub get_target { Line 69  sub get_target {
       return ('web');        return ('web');
     }      }
   } elsif ($ENV{'request.state'} eq "construct") {    } elsif ($ENV{'request.state'} eq "construct") {
       if ( defined($ENV{'form.grade_target'}) ) {
         return ($ENV{'form.grade_target'});
       }
     if ( defined($ENV{'form.preview'})) {      if ( defined($ENV{'form.preview'})) {
       if ( defined($ENV{'form.submitted'})) {        if ( defined($ENV{'form.submitted'})) {
  return ('grade', 'web');   return ('grade', 'web');
Line 76  sub get_target { Line 88  sub get_target {
  }   }
       } elsif ( $ENV{'form.problemmode'} eq 'Edit' ) {        } elsif ( $ENV{'form.problemmode'} eq 'Edit' ) {
  if ( $ENV{'form.submitted'} eq 'edit' ) {   if ( $ENV{'form.submitted'} eq 'edit' ) {
   return ('modified','edit');    if ( $ENV{'form.submit'} eq 'Submit Changes and View' ) {
       return ('modified','web','answer');
     } else {
       return ('modified','edit');
     }
  } else {   } else {
   return ('edit');    return ('edit');
  }   }
Line 128  sub check_access { Line 144  sub check_access {
   my $type;    my $type;
   my $passed;    my $passed;
   &Apache::lonxml::debug("checking for part :$id:");    &Apache::lonxml::debug("checking for part :$id:");
     &Apache::lonxml::debug("time:".time);
   foreach $temp ("opendate","duedate","answerdate") {    foreach $temp ("opendate","duedate","answerdate") {
     $lastdate = $date;      $lastdate = $date;
     $date = &Apache::lonnet::EXT("resource.$id.$temp");      $date = &Apache::lonnet::EXT("resource.$id.$temp");
Line 187  sub check_access { Line 204  sub check_access {
   
 sub showhash {  sub showhash {
   my (%hash) = @_;    my (%hash) = @_;
     &showhashsubset(\%hash,'');
     return '';
   }
   
   sub showhashsubset {
     my ($hash,$keyre) = @_;
   my $resultkey;    my $resultkey;
   foreach $resultkey (sort keys %hash) {    foreach $resultkey (sort keys %$hash) {
     &Apache::lonxml::debug("$resultkey ---- $hash{$resultkey}");      if ($resultkey =~ /$keyre/) {
         if (ref($$hash{$resultkey})) {
    if ($$hash{$resultkey} =~ /ARRAY/ ) {
     my $string="$resultkey ---- (";
     foreach my $elm (@{ $$hash{$resultkey} }) {
       $string.="$elm,";
     }
     chop($string);
     &Apache::lonxml::debug("$string)");
    } else {
     &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}");
    }
         } else {
    &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}");
         }
       }
   }    }
   &Apache::lonxml::debug("\n<br />restored values^</br>\n");    &Apache::lonxml::debug("\n<br />restored values^</br>\n");
   return '';    return '';
Line 255  sub handle_save_or_undo { Line 293  sub handle_save_or_undo {
   return $error;    return $error;
 }  }
   
   sub analyze {
     my ($request,$file) = @_;
     &Apache::lonxml::debug("Analyze");
     my $result=&Apache::lonnet::ssi($request->uri,('grade_target' => 'analyze'));
     &Apache::lonxml::debug(":$result:");
     (my $garbage,$result)=split(/_HASH_REF__/,$result,2);
     &showhash(&Apache::lonnet::str2hash($result));
     return $result;
   }
   
 sub editxmlmode {  sub editxmlmode {
   my ($request,$file) = @_;    my ($request,$file) = @_;
   my $result;    my $result;
Line 268  sub editxmlmode { Line 316  sub editxmlmode {
    \$ENV{'form.editxmltext'});     \$ENV{'form.editxmltext'});
     if (!$error) { $problem=&Apache::lonnet::getfile($file); }      if (!$error) { $problem=&Apache::lonnet::getfile($file); }
   }    }
   my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem);    &Apache::lonhomework::showhashsubset(\%ENV,'^form');
   if ($cols > 80) { $cols = 80; }    if ( $ENV{'form.submit'} eq 'Submit Changes and View' ) {
   $result.='<html><body bgcolor="#FFFFFF">      &Apache::lonhomework::showhashsubset(\%ENV,'^form');
       $ENV{'form.problemmode'}='View';
       &renderpage($request,$file);
     } else {
       my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem);
       my $xml_help = Apache::loncommon::help_open_topic("Problem_Editor_XML_Index");
       if ($cols > 80) { $cols = 80; }
       $result.='<html><body bgcolor="#FFFFFF">
             <form name="lonhomework" method="POST" action="'.              <form name="lonhomework" method="POST" action="'.
       $ENV{'request.uri'}.'">        $ENV{'request.uri'}.'">
             <input type="hidden" name="problemmode" value="EditXML" />              <input type="hidden" name="problemmode" value="EditXML" />
             <input type="submit" name="problemmode" value="View" />              <input type="submit" name="problemmode" value="Discard Edits and View" />
             <input type="submit" name="problemmode" value="Edit" />              <input type="submit" name="problemmode" value="Edit" />
             <hr />              <hr />
             <input type="submit" name="submit" value="Submit Changes" />              <input type="submit" name="submit" value="Submit Changes" />
               <input type="submit" name="submit" value="Submit Changes and View" />
             <input type="submit" name="Undo" value="undo" />              <input type="submit" name="Undo" value="undo" />
             <hr />              <hr />
               ' . $xml_help . ' Problem Help<br>
             <textarea rows="'.$rows.'" cols="'.$cols.'" name="editxmltext">'.              <textarea rows="'.$rows.'" cols="'.$cols.'" name="editxmltext">'.
       $problem.'</textarea>        &HTML::Entities::encode($problem).'</textarea>
             </form></body></html>';              </form></body></html>';
   $request->print($result);      $request->print($result);
     }
   return '';    return '';
 }  }
   
Line 304  sub renderpage { Line 362  sub renderpage {
     my $result = '';      my $result = '';
     &Apache::inputtags::initialize_inputtags;      &Apache::inputtags::initialize_inputtags;
     &Apache::edit::initialize_edit;      &Apache::edit::initialize_edit;
       if ($target eq 'analyze') { %Apache::lonhomework::anaylze=(); }
     if ($target eq 'web') {      if ($target eq 'web') {
       if (&Apache::lonnet::symbread() eq '') {        my ($symb)=&Apache::lonxml::whichuser();
         if ($symb eq '') {
  if ($ENV{'request.state'} eq "construct") {   if ($ENV{'request.state'} eq "construct") {
  } else {   } else {
   $request->print("Browsing or <a href=\"/adm/ambiguous\">ambiguous</a> reference, submissions ignored<br />");    $request->print("Browsing or <a href=\"/adm/ambiguous\">ambiguous</a> reference, submissions ignored<br />");
Line 314  sub renderpage { Line 374  sub renderpage {
       #if ($Apache::lonhomework::viewgrades eq 'F') {&createmenu('grade',$request); }        #if ($Apache::lonhomework::viewgrades eq 'F') {&createmenu('grade',$request); }
     }      }
     #if ($target eq 'grade') { &showhash(%Apache::lonhomework::history); }      #if ($target eq 'grade') { &showhash(%Apache::lonhomework::history); }
       #if ($target eq 'web') { &showhash(%ENV); }
   
     my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm');      my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm');
     if ($default == -1) {      if ($default == -1) {
Line 321  sub renderpage { Line 382  sub renderpage {
       $default='';        $default='';
     }      }
     &Apache::lonxml::debug("Should be parsing now");      &Apache::lonxml::debug("Should be parsing now");
     $result = &Apache::lonxml::xmlparse($target, $problem,      $result = &Apache::lonxml::xmlparse($request, $target, $problem,
  $default.&setup_vars($target),%mystyle);   $default.&setup_vars($target),%mystyle);
   
     #$request->print("Result follows:");      #$request->print("Result follows:");
     if ($target eq 'modified') {      if ($target eq 'modified') {
       &handle_save_or_undo($request,\$problem,\$result);        &handle_save_or_undo($request,\$problem,\$result);
     } else {      } else {
         if ($target eq 'analyze') {
    $result=&Apache::lonnet::hashref2str(\%Apache::lonhomework::analyze);
    undef(%Apache::lonhomework::analyze);
         }
       #my $td=&tv_interval($t0);        #my $td=&tv_interval($t0);
       #if ( $Apache::lonxml::debug) {        #if ( $Apache::lonxml::debug) {
  #$result =~ s:</body>::;   #$result =~ s:</body>::;
Line 435  sub handler { Line 500  sub handler {
   $Apache::lonhomework::browse= &Apache::lonnet::allowed('bre',$ENV{'request.filename'});    $Apache::lonhomework::browse= &Apache::lonnet::allowed('bre',$ENV{'request.filename'});
   $Apache::lonhomework::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'});    $Apache::lonhomework::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'});
   &Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:");    &Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:");
     # some times multiple problemmodes are submitted, need to select
     # the last one
     &Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'});
     if ( defined($ENV{'form.problemmode'}) &&
          ref($ENV{'form.problemmode'}) ) {
       &Apache::lonxml::debug("Problem Mode ".join(",",@$ENV{'form.problemmode'}));
       my $mode=$ENV{'form.problemmode'}->[-1];
       undef $ENV{'form.problemmode'};
       $ENV{'form.problemmode'}=$mode;
     }
   &Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'});    &Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'});
   my $file=&Apache::lonnet::filelocation("",$request->uri);    my $file=&Apache::lonnet::filelocation("",$request->uri);
   
Line 460  sub handler { Line 535  sub handler {
  &renderpage($request,$file);   &renderpage($request,$file);
       } elsif ($ENV{'form.problemmode'} eq 'EditXML') {        } elsif ($ENV{'form.problemmode'} eq 'EditXML') {
  &editxmlmode($request,$file);   &editxmlmode($request,$file);
         } elsif ($ENV{'form.problemmode'} eq 'Answer Distribution') {
    &analyze($request,$file);
       } else {        } else {
  &renderpage($request,$file);   &renderpage($request,$file);
       }        }
Line 469  sub handler { Line 546  sub handler {
     }      }
   } else {    } else {
     # just render the page normally outside of construction space      # just render the page normally outside of construction space
       &Apache::lonxml::debug("not construct");
     &renderpage($request,$file);      &renderpage($request,$file);
   }    }
   #my $td=&tv_interval($t0);    #my $td=&tv_interval($t0);

Removed from v.1.70  
changed lines
  Added in v.1.83


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