File:  [LON-CAPA] / loncom / homework / lonhomework.pm
Revision 1.17: download - view: text, annotated - select for diffs
Thu Nov 30 16:20:49 2000 UTC (23 years, 5 months ago) by www
Branches: MAIN
CVS tags: HEAD
Now has subhandler which can be called externally (for example by publisher)

    1: # The LON-CAPA Homework handler
    2: # Guy Albertelli
    3: # 11/30 Gerd Kortemeyer
    4: 
    5: package Apache::lonhomework;
    6: use strict;
    7: use Apache::style;
    8: use Apache::lonxml;
    9: use Apache::lonnet;
   10: use Apache::inputtags;
   11: use Apache::structuretags;
   12: use Apache::response;
   13: 
   14: 
   15: sub subhandler {
   16:   my ($target,$problem)=@_;
   17:   my %mystyle;
   18:   my $result = '';
   19:   &Apache::inputtags::initialize_inputtags;
   20:   %Apache::lonhomework::results=();
   21:   %Apache::lonhomework::history=&Apache::lonnet::restore;
   22:   #ignore error conditions
   23:   my ($temp)=keys %Apache::lonhomework::history ;
   24:   if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } 
   25: 
   26:   my $resultkey;
   27:   foreach $resultkey (sort keys %Apache::lonhomework::history) {
   28:     &Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::history{$resultkey}");
   29:   }
   30:   &Apache::lonxml::debug("\n<br>restored values^</br>\n");
   31:   my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm');
   32:   if ($default == -1) {
   33:     &Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>");
   34:     $default='';
   35:   }
   36: 
   37:   return Apache::lonxml::xmlparse($target, $problem,
   38: 				     $default.&setup_vars($target),%mystyle);
   39: }
   40: 
   41: sub get_target {
   42:   if ( $ENV{'request.state'} eq "published") {
   43:     return 'web';
   44:   } elsif ($ENV{'request.state'} eq "construct") {
   45:     if ( defined $ENV{'form.preview'}) {
   46:       return 'web';
   47:     } else {
   48:       return 'edit';
   49:     }
   50:   }
   51: }
   52: 
   53: sub setup_vars {
   54:   my ($target) = @_;
   55:   return ';'
   56: #  return ';$external::target='.$target.';';
   57: }
   58: 
   59: sub send_header {
   60:   my ($request)= @_;
   61:   $request->print(&Apache::lontexconvert::header());
   62:   $ENV{'request.uri'}=$request->uri;
   63: #  $request->print('<form name='.$ENV{'form.request.prefix'}.'lonhomework method="POST" action="'.$request->uri.'">');
   64: }
   65: 
   66: sub send_footer {
   67:   my ($request)= @_;
   68: #  $request->print('</form>');
   69:   $request->print(&Apache::lontexconvert::footer());
   70: }
   71: 
   72: sub getfilenothere {
   73:   my ($filename) = @_;
   74:   my $a="";
   75:   if (! -e $filename ) {
   76:     &Apache::lonnet::subscribe($filename);
   77:     &Apache::lonnet::repcopy($filename);
   78:   }
   79:   {
   80:     my $fh=Apache::File->new($filename);
   81: 
   82:     while (<$fh>) {
   83:       $a .=$_;
   84:     }
   85:   }
   86:   return $a
   87: }
   88: 
   89: sub handler {
   90:   my $request=shift;
   91: 
   92:   $Apache::lonxml::debug=1;
   93:   if ($ENV{'browser.mathml'}) {
   94:     $request->content_type('text/xml');
   95:   } else {
   96:     $request->content_type('text/html');
   97:   }
   98:   $request->send_http_header;
   99:   return 'OK' if $request->header_only;
  100: 
  101:   &Apache::lonhomework::send_header($request);
  102:   my $file=&Apache::lonnet::filelocation("",$request->uri);
  103:   my $problem=&Apache::lonnet::getfile($file);
  104:   if ($problem == -1) {
  105:     &Apache::lonxml::error("<b> Unable to find <i>$file</i></b>");
  106:     $problem='';
  107:   }
  108: 
  109:   my $result=&subhandler(&get_target(),$problem);
  110: 
  111:   #$request->print("Result follows:");
  112:   $request->print($result);
  113:   #$request->print(":Result ends");
  114: 
  115:   my $temp;
  116:   my $resultkey;
  117:   foreach $resultkey (sort keys %Apache::lonhomework::results) {
  118:     &Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::results{$resultkey}");
  119:   }
  120:   &Apache::lonxml::debug("\n<br>storing values^</br>\n");
  121: 
  122:   &Apache::lonhomework::send_footer($request);
  123:   ($temp) = keys %Apache::lonhomework::results;
  124:   if ( $temp ne '' ) {
  125:     &Apache::lonxml::debug("Store return message:".&Apache::lonnet::cstore(%Apache::lonhomework::results));
  126:   }
  127:   return 'OK';
  128: 
  129: }
  130: 
  131: 1;
  132: __END__

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