--- loncom/interface/londocs.pm 2024/12/27 02:32:55 1.714 +++ loncom/interface/londocs.pm 2025/02/03 22:52:36 1.723 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.714 2024/12/27 02:32:55 raeburn Exp $ +# $Id: londocs.pm,v 1.723 2025/02/03 22:52:36 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -579,7 +579,8 @@ $contents{webreferences}.' $title=~s/[\/\s]+/\_/gs; $title=&clean($title); my $formname = 'dumpdoc'; - my $preamble = &authorspace_selector($r,$formname,$home,$title,%outhash); + my $preamble = &authorspace_selector($r,$formname,$home,$title,%outhash). + '
'."\n"; my %uploadedfiles; &tiehash(); foreach my $file (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) { @@ -643,8 +644,8 @@ sub authorspace_selector { } $preamble .= ''.&mt('No author or co-author roles on this server.').'
'); $r->print(&endContentScreen()); return ''; } + my $docroot = $r->dir_config('lonDocRoot'); my $is_course_home; my @ids=&Apache::lonnet::current_machine_ids(); if (($coursehome ne '') && (grep(/^\Q$coursehome\E$/,@ids))) { $is_course_home = 1; } - my %origcrsdata=&Apache::lonnet::coursedescription($env{'request.course.id'}); my $exclude = &Apache::lonnet::priv_exclude(); 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/)) { $r->print(''.&mt('Copy to: [_1]', ''.$desturl.'/'.$subdir.''). '
'."\n"); @@ -851,6 +926,39 @@ ENDJS } if (-e $desttop.'/'.$subdir) { 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)) { my ($fail,$dup,$dir_is_file,$src,$dest,$path,$fname); if ($file =~ m{/}) { @@ -887,212 +995,164 @@ ENDJS ''.$desturl.'/'.$subdir.'/'.$file.''). ''."\n"); } elsif (($src ne '') && ($dest ne '')) { - if ($is_course_home) { - if (&File::Copy::copy($src,$dest)) { - $newfile{$file} = 1; - } - } else { - if (&Apache::lonnet::repcopy_crsprivfile($srcurl.'/'.$file,$dest) eq 'ok') { - $newfile{$file} = 1; + my $ressrc = $docroot.$resurl.'/'.$file; + my $ressrcmeta = $ressrc.'.meta'; + my ($ext) = ($file =~ /\.(\w+)$/); + my $embstyle=&Apache::loncommon::fileembstyle($ext); + my ($getres,$getresmeta); + if ($respublish) { + if ($path eq '') { + if ((ref($resfiles{'/'}) eq 'HASH') && + (exists($resfiles{'/'}{$fname}))) { + $getres = 1; + $getresmeta = 1; + } + } elsif ((ref($resfiles{$path}) eq 'HASH') && + (exists($resfiles{$path}{$fname}))) { + $getres = 1; + $getresmeta = 1; } } - if ($newfile{$file}) { - my $gotmeta; - if ($is_course_home) { - if ((-e $src.'.meta') && (!-e $dest.'.meta')) { - if (&File::Copy::copy($src.'.meta',$dest.'.meta')) { - $gotmeta = 1; + if ($is_course_home) { + my ($needpriv,$needprivmeta); + if ($respublish) { + if ($getres) { + if (&Apache::londiff::are_different_files($src,$ressrc)) { + $needpriv = 1; + if (&File::Copy::copy($ressrc,$dest)) { + if ($embstyle eq 'ssi') { + &crsres_fixup($dest,$coursenum,$coursedom,$ca,$cd); + } + } + } else { + if (&File::Copy::copy($src,$dest)) { + $newfile{$file} = $desturl.'/'.$subdir.'/'.$file; + if ($embstyle eq 'ssi') { + &crsres_fixup($dest,$coursenum,$coursedom,$ca,$cd,$subdir); + } + } } + } else { + $needpriv = 1; } - } else { - if (&Apache::lonnet::repcopy_crsprivfile($srcurl.'/'.$file.'.meta',$dest.'.meta') eq 'ok') { - $gotmeta = 1; - } - } - if ($gotmeta) { - if (open(my $fh,'<',$dest.'.meta')) { - my ($output,$now); - $now = time; - while (my $line=<$fh>) { - chomp($line); - if ($line eq "