--- loncom/interface/londocs.pm	2003/08/05 12:47:21	1.71
+++ loncom/interface/londocs.pm	2003/10/28 00:31:02	1.89
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.71 2003/08/05 12:47:21 www Exp $
+# $Id: londocs.pm,v 1.89 2003/10/28 00:31:02 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -35,8 +35,10 @@ use Apache::loncommon;
 use Apache::lonratedt;
 use Apache::lonratsrv;
 use Apache::lonxml;
+use Apache::loncreatecourse;
 use HTML::Entities;
 use GDBM_File;
+use Apache::lonlocal;
 
 my $iconpath;
 
@@ -72,6 +74,185 @@ sub storemap {
                                 $map,1);
 }
 
+# ----------------------------------------- Return hash with valid author names
+
+sub authorhosts {
+    my %outhash=();
+    my $home=0;
+    my $other=0;
+    foreach (keys %ENV) {
+	if ($_=~/^user\.role\.(au|ca)\.(.+)$/) {
+	    my $role=$1;
+	    my $realm=$2;
+	    my ($start,$end)=split(/\./,$ENV{$_});
+	    if (($start) && ($start>time)) { next; }
+	    if (($end) && (time>$end)) { next; }
+	    my $ca; my $cd;
+	    if ($1 eq 'au') {
+		$ca=$ENV{'user.name'};
+		$cd=$ENV{'user.domain'};
+	    } else {
+		($cd,$ca)=($realm=~/^\/(\w+)\/(\w+)$/);
+	    }
+	    if (&Apache::lonnet::homeserver($ca,$cd) eq 
+		$Apache::lonnet::perlvar{'lonHostID'}) {
+		$home++;
+		$outhash{'home_'.$ca.'@'.$cd}=1;
+	    } else {
+		$outhash{'otherhome_'.$ca.'@'.$cd}=
+		    &Apache::lonnet::homeserver($ca,$cd);
+		$other++;
+	    }
+	}
+    }
+    return ($home,$other,%outhash);
+}
+# ------------------------------------------------------ Generate "dump" button
+
+sub dumpbutton {
+    my ($home,$other,%outhash)=&authorhosts();
+    if ($home+$other==0) { return ''; }
+    my $output='</td><td bgcolor="#DDDDCC">';
+    if ($home) {
+	return '</td><td bgcolor="#DDDDCC">'.
+	    '<input type="submit" name="dumpcourse" value="'.
+	    &mt('Dump Course DOCS to Construction Space').'" />';
+    } else {
+	return'</td><td bgcolor="#DDDDCC">'.
+     &mt('Dump Course DOCS to Construction Space: available on other servers');
+    }
+}
+
+# -------------------------------------------------------- Actually dump course
+
+sub dumpcourse {
+    my $r=shift;
+    $r->print('<html><head><title>Dump DOCS</title></head>'.
+        &Apache::loncommon::bodytag('Dump Course DOCS to Construction Space').
+	      '<form name="dumpdoc" method="post">');
+    my ($home,$other,%outhash)=&authorhosts();
+    unless ($home) { return ''; }
+    my $origcrsid=$ENV{'request.course.id'};
+    my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid);
+    if (($ENV{'form.authorspace'}) && ($ENV{'form.authorfolder'}=~/\w/)) {
+# Do the dumping
+	unless ($outhash{'home_'.$ENV{'form.authorspace'}}) { return ''; }
+	my ($ca,$cd)=split(/\@/,$ENV{'form.authorspace'});
+	$r->print('<h3>'.&mt('Copying Files').'</h3>');
+	my $title=$ENV{'form.authorfolder'};
+	$title=~s/[^\w\/]+/\_/g;
+	my %replacehash=();
+	foreach (keys %ENV) {
+	    if ($_=~/^form\.namefor\_(.+)/) {
+		$replacehash{$1}=$ENV{$_};
+	    }
+	}
+	my $crs='/uploaded/'.$ENV{'request.course.id'}.'/';
+	$crs=~s/\_/\//g;
+	foreach (keys %replacehash) {
+	    my $newfilename=$title.'/'.$replacehash{$_};
+	    $newfilename=~s/[^\w\/\.]+/\_/g;
+	    my @dirs=split(/\//,$newfilename);
+	    my $path='/home/'.$ca.'/public_html';
+	    my $makepath=$path;
+	    my $fail=0;
+	    for (my $i=0;$i<$#dirs;$i++) {
+		$makepath.='/'.$dirs[$i];
+		unless (-e $makepath) { 
+		    unless(mkdir($makepath,0777)) { $fail=1; } 
+		}
+	    }
+	    $r->print('<br /><tt>'.$_.'</tt> => <tt>'.$newfilename.'</tt>: ');
+	    if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) {
+		if ($_=~/\.(sequence|page|html|htm|xml|xhtml)$/) {
+		    print $fh &Apache::loncreatecourse::rewritefile(
+         &Apache::loncreatecourse::readfile($ENV{'request.course.id'},$_),
+				     (%replacehash,$crs => '')
+								    );
+		} else {
+		    print $fh
+         &Apache::loncreatecourse::readfile($ENV{'request.course.id'},$_);
+		       }
+		$fh->close();
+	    } else {
+		$fail=1;
+	    }
+	    if ($fail) {
+		$r->print('<font color="red">fail</font>');
+	    } else {
+		$r->print('<font color="green">ok</font>');
+	    }
+	}
+    } else {
+# Input form
+	unless ($home==1) {
+	    $r->print(
+		      '<h3>'.&mt('Select the Construction Space').'</h3><select name="authorspace">');
+	}
+	foreach (sort keys %outhash) {
+	    if ($_=~/^home_(.+)$/) {
+		if ($home==1) {
+		    $r->print(
+		  '<input type="hidden" name="authorspace" value="'.$1.'" />');
+		} else {
+		    $r->print('<option value="'.$1.'">'.$_.'</option>');
+		}
+	    }
+	}
+	unless ($home==1) {
+	    $r->print('</select>');
+	}
+	my $title=$origcrsdata{'description'};
+	$title=~s/\s+/\_/gs;
+	$title=~s/\W//gs;
+	$r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />');
+	&tiehash();
+	$r->print('<h3>'.&mt('Filenames in Construction Space').'</h3><table border="2"><tr><th>'.&mt('Internal Filename').'</th><th>'.&mt('Title').'</th><th>'.&mt('Save as ...').'</th></tr>');
+	foreach (&Apache::loncreatecourse::crsdirlist($origcrsid,'userfiles')) {
+	    $r->print('<tr><td>'.$_.'</td>');
+	    my ($ext)=($_=~/\.(\w+)$/);
+	    my $title=$hash{'title_'.$hash{
+		'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}};
+	    $r->print('<td>'.($title?$title:'&nbsp;').'</td>');
+	    unless ($title) {
+		$title=$_;
+	    }
+	    $title=~s/\.(\w+)$//;
+	    $title=~s/\W+/\_/gs;
+	    $title.='.'.$ext;
+	    $r->print("\n<td><input type='text' size='60' name='namefor_".$_."' value='".$title."' /></td></tr>\n");
+	}
+	$r->print("</table>\n");
+	&untiehash();
+	$r->print(
+  '<p><input type="submit" name="dumpcourse" value="'.&mt('Dump Course DOCS').'" /></p></form>');
+    }
+}
+
+
+# Imports the given (name, url) resources into the course
+# coursenum, coursedom, and folder must precede the list
+sub group_import {
+    my $coursenum = shift;
+    my $coursedom = shift;
+    my $folder = shift;
+    while (@_) {
+	my $name = shift;
+	my $url = shift;
+	if ($url) {
+	    my $idx = $#Apache::lonratedt::resources + 1;
+	    $Apache::lonratedt::order[$#Apache::lonratedt::order+1]=$idx;
+	    my $ext = 'false';
+	    if ($url=~/^http:\/\//) { $ext = 'true'; }
+	    $url =~ s/:/\&colon;/g;
+	    $name =~ s/:/\&colon;/g;
+	    $Apache::lonratedt::resources[$idx] = 
+		join ':', ($name, $url, $ext, 'normal', 'res');
+	}
+    }
+    &storemap($coursenum, $coursedom, $folder.'.sequence');
+}
+
 sub editor {
     my ($r,$coursenum,$coursedom,$folder,$allowed)=@_;
     if ($ENV{'form.foldername'}) {
@@ -158,26 +339,17 @@ sub editor {
             }
 # Group import/search
 	    if ($ENV{'form.importdetail'}) {
-               foreach (split(/\&/,$ENV{'form.importdetail'})) {
-                  if (defined($_)) {
-	             my ($name,$url)=split(/\=/,$_);
-                     $name=&Apache::lonnet::unescape($name);
-                     $url=&Apache::lonnet::unescape($url);
-                     if ($url) {
-	                my $idx=$#Apache::lonratedt::resources+1;
-                        $Apache::lonratedt::order
-                           [$#Apache::lonratedt::order+1]=$idx;
-                        my $ext='false';
-                        if ($url=~/^http\:\/\//) { $ext='true'; }
-                        $url=~s/\:/\&colon;/g;
-                        $name=~s/\:/\&colon;/g;
-                        $Apache::lonratedt::resources[$idx]=
-                           $name.':'.$url.':'.$ext.':normal:res';
-	             }
-                 }
-	      }
+		my @imports;
+		foreach (split(/\&/,$ENV{'form.importdetail'})) {
+		    if (defined($_)) {
+			my ($name,$url)=split(/\=/,$_);
+			$name=&Apache::lonnet::unescape($name);
+			$url=&Apache::lonnet::unescape($url);
+			push @imports, $name, $url;
+		    }
+		}
 # Store the changed version
-		&storemap($coursenum,$coursedom,$folder.'.sequence');
+		group_import($coursenum, $coursedom, $folder, @imports);
             }
 # Loading a complete map
 	   if (($ENV{'form.importmap'}) && ($ENV{'form.loadmap'})) {
@@ -223,8 +395,8 @@ sub entryline {
 	) { 
             $foldertitle=&Apache::lontexconvert::msgtexconverted($4);
             $renametitle=$4;
-            $title='<i>'.localtime($1).'</i> '.
-                &Apache::loncommon::plainname($2,$3).': <br>'.
+            $title='<i>'.&Apache::lonlocal::locallocaltime($1).'</i> '.
+                &Apache::loncommon::plainname($2,$3).': <br />'.
 		$foldertitle;
 	}
     $renametitle=~s/\&quot\;/\\\"/g;
@@ -318,7 +490,7 @@ sub checkonthis {
 	  my $result=&Apache::lonnet::repcopy(
                               &Apache::lonnet::filelocation('',$url));
           if ($result==OK) {
-             $r->print('<font color="green">ok</font>');
+             $r->print('<font color="green">'.&mt('ok').'</font>');
              $r->rflush();
              &Apache::lonnet::countacc($url);
              $url=~/\.(\w+)$/;
@@ -328,7 +500,7 @@ sub checkonthis {
                  for (my $i=0;$i<=$level*5;$i++) {
                      $r->print('&nbsp;');
                  }
-                 $r->print('- Rendering: ');
+                 $r->print('- '.&mt('Rendering').': ');
                  my $oldpath=$ENV{'request.filename'};
                  $ENV{'request.filename'}=&Apache::lonnet::filelocation('',$url);
                  &Apache::lonxml::xmlparse($r,'web',
@@ -339,14 +511,16 @@ sub checkonthis {
                      ($Apache::lonxml::warningcount)) {
 		     if ($Apache::lonxml::errorcount) {
                         $r->print('<font color="red"><b>'.
-			  $Apache::lonxml::errorcount.' error(s)</b></font> ');
+			  $Apache::lonxml::errorcount.' '.
+				  &mt('error(s)').'</b></font> ');
                      }
 		     if ($Apache::lonxml::warningcount) {
                         $r->print('<font color="blue">'.
-			  $Apache::lonxml::warningcount.' warning(s)</font>');
+			  $Apache::lonxml::warningcount.' '.
+				  &mt('warning(s)').'</font>');
                      }
                  } else {
-                     $r->print('<font color="green">ok</font>');
+                     $r->print('<font color="green">'.&mt('ok').'</font>');
                  }
                  $r->rflush();
              }
@@ -358,44 +532,22 @@ sub checkonthis {
                  }
              }
           } elsif ($result==HTTP_SERVICE_UNAVAILABLE) {
-             $r->print('<font color="red"><b>connection down</b></font>');
+             $r->print('<font color="red"><b>'.&mt('connection down').'</b></font>');
           } elsif ($result==HTTP_NOT_FOUND) {
-             $r->print('<font color="red"><b>not found</b></font>');
+             $r->print('<font color="red"><b>'.&mt('not found').'</b></font>');
           } else {
-             $r->print('<font color="red"><b>access denied</b></font>');
+             $r->print('<font color="red"><b>'.&mt('access denied').'</b></font>');
           }
       }
    }
 }
 
-# ================================================================ Main Handler
-sub handler {
-    my $r = shift;
-    $r->content_type('text/html');
-    $r->send_http_header;
-    return OK if $r->header_only;
 
-# --------------------------------------------- Initialize help topics for this
-  foreach ('Adding_Course_Doc','Main_Course_Documents',
-           'Adding_External_Resource','Navigate_Content',
-           'Adding_Folders','Docs_Overview', 'Load_Map',
-           'Supplemental', 'Score_Upload_Form',
-           'Importing_LON-CAPA_Resource','Uploading_From_Harddrive') {
-      $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_);
-  }
-    # Composite help files
-    $help{'Syllabus'} = &Apache::loncommon::help_open_topic(
-		    'Docs_About_Syllabus,Docs_Editing_Templated_Pages');
-    $help{'Simple Page'} = &Apache::loncommon::help_open_topic(
-		    'Docs_About_Simple_Page,Docs_Editing_Templated_Pages');
-    $help{'Bulletin Board'} = &Apache::loncommon::help_open_topic(
-		    'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages');
-    $help{'My Personal Info'} = &Apache::loncommon::help_open_topic(
-		  'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');
-    $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');
- 
-  if ($ENV{'form.verify'}) {
- 
+#
+# -------------------------------------------------------------- Verify Content
+# 
+sub verifycontent {
+   my $r=shift; 
    my $loaderror=&Apache::lonnet::overloaderror($r);
    if ($loaderror) { return $loaderror; }
 
@@ -411,99 +563,183 @@ sub handler {
        }
    }
    &untiehash();
-   $r->print('<h1>Done.</h1>');
-  } elsif ($ENV{'form.versions'}) {
+   $r->print('<h1>'.&mt('Done').'.</h1>');
+}
+
+# -------------------------------------------------------------- Check Versions
+
+sub checkversions {
+    my $r=shift;
     $r->print('<html><head><title>Check Versions</title></head>'.
               &Apache::loncommon::bodytag('Check Course Document Versions'));
-   $hashtied=0;
-   &tiehash();
-   my %changes=&Apache::lonnet::dump
-    ('versionupdate',$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+    $hashtied=0;
+    &tiehash();
+    my $header='';
+    my $startsel='';
+    my $monthsel='';
+    my $weeksel='';
+    my $daysel='';
+    my $allsel='';
+    my %changes=();
+    my $starttime=0;
+    if ($ENV{'form.timerange'} eq 'all') {
+# show all documents
+	$header=&mt('All Documents in Course');
+    } else {
+# show documents which changed
+	%changes=&Apache::lonnet::dump
+	 ('versionupdate',$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
                      $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
-   my $firstkey=(keys %changes)[0];
-   unless ($firstkey=~/^error\:/) {
-       unless ($ENV{'form.timerange'}) {
-	   $ENV{'form.timerange'}=604800;
-       }
-       my $seltext='during the last '.$ENV{'form.timerange'}.' seconds';
-       my $startsel='';
-       my $monthsel='';
-       my $weeksel='';
-       my $daysel='';
-       if ($ENV{'form.timerange'}==-1) {
-	   $seltext='since start of course';
-           $startsel='selected';
-           $ENV{'form.timerange'}=time;
-       }
-       my $starttime=time-$ENV{'form.timerange'};
-       if ($ENV{'form.timerange'}==2592000) {
-           $seltext='during the last month ('.localtime($starttime).')';
-           $monthsel='selected';
-       } elsif ($ENV{'form.timerange'}==604800) {
-           $seltext='during the last week ('.localtime($starttime).')';
-           $weeksel='selected';
-       } elsif ($ENV{'form.timerange'}==86400) {
-           $seltext='since yesterday ('.localtime($starttime).')';
-           $daysel='selected';
-       }
- 
-       $r->print(<<ENDHEADERS);
+	my $firstkey=(keys %changes)[0];
+	unless ($firstkey=~/^error\:/) {
+	    unless ($ENV{'form.timerange'}) {
+		$ENV{'form.timerange'}=604800;
+	    }
+	    my $seltext=&mt('during the last').' '.$ENV{'form.timerange'}.' '
+		.&mt('seconds');
+	    if ($ENV{'form.timerange'}==-1) {
+		$seltext='since start of course';
+		$startsel='selected';
+		$ENV{'form.timerange'}=time;
+	    }
+	    $starttime=time-$ENV{'form.timerange'};
+	    if ($ENV{'form.timerange'}==2592000) {
+		$seltext=&mt('during the last month').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
+		$monthsel='selected';
+	    } elsif ($ENV{'form.timerange'}==604800) {
+		$seltext=&mt('during the last week').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
+		$weeksel='selected';
+	    } elsif ($ENV{'form.timerange'}==86400) {
+		$seltext=&mt('since yesterday').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
+		$daysel='selected';
+	    }
+	    $header=&mt('Content changed').' '.$seltext;
+	} else {
+	    $header=&mt('No content modifications yet.');
+	}
+    }
+    my %lt=&Apache::lonlocal::texthash
+	      ('st' => 'Version changes since start of Course',
+	       'lm' => 'Version changes since last Month',
+	       'lw' => 'Version changes since last Week',
+	       'sy' => 'Version changes since Yesterday',
+               'al' => 'All Resources',
+	       'sd' => 'Display',
+	       'fi' => 'File',
+	       'md' => 'Modification Date',
+               'mr' => 'Most recently published Version',
+	       've' => 'Version used in Course',
+               'vu' => 'Set Version to be used in Course', 
+	       'di' => 'Differences');
+    $r->print(<<ENDHEADERS);
 <form action="/adm/coursedocs" method="post">
 <select name="timerange">
-<option value="-1" $startsel>Since Start of Course</option>
-<option value="2592000" $monthsel>Last Month</option>
-<option value="604800" $weeksel>Last Week</option>
-<option value="86400" $daysel>Since Yesterday</option>
+<option value='all' $allsel>$lt{'al'}</option>
+<option value="-1" $startsel>$lt{'st'}</option>
+<option value="2592000" $monthsel>$lt{'lm'}</option>
+<option value="604800" $weeksel>$lt{'lw'}</option>
+<option value="86400" $daysel>$lt{'sy'}</option>
 </select>
-<input type="submit" name="versions" value="Display" />
+<input type="submit" name="versions" value="$lt{'sd'}" />
 </form>
-<h3>Content changed $seltext</h3>
+<h3>$header</h3>
 <table border="2">
 <tr>
-<th>File</th><th>Modification Date</th>
-<th>Version</th><th>Differences</th></tr>
+<th>$lt{'fi'}</th><th>$lt{'md'}</th><th>$lt{'mr'}</th>
+<th>$lt{'ve'}</th><th>$lt{'vu'}</th><th>$lt{'di'}</th></tr>
 ENDHEADERS
-       foreach (keys %changes) {
-	  if ($changes{$_}>$starttime) {
-	     my ($root,$extension)=($_=~/^(.*)\.(\w+)$/);
-             my $currentversion=&Apache::lonnet::getversion($_);
-             my $linkurl=&Apache::lonnet::clutter($_);
-             $r->print(
-                 '<tr><td><a href="'.$linkurl.'" target="cat">'.$linkurl.
-                 '</a></td><td>'.
-                 localtime($changes{$_}).'</td><td>'.$currentversion.'</td>'.
-		       '<td>');
-             my $lastold=1;
-             for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
-                 my $url=$root.'.'.$prevvers.'.'.$extension;
-                 if (&Apache::lonnet::metadata($url,'lastrevisiondate')<
-                                                             $starttime) {
-                     $lastold=$prevvers;
-                 }
-             }
+    foreach (keys %changes) {
+	if ($changes{$_}>$starttime) {
+	    my ($root,$extension)=($_=~/^(.*)\.(\w+)$/);
+	    my $currentversion=&Apache::lonnet::getversion($_);
+	    my $linkurl=&Apache::lonnet::clutter($_);
+	    $r->print(
+		      '<tr><td><a href="'.$linkurl.'" target="cat">'.$linkurl.
+		      '</a></td><td>'.
+		      &Apache::lonlocal::locallocaltime($changes{$_}).
+                      '</td><td><font size="+2">'.
+		      $currentversion.'</font></td><td><font size="+2">');
+# Used in course
+	    my $usedversion=$hash{'version_'.$linkurl};
+	    if ($usedversion) {
+		$r->print($usedversion);
+	    } else {
+		$r->print($currentversion);
+	    }
+	    $r->print('</font></td><td>');
+# Set version
+	    $r->print(&Apache::loncommon::select_form($usedversion,
+						      'set_version_'.$linkurl,
+						      ('' => '',
+						       'current' => 'current',
+						       map {$_,$_} (1..$currentversion))));
+	    $r->print('</td><td>');
+	    my $lastold=1;
+	    for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
+		my $url=$root.'.'.$prevvers.'.'.$extension;
+		if (&Apache::lonnet::metadata($url,'lastrevisiondate')<
+		    $starttime) {
+		    $lastold=$prevvers;
+		}
+	    }
             for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {
-                 my $url=$root.'.'.$prevvers.'.'.$extension;
-                 $r->print('<a href="'.&Apache::lonnet::clutter($url).
-                   '">Version '.$prevvers.' ('.
-                 localtime(&Apache::lonnet::metadata($url,'lastrevisiondate')).
-                 ')</a>');
-                 if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') {
+		my $url=$root.'.'.$prevvers.'.'.$extension;
+		$r->print('<a href="'.&Apache::lonnet::clutter($url).
+			  '">'.&mt('Version').' '.$prevvers.' ('.
+			  &Apache::lonlocal::locallocaltime(&Apache::lonnet::metadata($url,'lastrevisiondate')).
+			  ')</a>');
+		if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') {
                     $r->print(' <a href="/adm/diff?filename='.
-                            &Apache::lonnet::clutter($root.'.'.$extension).
-                            '&versionone='.$prevvers.
-			     '">Diffs</a>');
-                 }
-                 $r->print('<br />');
-             }
-             $r->print('</td></tr>');
-          }
-       }
-       $r->print('</table>');
-       $r->print('<h1>Done.</h1>');
-   } else {
-       $r->print('<p>No content modifications yet.</p>');
-   }
-   &untiehash();
+			      &Apache::lonnet::clutter($root.'.'.$extension).
+			      '&versionone='.$prevvers.
+			      '">'.&mt('Diffs').'</a>');
+		}
+		$r->print('<br />');
+	    }
+	    $r->print('</td></tr>');
+	}
+    }
+    $r->print('</table>');
+    $r->print('<h1>'.&mt('Done').'.</h1>');
+
+    &untiehash();
+}
+
+# ================================================================ Main Handler
+sub handler {
+    my $r = shift;
+    &Apache::loncommon::content_type($r,'text/html');
+    $r->send_http_header;
+    return OK if $r->header_only;
+
+    &Apache::lonlocal::clearreroutetrans();
+# --------------------------------------------- Initialize help topics for this
+  foreach ('Adding_Course_Doc','Main_Course_Documents',
+           'Adding_External_Resource','Navigate_Content',
+           'Adding_Folders','Docs_Overview', 'Load_Map',
+           'Supplemental', 'Score_Upload_Form',
+           'Importing_LON-CAPA_Resource','Uploading_From_Harddrive') {
+      $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_);
+  }
+    # Composite help files
+    $help{'Syllabus'} = &Apache::loncommon::help_open_topic(
+		    'Docs_About_Syllabus,Docs_Editing_Templated_Pages');
+    $help{'Simple Page'} = &Apache::loncommon::help_open_topic(
+		    'Docs_About_Simple_Page,Docs_Editing_Templated_Pages');
+    $help{'Simple Problem'} = &Apache::loncommon::help_open_topic(
+		    'Option_Response_Simple');
+    $help{'Bulletin Board'} = &Apache::loncommon::help_open_topic(
+		    'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages');
+    $help{'My Personal Info'} = &Apache::loncommon::help_open_topic(
+		  'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');
+    $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');
+ 
+  if ($ENV{'form.verify'}) {
+      &verifycontent($r);
+  } elsif ($ENV{'form.versions'}) {
+      &checkversions($r);
+  } elsif ($ENV{'form.dumpcourse'}) {
+      &dumpcourse($r);
   } else {
 # is this a standard course?
 
@@ -513,7 +749,6 @@ ENDHEADERS
     my $script='';
     my $allowed;
     my $events='';
-    my $buttons='';
     my $showdoc=0;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
        ['folder','foldername']);
