version 1.714, 2024/12/27 02:32:55
|
version 1.715, 2024/12/28 12:19:21
|
Line 579 $contents{webreferences}.'
|
Line 579 $contents{webreferences}.'
|
$title=~s/[\/\s]+/\_/gs; |
$title=~s/[\/\s]+/\_/gs; |
$title=&clean($title); |
$title=&clean($title); |
my $formname = 'dumpdoc'; |
my $formname = 'dumpdoc'; |
my $preamble = &authorspace_selector($r,$formname,$home,$title,%outhash); |
my $preamble = &authorspace_selector($r,$formname,$home,$title,%outhash). |
|
'<div style="padding:0;clear:both;margin:0;border:0"></div>'."\n"; |
my %uploadedfiles; |
my %uploadedfiles; |
&tiehash(); |
&tiehash(); |
foreach my $file (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) { |
foreach my $file (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) { |
Line 643 sub authorspace_selector {
|
Line 644 sub authorspace_selector {
|
} |
} |
$preamble .= '<div class="LC_left_float">'. |
$preamble .= '<div class="LC_left_float">'. |
'<fieldset><legend>'.&mt('Folder in Authoring Space').'</legend>'. |
'<fieldset><legend>'.&mt('Folder in Authoring Space').'</legend>'. |
'<input type="text" size="50" name="authorfolder" value="'.$title.'" />'."\n". |
'<input type="text" size="30" name="authorfolder" value="'.$title.'" />'."\n". |
'</fieldset></div><div style="padding:0;clear:both;margin:0;border:0"></div>'."\n"; |
'</fieldset></div>'."\n"; |
return $preamble; |
return $preamble; |
} |
} |
|
|
Line 694 sub recurse_html {
|
Line 695 sub recurse_html {
|
|
|
sub copycrsauthored { |
sub copycrsauthored { |
my ($r,$coursenum,$coursedom,$coursehome,$readonly) = @_; |
my ($r,$coursenum,$coursedom,$coursehome,$readonly) = @_; |
my ($starthash,$js); |
my ($starthash,$js,$title,$formname); |
|
my %origcrsdata=&Apache::lonnet::coursedescription($env{'request.course.id'}); |
|
$title=$origcrsdata{'description'}; |
|
$title=~s/[\/\s]+/\_/gs; |
|
$title=&clean($title); |
|
my ($home,$other,%outhash)=&authorhosts(); |
unless (($env{'form.authorspace'}) && ($env{'form.authorfolder'}=~/\w/)) { |
unless (($env{'form.authorspace'}) && ($env{'form.authorfolder'}=~/\w/)) { |
$js = <<"ENDJS"; |
my %js_lt; |
|
$formname = 'copycrsauthored'; |
|
if ($home) { |
|
%js_lt = |
|
&Apache::lonlocal::texthash( |
|
yomu => 'You must select an Authoring Space', |
|
whco => 'When Copyright set to "custom", URL of a published rights file is needed.', |
|
); |
|
&js_escape(\%js_lt); |
|
} |
|
if ($home > 1) { |
|
$js = <<"ENDJS"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
|
|
function validCrsCopy() { |
|
var dest = document.$formname.authorspace.options[document.$formname.authorspace.selectedIndex].value; |
|
if (dest == '') { |
|
alert("$js_lt{'yomu'}"); |
|
return false; |
|
} |
|
var dist = document.$formname.copyright.options[document.$formname.copyright.selectedIndex].value; |
|
if (dist == 'custom') { |
|
if (document.$formname.customrights.value == '') { |
|
alert("$js_lt{'whco'}"); |
|
return false; |
|
} |
|
} |
|
return true; |
|
} |
|
|
|
function init_copycrs_form() { |
|
document.$formname.authorspace.selectedIndex = "0"; |
|
document.$formname.authorfolder.value = '$title'; |
|
document.$formname.copyright.selectedIndex = "0"; |
|
} |
|
|
|
// ]]> |
|
</script> |
|
|
|
ENDJS |
|
} elsif ($home) { |
|
$js = <<"ENDJS"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
|
|
function init_copycrs_form() { |
|
document.$formname.authorfolder.value = '$title'; |
|
document.$formname.copyright.selectedIndex = "0"; |
|
} |
|
|
|
// ]]> |
|
</script> |
|
|
|
ENDJS |
|
} |
|
$js .= <<"ENDJS"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
// <![CDATA[ |
// <![CDATA[ |
|
|
Line 707 function hide_searching() {
|
Line 769 function hide_searching() {
|
return; |
return; |
} |
} |
|
|
|
function showHideCustom(caller,divid) { |
|
if (document.getElementById(divid)) { |
|
if (caller.options[caller.selectedIndex].value == 'custom') { |
|
document.getElementById(divid).style.display="inline-block"; |
|
} else { |
|
document.getElementById(divid).style.display="none"; |
|
} |
|
} |
|
return; |
|
} |
|
|
// ]]> |
// ]]> |
</script> |
</script> |
ENDJS |
ENDJS |
|
|
|
$js .= "\n".&Apache::lonhtmlcommon::scripttag(&Apache::loncommon::browser_and_searcher_javascript())."\n"; |
$starthash = { |
$starthash = { |
add_entries => {'onload' => "hide_searching();"}, |
add_entries => {'onload' => "hide_searching(); init_copycrs_form();"}, |
}; |
}; |
} |
} |
$r->print(&Apache::loncommon::start_page('Copy from Course Authoring to User Authoring',$js,$starthash)."\n". |
$r->print(&Apache::loncommon::start_page('Copy from Course Authoring to User Authoring',$js,$starthash)."\n". |
&Apache::lonhtmlcommon::breadcrumbs('Copy from Course Authoring Space')."\n"); |
&Apache::lonhtmlcommon::breadcrumbs('Copy from Course Authoring Space')."\n"); |
$r->print(&startContentScreen('tools')); |
$r->print(&startContentScreen('tools')); |
my ($home,$other,%outhash)=&authorhosts(); |
|
unless ($home) { |
unless ($home) { |
$r->print('<p class="LC_info">'.&mt('No author or co-author roles on this server.').'</p>'); |
$r->print('<p class="LC_info">'.&mt('No author or co-author roles on this server.').'</p>'); |
$r->print(&endContentScreen()); |
$r->print(&endContentScreen()); |
return ''; |
return ''; |
} |
} |
|
my $docroot = $r->dir_config('lonDocRoot'); |
my $is_course_home; |
my $is_course_home; |
my @ids=&Apache::lonnet::current_machine_ids(); |
my @ids=&Apache::lonnet::current_machine_ids(); |
if (($coursehome ne '') && (grep(/^\Q$coursehome\E$/,@ids))) { |
if (($coursehome ne '') && (grep(/^\Q$coursehome\E$/,@ids))) { |
$is_course_home = 1; |
$is_course_home = 1; |
} |
} |
my %origcrsdata=&Apache::lonnet::coursedescription($env{'request.course.id'}); |
|
my $exclude = &Apache::lonnet::priv_exclude(); |
my $exclude = &Apache::lonnet::priv_exclude(); |
my $srcurl = "/priv/$coursedom/$coursenum"; |
my $srcurl = "/priv/$coursedom/$coursenum"; |
my $srctop = $r->dir_config('lonDocRoot').$srcurl; |
my $srctop = $docroot.$srcurl; |
|
my $resurl = "/res/$coursedom/$coursenum"; |
|
my $res_exclude = &Apache::lonnet::res_exclude(); |
if (($env{'form.authorspace'}) && ($env{'form.authorfolder'}=~/\w/)) { |
if (($env{'form.authorspace'}) && ($env{'form.authorfolder'}=~/\w/)) { |
$r->print('<h3>'.&mt('Copying Files and/or Sub-directories').'</h3>'); |
$r->print('<h3>'.&mt('Copying Files and/or Sub-directories').'</h3>'); |
if ($readonly) { |
if ($readonly) { |
Line 748 ENDJS
|
Line 824 ENDJS
|
} |
} |
my ($ca,$cd)=split(/\:/,$env{'form.authorspace'}); |
my ($ca,$cd)=split(/\:/,$env{'form.authorspace'}); |
my $desturl = "/priv/$cd/$ca"; |
my $desturl = "/priv/$cd/$ca"; |
my $desttop = $r->dir_config('lonDocRoot').$desturl; |
my $destresurl = "/res/$cd/$ca"; |
|
my $desttop = $docroot.$desturl; |
my $subdir = &clean($env{'form.authorfolder'}); |
my $subdir = &clean($env{'form.authorfolder'}); |
$subdir = &cleandir($subdir); |
$subdir = &cleandir($subdir); |
if ($subdir eq '') { |
if ($subdir eq '') { |
Line 806 ENDJS
|
Line 883 ENDJS
|
} |
} |
if (keys(%tocopy)) { |
if (keys(%tocopy)) { |
my (%resdirs,%resfiles); |
my (%resdirs,%resfiles); |
my $resurl = "/res/$coursedom/$coursenum"; |
|
my $res_exclude = &Apache::lonnet::res_exclude(); |
|
&Apache::lonnet::recursedirs($is_course_home,1,undef,$res_exclude,0,0,$resurl,'',\%resdirs,\%resfiles); |
&Apache::lonnet::recursedirs($is_course_home,1,undef,$res_exclude,0,0,$resurl,'',\%resdirs,\%resfiles); |
my ($notopdir,%newdir,%newfile,%checkdeps); |
my ($notopdir,%newdir,%newfile,%checkdeps); |
$r->print('<p>'.&mt('Copy to: [_1]', |
$r->print('<p>'.&mt('Copy to: [_1]', |
Line 851 ENDJS
|
Line 926 ENDJS
|
} |
} |
if (-e $desttop.'/'.$subdir) { |
if (-e $desttop.'/'.$subdir) { |
my $num = 0; |
my $num = 0; |
|
my ($copyright,$customdistfile); |
|
if ($env{'form.copyright'} eq 'default' || $env{'form.copyright'} eq 'domain' || $env{'form.copyright'} eq 'public') { |
|
$copyright = $env{'form.copyright'}; |
|
} elsif ($env{'form.copyright'} eq 'custom') { |
|
if ($env{'form.customrights'} =~ m{^/res/$match_domain/$match_username/.+\.rights$}) { |
|
my ($rightsdom,$rightsuname) = ($1,$2); |
|
my $rightshome = &Apache::lonnet::homeserver($rightsdom,$rightsuname); |
|
if (($rightshome eq 'no_host') || ($rightshome eq '')) { |
|
$copyright = 'default'; |
|
} elsif (grep(/^\Q$rightshome\E$/,@ids)) { |
|
if (-e $docroot.$env{'form.customrights'}) { |
|
$copyright = 'custom'; |
|
$customdistfile = $env{'form.customrights'}; |
|
} else { |
|
$copyright = 'default'; |
|
} |
|
} else { |
|
my $rightsfile = &Apache::lonnet::filelocation('',$env{'form.customrights'}); |
|
unless (&Apache::lonnet::getfile($rightsfile) eq '-1') { |
|
$customdistfile = $env{'form.customrights'}; |
|
} |
|
} |
|
} |
|
} |
|
my $sourceavail; |
|
if ($env{'form.sourceavail'} =~ /^(open|closed)$/) { |
|
$sourceavail = $env{'form.sourceavail'}; |
|
} |
|
my $respublish; |
|
if ($env{'form.respublish'}) { |
|
$respublish = 1; |
|
} |
|
my $nokeyref = &Apache::lonpublisher::getnokey($r->dir_config('lonIncludes')); |
foreach my $file (keys(%files_to_copy)) { |
foreach my $file (keys(%files_to_copy)) { |
my ($fail,$dup,$dir_is_file,$src,$dest,$path,$fname); |
my ($fail,$dup,$dir_is_file,$src,$dest,$path,$fname); |
if ($file =~ m{/}) { |
if ($file =~ m{/}) { |
Line 911 ENDJS
|
Line 1019 ENDJS
|
} |
} |
if ($gotmeta) { |
if ($gotmeta) { |
if (open(my $fh,'<',$dest.'.meta')) { |
if (open(my $fh,'<',$dest.'.meta')) { |
my ($output,$now); |
my ($output,$now,setsourceavail); |
$now = time; |
$now = time; |
|
if (($file =~ /\.(xml|html|htm|xhtml|xhtm)$/i) || ($file =~ /$LONCAPA::assess_re/)) { |
|
$setsourceavail = 1; |
|
} |
while (my $line=<$fh>) { |
while (my $line=<$fh>) { |
chomp($line); |
chomp($line); |
if ($line eq "<authorspace>$coursenum:$coursedom</authorspace>") { |
if ($line eq "<authorspace>$coursenum:$coursedom</authorspace>") { |
$output .= "<authorspace>$ca:$cd</authorspace>\n"; |
$output .= "<authorspace>$ca:$cd</authorspace>\n"; |
} elsif ($line eq '<copyright>custom</copyright>') { |
} elsif ($line eq '<copyright>custom</copyright>') { |
$output .= "<copyright>default</copyright>\n"; |
$output .= "<copyright>$copyright</copyright>\n"; |
} elsif ($line =~ m{^<creationdate>\d+</creationdate>$}) { |
} elsif ($line =~ m{^<creationdate>\d+</creationdate>$}) { |
$output .= "<creationdate>$now</creationdate>\n"; |
$output .= "<creationdate>$now</creationdate>\n"; |
} elsif ($line eq "<customdistributionfile>/res/$coursedom/$coursenum/default.rights</customdistributionfile>") { |
} elsif ($line eq "<customdistributionfile>/res/$coursedom/$coursenum/default.rights</customdistributionfile>") { |
$output .= "<customdistributionfile></customdistributionfile>\n"; |
$output .= "<customdistributionfile>$customdistfile</customdistributionfile>\n"; |
|
} elsif ($line =~ m{^<sourceavail>(open|closed)</sourceavail>$}) { |
|
if ($setsourceavail) { |
|
$output .= "<sourceavail>$sourceavail</sourceavail>\n"; |
|
} |
} elsif ($line eq "<domain>$coursedom</domain>") { |
} elsif ($line eq "<domain>$coursedom</domain>") { |
$output .= "<domain>$cd</domain>\n"; |
$output .= "<domain>$cd</domain>\n"; |
} elsif ($line =~ m{^<lastrevisiondate>\d+</lastrevisiondate>$}) { |
} elsif ($line =~ m{^<lastrevisiondate>\d+</lastrevisiondate>$}) { |
Line 1095 ENDJS
|
Line 1210 ENDJS
|
} |
} |
} |
} |
} |
} |
|
if ($respublish) { |
|
my $destresfile = $docroot.$destresurl.'/'.$subdir.'/'.$file; |
|
if ($path eq '') { |
|
if ((ref($resfiles{'/'}) eq 'HASH') && |
|
(exists($resfiles{'/'}{$fname}))) { |
|
my $output = &Apache::lonpublisher::batchpublish($r,$dest,$destresfile,$nokeyref,1); |
|
} |
|
} elsif ((ref($resfiles{$path}) eq 'HASH') && |
|
(exists($resfiles{$path}{$fname}))) { |
|
my $output = &Apache::lonpublisher::batchpublish($r,$dest,$destresfile,$nokeyref,1); |
|
} |
|
} |
} |
} |
} |
} |
} |
} |
Line 1138 ENDJS
|
Line 1265 ENDJS
|
return ''; |
return ''; |
} |
} |
} else { |
} else { |
my $formname = 'copycrsauthored'; |
|
my $chkname = 'copytouser'; |
my $chkname = 'copytouser'; |
my $context = 'crsauthored'; |
my $context = 'crsauthored'; |
my (%subdirs,%files,@dirs_by_depth,@files_by_depth,%parent,%children,%hierarchy,@checked_maps); |
my (%subdirs,%files,@dirs_by_depth,@files_by_depth,%parent,%children,%hierarchy,@checked_maps); |
Line 1172 ENDJS
|
Line 1298 ENDJS
|
} |
} |
my ($info,$display,$onsubmit,$togglebuttons,$disabled); |
my ($info,$display,$onsubmit,$togglebuttons,$disabled); |
my (%resdirs,%resfiles); |
my (%resdirs,%resfiles); |
my $resurl = "/res/$coursedom/$coursenum"; |
&Apache::lonnet::recursedirs($is_course_home,1,undef,$res_exclude,0,0,$resurl,'',\%resdirs,\%resfiles); |
my $resexclude = &Apache::lonnet::res_exclude(); |
my $numpub = 0; |
&Apache::lonnet::recursedirs($is_course_home,1,undef,$resexclude,0,0,$resurl,'',\%resdirs,\%resfiles); |
if (keys(%resfiles)) { |
|
foreach my $dir (keys(%resfiles)) { |
|
if (ref($resfiles{$dir}) eq 'HASH') { |
|
foreach my $file (keys(%{$resfiles{$dir}})) { |
|
if (exists($files{$dir}{$file})) { |
|
$numpub ++; |
|
} |
|
} |
|
} |
|
} |
|
} |
if ($readonly) { |
if ($readonly) { |
$disabled = ' disabled="disabled"'; |
$disabled = ' disabled="disabled"'; |
} |
} |
Line 1186 ENDJS
|
Line 1322 ENDJS
|
' <input type="button" value="'.&mt('uncheck all').'"'. |
' <input type="button" value="'.&mt('uncheck all').'"'. |
' onclick="javascript:uncheckAll(document.'.$formname.'.'.$chkname.')" />'; |
' onclick="javascript:uncheckAll(document.'.$formname.'.'.$chkname.')" />'; |
} |
} |
my $title=$origcrsdata{'description'}; |
my $preamble = &authorspace_selector($r,$formname,$home,$title,%outhash). |
$title=~s/[\/\s]+/\_/gs; |
&courseresource_options($formname,$numpub). |
$title=&clean($title); |
'<div style="padding:0;clear:both;margin:0;border:0"></div>'."\n"; |
my $preamble = &authorspace_selector($r,$formname,$home,$title,%outhash); |
my $display = '<form name="'.$formname.'" action="" method="post" onsubmit="return validCrsCopy();">'."\n". |
my $display = '<form name="'.$formname.'" action="" method="post">'."\n". |
|
$preamble."\n". |
$preamble."\n". |
'<div class="LC_float_left">'."\n". |
'<div class="LC_float_left">'."\n". |
'<fieldset>'."\n". |
'<fieldset>'."\n". |
Line 1326 sub recurse_crsauthored {
|
Line 1461 sub recurse_crsauthored {
|
return $count; |
return $count; |
} |
} |
|
|
|
sub courseresource_options { |
|
my ($formname,$numpub) = @_; |
|
my %lt = &Apache::lonlocal::texthash( |
|
'default' => 'System wide - can be used for any courses system wide', |
|
'domain' => 'Domain only - use limited to courses in the domain', |
|
'custom' => 'Customized right of use ...', |
|
'public' => 'Public - no authentication or authorization required for use', |
|
'closed' => 'Closed - XML source is closed to everyone', |
|
'open' => 'Open - XML source is open to people who want to use it', |
|
'sel' => 'Select', |
|
); |
|
my $output; |
|
if ($numpub) { |
|
$output .= '<div class="LC_left_float">'. |
|
'<fieldset><legend>'.&mt('Published Resources').'</legend>'. |
|
&mt('[quant,_1,file] in Course Authoring Space also exist in Resource Space.', |
|
$numpub).'</br />'. |
|
&mt('Publish copied files in selected Authoring Space?').': '."\n". |
|
'<label><input type="radio" name="respublish" checked="checked" value="1" />'. |
|
&mt('Yes').'</label>'."\n". |
|
'<label><input type="radio" name="respublish" value="0" />'. |
|
&mt('No').'</label>'."\n". |
|
'</fieldset></div>'."\n"; |
|
} |
|
$output .= '<div class="LC_left_float">'. |
|
'<fieldset><legend>'.&mt('Distribution to set in metadata').'</legend>'. |
|
&mt('Copyright').': '. |
|
'<select name="copyright" onchange="showHideCustom(this,'."'LC_customfile'".');">'."\n". |
|
'<option value="default" selected="selected">'.$lt{'default'}.'</option>'."\n". |
|
'<option value="domain">'.$lt{'domain'}.'</option>'."\n". |
|
'<option value="public">'.$lt{'public'}.'</option>'."\n". |
|
'<option value="custom">'.$lt{'custom'}.'</option>'."\n". |
|
'</select><div id="LC_customfile" style="padding:0;clear:both;margin:0;border:0;display:none">'."\n". |
|
'<input type="text" name="customrights" size="60" value="" />'. |
|
'<a href="javascript:openbrowser('."'$formname','customrights','rights'".');">'. |
|
$lt{'sel'}.'</a></div><br />'."\n". |
|
&mt('Source').' :'. |
|
'<select name="sourceavail">'."\n". |
|
'<option value="closed" selected="selected">'.$lt{'closed'}.'</option>'."\n". |
|
'<option value="open">'.$lt{'open'}.'</option>'."\n". |
|
'</select><br />'."\n". |
|
'</fieldset></div>'."\n"; |
|
return $output; |
|
} |
|
|
sub group_import { |
sub group_import { |
my ($coursenum, $coursedom, $folder, $container, $caller, $ltitoolsref, @files) = @_; |
my ($coursenum, $coursedom, $folder, $container, $caller, $ltitoolsref, @files) = @_; |
my ($donechk,$allmaps,%hierarchy,%titles,%addedmaps,%removefrommap, |
my ($donechk,$allmaps,%hierarchy,%titles,%addedmaps,%removefrommap, |