--- loncom/interface/londocs.pm 2004/09/18 17:03:25 1.144
+++ loncom/interface/londocs.pm 2004/12/15 15:21:43 1.157
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.144 2004/09/18 17:03:25 albertel Exp $
+# $Id: londocs.pm,v 1.157 2004/12/15 15:21:43 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -283,7 +283,6 @@ sub exportcourse {
$outcome = '
As you did not select any content items or discussions for export, an IMS package has not been created. Please go back to select either content items or discussions for export';
} else {
my $now = time;
- my $count = 0;
my %symbs;
my $manifestok = 0;
my $imsresources;
@@ -291,7 +290,7 @@ sub exportcourse {
my $copyresult;
my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport);
if ($manifestok) {
- &build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,\$tempexport,\$copyresult,$ims_manifest);
+ &build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,$tempexport,\$copyresult,$ims_manifest);
close($ims_manifest);
#Create zip file in prtspool
@@ -504,8 +503,8 @@ sub build_package {
my $lastcontainer = 0;
my %parent = ();
my @dependencies = ();
- my $cnum = $ENV{'request.'.$ENV{'request.course.id'}.'.num'};
- my $cdom = $ENV{'request.'.$ENV{'request.course.id'}.'.domain'};
+ my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
+ my $cdom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
while ($curRes = $it->next()) {
if (ref($curRes)) {
$count ++;
@@ -534,57 +533,64 @@ sub build_package {
$count = 0;
my $imsresources;
my $pkgdepth;
- if ($curRes == $it->BEGIN_MAP()) {
- $prevdepth = $depth;
- $depth++;
- }
- if ($curRes == $it->END_MAP()) {
- $prevdepth = $depth;
- $depth--;
- }
-
- if (ref($curRes)) {
- if ((grep/^$count$/,@$exportitems) || (grep/^$count$/,@dependencies)) {
- my $symb = $curRes->symb();
- my $isvisible = 'true';
- my $resourceref;
- if ($curRes->randomout()) {
- $isvisible = 'false';
- }
- unless ($curRes->is_sequence()) {
- $resourceref = 'identifierref="RES-'.$ENV{'request.course.id'}.'-'.$count.'"';
- }
- if (($depth <= $prevdepth) && ($count > 1)) {
- print $ims_manifest ' '."\n";
- }
+ my $included = 0;
+ while ($curRes = $it->next()) {
+ if ($curRes == $it->BEGIN_MAP()) {
+ $prevdepth = $depth;
+ $depth++;
+ }
+ if ($curRes == $it->END_MAP()) {
$prevdepth = $depth;
+ $depth--;
+ }
- my $itementry =
+ if (ref($curRes)) {
+ $count ++;
+ if ((grep/^$count$/,@$exportitems) || (grep/^$count$/,@dependencies)) {
+ my $symb = $curRes->symb();
+ my $isvisible = 'true';
+ my $resourceref;
+ if ($curRes->randomout()) {
+ $isvisible = 'false';
+ }
+ unless ($curRes->is_sequence()) {
+ $resourceref = 'identifierref="RES-'.$ENV{'request.course.id'}.'-'.$count.'"';
+ }
+ if (($depth <= $prevdepth) && ($count > 1) && ($included)) {
+ print $ims_manifest "\n".' '."\n";
+ }
+ $included = 1;
+ $prevdepth = $depth;
+
+ my $itementry =
'- '.
''.$curRes->title().'';
- print $ims_manifest "\n".$itementry;
+ print $ims_manifest "\n".$itementry;
- unless ($curRes->is_sequence()) {
- my $content_file;
- my @hrefs = ();
- &process_content($count,$curRes,$cdom,$cnum,$symb,$content_file,\@hrefs,$copyresult,$tempexport);
- if ($content_file) {
- $imsresources .= "\n".
+ unless ($curRes->is_sequence()) {
+ my $content_file;
+ my @hrefs = ();
+ &process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport);
+ if ($content_file) {
+ $imsresources .= "\n".
' '."\n".
' '."\n";
- foreach (@hrefs) {
- $imsresources .=
+ foreach (@hrefs) {
+ $imsresources .=
' '."\n";
+ }
+ $imsresources .= ' '."\n";
}
- $imsresources .= ' '."\n";
}
+ $pkgdepth = $depth;
+ } else {
+ $included = 0;
}
- $pkgdepth = $depth;
}
}
- while ($pkgdepth > -1) {
+ while ($pkgdepth > 0) {
print $ims_manifest "
\n";
$pkgdepth --;
}
@@ -602,7 +608,7 @@ sub build_package {
sub get_dependencies {
my ($exportitems,$parent,$depth,$dependencies) = @_;
if ($depth > 1) {
- unless (grep/^$$parent{$depth}$/,@$exportitems || grep/^$$parent{$depth}$/,@$dependencies) {
+ if ((!grep/^$$parent{$depth}$/,@$exportitems) && (!grep/^$$parent{$depth}$/,@$dependencies)) {
push @$dependencies, $$parent{$depth};
if ($depth > 2) {
&get_dependencies($exportitems,$parent,$depth-1,$dependencies);
@@ -616,29 +622,33 @@ sub process_content {
my $content_type;
my $message;
# find where user is author or co-author
- my %roleshash = &Appache::lonnet::get_my_roles();
- if ($curRes->is_page()) {
- $content_type = 'page';
+ my %roleshash = &Apache::lonnet::get_my_roles();
+ if ($curRes->is_sequence()) {
+ $content_type = 'sequence';
+ } elsif ($curRes->is_page()) {
+ $content_type = 'page'; # need to handle individual items in pages.
} elsif ($symb =~ m-public/$cdom/$cnum/syllabus$-) {
$content_type = 'syllabus';
- } elsif ($symb =~ m-\.sequence____\d+____ext-) {
+ } elsif ($symb =~ m-\.sequence___\d+___ext-) {
$content_type = 'external';
} elsif ($symb =~ m-adm/navmaps$-) {
$content_type = 'navmap';
} elsif ($symb =~ m-adm/$cdom/$cnum/\d+/smppg$-) {
$content_type = 'simplepage';
- } elsif ($symb =~ m-$-) {
+ } elsif ($symb =~ m-/lib/templates/simpleproblem\.problem$-) {
$content_type = 'simpleproblem';
} elsif ($symb =~ m-adm/$cdom/$cnum/\d+/bulletinboard$-) {
$content_type = 'bulletinboard';
} elsif ($symb =~ m-adm/$cdom/$cnum/\d+/aboutme$-) {
$content_type = 'aboutme';
} elsif ($symb =~ m-uploaded/$cdom/$cnum-) {
- &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'uploaded');
- } elsif ($symb =~ m-\.sequence____\d+____([^/])/([^/])-) {
- my $coauth = $2.':'.$1.':ca';
+ $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');
+ } elsif ($symb =~ m-\.(sequence|page)___\d+___uploaded/$cdom/$cnum/-) {
+ $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');
+ } elsif ($symb =~ m-\.(sequence|page)___\d+___([^/])/([^/])-) {
+ my $coauth = $3.':'.$2.':ca';
my $canedit = 0;
- if ($1 eq $ENV{'user.domain'} && $2 eq $ENV{'user.name'}) {
+ if ($2 eq $ENV{'user.domain'} && $3 eq $ENV{'user.name'}) {
$canedit= 1;
} elsif (defined($roleshash{$coauth})) {
if ($roleshash{$coauth} =~ /(\d+):(\d+)/) {
@@ -650,45 +660,53 @@ sub process_content {
}
}
if ($canedit) {
- &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'resource');
+ $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');
} else {
- &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'noedit');
+ $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit');
}
}
- $$copyresult .= $message."\n";
+ if ($message) {
+ $$copyresult .= $message."\n";
+ }
}
sub replicate_content {
- my ($cdom,$cnum,$tempexport,$symb,$count,$message,$caller) = @_;
+ my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller) = @_;
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
my $feedurl = &Apache::lonnet::clutter($url);
my $content;
my $filename;
my $repstatus;
- if ($url =~ m-[^/]/(.+)$-) {
+ my $content_name;
+ if ($url =~ m-/([^/]+)$-) {
$filename = $1;
if (!-e $tempexport.'/resources') {
mkdir($tempexport.'/resources',0700);
}
- if (!-e $tempexport.'/resources') {
+ if (!-e $tempexport.'/resources/'.$count) {
mkdir($tempexport.'/resources/'.$count,0700);
}
- my $destination = $$tempexport.'/resources/'.$count.'/'.$filename;
+ my $destination = $tempexport.'/resources/'.$count.'/'.$filename;
my $copiedfile;
if ($copiedfile = Apache::File->new('>'.$destination)) {
my $content;
- if ($caller eq 'uploaded' || $caller eq 'resource') {
+ if ($caller eq 'resource') {
$content = &Apache::lonnet::getfile($url);
if ($content eq -1) {
$$message = 'Could not copy file '.$filename;
} else {
+ &extract_media($content,$count,$tempexport,$href,'resource');
$repstatus = 'ok';
}
- } elsif ($caller eq 'noedit') {
+ } elsif ($caller eq 'noedit' || $caller eq 'uploaded') {
my $rtncode;
- $repstatus = &getuploaded('GET',$url,$cdom,$cnum,$content,$rtncode);
- unless ($repstatus eq 'ok') {
+ $repstatus = &Apache::lonnet::getuploaded('GET',$url,$cdom,$cnum,\$content,$rtncode);
+ if ($repstatus eq 'ok') {
+ if ($url =~ /\.html?$/i) {
+ &extract_media(\$content,$count,$tempexport,$href,'uploaded');
+ }
+ } else {
$$message = 'Could not render '.$url.' server message - '.$rtncode;
}
}
@@ -700,9 +718,21 @@ sub replicate_content {
$$message = 'Could not open destination file for '.$filename."\n";
}
} else {
- $$message = 'Could not determine name of file for ';
+ $$message = 'Could not determine name of file for '.$url."\n";
+ }
+ if ($repstatus eq 'ok') {
+ $content_name = $count.'/'.$filename;
}
- return $repstatus;
+ return $content_name;
+}
+
+sub extract_media {
+ my ($content,$count,$tempexport,$href,$caller) = @_;
+# @$href will contain path to any embedded resources in the content.
+# For LON-CAPA problems this would be images. applets etc.
+# For uploaded HTML files this would be images etc.
+# paths will be in the form $count/res/$file, and urls in the $content will be rewritten with the new paths.
+ return;
}
# Imports the given (name, url) resources into the course
@@ -989,15 +1019,17 @@ sub editor {
# ---------------------------------------------------------------- End commands
# ---------------------------------------------------------------- Print screen
my $idx=0;
+ my $shown=0;
$r->print('
');
foreach (@Apache::lonratedt::order) {
my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);
unless ($name) { $name=(split(/\//,$url))[-1]; }
- unless ($name) { next; }
+ unless ($name) { $idx++; next; }
$r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum));
$idx++;
+ $shown++;
}
- unless ($idx) {
+ unless ($shown) {
$r->print(''.&mt('Currently no documents.').' |
');
}
$r->print('
');
@@ -1032,10 +1064,11 @@ sub entryline {
$folderpath=&Apache::lonnet::escape($ENV{'form.folderpath'});
# $htmlfoldername=&HTML::Entities::encode($ENV{'form.foldername'},'<>&"');
}
- my $pagepath;
+ my ($pagepath,$pagesymb);
if ($ENV{'form.pagepath'}) {
$container = 'page';
$pagepath=&Apache::lonnet::escape($ENV{'form.pagepath'});
+ $pagesymb=&Apache::lonnet::escape($ENV{'form.pagesymb'});
}
if ($allowed) {
my $incindex=$index+1;
@@ -1062,20 +1095,21 @@ sub entryline {
$line.=(<
+
|
$selectbox
|
-
+
$lt{'rm'}
-
+
$lt{'rn'} |
END
} else {
@@ -1147,10 +1181,16 @@ END
} elsif ($url!~/\.(sequence|page)$/) {
$url='/adm/coursedocs/showdoc'.$url;
}
+ } elsif ($url=~m|^/ext/|) {
+ $url='/adm/wrapper'.$url;
}
- unless ($container eq 'page') {
+ $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb);
+ if ($container eq 'page') {
+ my $symb=$ENV{'form.pagesymb'};
+
+ $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]);
$url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb);
- }
+ }
}
my $parameterset=' ';
if ($isfolder) {
@@ -1159,9 +1199,12 @@ END
if ($folderpath) { $folderpath.='&' };
$folderpath.=$folderarg.'&'.$foldername;
$url.='folderpath='.&Apache::lonnet::escape($folderpath);
- $parameterset=&mt('Randomly Pick: ').
+ $parameterset='';
+
}
if ($ispage) {
my $pagename=&Apache::lonnet::escape($pagetitle);
@@ -1169,7 +1212,17 @@ END
my $folderpath=$ENV{'form.folderpath'};
if ($folderpath) { $pagepath = $folderpath.'&' };
$pagepath.=$pagearg.'&'.$pagename;
- $url.='pagepath='.&Apache::lonnet::escape($pagepath);
+ my $symb=$ENV{'form.pagesymb'};
+ if (!$symb) {
+ my $path='uploaded/'.
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.'/'.
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.'/';
+ $symb=&Apache::lonnet::encode_symb($path.$folder.'.sequence',
+ $residx,
+ $path.$pagearg.'.page');
+ }
+ $url.='pagepath='.&Apache::lonnet::escape($pagepath).
+ '&pagesymb='.&Apache::lonnet::escape($symb);
}
$line.=' | '.
@@ -1185,9 +1238,9 @@ END
((&Apache::lonratedt::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');
$line.=(<
- $lt{'hd'}
-
+
+
+ |
$parameterset |
@@ -1600,11 +1653,18 @@ sub is_hash_old {
sub changewarning {
my ($r,$postexec)=@_;
if (!&is_hash_old()) { return; }
+ my $pathvar='folderpath';
+ my $path=&Apache::lonnet::escape($ENV{'form.folderpath'});
+ if (defined($ENV{'form.pagepath'})) {
+ $pathvar='pagepath';
+ $path=&Apache::lonnet::escape($ENV{'form.pagepath'});
+ $path.='&symb='.&Apache::lonnet::escape($ENV{'form.pagesymb'});
+ }
$r->print(
''.
' |