@@ -525,7 +760,7 @@ ENDHEADERS
        $forcesupplement=($ENV{'form.folder'}=~/^supplemental_/);
 
 # does this user have privileges to post, etc?
-       $allowed=&Apache::lonnet::allowed('srm',$ENV{'request.course.id'});
+       $allowed=&Apache::lonnet::allowed('mdc',$ENV{'request.course.id'});
        if ($allowed) { 
          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
          $script=&Apache::lonratedt::editscript('simple'); 
@@ -535,7 +770,6 @@ ENDHEADERS
        $script='</script>'.&Apache::lonmenu::registerurl(1,undef).'<script>';
        $events='onLoad="'.&Apache::lonmenu::loadevents.
            '" onUnload="'.&Apache::lonmenu::unloadevents.'"';
-       $buttons=&Apache::lonmenu::menubuttons(1,undef);
     }
 
 # get course data
@@ -648,12 +882,37 @@ ENDNEWSCRIPT
   }
 # -------------------------------------------------------------------- Body tag
   $r->print('</head>'.
-            &Apache::loncommon::bodytag('Course Documents','',$events).
-            $buttons);
+            &Apache::loncommon::bodytag('Course Documents','',$events,
+					'','',$showdoc));
   unless ($showdoc) {
+# -----------------------------------------------------------------------------
+       my %lt=&Apache::lonlocal::texthash(
+                'uplm' => 'Upload a new main course document',
+                'upls' => 'Upload a new supplemental course document',
+                'impp' => 'Import a published document',
+                'spec' => 'Special documents',
+                'upld' => 'Upload Document',
+                'srch' => 'Search',
+                'impo' => 'Import',
+                'selm' => 'Select Map',
+                'load' => 'Load Map',
+                'newf' => 'New Folder',
+                'extr' => 'External Resource',
+                'syll' => 'Syllabus',
+                'navc' => 'Navigate Contents',
+                'sipa' => 'Simple Page',
+                'sipr' => 'Simple Problem',
+                'scuf' => 'Score Upload Form',
+                'bull' => 'Bulletin Board',
+                'mypi' => 'My Personal Info'
+					  );
+# -----------------------------------------------------------------------------
     if ($allowed) {
-       $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',
-		     'Editing the Table of Contents for your Course'));
+       my $dumpbut=&dumpbutton();
+       my %lt=&Apache::lonlocal::texthash(
+					 'vc' => 'Verify Content',
+					 'cv' => 'Check/Set Resource Versions',
+					  );
        $r->print(<<ENDCOURSEVERIFY);
 <form name="renameform" method="post" action="/adm/coursedocs">
 <input type="hidden" name="title" />
