--- loncom/imspackages/imsimport.pm 2013/07/02 19:04:42 1.40 +++ loncom/imspackages/imsimport.pm 2013/09/30 17:42:12 1.45 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: imsimport.pm,v 1.40 2013/07/02 19:04:42 raeburn Exp $ +# $Id: imsimport.pm,v 1.45 2013/09/30 17:42:12 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -100,7 +100,7 @@ function createWin() { newWindow.document.write("") newWindow.document.write("") newWindow.document.write("$fullpath") - newWindow.document.write("") + newWindow.document.write("") newWindow.document.write("\\n") newWindow.document.write("") newWindow.document.write('$end_page') @@ -133,6 +133,20 @@ sub jscript_two { $course_list = '"'.join('","',@crslist).'"'; $$numcrs = @crslist; + my %lt = &Apache::lonlocal::texthash( + sel => 'Please select', + impto => 'Import topics only', + imptpa => 'Import topics + posts (with author)', + imptpn => 'Import topics + posts (no author)', + enrst => 'Enroll students only', + enrall => 'Enroll all users', + notreq => 'Not required', + errao => 'You must select one of the additional options when importing Discussion Boards.', + errtd => 'You must select a target course when importing Discussion Boards.', + errap => 'You must select one of the additional options when importing Enrollment.', + errte => 'You must select a target course when importing enrollment information.', + errcc => 'You must check at least one Content Type.', + ); return <<"END_OF_TWO"; function checkCourse() { @@ -181,7 +195,7 @@ function setCourse(step2Form,call) { step2Form.targetcourse.length = 0 if (call == 'add') { step2Form.targetcourse.length = 0 - step2Form.targetcourse.options[0] = new Option("Please Select","0",true,true) + step2Form.targetcourse.options[0] = new Option("$lt{'sel'}","0",true,true) for (var i=0; i 0) { @@ -234,7 +248,7 @@ function verify(caller) { totcheck ++ if (opForm.elements[2*i].name == "board") { if (opForm.elements[2*i+1].selectedIndex == 0) { - alert("You must select one of the additional options when importing Discussion Boards ") + alert("$lt{'errao'}") return false } if (numCrs == 0) { @@ -243,14 +257,14 @@ function verify(caller) { } else { if (opForm.targetcourse.selectedIndex == 0) { - alert("You must select a target course when importing Discussion Boards") + alert("$lt{'errtd'}") return false } } } if (opForm.elements[2*i].name == "users") { if (opForm.elements[2*i+1].selectedIndex == 0) { - alert("You must select one of the additional options when importing Enrollment") + alert("$lt{'errap'}") return false } if (numCrs == 0) { @@ -259,7 +273,7 @@ function verify(caller) { } else { if (opForm.targetcourse.selectedIndex == 0) { - alert("You must select a target course when importing enrollment information") + alert("$lt{'errte'}") return false } } @@ -267,7 +281,7 @@ function verify(caller) { } } if (totcheck == 0) { - alert("You must check the Checkbox for at least one Content Type"); + alert("$lt{'errcc'}"); return false } return true @@ -286,11 +300,11 @@ END_OF_TWO # ---------------------------------------------------------------- Display One sub display_one { my ($r,$fn,$fullpath,$formname) = @_; - $r->print('
'. + $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.').'  

+ &mt('Create a destination LON-CAPA directory in which to store the contents of the IMS package file.').'  

