--- loncom/homework/lonhomework.pm 2007/10/30 00:17:09 1.278 +++ loncom/homework/lonhomework.pm 2007/11/13 23:26:08 1.284 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.278 2007/10/30 00:17:09 albertel Exp $ +# $Id: lonhomework.pm,v 1.284 2007/11/13 23:26:08 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -49,11 +49,11 @@ use Apache::matchresponse(); use Apache::chemresponse(); use Apache::drawimage(); use Apache::Constants qw(:common); -use HTML::Entities(); use Apache::loncommon(); use Apache::lonlocal; use Time::HiRes qw( gettimeofday tv_interval ); -use Apache::lonnet(); +use HTML::Entities(); +use File::Copy(); # FIXME - improve commenting @@ -149,7 +149,7 @@ sub get_target { } elsif ( $env{'form.problemmode'} eq &mt('Edit') || $env{'form.problemmode'} eq 'Edit') { if ( $env{'form.submitted'} eq 'edit' ) { - if ( $env{'form.submit'} eq &mt('Submit Changes and View') ) { + if ( $env{'form.submit'} eq &mt('Save and View') ) { return ('modified','web','answer'); } else { return ('modified','no_output_web','edit'); @@ -543,7 +543,8 @@ sub due_date { &Apache::lonxml::debug("looking for first_access $first_access"); if (defined($first_access)) { $interval = $first_access+$interval; - $date = ($interval < $due_date)? $interval : $due_date; + $date = (!$due_date || $interval < $due_date) ? $interval + : $due_date; } else { $date = $due_date; } @@ -683,9 +684,9 @@ sub handle_save_or_undo { my $error=0; if ($env{'form.Undo'} eq &mt('undo')) { my $error=0; - if (!copy($file,$filetmp)) { $error=1; } - if ((!$error) && (!copy($filebak,$file))) { $error=1; } - if ((!$error) && (!move($filetmp,$filebak))) { $error=1; } + if (!&File::Copy::copy($file,$filetmp)) { $error=1; } + if ((!$error) && (!&File::Copy::copy($filebak,$file))) { $error=1; } + if ((!$error) && (!&File::Copy::move($filetmp,$filebak))) { $error=1; } if (!$error) { &Apache::lonxml::info("
".
&mt("Undid changes, Switched [_1] and [_2]",
@@ -909,7 +910,7 @@ sub editxmlmode {
if (!$error) { $problem=&Apache::lonnet::getfile($file); }
}
&Apache::lonhomework::showhashsubset(\%env,'^form');
- if ( $env{'form.submit'} eq &mt('Submit Changes and View') ) {
+ if ( $env{'form.submit'} eq &mt('Save and View') ) {
&Apache::lonhomework::showhashsubset(\%env,'^form');
$env{'form.problemmode'}='View';
&renderpage($request,$file);
@@ -939,28 +940,35 @@ sub editxmlmode {
$result.=$start_page.
&renderpage($request,$file,['no_output_web'],1).
- &Apache::lonxml::message_location().'
- '.&Apache::loncommon::end_page();
&Apache::lonxml::add_messages(\$result);
@@ -1052,52 +1060,49 @@ sub finished_parsing {
undef($Apache::lonhomework::parsing_a_task);
}
-# with no arg it returns a HTML \n';
+ my $glob_extension = $extension;
+ if ($extension eq 'survey' || $extension eq 'exam') {
+ $glob_extension = 'problem';
+ }
+ my @files = glob($Apache::lonnet::perlvar{'lonIncludes'}.
+ '/templates/*.'.$glob_extension);
+ @files = map {[$_,&mt(&Apache::lonnet::metadata($_, 'title'))]} (@files);
+ @files = sort {$a->[1] cmp $b->[1]} (@files);
+ foreach my $file (@files) {
+ next if ($file->[1] !~ /\S/);
+ $result .=
+ '
';
}
return $result;
}
sub newproblem {
my ($request) = @_;
- my $extension=$request->uri;
- $extension=~s:^.*\.([\w]+)$:$1:;
- &Apache::lonxml::debug("Looking for :$extension:");
- my $templatelist=&get_template_list('',$extension);
- if ($env{'form.template'} &&
- $env{'form.template'} ne "Select a $extension template") {
- use File::Copy;
- my $file = &get_template_list($env{'form.template'},$extension);
+
+ if ($env{'form.template'}) {
+ my $file = $env{'form.template'};
my $dest = &Apache::lonnet::filelocation("",$request->uri);
- copy($file,$dest);
+ &File::Copy::copy($file,$dest);
&renderpage($request,$dest);
- } elsif($env{'form.newfile'} && !$templatelist) {
- # I don't like hard-coded filenames but for now, this will work.
- use File::Copy;
+ return;
+ }
+
+ my ($extension) = ($request->uri =~ m/\.(\w+)$/);
+ &Apache::lonxml::debug("Looking for :$extension:");
+ my $templatelist=&get_template_list($extension);
+ if ($env{'form.newfile'} && !$templatelist) {
+ # no templates found
my $templatefilename =
$request->dir_config('lonIncludes').'/templates/blank.'.$extension;
&Apache::lonxml::debug("$templatefilename");
my $dest = &Apache::lonnet::filelocation("",$request->uri);
- copy($templatefilename,$dest);
+ &File::Copy::copy($templatefilename,$dest);
&renderpage($request,$dest);
} else {
my $url=&HTML::Entities::encode($request->uri,'<>&"');
@@ -1105,9 +1110,6 @@ sub newproblem {
$shownurl=~s-^/~-/priv/-;
my $dest = &Apache::lonnet::filelocation("",$request->uri);
my $errormsg;
- if ($env{'form.newfile'}) {
- $errormsg='
'.&mt('You did not select a template.').'
'."\n"; - } my $instructions; my $start_page = &Apache::loncommon::start_page("Create New $extension"); @@ -1120,16 +1122,17 @@ $errormsg".&mt("To create a new $extension, select a template from the". - "pull-down menu below. Then click on the \"Create $extension\" button.")." + " list below. Then click on the \"Create $extension\" button.")."
".&Apache::loncommon::end_page()); } - return ''; + return; } sub update_construct_style {