@@ -665,15 +924,22 @@ ENDNEWSCRIPT
 <input type="hidden" name="folder" />
 </form>
 <form action="/adm/coursedocs" method="post" name="courseverify">
-<input type="submit" name="verify" value="Verify Content" />
-<input type="submit" name="versions" value="Check Resource Versions" />
+<table bgcolor="#AAAAAA" width="100%" cellspacing="4" cellpadding="4">
+<tr><td bgcolor="#DDDDCC">
+<input type="submit" name="verify" value="$lt{'vc'}" />
+</td><td bgcolor="#DDDDCC">
+<input type="submit" name="versions" value="$lt{'cv'}" />
+$dumpbut
+</td></tr></table>
 </form>
 ENDCOURSEVERIFY
+       $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',
+		     'Editing the Table of Contents for your Course'));
     }
 # --------------------------------------------------------- Standard documents
     $r->print('<table border=2 cellspacing=4 cellpadding=4>');
     if (($standard) && ($allowed) && (!$forcesupplement)) {
-       $r->print('<tr><td bgcolor="#BBBBBB"><h2>Main Course Documents'.
+       $r->print('<tr><td bgcolor="#BBBBBB"><h2>'.&mt('Main Course Documents').
   ($allowed?' '.$help{'Main_Course_Documents'}:'').'</h2>');
        my $folder=$ENV{'form.folder'};
        unless ($folder=~/^default/) { $folder='default'; }
@@ -689,18 +955,20 @@ ENDCOURSEVERIFY
 	   $r->print(
 '<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'. 
 '<form method="post" action="/adm/roles" target="loncapaclient">'.
-'<input type="hidden" name="orgurl" value="/adm/coursedocs" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">Changes will become active for your current session after <input type="hidden" name="'.
-$ENV{'request.role'}.'" value="1" /><input type="button" value="re-initializing course" onClick="reinit(this.form)"/>, or the next time you log in.'.
+'<input type="hidden" name="orgurl" value="/adm/coursedocs" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'.
+&mt('Changes will become active for your current session after').
+' <input type="hidden" name="'.
+$ENV{'request.role'}.'" value="1" /><input type="button" value="'.
+&mt('re-initializing course').'" onClick="reinit(this.form)"/>'.&mt(', or the next time you log in.').
 $help{'Caching'}.'</font></h3></form>');
        }
        my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.
                      '.sequence';
-
        $r->print(<<ENDFORM);
 <table cellspacing=4 cellpadding=4><tr>
-<th bgcolor="#DDDDDD">Upload a new main course document</th>
-<th bgcolor="#DDDDDD">Import a published document</th>
-<th bgcolor="#DDDDDD">Special documents</th>
+<th bgcolor="#DDDDDD">$lt{'uplm'}</th>
+<th bgcolor="#DDDDDD">$lt{'impp'}</th>
+<th bgcolor="#DDDDDD">$lt{'spec'}</th>
 </tr>
 <tr><td bgcolor="#DDDDDD">
 File:<br />
@@ -712,7 +980,7 @@ Title:<br />
 <input type="hidden" name="folder" value="$folder">
 <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type="hidden" name="cmd" value="upload_default">
-<input type="submit" value="Upload Document">
+<input type="submit" value="$lt{'upld'}">
 <nobr>
  $help{'Uploading_From_Harddrive'}
 </nobr>
@@ -723,10 +991,10 @@ Title:<br />
 <input type="hidden" name="folder" value="$folder">
 <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=button onClick=
-"javascript:document.forms.simpleedit.folder.value='$folder';groupsearch()" value="Search">
+"javascript:document.forms.simpleedit.folder.value='$folder';groupsearch()" value="$lt{'srch'}">
 <nobr>
 <input type=button onClick=
-"javascript:document.forms.simpleedit.folder.value='$folder';groupimport();" value="Import">
+"javascript:document.forms.simpleedit.folder.value='$folder';groupimport();" value="$lt{'impo'}">
 $help{'Importing_LON-CAPA_Resource'}
 </nobr>
 <p>
@@ -734,7 +1002,7 @@ $help{'Importing_LON-CAPA_Resource'}
 <input type="text" size="20" name="importmap"><br />
 <nobr><input type=button 
 onClick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"
-value="Select Map"> <input type="submit" name="loadmap" value="Load Map">
+value="$lt{'selm'}"> <input type="submit" name="loadmap" value="$lt{'load'}">
 $help{'Load_Map'}</nobr>
 </p>
 </form>
@@ -746,7 +1014,7 @@ $help{'Load_Map'}</nobr>
 <nobr>
 <input name="newfolder" type="button"
 onClick="javascript:makenewfolder(this.form,'$folderseq');"
-value="New Folder" />$help{'Adding_Folders'}
+value="$lt{'newf'}" />$help{'Adding_Folders'}
 </nobr>
 </form>
 <form action="/adm/coursedocs" method="post" name="newext">
@@ -755,7 +1023,7 @@ value="New Folder" />$help{'Adding_Folde
 <input type=hidden name="importdetail" value="">
 <nobr>
 <input name="newext" type="button" onClick="javascript:makenewext('newext');"
-value="External Resource" /> $help{'Adding_External_Resource'}
+value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
 </nobr>
 </form>
 <form action="/adm/coursedocs" method="post" name="newsyl">
@@ -764,7 +1032,7 @@ value="External Resource" /> $help{'Addi
 <input type=hidden name="importdetail" 
 value="Syllabus=/public/$coursedom/$coursenum/syllabus">
 <nobr>
-<input name="newsyl" type="submit" value="Syllabus" /> 
+<input name="newsyl" type="submit" value="$lt{'syll'}" /> 
  $help{'Syllabus'}
 </nobr>
 </form>
@@ -774,7 +1042,7 @@ value="Syllabus=/public/$coursedom/$cour
 <input type=hidden name="importdetail" 
 value="Navigate Content=/adm/navmaps">
 <nobr>
-<input name="newnav" type="submit" value="Navigate Content" />
+<input name="newnav" type="submit" value="$lt{'navc'}" />
 $help{'Navigate_Content'}
 </nobr>
 </form>
@@ -783,7 +1051,7 @@ $help{'Navigate_Content'}
 <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=hidden name="importdetail" value="">
 <nobr>
-<input name="newsmppg" type="button" value="Simple Page"
+<input name="newsmppg" type="button" value="$lt{'sipa'}"
 onClick="javascript:makesmppage();" /> $help{'Simple Page'}
 </nobr>
 </form>
@@ -792,7 +1060,7 @@ onClick="javascript:makesmppage();" /> $
 <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=hidden name="importdetail" value="">
 <nobr>
-<input name="newsmpproblem" type="button" value="Simple Problem"
+<input name="newsmpproblem" type="button" value="$lt{'sipr'}"
 onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}
 </nobr>
 </form>
@@ -801,7 +1069,7 @@ onClick="javascript:makesmpproblem();" /
 <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=hidden name="importdetail" value="">
 <nobr>
-<input name="newexamupload" type="button" value="Score Upload Form"
+<input name="newexamupload" type="button" value="$lt{'scuf'}"
 onClick="javascript:makeexamupload();" />
 $help{'Score_Upload_Form'}
 </nobr>
@@ -811,7 +1079,7 @@ $help{'Score_Upload_Form'}
 <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=hidden name="importdetail" value="">
 <nobr>
-<input name="newbulletin" type="button" value="Bulletin Board"
+<input name="newbulletin" type="button" value="$lt{'bull'}"
 onClick="javascript:makebulboard();" />
 $help{'Bulletin Board'}
 </nobr>
@@ -822,7 +1090,7 @@ $help{'Bulletin Board'}
 <input type=hidden name="importdetail" 
 value="$plainname=/adm/$udom/$uname/aboutme">
 <nobr>
-<input name="newaboutme" type="submit" value="My Personal Info" />
+<input name="newaboutme" type="submit" value="$lt{'mypi'}" />
 $help{'My Personal Info'}
 </nobr>
 </form>
@@ -834,7 +1102,7 @@ ENDFORM
 # ----------------------------------------------------- Supplemental documents
     if (!$forcestandard) {
        $r->print(
-  '<tr><td bgcolor="#BBBBBB"><h2>Supplemental Course Documents'.
+  '<tr><td bgcolor="#BBBBBB"><h2>'.&mt('Supplemental Course Documents').
   ($allowed?' '.$help{'Supplemental'}:'').'</h2>');
        my $folder=$ENV{'form.folder'};
        unless ($folder=~/supplemental/) { $folder='supplemental'; }
@@ -846,9 +1114,9 @@ ENDFORM
 
           $r->print(<<ENDSUPFORM);
 <table cellspacing=4 cellpadding=4><tr>
-<th bgcolor="#DDDDDD">Upload a new supplemental course document</th>
-<th bgcolor="#DDDDDD">Import a published document</th>
-<th bgcolor="#DDDDDD">Special documents</th>
+<th bgcolor="#DDDDDD">$lt{'upls'}</th>
+<th bgcolor="#DDDDDD">$lt{'impp'}</th>
+<th bgcolor="#DDDDDD">$lt{'spec'}</th>
 </tr>
 <tr><td bgcolor="#DDDDDD">
 <form action="/adm/coursedocs" method="post" enctype="multipart/form-data">
@@ -860,7 +1128,7 @@ ENDFORM
 <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type="hidden" name="cmd" value="upload_supplemental">
 <nobr>
-<input type="submit" value="Upload Document">
+<input type="submit" value="$lt{'upld'}">
  $help{'Uploading_From_Harddrive'}
 </nobr>
 </form>
@@ -871,15 +1139,15 @@ ENDFORM
 <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=hidden name="importdetail" value="">
 <input type=button onClick=
-"javascript:document.forms.simpleedit.folder.value='$folder';groupsearch()" value="Search">
+"javascript:document.forms.simpleedit.folder.value='$folder';groupsearch()" value="$lt{'srch'}">
 <input type=button onClick=
-"javascript:document.forms.simpleedit.folder.value='$folder';groupimport();" value="Import">$help{'Importing_LON-CAPA_Resource'}
+"javascript:document.forms.simpleedit.folder.value='$folder';groupimport();" value="$lt{'impo'}">$help{'Importing_LON-CAPA_Resource'}
 <p>
 <hr />
 <input type="text" size="20" name="importmap">
 <input type=button 
 onClick="javascript:openbrowser('simpleeditsupplement','importmap','sequence,page','')"
-value="Select Map"><input type="submit" name="loadmap" value="Load Map">
+value="$lt{'selm'}"><input type="submit" name="loadmap" value="$lt{'load'}">$help{'Load_Map'}
 </p>
 </form>
 </td><td bgcolor="#DDDDDD">
@@ -890,7 +1158,7 @@ value="Select Map"><input type="submit"
 <nobr>
 <input name="newfolder" type="button"
 onClick="javascript:makenewfolder(this.form,'$folderseq');"
-value="New Folder" /> $help{'Adding_Folders'}
+value="$lt{'newf'}" /> $help{'Adding_Folders'}
 </nobr>
 </form>
 <form action="/adm/coursedocs" method="post" name="supnewext">
@@ -900,7 +1168,7 @@ value="New Folder" /> $help{'Adding_Fold
 <nobr>
 <input name="newext" type="button" 
 onClick="javascript:makenewext('supnewext');"
-value="External Resource" /> $help{'Adding_External_Resource'}
+value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
 </nobr>
 </form>
 <form action="/adm/coursedocs" method="post" name="supnewsyl">
@@ -909,7 +1177,7 @@ value="External Resource" /> $help{'Addi
 <input type=hidden name="importdetail" 
 value="Syllabus=/public/$coursedom/$coursenum/syllabus">
 <nobr>
-<input name="newsyl" type="submit" value="Syllabus" />
+<input name="newsyl" type="submit" value="$lt{'syll'}" />
 $help{'Syllabus'}
 </nobr>
 </form>
@@ -919,7 +1187,7 @@ $help{'Syllabus'}
 <input type=hidden name="importdetail" 
 value="$plainname=/adm/$udom/$uname/aboutme">
 <nobr>
-<input name="newaboutme" type="submit" value="My Personal Info" />
+<input name="newaboutme" type="submit" value="$lt{'mypi'}" />
 $help{'My Personal Info'}
 </nobr>
 </form>
@@ -934,11 +1202,12 @@ ENDSUPFORM
     $r->print('</table>');
   } else {
 # -------------------------------------------------------- This is showdoc mode
-      $r->print("<h1>Uploaded Document</h1><p>It is recommended that you use an up-to-date virus scanner before handling this file.</p><p><table>".
-         &entryline(0,"Click to download or use your browser's Save Link function",$showdoc).'</table></p>');
+      $r->print("<h1>".&mt('Uploaded Document').'</h1><p>'.
+&mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."</p><p><table>".
+         &entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table></p>');
   }
  }
- $r->print('</body></html>');
+ $r->print(&Apache::lonlocal::endreroutetrans().'</body></html>');
  return OK;
 }