Diff for /loncom/homework/lonhomework.pm between versions 1.82 and 1.105

version 1.82, 2002/07/18 20:52:36 version 1.105, 2002/12/11 15:33:55
Line 42  use Apache::randomlabel(); Line 42  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 HTML::Entities();
 use Apache::loncommon;  use Apache::loncommon();
 #use Time::HiRes qw( gettimeofday tv_interval );  #use Time::HiRes qw( gettimeofday tv_interval );
   
 BEGIN {  BEGIN {
Line 53  BEGIN { Line 59  BEGIN {
   
 sub get_target {  sub get_target {
   if ( $ENV{'request.state'} eq "published") {    if ( $ENV{'request.state'} eq "published") {
     if ( defined($ENV{'form.grade_target'})       if ( defined($ENV{'form.grade_target'}  ) 
    && ($ENV{'form.grade_target'} eq 'tex')) {
         return ($ENV{'form.grade_target'});
       } elsif ( defined($ENV{'form.grade_target'}  ) 
  && ($Apache::lonhomework::viewgrades == 'F' )) {   && ($Apache::lonhomework::viewgrades == 'F' )) {
       return ($ENV{'form.grade_target'});        return ($ENV{'form.grade_target'});
     }      }
    
     if ( defined($ENV{'form.submitted'})) {      if ( defined($ENV{'form.submitted'})) {
       return ('grade', 'web');        return ('grade', 'web');
     } else {      } else {
Line 73  sub get_target { Line 83  sub get_target {
  return ('web');   return ('web');
       }        }
     } else {      } else {
       if ( $ENV{'form.problemmode'} eq 'View' ) {        if ( $ENV{'form.problemmode'} eq 'View' ||
      $ENV{'form.problemmode'} eq 'Discard Edits and View') {
  if ( defined($ENV{'form.submitted'}) &&   if ( defined($ENV{'form.submitted'}) &&
      (!defined($ENV{'form.resetdata'})) ) {       (!defined($ENV{'form.resetdata'})) ) {
   return ('grade', 'web','answer');    return ('grade', 'web','answer');
Line 128  sub send_footer { Line 139  sub send_footer {
   
 $Apache::lonxml::browse='';  $Apache::lonxml::browse='';
   
   # JB, 9/24/2002: Any changes in this function may require a change
   # in lonnavmaps::resource::getDateStatus.
 sub check_access {  sub check_access {
   my ($id) = @_;    my ($id) = @_;
   my $date ='';    my $date ='';
   my $status = '';    my $status;
   my $datemsg = '';    my $datemsg = '';
   my $lastdate = '';    my $lastdate = '';
   my $temp;    my $temp;
Line 142  sub check_access { Line 155  sub check_access {
   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");
       my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type");
       if ($thistype =~ /^(con_lost|no_such_host)/ ||
    $date     =~ /^(con_lost|no_such_host)/) {
    $status='UNAVAILABLE';
    $date="may open later.";
    return($status,$date);
       }
       if ($thistype eq 'date_interval') {
    if ($temp eq 'opendate') {
              $date=&Apache::lonnet::EXT("resource.$id.duedate")-$date;
           }
           if ($temp eq 'answerdate') {
              $date=&Apache::lonnet::EXT("resource.$id.duedate")+$date;
           }
       }
     &Apache::lonxml::debug("found :$date: for :$temp:");      &Apache::lonxml::debug("found :$date: for :$temp:");
     if ($date eq '') {      if ($date eq '') {
       $date = "an unknown date"; $passed = 0;        $date = "an unknown date"; $passed = 0;
Line 198  sub check_access { Line 226  sub check_access {
   
 sub showhash {  sub showhash {
   my (%hash) = @_;    my (%hash) = @_;
   &showhashsubset(\%hash,'');    &showhashsubset(\%hash,'.');
   return '';    return '';
 }  }
   
Line 287  sub handle_save_or_undo { Line 315  sub handle_save_or_undo {
   return $error;    return $error;
 }  }
   
   sub analyze_header {
       my ($request) = @_;
       my $result.='<html><body bgcolor="#FFFFFF">
               <form name="lonhomework" method="POST" action="'.
         $ENV{'request.uri'}.'">
               <input type="submit" name="problemmode" value="EditXML" />
               <input type="submit" name="problemmode" value="Edit" />
               <hr />
               <input type="submit" name="submit" value="View" />
               <hr />
               List of possible answers:
               </form>';
       $request->print($result);
       $request->rflush();
   }
   
 sub analyze {  sub analyze {
   my ($request,$file) = @_;      my ($request,$file) = @_;
   &Apache::lonxml::debug("Analyze");      &Apache::lonxml::debug("Analyze");
   my $result=&Apache::lonnet::ssi($request->uri,('grade_target' => 'analyze'));      my $result;
   &Apache::lonxml::debug(":$result:");      my %overall;
   (my $garbage,$result)=split(/_HASH_REF__/,$result,2);      my %allparts;
   &showhash(&Apache::lonnet::str2hash($result));      my $rndseed=$ENV{'form.rndseed'};
   return $result;      &analyze_header($request);
       for(my $i=1;$i<$ENV{'form.numtoanalyze'}+1;$i++) {
    my $subresult=&Apache::lonnet::ssi($request->uri,
      ('grade_target' => 'analyze'),
      ('rndseed' => $i));
    &Apache::lonxml::debug(":$subresult:");
    (my $garbage,$subresult)=split(/_HASH_REF__/,$subresult,2);
    my %analyze=&Apache::lonnet::str2hash($subresult);
    &Apache::lonhomework::showhash(%analyze);
    my @parts = @{ $analyze{'parts'} };
    foreach my $part (@parts) {
       if (!exists($allparts{$part})) {$allparts{$part}=1;};
       if ($analyze{$part.'.type'} eq 'numericalresponse') {
    push( @{ $overall{$part.'.answer'} },
         [@{ $analyze{$part.'.answer'} }]);
       }
    }
       }
       foreach my $part (keys(%allparts)) {
    $request->print('<table><tr><td>Part '.$part.'</td></tr>');
    foreach my $answer (sort {$a->[0] <=> $b->[0]} (@{ $overall{$part.'.answer'} })) {
       $request->print('<tr><td>'.join('</td><td>',@{ $answer }).
       '</td></tr>');
    }
       }
       &Apache::lonhomework::showhash(%overall);
       return $result;
 }  }
   
 sub editxmlmode {  sub editxmlmode {
Line 319  sub editxmlmode { Line 389  sub editxmlmode {
     my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem);      my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem);
     my $xml_help = Apache::loncommon::help_open_topic("Problem_Editor_XML_Index");      my $xml_help = Apache::loncommon::help_open_topic("Problem_Editor_XML_Index");
     if ($cols > 80) { $cols = 80; }      if ($cols > 80) { $cols = 80; }
       if ($cols < 70) { $cols = 70; }
       if ($rows < 20) { $rows = 20; }
     $result.='<html><body bgcolor="#FFFFFF">      $result.='<html><body bgcolor="#FFFFFF">
             <form name="lonhomework" method="POST" action="'.              <form name="lonhomework" method="POST" action="'.
       $ENV{'request.uri'}.'">        $ENV{'request.uri'}.'">
Line 354  sub renderpage { Line 426  sub renderpage {
   
     my %mystyle;      my %mystyle;
     my $result = '';      my $result = '';
     &Apache::inputtags::initialize_inputtags;      &Apache::inputtags::initialize_inputtags();
     &Apache::edit::initialize_edit;      &Apache::outputtags::initialize_outputtags();
       &Apache::edit::initialize_edit();
     if ($target eq 'analyze') { %Apache::lonhomework::anaylze=(); }      if ($target eq 'analyze') { %Apache::lonhomework::anaylze=(); }
     if ($target eq 'web') {      if ($target eq 'answer') { &showhash(%Apache::lonhomework::history); }
       my ($symb)=&Apache::lonxml::whichuser();      if ($target eq 'web') {&Apache::lonhomework::showhashsubset(\%ENV,'^form');}
       if ($symb eq '') {  
  if ($ENV{'request.state'} eq "construct") {  
  } else {  
   $request->print("Browsing or <a href=\"/adm/ambiguous\">ambiguous</a> reference, submissions ignored<br />");  
  }  
       }  
       #if ($Apache::lonhomework::viewgrades eq 'F') {&createmenu('grade',$request); }  
     }  
     #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');  
     if ($default == -1) {  
       &Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>");  
       $default='';  
     }  
     &Apache::lonxml::debug("Should be parsing now");      &Apache::lonxml::debug("Should be parsing now");
     $result = &Apache::lonxml::xmlparse($request, $target, $problem,      $result = &Apache::lonxml::xmlparse($request, $target, $problem,
  $default.&setup_vars($target),%mystyle);   &setup_vars($target),%mystyle);
   
     #$request->print("Result follows:");      #$request->print("Result follows:");
     if ($target eq 'modified') {      if ($target eq 'modified') {
Line 404  sub renderpage { Line 462  sub renderpage {
 sub get_template_list {  sub get_template_list {
   my ($namewanted,$extension) = @_;    my ($namewanted,$extension) = @_;
   my $result;    my $result;
     my @allnames;
   &Apache::lonxml::debug("Looking for :$extension:");    &Apache::lonxml::debug("Looking for :$extension:");
   foreach my $file (</home/httpd/html/res/adm/includes/templates/*.$extension>) {    foreach my $file (</home/httpd/html/res/adm/includes/templates/*.$extension>) {
     my $name=&Apache::lonnet::metadata($file,'title');      my $name=&Apache::lonnet::metadata($file,'title');
Line 411  sub get_template_list { Line 470  sub get_template_list {
       $result=$file;        $result=$file;
       last;        last;
     } else {      } else {
       $result.="<option>$name</option>";   if ($name) { push (@allnames, $name); }
     }      }
   }    }
     if (@allnames && !$result) {
       $result="<option>Select a $extension type</option>\n<option>".
         join('</option><option>',sort(@allnames)).'</option>';
     }
   return $result;    return $result;
 }  }
   
Line 422  sub newproblem { Line 485  sub newproblem {
     my $extension=$request->uri;      my $extension=$request->uri;
     $extension=~s:^.*\.([\w]+)$:$1:;      $extension=~s:^.*\.([\w]+)$:$1:;
     &Apache::lonxml::debug("Looking for :$extension:");      &Apache::lonxml::debug("Looking for :$extension:");
     if ($ENV{'form.template'}) {      if ($ENV{'form.template'} &&
    $ENV{'form.template'} ne "Select a $extension type") {
  use File::Copy;   use File::Copy;
  my $file = &get_template_list($ENV{'form.template'},$extension);   my $file = &get_template_list($ENV{'form.template'},$extension);
  my $dest = &Apache::lonnet::filelocation("",$request->uri);   my $dest = &Apache::lonnet::filelocation("",$request->uri);
Line 437  sub newproblem { Line 501  sub newproblem {
  my $dest = &Apache::lonnet::filelocation("",$request->uri);   my $dest = &Apache::lonnet::filelocation("",$request->uri);
  copy($templatefilename,$dest);   copy($templatefilename,$dest);
  &renderpage($request,$dest);   &renderpage($request,$dest);
     }else {      } else {
  my $templatelist=&get_template_list('',$extension);   my $templatelist=&get_template_list('',$extension);
  my $url=$request->uri;   my $url=$request->uri;
  my $dest = &Apache::lonnet::filelocation("",$request->uri);   my $dest = &Apache::lonnet::filelocation("",$request->uri);
  if (!defined($templatelist)) {   my $instructions;
     # We didn't find a template, so just create a blank problem.   if ($templatelist) { $instructions=", select a template from the pull-down menu below.<br />Then";}
     $request->print(<<ENDNEWPROBLEM);  
 <body bgcolor="#FFFFFF">  
 The requested file $url doesn\'t exist. You can create a new $extension <br />  
 <form action="$url" method="POST">  
 <input type="submit" name="newfile" value="New $extension"><br />  
 </form>  
 </body>  
 ENDNEWPROBLEM  
             return '';  
         }  
  $request->print(<<ENDNEWPROBLEM);   $request->print(<<ENDNEWPROBLEM);
 <body bgcolor="#FFFFFF">  <body bgcolor="#FFFFFF">
 The requested file $url doesn\'t exist. You can create a new $extension <br />  <h1>Creating a new $extension resource</h1>
 <form action="$url" method="POST">  The requested file <tt>$url</tt> currently does not exist.
 <input type="submit" value="New $extension"><br />  <p>
 <select name="template">  To create a new $extension$instructions click on the "Create $extension" button.
 $templatelist  </p>
 </select>  <p><form action="$url" method="POST">
 </form>  
 </body>  
 ENDNEWPROBLEM  ENDNEWPROBLEM
    if (defined($templatelist)) {
       $request->print("<select name=\"template\">$templatelist</select>");
    }
    $request->print("<br /><input type=\"submit\" name=\"newfile\" value=\"Create $extension\" />");
    $request->print("</form></p></body>");
     }      }
     return '';      return '';
 }  }
Line 485  sub handler { Line 542  sub handler {
   #my $t0 = [&gettimeofday()];    #my $t0 = [&gettimeofday()];
   my $request=$_[0];    my $request=$_[0];
   
   if ( $ENV{'user.name'} eq 'albertel' ) {$Apache::lonxml::debug=1;}  #  if ( $ENV{'user.name'} eq 'albertel' ) {$Apache::lonxml::debug=1;}
     $Apache::lonxml::debug=$ENV{'user.debug'};
   
   if (&setupheader($request)) { return OK; }    if (&setupheader($request)) { return OK; }
   $ENV{'request.uri'}=$request->uri;    $ENV{'request.uri'}=$request->uri;

Removed from v.1.82  
changed lines
  Added in v.1.105


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.