Diff for /loncom/homework/lonhomework.pm between versions 1.36 and 1.47

version 1.36, 2001/02/07 00:29:30 version 1.47, 2001/06/26 21:39:15
Line 14  use Apache::response; Line 14  use Apache::response;
 use Apache::hint;  use Apache::hint;
 use Apache::outputtags;  use Apache::outputtags;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
   #use Time::HiRes qw( gettimeofday tv_interval );
   
   sub BEGIN {
     &Apache::lonxml::register_insert();
   }
   
 sub get_target {  sub get_target {
   if ( $ENV{'request.state'} eq "published") {    if ( $ENV{'request.state'} eq "published") {
Line 30  sub get_target { Line 35  sub get_target {
  return ('web');   return ('web');
       }        }
     } else {      } else {
       #return ('edit');        if ( $ENV{'form.problemmode'} eq 'View' ) {
       #edit is currently broken   if ( defined $ENV{'form.submitted'}) {
       return ('web');    return ('grade', 'web');
    } else {
     return ('web');
    }
         } elsif ( $ENV{'form.problemmode'} eq 'Edit' ) {
    if ( $ENV{'form.submitted'} eq 'edit' ) {
     return ('modified','edit');
    } else {
     return ('edit');
    }
         } else {
    return ('web');
         }
     }      }
   }    }
   return ();    return ();
