version 1.191, 2005/06/26 15:42:52
|
version 1.197, 2005/07/26 13:30:34
|
Line 249 sub dumpcourse {
|
Line 249 sub dumpcourse {
|
# ------------------------------------------------------ Generate "export" button |
# ------------------------------------------------------ Generate "export" button |
|
|
sub exportbutton { |
sub exportbutton { |
return ''; |
|
return '</td><td bgcolor="#DDDDCC">'. |
return '</td><td bgcolor="#DDDDCC">'. |
'<input type="submit" name="exportcourse" value="'. |
'<input type="submit" name="exportcourse" value="'. |
&mt('Export Course to IMS').'" />'. |
&mt('Export Course to IMS').'" />'. |
Line 748 sub replicate_content {
|
Line 747 sub replicate_content {
|
if ($copiedfile = Apache::File->new('>'.$destination)) { |
if ($copiedfile = Apache::File->new('>'.$destination)) { |
my $content; |
my $content; |
if ($caller eq 'resource') { |
if ($caller eq 'resource') { |
$content = &Apache::lonnet::getfile('/home/httpd/html/res/'.$url); |
my $respath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res'; |
|
my $filepath = &Apache::lonnet::filelocation($respath,$url); |
|
$content = &Apache::lonnet::getfile($filepath); |
if ($content eq -1) { |
if ($content eq -1) { |
$$message = 'Could not copy file '.$filename; |
$$message = 'Could not copy file '.$filename; |
} else { |
} else { |
&extract_media($content,$count,$tempexport,$href,'resource'); |
&extract_media($url,$cdom,$cnum,\$content,$count,$tempexport,$href,$message,'resource'); |
$repstatus = 'ok'; |
$repstatus = 'ok'; |
} |
} |
} elsif ($caller eq 'uploaded' || $caller eq 'templateupload') { |
} elsif ($caller eq 'uploaded' || $caller eq 'templateupload') { |
Line 760 sub replicate_content {
|
Line 761 sub replicate_content {
|
$repstatus = &Apache::lonnet::getuploaded('GET',$url,$cdom,$cnum,\$content,$rtncode); |
$repstatus = &Apache::lonnet::getuploaded('GET',$url,$cdom,$cnum,\$content,$rtncode); |
if ($repstatus eq 'ok') { |
if ($repstatus eq 'ok') { |
if ($url =~ /\.html?$/i) { |
if ($url =~ /\.html?$/i) { |
&extract_media(\$content,$count,$tempexport,$href,'uploaded'); |
&extract_media($url,$cdom,$cnum,\$content,$count,$tempexport,$href,$message,'uploaded'); |
} |
} |
} else { |
} else { |
$$message = 'Could not render '.$url.' server message - '.$rtncode; |
$$message = 'Could not render '.$url.' server message - '.$rtncode."<br />\n"; |
} |
} |
} elsif ($caller eq 'noedit') { |
} elsif ($caller eq 'noedit') { |
# Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this. |
# Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this. |
Line 775 sub replicate_content {
|
Line 776 sub replicate_content {
|
} |
} |
close($copiedfile); |
close($copiedfile); |
} else { |
} else { |
$$message = 'Could not open destination file for '.$filename."\n"; |
$$message = 'Could not open destination file for '.$filename."<br />\n"; |
} |
} |
} else { |
} else { |
$$message = 'Could not determine name of file for '.$symb."\n"; |
$$message = 'Could not determine name of file for '.$symb."<br />\n"; |
} |
} |
if ($repstatus eq 'ok') { |
if ($repstatus eq 'ok') { |
$content_name = $count.'/'.$filename; |
$content_name = $count.'/'.$filename; |
Line 787 sub replicate_content {
|
Line 788 sub replicate_content {
|
} |
} |
|
|
sub extract_media { |
sub extract_media { |
my ($content,$count,$tempexport,$href,$caller) = @_; |
my ($url,$cdom,$cnum,$content,$count,$tempexport,$href,$message,$caller) = @_; |
# @$href will contain path to any embedded resources in the content. |
my %allfiles = (); |
# For LON-CAPA problems this would be images. applets etc. |
my %codebase = (); |
# For uploaded HTML files this would be images etc. |
$url =~ s#([^/]+)$##; |
# paths will be in the form $count/res/$file, and urls in the $content will be rewritten with the new paths. |
&Apache::lonnet::extract_embedded_items(undef,undef,\%allfiles,\%codebase,$content); |
|
foreach my $embed_file (keys(%allfiles)) { |
|
my $filename; |
|
if ($embed_file =~ m#([^/]+)$#) { |
|
$filename = $1; |
|
} else { |
|
$filename = $embed_file; |
|
} |
|
my $newname = 'res/'.$filename; |
|
my ($rtncode,$embed_content,$repstatus); |
|
my $embed_url; |
|
if ($embed_file =~ m-^/-) { |
|
$embed_url = $embed_file; # points to absolute path |
|
} else { |
|
if ($embed_file =~ m-https?://-) { |
|
next; # points to url |
|
} else { |
|
$embed_url = $url.$embed_file; # points to relative path |
|
} |
|
} |
|
if ($caller eq 'resource') { |
|
my $respath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res'; |
|
my $embed_path = &Apache::lonnet::filelocation($respath,$embed_url); |
|
$embed_content = &Apache::lonnet::getfile($embed_path); |
|
unless ($embed_content eq -1) { |
|
$repstatus = 'ok'; |
|
} |
|
} elsif ($caller eq 'uploaded') { |
|
|
|
$repstatus = &Apache::lonnet::getuploaded('GET',$embed_url,$cdom,$cnum,\$embed_content,$rtncode); |
|
} |
|
if ($repstatus eq 'ok') { |
|
my $destination = $tempexport.'/resources/'.$count.'/res'; |
|
if (!-e "$destination") { |
|
mkdir($destination,0755); |
|
} |
|
$destination .= '/'.$filename; |
|
my $copiedfile; |
|
if ($copiedfile = Apache::File->new('>'.$destination)) { |
|
print $copiedfile $embed_content; |
|
push @{$href}, .'resources/'.$count.'/res/'.$filename; |
|
my $attrib_regexp = ''; |
|
if (@{$allfiles{$embed_file}} > 1) { |
|
$attrib_regexp = join('|',@{$allfiles{$embed_file}}); |
|
} else { |
|
$attrib_regexp = $allfiles{$embed_file}[0]; |
|
} |
|
$$content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$embed_file\E(['"]?)#$1$newname$2#gi; |
|
if ($caller eq 'resource' && $url =~ /\.(problem|library)$/) { |
|
$$content =~ s#\Q$embed_file\E#$newname#gi; |
|
} |
|
} |
|
} else { |
|
$$message .= 'replication of embedded file - '.$embed_file.' in '.$url.' failed, reason -'.$rtncode."<br />\n"; |
|
} |
|
} |
return; |
return; |
} |
} |
|
|
Line 1175 FOLDERINFO
|
Line 1231 FOLDERINFO
|
} |
} |
|
|
sub process_file_upload { |
sub process_file_upload { |
my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase) = @_; |
my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd) = @_; |
# upload a file, if present |
# upload a file, if present |
my $parseaction; |
my $parseaction; |
if ($env{'form.parserflag'}) { |
if ($env{'form.parserflag'}) { |
Line 1183 sub process_file_upload {
|
Line 1239 sub process_file_upload {
|
} |
} |
my $phase_status; |
my $phase_status; |
my $folder=$env{'form.folder'}; |
my $folder=$env{'form.folder'}; |
if ($folder eq '' || $folder eq 'supplemental') { |
if ($folder eq '') { |
$folder='default'; |
$folder='default'; |
} |
} |
if ( ($folder=~/^$1/) || ($1 eq 'default') ) { |
if ( ($folder=~/^$uploadcmd/) || ($uploadcmd eq 'default') ) { |
my $errtext=''; |
my $errtext=''; |
my $fatal=0; |
my $fatal=0; |
my $container='sequence'; |
my $container='sequence'; |
Line 1203 sub process_file_upload {
|
Line 1259 sub process_file_upload {
|
return 'failed'; |
return 'failed'; |
} |
} |
my $destination = 'docs/'; |
my $destination = 'docs/'; |
if ($folder eq 'default') { |
if ($folder =~ /^supplemental/) { |
|
$destination = 'supplemental/'; |
|
} |
|
if (($folder eq 'default') || ($folder eq 'supplemental')) { |
$destination .= 'default/'; |
$destination .= 'default/'; |
} elsif ($folder =~ /^default_(\d+)$/) { |
} elsif ($folder =~ /^(default|supplemental)_(\d+)$/) { |
$destination .= $1.'/'; |
$destination .= $2.'/'; |
} |
} |
# this is for a course, not a user, so set coursedoc flag |
# this is for a course, not a user, so set coursedoc flag |
# probably the only place in the system where this should be "1" |
# probably the only place in the system where this should be "1" |
Line 1285 sub process_secondary_uploads {
|
Line 1344 sub process_secondary_uploads {
|
my ($upload_output,$coursedom,$coursenum,$formname,$num,$newidx) = @_; |
my ($upload_output,$coursedom,$coursenum,$formname,$num,$newidx) = @_; |
my $folder=$env{'form.folder'}; |
my $folder=$env{'form.folder'}; |
my $destination = 'docs/'; |
my $destination = 'docs/'; |
if ($folder eq 'default') { |
if ($folder =~ /^supplemental/) { |
|
$destination = 'supplemental/'; |
|
} |
|
if (($folder eq 'default') || ($folder eq 'supplemental')) { |
$destination .= 'default/'; |
$destination .= 'default/'; |
} elsif ($folder =~ /^default_(\d+)$/) { |
} elsif ($folder =~ /^(default|supplemental)_(\d+)$/) { |
$destination .= $1.'/'; |
$destination .= $1.'/'; |
} |
} |
$destination .= $newidx; |
$destination .= $newidx; |
Line 1667 sub verifycontent {
|
Line 1729 sub verifycontent {
|
&mt('Return to DOCS').'</a>'); |
&mt('Return to DOCS').'</a>'); |
} |
} |
|
|
|
|
# -------------------------------------------------------------- Check Versions |
# -------------------------------------------------------------- Check Versions |
|
|
|
sub devalidateversioncache { |
|
my $src=shift; |
|
&Apache::lonnet::devalidate_cache_new('courseresversion',$env{'request.course.id'}.'_'. |
|
&Apache::lonnet::clutter($src)); |
|
} |
|
|
sub checkversions { |
sub checkversions { |
my $r=shift; |
my $r=shift; |
my $html=&Apache::lonxml::xmlbegin(); |
my $html=&Apache::lonxml::xmlbegin(); |
Line 1695 sub checkversions {
|
Line 1764 sub checkversions {
|
foreach (keys %hash) { |
foreach (keys %hash) { |
if ($_=~/^ids\_(\/res\/.+)$/) { |
if ($_=~/^ids\_(\/res\/.+)$/) { |
$newsetversions{$1}='mostrecent'; |
$newsetversions{$1}='mostrecent'; |
|
&devalidateversioncache($1); |
} |
} |
} |
} |
} elsif ($env{'form.setcurrent'}) { |
} elsif ($env{'form.setcurrent'}) { |
Line 1704 sub checkversions {
|
Line 1774 sub checkversions {
|
my $getvers=&Apache::lonnet::getversion($1); |
my $getvers=&Apache::lonnet::getversion($1); |
if ($getvers>0) { |
if ($getvers>0) { |
$newsetversions{$1}=$getvers; |
$newsetversions{$1}=$getvers; |
|
&devalidateversioncache($1); |
} |
} |
} |
} |
} |
} |
Line 1714 sub checkversions {
|
Line 1785 sub checkversions {
|
my $src=$1; |
my $src=$1; |
if (($env{$_}) && ($env{$_} ne $setversions{$src})) { |
if (($env{$_}) && ($env{$_} ne $setversions{$src})) { |
$newsetversions{$src}=$env{$_}; |
$newsetversions{$src}=$env{$_}; |
|
&devalidateversioncache($src); |
} |
} |
} |
} |
} |
} |
Line 1943 sub changewarning {
|
Line 2015 sub changewarning {
|
if (defined($env{'form.pagepath'})) { |
if (defined($env{'form.pagepath'})) { |
$pathvar='pagepath'; |
$pathvar='pagepath'; |
$path=&Apache::lonnet::escape($env{'form.pagepath'}); |
$path=&Apache::lonnet::escape($env{'form.pagepath'}); |
$path.='&symb='.&Apache::lonnet::escape($env{'form.pagesymb'}); |
$path.='&pagesymb='.&Apache::lonnet::escape($env{'form.pagesymb'}); |
} |
} |
$url='/adm/coursedocs?'.$pathvar.'='.$path; |
$url='/adm/coursedocs?'.$pathvar.'='.$path; |
} |
} |
Line 2246 ENDNEWSCRIPT
|
Line 2318 ENDNEWSCRIPT
|
# Process file upload - phase one - upload and parse primary file. |
# Process file upload - phase one - upload and parse primary file. |
$upload_result = &process_file_upload(\$upload_output,$coursenum, |
$upload_result = &process_file_upload(\$upload_output,$coursenum, |
$coursedom,\%allfiles, |
$coursedom,\%allfiles, |
\%codebase); |
\%codebase,$1); |
if ($upload_result eq 'phasetwo') { |
if ($upload_result eq 'phasetwo') { |
$r->print($upload_output); |
$r->print($upload_output); |
} |
} |
Line 2647 ENDBLOCK
|
Line 2719 ENDBLOCK
|
<tr><td bgcolor="#DDDDDD"> |
<tr><td bgcolor="#DDDDDD"> |
<form action="/adm/coursedocs" method="post" enctype="multipart/form-data"> |
<form action="/adm/coursedocs" method="post" enctype="multipart/form-data"> |
<input type="file" name="uploaddoc" size="40"> |
<input type="file" name="uploaddoc" size="40"> |
<br />$lt{'comment'}:<br /> |
<br /> |
|
<br /> |
|
<nobr> |
|
<label>$lt{'parse'}? |
|
<input type="checkbox" name="parserflag" /> |
|
</label> |
|
</nobr> |
|
<br /><br /> |
|
$lt{'comment'}:<br /> |
<textarea cols=50 rows=4 name='comment'> |
<textarea cols=50 rows=4 name='comment'> |
</textarea> |
</textarea> |
<br /> |
<br /> |