version 1.1, 2004/03/02 15:45:06
|
version 1.18, 2006/05/30 12:45:50
|
Line 1
|
Line 1
|
|
# The LearningOnline Network with CAPA |
|
# |
|
# $Id$ |
|
# |
|
# Copyright Michigan State University Board of Trustees |
|
# |
|
# This file is part of the LearningOnline Network with CAPA (LON-CAPA). |
|
# |
|
# LON-CAPA is free software; you can redistribute it and/or modify |
|
# it under the terms of the GNU General Public License as published by |
|
# the Free Software Foundation; either version 2 of the License, or |
|
# (at your option) any later version. |
|
# |
|
# LON-CAPA is distributed in the hope that it will be useful, |
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
# GNU General Public License for more details. |
|
# |
|
# You should have received a copy of the GNU General Public License |
|
# along with LON-CAPA; if not, write to the Free Software |
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
# |
|
# /home/httpd/html/adm/gpl.txt |
|
# |
|
# http://www.lon-capa.org/ |
|
# |
|
|
package Apache::imsimportdocs; |
package Apache::imsimportdocs; |
|
|
|
use Apache::Constants qw(:common :http :methods); |
use Apache::lonnet; |
use Apache::lonnet; |
|
use Apache::londocs; |
use Apache::loncommon; |
use Apache::loncommon; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::imsprocessor; |
use Apache::imsprocessor; |
use LONCAPA::Configuration; |
use LONCAPA::Configuration; |
|
use lib '/home/httpd/lib/perl/'; |
|
use LONCAPA; |
|
|
|
use strict; |
|
|
sub jscript_one { |
sub jscript_one { |
my $javascript = shift; |
my $javascript = shift; |
Line 41 function setOptions(caller,itemnum) {
|
Line 74 function setOptions(caller,itemnum) {
|
if (caller == "board") { |
if (caller == "board") { |
opForm.elements[menu].options[0] = new Option("Select","-1",true,true) |
opForm.elements[menu].options[0] = new Option("Select","-1",true,true) |
opForm.elements[menu].options[1] = new Option("Import topics only","topics",true,true) |
opForm.elements[menu].options[1] = new Option("Import topics only","topics",true,true) |
opForm.elements[menu].options[2] = new Option("Import topics & posts (with author)","allpost",true,true) |
opForm.elements[menu].options[2] = new Option("Import topics + posts (with author)","allpost",true,true) |
opForm.elements[menu].options[3] = new Option("Import topics & posts (no author)","allanon",true,true) |
opForm.elements[menu].options[3] = new Option("Import topics + posts (no author)","allanon",true,true) |
} |
} |
else { |
else { |
if (caller == "users") { |
if (caller == "users") { |
Line 94 function nextPage(caller) {
|
Line 127 function nextPage(caller) {
|
#; |
#; |
} |
} |
|
|
|
sub jscript_three { |
|
my $javascript = shift; |
|
$$javascript = qq| |
|
function init(tf) { |
|
setTimeout("self.close()",3000) |
|
tf.submit(); |
|
} |
|
|; |
|
} |
|
|
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
my $javascript = ''; |
my $javascript = ''; |
Line 101 sub handler {
|
Line 144 sub handler {
|
$r->send_http_header; |
$r->send_http_header; |
return OK if $r->header_only; |
return OK if $r->header_only; |
|
|
my @areas = ("doc","extlink","announce","staff","board","quiz","survey","pool","users"); |
my @areas = (); |
my %cmsmap = (); |
my %cmsmap = (); |
%{$cmsmap{bb5}} = ( |
my %areaname = (); |
announce => 'resource/x-bb-announcement', |
&Apache::imsprocessor::ims_config(\@areas,\%cmsmap,\%areaname); |
board => 'resource/x-bb-discussionboard', |
|
doc => 'resource/x-bb-document', |
|
extlink => 'resource/x-bb-externallink', |
|
pool => 'assessment/x-bb-pool', |
|
quiz => 'assessment/x-bb-quiz', |
|
staff => 'resource/x-bb-staffinfo', |
|
survey => 'assessment/x-bb-survey', |
|
users => 'course/x-bb-user', |
|
); |
|
|
|
%{$cmsmap{angel}} = ( |
|
board => 'BOARD', |
|
extlink => 'LINK', |
|
msg => 'MESSAGE', |
|
quiz => 'QUIZ', |
|
survey => 'FORM', |
|
); |
|
|
|
@{$cmsmap{angel}{doc}} = ('FILE','PAGE'); |
|
|
|
# get course data |
# get course data |
my $coursenum=$ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'}; |
my $coursedom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $coursehome=$ENV{'course.'.$ENV{'request.course.id'}.'.home'}; |
|
|
|
# get personal data |
# get personal data |
|
|
my $uname=$ENV{'user.name'}; |
my $uname=$env{'user.name'}; |
my $udom=$ENV{'user.domain'}; |
my $udom=$env{'user.domain'}; |
my $plainname=&Apache::lonnet::escape( |
my $plainname=&escape( |
&Apache::loncommon::plainname($uname,$udom)); |
&Apache::loncommon::plainname($uname,$udom)); |
|
|
# does this user have privileges to post, etc? |
# does this user have privileges to post, etc? |
my $allowed=&Apache::lonnet::allowed('mdc',$ENV{'request.course.id'}); |
my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'}); |
unless ($allowed) { |
unless ($allowed) { |
$r->print("<html><head><title>The LearningOnline Network with CAPA</title></head>"); |
$r->print(&Apache::loncommon::start_page('Import IMS package',undef, |
$r->print(&Apache::loncommon::bodytag('Import IMS package')); |
{'only_body' => 1,})); |
$r->print('<h3>'.&mt('Modification of Course Contents Disallowed').'</h3>'.&mt('Your current role does not grant you the right to modify course content in this course.').'</body></html>'); |
$r->print('<h3>'.&mt('Modification of Course Contents Disallowed').'</h3>'.&mt('Your current role does not grant you the right to modify course content in this course.'). |
|
&Apache::loncommon::end_page()); |
return OK; |
return OK; |
} |
} |
|
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['phase']); |
['phase']); |
|
|
if ($ENV{'form.phase'} eq 'one') { |
if ($env{'form.phase'} eq 'one') { |
&jscript_one(\$javascript); |
&jscript_one(\$javascript); |
} elsif ($ENV{'form.phase'} eq 'two') { |
} elsif ($env{'form.phase'} eq 'two') { |
&jscript_two(\$javascript); |
&jscript_two(\$javascript); |
|
} elsif ($env{'form.phase'} eq 'three') { |
|
&jscript_three(\$javascript); |
} |
} |
|
|
|
$javascript = |
|
"<script type=\"text/javascript\">\n". |
|
"//<!--\n$javascript\n// --></script>\n"; |
|
my $start_page = &Apache::loncommon::start_page('Import IMS package', |
|
$javascript, |
|
{'only_body' => 1,}); |
# print screen |
# print screen |
$r->print(<<ENDHEAD); |
$r->print($start_page); |
<html> |
|
<head> |
if ($env{'form.phase'} eq 'one') { |
<title>The LearningOnline Network with CAPA</title> |
|
<script type="text/javascript"> |
|
<!-- |
|
$javascript |
|
--> |
|
</script> |
|
</head> |
|
ENDHEAD |
|
# -------------------------------------------------------------------- Body tag |
|
$r->print(&Apache::loncommon::bodytag('Import IMS package')); |
|
if ($ENV{'form.phase'} eq 'one') { |
|
&display_one($r); |
&display_one($r); |
} elsif ($ENV{'form.phase'} eq 'two') { |
} elsif ($env{'form.phase'} eq 'two') { |
&display_two($r,$coursenum,\@areas,%cmsmap); |
&display_two($r,$coursenum,\@areas,\%areaname,%cmsmap); |
} elsif ($ENV{'form.phase'} eq 'three') { |
} elsif ($env{'form.phase'} eq 'three') { |
&display_three($r,$coursenum,$coursedom,$coursehome,\@areas,%cmsmap); |
&display_three($r,$coursenum,$coursedom,$uname,$udom,\@areas,%cmsmap); |
} |
} |
$r->print("</body><html>"); |
$r->print(&Apache::loncommon::end_page()); |
|
return OK; |
} |
} |
|
|
sub uploadzip { |
|
my $tempdir = shift; |
|
my $fname=$ENV{'form.uploadname.filename'}; |
|
# Replace Windows backslashes by forward slashes |
|
$fname=~s/\\/\//g; |
|
# Get rid of everything but the actual filename |
|
$fname=~s/^.*\/([^\/]+)$/$1/; |
|
# Replace spaces by underscores |
|
$fname=~s/\s+/\_/g; |
|
# Replace all other weird characters by nothing |
|
$fname=~s/[^\w\.\-]//g; |
|
# See if there is anything left |
|
unless ($fname) { return 'error: no uploaded file'; } |
|
|
|
# Save the file |
|
chomp($ENV{'form.uploadname'}); |
|
open(my $fh,'>'.$tempdir.'/'.$fname); |
|
print $fh $ENV{'form.uploadname'}; |
|
close($fh); |
|
return $fname; |
|
} |
|
|
|
sub display_one { |
sub display_one { |
my $r = shift; |
my ($r) = @_; |
my $timestamp = time; |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folder']); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folder']); |
|
|
$r->print(<<ENDBLOCK); |
$r->print(<<ENDBLOCK); |
Line 233 sub display_one {
|
Line 233 sub display_one {
|
<font face='Arial,Helvetica,sans-serif'> |
<font face='Arial,Helvetica,sans-serif'> |
Please choose the CMS used to create your IMS content package. |
Please choose the CMS used to create your IMS content package. |
<select name="source"> |
<select name="source"> |
<option value='-1' selected="true">Please select |
<option value='-1' selected="true">Please select</option> |
<option value='bb5'>Blackboard 5 |
<option value='bb5'>Blackboard 5</option> |
<option value='angel'>ANGEL |
<option value='bb6'>Blackboard 6</option> |
|
<option value='angel'>ANGEL</option> |
|
<option value='webctce4'>WebCT 4 Campus Edition</option> |
</select> |
</select> |
</font> |
</font> |
</td> |
</td> |
Line 259 Please choose the CMS used to create you
|
Line 261 Please choose the CMS used to create you
|
</tr> |
</tr> |
<tr> |
<tr> |
<td colspan='2'> |
<td colspan='2'> |
<input type="hidden" name="folder" value="$ENV{'form.folder'}" /> |
<input type="hidden" name="folder" value="$env{'form.folder'}" /> |
<input type="hidden" name="phase" value="two" /> |
<input type="hidden" name="phase" value="two" /> |
<input type="file" name="uploadname" size="40" /> |
<input type="file" name="uploadname" size="40" /> |
</td> |
</td> |
Line 279 Please choose the CMS used to create you
|
Line 281 Please choose the CMS used to create you
|
<table border='0' cellspacing='0' cellpadding='0' width="100%"> |
<table border='0' cellspacing='0' cellpadding='0' width="100%"> |
<tr> |
<tr> |
<td align='left'> |
<td align='left'> |
<input type="button" name="exitpage" value="Exit now" onClick="javascript:self.close()"> |
<input type="button" name="exitpage" value="Exit now" onClick="javascript:self.close()" /> |
</td> |
</td> |
<td align='right'> |
<td align='right'> |
<input type="button" name="nextpage" value="Upload IMS package" onClick="javascript:nextPage()"> |
<input type="button" name="nextpage" value="Upload IMS package" onClick="javascript:nextPage()" /> |
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
Line 298 ENDBLOCK
|
Line 300 ENDBLOCK
|
|
|
|
|
sub display_two { |
sub display_two { |
my ($r,$crs,$areasref,%cmsmap) = @_; |
my ($r,$crs,$areasref,$areaname,%cmsmap) = @_; |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folder','source']); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folder','source']); |
my $cms = $ENV{'form.source'}; |
my $cms = $env{'form.source'}; |
my $tempdir = &Apache::imsprocessor::create_tempdir('DOCS',$crs); |
my $timenow = time; |
my $fname = &uploadzip($tempdir); |
my $tempdir = &Apache::imsprocessor::create_tempdir('DOCS',$crs,$timenow); |
|
my $fname = &Apache::imsprocessor::uploadzip('DOCS',$tempdir); |
my $unzip_result = ''; |
my $unzip_result = ''; |
my $manifest_result = ''; |
my $manifest_result = ''; |
unless ($tempdir eq '') { |
unless ($tempdir eq '') { |
$unzip_result = &Apache::imsprocessor::expand_zip($tempdir,$fname); |
$unzip_result = &Apache::imsprocessor::expand_zip($tempdir,$fname); |
} |
} |
my %resources = (); |
my %resources = (); |
|
my %includedres = (); |
|
my %includeditems = (); |
my %items = (); |
my %items = (); |
my %hrefs = (); |
my %hrefs = (); |
|
my %resinfo = (); |
my %count = (); |
my %count = (); |
my @bgcolors = ("#eeeeee","#dddddd"); |
my @bgcolors = ("#eeeeee","#dddddd"); |
|
|
Line 329 sub display_two {
|
Line 335 sub display_two {
|
users => 0, |
users => 0, |
); |
); |
|
|
my %areaname = ( |
|
announce => 'Announcements', |
|
board => 'Discussion Boards', |
|
doc => 'Documents, pages & folders', |
|
extlink => 'Links to external sites', |
|
pool => 'Question pools', |
|
quiz => 'Quizzes', |
|
staff => 'Staff information', |
|
survey => 'Surveys', |
|
users => 'Enrollment', |
|
); |
|
|
|
if ($unzip_result eq 'ok') { |
if ($unzip_result eq 'ok') { |
$manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs); |
$manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo,'choose',\%includedres,\%includeditems); |
if ($manifest_result eq 'ok') { |
if ($manifest_result eq 'ok') { |
foreach my $res (sort keys %resources) { |
foreach my $res (sort keys %resources) { |
if ($cms eq 'bb5') { |
if ($cms eq 'bb5' || $cms eq 'bb6' || $cms eq 'webctce4') { |
foreach my $area (keys %{$cmsmap{$cms}}) { |
foreach my $area (keys %{$cmsmap{$cms}}) { |
if ($resources{$res}{type} eq $cmsmap{$cms}{$area}) { |
if ($resources{$res}{type} eq $cmsmap{$cms}{$area}) { |
$count{$area} ++; |
$count{$area} ++; |
Line 408 ENDBLOCK
|
Line 402 ENDBLOCK
|
$r->print(qq|onClick='javascript:setOptions("$area","$counter")'|); |
$r->print(qq|onClick='javascript:setOptions("$area","$counter")'|); |
} |
} |
$r->print("/></font></td> |
$r->print("/></font></td> |
<td align='left'><font face='arial,helvetica,sans-serif'> $areaname{$area} - $count{$area} item(s)</font></td>"); |
<td align='left'><font face='arial,helvetica,sans-serif'> $$areaname{$area} - $count{$area} item(s)</font></td>"); |
if ($area eq 'board') { |
if ($area eq 'board') { |
$r->print(" <td align='left'><font face='arial,helvetica,sans-serif'> |
$r->print(" <td align='left'><font face='arial,helvetica,sans-serif'> |
<select name='bb_handling'> |
<select name='db_handling'> |
<option value='-2'><-- Check Import first |
<option value='-2'><-- Check Import first</option> |
</select></font> |
</select></font> |
</td>"); |
</td>"); |
} elsif ($area eq 'users') { |
} elsif ($area eq 'users') { |
$r->print(" <td align='left'><font face='arial,helvetica,sans-serif'> |
$r->print(" <td align='left'><font face='arial,helvetica,sans-serif'> |
<select name='user_handling'> |
<select name='user_handling'> |
<option value='-2'><-- Check Import first |
<option value='-2'><-- Check Import first</option> |
</select> |
</select> |
</font> |
</font> |
</td>"); |
</td>"); |
Line 443 ENDBLOCK
|
Line 437 ENDBLOCK
|
<tr> |
<tr> |
<td colspan='2'> <br /><br /></td> |
<td colspan='2'> <br /><br /></td> |
</tr> |
</tr> |
|
<tr bgcolor='#CCCCFF'> |
|
<td valign='middle'><img src='/res/adm/pages/bl_step4.gif'> |
|
</td> |
|
<td width='100%' align='left'> |
|
<font face='arial,helvetica,sans-serif'><b>Choose display options for listing of contents of top level of package.</b></font> |
|
</td> |
|
</tr> |
|
<tr> |
|
<td colspan='2'> </td> |
|
</tr> |
<tr> |
<tr> |
<td> </td> |
<td> </td> |
<td><font face='arial,helvetica,sans-serif'>Once you have checked the checkboxes for all areas you wish to import from the IMS package, and selected options (if available) you should click the 'Complete Import' button.</font></td> |
<td> |
|
<table border='0'> |
|
<tr> |
|
<td><font face='arial,helvetica,sans-serif'><label><input type="radio" name="toplevel" value="newfolder" />Display listing of contents in a new folder, with folder name:</label> <input type="text" name="foldername" size="15" value="Type Name Here" /></font></td> |
|
</tr> |
|
<tr> |
|
<td><font face='arial,helvetica,sans-serif'><label><input type="radio" name="toplevel" value="oldfolder" />Append listing of contents of top level of package to contents list for the current folder.</label></font></td> |
|
</tr> |
|
</table> |
|
</td> |
|
</tr> |
|
<tr> |
|
<td colspan='2'> </td> |
|
</tr> |
|
<tr> |
|
<td> </td> |
|
<td><font face='arial,helvetica,sans-serif'>Once you have checked the checkboxes for all areas you wish to import from the IMS package, selected options (if available), and selected a display option for the package contents you should click the 'Complete Import' button.</font></td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td colspan='2'> |
<td colspan='2'> |
<input type="hidden" name="folder" value="$ENV{'form.folder'}" /> |
<input type="hidden" name="folder" value="$env{'form.folder'}" /> |
<input type="hidden" name="source" value="$cms" /> |
<input type="hidden" name="source" value="$cms" /> |
<input type="hidden" name="tempdir" value="$tempdir" /> |
<input type="hidden" name="tempdir" value="$tempdir" /> |
<input type="hidden" name="phase" value="three" /> |
<input type="hidden" name="phase" value="three" /> |
Line 460 ENDBLOCK
|
Line 480 ENDBLOCK
|
<table border='0' cellspacing='0' cellpadding='0' width="100%"> |
<table border='0' cellspacing='0' cellpadding='0' width="100%"> |
<tr> |
<tr> |
<td align='left'> |
<td align='left'> |
<input type='button' name='exitpage' value='Exit now' onClick="javascript:self.close()"> |
<input type='button' name='exitpage' value='Exit now' onClick="javascript:self.close()" /> |
</td> |
</td> |
<td align='right'> |
<td align='right'> |
<input type="button" name="nextpage" value="Complete Import" onClick="javascript:nextPage($counter)"> |
<input type="button" name="nextpage" value="Complete Import" onClick="javascript:nextPage($counter)" /> |
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
Line 484 ENDDOCUMENT
|
Line 504 ENDDOCUMENT
|
|
|
|
|
sub display_three { |
sub display_three { |
my ($r,$crs,$cdom,$chome,$areas,%cmsmap) = @_; |
my ($r,$crs,$cdom,$uname,$udom,$areas,%cmsmap) = @_; |
$r->print("You reached phase three"); |
my $folder = $env{'form.folder'}; |
my $cms = $ENV{'form.source'}; |
my $cms = $env{'form.source'}; |
my $tempdir = $ENV{'form.tempdir'}; |
my $tempdir = $env{'form.tempdir'}; |
my $longcrs = ''; |
my $longcrs = ''; |
if ($crs =~ m/^(\d)(\d)(\d)/) { |
if ($crs =~ m/^(\d)(\d)(\d)/) { |
$longcrs = $1.'/'.$2.'/'.$3.'/'.$crs; |
$longcrs = $1.'/'.$2.'/'.$3.'/'.$crs; |
} |
} |
my $destdir = ''; |
my %importareas = (); |
my %imports = (); |
my %includedres = (); |
my @targets = (); |
my %includeditems = (); |
my %resources = (); |
my @targets = (); |
my %items = (); |
my %resources = (); |
my %hrefs = (); |
my %items = (); |
my %urls = (); |
my %hrefs = (); |
foreach my $area (@{$areas}) { |
my %urls = (); |
if (defined($ENV{"form.$area"}) ) { |
my %resinfo = (); |
if ($cms eq 'angel' && $area eq 'doc') { |
my %total = ( |
foreach (@{$cmsmap{$cms}{$area}}) { |
page => 0, |
$imports{$_} = 1; |
prob => 0, |
} |
seq => 0, |
} else { |
board => 0, |
$imports{$cmsmap{$cms}{$area}} = 1; |
quiz => 0, |
} |
surv => 0, |
} |
); |
} |
my @pages = (); |
|
my @sequences = (); |
my $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs); |
my @resrcfiles = (); |
if ($manifest_result eq 'ok') { |
|
&Apache::imsprocessor::target_resources(\%resources,\%imports,\@targets); |
my $timenow = time; |
$copy_result = &Apache::imsprocessor::copy_resources('DOCS',$cms,\%hrefs,$tempdir,\@targets,\%urls,$crs,$cdom,$chome,$destdir); |
|
} |
my $destdir = $Apache::lonnet::perlvar{'lonDocRoot'}.'/userfiles/'.$cdom.'/'.$crs.'/'.$timenow; |
|
my $seqstem = "/uploaded/$cdom/$crs/$timenow"; |
|
my $db_handling = ''; |
|
my $user_handling = ''; |
|
|
|
my $toplevel = ''; |
|
my $foldername = ''; |
|
my %topitems = (); |
|
if (defined($env{'form.toplevel'}) ) { |
|
$toplevel = $env{'form.toplevel'}; |
|
} |
|
if (defined($env{'form.foldername'}) ) { |
|
$foldername = $env{'form.foldername'}; |
|
} |
|
|
|
foreach my $area (@{$areas}) { |
|
if (defined($env{"form.$area"}) && ($env{'form.'.$area} ne '')) { |
|
if ($cms eq 'angel' && $area eq 'doc') { |
|
foreach (@{$cmsmap{$cms}{$area}}) { |
|
$importareas{$_} = 1; |
|
} |
|
} else { |
|
$importareas{$cmsmap{$cms}{$area}} = 1; |
|
} |
|
if ($area eq 'board') { |
|
$db_handling = $env{'form.db_handling'}; |
|
} elsif ($area eq 'users') { |
|
$user_handling = $env{'form.user_handling'}; |
|
} |
|
} |
|
} |
|
|
|
my $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo,'prepare',\%includedres,\%includeditems); |
|
if ($manifest_result eq 'ok') { |
|
foreach my $res (sort keys %resources) { |
|
if ($importareas{$resources{$res}{type}}) { |
|
$includedres{$res} = 1; |
|
} |
|
} |
|
foreach my $itm (sort keys %items) { |
|
&Apache::imsprocessor::get_imports(\%includeditems,\%items,\%resources,\%importareas,$itm); |
|
} |
|
} |
|
foreach my $itm (sort keys %includeditems) { |
|
&Apache::imsprocessor::get_parents(\%includeditems,\%items,$itm); |
|
} |
|
|
|
$manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo,'build',\%includedres,\%includeditems); |
|
if ($manifest_result eq 'ok') { |
|
|
|
my @path = ($cdom,$crs,$timenow); |
|
my $fullpath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/userfiles'; |
|
foreach my $item (@path) { |
|
$fullpath .= '/'.$item; |
|
if (!-e "$fullpath") { |
|
mkdir("$fullpath",0770); |
|
} |
|
} |
|
my @namedirs = ("resfiles","sequences","pages","problems"); |
|
foreach my $name (@namedirs) { |
|
if (!-e "$fullpath/$name") { |
|
mkdir("$fullpath/$name",0770); |
|
} |
|
} |
|
&Apache::imsprocessor::target_resources(\%resources,\%importareas,\@targets); |
|
|
|
my @boards = (); |
|
my @announcements = (); |
|
my @quizzes = (); |
|
my @surveys = (); |
|
my @pools = (); |
|
my @groups = (); |
|
my %messages = (); |
|
my @timestamp = (); |
|
my %boardnum = (); |
|
my @topurls = (); |
|
my @topnames = (); |
|
my @packages = (); |
|
|
|
&Apache::imsprocessor::process_resinfo($cms,'DOCS',$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); |
|
|
|
my $copy_result = &Apache::imsprocessor::copy_resources('DOCS',$cms,\%hrefs,$tempdir,\@targets,\%urls,$crs,$cdom,$destdir,$timenow,\%importareas); |
|
|
|
&Apache::imsprocessor::build_structure($cms,'DOCS',$destdir,\%items,\%resinfo,\%resources,\@targets,\%hrefs,$udom,$uname,'',$timenow,$cdom,$crs,\@timestamp,\%total,\@boards,\@announcements,\@quizzes,\@surveys,\@pools,\%boardnum,\@pages,\@sequences,\@topurls,\@topnames,\@packages,\%includeditems); |
|
|
|
foreach my $item (@pages) { |
|
my $filename = $timenow.'/pages/'.$item; |
|
my $fetchresult= &Apache::lonnet::process_coursefile('propagate',$crs,$cdom,$filename,''); |
|
} |
|
foreach my $item (@sequences) { |
|
unless ($item eq 'Top.sequence' && $toplevel eq 'oldfolder') { |
|
my $filename = $timenow.'/sequences/'.$item; |
|
my $fetchresult= &Apache::lonnet::process_coursefile('propagate',$crs,$cdom,$filename,''); |
|
} |
|
} |
|
foreach my $item (@resrcfiles) { |
|
my $filename = $timenow.'/resfiles/'.$item; |
|
my $fetchresult= &Apache::lonnet::process_coursefile('propagate',$crs,$cdom,$filename,''); |
|
} |
|
|
|
my @imports = (); |
|
if ($toplevel eq 'oldfolder') { |
|
for (my $i=0; $i<@topurls; $i++) { |
|
my $url = &unescape($topurls[$i]); |
|
my $name = &unescape($topnames[$i]); |
|
push @imports, $name, $url; |
|
} |
|
} elsif ($toplevel eq 'newfolder') { |
|
my $url = &unescape("/uploaded/$cdom/$crs/$timenow/sequences/Top.sequence"); |
|
my $name = &unescape("$env{'form.foldername'}"); |
|
push @imports, $name, $url; |
|
} |
|
my $errtext=''; |
|
my $fatal=0; |
|
($errtext,$fatal)= &Apache::londocs::mapread($crs,$cdom,$folder.'.sequence'); |
|
if ($#Apache::lonratedt::order<1) { |
|
$Apache::lonratedt::order[0]=1; |
|
$Apache::lonratedt::resources[1]=''; |
|
} |
|
my ($errtext,$fatal)=&Apache::londocs::group_import($crs,$cdom,$folder,'sequence','imsimport',@imports); |
|
if ($fatal) { |
|
print STDERR "Fatal error during group_import\n"; |
|
} |
|
} |
|
if ($tempdir =~ m/^\/home\/httpd\/perl\/tmp\/$crs\/\d{10}/) { |
|
system("rm -r -f $tempdir"); |
|
} |
|
$r->print(<<ENDBLOCK); |
|
<table border='0' bgcolor='#F6F6F6'' cellspacing='0' cellpadding ='0' width='100%'> |
|
<tr> |
|
<td colspan='2'> |
|
<table border='0' cellspacing='0' cellpadding='0'> |
|
<tr> |
|
<td colspan='2' align='left'> |
|
</td> |
|
</tr> |
|
<tr bgcolor='#CCCCFF'> |
|
<td valign='middle'><img src='/res/adm/pages/bl_step5.gif'> |
|
</td> |
|
<td width='100%' align='left'> |
|
<font face='arial,helvetica,sans-serif'><b>Your import is complete</b></font> |
|
</td> |
|
</tr> |
|
<tr> |
|
<td colspan='2'> </td> |
|
</tr> |
|
<tr> |
|
<td> </td> |
|
<td> |
|
ENDBLOCK |
|
my $initblock = qq| |
|
<form method="post" action="/adm/roles" target="loncapaclient" name="importDone"> |
|
<input type="hidden" name="orgurl" value="/adm/coursedocs" /> |
|
<input type="hidden" name="selectrole" value="1" /> |
|
<h3><font color="red">Changes will become active for your current session after |
|
<input type="hidden" name="$env{'request.role'}" value="1" /> |
|
<input type="button" value="|; |
|
$initblock .= &mt('re-initializing course'); |
|
$initblock .= qq|" onClick="javascript:init(this.form)" />|; |
|
$initblock .= ', '.&mt('or the next time you log in.'); |
|
$initblock .= qq|</font></h3></form>|; |
|
$r->print($initblock); |
|
$r->print(<<ENDBLOCKTWO); |
|
</table> |
|
</td> |
|
</tr> |
|
</table> |
|
ENDBLOCKTWO |
} |
} |
|
|
1; |
1; |