--- loncom/xml/lonxml.pm	2001/08/07 22:57:50	1.107
+++ loncom/xml/lonxml.pm	2001/08/20 14:53:12	1.119
@@ -13,7 +13,7 @@
 # 6/12,6/13 H. K. Ng
 # 6/16 Gerd Kortemeyer
 # 7/27 H. K. Ng
-# 8/7 Gerd Kortemeyer
+# 8/7,8/9,8/10,8/11,8/15,8/16,8/17,8/18,8/20 Gerd Kortemeyer
 
 package Apache::lonxml; 
 use vars 
@@ -97,6 +97,12 @@ sub xmlbegin {
 sub xmlend {
     my $discussion='';
     if ($ENV{'request.course.id'}) {
+       my $crs='/'.$ENV{'request.course.id'};
+       if ($ENV{'request.course.sec'}) {
+          $crs.='_'.$ENV{'request.course.sec'};
+       }                 
+       $crs=~s/\_/\//g;
+       my $seeid=&Apache::lonnet::allowed('rin',$crs);
        my $symb=&Apache::lonnet::symbread();
        if ($symb) {
           my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
@@ -107,13 +113,37 @@ sub xmlend {
                   '<address><hr /><h2>Course Discussion of Resource</h2>';
               my $idx;
               for ($idx=1;$idx<=$contrib{'version'};$idx++) {
-                  my $message=$contrib{$idx.':message'};
-                  $message=~s/\n/\<br \/\>/g;
-		  $discussion.='<p><b>'.$contrib{$idx.':sendername'}.' at '.
-		      $contrib{$idx.':senderdomain'}.'</b> ('.
+		my $hidden=($contrib{'hidden'}=~/\.$idx\./);
+		unless (($hidden) && (!$seeid)) {
+                 my $message=$contrib{$idx.':message'};
+                 $message=~s/\n/\<br \/\>/g;
+                 if ($message) {
+                  if ($hidden) {
+		      $message='<font color="#888888">'.$message.'</font>';
+                  }
+                  my $sender='Anonymous';
+                  if ((!$contrib{$idx.':anonymous'}) || ($seeid)) {
+                      $sender=$contrib{$idx.':sendername'}.' at '.
+		      $contrib{$idx.':senderdomain'};
+                      if ($contrib{$idx.':anonymous'}) {
+			  $sender.=' (anonymous)';
+                      }
+                      if ($seeid) {
+			  if ($hidden) {
+                             $sender.=' <a href="/adm/feedback?unhide='.
+				 $symb.':::'.$idx.'">Make Visible</a>';
+                          } else {
+                             $sender.=' <a href="/adm/feedback?hide='.
+				 $symb.':::'.$idx.'">Hide</a>';
+			  }
+                      }                   
+                  }
+		  $discussion.='<p><b>'.$sender.'</b> ('.
                       localtime($contrib{$idx.':timestamp'}).
                       '):<blockquote>'.$message.
-                      '</blockquote></p>'; 
+                      '</blockquote></p>';
+	        }
+               } 
               }
               $discussion.='</address>';
           }
@@ -122,6 +152,82 @@ sub xmlend {
     return $discussion.'</html>';
 }
 
+sub tokeninputfield {
+    my $defhost=$Apache::lonnet::perlvar{'lonhostID'};
+    return (<<ENDINPUTFIELD)
+<form method="post">
+<table border="2" bgcolor="#FFFFBB">
+<tr><th>DocID Checkin</th></tr>
+<tr><td>
+<table>
+<tr>
+<td>Scan in Barcode</td>
+<td><input type="text" size="22" name="barcode" /></td>
+</tr>
+<tr><td><i>or</i> Type in DocID</td>
+<td>
+<input type="text" size="5" name="codeone" />
+<b><font size+"+2"*</font></b>
+<input type="text" size="5" name="codetwo" />
+<b><font size+"+2"*</font></b>
+<input type="text" size="10" name="codethree" value="$defhost" />
+</td></tr>
+</table>
+</td></tr>
+<tr><td><input type="submit" value="Check in DocID" /></td></tr>
+</table>
+</form>
+ENDINPUTFIELD
+}
+
+sub maketoken {
+    my ($symb,$tuname,$tudom,$tcrsid)=@_;
+    unless ($symb) {
+	$symb=&Apache::lonnet::symbread();
+    }
+    unless ($tuname) {
+	$tuname=$ENV{'user.name'};
+        $tudom=$ENV{'user.domain'};
+        $tcrsid=$ENV{'request.course.id'};
+    }
+
+    return &Apache::lonnet::checkout($symb,$tuname,$tudom,$tcrsid);
+}
+
+sub printtokenheader {
+    my ($target,$token,$symb,$tuname,$tudom,$tcrsid)=@_;
+    unless ($token) { return ''; }
+
+    unless ($symb) {
+	$symb=&Apache::lonnet::symbread();
+    }
+    unless ($tuname) {
+	$tuname=$ENV{'user.name'};
+        $tudom=$ENV{'user.domain'};
+        $tcrsid=$ENV{'request.course.id'};
+    }
+
+    my %reply=&Apache::lonnet::get('environment',
+              ['firstname','middlename','lastname','generation'],
+              $tudom,$tuname);
+    my $plainname=$reply{'firstname'}.' '. 
+                  $reply{'middlename'}.' '.
+                  $reply{'lastname'}.' '.
+		  $reply{'generation'};
+
+    if ($target eq 'web') {
+	return 
+ '<img align="right" src="/cgi-bin/barcode.gif?encode='.$token.'" />'.
+               'Checked out for '.$plainname.
+               '<br />User: '.$tuname.' at '.$tudom.
+	       '<br />CourseID: '.$tcrsid.
+               '<br />DocID: '.$token.
+               '<br />Time: '.localtime().'<hr />';
+    } else {
+        return $token;                         
+    }
+}
+
 sub fontsettings() {
     my $headerstring='';
     if (($ENV{'browser.os'} eq 'mac') && (!$ENV{'browser.mathml'})) { 
@@ -172,6 +278,8 @@ ENDPARM
           menu.currentStale=0;
           menu.clearbut(3,1);
           menu.switchbutton
+       (6,3,'catalog.gif','catalog','info','catalog_info()');
+          menu.switchbutton
        (8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)');
           menu.switchbutton
     (8,2,'fdbk.gif','feedback','on this','gopost("/adm/feedback",currentURL)');
@@ -200,7 +308,7 @@ ENDPARM
           menu.clearbut(7,3);
           menu.menucltim=menu.setTimeout(
  'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+
- 'clearbut(9,1);clearbut(9,2);clearbut(9,3);',
+ 'clearbut(9,1);clearbut(9,2);clearbut(9,3);clearbut(6,3)',
 			  2000);
 
       }
@@ -293,8 +401,8 @@ sub htmlclean {
 
     my $output= $tree->as_HTML(undef,' ');
      
-    $output=~s/\<(br|hr|img)([^\>\/]*)\>/\<$1$2 \/\>/gis;
-    $output=~s/\<\/(br|hr|img)\>//gis;
+    $output=~s/\<(br|hr|img|meta|allow)([^\>\/]*)\>/\<$1$2 \/\>/gis;
+    $output=~s/\<\/(br|hr|img|meta|allow)\>//gis;
     unless ($full) {
        $output=~s/\<[\/]*(body|head|html)\>//gis;
     }
@@ -745,6 +853,9 @@ sub parstring {
 
 sub writeallows {
     my $thisurl='/res/'.&Apache::lonnet::declutter(shift);
+    if ($ENV{'httpref.'.$thisurl}) {
+	$thisurl=$ENV{'httpref.'.$thisurl};
+    }
     my $thisdir=$thisurl;
     $thisdir=~s/\/[^\/]+$//;
     my %httpref=();