--- loncom/interface/lonmsgdisplay.pm	2007/05/05 06:13:46	1.79
+++ loncom/interface/lonmsgdisplay.pm	2008/06/06 05:24:28	1.86
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines for messaging display
 #
-# $Id: lonmsgdisplay.pm,v 1.79 2007/05/05 06:13:46 albertel Exp $
+# $Id: lonmsgdisplay.pm,v 1.86 2008/06/06 05:24:28 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -555,7 +555,7 @@ sub disgroup {
                       'recipients to select.');
         return $result;
     } else {
-        $result = &mt('Select message recipients from the group members listed below.<br />');  
+        $result = &mt('Select message recipients from the group members listed below.').'<br />';  
         my %Sortby = (
                          active   => {},
                          previous => {},
@@ -737,7 +737,7 @@ $content{'sendername'}.':'.
             '<br />'.&mt('Subject').': '.$content{'subject'}.
             '<br /><pre>'.
               &Apache::lontexconvert::msgtexconverted($content{'message'}).
-            '</pre><small>';
+            '</pre><div class="LC_error">';
         my ($rec_button,$reprec_button);
         $rec_button = &mt('Move to Inbox');
         if (!$content{'noreplies'}) {
@@ -752,7 +752,7 @@ $content{'sendername'}.':'.
         } else {
             $result .= &mt('Access to other pages will be prevented until you have moved the message to your inbox.'); 
         }
-        $result .= '</small><br />'.
+        $result .= '</div><br />'.
             '<input type="submit" name="rec_'.$key.'" value="'.$rec_button.'" />';
         if (!$content{'noreplies'}) {
             $result .= '<input type="submit" name="reprec_'.$key.'" '.
@@ -892,8 +892,7 @@ sub get_course_desc {
 
 sub disall {
     my ($r,$folder,$msgstatus)=@_;
-    my %saveable = ('folder'    => 'scalar',
-		    'msgstatus' => 'scalar',
+    my %saveable = ('msgstatus' => 'scalar',
 		    'sortedby'  => 'scalar',
 		    'interdis'  => 'scalar',
 		    );
@@ -930,16 +929,6 @@ sub disfolder {
 <script type="text/javascript">
     $jscript
 
-    function checkfoldermove() {
-        if (document.disall.checkedaction.options[document.disall.checkedaction.selectedIndex].value == 'markedmove') {
-            if (document.disall.movetofolder.options[document.disall.movetofolder.selectedIndex].value == "") {
-                alert("$lt{'sede'}");
-                return;
-            }
-        }
-        return; 
-    }
-
     function validate_checkedaction() {
         document.disall.markedaction.value = document.disall.checkedaction.options[document.disall.checkedaction.selectedIndex].value;
         if (document.disall.checkedaction.options[document.disall.checkedaction.selectedIndex].value == 'markedmove') {
@@ -1111,7 +1100,7 @@ ENDDISHEADER
   '<input type="button" onclick="javascript:uncheckAll(document.disall.delmark)" value="'.&mt('Uncheck All').'" />'."\n".
   '<input type="hidden" name="sortedby" value="'.$env{'form.sortedby'}.'" /></td><td>&nbsp;</td>'."\n".
   '<td align="center"><b>'.&mt('Action').'</b><br />'."\n".
-  '  <select name="checkedaction" onchange="javascript:checkfoldermove()">'."\n");
+  '  <select name="checkedaction">'."\n");
 
     if ($folder ne 'trash') {
         $r->print('    <option value="markeddel">'.&mt('Delete').'</option>'."\n");
@@ -1205,8 +1194,9 @@ sub compout {
         &printheader($r,'/adm/email?compose=multiforward',
              'Forwarding Multiple Messages');
         if ($multiforward > 1) {
-            $r->print(&mt('Each of the <b>[quant,_1,message]</b> you checked
-will be forwarded to the recipient(s) you select below.',$multiforward).'<br />');
+            $r->print(&mt('Each of the <b>[quant,_1,message]</b> you checked'
+                         .' will be forwarded to the recipient(s) you select below.',$multiforward)
+                    .'<br />');
         } else {
             $r->print(&mt('The message you checked will be forwarded to the recipient(s) you select below.').'<br />');
         }
@@ -1220,6 +1210,7 @@ will be forwarded to the recipient(s) yo
     my $dissub='';
     my $dismsg='';
     my $disbase='';
+    my $attachrow;
     my $func=&mt('Send New');
     my %lt=&Apache::lonlocal::texthash('us'  => 'Username',
 				       'do'  => 'Domain',
@@ -1234,7 +1225,15 @@ will be forwarded to the recipient(s) yo
                                        'gmt' => 'General message text',
                                        'tff' => 'The file format for the uploaded portion of the message is',
                                        'uas' => 'Upload and Send',
+                                       'atta' => 'Attachment',
                                       );
+    my %attachmax = (
+                     text => '(128 KB max size)',
+                     num  => 131072,
+                    );
+    if (!$forwarding && !$multiforward) {
+        $attachrow = '<br />'.$lt{'atta'}.' '.$attachmax{'text'}.': <input type="file" name="attachment" />';
+    }
     if (&Apache::lonnet::allowed('srm',$env{'request.course.id'})
 	|| &Apache::lonnet::allowed('srm',$env{'request.course.id'}.
 				    '/'.$env{'request.course.sec'})) {
@@ -1428,7 +1427,10 @@ $latexHelp.
 </table>
 $latexHelp
 <textarea name="message" id="message" cols="80" rows="15" wrap="hard">$dismsg
-</textarea></p><br />
+</textarea>
+$attachrow
+</p>
+<br />
 $dispcrit
 $disbase
 ENDCOMP
@@ -1515,9 +1517,10 @@ ENDREP
 sub additional_rec_row {
     my ($lt) = @_;
     my $cc = &mt('Cc:');
-    my $bcc = &mt('Bcc:'); 
+    my $bcc = &mt('Bcc:');
+    my $exmpl = &mt('username:domain,username:domain,...'); 
     my $output = <<"ENDADD";
-<tr><td>$lt->{'ad'} :<br /><tt>username:domain,username:domain, ...
+<tr><td>$lt->{'ad'} :<br /><tt>($exmpl)
 </tt></td><td>&nbsp;<span class="LC_nobreak">$cc 
 <input type="text" size="50" name="additionalrec_cc" /></span><br />
 <span class="LC_nobreak">$bcc <input type="text" size="50" name="additionalrec_bcc" /></span></td></tr>
@@ -2074,6 +2077,22 @@ sub displaymessage {
 	$counter++;
     }
     $r->print('</pre>');
+
+    my $see_anonymous;
+    my $from_student = 0;
+    if ($env{'request.course.id'} eq $content{'courseid'}) {
+	my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+	my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+	my $username = $content{'sendername'}.':'.$content{'senderdomain'};
+	my %classlist_entry =
+	    &Apache::lonnet::get('classlist',[$username],$cdom,$cnum);
+	if (exists($classlist_entry{$username})) {
+	    $from_student = 1;
+	    $see_anonymous = &Apache::lonnet::allowed('rin',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
+	}
+    }
+
+
     my $number_of_messages = scalar(@messages); #subtract 1 for last index
 # start output
     &printheader($r,'/adm/email?display='.&escape($msgid),'Display a Message','',$content{'baseurl'});
@@ -2108,6 +2127,7 @@ sub displaymessage {
         $symb=&Apache::lonnet::symbread($content{'baseurl'});
     }
     if ($env{'user.adv'}) {
+	my $adv_actions;
 	$r->print('<table border="2" width="100%"><tr bgcolor="#FFAAAA"><td>'.&mt('Currently available actions (will open extra window)').':</td>');
 	if (&Apache::lonnet::allowed('vgr',$env{'request.course.id'})) {
 		$r->print('<td><b>'.&Apache::loncommon::track_student_link(&mt('View recent activity'),$content{'sendername'},$content{'senderdomain'},'check').'</b></td>');
@@ -2147,7 +2167,10 @@ sub displaymessage {
     if (defined($content{'baseurl'})) {
         $baseurl = &Apache::lonenc::check_encrypt($content{'baseurl'});
     }
-    $r->print(&Apache::loncommon::student_image_tag($content{'senderdomain'},$content{'sendername'}));
+    if ($from_student && $see_anonymous ) {
+	$r->print(&Apache::loncommon::student_image_tag($content{'senderdomain'},$content{'sendername'}));
+    }
+
     $r->print('<br /><b>'.&mt('Subject').':</b> '.$content{'subject'});
     if ($folder eq 'sent') {
         $r->print('<br /><b>'.&mt('To').':</b> '.$tolist);
@@ -2173,7 +2196,7 @@ sub displaymessage {
                               $replytoname.' '.&mt('at').' '.$replytodom);
                 }
             } else {
-                $r->print(' ('.$content{'sendername'}.' '&mt('at').' '.
+                $r->print(' ('.$content{'sendername'}.' '.&mt('at').' '.
                           $content{'senderdomain'}.') ');
             }
             if ($cclist) {
@@ -2381,6 +2404,8 @@ sub sendoffmail {
     my %msg_status;
     my $numsent = 0;
     my $nosentstore = 1;
+    my $attachmenturl;
+    my $now = time;
     my ($cdom,$cnum,$group);
     if (exists($env{'form.group'})) {
         $group = $env{'form.group'};
@@ -2403,10 +2428,13 @@ sub sendoffmail {
 	if ($env{'form.forwid'}) {
 	    my $msgid=$env{'form.forwid'};
 	    my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);
-	    %content=&Apache::lonmsg::unpackagemsg($message{$msgid},1);
+	    %content=&Apache::lonmsg::unpackagemsg($message{$msgid},1,1);
 	    &statuschange($msgid,'forwarded',$folder);
-	    $env{'form.message'}.="\n\n-- Forwarded message --\n\n".
-		$content{'message'};
+            if ($content{'attachmenturl'} ne '') {
+                $attachmenturl = $content{'attachmenturl'};
+            }
+	    $env{'form.message'} .= "\n\n-- Forwarded message --\n\n".
+		                    $content{'message'};
 	}
 	if ($env{'form.replyid'}) {
 	    my $msgid=$env{'form.replyid'};
@@ -2505,7 +2533,18 @@ sub sendoffmail {
                                        $env{'user.domain'},\%reciphash);
         if ($recipstatus ne 'ok') {
             &Apache::lonnet::logthis('Failed to store Bcc and Cc recipients for '.$env{'user.name'}.':'.$env{'user.domain'});
-        }  
+        }
+        if ($env{'form.attachment'}) {
+            if (length($env{'form.attachment'})<131072) {
+                $attachmenturl=&Apache::lonnet::userfileupload('attachment',undef,'feedback/'.$now);
+            } else {
+                $r->print('<p><span class="LC_warning">'.&mt('Attachment not included - exceeded permitted length').'</span><br /></p>');
+            }
+        } elsif ($env{'form.multiforward'}) {
+            if ($env{'form.attachmenturl'} ne '') {
+                $attachmenturl = $env{'form.attachmenturl'};
+            }
+        }
         my @recusers;
         my @recudoms;
 	foreach my $address (sort(keys(%toaddr))) {
@@ -2531,7 +2570,7 @@ sub sendoffmail {
 		    &Apache::lonmsg::user_normal_msg($recuname,$recdomain,
 						     $msgsubj,$msgtxt,
 						     $content{'citation'},
-						     undef,undef,
+						     undef,$attachmenturl,
 						     $env{'form.permanent'},
 						     \$sentmessage{$address},
                                                      undef,undef,undef,
@@ -2564,7 +2603,7 @@ sub sendoffmail {
                 $specialresult = 
                     &Apache::lonmsg::user_normal_msg_raw($cnum,$cdom,
                         $subj_prefix.' '.$course_str,$savemsg,undef,undef,
-                        undef,undef,undef,\$specialmsgid,undef,undef,undef,
+                        $attachmenturl,undef,undef,\$specialmsgid,undef,undef,undef,
                         undef,undef,1);
                 $specialmsgid = &unescape($specialmsgid);
                 if ($specialresult eq 'ok') {
@@ -2581,7 +2620,7 @@ sub sendoffmail {
 							    $pid);
                             &Apache::lonmsg::user_normal_msg_raw($cnum,$cdom,
                                 $subj_prefix.' ['.$recipient.']',$msgsubj,
-                                undef,undef,undef,undef,$usermsgid,undef,
+                                undef,undef,$attachmenturl,undef,$usermsgid,undef,
                                 undef,$specialmsgid,undef,undef,undef,1);
                         }
                     }
@@ -2589,7 +2628,7 @@ sub sendoffmail {
                         &Apache::lonmsg::process_sent_mail($msgsubj,
                            $subj_prefix,$numsent,$stamp,$msgname,$msgdom,
                            $msgcount,$context,$pid,$savemsg,\@recusers,
-                           \@recudoms);
+                           \@recudoms,undef,$attachmenturl);
                     }
                 } else {
                     &Apache::lonnet::logthis('Failed to create record of critical, broadcast or archived message in '.$env{'course.'.$env{'request.course.id'}.'.num'}.' '&mt('at').' '.$env{'course.'.$env{'request.course.id'}.'.domain'}.' - no msgid generated');
@@ -2601,7 +2640,7 @@ sub sendoffmail {
                 &Apache::lonmsg::process_sent_mail($msgsubj,$subj_prefix,
                        $numsent,$stamp,$env{'user.name'},
                        $env{'user.domain'},$msgcount,$context,
-                       $$,$savemsg,\@recusers,\@recudoms);
+                       $$,$savemsg,\@recusers,\@recudoms,undef,$attachmenturl);
             }
         }
         if (!$env{'form.multiforward'}) { 
@@ -2618,7 +2657,7 @@ sub sendoffmail {
 	        }
             } else {
 	        $r->print('<p><span class="LC_error">'.&mt('Could not deliver message').'</span> '.
-		          &mt('Please use the browser "Back" button and correct the recipient addresses '."($sendstatus)").'</p>');
+		          &mt('Please use the browser "Back" button and correct the recipient addresses ([_1]).',$sendstatus).'</p>');
             }
         }
     }
@@ -2853,7 +2892,7 @@ sub handler {
             foreach my $item (@to_forward) {
                 my $msgid=&unescape($item);
                 my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);
-                my %content=&Apache::lonmsg::unpackagemsg($message{$msgid},1);
+                my %content=&Apache::lonmsg::unpackagemsg($message{$msgid},1,1);
                 if ($env{'form.showorigsubj'}) {
                     $env{'form.subject'} = $fixed_subj.$content{'subject'};
                 } else {
@@ -2867,8 +2906,10 @@ sub handler {
                         &Apache::loncommon::plainname($uname,$udom).' ('.
                                            $uname.':'.$udom.')';
                 }
-                $env{'form.message'} .= "\n\n-- Forwarded message --\n\n".
-                                        $content{'message'};
+                $env{'form.message'}.="\n\n-- Forwarded message --\n\n".
+                                      $content{'message'};
+                $env{'form.attachmenturl'} = $content{'attachmenturl'};
+                $env{'form.multiforwid'} = $item;
                 $fwdcount ++;
                 $r->print($fwdcount.': '); 
                 $sendresult{$msgid} = &sendoffmail($r,$folder);