--- loncom/publisher/testbankimport.pm 2008/07/08 07:17:46 1.16
+++ loncom/publisher/testbankimport.pm 2008/09/24 19:48:29 1.18
@@ -1,5 +1,5 @@
# Handler for parsing text upload problem descriptions into .problems
-# $Id: testbankimport.pm,v 1.16 2008/07/08 07:17:46 raeburn Exp $
+# $Id: testbankimport.pm,v 1.18 2008/09/24 19:48:29 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1163,8 +1163,8 @@ sub page_footer {
my $nextval = &mt('Next Page');
my $prevclick = 'javascript:backPage();';
my $nextclick = 'javascript:nextPage();';
- my $go = '';
- if ($page == 0) {
+ my $go = '';
+ if (($page == 0) || ($state eq 'badfile')) {
$go = 'NextPage';
$prevval = &mt('Exit Now');
$prevclick = 'javascript:location.href='."'$webpath';";
@@ -1187,7 +1187,8 @@ sub page_footer {
- ';
+
+ ';
if ($page ne '') {
$output .= '
@@ -1195,7 +1196,7 @@ sub page_footer {
| ';
- if ($page < 4) {
+ if (($page < 4) && ($state ne 'badfile')) {
$output .= '
|
@@ -1327,7 +1328,6 @@ sub create_mcq {
my $qstn = ${$qstnref}[0];
my $numfoils = scalar(@{$qstnref}) - 1;
my $datestamp = localtime;
- my $timestamp = time;
my $numansrs = scalar(@{$answerref});
my $output = '
';
@@ -1599,12 +1599,18 @@ sub probfile_name {
}
sub file_error {
- my ($r,$uname,$fn,$current_page);
- $r->print("No data here");
+ my ($r,$uname,$fn,$current_page,$webpath,$res) = @_;
+ $r->print('');
+ return;
}
sub parse_datafile {
- my ($r,$uname,$filename,$pathname,$dirpath,$urlpath,$page_name,$subdir) = @_;
+ my ($r,$uname,$filename,$pathname,$dirpath,$urlpath,$page_name,$subdir,$timestamp) = @_;
my ($badfile,$res,%allfiles,%codebase);
my $mm = new File::MMagic;
my ($text,$header,$css,$js);
@@ -1617,16 +1623,18 @@ sub parse_datafile {
close(TESTBANK);
} elsif ($res eq 'application/rtf') {
my $html = '';
-# my $image_uri = '..'.$pathname;
- my $image_uri = $pathname;
+ my $image_uri = $timestamp;
if ($page_name eq 'Target') {
- $image_uri = $urlpath;
+ $image_uri = $urlpath.'/'.$timestamp;
}
- $image_uri =~ s/\/$//;
my $image_dir;
if ($page_name eq 'Blocks') {
$image_dir = $dirpath;
$image_dir =~ s/\/$//;
+ $image_dir .= '/'.$timestamp;
+ if (!-e $image_dir) {
+ mkdir($image_dir,0755);
+ }
} else {
$image_dir = $r->dir_config('lonDaemons').'/tmp/'.
$env{'user.name'}.'_'.$env{'user.domain'}.
@@ -1645,10 +1653,10 @@ sub parse_datafile {
$parser->parse();
utf8::decode($html);
($text,$header,$css,$js) =
- &parse_htmlcontent($res,$subdir,$html);
+ &parse_htmlcontent($res,$subdir,$html,undef,$page_name);
} elsif ($res eq 'text/html') {
($text,$header,$css,$js) =
- &parse_htmlcontent($res,$subdir,undef,$dirpath.$filename);
+ &parse_htmlcontent($res,$subdir,undef,$dirpath.$filename,$page_name);
} else {
$badfile = 1;
}
@@ -1658,7 +1666,7 @@ sub parse_datafile {
}
sub parse_htmlcontent {
- my ($res,$subdir,$html,$fullpath) = @_;
+ my ($res,$subdir,$html,$fullpath,$page_name) = @_;
my ($p,$fh);
if ($res eq 'application/rtf') {
$p = HTML::TokeParser->new( \$html );
@@ -1696,7 +1704,10 @@ sub parse_htmlcontent {
my $contents = $token->[4];
if ($subdir ne '') {
if (($token->[1] eq 'img') && ($token->[2]->{'src'} ne '')) {
- $contents =~ s/(src=\s*["']?)/$1..\//i;
+ if (($res eq 'text/html') ||
+ ($res eq 'application/rtf') && ($page_name ne 'Target')) {
+ $contents =~ s/(src=\s*["']?)/$1..\//i;
+ }
}
}
if (($line eq '') && ($current_tag eq 'font')) {
@@ -1830,6 +1841,9 @@ sub handler {
$current_page = &display_control();
my @pages = ('Welcome','Blocks','Format','Target','Confirmation');
$page_name = $pages[$current_page];
+ if ($env{'form.timestamp'} eq '') {
+ $env{'form.timestamp'} = time;
+ }
if ($env{'form.newdir'} ne '') {
if ($env{'form.newdir'} =~ /^\Q$dirpath\E(.+)$/) {
$subdir = $1;
@@ -1837,7 +1851,7 @@ sub handler {
}
($res,$badfile,$textref,$header,$css,$js) =
&parse_datafile($r,$uname,$filename,$pathname,$dirpath,$urlpath,
- $page_name,$subdir);
+ $page_name,$subdir,$env{'form.timestamp'});
if ($page_name eq 'Welcome') {
&jscript_zero($webpath,\$javascript);
} elsif ($page_name eq 'Blocks') {
@@ -1875,7 +1889,7 @@ sub handler {
$r->print(&Apache::lonupload::phasethree($r,$fn,$uname,$udom,'testbank'));
}
if ($badfile) {
- &file_error($r,$uname,$fn,$current_page);
+ &file_error($r,$uname,$fn,$current_page,$webpath,$res);
} else {
&display_zero ($r,$uname,$fn,$current_page,$webpath) if $page_name eq 'Welcome';
&display_one ($r,$uname,$fn,$current_page,$textref,$header) if $page_name eq 'Blocks';
|