-      - +      +
'); } @@ -332,12 +346,12 @@ sub display_two { type => 'Content type', addo => 'Additional options', chec => 'Check Import first', - bbus => 'Choose a course to receive bulletin boards and user enrollment', - list => 'A listing of possible course targets will be displayed if import of bulletin boards and/or enrollment is checked above (step 3). If you do not plan to import either of these content types, there is no need to specify a course.', + bbus => 'Choose a course to receive discussion boards and user enrollment', + list => 'A listing of possible course targets will be displayed if import of discussion boards and/or enrollment is checked above (step 3). If you do not plan to import either of these content types, there is no need to specify a course.', chco => 'Choose course:', nreq => 'Not required', - yodo => 'You do not have active course coordinator status in any LON-CAPA courses currently, so bulletin boards and enrollment information included in your IMS package will be discarded, regardless of your import choice for these two items above (step 3).', - ifyo => "If you wish to import bulletin boards and/or user information into LON-CAPA please click 'Exit now' to quit the current IMS import process, and contact your domain coordinator and request a course coordinator role in a LON-CAPA course into which you can upload bulletin boards and/or enroll users.", + yodo => 'You do not have active course coordinator status in any LON-CAPA courses currently, so discussion boards and enrollment information included in your IMS package will be discarded, regardless of your import choice for these two items above (step 3).', + ifyo => "If you wish to import discussion boards and/or user information into LON-CAPA please click 'Exit now' to quit the current IMS import process, and contact your domain coordinator and request a course coordinator role in a LON-CAPA course into which you can upload discussion boards and/or enroll users.", impa => 'Import package', unpa => 'Unpacking of your IMS package failed because an IMS manifest file was not located in the package', proc => 'Processing of your IMS package failed because the file you uploaded could not be unzipped', @@ -396,7 +410,7 @@ sub display_two { $conditions = 'none'; } - $r->print('
'. + $r->print(''. &Apache::lonhtmlcommon::topic_bar(3,$lt{'cont'}). &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(). @@ -409,7 +423,7 @@ sub display_two { $r->print(&Apache::loncommon::start_data_table_row()."\n". 'print('onClick="javascript:setOptions('."'$area','$counter'".');" '); + $r->print('onclick="javascript:setOptions('."'$area','$counter'".');" '); } $r->print('/>'. '  '.$$areaname{$area}.'   - '. @@ -459,13 +473,17 @@ sub display_two { if ($count{users} == 0) { $r->print(''."\n"); } - $r->print('    -
'); + $r->print('    + '); } else { $r->print($lt{'unpa'}); } } else { - $r->print($lt{'proc'}); + $r->print( + '
'.&Apache::loncommon::confirmwrapper( + &Apache::lonhtmlcommon::confirm_success($lt{'proc'},1) + .'
'.&mt('Error: [_1]',$unzip_result)) + ); } } @@ -543,7 +561,9 @@ sub display_three { my $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir, \%resources,\%items,\%hrefs,\%resinfo,'prepare', \%includedres); + if ($manifest_result eq 'ok') { + my %possibledep; foreach my $res (sort keys %resources) { if ($importareas{$resources{$res}{type}}) { $includedres{$res} = 1; @@ -552,6 +572,13 @@ sub display_three { $resources{$res}{type} eq 'webct.question') { push(@assessmentfiles,$res); } + } elsif ($resources{$res}{usedby}) { + $possibledep{$res} = 1; + } + } + foreach my $res (sort(keys(%possibledep))) { + if ($includedres{$resources{$res}{usedby}}) { + $includedres{$res} = 1; } } foreach my $itm (sort keys %items) { @@ -566,6 +593,7 @@ sub display_three { $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir, \%resources,\%items,\%hrefs,\%resinfo,'build', \%includedres,\%includeditems); + if ($manifest_result eq 'ok') { &Apache::imsprocessor::target_resources(\%resources,\%importareas,\@targets); @@ -584,24 +612,36 @@ sub display_three { &Apache::imsprocessor::process_resinfo($cms,'CSTR',$tempdir,$destdir,\%items,\%resources,\@targets,\@boards,\@announcements,\@quizzes,\@surveys,\@pools,\@groups,\%messages,\@timestamp,\%boardnum,\%resinfo,$udom,$uname,$cdom,$crs,$db_handling,$user_handling,\%total,$seqstem,$seqstem,\@resrcfiles,\@packages,\%hrefs,\@pages,\@sequences,\%randompicks); - my $copy_result = &Apache::imsprocessor::copy_resources('CSTR',$cms,\%hrefs,$tempdir,\@targets,\%urls,$crs,$cdom,$destdir,$timenow,\@assessmentfiles,\%total); + my $copy_result = &Apache::imsprocessor::copy_resources('CSTR',$cms,\%hrefs,\%resources,$tempdir,\@targets,\%urls,$crs,$cdom,$destdir,$timenow,\@assessmentfiles,\%total); &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

"); + my $message = + &Apache::lonhtmlcommon::confirm_success( + &mt('IMS import completed')) + .'
'.$lt{'yims'}.' '; 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"); + $message .= &mt('A total of [quant,_1,sequence], [quant,_2,composite page], and [quant,_3,discussion 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"); + $message .= &mt('A total of [quant,_1,sequence], [quant,_2,composite page], [quant,_3,discussion 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'}.''); + $r->print( + '
'.&Apache::loncommon::confirmwrapper($message) + .'

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

' + .'

'.$lt{'tfin'}.'

' + .&Apache::lonhtmlcommon::actionbox( + [''.$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') { - $r->print($lt{'proc'}); + $r->print( + '
'.&Apache::loncommon::confirmwrapper( + &Apache::lonhtmlcommon::confirm_success($lt{'proc'},1)) + ); } } @@ -739,6 +779,12 @@ END_JS my $flag = &Apache::lonupload::phasetwo($r,$fn,'imsimport'); if ($flag eq 'ok') { &display_one($r,$fn,$fullpath,$formname_one); + } else { + $r->print( + '
'.&Apache::loncommon::confirmwrapper( + &Apache::lonhtmlcommon::confirm_success( + &mt('Error uploading IMS package'),1)) + ); } } elsif ( ($env{'form.phase'} eq 'three') || ($env{'form.phase'} eq 'four') ) { my $destdir = $env{'form.newdir'};