version 1.145, 2004/09/18 17:04:03
|
version 1.161, 2004/12/23 17:50:42
|
Line 30 package Apache::londocs;
|
Line 30 package Apache::londocs;
|
|
|
use strict; |
use strict; |
use Apache::Constants qw(:common :http); |
use Apache::Constants qw(:common :http); |
|
use Apache::imsexport; |
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::loncommon; |
use Apache::loncommon; |
use Apache::lonratedt; |
use Apache::lonratedt; |
Line 241 sub dumpcourse {
|
Line 242 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 283 sub exportcourse {
|
Line 285 sub exportcourse {
|
$outcome = '<br />As you did not select any content items or discussions for export, an IMS package has not been created. Please <a href="javascript:history.go(-1)">go back</a> to select either content items or discussions for export'; |
$outcome = '<br />As you did not select any content items or discussions for export, an IMS package has not been created. Please <a href="javascript:history.go(-1)">go back</a> to select either content items or discussions for export'; |
} else { |
} else { |
my $now = time; |
my $now = time; |
my $count = 0; |
|
my %symbs; |
my %symbs; |
my $manifestok = 0; |
my $manifestok = 0; |
my $imsresources; |
my $imsresources; |
Line 291 sub exportcourse {
|
Line 292 sub exportcourse {
|
my $copyresult; |
my $copyresult; |
my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport); |
my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport); |
if ($manifestok) { |
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); |
close($ims_manifest); |
|
|
#Create zip file in prtspool |
#Create zip file in prtspool |
Line 320 sub exportcourse {
|
Line 321 sub exportcourse {
|
} |
} |
|
|
$r->print('<html><head><title>Export Course</title></head>'. |
$r->print('<html><head><title>Export Course</title></head>'. |
&Apache::loncommon::bodytag('Export course to IMS or SCORM content package')); |
&Apache::loncommon::bodytag('Export course to IMS content package')); |
$r->print($outcome); |
$r->print($outcome); |
$r->print('</body></html>'); |
$r->print('</body></html>'); |
} else { |
} else { |
Line 369 sub exportcourse {
|
Line 370 sub exportcourse {
|
} |
} |
if (ref($curRes)) { |
if (ref($curRes)) { |
my $symb = $curRes->symb(); |
my $symb = $curRes->symb(); |
|
my $ressymb = $symb; |
|
if ($ressymb =~ m|adm/(\w+)/(\w+)/(\d+)/bulletinboard$|) { |
|
unless ($ressymb =~ m|adm/wrapper/adm|) { |
|
$ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard'; |
|
} |
|
} |
my $color = $count%2; |
my $color = $count%2; |
$display .='<tr bgcolor='.$bgcolors[$color].'><td>'."\n". |
$display .='<tr bgcolor='.$bgcolors[$color].'><td>'."\n". |
'<input type="checkbox" name="archive" value="'.$count.'" '; |
'<input type="checkbox" name="archive" value="'.$count.'" '; |
Line 390 sub exportcourse {
|
Line 397 sub exportcourse {
|
my $currelem = $count+$boards+$startcount; |
my $currelem = $count+$boards+$startcount; |
$children{$parent{$depth}} .= $currelem.':'; |
$children{$parent{$depth}} .= $currelem.':'; |
$display .= ' '.$curRes->title().'</td>'; |
$display .= ' '.$curRes->title().'</td>'; |
if ($discussiontime{$symb} > 0) { |
if ($discussiontime{$ressymb} > 0) { |
$boards ++; |
$boards ++; |
$currelem = $count+$boards+$startcount; |
$currelem = $count+$boards+$startcount; |
$display .= '<td> </td><td align="right"><input type="checkbox" name="discussion" value="'.$count.'" /> </td>'."\n"; |
$display .= '<td> </td><td align="right"><input type="checkbox" name="discussion" value="'.$count.'" /> </td>'."\n"; |
Line 403 sub exportcourse {
|
Line 410 sub exportcourse {
|
<script> |
<script> |
|
|
function checkAll(field) { |
function checkAll(field) { |
for (i = 0; i < field.length; i++) |
if (field.length > 0) { |
field[i].checked = true ; |
for (i = 0; i < field.length; i++) { |
|
field[i].checked = true ; |
|
} |
|
} else { |
|
field.checked = true |
|
} |
} |
} |
|
|
function uncheckAll(field) { |
function uncheckAll(field) { |
for (i = 0; i < field.length; i++) |
if (field.length > 0) { |
field[i].checked = false ; |
for (i = 0; i < field.length; i++) { |
|
field[i].checked = false ; |
|
} |
|
} else { |
|
field.checked = false ; |
|
} |
} |
} |
|
|
function propagateCheck(item) { |
function propagateCheck(item) { |
Line 445 function containerCheck(item) {
|
Line 462 function containerCheck(item) {
|
</script> |
</script> |
|; |
|; |
$r->print('<html><head><title>Export Course</title>'.$scripttag.'</head>'. |
$r->print('<html><head><title>Export Course</title>'.$scripttag.'</head>'. |
&Apache::loncommon::bodytag('Export course to IMS or SCORM content package' |
&Apache::loncommon::bodytag('Export course to IMS content package' |
)); |
)); |
|
|
$r->print($display.'</table>'. |
$r->print($display.'</table>'. |
Line 470 sub create_ims_store {
|
Line 487 sub create_ims_store {
|
if (!-e $$tempexport) { |
if (!-e $$tempexport) { |
mkdir($$tempexport,0700); |
mkdir($$tempexport,0700); |
} |
} |
|
if (!-e "$$tempexport/resources") { |
|
mkdir("$$tempexport/resources",0700); |
|
} |
# open manifest file |
# open manifest file |
my $manifest = '/imsmanifest.xml'; |
my $manifest = '/imsmanifest.xml'; |
my $manifestfilename = $$tempexport.$manifest; |
my $manifestfilename = $$tempexport.$manifest; |
Line 483 sub create_ims_store {
|
Line 503 sub create_ims_store {
|
' identifier="MANIFEST-'.$ENV{'request.course.id'}.'-'.$now.'"'. |
' identifier="MANIFEST-'.$ENV{'request.course.id'}.'-'.$now.'"'. |
' xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1imscp_v1p1.xsd'. |
' xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1imscp_v1p1.xsd'. |
' http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd">'."\n". |
' http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd">'."\n". |
' <organizations default="ORG-."'.$ENV{'request,course.id'}.'-'.$now.'">'."\n". |
' <organizations default="ORG-'.$ENV{'request.course.id'}.'-'.$now.'">'."\n". |
' <organization identifier="ORG-'.$ENV{'request.course.id'}.'-'.$now.'"'. |
' <organization identifier="ORG-'.$ENV{'request.course.id'}.'-'.$now.'"'. |
' structure="hierarchical">'."\n". |
' structure="hierarchical">'."\n". |
' <title>'.$ENV{'request.'.$ENV{'request.course.id'}.'.description'}.'</title>' |
' <title>'.$ENV{'request.'.$ENV{'request.course.id'}.'.description'}.'</title>' |
Line 504 sub build_package {
|
Line 524 sub build_package {
|
my $lastcontainer = 0; |
my $lastcontainer = 0; |
my %parent = (); |
my %parent = (); |
my @dependencies = (); |
my @dependencies = (); |
my $cnum = $ENV{'request.'.$ENV{'request.course.id'}.'.num'}; |
my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
my $cdom = $ENV{'request.'.$ENV{'request.course.id'}.'.domain'}; |
my $cdom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
while ($curRes = $it->next()) { |
while ($curRes = $it->next()) { |
if (ref($curRes)) { |
if (ref($curRes)) { |
$count ++; |
$count ++; |
Line 534 sub build_package {
|
Line 554 sub build_package {
|
$count = 0; |
$count = 0; |
my $imsresources; |
my $imsresources; |
my $pkgdepth; |
my $pkgdepth; |
if ($curRes == $it->BEGIN_MAP()) { |
my $included = 0; |
$prevdepth = $depth; |
while ($curRes = $it->next()) { |
$depth++; |
if ($curRes == $it->BEGIN_MAP()) { |
} |
|
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 ' </item>'."\n"; |
|
} |
|
$prevdepth = $depth; |
$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".' </item>'."\n"; |
|
} |
|
$included = 1; |
|
$prevdepth = $depth; |
|
|
|
my $itementry = |
'<item identifier="ITEM-'.$ENV{'request.course.id'}.'-'.$count. |
'<item identifier="ITEM-'.$ENV{'request.course.id'}.'-'.$count. |
'" isvisible="'.$isvisible.'" '.$resourceref.'>'. |
'" isvisible="'.$isvisible.'" '.$resourceref.'>'. |
'<title>'.$curRes->title().'</title>'; |
'<title>'.$curRes->title().'</title>'; |
print $ims_manifest "\n".$itementry; |
print $ims_manifest "\n".$itementry; |
|
|
unless ($curRes->is_sequence()) { |
unless ($curRes->is_sequence()) { |
my $content_file; |
my $content_file; |
my @hrefs = (); |
my @hrefs = (); |
&process_content($count,$curRes,$cdom,$cnum,$symb,$content_file,\@hrefs,$copyresult,$tempexport); |
&process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport); |
if ($content_file) { |
if ($content_file) { |
$imsresources .= "\n". |
$imsresources .= "\n". |
' <resource identifier="RES-'.$ENV{'request.course.id'}.'-'.$count. |
' <resource identifier="RES-'.$ENV{'request.course.id'}.'-'.$count. |
'" type="webcontent" href="'.$content_file.'">'."\n". |
'" type="webcontent" href="'.$content_file.'">'."\n". |
' <file href="'.$content_file.'" />'."\n"; |
' <file href="'.$content_file.'" />'."\n"; |
foreach (@hrefs) { |
foreach (@hrefs) { |
$imsresources .= |
$imsresources .= |
' <file href="'.$_.'" />'."\n"; |
' <file href="'.$_.'" />'."\n"; |
|
} |
|
if (grep/^$count$/,@$discussions) { |
|
my $ressymb = $symb; |
|
my $mode; |
|
if ($ressymb =~ m|adm/(\w+)/(\w+)/(\d+)/bulletinboard$|) { |
|
unless ($ressymb =~ m|adm/wrapper/adm|) { |
|
$ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard'; |
|
} |
|
$mode = 'board'; |
|
} |
|
my %extras = ( |
|
caller => 'imsexport', |
|
tempexport => $tempexport.'/resources', |
|
count => $count |
|
); |
|
my $discresult = &Apache::lonfeedback::list_discussion($mode,undef,$ressymb,\%extras); |
|
} |
|
$imsresources .= ' </resource>'."\n"; |
} |
} |
$imsresources .= ' </resource>'."\n"; |
|
} |
} |
|
$pkgdepth = $depth; |
|
} else { |
|
$included = 0; |
} |
} |
$pkgdepth = $depth; |
|
} |
} |
} |
} |
while ($pkgdepth > -1) { |
while ($pkgdepth > 0) { |
print $ims_manifest " </item>\n"; |
print $ims_manifest " </item>\n"; |
$pkgdepth --; |
$pkgdepth --; |
} |
} |
Line 602 sub build_package {
|
Line 645 sub build_package {
|
sub get_dependencies { |
sub get_dependencies { |
my ($exportitems,$parent,$depth,$dependencies) = @_; |
my ($exportitems,$parent,$depth,$dependencies) = @_; |
if ($depth > 1) { |
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}; |
push @$dependencies, $$parent{$depth}; |
if ($depth > 2) { |
if ($depth > 2) { |
&get_dependencies($exportitems,$parent,$depth-1,$dependencies); |
&get_dependencies($exportitems,$parent,$depth-1,$dependencies); |
Line 616 sub process_content {
|
Line 659 sub process_content {
|
my $content_type; |
my $content_type; |
my $message; |
my $message; |
# find where user is author or co-author |
# find where user is author or co-author |
my %roleshash = &Appache::lonnet::get_my_roles(); |
my @uploads = (); |
if ($curRes->is_page()) { |
if ($curRes->is_sequence()) { |
$content_type = 'page'; |
$content_type = 'sequence'; |
|
} elsif ($curRes->is_page()) { |
|
$content_type = 'page'; # need to handle individual items in pages. |
} elsif ($symb =~ m-public/$cdom/$cnum/syllabus$-) { |
} elsif ($symb =~ m-public/$cdom/$cnum/syllabus$-) { |
$content_type = 'syllabus'; |
$content_type = 'syllabus'; |
} elsif ($symb =~ m-\.sequence____\d+____ext-) { |
my $contents = &Apache::imsexport::templatedpage($content_type); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
|
} elsif ($symb =~ m-\.sequence___\d+___ext-) { |
$content_type = 'external'; |
$content_type = 'external'; |
|
my $title = $curRes->title; |
|
my $contents = &Apache::imsexport::external($symb,$title); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
} elsif ($symb =~ m-adm/navmaps$-) { |
} elsif ($symb =~ m-adm/navmaps$-) { |
$content_type = 'navmap'; |
$content_type = 'navmap'; |
} elsif ($symb =~ m-adm/$cdom/$cnum/\d+/smppg$-) { |
} elsif ($symb =~ m-adm/[^/]+/[^/]+/(\d+)/smppg$-) { |
$content_type = 'simplepage'; |
$content_type = 'simplepage'; |
} elsif ($symb =~ m-$-) { |
my $contents = &Apache::imsexport::templatedpage($content_type,$1,$count,\@uploads); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
|
} elsif ($symb =~ m-lib/templates/simpleproblem\.problem$-) { |
$content_type = 'simpleproblem'; |
$content_type = 'simpleproblem'; |
} elsif ($symb =~ m-adm/$cdom/$cnum/\d+/bulletinboard$-) { |
my $contents = &Apache::imsexport::simpleproblem($symb); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
|
} elsif ($symb =~ m-lib/templates/examupload\.problem-m) { |
|
$content_type = 'examupload'; |
|
} elsif ($symb =~ m-adm/(\w+)/(\w+)/(\d+)/bulletinboard$-) { |
$content_type = 'bulletinboard'; |
$content_type = 'bulletinboard'; |
} elsif ($symb =~ m-adm/$cdom/$cnum/\d+/aboutme$-) { |
my $contents = &Apache::imsexport::templatedpage($content_type,$3,$count,\@uploads,$1,$2); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
|
} elsif ($symb =~ m-adm/([^/]+)/([^/]+)/aboutme$-) { |
$content_type = 'aboutme'; |
$content_type = 'aboutme'; |
|
my $contents = &Apache::imsexport::templatedpage($content_type,undef,$count,\@uploads,$1,$2); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
} elsif ($symb =~ m-uploaded/$cdom/$cnum-) { |
} elsif ($symb =~ m-uploaded/$cdom/$cnum-) { |
&replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'uploaded'); |
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded'); |
} elsif ($symb =~ m-\.sequence____\d+____([^/])/([^/])-) { |
} elsif ($symb =~ m-\.(sequence|page)___\d+___uploaded/$cdom/$cnum/-) { |
my $coauth = $2.':'.$1.':ca'; |
$$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; |
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; |
$canedit= 1; |
} elsif (defined($roleshash{$coauth})) { |
|
if ($roleshash{$coauth} =~ /(\d+):(\d+)/) { |
|
if (($1 < time || $1 == 0) && ($2 == 0 || $2 >= time)) { |
|
$canedit = 1; |
|
} |
|
} elsif ($roleshash{$coauth} eq ':') { |
|
$canedit = 1; |
|
} |
|
} |
} |
if ($canedit) { |
if ($canedit) { |
&replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'resource'); |
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource'); |
} else { |
} else { |
&replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'noedit'); |
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit'); |
|
} |
|
} |
|
if (@uploads > 0) { |
|
foreach my $item (@uploads) { |
|
my $uploadmsg = ''; |
|
&replicate_content($cdom,$cnum,$tempexport,$item,$count,\$uploadmsg,$href,'templateupload'); |
|
if ($uploadmsg) { |
|
$$copyresult .= $uploadmsg."\n"; |
|
} |
} |
} |
} |
} |
$$copyresult .= $message."\n"; |
if ($message) { |
|
$$copyresult .= $message."\n"; |
|
} |
} |
} |
|
|
sub replicate_content { |
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 ($map,$ind,$url); |
my $feedurl = &Apache::lonnet::clutter($url); |
if ($caller eq 'templateupload') { |
|
$url = $symb; |
|
$url =~ s#//#/#g; |
|
} else { |
|
($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
|
} |
my $content; |
my $content; |
my $filename; |
my $filename; |
my $repstatus; |
my $repstatus; |
if ($url =~ m-[^/]/(.+)$-) { |
my $content_name; |
|
if ($url =~ m-/([^/]+)$-) { |
$filename = $1; |
$filename = $1; |
if (!-e $tempexport.'/resources') { |
if (!-e $tempexport.'/resources') { |
mkdir($tempexport.'/resources',0700); |
mkdir($tempexport.'/resources',0700); |
} |
} |
if (!-e $tempexport.'/resources') { |
if (!-e $tempexport.'/resources/'.$count) { |
mkdir($tempexport.'/resources/'.$count,0700); |
mkdir($tempexport.'/resources/'.$count,0700); |
} |
} |
my $destination = $$tempexport.'/resources/'.$count.'/'.$filename; |
my $destination = $tempexport.'/resources/'.$count.'/'.$filename; |
my $copiedfile; |
my $copiedfile; |
if ($copiedfile = Apache::File->new('>'.$destination)) { |
if ($copiedfile = Apache::File->new('>'.$destination)) { |
my $content; |
my $content; |
if ($caller eq 'uploaded' || $caller eq 'resource') { |
if ($caller eq 'resource') { |
$content = &Apache::lonnet::getfile($url); |
$content = &Apache::lonnet::getfile($url); |
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'); |
$repstatus = 'ok'; |
$repstatus = 'ok'; |
} |
} |
} elsif ($caller eq 'noedit') { |
} elsif ($caller eq 'noedit' || $caller eq 'uploaded' || $caller eq 'templateupload') { |
my $rtncode; |
my $rtncode; |
$repstatus = &getuploaded('GET',$url,$cdom,$cnum,$content,$rtncode); |
$repstatus = &Apache::lonnet::getuploaded('GET',$url,$cdom,$cnum,\$content,$rtncode); |
unless ($repstatus eq 'ok') { |
if ($repstatus eq 'ok') { |
|
if ($url =~ /\.html?$/i) { |
|
&extract_media(\$content,$count,$tempexport,$href,'uploaded'); |
|
} |
|
} else { |
$$message = 'Could not render '.$url.' server message - '.$rtncode; |
$$message = 'Could not render '.$url.' server message - '.$rtncode; |
} |
} |
} |
} |
Line 700 sub replicate_content {
|
Line 787 sub replicate_content {
|
$$message = 'Could not open destination file for '.$filename."\n"; |
$$message = 'Could not open destination file for '.$filename."\n"; |
} |
} |
} else { |
} else { |
$$message = 'Could not determine name of file for '; |
$$message = 'Could not determine name of file for '.$symb."\n"; |
|
} |
|
if ($repstatus eq 'ok') { |
|
$content_name = $count.'/'.$filename; |
|
} |
|
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; |
|
} |
|
|
|
sub store_template { |
|
my ($contents,$tempexport,$count,$content_type) = @_; |
|
if ($contents) { |
|
if ($tempexport) { |
|
if (!-e $tempexport.'/resources') { |
|
mkdir($tempexport.'/resources',0700); |
|
} |
|
if (!-e $tempexport.'/resources/'.$count) { |
|
mkdir($tempexport.'/resources/'.$count,0700); |
|
} |
|
my $destination = $tempexport.'/resources/'.$count.'/'.$content_type.'.xml'; |
|
my $storetemplate; |
|
if ($storetemplate = Apache::File->new('>'.$destination)) { |
|
print $storetemplate $contents; |
|
close($storetemplate); |
|
} |
|
if ($content_type eq 'external') { |
|
return $count.'/'.$content_type.'.html'; |
|
} else { |
|
return $count.'/'.$content_type.'.xml'; |
|
} |
|
} |
} |
} |
return $repstatus; |
|
} |
} |
|
|
# Imports the given (name, url) resources into the course |
# Imports the given (name, url) resources into the course |
Line 989 sub editor {
|
Line 1113 sub editor {
|
# ---------------------------------------------------------------- End commands |
# ---------------------------------------------------------------- End commands |
# ---------------------------------------------------------------- Print screen |
# ---------------------------------------------------------------- Print screen |
my $idx=0; |
my $idx=0; |
|
my $shown=0; |
$r->print('<table>'); |
$r->print('<table>'); |
foreach (@Apache::lonratedt::order) { |
foreach (@Apache::lonratedt::order) { |
my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]); |
my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]); |
unless ($name) { $name=(split(/\//,$url))[-1]; } |
unless ($name) { $name=(split(/\//,$url))[-1]; } |
unless ($name) { next; } |
unless ($name) { $idx++; next; } |
$r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum)); |
$r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum)); |
$idx++; |
$idx++; |
|
$shown++; |
} |
} |
unless ($idx) { |
unless ($shown) { |
$r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>'); |
$r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>'); |
} |
} |
$r->print('</table>'); |
$r->print('</table>'); |
Line 1032 sub entryline {
|
Line 1158 sub entryline {
|
$folderpath=&Apache::lonnet::escape($ENV{'form.folderpath'}); |
$folderpath=&Apache::lonnet::escape($ENV{'form.folderpath'}); |
# $htmlfoldername=&HTML::Entities::encode($ENV{'form.foldername'},'<>&"'); |
# $htmlfoldername=&HTML::Entities::encode($ENV{'form.foldername'},'<>&"'); |
} |
} |
my $pagepath; |
my ($pagepath,$pagesymb); |
if ($ENV{'form.pagepath'}) { |
if ($ENV{'form.pagepath'}) { |
$container = 'page'; |
$container = 'page'; |
$pagepath=&Apache::lonnet::escape($ENV{'form.pagepath'}); |
$pagepath=&Apache::lonnet::escape($ENV{'form.pagepath'}); |
|
$pagesymb=&Apache::lonnet::escape($ENV{'form.pagesymb'}); |
} |
} |
if ($allowed) { |
if ($allowed) { |
my $incindex=$index+1; |
my $incindex=$index+1; |
Line 1062 sub entryline {
|
Line 1189 sub entryline {
|
$line.=(<<END); |
$line.=(<<END); |
<form name="entry_$index" action="/adm/coursedocs" method="post"> |
<form name="entry_$index" action="/adm/coursedocs" method="post"> |
<input type="hidden" name="pagepath" value="$ENV{'form.pagepath'}" /> |
<input type="hidden" name="pagepath" value="$ENV{'form.pagepath'}" /> |
|
<input type="hidden" name="pagesymb" value="$ENV{'form.pagesymb'}" /> |
<input type="hidden" name="setparms" value="$orderidx" /> |
<input type="hidden" name="setparms" value="$orderidx" /> |
<td><table border='0' cellspacing='2' cellpadding='0'> |
<td><table border='0' cellspacing='2' cellpadding='0'> |
<tr><td bgcolor="#DDDDDD"> |
<tr><td bgcolor="#DDDDDD"> |
<a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath'> |
<a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb'> |
<img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr> |
<img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr> |
<tr><td bgcolor="#DDDDDD"> |
<tr><td bgcolor="#DDDDDD"> |
<a href='/adm/coursedocs?cmd=down_$index&pagepath=$pagepath'> |
<a href='/adm/coursedocs?cmd=down_$index&pagepath=$pagepath&pagesymb=$pagesymb'> |
<img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr> |
<img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr> |
</table></td> |
</table></td> |
<td>$selectbox |
<td>$selectbox |
</td><td bgcolor="#DDDDDD"> |
</td><td bgcolor="#DDDDDD"> |
<a href='javascript:removeres("$pagepath","$index","$renametitle","page");'> |
<a href='javascript:removeres("$pagepath","$index","$renametitle","page","$pagesymb");'> |
<font size="-2" color="#990000">$lt{'rm'}</font></a> |
<font size="-2" color="#990000">$lt{'rm'}</font></a> |
<a href='javascript:changename("$pagepath","$index","$renametitle","page");'> |
<a href='javascript:changename("$pagepath","$index","$renametitle","page","$pagesymb");'> |
<font size="-2" color="#009900">$lt{'rn'}</font></a></td> |
<font size="-2" color="#009900">$lt{'rn'}</font></a></td> |
END |
END |
} else { |
} else { |
Line 1150 END
|
Line 1278 END
|
} elsif ($url=~m|^/ext/|) { |
} elsif ($url=~m|^/ext/|) { |
$url='/adm/wrapper'.$url; |
$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); |
$url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb); |
} |
} |
} |
} |
my $parameterset=' '; |
my $parameterset=' '; |
if ($isfolder) { |
if ($isfolder) { |
Line 1161 END
|
Line 1293 END
|
if ($folderpath) { $folderpath.='&' }; |
if ($folderpath) { $folderpath.='&' }; |
$folderpath.=$folderarg.'&'.$foldername; |
$folderpath.=$folderarg.'&'.$foldername; |
$url.='folderpath='.&Apache::lonnet::escape($folderpath); |
$url.='folderpath='.&Apache::lonnet::escape($folderpath); |
$parameterset=&mt('Randomly Pick: '). |
$parameterset='<label>'.&mt('Randomly Pick: '). |
'<input type="text" size="4" name="randpick_'.$orderidx.'" value="'. |
'<input type="text" size="4" name="randpick_'.$orderidx.'" value="'. |
(&Apache::lonratedt::getparameter($orderidx,'parameter_randompick'))[0].'" />'; |
(&Apache::lonratedt::getparameter($orderidx, |
|
'parameter_randompick'))[0]. |
|
'" />'.'</label>'; |
|
|
} |
} |
if ($ispage) { |
if ($ispage) { |
my $pagename=&Apache::lonnet::escape($pagetitle); |
my $pagename=&Apache::lonnet::escape($pagetitle); |
Line 1171 END
|
Line 1306 END
|
my $folderpath=$ENV{'form.folderpath'}; |
my $folderpath=$ENV{'form.folderpath'}; |
if ($folderpath) { $pagepath = $folderpath.'&' }; |
if ($folderpath) { $pagepath = $folderpath.'&' }; |
$pagepath.=$pagearg.'&'.$pagename; |
$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.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon. |
$line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon. |
'" border="0"></a></td>'. |
'" border="0"></a></td>'. |
Line 1187 END
|
Line 1332 END
|
((&Apache::lonratedt::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':''); |
((&Apache::lonratedt::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':''); |
$line.=(<<ENDPARMS); |
$line.=(<<ENDPARMS); |
<td bgcolor="#BBBBFF"><font size='-2'> |
<td bgcolor="#BBBBFF"><font size='-2'> |
<input type="checkbox" name="hidprs_$orderidx" $hidtext/> $lt{'hd'}</td> |
<nobr><label><input type="checkbox" name="hidprs_$orderidx" $hidtext/> $lt{'hd'}</label></nobr></td> |
<!--<td bgcolor="#BBBBFF"><font size='-2'> |
<td bgcolor="#BBBBFF"><font size='-2'> |
<input type="checkbox" name="encprs_$orderidx" $enctext/> $lt{'ec'}</td>--> |
<nobr><label><input type="checkbox" name="encprs_$orderidx" $enctext/> $lt{'ec'}</label></nobr></td> |
<td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td> |
<td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td> |
<td bgcolor="#BBBBFF"><font size='-2'> |
<td bgcolor="#BBBBFF"><font size='-2'> |
<input type="submit" value="$lt{'sp'}" /> |
<input type="submit" value="$lt{'sp'}" /> |
Line 1602 sub is_hash_old {
|
Line 1747 sub is_hash_old {
|
sub changewarning { |
sub changewarning { |
my ($r,$postexec)=@_; |
my ($r,$postexec)=@_; |
if (!&is_hash_old()) { return; } |
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( |
$r->print( |
'<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'. |
'<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'. |
'<form method="post" action="/adm/roles" target="loncapaclient">'. |
'<form method="post" action="/adm/roles" target="loncapaclient">'. |
'<input type="hidden" name="orgurl" value="/adm/coursedocs?folderpath='. |
'<input type="hidden" name="orgurl" value="/adm/coursedocs?'. |
&Apache::lonnet::escape($ENV{'form.folderpath'}). |
$pathvar.'='.$path. |
'" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'. |
'" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'. |
&mt('Changes will become active for your current session after'). |
&mt('Changes will become active for your current session after'). |
' <input type="hidden" name="'. |
' <input type="hidden" name="'. |
Line 1656 sub handler {
|
Line 1808 sub handler {
|
# is this a standard course? |
# is this a standard course? |
|
|
my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//); |
my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//); |
my $forcestandard; |
my $forcestandard = 0; |
my $forcesupplement; |
my $forcesupplement; |
my $script=''; |
my $script=''; |
my $allowed; |
my $allowed; |
Line 1665 sub handler {
|
Line 1817 sub handler {
|
my $containertag; |
my $containertag; |
my $uploadtag; |
my $uploadtag; |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['folderpath','pagepath']); |
['folderpath','pagepath','pagesymb']); |
if ($ENV{'form.folderpath'}) { |
if ($ENV{'form.folderpath'}) { |
my (@folderpath)=split('&',$ENV{'form.folderpath'}); |
my (@folderpath)=split('&',$ENV{'form.folderpath'}); |
$ENV{'form.foldername'}=&Apache::lonnet::unescape(pop(@folderpath)); |
$ENV{'form.foldername'}=&Apache::lonnet::unescape(pop(@folderpath)); |
Line 1675 sub handler {
|
Line 1827 sub handler {
|
my (@pagepath)=split('&',$ENV{'form.pagepath'}); |
my (@pagepath)=split('&',$ENV{'form.pagepath'}); |
$ENV{'form.pagename'}=&Apache::lonnet::unescape(pop(@pagepath)); |
$ENV{'form.pagename'}=&Apache::lonnet::unescape(pop(@pagepath)); |
$ENV{'form.folder'}=pop(@pagepath); |
$ENV{'form.folder'}=pop(@pagepath); |
$containertag = '<input type="hidden" name="pagepath" value="" />'; |
$containertag = '<input type="hidden" name="pagepath" value="" />'. |
$uploadtag = '<input type="hidden" name="pagepath" value="'.$ENV{'form.pagepath'}.'" />'; |
'<input type="hidden" name="pagesymb" value="" />'; |
|
$uploadtag = '<input type="hidden" name="pagepath" value="'.$ENV{'form.pagepath'}.'" />'. |
|
'<input type="hidden" name="pagesymb" value="'.$ENV{'form.pagesymb'}.'" />'; |
} |
} |
if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) { |
if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) { |
$showdoc='/'.$1; |
$showdoc='/'.$1; |
} |
} |
unless ($showdoc) { # got called from remote |
unless ($showdoc) { # got called from remote |
$forcestandard=($ENV{'form.folder'}=~/^default_/); |
if (($ENV{'form.folder'}=~/^default_/) || |
|
($ENV{'form.folder'} =~ m#^\d+/(pages|sequences)/#)) { |
|
$forcestandard = 1; |
|
} |
$forcesupplement=($ENV{'form.folder'}=~/^supplemental_/); |
$forcesupplement=($ENV{'form.folder'}=~/^supplemental_/); |
|
|
# does this user have privileges to post, etc? |
# does this user have privileges to post, etc? |
Line 1816 function finishpick() {
|
Line 1973 function finishpick() {
|
'";this.document.forms.'+form+'.submit();'); |
'";this.document.forms.'+form+'.submit();'); |
} |
} |
|
|
function changename(folderpath,index,oldtitle,container) { |
function changename(folderpath,index,oldtitle,container,pagesymb) { |
var title=prompt('New Title',oldtitle); |
var title=prompt('New Title',oldtitle); |
if (title) { |
if (title) { |
this.document.forms.renameform.title.value=title; |
this.document.forms.renameform.title.value=title; |
Line 1826 function changename(folderpath,index,old
|
Line 1983 function changename(folderpath,index,old
|
} |
} |
if (container == 'page') { |
if (container == 'page') { |
this.document.forms.renameform.pagepath.value=folderpath; |
this.document.forms.renameform.pagepath.value=folderpath; |
|
this.document.forms.renameform.pagesymb.value=pagesymb; |
} |
} |
this.document.forms.renameform.submit(); |
this.document.forms.renameform.submit(); |
} |
} |
} |
} |
|
|
function removeres(folderpath,index,oldtitle,container) { |
function removeres(folderpath,index,oldtitle,container,pagesymb) { |
if (confirm('Remove "'+oldtitle+'"?')) { |
if (confirm('Remove "'+oldtitle+'"?')) { |
this.document.forms.renameform.cmd.value='del_'+index; |
this.document.forms.renameform.cmd.value='del_'+index; |
if (container == 'sequence') { |
if (container == 'sequence') { |
Line 1839 function removeres(folderpath,index,oldt
|
Line 1997 function removeres(folderpath,index,oldt
|
} |
} |
if (container == 'page') { |
if (container == 'page') { |
this.document.forms.renameform.pagepath.value=folderpath; |
this.document.forms.renameform.pagepath.value=folderpath; |
|
this.document.forms.renameform.pagesymb.value=pagesymb; |
} |
} |
this.document.forms.renameform.submit(); |
this.document.forms.renameform.submit(); |
} |
} |