[LON-CAPA-cvs] cvs: loncom /publisher loncfile.pm

raeburn raeburn at source.lon-capa.org
Mon Sep 7 09:18:58 EDT 2026


raeburn		Mon Sep  7 13:18:58 2026 EDT

  Modified files:              
    /loncom/publisher	loncfile.pm 
  Log:
  - If co-author managers have been given permission to create/export an 
    archive file from an Authoring Space then allow access.
  
  
Index: loncom/publisher/loncfile.pm
diff -u loncom/publisher/loncfile.pm:1.137 loncom/publisher/loncfile.pm:1.138
--- loncom/publisher/loncfile.pm:1.137	Fri Aug 21 02:53:53 2026
+++ loncom/publisher/loncfile.pm	Mon Sep  7 13:18:58 2026
@@ -9,7 +9,7 @@
 #  and displays a page showing the results of the action.
 #
 #
-# $Id: loncfile.pm,v 1.137 2026/08/21 02:53:53 raeburn Exp $
+# $Id: loncfile.pm,v 1.138 2026/09/07 13:18:58 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1448,11 +1448,13 @@
         } elsif ($env{'form.action'} eq 'decompress') {
 	    &Decompress1($r, $uname, $udom, $fn);
         } elsif ($env{'form.action'} eq 'archive') {
-            if (($uname eq $env{'user.name'}) && ($udom eq $env{'user.domain'})) {
+            if ((($uname eq $env{'user.name'}) && ($udom eq $env{'user.domain'})) ||
+                (($env{"environment.internal.manager./$udom/$uname"}) &&
+                 ($env{"environment.internal.archive./$udom/$uname"}))) {
                 &Archive1($r,$fn);
             } else {
                 $r->print('<p class="LC_error">'
-                         .&mt('Archiving of Authoring Spaces is only permitted by Author')
+                         .&mt('Archiving of Authoring Spaces is only permitted by Author or co-author Manager')
                          .'</p></form>'
                 );
             }
@@ -1792,9 +1794,11 @@
 sub Archive3 {
     my ($hashref) = @_;
     if (ref($hashref) eq 'HASH') {
-        if (($hashref->{'uname'} eq $env{'user.name'}) &&
-            ($hashref->{'udom'} eq $env{'user.domain'}) &&
-            ($env{'environment.canarchive'}) &&
+        if ((($hashref->{'uname'} eq $env{'user.name'}) &&
+             ($hashref->{'udom'} eq $env{'user.domain'}) &&
+             ($env{'environment.canarchive'})) ||
+            (($env{'environment.internal.manager./'.$hashref->{'udom'}.'/'.$hashref->{'uname'}}) &&
+             ($env{'environment.internal.archive./'.$hashref->{'udom'}.'/'.$hashref->{'uname'}})) &&
             ($env{'form.delarchive'})) {
             my $filesdest = $Apache::lonnet::perlvar{'lonPrtDir'}.'/'.$env{'user.name'}.'_'.$env{'user.domain'}.'_archive_'.$env{'form.delarchive'};
             if (-e $filesdest) {
@@ -1889,9 +1893,11 @@
 	}
 	$dest = $dir."/.";
     } elsif ($env{'form.action'} eq 'archive') {
-        if (($env{'environment.canarchive'}) &&
-            ($env{'user.name'} eq $uname) &&
-            ($env{'user.domain'} eq $udom)) {
+        if ((($env{'environment.canarchive'}) &&
+             ($env{'user.name'} eq $uname) &&
+             ($env{'user.domain'} eq $udom)) ||
+            (($env{"environment.internal.manager./$udom/$uname"}) &&
+             ($env{"environment.internal.archive./$udom/$uname"}))) {
             &Archive2($r,$uname,$udom,$fn,$identifier);
         } else {
             $r->print(&mt('You do not have permission to export to an archive file in this Authoring Space'));
@@ -2066,12 +2072,11 @@
 		       $r->filename);
 	return HTTP_NOT_ACCEPTABLE;
     }
-    if (($env{'form.delarchive'}) &&
-        ($env{'environment.canarchive'})) {
+    if ($env{'form.delarchive'}) {
         &Apache::loncommon::content_type($r,'text/plain');
         $r->send_http_header;
-        if (($env{'user.name'} eq $uname) &&
-            ($env{'user.domain'} eq $udom)) {
+        if ((($env{'environment.canarchive'}) && ($env{'user.name'} eq $uname) && ($env{'user.domain'} eq $udom)) ||
+            (($env{"environment.internal.manager./$udom/$uname"}) && ($env{"environment.internal.archive./$udom/$uname"}))) {
             $r->print(&Archive3($archiveref));
         } else {
             $r->print(&mt('You do not have permission to export to an archive file in this Authoring Space'));
@@ -2103,10 +2108,13 @@
 ENDJS
         $args->{'add_entries'} = { onload => "writeDone()" };
     } elsif (($env{'form.action'} eq 'archive') &&
-             ($env{'environment.canarchive'})) {
-# Check if author already has an archive request in process
+             (($env{'environment.canarchive'}) &&
+              ($uname eq $env{'user.name'}) && ($udom eq $env{'user.domain'})) ||
+              (($env{"environment.internal.manager./$udom/$uname"}) &&
+                 ($env{"environment.internal.archive./$udom/$uname"}))) {
+# Check if user already has an archive request in process
         ($archive_earlyout,$archive_idnum) = &archive_in_progress();
-# Check if archive request was in process which author wishes to terminate
+# Check if archive request was in process which user wishes to terminate
         if ($env{'form.remove_archive_request'}) {
             if ($env{'form.remove_archive_request'} eq $archive_idnum) {
                 if (exists($env{'cgi.'.$archive_idnum.'.archive'})) {
@@ -2399,7 +2407,10 @@
                 return OK; 
             }
         } elsif ($env{'form.action'} eq 'archive') {
-            if ($env{'environment.canarchive'}) {
+            if ((($env{'environment.canarchive'}) &&
+                 ($uname eq $env{'user.name'}) && ($udom eq $env{'user.domain'})) ||
+                (($env{"environment.internal.manager./$udom/$uname"}) &&
+                 ($env{"environment.internal.archive./$udom/$uname"}))) {
                 if ($archive_earlyout) {
                     my $fname = &url($fn);
                     my $title = $action{$env{'form.action'}};




More information about the LON-CAPA-cvs mailing list