--- loncom/interface/lonmsgdisplay.pm 2006/04/25 23:12:34 1.16 +++ loncom/interface/lonmsgdisplay.pm 2006/05/17 09:51:26 1.26 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines for messaging display # -# $Id: lonmsgdisplay.pm,v 1.16 2006/04/25 23:12:34 albertel Exp $ +# $Id: lonmsgdisplay.pm,v 1.26 2006/05/17 09:51:26 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -28,6 +28,7 @@ package Apache::lonmsgdisplay; +use Apache::lonselstudent; =pod @@ -259,89 +260,21 @@ sub movemsg { # ======================================================= Display a course list sub discourse { - my $r=shift; - my $classlist = &Apache::loncoursedata::get_classlist(); - my $now=time; - my %lt=&Apache::lonlocal::texthash('cfa' => 'Check All', - 'cfs' => 'Check Section/Group', - 'cfn' => 'Uncheck All'); - $r->print(<<ENDDISHEADER); -<input type="hidden" name="sendmode" value="group" /> -<script> - function checkall() { - for (i=0; i<document.forms.compemail.elements.length; i++) { - if - (document.forms.compemail.elements[i].name.indexOf('send_to_')==0) { - document.forms.compemail.elements[i].checked=true; - } - } - } - - function checksec() { - for (i=0; i<document.forms.compemail.elements.length; i++) { - if - (document.forms.compemail.elements[i].name.indexOf - ('send_to_&&&'+document.forms.compemail.chksec.value+'&&&')==0) { - document.forms.compemail.elements[i].checked=true; - } - } - } + my $result; + my ($course_personnel, + $current_members, + $expired_members, + $future_members) = &Apache::lonselstudent::get_people_in_class(); + unshift @$current_members, (@$course_personnel); + my %defaultUsers; + + $result = &Apache::lonselstudent::render_student_list($current_members, + "compemail", + "current", + \%defaultUsers, + 1,"selectedusers",1); - function uncheckall() { - for (i=0; i<document.forms.compemail.elements.length; i++) { - if - (document.forms.compemail.elements[i].name.indexOf('send_to_')==0) { - document.forms.compemail.elements[i].checked=false; - } - } - } -</script> -<input type="button" onClick="checkall()" value="$lt{'cfa'}" /> -<input type="button" onClick="checksec()" value="$lt{'cfs'}" /> -<input type="text" size="5" name="chksec" /> -<input type="button" onClick="uncheckall()" value="$lt{'cfn'}" /> -<p> -ENDDISHEADER - my %coursepersonnel=&Apache::lonnet::get_course_adv_roles(); - $r->print('<table>'); - foreach my $role (sort keys %coursepersonnel) { - foreach (split(/\,/,$coursepersonnel{$role})) { - my ($puname,$pudom)=split(/\:/,$_); - $r->print('<tr><td><label>'. - '<input type="checkbox" name="send_to_&&&&&&_'. - $puname.':'.$pudom.'" /> '. - &Apache::loncommon::plainname($puname,$pudom). - '</label></td>'. - '<td>('.$_.'),</td><td><i>'.$role.'</i></td></tr>'); - } - } - $r->print('</table><table>'); - my $sort = sub { - my $aname=lc($classlist->{$a}[&Apache::loncoursedata::CL_FULLNAME()]); - if (!$aname) { $aname=$a; } - my $bname=lc($classlist->{$b}[&Apache::loncoursedata::CL_FULLNAME()]); - if (!$bname) { $bname=$b; } - return $aname cmp $bname; - }; - foreach my $student (sort $sort (keys(%{$classlist}))) { - my $info=$classlist->{$student}; - my ($sname,$sdom,$status,$fullname,$section) = - (@{$info}[&Apache::loncoursedata::CL_SNAME(), - &Apache::loncoursedata::CL_SDOM(), - &Apache::loncoursedata::CL_STATUS(), - &Apache::loncoursedata::CL_FULLNAME(), - &Apache::loncoursedata::CL_SECTION()]); - next if ($status ne 'Active'); - next if ($env{'request.course.sec'} && - $section ne $env{'request.course.sec'}); - my $key = 'send_to_&&&'.$section.'&&&_'.$student; - if (! defined($fullname) || $fullname eq '') { $fullname = $sname; } - $r->print('<tr><td><label>'. - qq{<input type="checkbox" name="$key" />}.(' 'x2). - $fullname.'</label></td><td>'.$sname.':'.$sdom.'</td><td>'.$section. - '</td></tr>'); - } - $r->print('</table>'); + return $result; } # ==================================================== Display Critical Message @@ -857,7 +790,9 @@ sub compout { } my $citation=&displayresource(%content); if ($env{'form.recdom'}) { $defdom=$env{'form.recdom'}; } - $r->print( + if ($env{'form.text'}) { $dismsg=$env{'form.text'}; } + if ($env{'form.subject'}) { $dissub=$env{'form.subject'}; } + $r->print( '<form action="/adm/email" name="compemail" method="post"'. ' enctype="multipart/form-data">'."\n". '<input type="hidden" name="sendmail" value="on" />'."\n". @@ -932,6 +867,8 @@ ENDUPLOAD } if ($broadcast eq 'group') { &discourse($r); + my $studentsel = &discourse(); + $r->print($studentsel); } $r->print('</form>'. &Apache::lonfeedback::generate_preview_button('compemail','message'). @@ -1291,8 +1228,8 @@ sub display_blocker_status { 'modi' => 'Modify', 'canc' => 'Cancel', ); + $r->print(&Apache::loncommon::start_data_table()); $r->print(<<"END"); -<table class="LC_data_table"> <tr> <th>$$ltext{'dura'}</th> <th>$$ltext{'setb'}</th> @@ -1300,26 +1237,27 @@ sub display_blocker_status { <th>$$ltext{'actn'}?</th> </tr> END - foreach (sort keys %{$records}) { - my $iter = $parmcount%2; + foreach my $record (sort(keys(%{$records}))) { my $onchange = 'onFocus="javascript:window.document.forms['. "'blockform'].elements['modify_".$parmcount."'].". 'checked=true;"'; - my ($start,$end) = split/____/,$_; + my ($start,$end) = split(/____/,$record); my $startform = &Apache::lonhtmlcommon::date_setter('blockform','startdate_'.$parmcount,$start,$onchange); my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange); - my ($setuname,$setudom,$title) = &parse_block_record($$records{$_}); + my ($setuname,$setudom,$title) = + &parse_block_record($$records{$record}); + $title = &HTML::Entities::encode($title,'"<>&'); my $settername = &Apache::loncommon::plainname($setuname,$setudom); + $r->print(&Apache::loncommon::start_data_table_row()); $r->print(<<"END"); - <tr> <td>$$ltext{'star'}: $startform<br/>$$ltext{'endd'}: $endform</td> <td>$settername</td> - <td><input type="text" name="title_$parmcount" size="15" value="$title" /><input type="hidden" name="key_$parmcount" value="$_" /></td> + <td><input type="text" name="title_$parmcount" size="15" value="$title" /><input type="hidden" name="key_$parmcount" value="$record" /></td> <td><label>$lt{'modi'}? <input type="checkbox" name="modify_$parmcount" /></label><br /><label>$lt{'canc'}? <input type="checkbox" name="cancel_$parmcount" /></label> - </tr> END - $parmcount ++; + $r->print(&Apache::loncommon::end_data_table_row()); + $parmcount++; } $r->print(<<"END"); </table> @@ -1358,19 +1296,23 @@ sub display_addblocker_table { ); $r->print(<<"END"); <h4>$lt{'addn'}</h4> - <table class="LC_data_table"> +END + $r->print(&Apache::loncommon::start_data_table()); + $r->print(<<"END"); <tr> <th>$$ltext{'dura'}</th> <th>$$ltext{'even'} $lt{'exam'}</th> <th>$$ltext{'actn'}?</th> </tr> - <tr> +END + $r->print(&Apache::loncommon::start_data_table_row()); + $r->print(<<"END"); <td>$$ltext{'star'}: $startform<br />$$ltext{'endd'}: $endform</td> <td><input type="text" name="title_$parmcount" size="15" value="" /></td> <td><label>$lt{'addb'}? <input type="checkbox" name="add_$parmcount" value="1" /></label></td> - </tr> - </table> END + $r->print(&Apache::loncommon::end_data_table_row()); + $r->print(&Apache::loncommon::end_data_table()); return; } @@ -1388,12 +1330,9 @@ sub blockcheck { # for students. return if (!%live_courses); - &Apache::lonnet::logthis("hmm"); - &Apache::lonnet::logthis(join(" ",%live_courses)); - &Apache::lonnet::logthis(join(" ",%staff_of)); - foreach my $course (keys(%live_courses)) { - my ($cdom,$cnum) = split(/_/,$course); + my $cdom = $env{'course.'.$course.'.domain'}; + my $cnum = $env{'course.'.$course.'.num'}; # if they are a staff member and are currently not playing student next if ( $staff_of{$course} @@ -1428,31 +1367,35 @@ sub build_block_table { 'cour' => 'Course', 'dura' => 'Duration', 'blse' => 'Block set by' - ); + ); + $r->print(<<"END"); +<br /><br />$lt{'cacb'}:<br /><br /> +END + $r->print(&Apache::loncommon::start_data_table()); $r->print(<<"END"); -<br /<br />$lt{'cacb'}:<br /><br /> -<table class="LC_data_table"> <tr> <th>$lt{'cour'}</th> <th>$lt{'dura'}</th> <th>$lt{'blse'}</th> </tr> END - foreach (keys %{$setters}) { - my %courseinfo=&Apache::lonnet::coursedescription($_); - for (my $i=0; $i<@{$$setters{$_}{staff}}; $i++) { - my ($uname,$udom) = @{$$setters{$_}{staff}[$i]}; + foreach my $course (keys(%{$setters})) { + my %courseinfo=&Apache::lonnet::coursedescription($course); + for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) { + my ($uname,$udom) = @{$$setters{$course}{staff}[$i]}; my $fullname = &Apache::loncommon::plainname($uname,$udom); - my ($openblock,$closeblock) = @{$$setters{$_}{times}[$i]}; + my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]}; $openblock = &Apache::lonlocal::locallocaltime($openblock); $closeblock= &Apache::lonlocal::locallocaltime($closeblock); - $r->print('<tr><td>'.$courseinfo{'description'}.'</td>'. + $r->print(&Apache::loncommon::start_data_table_row(). + '<td>'.$courseinfo{'description'}.'</td>'. '<td>'.$openblock.' to '.$closeblock.'</td>'. '<td>'.$fullname.' ('.$uname.':'.$udom. - ')</td></tr>'); + ')</td>'. + &Apache::loncommon::end_data_table_row()); } } - $r->print('</table>'); + $r->print(&Apache::loncommon::end_data_table()); } # ----------------------------------------------------------- Display a message @@ -1604,7 +1547,7 @@ sub header { $r->print(&Apache::loncommon::start_page('Communication and Messages', $extra)); $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,($title?$title:'Communication and Messages'))); + (($title?$title:'Communication and Messages'))); } @@ -1681,13 +1624,26 @@ sub sendoffmail { &statuschange($msgid,'replied',$folder); } + my $to = $env{'form.selectedusers.forminput'}; + my $mode = $env{'form.sendmode'}; + my %toaddr; - if ($env{'form.sendmode'} eq 'group') { - foreach my $address (keys(%env)) { - if ($address=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) { - $toaddr{$1}=''; + if ($to) { + foreach my $dest (@$to) { + my ($user,$domain) = split /:/, $dest; + if (($user ne '') && ($domain ne '')) { + my $address = $user.":".$domain; # How the code below expects it. + $toaddr{$address} = ''; } } + } + + if ($env{'form.sendmode'} eq 'group') { + foreach my $address (keys(%env)) { + if ($address=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) { + $toaddr{$1}=''; + } + } } elsif ($env{'form.sendmode'} eq 'upload') { foreach my $line (split(/[\n\r\f]+/,$env{'form.upfile'})) { my ($rec,$txt)=split(/\s*\:\s*/,$line); @@ -1697,12 +1653,16 @@ sub sendoffmail { } } } else { - $toaddr{$env{'form.recuname'}.':'.$env{'form.recdomain'}}=''; + if (($env{'form.recuname'} ne '') && ($env{'form.recdomain'} ne '')) { + $toaddr{$env{'form.recuname'}.':'.$env{'form.recdomain'}}=''; + } } if ($env{'form.additionalrec'}) { foreach (split(/\,/,$env{'form.additionalrec'})) { my ($auname,$audom)=split(/\@/,$_); - $toaddr{$auname.':'.$audom}=''; + if (($auname ne "") && ($audom ne "")) { + $toaddr{$auname.':'.$audom}=''; + } } } @@ -1831,7 +1791,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').'</p>'); + &mt('Please use the browser "Back" button and correct the recipient addresses '."($sendstatus)").'</p>'); } } @@ -1852,7 +1812,7 @@ sub handler { ['display','replyto','forward','markread','markdel','markunread', 'sendreply','compose','sendmail','critical','recname','recdom', 'recordftf','sortedby','block','folder','startdis','interdis', - 'showcommentbaseurl','dismode']); + 'showcommentbaseurl','dismode','group','subject','text']); $sqs='&sortedby='.$env{'form.sortedby'}; # ------------------------------------------------------ They checked for email