Line 47  sub setup_vars { Line 64  sub setup_vars {
 sub send_header {  sub send_header {
   my ($request)= @_;    my ($request)= @_;
   $request->print(&Apache::lontexconvert::header());    $request->print(&Apache::lontexconvert::header());
   $ENV{'request.uri'}=$request->uri;  
 #  $request->print('<form name='.$ENV{'form.request.prefix'}.'lonhomework method="POST" action="'.$request->uri.'">');  #  $request->print('<form name='.$ENV{'form.request.prefix'}.'lonhomework method="POST" action="'.$request->uri.'">');
 }  }
   
Line 55  sub createmenu { Line 71  sub createmenu {
   my ($which,$request)=@_;    my ($which,$request)=@_;
   if ($which eq 'grade') {    if ($which eq 'grade') {
     $request->print('<script language="JavaScript">       $request->print('<script language="JavaScript"> 
           hwkmenu=window.open("/res/adm/pages/homeworkmenu.html","LONCAPAhomeworkmenu",            hwkmenu=window.open("/res/adm/pages/homeworkmenu.html","homeworkremote",
                  "height=350,width=150,menubar=no");                   "height=350,width=150,menubar=no");
           </script>');            </script>');
   }    }
Line 128  sub check_date { Line 144  sub check_date {
   return ($status,$datemsg);    return ($status,$datemsg);
 }  }
   
 sub handler {  sub showhash {
   my $request=$_[0];    my (%hash) = @_;
     my $resultkey;
     foreach $resultkey (sort keys %hash) {
       &Apache::lonxml::debug("$resultkey ---- $hash{$resultkey}");
     }
     &Apache::lonxml::debug("\n<br />restored values^</br>\n");
     return '';
   }
   
   if ( $ENV{'user.name'} eq 'albertel' ) {$Apache::lonxml::debug=1;} else {$Apache::lonxml::debug=0;}  sub setuppermissions {
       $Apache::lonhomework::browse= &Apache::lonnet::allowed('bre',$ENV{'request.filename'});
   my (@targets) = &get_target();    $Apache::lonhomework::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'});
     return ''
   }
   
   sub setupheader {
     my $request=$_[0];
   if ($ENV{'browser.mathml'}) {    if ($ENV{'browser.mathml'}) {
     $request->content_type('text/xml');      $request->content_type('text/xml');
   } else {    } else {
Line 142  sub handler { Line 169  sub handler {
   }    }
   $request->send_http_header;    $request->send_http_header;
   return OK if $request->header_only;    return OK if $request->header_only;
     return ''
   }
   
   #setup permissions  sub handle_save_or_undo {
   $Apache::lonhomework::browse= &Apache::lonnet::allowed('bre');    my ($request,$problem,$result) = @_;
   $Apache::lonhomework::viewgrades=&Apache::lonnet::allowed('vgr');    my $fileout = &Apache::lonnet::filelocation("",$request->uri);
   &Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:");    my $filesave=$fileout.".bak";
   
   #check if we know where we are    if ($ENV{'form.Undo'} eq 'undo') {
   if ($ENV{'request.course.fn'} && !&Apache::lonnet::symbread()) {       if (copy($filesave,$fileout)) {
     # if we are browsing we might not be able to know where we are        $request->print("<b>Undid changes, Copied $filesave to $fileout<br /></b>");
     if ($Apache::lonhomework::browse ne 'F') {      } else {
       #should know where we are, so ask        $request->print("<font color=\"red\" size=\"+1\"><b>Unable to undo, unable to copy $filesave to $fileout<br /></b></font>");
       $request->internal_redirect('/adm/ambiguous'); return;       }
     } else {
       my $fs=Apache::File->new(">$filesave");
       if (defined($fs)) {
         print $fs $$problem;
         $request->print("<b>Making Backup to $filesave</b><br />");
       } else {
         $request->print("<font color=\"red\" size=\"+1\"><b>Unable to make backup $filesave</b></font>");
       }
       my $fh=Apache::File->new(">$fileout");
       if (defined($fh)) {
         print $fh $$result;
         $request->print("<b>Saving Modifications to $fileout</b><br />");
       } else {
         $request->print("<font color=\"red\" size=\"+1\"><b>Unable to write to $fileout</b></font>");
     }      }
   }    }
   }
   
   sub renderpage {
     my ($request,$file) = @_;
   
   &Apache::lonhomework::send_header($request);    my (@targets) = &get_target();
     
   foreach my $target (@targets) {    foreach my $target (@targets) {
     my $file=&Apache::lonnet::filelocation("",$request->uri);      #my $t0 = [&gettimeofday()];
     my $problem=&Apache::lonnet::getfile($file);      my $problem=&Apache::lonnet::getfile($file);
     if ($problem == -1) {      if ($problem == -1) {
       &Apache::lonxml::error("<b> Unable to find <i>$file</i></b>");        &Apache::lonxml::error("<b> Unable to find <i>$file</i></b>");
       $problem='';        $problem='';
     }      }
       
     my %mystyle;      my %mystyle;
     my $result = '';      my $result = '';
     &Apache::inputtags::initialize_inputtags;      &Apache::inputtags::initialize_inputtags;
       &Apache::edit::initialize_edit;
     %Apache::lonhomework::results=();      %Apache::lonhomework::results=();
     %Apache::lonhomework::history=&Apache::lonnet::restore;      %Apache::lonhomework::history=&Apache::lonnet::restore();
     #ignore error conditions      #ignore error conditions
     my ($temp)=keys %Apache::lonhomework::history ;      my ($temp)=keys %Apache::lonhomework::history ;
     if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); }       if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } 
     if ($target eq 'web') {      if ($target eq 'web') {
       if (&Apache::lonnet::symbread() eq '') {        if (&Apache::lonnet::symbread() eq '') {
  if ($ENV{'request.state'} eq "construct") {   if ($ENV{'request.state'} eq "construct") {
   $request->print("In construction space, submissions ignored<br>");    $request->print("In construction space, submissions ignored<br />");
  } 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 />");
  }   }
       }        }
       if ($Apache::lonhomework::viewgrades eq 'F') {&createmenu('grade',$request); }        #if ($Apache::lonhomework::viewgrades eq 'F') {&createmenu('grade',$request); }
     }  
     if ($target eq 'grade') {  
       my $resultkey;  
       foreach $resultkey (sort keys %Apache::lonhomework::history) {  
  &Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::history{$resultkey}");  
       }  
       &Apache::lonxml::debug("\n<br>restored values^</br>\n");  
     }      }
       if ($target eq 'grade') { &showhash(%Apache::lonhomework::history); }
   
     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) {
       &Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>");        &Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>");
Line 201  sub handler { Line 243  sub handler {
  $default.&setup_vars($target),%mystyle);   $default.&setup_vars($target),%mystyle);
   
     #$request->print("Result follows:");      #$request->print("Result follows:");
     $request->print($result);      if ($target eq 'modified') {
         &handle_save_or_undo($request,\$problem,\$result);
       } else {
         #my $td=&tv_interval($t0);
         #if ( $Apache::lonxml::debug) {
    #$result =~ s:</body>::;
    #$result.="<br />Spent $td seconds processing target $target\n</body>";
         #}
         $request->print($result);
       }
     #$request->print(":Result ends");      #$request->print(":Result ends");
     if ($target eq 'grade') {      if ($target eq 'grade') { &showhash(%Apache::lonhomework::results); }
   
       my $resultkey;      #store new values
       foreach $resultkey (sort keys %Apache::lonhomework::results) {  
  &Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::results{$resultkey}");  
       }  
       &Apache::lonxml::debug("\n<br>storing values^</br>\n");  
     }  
       
     my ($temp) = keys %Apache::lonhomework::results;      my ($temp) = keys %Apache::lonhomework::results;
     if ( $temp ne '' ) {      if ( $temp ne '' ) {
       &Apache::lonxml::debug("Store return message:".&Apache::lonnet::cstore(%Apache::lonhomework::results));        &Apache::lonxml::debug("Store return message:".
        &Apache::lonnet::cstore(\%Apache::lonhomework::results));
       }
       #my $td=&tv_interval($t0);
     }
   }
   
   # with no arg it returns a HTML <option> list of the template titles
   # with one arg it returns the filename associated with the arg passed
   sub get_template_list {
     my ($namewanted) = @_;
     my $result;
     foreach my $file (</home/httpd/html/res/adm/includes/templates/*.problem>) {
       my $name=&Apache::lonnet::metadata($file,'title');
       if ($namewanted && ($name eq $namewanted)) {
         $result=$file;
         last;
       } else {
         $result.="<option>$name</option>";
       }
     }
     return $result;
   }
   
   sub newproblem {
     my ($request) = @_;
   
     if ($ENV{'form.template'}) {
       use File::Copy;
       my $file = &get_template_list($ENV{'form.template'});
       my $dest = &Apache::lonnet::filelocation("",$request->uri);
       copy($file,$dest);
       &renderpage($request,$file);
     } else {
       my $templatelist=&get_template_list();
       my $url=$request->uri;
       $request->print(<<ENDNEWPROBLEM);
   <body bgcolor="#FFFFFF">
   The request file $url doesn\'t exist. You can create a new problem <br />
   <form action="$url" method="POST">
   <input type="submit" value="New Problem"><br />
   <select name="template">
   $templatelist
   </select>
   </form>
   </body>
   ENDNEWPROBLEM
     }
   
     return '';
   }
   
   sub view_or_edit_menu {
     my ($request) = @_;
     my $url=$request->uri;
     $request->print(<<EDITMENU);
   <body bgcolor="#FFFFFF">
   <form action="$url" method="POST">
   Would you like to <input type="submit" name="problemmode" value="View"> or
   <input type="submit" name="problemmode" value="Edit"> the problem.
   </form>
   </body>
   EDITMENU
   }
   
   sub handler {
     #my $t0 = [&gettimeofday()];
     my $request=$_[0];
   
     #if ( $ENV{'user.name'} eq 'albertel' ) {$Apache::lonxml::debug=1;}
   
     if (&setupheader($request)) { return OK; }
     $ENV{'request.uri'}=$request->uri;
   
     #setup permissions
     $Apache::lonhomework::browse= &Apache::lonnet::allowed('bre',$ENV{'request.filename'});
     $Apache::lonhomework::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'});
     &Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:");
   
     my $file=&Apache::lonnet::filelocation("",$request->uri);
   
     #check if we know where we are
     if ($ENV{'request.course.fn'} && !&Apache::lonnet::symbread()) { 
       # if we are browsing we might not be able to know where we are
       if ($Apache::lonhomework::browse ne 'F') {
         #should know where we are, so ask
         $request->internal_redirect('/adm/ambiguous'); return;
       }
     }
   
     if ($ENV{'request.state'} eq "construct") {
       if ( -e $file ) {
         if (!(defined $ENV{'form.problemmode'})) {
    #first visit to problem in construction space
    &view_or_edit_menu($request);
    #&renderpage($request,$file);
         } else {
    &renderpage($request,$file);
         }
       } else {
         # requested file doesn't exist in contruction space
         &newproblem($request);
     }      }
     } else {
       # just render the page normally outside of construction space
       &renderpage($request,$file);
   }    }
   &Apache::lonhomework::send_footer($request);    #my $td=&tv_interval($t0);
       #&Apache::lonxml::debug("Spent $td seconds processing");
     # &Apache::lonhomework::send_footer($request);
     # always turn off debug messages
     $Apache::lonxml::debug=0;
   return OK;    return OK;
   
 }  }

Removed from v.1.36  
changed lines
  Added in v.1.47


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.