--- loncom/interface/londocs.pm	2006/08/11 22:00:07	1.244
+++ loncom/interface/londocs.pm	2006/11/12 02:13:05	1.247
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.244 2006/08/11 22:00:07 albertel Exp $
+# $Id: londocs.pm,v 1.247 2006/11/12 02:13:05 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -33,8 +33,8 @@ use Apache::Constants qw(:common :http);
 use Apache::imsexport;
 use Apache::lonnet;
 use Apache::loncommon;
-use Apache::lonratedt;
-use Apache::lonratsrv;
+use LONCAPA::map();
+use Apache::lonratedt();
 use Apache::lonxml;
 use Apache::lonclonecourse;
 use Apache::lonnavmaps;
@@ -57,7 +57,7 @@ my $hadchanges;
 
 my %help=();
 
-# Mapread read maps into lonratedt::global arrays 
+# Mapread read maps into LONCAPA::map:: global arrays 
 # @order and @resources, determines status
 # sets @order - pointer to resources in right order
 # sets @resources - array with the resources with correct idx
@@ -66,15 +66,15 @@ my %help=();
 sub mapread {
     my ($coursenum,$coursedom,$map)=@_;
     return
-      &Apache::lonratedt::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
-                                $map);
+      &LONCAPA::map::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
+			     $map);
 }
 
 sub storemap {
     my ($coursenum,$coursedom,$map)=@_;
     my ($outtext,$errtext)=
-      &Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
-                                $map,1);
+      &LONCAPA::map::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
+			      $map,1);
     if ($errtext) { return ($errtext,2); }
     
     $hadchanges=1;
@@ -930,13 +930,13 @@ sub group_import {
             }
         }
 	if ($url) {
-	    my $idx = &Apache::lonratedt::getresidx($url);
-	    $Apache::lonratedt::order[$#Apache::lonratedt::order+1]=$idx;
+	    my $idx = &LONCAPA::map::getresidx($url);
+	    $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
 	    my $ext = 'false';
 	    if ($url=~/^http:\/\//) { $ext = 'true'; }
 	    $url =~ s/:/\:/g;
 	    $name =~ s/:/\:/g;
-	    $Apache::lonratedt::resources[$idx] = 
+	    $LONCAPA::map::resources[$idx] = 
 		join ':', ($name, $url, $ext, 'normal', 'res');
 	}
     }
@@ -991,6 +991,135 @@ sub breadcrumbs {
 					       'LC_docs_path'),$randompick,$ishidden,$isencrypted);
 }
 
