--- loncom/homework/lonhomework.pm 2000/11/30 16:20:49 1.17
+++ loncom/homework/lonhomework.pm 2003/02/25 23:18:22 1.110
@@ -1,53 +1,114 @@
+# The LearningOnline Network with CAPA
# The LON-CAPA Homework handler
+#
+# $Id: lonhomework.pm,v 1.110 2003/02/25 23:18:22 albertel Exp $
+#
+# Copyright Michigan State University Board of Trustees
+#
+# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
+#
+# LON-CAPA is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# LON-CAPA is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LON-CAPA; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# /home/httpd/html/adm/gpl.txt
+#
+# http://www.lon-capa.org/
+#
# Guy Albertelli
# 11/30 Gerd Kortemeyer
+# 6/1,8/17,8/18 Gerd Kortemeyer
+# 7/18 Jeremy Bowers
package Apache::lonhomework;
use strict;
-use Apache::style;
-use Apache::lonxml;
-use Apache::lonnet;
-use Apache::inputtags;
-use Apache::structuretags;
-use Apache::response;
-
-
-sub subhandler {
- my ($target,$problem)=@_;
- my %mystyle;
- my $result = '';
- &Apache::inputtags::initialize_inputtags;
- %Apache::lonhomework::results=();
- %Apache::lonhomework::history=&Apache::lonnet::restore;
- #ignore error conditions
- my ($temp)=keys %Apache::lonhomework::history ;
- if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); }
+use Apache::style();
+use Apache::lonxml();
+use Apache::lonnet();
+use Apache::lonplot();
+use Apache::inputtags();
+use Apache::structuretags();
+use Apache::randomlabel();
+use Apache::response();
+use Apache::hint();
+use Apache::outputtags();
+use Apache::caparesponse();
+use Apache::radiobuttonresponse();
+use Apache::optionresponse();
+use Apache::imageresponse();
+use Apache::essayresponse();
+use Apache::externalresponse();
+use Apache::rankresponse();
+use Apache::matchresponse();
+use Apache::Constants qw(:common);
+use HTML::Entities();
+use Apache::loncommon();
+#use Time::HiRes qw( gettimeofday tv_interval );
- my $resultkey;
- foreach $resultkey (sort keys %Apache::lonhomework::history) {
- &Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::history{$resultkey}");
- }
- &Apache::lonxml::debug("\n
restored values^\n");
- my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm');
- if ($default == -1) {
- &Apache::lonxml::error("Unable to find default_homework.lcpm");
- $default='';
- }
-
- return Apache::lonxml::xmlparse($target, $problem,
- $default.&setup_vars($target),%mystyle);
+BEGIN {
+ &Apache::lonxml::register_insert();
}
sub get_target {
if ( $ENV{'request.state'} eq "published") {
- return 'web';
+ 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' )) {
+ return ($ENV{'form.grade_target'});
+ }
+
+ if ( defined($ENV{'form.submitted'})) {
+ return ('grade', 'web');
+ } else {
+ return ('web');
+ }
} elsif ($ENV{'request.state'} eq "construct") {
- if ( defined $ENV{'form.preview'}) {
- return 'web';
+ if ( defined($ENV{'form.grade_target'}) ) {
+ return ($ENV{'form.grade_target'});
+ }
+ if ( defined($ENV{'form.preview'})) {
+ if ( defined($ENV{'form.submitted'})) {
+ return ('grade', 'web');
+ } else {
+ return ('web');
+ }
} else {
- return 'edit';
+ if ( $ENV{'form.problemmode'} eq 'View' ||
+ $ENV{'form.problemmode'} eq 'Discard Edits and View') {
+ if ( defined($ENV{'form.submitted'}) &&
+ (!defined($ENV{'form.resetdata'})) ) {
+ return ('grade', 'web','answer');
+ } else {
+ return ('web','answer');
+ }
+ } elsif ( $ENV{'form.problemmode'} eq 'Edit' ) {
+ if ( $ENV{'form.submitted'} eq 'edit' ) {
+ if ( $ENV{'form.submit'} eq 'Submit Changes and View' ) {
+ return ('modified','web','answer');
+ } else {
+ return ('modified','edit');
+ }
+ } else {
+ return ('edit');
+ }
+ } else {
+ return ('web');
+ }
}
}
+ return ();
}
sub setup_vars {
@@ -59,72 +120,532 @@ sub setup_vars {
sub send_header {
my ($request)= @_;
$request->print(&Apache::lontexconvert::header());
- $ENV{'request.uri'}=$request->uri;
# $request->print('
Undid changes, Switched $filebak and $file
"); + } else { + $request->print("Unable to undo, unable to switch $filebak and $file
"); + $error=1; + } + } else { + my $fs=Apache::File->new(">$filebak"); + if (defined($fs)) { + print $fs $$problem; + $request->print("Making Backup to $filebakPart '.$part.' | |
'.join(' | ',@{ $answer }). + ' |
Part '.$part. + ' is not analyzabale at this time
'); + } + } + &analyze_footer($request); + &Apache::lonhomework::showhash(%overall); + return $result; +} + +sub editxmlmode { + my ($request,$file) = @_; + my $result; my $problem=&Apache::lonnet::getfile($file); if ($problem == -1) { &Apache::lonxml::error(" Unable to find $file"); $problem=''; } + if (defined($ENV{'form.editxmltext'}) || defined($ENV{'form.Undo'})) { + my $error=&handle_save_or_undo($request,\$problem, + \$ENV{'form.editxmltext'}); + if (!$error) { $problem=&Apache::lonnet::getfile($file); } + } + &Apache::lonhomework::showhashsubset(\%ENV,'^form'); + if ( $ENV{'form.submit'} eq 'Submit Changes and View' ) { + &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",'Problem Editing Help'); + if ($cols > 80) { $cols = 80; } + if ($cols < 70) { $cols = 70; } + if ($rows < 20) { $rows = 20; } + $result.=' + '; + $request->print($result); + } + return ''; +} - my $result=&subhandler(&get_target(),$problem); +sub renderpage { + my ($request,$file) = @_; - #$request->print("Result follows:"); - $request->print($result); - #$request->print(":Result ends"); + my (@targets) = &get_target(); + &Apache::lonxml::debug("Running targets ".join(':',@targets)); + foreach my $target (@targets) { + #my $t0 = [&gettimeofday()]; + my $problem=&Apache::lonnet::getfile($file); + if ($problem == -1) { + &Apache::lonxml::error(" Unable to find $file"); + $problem=''; + } - my $temp; - my $resultkey; - foreach $resultkey (sort keys %Apache::lonhomework::results) { - &Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::results{$resultkey}"); + my %mystyle; + my $result = ''; + if ($target eq 'analyze') { %Apache::lonhomework::analyze=(); } + if ($target eq 'answer') { &showhash(%Apache::lonhomework::history); } + if ($target eq 'web') {&Apache::lonhomework::showhashsubset(\%ENV,'^form');} + + &Apache::lonxml::debug("Should be parsing now"); + $result = &Apache::lonxml::xmlparse($request, $target, $problem, + &setup_vars($target),%mystyle); + + #$request->print("Result follows:"); + if ($target eq 'modified') { + &handle_save_or_undo($request,\$problem,\$result); + } else { + if ($target eq 'analyze') { + $result=&Apache::lonnet::hashref2str(\%Apache::lonhomework::analyze); + undef(%Apache::lonhomework::analyze); + } + #my $td=&tv_interval($t0); + #if ( $Apache::lonxml::debug) { + #$result =~ s: