--- loncom/interface/londocs.pm	2003/09/22 03:02:05	1.83
+++ loncom/interface/londocs.pm	2003/12/09 19:48:51	1.96
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.83 2003/09/22 03:02:05 www Exp $
+# $Id: londocs.pm,v 1.96 2003/12/09 19:48:51 sakharuk Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -138,7 +138,7 @@ sub dumpcourse {
 # Do the dumping
 	unless ($outhash{'home_'.$ENV{'form.authorspace'}}) { return ''; }
 	my ($ca,$cd)=split(/\@/,$ENV{'form.authorspace'});
-	$r->print('<h3>Copying Files</h3>');
+	$r->print('<h3>'.&mt('Copying Files').'</h3>');
 	my $title=$ENV{'form.authorfolder'};
 	$title=~s/[^\w\/]+/\_/g;
 	my %replacehash=();
@@ -395,27 +395,31 @@ 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;
     my $line='<tr>';
 # Edit commands
-    if ($allowed) {
-       $line.=(<<END);
+     if ($allowed) {
+	 my %lt=('up' => 'Move Up',
+		 'dw' => 'Move Down',
+		 'rm' => 'Remove',
+		 'rn' => 'Rename');
+      $line.=(<<END);
 <td><table border='0' cellspacing='2' cellpadding='0'>
 <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?folder=$folder&cmd=up_$index'>
-<img src="${iconpath}move_up.gif" alt='UP' border='0' /></a></td></tr>
+<img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr>
 <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?folder=$folder&cmd=down_$index'>
-<img src="${iconpath}move_down.gif" alt='DOWN' border='0' /></a></td></tr>
+<img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr>
 </table></td><td bgcolor="#DDDDDD">
 <a href='javascript:removeres("$folder","$index","$renametitle");'>
-<font size="-2" color="#990000">Remove</font></a>
+<font size="-2" color="#990000">$lt{'rm'}</font></a>
 <a href='javascript:changename("$folder","$index","$renametitle");'>
-<font size="-2" color="#009900">Rename</font></a></td>
+<font size="-2" color="#009900">$lt{'rn'}</font></a></td>
 END
     }
 # Figure out what kind of a resource this is
@@ -490,7 +494,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+)$/;
@@ -500,25 +504,28 @@ 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',
                    &Apache::lonnet::getfile(
                     &Apache::lonnet::filelocation('',$url)));
+		 undef($Apache::lonhomework::parsing_a_problem);
 		 $ENV{'request.filename'}=$oldpath;
                  if (($Apache::lonxml::errorcount) ||
                      ($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();
              }
@@ -530,11 +537,11 @@ 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>');
           }
       }
    }
@@ -568,97 +575,218 @@ sub verifycontent {
 
 sub checkversions {
     my $r=shift;
-   $r->print('<html><head><title>Check Versions</title></head>'.
+    $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'},
-                     $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';
-       }
+    my $header='';
+    my $startsel='';
+    my $monthsel='';
+    my $weeksel='';
+    my $daysel='';
+    my $allsel='';
+    my %changes=();
+    my $starttime=0;
+    my $haschanged=0;
+    my %setversions=&Apache::lonnet::dump('resourceversions',
+			  $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+			  $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
 
-       $r->print(<<ENDHEADERS);
+    $hashtied=0;
+    &tiehash();
+    my %newsetversions=();
+    if ($ENV{'form.setmostrecent'}) {
+	$haschanged=1;
+	foreach (keys %hash) {
+	    if ($_=~/^ids\_(\/res\/.+)$/) {
+		$newsetversions{$1}='mostrecent';
+	    }
+	}
+    } elsif ($ENV{'form.setcurrent'}) {
+	$haschanged=1;
+	foreach (keys %hash) {
+	    if ($_=~/^ids\_(\/res\/.+)$/) {
+		my $getvers=&Apache::lonnet::getversion($1);
+		if ($getvers>0) {
+		    $newsetversions{$1}=$getvers;
+		}
+	    }
+	}
+    } elsif ($ENV{'form.setversions'}) {
+	$haschanged=1;
+	foreach (keys %ENV) {
+	    if ($_=~/^form\.set_version_(.+)$/) {
+		my $src=$1;
+		&Apache::lonnet::logthis('Found: '.$1.' '.$ENV{$_});
+		if (($ENV{$_}) && ($ENV{$_} ne $setversions{$src})) {
+		    $newsetversions{$src}=$ENV{$_};
+		}
+	    }
+	}
+    }
+    if ($haschanged) {
+        if (&Apache::lonnet::put('resourceversions',\%newsetversions,
+			  $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+			  $ENV{'course.'.$ENV{'request.course.id'}.'.num'}) eq 'ok') {		
+	    $r->print('<h1>'.&mt('Your Version Settings have been Stored').'</h1>');
+	} else {
+	    $r->print('<h1><font color="red">'.&mt('An Error Occured while Attempting to Store your Version Settings').'</font></h1>');
+	}
+	&changewarning($r,'');
+    }
+    if ($ENV{'form.timerange'} eq 'all') {
+# show all documents
+	$header=&mt('All Documents in Course');
+	$allsel=1;
+	foreach (keys %hash) {
+	    if ($_=~/^ids\_(\/res\/.+)$/) {
+		my $src=$1;
+		$changes{$src}=1;
+	    }
+	}
+    } 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=&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.');
+	}
+    }
+    %setversions=&Apache::lonnet::dump('resourceversions',
+			  $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+			  $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
+    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 (possibly large output)',
+	       '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',
+'sv' => 'Set Versions to be used in Course according to Selections below',
+'sm' => 'Keep all Resources up-to-date with most recent Versions (default)',
+'sc' => 'Set all Resource Versions to current Version (Fix Versions)',
+	       'di' => 'Differences');
+    $r->print(<<ENDHEADERS);
 <form action="/adm/coursedocs" method="post">
+<input type="hidden" name="versions" value="1" />
+<input type="submit" name="setmostrecent" value="$lt{'sm'}" />
+<input type="submit" name="setcurrent" value="$lt{'sc'}" /><hr />
 <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" />
-</form>
-<h3>Content changed $seltext</h3>
+<input type="submit" name="display" value="$lt{'sd'}" />
+<h3>$header</h3>
+<input type="submit" name="setversions" value="$lt{'sv'}" />
 <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 (sort keys %changes) {
+	if ($changes{$_}>$starttime) {
+	    my ($root,$extension)=($_=~/^(.*)\.(\w+)$/);
+	    my $currentversion=&Apache::lonnet::getversion($_);
+	    if ($currentversion<0) {
+		$currentversion=&mt('Could not be determined.');
+	    }
+	    my $linkurl=&Apache::lonnet::clutter($_);
+	    $r->print(
+		      '<tr><td><b>'.
+		      &Apache::lonnet::gettitle($linkurl).
+		   '</b><br /><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) && ($usedversion ne 'mostrecent')) {
+		$r->print($usedversion);
+	    } else {
+		$r->print($currentversion);
+	    }
+	    $r->print('</font></td><td>');
+# Set version
+	    $r->print(&Apache::loncommon::select_form($setversions{$linkurl},
+						      'set_version_'.$linkurl,
+						      ('' => '',
+						       'mostrecent' => 'most recent',
+						       map {$_,$_} (1..$currentversion))));
+	    $r->print('</td><td><font size="1"><ul>');
+	    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('<li><a href="'.&Apache::lonnet::clutter($url).
+			  '">'.&mt('Version').' '.$prevvers.'</a> ('.
+			  &Apache::lonlocal::locallocaltime(&Apache::lonnet::metadata($url,'lastrevisiondate')).
+			  ')');
+		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>'.&mt('Done').'.</h1>');
-   } else {
-       $r->print('<p>'.&mt('No content modifications yet.').'</p>');
-   }
-   &untiehash();
+			      &Apache::lonnet::clutter($root.'.'.$extension).
+			      '&versionone='.$prevvers.
+			      '">'.&mt('Diffs').'</a>');
+		}
+		$r->print('</li>');
+	    }
+	    $r->print('</ul></font></td></tr>');
+	}
+    }
+    $r->print('</table></form>');
+    $r->print('<h1>'.&mt('Done').'.</h1>');
+
+    &untiehash();
+}
+
+sub changewarning {
+    my ($r,$postexec)=@_;
+    $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">'.
+&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>');
 }
 
 # ================================================================ Main Handler
@@ -668,7 +796,6 @@ sub handler {
     $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',
@@ -682,6 +809,8 @@ sub handler {
 		    '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(
@@ -858,11 +987,18 @@ ENDNEWSCRIPT
                 'sipr' => 'Simple Problem',
                 'scuf' => 'Score Upload Form',
                 'bull' => 'Bulletin Board',
-                'mypi' => 'My Personal Info'
+                'mypi' => 'My Personal Info',
+                'file' =>  'File',
+                'title' => 'Title',
+                'comment' => 'Comment' 
 					  );
 # -----------------------------------------------------------------------------
     if ($allowed) {
        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" />
@@ -876,15 +1012,15 @@ ENDNEWSCRIPT
 <form action="/adm/coursedocs" method="post" name="courseverify">
 <table bgcolor="#AAAAAA" width="100%" cellspacing="4" cellpadding="4">
 <tr><td bgcolor="#DDDDCC">
-<input type="submit" name="verify" value="Verify Content" />
+<input type="submit" name="verify" value="$lt{'vc'}" />
 </td><td bgcolor="#DDDDCC">
-<input type="submit" name="versions" value="Check Resource Versions" />
+<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'));
+		     &mt('Editing the Table of Contents for your Course')));
     }
 # --------------------------------------------------------- Standard documents
     $r->print('<table border=2 cellspacing=4 cellpadding=4>');
@@ -902,15 +1038,7 @@ ENDCOURSEVERIFY
        $hadchanges=0;
        &editor($r,$coursenum,$coursedom,$folder,$allowed);
        if ($hadchanges) {
-	   $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">'.
-&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>');
+	   &changewarning($r,$postexec);
        }
        my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.
                      '.sequence';
@@ -921,11 +1049,11 @@ $help{'Caching'}.'</font></h3></form>');
 <th bgcolor="#DDDDDD">$lt{'spec'}</th>
 </tr>
 <tr><td bgcolor="#DDDDDD">
-File:<br />
+$lt{'file'}:<br />
 <form action="/adm/coursedocs" method="post" enctype="multipart/form-data">
 <input type="file" name="uploaddoc" size="40">
 <br />
-Title:<br />
+$lt{'title'}:<br />
 <input type="text" size="50" name="comment">
 <input type="hidden" name="folder" value="$folder">
 <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
@@ -1071,7 +1199,7 @@ ENDFORM
 <tr><td bgcolor="#DDDDDD">
 <form action="/adm/coursedocs" method="post" enctype="multipart/form-data">
 <input type="file" name="uploaddoc" size="40">
-<br />Comment:<br />
+<br />$lt{'comment'}:<br />
 <textarea cols=50 rows=4 name='comment'>
 </textarea>
 <input type="hidden" name="folder" value="$folder">
@@ -1157,7 +1285,7 @@ ENDSUPFORM
          &entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table></p>');
   }
  }
- $r->print(&Apache::lonlocal::endreroutetrans().'</body></html>');
+ $r->print('</body></html>');
  return OK;
 }