+sub log_docs {
+    return &Apache::lonnet::instructor_log('docslog',@_);
+}
+
+{
+    my @oldresources=();
+    my @oldorder=();
+    my $parmidx;
+    my %parmaction=();
+    my %parmvalue=();
+
+    sub snapshotbefore {
+        @oldresources=@Apache::lonratedt::resources;
+        @oldorder=@Apache::lonratedt::order;
+        $parmidx=undef;
+        %parmaction=();
+        %parmvalue=();
+    }
+
+    sub remember_parms {
+        my ($idx,$parameter,$action,$value)=@_;
+        $parmidx=$idx;
+        $parmaction{$parameter}=$action;
+        $parmvalue{$parameter}=$value;
+    }
+
+    sub log_differences {
+        my $r=shift;
+        my %storehash=('folder' => $env{'form.folder'});
+        if ($parmidx) {
+           $storehash{'parameter_idx'}=$parmidx;
+           $storehash{'parameter_res'}=$oldresources[$parmidx];
+           foreach my $parm (keys %parmaction) {
+              $storehash{'parameter_action_'.$parm}=$parmaction{$parm};
+              $storehash{'parameter_value_'.$parm}=$parmvalue{$parm};
+           }
+        }
+        my $maxidx=$#oldresources;
+        if ($#Apache::lonratedt::resources>$#oldresources) {
+           $maxidx=$#Apache::lonratedt::resources;
+        }
+        for (my $idx=0; $idx<=$maxidx; $idx++) {
+           if ($LONCAPA::map::resources[$idx] ne $oldresources[$idx]) {
+              $storehash{'before_resources_'.$idx}=$oldresources[$idx];
+              $storehash{'after_resources_'.$idx}=$LONCAPA::map::resources[$idx];
+           }
+           if ($LONCAPA::map::order[$idx] ne $oldorder[$idx]) {
+              $storehash{'before_order_'.$idx}=$oldorder[$idx];
+              $storehash{'after_order_'.$idx}=$LONCAPA::map::order[$idx];
+              $storehash{'before_order_res_'.$idx}=$oldresources[$idx];
+              $storehash{'after_order_res_'.$idx}=$LONCAPA::map::resources[$idx];
+           }
+        }
+        &log_docs(\%storehash);
+    }
+}
+
+
+#
+# Docs Change Log
+#
+sub docs_change_log {
+    my ($r)=@_;
+    $r->print(&Apache::loncommon::start_page('Course Document Change Log'));
+    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Document Change Log'));
+                                                                                                                            
+    my %docslog=&Apache::lonnet::dump('nohist_docslog',
+                                      $env{'course.'.$env{'request.course.id'}.'.domain'},
+                                      $env{'course.'.$env{'request.course.id'}.'.num'});
+                                                                                                                            
+    if ((keys(%docslog))[0]=~/^error\:/) { undef(%docslog); }
+                                                                                                                            
+    $r->print('<form action="/adm/coursedocs" method="post" name="docslog">'.
+              '<input type="hidden" name="docslog" value="1" />');
+                                                                                                                            
+    my %saveable_parameters = ('show' => 'scalar',);
+    &Apache::loncommon::store_course_settings('docs_log',
+                                              \%saveable_parameters);
+    &Apache::loncommon::restore_course_settings('docs_log',
+                                                \%saveable_parameters);
+    if (!$env{'form.show'}) { $env{'form.show'}=10; }
+                                                                                                                            
+    my $countselect =
+        &Apache::lonmeta::selectbox('show',$env{'form.show'},undef,
+                                    (&mt('all'),10,20,50,100,1000,10000));
+                                                                                                                            
+    $r->print('<nobr>'.&mt('[_1] Records',$countselect).'</nobr>'.
+              '<input type="submit" value="'.&mt('Display').'" /></form>');
+    $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row().
+              '<th>'.&mt('Time').'</th><th>'.&mt('User').'</th><th>'.&mt('Extent').'</th><th>'.&mt('Users').'</th><th>'.
+              &mt('Parameter').'</th><th>'.&mt('Part').'</th><th>'.&mt('New Value').'</th><th>'.&mt('Announce').'</th>'.
+              &Apache::loncommon::end_data_table_header_row());
+    my $shown=0;
+    foreach my $id (sort { $docslog{$b}{'exe_time'}<=>$docslog{$a}{'exe_time'} } (keys(%docslog))) {
+        my @changes=keys(%{$docslog{$id}{'logentry'}});
+        my $count = 0;
+        my $time =
+            &Apache::lonlocal::locallocaltime($docslog{$id}{'exe_time'});
+        my $plainname =
+            &Apache::loncommon::plainname($docslog{$id}{'exe_uname'},
+                                          $docslog{$id}{'exe_udom'});
+        my $about_me_link =
+            &Apache::loncommon::aboutmewrapper($plainname,
+                                               $docslog{$id}{'exe_uname'},
+                                               $docslog{$id}{'exe_udom'});
+        my $send_msg_link='';
+        if ((($docslog{$id}{'exe_uname'} ne $env{'user.name'})
+             || ($docslog{$id}{'exe_udom'} ne $env{'user.domain'}))) {
+            $send_msg_link ='<br />'.
+                &Apache::loncommon::messagewrapper(&mt('Send message'),
+                                                   $docslog{$id}{'exe_uname'},
+                                                   $docslog{$id}{'exe_udom'});
+        }
+        $r->print(&Apache::loncommon::start_data_table_row());
+        $r->print('<td>'.$time.'</td>
+                       <td>'.$about_me_link.
+                  '<br /><tt>'.$docslog{$id}{'exe_uname'}.
+                                  ':'.$docslog{$id}{'exe_udom'}.'</tt>'.
+                  $send_msg_link.'</td>');
+
+        $r->print(&Apache::loncommon::end_data_table_row());
+        $shown++;
+        if (!($env{'form.show'} eq &mt('all')
+              || $shown<=$env{'form.show'})) { last; }
+    }
+    $r->print(&Apache::loncommon::end_data_table());
+    $r->print(&Apache::loncommon::end_page());
+}
+
 sub editor {
     my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output)=@_;
     my $errtext='';
