--- loncom/publisher/testbankimport.pm 2009/11/30 16:53:54 1.25
+++ loncom/publisher/testbankimport.pm 2013/06/07 16:07:49 1.40
@@ -1,5 +1,5 @@
# Handler for parsing text upload problem descriptions into .problems
-# $Id: testbankimport.pm,v 1.25 2009/11/30 16:53:54 bisitz Exp $
+# $Id: testbankimport.pm,v 1.40 2013/06/07 16:07:49 bisitz Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -28,7 +28,6 @@ package Apache::testbankimport;
use strict;
use Apache::Constants qw(:common :http :methods);
-use Apache::loncacc;
use Apache::loncommon();
use Apache::lonnet;
use HTML::Entities();
@@ -88,6 +87,7 @@ function createWin() {
newWindow.document.write("")
newWindow.document.write("")
newWindow.document.write("")
+ newWindow.document.write("")
newWindow.document.write("$webpath")
newWindow.document.write("")
newWindow.document.write('$end_page')
@@ -444,7 +444,7 @@ function verify() {
if ($numitems > 0) {
my $maxnum = $numitems - 1;
my %lt = &Apache::lonlocal::texthash(
- fnmb => 'File names must be unique',
+ fnmb => 'Filenames must be unique',
isum => 'is used more than once',
);
$$jsref .= qq|
@@ -484,12 +484,12 @@ function backPage() {
# ---------------------------------------------------------------- Display Zero
sub display_zero {
- my ($r,$uname,$fn,$page,$webpath) = @_;
+ my ($r,$fn,$page,$webpath) = @_;
my $go_default = 'NextPage';
if ($fn eq '') {
- $r->print(''.&mt('Incomplete file upload').' '.&mt('Return to the [_1]construction space menu[_2] to upload a file','',''));
+ $r->print(''.&mt('Incomplete file upload').' '.&mt('Return to the [_1]Authoring Space menu[_2] to upload a file','',''));
}
- $r->print(&mt('The Testbank Upload utility can be used by LON-CAPA authors to generate LON-CAPA problem files from a testbank file of questions/answers.').'
'.
+ $r->print(&mt('The [_1]Testbank Upload[_2] utility can be used by LON-CAPA authors to generate LON-CAPA problem files from a testbank file of questions/answers.','','').'
'.
&mt('The following question types can be converted:').'
'.&mt('No questions were selected for conversion.').'
'. - &page_footer($env{'form.newdir'},$uname,$fn,$page,$webpath,$subdir,$state).''); + &page_footer($env{'form.newdir'},$fn,$page,$webpath,$subdir,$state).''); } elsif (($destdir ne '') && (-e $destdir)) { my (@qn_file,@result,@numid); my $qcount = 0; @@ -1129,11 +1129,11 @@ sub final_display { $r->print(''.&mt('The following files already existed, and were not overwritten so these problems generated from the testbank have not been saved:').'
'.$existing.'
'.&mt('No destination directory was available so import of questions could not proceed.').'
'. - &page_footer($env{'form.newdir'},$uname,$fn,$page,$webpath,$subdir,$state).''); + &page_footer($env{'form.newdir'},$fn,$page,$webpath,$subdir,$state).''); } return; } @@ -1158,7 +1158,7 @@ sub show_uploaded_data { } sub page_footer { - my ($newdir,$uname,$fn,$page,$webpath,$subdir,$state) = @_; + my ($newdir,$fn,$page,$webpath,$subdir,$state) = @_; my $prevval = &mt('Previous Page'); my $nextval = &mt('Next Page'); my $prevclick = 'javascript:backPage();'; @@ -1183,7 +1183,6 @@ sub page_footer { } my $output = ' - @@ -1329,7 +1328,11 @@ sub create_mcq { my $numfoils = scalar(@{$qstnref}) - 1; my $datestamp = localtime; my $numansrs = scalar(@{$answerref}); - my $output = '' + $output .= '
' .&mt('Co-Author [_1]',$uname.':'.$udom) .'
'; } @@ -1783,53 +1813,50 @@ sub print_header { # ---------------------------------------------------------------- Main Handler sub handler { my $r=shift; - my $uname; - my $udom; - my $javascript = ''; - my $page_name = ''; - my $current_page = ''; - my $qcount = ''; - my $title = 'Upload testbank questions to Construction Space'; - if ($env{'form.uploaduname'}) { - $env{'form.filename'}='/priv/'.$env{'form.uploaduname'}.'/'. - $env{'form.filename'}; - } - ($uname,$udom)= - &Apache::loncacc::constructaccess($env{'form.filename'}, - $r->dir_config('lonDefDomain')); - unless (($uname) && ($udom)) { - $r->log_reason($uname.':'.$udom.' trying to convert testbank file '. - $env{'form.filename'}.' - not authorized',$r->filename); - return HTTP_NOT_ACCEPTABLE; + my $fn=$env{'form.filename'}; + + if ($env{'form.filename1'}) { + $fn=$env{'form.filename1'}.$env{'form.filename2'}; } + $fn=~s{\+}{}g; - my ($fn,$filename); - if ($env{'form.filename'}) { - $fn=$env{'form.filename'}; - $fn=~s/^https?\:\/\/[^\/]+\///; - $fn=~s/^\///; - $fn=~s{(~|priv/)($LONCAPA::username_re)}{}; - $fn=~s/\/+/\//g; - } else { + unless ($fn) { $r->log_reason($env{'user.name'}.' at '.$env{'user.domain'}. ' unspecified filename for upload', $r->filename); return HTTP_NOT_FOUND; } + my ($uname,$udom) = &Apache::lonnet::constructaccess($fn); + if (($uname eq '') || ($udom eq '')) { + $r->log_reason($uname.':'.$udom.' trying to convert testbank file '. + $fn.' - not authorized',$r->filename); + return HTTP_NOT_ACCEPTABLE; + } + + my $javascript = ''; + my $page_name = ''; + my $current_page = ''; + my $qcount = ''; + my $title = 'Upload testbank questions to Authoring Space'; + # ----------------------------------------------------------- Start page output &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - my ($filename,$pathname) = &File::Basename::fileparse($fn); - my $webpath = '/priv/'.$uname.$pathname; - my $urlpath = '/~'.$uname.$pathname; - my $dirpath = '/home/'.$uname.'/public_html'.$pathname; - my ($res,$subdir,$badfile,$textref,$header,$css,$js,%loadentries); + my ($filename,$webpath) = &File::Basename::fileparse($fn); + my $dirpath = $r->dir_config('lonDocRoot').$webpath; + my ($res,$subdir,$badfile,$textref,$header,$css,$js,%loadentries,@pages,%names); if ($env{'form.phase'} eq 'three') { $current_page = &display_control(); - my @pages = ('Welcome','Blocks','Format','Target','Confirmation'); + @pages = ('Welcome','Blocks','Format','Target','Confirmation'); + %names = ( + Welcome => 'Testbank Format', + Blocks => 'Classification', + Format => 'Selection', + Target => 'Result' + ); $page_name = $pages[$current_page]; if ($env{'form.timestamp'} eq '') { $env{'form.timestamp'} = time; @@ -1840,8 +1867,8 @@ sub handler { } } ($res,$badfile,$textref,$header,$css,$js) = - &parse_datafile($r,$uname,$filename,$pathname,$dirpath,$urlpath, - $page_name,$subdir,$env{'form.timestamp'}); + &parse_datafile($r,$filename,$dirpath,$webpath,$page_name, + $subdir,$env{'form.timestamp'}); if ($page_name eq 'Welcome') { &jscript_zero($webpath,\$javascript); } elsif ($page_name eq 'Blocks') { @@ -1872,23 +1899,41 @@ sub handler { } } - $r->print(&print_header($uname,$udom,$javascript,\%loadentries,$title)); + $r->print(&print_header($uname,$udom,$javascript,\%loadentries,$title, + $current_page,\@pages,\%names)); - if ($env{'form.phase'} eq 'three') { - if ($env{'form.action'} eq 'upload_embedded') { - $r->print(&Apache::lonupload::phasethree($r,$fn,$uname,$udom,'testbank')); + if (($env{'form.phase'} eq 'four') || ($env{'form.phase'} eq 'three')) { + if ($env{'form.phase'} eq 'four') { + $r->print(&Apache::lonupload::phasefour($r,$fn,$uname,$udom,'testbank')); + my $current_page = 0; + my $js; + &jscript_zero($webpath,\$js); + $js = ''; + $r->print($js); + &display_zero($r,$fn,$current_page,$webpath); + } elsif ($env{'form.phase'} eq 'three') { + if ($env{'form.action'} eq 'upload_embedded') { + my ($result,$flag) = + &Apache::lonupload::phasethree($r,$fn,$uname,$udom,'testbank'); + $r->print($result); + if ($flag eq 'modify_orightml') { + undef($page_name); + $r->print(''); + } + } } if ($badfile) { - &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'; - &display_two ($r,$uname,$fn,$current_page,$textref,$header,$qcount) if $page_name eq 'Format'; - &display_three ($r,$uname,$fn,$current_page,$textref,$res,$header,$urlpath,$qcount) if $page_name eq 'Target'; - &final_display ($r,$uname,$fn,$current_page,$textref,$res,$header,$css,$js,$webpath,$dirpath,$subdir) if $page_name eq 'Confirmation'; + &file_error($r,$fn,$current_page,$webpath,$res); + } else { + &display_zero ($r,$fn,$current_page,$webpath) if $page_name eq 'Welcome'; + &display_one ($r,$fn,$current_page,$textref,$header) if $page_name eq 'Blocks'; + &display_two ($r,$fn,$current_page,$textref,$header,$qcount) if $page_name eq 'Format'; + &display_three ($r,$fn,$current_page,$textref,$res,$header,$webpath,$qcount) if $page_name eq 'Target'; + &final_display ($r,$fn,$current_page,$textref,$res,$header,$css,$js,$webpath,$dirpath,$subdir) if $page_name eq 'Confirmation'; } } elsif ($env{'form.phase'} eq 'two') { - my ($result,$flag) = &Apache::lonupload::phasetwo($r,$fn,$uname,$udom,'testbank'); + my ($result,$flag) = &Apache::lonupload::phasetwo($r,$fn,'testbank'); $r->print($result); if ($flag eq 'ok') { my $current_page = 0; @@ -1896,13 +1941,13 @@ sub handler { &jscript_zero($webpath,\$js); $js = ''; $r->print($js); - &display_zero($r,$uname,$fn,$current_page,$webpath); + &display_zero($r,$fn,$current_page,$webpath); } elsif ($flag eq 'embedded') { $r->print($js.''); + &page_footer('',$fn).''); } } else { - &Apache::lonupload::phaseone($r,$fn,$uname,$udom,'testbank'); + &Apache::lonupload::phaseone($r,$fn,'testbank'); } $r->print(&Apache::loncommon::end_page()); return OK;