--- loncom/imspackages/imsimport.pm 2008/08/24 13:48:40 1.23 +++ loncom/imspackages/imsimport.pm 2012/10/04 14:00:22 1.37 @@ -1,3 +1,7 @@ +# The LearningOnline Network with CAPA +# +# $Id: imsimport.pm,v 1.37 2012/10/04 14:00:22 bisitz Exp $ +# # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). @@ -39,7 +43,7 @@ use LONCAPA; # ---------------------------------------------------------------- Jscript One sub jscript_one { - my ($fullpath,$jsref,$formname) = @_; + my ($fullpath,$formname) = @_; my %body_layout = ('rightmargin' => "0", 'leftmargin' => "0", @@ -62,7 +66,7 @@ sub jscript_one { nndi => 'Enter the name of the new directory where you will store the contents of your IMS package.', go => 'Go', ); - $$jsref = <<"END_OF_ONE"; + return <<"END_OF_ONE"; function verify() { if ((document.forms.$formname.newdir.value == '') || (!document.forms.$formname.newdir.value)) { alert('$lt{'ddir'}') @@ -86,7 +90,7 @@ function createWin() { newWindow = window.open("","CreateDir","HEIGHT=400,WIDTH=750,scrollbars=yes") newWindow.document.open() newWindow.document.write('$start_page') - newWindow.document.write("\\n[Author Header]\\n") + newWindow.document.write("\\n[Author Header]\\n") newWindow.document.write("\\n") newWindow.document.write("\\n") newWindow.document.write("\\n") @@ -111,7 +115,7 @@ END_OF_ONE # ---------------------------------------------------------------- Jscript Two sub jscript_two { - my ($javascript,$user,$dom,$numcrs) = @_; + my ($user,$dom,$numcrs) = @_; my %crsentry = (); my $course_list; my $title_list; @@ -130,7 +134,7 @@ sub jscript_two { $course_list = '"'.join('","',@crslist).'"'; $$numcrs = @crslist; - $$javascript = qq# + return <<"END_OF_TWO"; function checkCourse() { courseID_array = new Array($course_list) @@ -276,32 +280,26 @@ function nextPage(caller) { } } -#; - -} +END_OF_TWO -# ---------------------------------------------------------------- Jscript Three -sub jscript_three { - my $javascript = shift; } # ---------------------------------------------------------------- Display One sub display_one { - my ($r,$uname,$fn,$fullpath,$formname) = @_; + my ($r,$fn,$fullpath,$formname) = @_; $r->print(''. &Apache::lonhtmlcommon::topic_bar(1,&mt('Specify the Course Management system used to create the package')). &mt('Choose the CMS used to create your IMS content package.').'  
'."\n". &Apache::lonhtmlcommon::topic_bar(2,&mt('Create a directory where you will unpack your IMS package'))."\n". &mt('Create a destination LON-CAPA directory in which to store the contents of the IMS package file.').'  