@@ -1001,15 +1130,15 @@ sub editor {
     }
     ($errtext,$fatal)=
               &mapread($coursenum,$coursedom,$folder.'.'.$container);
-    if ($#Apache::lonratedt::order<1) {
-	my $idx=&Apache::lonratedt::getresidx();
+    if ($#LONCAPA::map::order<1) {
+	my $idx=&LONCAPA::map::getresidx();
 	if ($idx<=0) { $idx=1; }
-       	$Apache::lonratedt::order[0]=$idx;
-        $Apache::lonratedt::resources[$idx]='';
+       	$LONCAPA::map::order[0]=$idx;
+        $LONCAPA::map::resources[$idx]='';
     }
     if (defined($env{'form.markcopy'})) {
 # Mark for copying
-	my ($title,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$env{'form.markcopy'}]]);
+	my ($title,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$env{'form.markcopy'}]]);
 	$env{'form.markedcopy_title'}=$title;
 	$env{'form.markedcopy_url'}=$url;
     }
@@ -1023,68 +1152,73 @@ sub editor {
 # ---------------- if they are for this folder and user allowed to make changes
 	if (($allowed) && ($env{'form.folder'} eq $folder)) {
 # set parameters and change order
-	    if (defined($env{'form.setparms'})) {
+            &snapshotbefore();
+	    if ($env{'form.changeparms'}) {
 		my $idx=$env{'form.setparms'};
 # set parameters
 		if ($env{'form.randpick_'.$idx}) {
-		    &Apache::lonratedt::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');
+		    &LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');
+                    &remember_parms($idx,'randompick','set',$env{'form.randpick_'.$idx});
 		} else {
-		    &Apache::lonratedt::delparameter($idx,'parameter_randompick');
+		    &LONCAPA::map::delparameter($idx,'parameter_randompick');
+                    &remember_parms($idx,'randompick','del');
 		}
 		if ($env{'form.hidprs_'.$idx}) {
-		    &Apache::lonratedt::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');
-		} else {
-		    &Apache::lonratedt::delparameter($idx,'parameter_hiddenresource');
-		}
+		    &LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');
+                    &remember_parms($idx,'hiddenresource','set',$env{'form.hidprs_'.$idx});
+ 		} else {
+		    &LONCAPA::map::delparameter($idx,'parameter_hiddenresource');
+                    &remember_parms($idx,'hiddenresource','del');
+ 		}
 		if ($env{'form.encprs_'.$idx}) {
-		    &Apache::lonratedt::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');
-		} else {
-		    &Apache::lonratedt::delparameter($idx,'parameter_encrypturl');
-		}
+		    &LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');
+                    &remember_parms($idx,'encrypturl','set',$env{'form.encprs_'.$idx});
+ 		} else {
+		    &LONCAPA::map::delparameter($idx,'parameter_encrypturl');
+                    &remember_parms($idx,'encrypturl','del');
+ 		}
+	    }
 
-		if ($env{'form.newpos'}) {
+	    if ($env{'form.newpos'}) {
 # change order
-
-		    my $newpos=$env{'form.newpos'}-1;
-		    my $currentpos=$env{'form.currentpos'}-1;
-		    my $i;
-		    my @neworder=();
-		    if ($newpos>$currentpos) {
+		my $newpos=$env{'form.newpos'}-1;
+		my $currentpos=$env{'form.currentpos'}-1;
+		my $i;
+		my @neworder=();
+		if ($newpos>$currentpos) {
 # moving stuff up
-			for ($i=0;$i<$currentpos;$i++) {
-			    $neworder[$i]=$Apache::lonratedt::order[$i];
-			}
-			for ($i=$currentpos;$i<$newpos;$i++) {
-			    $neworder[$i]=$Apache::lonratedt::order[$i+1];
-			}
-                        $neworder[$newpos]=$Apache::lonratedt::order[$currentpos];
-			for ($i=$newpos+1;$i<=$#Apache::lonratedt::order;$i++) {
-			    $neworder[$i]=$Apache::lonratedt::order[$i];
-			}
-		    } else {
+		    for ($i=0;$i<$currentpos;$i++) {
+			$neworder[$i]=$LONCAPA::map::order[$i];
+		    }
+		    for ($i=$currentpos;$i<$newpos;$i++) {
+			$neworder[$i]=$LONCAPA::map::order[$i+1];
+		    }
+		    $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
+		    for ($i=$newpos+1;$i<=$#LONCAPA::map::order;$i++) {
+			$neworder[$i]=$LONCAPA::map::order[$i];
+		    }
+		} else {
 # moving stuff down
-			for ($i=0;$i<$newpos;$i++) {
-			    $neworder[$i]=$Apache::lonratedt::order[$i];
-			}
-			$neworder[$newpos]=$Apache::lonratedt::order[$currentpos];
-			for ($i=$newpos+1;$i<$currentpos+1;$i++) {
-			    $neworder[$i]=$Apache::lonratedt::order[$i-1];
-			}
-			for ($i=$currentpos+1;$i<=$#Apache::lonratedt::order;$i++) {
-			    $neworder[$i]=$Apache::lonratedt::order[$i];
-			}
+		    for ($i=0;$i<$newpos;$i++) {
+			$neworder[$i]=$LONCAPA::map::order[$i];
+		    }
+		    $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
+		    for ($i=$newpos+1;$i<$currentpos+1;$i++) {
+			$neworder[$i]=$LONCAPA::map::order[$i-1];
+		    }
+		    for ($i=$currentpos+1;$i<=$#LONCAPA::map::order;$i++) {
+			$neworder[$i]=$LONCAPA::map::order[$i];
 		    }
-		    @Apache::lonratedt::order=@neworder;
 		}
+		@LONCAPA::map::order=@neworder;
 # store the changed version
-
 		($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
 		if ($fatal) {
 		    $r->print('<p><font color="red">'.$errtext.'</font></p>');
 		    return;
 		}
-		
 	    }
+		
 	    if ($env{'form.pastemarked'}) {
 # paste resource to end of list
                 my $url=$env{'form.markedcopy_url'};
@@ -1109,10 +1243,10 @@ sub editor {
 		if ($url=~/^http\:\/\//) { $ext='true'; }
 		$url=~s/\:/\&colon;/g;
 # Now insert the URL at the bottom
-                my $newidx=&Apache::lonratedt::getresidx($url);
-		$Apache::lonratedt::resources[$newidx]=
+                my $newidx=&LONCAPA::map::getresidx($url);
+		$LONCAPA::map::resources[$newidx]=
 		    $title.':'.$url.':'.$ext.':normal:res';
-		$Apache::lonratedt::order[1+$#Apache::lonratedt::order]=$newidx;
+		$LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx;
 # Store the result
 		($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
 		if ($fatal) {
@@ -1125,54 +1259,48 @@ sub editor {
 	    if ($env{'form.cmd'}) {
                 my ($cmd,$idx)=split(/\_/,$env{'form.cmd'});
                 if ($cmd eq 'del') {
-		    my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);
+		    my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
 		    if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
 			($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {
 			&Apache::lonnet::removeuploadedurl($url);
 		    } else {
-			&Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);
+			&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
 		    }
-		    for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) {
-                        $Apache::lonratedt::order[$i]=
-                          $Apache::lonratedt::order[$i+1];
+		    for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {
+                        $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
                     }
-                    $#Apache::lonratedt::order--;
+                    $#LONCAPA::map::order--;
                 } elsif ($cmd eq 'cut') {
-		    my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);
-		    &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);
-		    for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) {
-                        $Apache::lonratedt::order[$i]=
-                          $Apache::lonratedt::order[$i+1];
+		    my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
+		    &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
+		    for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {
+                        $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
                     }
-                    $#Apache::lonratedt::order--;
+                    $#LONCAPA::map::order--;
                 } elsif ($cmd eq 'up') {
-		  if (($idx) && (defined($Apache::lonratedt::order[$idx-1]))) {
-                    my $i=$Apache::lonratedt::order[$idx-1];
-                    $Apache::lonratedt::order[$idx-1]=
-			$Apache::lonratedt::order[$idx];
-                    $Apache::lonratedt::order[$idx]=$i;
+		  if (($idx) && (defined($LONCAPA::map::order[$idx-1]))) {
+                    my $i=$LONCAPA::map::order[$idx-1];
+                    $LONCAPA::map::order[$idx-1] = $LONCAPA::map::order[$idx];
+                    $LONCAPA::map::order[$idx] = $i;
 		   }
                 } elsif ($cmd eq 'down') {
-		   if (defined($Apache::lonratedt::order[$idx+1])) {
-                    my $i=$Apache::lonratedt::order[$idx+1];
-                    $Apache::lonratedt::order[$idx+1]=
-			$Apache::lonratedt::order[$idx];
-                    $Apache::lonratedt::order[$idx]=$i;
+		   if (defined($LONCAPA::map::order[$idx+1])) {
+                    my $i=$LONCAPA::map::order[$idx+1];
+                    $LONCAPA::map::order[$idx+1] = $LONCAPA::map::order[$idx];
+                    $LONCAPA::map::order[$idx] = $i;
 		   }
                 } elsif ($cmd eq 'rename') {
-                    my $ratstr = $Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]];
+                    my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];
                     my ($rtitle,@rrest)=split(/\:/,
-                       $Apache::lonratedt::resources[
-				       $Apache::lonratedt::order[$idx]]);
+                       $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
                     my $comment=
                      &HTML::Entities::decode($env{'form.title'});
                     $comment=~s/\</\&lt\;/g;
                     $comment=~s/\>/\&gt\;/g;
                     $comment=~s/\:/\&colon;/g;
 		    if ($comment=~/\S/) {
-			$Apache::lonratedt::resources[
-				       $Apache::lonratedt::order[$idx]]=
-				            $comment.':'.join(':',@rrest);
+			$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=
+			    $comment.':'.join(':',@rrest);
 		    }
 # Devalidate title cache
                     my $renamed_url=$rrest[0];
@@ -1213,10 +1341,9 @@ sub editor {
                if ($env{'form.importmap'}=~/\w/) {
 	          foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {
 		      my ($title,$url,$ext,$type)=split(/\:/,$_);
-                      my $idx=&Apache::lonratedt::getresidx($url);
-                      $Apache::lonratedt::resources[$idx]=$_;
-                      $Apache::lonratedt::order
-		          [$#Apache::lonratedt::order+1]=$idx;
+                      my $idx=&LONCAPA::map::getresidx($url);
+                      $LONCAPA::map::resources[$idx]=$_;
+                      $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
 	          }
 # Store the changed version
   	          ($errtext,$fatal)=&storemap($coursenum,$coursedom,
@@ -1229,6 +1356,7 @@ sub editor {
                    $r->print('<p><font color="red">'.&mt('No map selected.').'</font></p>');
                }
            }
+           &log_differences($r);
        }
 # ---------------------------------------------------------------- End commands
 # ---------------------------------------------------------------- Print screen
@@ -1245,10 +1373,10 @@ sub editor {
            $r->print('<p>'.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'</p>');
         }
         $r->print('<table>');
-        foreach (@Apache::lonratedt::order) {
-           my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);
-	   $name=&Apache::lonratsrv::qtescape($name);
-	   $url=&Apache::lonratsrv::qtescape($url);
+        foreach (@LONCAPA::map::order) {
+           my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$_]);
+	   $name=&LONCAPA::map::qtescape($name);
+	   $url=&LONCAPA::map::qtescape($url);
            unless ($name) {  $name=(split(/\//,$url))[-1]; }
            unless ($name) { $idx++; next; }
            $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum));
@@ -1306,9 +1434,9 @@ sub process_file_upload {
         }
         ($errtext,$fatal)=
               &mapread($coursenum,$coursedom,$folder.'.'.$container);
-        if ($#Apache::lonratedt::order<1) {
-            $Apache::lonratedt::order[0]=1;
-            $Apache::lonratedt::resources[1]='';
+        if ($#LONCAPA::map::order<1) {
+            $LONCAPA::map::order[0]=1;
+            $LONCAPA::map::resources[1]='';
         }
         if ($fatal) {
             return 'failed';
@@ -1324,7 +1452,7 @@ sub process_file_upload {
         }
 # this is for a course, not a user, so set coursedoc flag
 # probably the only place in the system where this should be "1"
-        my $newidx=&Apache::lonratedt::getresidx();
+        my $newidx=&LONCAPA::map::getresidx();
         $destination .= $newidx;
         my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination,
 						$parseaction,$allfiles,
@@ -1341,9 +1469,9 @@ sub process_file_upload {
                   $env{'user.domain'}.'___&&&___'.$comment;
         }
 
-        $Apache::lonratedt::resources[$newidx]=
-                  $comment.':'.$url.':'.$ext.':normal:res';
-        $Apache::lonratedt::order[$#Apache::lonratedt::order+1]= $newidx;
+        $LONCAPA::map::resources[$newidx]=
+	    $comment.':'.$url.':'.$ext.':normal:res';
+        $LONCAPA::map::order[$#LONCAPA::map::order+1]= $newidx;
         ($errtext,$fatal)=&storemap($coursenum,$coursedom,
 				    $folder.'.'.$container);
         if ($fatal) {
@@ -1424,7 +1552,7 @@ sub entryline {
     my $renametitle=$title;
     my $foldertitle=$title;
     my $pagetitle=$title;
-    my $orderidx=$Apache::lonratedt::order[$index];
+    my $orderidx=$LONCAPA::map::order[$index];
     if ($title=~ /^(\d+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(.*)$/	) { 
 	$foldertitle=&Apache::lontexconvert::msgtexconverted($4);
 	$renametitle=$4;
@@ -1460,17 +1588,17 @@ sub entryline {
 	my $incindex=$index+1;
 	my $selectbox='';
 	if (($folder!~/^supplemental/) &&
-	    ($#Apache::lonratedt::order>0) && 
+	    ($#LONCAPA::map::order>0) && 
 	    ((split(/\:/,
-	     $Apache::lonratedt::resources[$Apache::lonratedt::order[0]]))[1] 
+	     $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1] 
 	     ne '') && 
 	    ((split(/\:/,
-	     $Apache::lonratedt::resources[$Apache::lonratedt::order[1]]))[1] 
+	     $LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1] 
 	     ne '')) {
 	    $selectbox=
 		'<input type="hidden" name="currentpos" value="'.$incindex.'" />'.
 		'<select name="newpos" onChange="this.form.submit()">';
-	    for (my $i=1;$i<=$#Apache::lonratedt::order+1;$i++) {
+	    for (my $i=1;$i<=$#LONCAPA::map::order+1;$i++) {
 		if ($i==$incindex) {
 		    $selectbox.='<option value="" selected="1">('.$i.')</option>';
 		} else {
@@ -1511,6 +1639,7 @@ ENDCOPY
 <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />
 <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" />
 <input type="hidden" name="setparms" value="$orderidx" />
+<input type="hidden" name="changeparms" value="0" />
 <td><table border='0' cellspacing='2' cellpadding='0'>
 <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb$cpinfo'>
@@ -1542,6 +1671,7 @@ ENDCOPY
 <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />
 <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" />
 <input type="hidden" name="setparms" value="$orderidx" />
+<input type="hidden" name="changeparms" value="0" />
 <td><table border='0' cellspacing='2' cellpadding='0'>
 <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?cmd=up_$index&folderpath=$folderpath$cpinfo'>
@@ -1631,16 +1761,16 @@ END
 	if ($folderpath) { $folderpath.='&' };
 # Append randompick number, hidden, and encrypted with ":" to foldername, 
 # so it gets transferred between levels
-	$folderpath.=$folderarg.'&'.$foldername.':'.(&Apache::lonratedt::getparameter($orderidx,
+	$folderpath.=$folderarg.'&'.$foldername.':'.(&LONCAPA::map::getparameter($orderidx,
                                               'parameter_randompick'))[0]
-                                               .':'.((&Apache::lonratedt::getparameter($orderidx,
+                                               .':'.((&LONCAPA::map::getparameter($orderidx,
                                               'parameter_hiddenresource'))[0]=~/^yes$/i)
-                                               .':'.((&Apache::lonratedt::getparameter($orderidx,
+                                               .':'.((&LONCAPA::map::getparameter($orderidx,
                                               'parameter_encrypturl'))[0]=~/^yes$/i);
 	$url.='folderpath='.&escape($folderpath).$cpinfo;
 	$parameterset='<label>'.&mt('Randomly Pick: ').
-	    '<input type="text" size="4" onChange="this.form.submit()" name="randpick_'.$orderidx.'" value="'.
-	    (&Apache::lonratedt::getparameter($orderidx,
+	    '<input type="text" size="4" onChange="this.form.changeparms.value=1;this.form.submit()" name="randpick_'.$orderidx.'" value="'.
+	    (&LONCAPA::map::getparameter($orderidx,
                                               'parameter_randompick'))[0].
                                               '" />'.
 '<font size="-2"><a href="javascript:void(0)">'.&mt('Store').'</a></font></label>';
@@ -1673,14 +1803,14 @@ END
  			      'hd' => 'Hidden',
  			      'ec' => 'URL hidden');
 	my $enctext=
-	    ((&Apache::lonratedt::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':'');
+	    ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':'');
 	my $hidtext=
-	    ((&Apache::lonratedt::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');
+	    ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');
 	$line.=(<<ENDPARMS);
 <td bgcolor="#BBBBFF"><font size='-2'>
-<nobr><label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.submit()" $hidtext /> $lt{'hd'}</label></nobr></td>
+<nobr><label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.changeparms.value=1;this.form.submit()" $hidtext /> $lt{'hd'}</label></nobr></td>
 <td bgcolor="#BBBBFF"><font size='-2'>
-<nobr><label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.submit()" $enctext /> $lt{'ec'}</label></nobr></td>
+<nobr><label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.changeparms.value=1;this.form.submit()" $enctext /> $lt{'ec'}</label></nobr></td>
 <td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td>
 ENDPARMS
     }
@@ -2176,6 +2306,8 @@ sub handler {
       &verifycontent($r);
   } elsif ($allowed && $env{'form.listsymbs'}) {
       &list_symbs($r);
+  } elsif ($allowed && $env{'form.docslog'}) {
+      &docs_change_log($r);
   } elsif ($allowed && $env{'form.versions'}) {
       &checkversions($r);
   } elsif ($allowed && $env{'form.dumpcourse'}) {
@@ -2235,8 +2367,7 @@ sub handler {
 # get personal data 
     my $uname=$env{'user.name'};
     my $udom=$env{'user.domain'};
-    my $plainname=&escape(
-                     &Apache::loncommon::plainname($uname,$udom));
+    my $plainname=&escape(&Apache::loncommon::plainname($uname,$udom));
 
 # graphics settings
 
@@ -2375,6 +2506,7 @@ sub handler {
 					 'vc' => 'Verify Content',
 					 'cv' => 'Check/Set Resource Versions',
 					 'ls' => 'List Symbs',
+                                         'sl' => 'Show Log'
 					  );
 
        my $folderpath=$env{'form.folderpath'};
@@ -2411,6 +2543,8 @@ $dumpbut
 $exportbut
 </td><td bgcolor="#DDDDCC">
     <input type="submit" name="listsymbs" value="$lt{'ls'}" />
+</td><td bgcolor="#DDDDCC">
+    <input type="submit" name="docslog" value="$lt{'sl'}" />
 </td></tr></table>
 </form>
 ENDCOURSEVERIFY