--- loncom/interface/lonmsgdisplay.pm 2009/03/04 17:07:31 1.117 +++ loncom/interface/lonmsgdisplay.pm 2009/08/28 19:58:57 1.132 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines for messaging display # -# $Id: lonmsgdisplay.pm,v 1.117 2009/03/04 17:07:31 bisitz Exp $ +# $Id: lonmsgdisplay.pm,v 1.132 2009/08/28 19:58:57 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -136,6 +136,9 @@ sub folderlist { ); + # set se lastvisit for the new mail check in the toplevel menu + &Apache::lonnet::appenv({'user.mailcheck.lastvisit'=>time}); + my %actions = &Apache::lonlocal::texthash( view => 'View Folder', rename => 'Rename Folder', @@ -170,6 +173,7 @@ sub folderlist { $formhash{'select_form_order'} = ['','critical',@userorder,'sent','trash']; my $output = qq|<script type="text/javascript"> +// <![CDATA[ function folder_choice(targetform,caller) { var permfolders_keys = new Array('$permlistkeys'); var permfolders_vals = new Array('$permlistvals'); @@ -211,6 +215,7 @@ function folder_choice(targetform,caller } } } +// ]]> </script>|; my %show = ('select_form_order' => [10,20,50,100,200], map {$_=>$_} (10,20,50,100,200)); @@ -236,7 +241,7 @@ function folder_choice(targetform,caller <td align="center"><b>'.$lt{'actn'}.'</b><br />'. &Apache::loncommon::select_form('view','folderaction',%actions).' </td><td><br />'. - '<input type="button" value="'.$lt{'go'}.'" onClick="javascript:folder_choice(this.form,'."'change'".');" /> + '<input type="button" value="'.$lt{'go'}.'" onclick="javascript:folder_choice(this.form,'."'change'".');" /> </td> </tr> </table> @@ -244,7 +249,7 @@ function folder_choice(targetform,caller <td align="right"> <table><tr><td><br /> <input type="button" value="'.&mt('New Folder'). - '" onClick="javascript:folder_choice(this.form,'."'new'".');" /></td>'. + '" onclick="javascript:folder_choice(this.form,'."'new'".');" /></td>'. '<td align="center"><b>'.&mt('Name').'</b><br />'. '<input type="text" size="15" name="newfolder" value="" /> </td></tr></table> @@ -292,11 +297,11 @@ sub scrollbuttons { } return '<b>'.&mt('Page').'</b>: '. - '<input type="submit" name="firstview" value="'.&mt('First').'" />'. - '<input type="submit" name="prevview" value="'.&mt('Previous').'" />'. - '<input type="text" size="5" name="startdis" value="'.$start.'" onChange="this.form.submit()" /> of '.$maxdis. - '<input type="submit" name="nextview" value="'.&mt('Next').'" />'. - '<input type="submit" name="lastview" value="'.&mt('Last').'" /><br />'. + '<input type="submit" name="firstview" value="|<" />'. + '<input type="submit" name="prevview" value="<" />'. + ' <input type="text" size="5" name="startdis" value="'.$start.'" onchange="this.form.submit()" /> / '.$maxdis.' '. + '<input type="submit" name="nextview" value=">" />'. + '<input type="submit" name="lastview" value=">|" /><br />'. &mt('<b>[_1] messages</b>: showing messages [_2] through [_3] of [_4].',$status,$first,$finish,$total).'</form>'; } # =============================================================== Status Change @@ -519,7 +524,10 @@ sub discourse { \%defaultUsers, 1,"selectedusers",1,'email') ) { - $result .= '<fieldset id="LC_activeusers"><legend><b>'.&mt('Bcc: course members with current access').'</b></legend><form name="activeusers">'; + $result .= '<fieldset id="LC_activeusers"><legend>' + .&mt('Bcc: course members with current access') + .'</legend>' + .'<form name="activeusers">'; $result .= $tmptext.'</form></fieldset><br />'; if (ref($statushash) eq 'HASH') { $statushash->{'active'} = 1; @@ -531,7 +539,10 @@ sub discourse { \%defaultUsers, 1, "selectedusers",0,'email') ) { - $result .= '<fieldset id="LC_previoususers"><legend><b>'.&mt('Bcc: course members with expired access').'</b></legend><form name="previoususers">'; + $result .= '<fieldset id="LC_previoususers"><legend>' + .&mt('Bcc: course members with expired access') + .'</legend>' + .'<form name="previoususers">'; $result .= $tmptext.'</form></fieldset><br />'; if (ref($statushash) eq 'HASH') { $statushash->{'previous'} = 1; @@ -544,7 +555,10 @@ sub discourse { \%defaultUsers, 1, "selectedusers",0,'email') ) { - $result .= '<fieldset id="LC_futureusers"><legend><b>'.&mt('Bcc: course members with future access').'</b></legend><form name="previoususers">'; + $result .= '<fieldset id="LC_futureusers"><legend>' + .&mt('Bcc: course members with future access') + .'</legend>' + .'<form name="previoususers">'; $result .= $tmptext.'</form></fieldset>'; if (ref($statushash) eq 'HASH') { $statushash->{'future'} = 1; @@ -619,8 +633,9 @@ sub disgroup { if (ref($access_status) eq 'HASH') { $access_status->{$status} = $$numitems{$status}; } - $r->print('<fieldset><legend><b>'.$lt{$status}. - '</b></legend><form name="'.$formname.'">'. + $r->print('<fieldset>'. + '<legend>'.$lt{$status}.'</legend>'. + '<form name="'.$formname.'">'. '<span class="LC_nobreak">'. '<input type="button" value="'.&mt('Check All').'" '. 'onclick="javascript:toggleAll('."this.form,'check'".')" />'. @@ -667,6 +682,7 @@ sub disgroup { sub group_check_uncheck { my $output = qq| <script type="text/javascript"> +// <![CDATA[ function toggleAll(form,action) { if (typeof(form.selectedusers_forminput.length)=="undefined") { if (action == 'check') { @@ -684,6 +700,7 @@ function toggleAll(form,action) { } } } +// ]]> </script> |; } @@ -759,7 +776,7 @@ sub discrit { .'<div class="LC_warning">' .&mt('Access to other pages will be prevented until you have moved all critical messages to your inbox.') .'</div><br />' - .'<form action="/adm/email" method="POST">' + .'<form action="/adm/email" method="post">' .'<input type="hidden" name="confirm" value="true" />'; my %what=&Apache::lonnet::dump('critical'); my $result = ''; @@ -978,6 +995,7 @@ sub disfolder { my $jscript = &Apache::loncommon::check_uncheck_jscript(); $r->print(<<ENDDISHEADER); <script type="text/javascript"> +// <![CDATA[ $jscript function validate_checkedaction() { @@ -1006,11 +1024,11 @@ sub disfolder { } document.disall.submit(); } - +// ]]> </script> ENDDISHEADER - my $fsqs='&folder='.$folder; + my $fsqs='&folder='.$folder; my @temp=&sortedmessages(\%blocked,$startblock,$endblock,\$numblocked,$folder,$msgstatus); my $totalnumber=$#temp+1; if ($totalnumber < 1) { @@ -1079,7 +1097,7 @@ ENDDISHEADER $r->print("</tr>\n"); my $suffix = &Apache::lonmsg::foldersuffix($folder); - my $count = 0; + my $count = $firstdis; for (my $n=$firstdis;$n<=$lastdis;$n++) { my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$origID, $description,$recv_name,$recv_domain)= @@ -1124,7 +1142,7 @@ ENDDISHEADER foreach my $item ($localsenttime,$dis_name,$dis_domain,$shortsubj) { $r->print('<td>'.(($status eq 'new')?'<b>':''). '<a href="/adm/email?display='.$origID.$sqs.'">'. - $item.(($status eq 'new')?'</b>':'').'</td>'); + $item.(($status eq 'new')?'</b>':'').'</a></td>'); } my $showstatus; my %statushash = &get_msgstatus_types(); @@ -1187,7 +1205,7 @@ ENDDISHEADER '" onclick="javascript:validate_checkedaction()"/></td>'."\n". '</tr></table>'); my $postedstartdis=$startdis+1; - $r->print('<input type="hidden" name="folder" value="'.$folder.'" /><input type="hidden" name="startdis" value="'.$postedstartdis.'" /><input type="hidden" name="interdis" value="'.$env{'form.interdis'}.'" /><input type="hidden" name="msgstatus" value="'.$msgstatus.'" ><input type="hidden" name="markedaction" value="" /></form>'); + $r->print('<input type="hidden" name="folder" value="'.$folder.'" /><input type="hidden" name="startdis" value="'.$postedstartdis.'" /><input type="hidden" name="interdis" value="'.$env{'form.interdis'}.'" /><input type="hidden" name="msgstatus" value="'.$msgstatus.'" /><input type="hidden" name="markedaction" value="" /></form>'); if ($numblocked > 0) { $r->print(&blocked_in_folder($numblocked,$startblock,$endblock, \%setters)); @@ -1200,8 +1218,12 @@ sub blocked_in_folder { my $finishblock = &Apache::lonlocal::locallocaltime($endblock); my $output = '<br /><br />'. &mt('[quant,_1,message is, messages are] not viewable because display of LON-CAPA messages sent to you by other students between [_2] and [_3] is currently being blocked because of online exams.',$numblocked,$beginblock,$finishblock); - $output .= &Apache::loncommon::build_block_table($startblock,$endblock, - $setters); + #$output .= &Apache::loncommon::build_block_table($startblock,$endblock, + # $setters); + + my ($blocked, $blocktext) = &Apache::loncommon::blocking_status("com"); + $output .="<br /><br />".$blocktext; + return $output; } @@ -1343,6 +1365,7 @@ sub compout { $sendmode = '<input type="hidden" name="sendmode" value="group" />'."\n"; $broadcast_js = qq| <script type="text/javascript"> +// <![CDATA[ function courseRecipients() { |; foreach my $type (keys(%access_status)) { @@ -1369,6 +1392,7 @@ function courseRecipients() { $broadcast_js .= qq| return; } +// ]]> </script> |; @@ -1412,7 +1436,9 @@ function courseRecipients() { my $jscript = &Apache::loncommon::check_uncheck_jscript(); $r->print(<<"ENDREPSCRIPT"); <script type="text/javascript"> +// <![CDATA[ $jscript +// ]]> </script> ENDREPSCRIPT } @@ -1681,7 +1707,7 @@ sub additional_rec_row { my $bcc = &mt('Bcc:'); my $exmpl = &mt('username:domain,username:domain,...'); my $output = <<"ENDADD"; -<tr><td colspan="3"><fieldset id="LC_additionalrecips"><legend><b>$lt->{'ad'}</b> <tt>($exmpl)</tt>:</legend><table> +<tr><td colspan="3"><fieldset id="LC_additionalrecips"><legend>$lt->{'ad'} <tt>($exmpl)</tt></legend><table> <tr><td> </td><td>$lt->{'to'}</td><td><input type="text" size="50" name="additionalrec_to" /></td></tr> <tr><td> </td><td>$cc</td><td><input type="text" size="50" name="additionalrec_cc" /></td></tr> <tr><td> </td><td>$bcc</td><td><input type="text" size="50" name="additionalrec_bcc" /></td></tr></table></fieldset></td></tr> @@ -1864,8 +1890,8 @@ sub facetoface { return; } my $crstype = &Apache::loncommon::course_type(); - my $leaders = ($crstype eq 'Group') ? 'coordinators and leaders' - : 'faculty and staff'; + my $leaders = ($crstype eq 'Community') ? 'coordinators and leaders' + : 'faculty and staff'; &printheader($r, '/adm/email?recordftf=query', "User Notes, Face-to-Face, Critical Messages, Broadcast Messages, Archived Messages"); @@ -1887,21 +1913,23 @@ sub facetoface { 'subm' => 'Retrieve discussion and message records', 'newr' => 'New Record (record is visible to '.lc($crstype).' '.$leaders.')', 'post' => 'Post this Record'); - $r->print(<<"ENDTREC"); -<h3>$lt{'head'}</h3> -<form method="post" action="/adm/email" name="stdselect"> -<input type="hidden" name="recordftf" value="retrieve" /> -<table> -<tr><td>$lt{'user'}:</td><td><input type="text" size="12" name="recuname" value="$env{'form.recuname'}" /></td> -<td rowspan="2"> -$stdbrws -<input type="submit" value="$lt{'subm'}" /></td> -</tr> -<tr><td>$lt{'dom'}:</td> -<td>$domform</td></tr> -</table> -</form> -ENDTREC + + $r->print('<h2>'.$lt{'head'}.'</h2>' + .'<form method="post" action="/adm/email" name="stdselect">' + .'<input type="hidden" name="recordftf" value="retrieve" />' + .&Apache::lonhtmlcommon::start_pick_box() + .&Apache::lonhtmlcommon::row_title($lt{'user'}) + .'<input type="text" size="12" name="recuname" value="'.$env{'form.recuname'}.'" />' + .' '.$stdbrws + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title($lt{'dom'}) + .$domform + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::end_pick_box() + .'<br />' + .'<input type="submit" value="'.$lt{'subm'}.'" />' + ); + if (($stage ne 'query') && ($env{'form.recdomain'}) && ($env{'form.recuname'})) { chomp($env{'form.newrecord'}); @@ -1910,8 +1938,17 @@ ENDTREC $env{'form.recuname'}, $env{'form.recdomain'}); } - $r->print('<h3>'.&Apache::loncommon::plainname($env{'form.recuname'}, - $env{'form.recdomain'}).'</h3>'); + my $aboutmelink=&Apache::loncommon::aboutmewrapper( + &Apache::loncommon::plainname($env{'form.recuname'} + ,$env{'form.recdomain'}) + ,$env{'form.recuname'},$env{'form.recdomain'}); + $r->print('<hr />' + .'<h2>' + .&mt('Discussion and message records for [_1] ([_2])' + ,$aboutmelink + ,$env{'form.recuname'}.':'.$env{'form.recdomain'}) + .'<h2>' + ); &disfacetoface($r,$env{'form.recuname'},$env{'form.recdomain'}); $r->print(<<ENDRHEAD); <form method="post" action="/adm/email"> @@ -1940,8 +1977,8 @@ sub examblock { $r->print('Not allowed'); return; } - my $usertype = (&Apache::loncommon::course_type() eq 'Group') ? 'members' - : 'students'; + my $usertype = (&Apache::loncommon::course_type() eq 'Community') ? 'members' + : 'students'; my %lt=&Apache::lonlocal::texthash( 'comb' => 'Communication Blocking', 'cbds' => 'Communication blocking during scheduled exams', @@ -2150,7 +2187,7 @@ END foreach my $block (@{$typeorder}) { my $blockstatus = ''; if ($blocks->{$block} eq 'on') { - $blockstatus = 'checked="true"'; + $blockstatus = 'checked="checked"'; } $r->print('<label><input type="checkbox" name="'.$block.'_'.$parmcount.'" '.$blockstatus.' value="1" />'.$types->{$block}.'</label><br />'); } @@ -2242,8 +2279,10 @@ sub displaymessage { my @messages=&sortedmessages(\%blocked,$startblock,$endblock,\$numblocked,$folder,$msgstatus); if ( $blocked{$msgid} eq 'ON' ) { &printheader($r,'/adm/email',&mt('Display a Message')); - $r->print(&mt('You attempted to display a message that is currently blocked because you are enrolled in one or more courses for which there is an ongoing online exam.')); - &build_block_table($r,$startblock,$endblock,\%setters); + #$r->print(&mt('You attempted to display a message that is currently blocked because you are enrolled in one or more courses for which there is an ongoing online exam.')); + #&build_block_table($r,$startblock,$endblock,\%setters); + my($blocked, $blocktext) = &Apache::loncommon::blocking_status("com"); + $r->print("<br />".$blocktext); return; } if ($msgstatus eq '') { @@ -2280,63 +2319,35 @@ sub displaymessage { &printheader($r,'/adm/email?display='.&escape($msgid),'Display a Message','',$content{'baseurl'}); my %courseinfo=&Apache::lonnet::coursedescription($content{'courseid'}); -# Functions and Actions - my $li_start='<span class="LC_nobreak">• '; - my $li_end='</span> '; - # Prepare available functions - my $functionlist=''; + my @functionlist; if (!$content{'noreplies'}) { - $functionlist.=$li_start - .'<a href="/adm/email?replyto='.&escape($msgid).$sqs.'">' + push(@functionlist,'<a href="/adm/email?replyto='.&escape($msgid).$sqs.'">' .&mt('Reply') - .'</a>' - .$li_end; + .'</a>'); } - $functionlist.=$li_start - .'<a href="/adm/email?forward='.&escape($msgid).$sqs.'">' + push(@functionlist,'<a href="/adm/email?forward='.&escape($msgid).$sqs.'">' .&mt('Forward') - .'</a>' - .$li_end; - $functionlist.=$li_start - .'<a href="/adm/email?markunread='.&escape($msgid).$sqs.'">' + .'</a>'); + push(@functionlist,'<a href="/adm/email?markunread='.&escape($msgid).$sqs.'">' .&mt('Mark Unread') - .'</a>' - .$li_end; - $functionlist.=$li_start - .'<a href="/adm/email?markdel='.&escape($msgid).$sqs.'">' + .'</a>'); + push(@functionlist,'<a href="/adm/email?markdel='.&escape($msgid).$sqs.'">' .&mt('Delete') - .'</a>' - .$li_end; - $functionlist.=$li_start - .'<a href="/adm/email?'.$sqs.'">' + .'</a>'); + push(@functionlist,'<a href="/adm/email?'.$sqs.'">' .&mt('Back to Folder Display') - .'</a>' - .$li_end; + .'</a>'); if ($counter > 0){ - $functionlist.=$li_start - .'<a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.'">' - .&mt('Previous') - .'</a>' - .$li_end; + push(@functionlist,'<a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.'">' + .&mt('Previous') + .'</a>'); } if ($counter < $number_of_messages - 1){ - $functionlist.=$li_start - .'<a href="/adm/email?display='.$messages[$counter+1]->[5].$sqs.'">' - .&mt('Next') - .'</a>' - .$li_end; - } -# Print functions - $r->print('<div class="LC_left_float">' - .'<fieldset>' - .'<legend><span class="LC_mail_functions">' - .&mt('Functions') - .'</span></legend>' - .$functionlist - .'</fieldset>' - .'</div>' - ); + push(@functionlist,'<a href="/adm/email?display='.$messages[$counter+1]->[5].$sqs.'">' + .&mt('Next') + .'</a>'); + } # Prepare available actions my $symb; @@ -2345,42 +2356,58 @@ sub displaymessage { } elsif (defined($content{'baseurl'})) { $symb=&Apache::lonnet::symbread($content{'baseurl'}); } + my @actionlist; if ($env{'user.adv'}) { - my $actionlist=''; if (&Apache::lonnet::allowed('vgr',$env{'request.course.id'})) { - $actionlist.=$li_start - .&Apache::loncommon::track_student_link( - &mt('View recent activity'),$content{'sendername'},$content{'senderdomain'},'check') - .$li_end; + push(@actionlist,&Apache::loncommon::track_student_link( + &mt('View recent activity') + ,$content{'sendername'} + ,$content{'senderdomain'} + ,'check')); } if (&Apache::lonnet::allowed('opa',$env{'request.course.id'}) && $symb) { - $actionlist.=$li_start - .&Apache::loncommon::pprmlink( - &mt('Set/Change parameters'),$content{'sendername'},$content{'senderdomain'},$symb,'check') - .$li_end; + push(@actionlist,&Apache::loncommon::pprmlink( + &mt('Set/Change parameters') + ,$content{'sendername'} + ,$content{'senderdomain'} + ,$symb + ,'check')); } if (&Apache::lonnet::allowed('mgr',$env{'request.course.id'}) && $symb) { - $actionlist.=$li_start - .&Apache::loncommon::pgrdlink( - &mt('Set/Change grades'),$content{'sendername'},$content{'senderdomain'},$symb,'check') - .$li_end; - } - -# Print actions - if ($actionlist) { - $r->print('<div class="LC_left_float">' - .'<fieldset>' - .'<legend>' - .&mt('[_1]Currently available actions[_2] (will open extra window):','<span class="LC_mail_functions">','</span>') - .'</legend>' - .$actionlist - .'</fieldset>' - .'</div>' - ); - } + push(@actionlist,&Apache::loncommon::pgrdlink( + &mt('Set/Change grades') + ,$content{'sendername'} + ,$content{'senderdomain'} + ,$symb + ,'check')); + } } +# Print functionlist and actionlist in page header + my $functions='<div class="LC_columnSection">'; + + # Functionlist + $functions.=&Apache::lonhtmlcommon::start_funclist(); + foreach my $item (@functionlist) { + $functions.=&Apache::lonhtmlcommon::add_item_funclist($item); + } + $functions .= &Apache::lonhtmlcommon::end_funclist(); + + # Actionlist + if (@actionlist) { + my $legendtext=&mt('Currently available actions (will open extra window)'); + $functions.=&Apache::lonhtmlcommon::start_funclist($legendtext); + foreach my $item (@actionlist) { + $functions.=&Apache::lonhtmlcommon::add_item_funclist($item); + } + $functions.=&Apache::lonhtmlcommon::end_funclist(); + } + + $functions.='</div>'; + $r->print(&Apache::loncommon::head_subbox($functions)); + + my ($tonum,$tolist,$cclist,$bcclist,$groupcclist,%recipients); if ($content{'recipid'}) { $tonum = &retrieve_recips('display',\%content,\%recipients); @@ -2726,6 +2753,7 @@ sub recipients_link { $body =~ s{\n}{}g; $r->print(<<ENDJS); <script type="text/javascript"> +// <![CDATA[ function showBroadcastList() { var caller = this; var newWindow = null; @@ -2748,7 +2776,7 @@ function writeWin(caller) { caller.document.close(); caller.focus(); } - +// ]]> </script> ENDJS @@ -3180,7 +3208,7 @@ sub sendoffmail { &Apache::loncommunicate::menu($r); } } else { - $r->print('<p><span class="LC_error">'.&mt('Could not deliver message').'</span> '. + $r->print('<p>'.&Apache::lonhtmlcommon::confirm_success(&mt('Could not deliver message'),1).'<br /> '. &mt('Please use the browser "Back" button and correct the recipient addresses ([_1]).',$sendstatus).'</p>'); } } @@ -3207,7 +3235,7 @@ sub handler { 'recordftf','sortedby','block','folder','startdis','interdis', 'showcommentbaseurl','dismode','group','subject','text','ref', 'msgstatus']); - $sqs='&sortedby='.$env{'form.sortedby'}; + $sqs='&sortedby='.$env{'form.sortedby'}; # ------------------------------------------------------ They checked for email unless ($env{'form.block'}) { @@ -3228,7 +3256,7 @@ sub handler { unless ($folder) { $folder=''; } else { - $sqs.='&folder='.&escape($folder); + $sqs.='&folder='.&escape($folder); } # ------------------------------------------------------------ Get Display Mode @@ -3260,7 +3288,7 @@ sub handler { $startdis++; } my $postedstartdis=$startdis+1; - $sqs.='&startdis='.$postedstartdis; + $sqs.='&startdis='.$postedstartdis; # --------------------------------------------------------------- Render Output