-      @@ -311,11 +309,10 @@ sub display_one { # ---------------------------------------------------------------- Display Two sub display_two { - my ($r,$zipupload,$areas,$areaname,$cmsmap,$uname,$newdir,$numcrs,$fullpath) = @_; + my ($r,$zipupload,$areas,$areaname,$cmsmap,$fn,$numcrs,$fullpath) = @_; &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folder','source']); my $cms = $env{'form.source'}; - my $dirname = $env{'form.newdir'}; - my $tempdir = &Apache::imsprocessor::create_tempdir('CSTR',$dirname,''); + my $tempdir = &Apache::imsprocessor::create_tempdir('CSTR',$env{'form.newdir'},''); my $fname = &Apache::imsprocessor::uploadzip('CSTR',$tempdir,$zipupload); my $unzip_result = ''; my $manifest_result = ''; @@ -376,7 +373,7 @@ sub display_two { $count{$area} ++; } } - } elsif ($cms eq 'angel') { + } elsif ($cms eq 'angel5') { foreach my $area (keys %{$$cmsmap{$cms}}) { if ($area eq 'doc') { if (grep/^$resources{$res}{type}$/,@{$$cmsmap{$cms}{doc}}) { @@ -404,7 +401,7 @@ sub display_two { &Apache::lonhtmlcommon::topic_bar(3,$lt{'cont'}). &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(). - ''. &Apache::loncommon::end_data_table_header_row()); foreach my $area (@{$areas}) { @@ -455,8 +452,7 @@ sub display_two { - - + '."\n"); if ($count{board} == 0) { $r->print(''."\n"); @@ -476,7 +472,7 @@ sub display_two { # ---------------------------------------------------------------- Display Three sub display_three { - my ($r,$uname,$udom,$areas,$areaname,$cmsmap,$destdir,$newdir) = @_; + my ($r,$uname,$udom,$areas,$areaname,$cmsmap,$destdir,$dirpath) = @_; my $crs = ''; my $cdom = ''; my $db_handling = ''; @@ -492,7 +488,7 @@ sub display_three { if ( defined($env{'form.user_crs'}) ) { ($user_cdom,$user_crs) = split/\//,$env{'form.user_crs'}; } - my $seqstem = "/res/$udom/$uname/$newdir"; + my $seqstem = "/res/$udom/$uname/$dirpath"; my %importareas = (); my %includedres = (); my %includeditems = (); @@ -522,7 +518,7 @@ sub display_three { foreach my $area (@{$areas}) { if (defined($env{"form.$area"}) ) { - if ($cms eq 'angel' && $area eq 'doc') { + if ($cms eq 'angel5' && $area eq 'doc') { foreach (@{$$cmsmap{$cms}{$area}}) { $importareas{$_} = 1; } @@ -591,17 +587,18 @@ sub display_three { my $copy_result = &Apache::imsprocessor::copy_resources('CSTR',$cms,\%hrefs,$tempdir,\@targets,\%urls,$crs,$cdom,$destdir,$timenow,\@assessmentfiles,\%total); - &Apache::imsprocessor::build_structure($cms,'CSTR',$destdir,\%items,\%resinfo,\%resources,\@targets,\%hrefs,$udom,$uname,$newdir,$timenow,$cdom,$crs,\@timestamp,\%total,\@boards,\@announcements,\@quizzes,\@surveys,\@pools,\%boardnum,\@pages,\@sequences,\@topurls,\@topnames,\@packages,\%includeditems,\%randompicks); + &Apache::imsprocessor::build_structure($cms,'CSTR',$destdir,\%items,\%resinfo,\%resources,\@targets,\%hrefs,$udom,$uname,$dirpath,$timenow,$cdom,$crs,\@timestamp,\%total,\@boards,\@announcements,\@quizzes,\@surveys,\@pools,\%boardnum,\@pages,\@sequences,\@topurls,\@topnames,\@packages,\%includeditems,\%randompicks); $r->print("

IMS import completed

"); - if ($cms eq 'angel') { + if ($cms eq 'angel5') { $r->print($lt{'yims'}.' '.&mt('A total of [quant,_1,sequence], [quant,_2,composite page], and [quant,_3,bulletin board] have been created, and [quant,_4,file] copied.',$total{seq},$total{page},$total{board},$total{file})."\n"); } else { $r->print($lt{'yims'}.' '.&mt('A total of [quant,_1,sequence], [quant,_2,composite page], [quant,_3,bulletin board], [quant,_4,quiz,quizzes], [quant,_5,survey], and [quant,_6,problem] have been created, and [quant,_7,file] copied.',$total{seq},$total{page},$total{board},$total{quiz},$total{surv},$total{prob},$total{file})."\n"); } - $r->print('

'.$lt{'plsv'}.' '.$lt{'tseq'}.'

'.$lt{'tfin'}.'

'.$lt{'disp'}.''); - if ($destdir =~ m-^/home/$uname/public_html/-) { + $r->print('

'.$lt{'plsv'}.' '.$lt{'tseq'}.'

'.$lt{'tfin'}.'

'.$lt{'disp'}.''); + my $londocroot = $r->dir_config('lonDocRoot'); + if ($destdir =~ m{^\Q$londocroot/priv/$udom/$uname/$dirpath\E}) { system (" rm -r -f $destdir/temp"); } } elsif ($manifest_result eq 'nomanifest') { @@ -612,63 +609,42 @@ sub display_three { # ---------------------------------------------------------------- Get LON-CAPA Course Coordinator roles for this user sub get_ccroles { my ($user,$dom,$crsentry,$crslist) = @_; - my %roles = (); + my %roles; unless ($user eq '') { - %roles = &Apache::lonnet::dump('roles',$dom,$user); + my $ccrole = 'cc'; + %roles = &Apache::lonnet::get_my_roles($user,$dom,'userroles',undef,[$ccrole]); } my $iter = 0; my @codes = (); my %courses = (); my @crslist = (); my %descrip =(); - foreach my $key (keys %roles ) { + foreach my $key (keys(%roles)) { if ($key =~ m{^/($LONCAPA::domain_re)/($LONCAPA::username_re)_cc$}) { my $cdom = $1; my $crs = $2; - my $role_end = 0; - my $role_start = 0; - my $active_chk = 1; - if ( $roles{$key} =~ m/^cc_(\d+)/ ) { - $role_end = $1; - if ( $roles{$key} =~ m/^cc_($role_end)_(\d+)$/ ) - { - $role_start = $2; - } - } - if ($role_start > 0) { - if (time < $role_start) { - $active_chk = 0; - } - } - if ($role_end > 0) { - if (time > $role_end) { - $active_chk = 0; - } + my $currcode = ''; + my %settings = &Apache::lonnet::get('environment',['internal.coursecode','description'],$cdom,$crs); + if (defined($settings{'description'}) ) { + $descrip{$crs} = $settings{'description'}; + } else { + $descrip{$crs} = 'Unknown'; } - if ($active_chk) { - my $currcode = ''; - my %settings = &Apache::lonnet::get('environment',['internal.coursecode','description'],$cdom,$crs); - if (defined($settings{'description'}) ) { - $descrip{$crs} = $settings{'description'}; - } else { - $descrip{$crs} = 'Unknown'; - } - if (defined($settings{'internal.coursecode'}) ) { - $currcode = $settings{'internal.coursecode'}; - if ($currcode eq '') { - $currcode = "____".$iter; - $iter ++; - } - } else { + if (defined($settings{'internal.coursecode'}) ) { + $currcode = $settings{'internal.coursecode'}; + if ($currcode eq '') { $currcode = "____".$iter; $iter ++; } - unless (grep/^$currcode$/,@codes) { - push @codes,$currcode; - @{$courses{$currcode}} = (); - } - push @{$courses{$currcode}}, $cdom.'/'.$crs; + } else { + $currcode = "____".$iter; + $iter ++; } + unless (grep/^$currcode$/,@codes) { + push @codes,$currcode; + @{$courses{$currcode}} = (); + } + push @{$courses{$currcode}}, $cdom.'/'.$crs; } } foreach my $code (sort @codes) { @@ -686,54 +662,43 @@ sub get_ccroles { # ---------------------------------------------------------------- Main Handler sub handler { my $r=shift; - my $uname; - my $udom; - my $javascript = ''; - my $page_name = ''; - my $current_page = ''; - my $qcount = ''; -# get personal information for this user - my $user=$env{'user.name'}; - my $dom=$env{'user.domain'}; + my $fn=$env{'form.filename'}; -# -# re-attach user -# - 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.' at '.$udom. - ' trying to publish file '.$env{'form.filename'}. - ' - not authorized', - $r->filename); - return HTTP_NOT_ACCEPTABLE; + if ($env{'form.filename1'}) { + $fn=$env{'form.filename1'}.$env{'form.filename2'}; } - - my $fn; - if ($env{'form.filename'}) { - $fn=$env{'form.filename'}; - $fn=~s/^http\:\/\/[^\/]+\///; - $fn=~s/^\///; - $fn=~s/(\~|priv\/)($LONCAPA::username_re)//; - $fn=~s/\/+/\//g; - } else { + $fn=~s{\+}{}g; + + unless ($fn) { $r->log_reason($env{'user.name'}.' at '.$env{'user.domain'}. ' unspecified filename for upload', $r->filename); return HTTP_NOT_FOUND; } - my $zipupload = '/home/'.$uname.'/public_html'.$fn; - my $pathname = &File::Basename::dirname($fn); - my $fullpath = '/priv/'.$uname.$pathname; - unless ($pathname eq '/') { + + my ($uname,$udom) = &Apache::loncacc::constructaccess($fn); + if (($uname eq '') || ($udom eq '')) { + $r->log_reason($uname.' at '.$udom. + ' trying to publish file '.$fn.' - not authorized', + $r->filename); + return HTTP_NOT_ACCEPTABLE; + } + + my $londocroot = $r->dir_config('lonDocRoot'); + my $zipupload = $londocroot.$fn; + my $fullpath = &File::Basename::dirname($fn); + unless ($fullpath =~ m{/$}) { $fullpath .= '/'; } +# get personal information for this user + my $user=$env{'user.name'}; + my $dom=$env{'user.domain'}; + + my $javascript = ''; + my $page_name = ''; + my $current_page = ''; + my $qcount = ''; my @areas = (); my %cmsmap = (); my %areaname = (); @@ -746,39 +711,48 @@ sub handler { my $formname_one = 'info'; if ($env{'form.phase'} eq 'two') { - &jscript_one($fullpath,\$javascript,$formname_one); + $javascript = &jscript_one($fullpath,$formname_one); } elsif ($env{'form.phase'} eq 'three') { - &jscript_two(\$javascript,$user,$dom,\$numcrs); - } elsif ($env{'form.phase'} eq 'four') { - &jscript_three(\$javascript); + $javascript = &jscript_two($user,$dom,\$numcrs); + } + if ($javascript ne '') { + $javascript = <<"END_JS"; + +END_JS } - $javascript = "\n"; my $title = 'Upload IMS package to Construction Space'; $r->print(&Apache::loncommon::start_page($title, $javascript)); if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) { - $r->print('

'.&mt('Co-Author').': '.$uname. - &mt(' at ').$udom.'

'); - } + $r->print('

' + .&mt('Co-Author [_1]',$uname.':'.$udom) + .'

' + ); + } if ($env{'form.phase'} eq 'two') { - my $flag = &Apache::lonupload::phasetwo($r,$fn,$uname,$udom,'imsimport'); + my $flag = &Apache::lonupload::phasetwo($r,$fn,'imsimport'); if ($flag eq 'ok') { - &display_one($r,$uname,$fn,$fullpath,$formname_one); + &display_one($r,$fn,$fullpath,$formname_one); } } elsif ( ($env{'form.phase'} eq 'three') || ($env{'form.phase'} eq 'four') ) { - my $docroot = $env{'form.newdir'}; - my $newdir = ''; - if ($docroot =~ m|public_html/(.+)$|) { - $newdir = $1; - } + my $destdir = $env{'form.newdir'}; + my $dirpath = $destdir; + $dirpath =~ s{^\Q$londocroot/priv/$udom/$uname/\E}{}; + if ($env{'form.phase'} eq 'three') { - &display_two ($r,$zipupload,\@areas,\%areaname,\%cmsmap,$uname,$newdir,\$numcrs,$fullpath); + &display_two($r,$zipupload,\@areas,\%areaname,\%cmsmap,$fn,\$numcrs,$fullpath); } elsif ($env{'form.phase'} eq 'four') { - &display_three ($r,$uname,$udom,\@areas,\%areaname,\%cmsmap,$docroot,$newdir); + &display_three($r,$uname,$udom,\@areas,\%areaname,\%cmsmap,$destdir,$dirpath); } } else { - &Apache::lonupload::phaseone($r,$fn,$uname,$udom,'imsimport'); + &Apache::lonupload::phaseone($r,$fn,'imsimport'); } $r->print(&Apache::loncommon::end_page()); return OK;
  

$lt{'loca'} $fullpath

$lt{'newd'}

'.$lt{'impo'}.''.$lt{'cont'}.''. + ''.$lt{'impo'}.''.$lt{'type'}.''. $lt{'addo'}.'