Diff for /loncom/interface/lonmsgdisplay.pm between versions 1.19 and 1.35

version 1.19, 2006/04/26 14:43:03 version 1.35, 2006/06/29 13:52:19
Line 125  use Apache::lonlocal; Line 125  use Apache::lonlocal;
 use Apache::loncommunicate;  use Apache::loncommunicate;
 use Apache::lonfeedback;  use Apache::lonfeedback;
 use Apache::lonrss();  use Apache::lonrss();
   use Apache::lonselstudent();
   use lib '/home/httpd/lib/perl/';
   use LONCAPA;
   
 # Querystring component with sorting type  # Querystring component with sorting type
 my $sqs;  my $sqs;
Line 214  sub movemsg { Line 217  sub movemsg {
 # Copy message  # Copy message
     my %message=&Apache::lonnet::get('nohist_email'.$srcsuffix,[$msgid]);      my %message=&Apache::lonnet::get('nohist_email'.$srcsuffix,[$msgid]);
     if (!exists($message{$msgid}) || $message{$msgid} eq '') {      if (!exists($message{$msgid}) || $message{$msgid} eq '') {
  if (&Apache::slotrequest::network_error(%message)) {   if (&Apache::lonnet::error(%message)) {
     return (0,&mt('Message not moved, A network error occurred.'));      return (0,&mt('Message not moved, A network error occurred.'));
  } else {   } else {
     return (0,&mt('Message not moved as the message is no longer in the source folder.'));      return (0,&mt('Message not moved as the message is no longer in the source folder.'));
Line 223  sub movemsg { Line 226  sub movemsg {
   
     my $result =&Apache::lonnet::put('nohist_email'.$trgsuffix,      my $result =&Apache::lonnet::put('nohist_email'.$trgsuffix,
      {$msgid => $message{$msgid}});       {$msgid => $message{$msgid}});
     if (&Apache::slotrequest::network_error($result)) {      if (&Apache::lonnet::error($result)) {
  return (0,&mt('Message not moved, A network error occurred.'));   return (0,&mt('Message not moved, A network error occurred.'));
     }      }
   
Line 231  sub movemsg { Line 234  sub movemsg {
     unless ($trgfolder eq 'trash') {      unless ($trgfolder eq 'trash') {
         my %status=&Apache::lonnet::get('email_status'.$srcsuffix,[$msgid]);          my %status=&Apache::lonnet::get('email_status'.$srcsuffix,[$msgid]);
  # a non-existant status is the mark of an unread msg   # a non-existant status is the mark of an unread msg
  if (&Apache::slotrequest::network_error(%status)) {   if (&Apache::lonnet::error(%status)) {
     return (0,&mt('Message copied to new folder but status was not, A network error occurred.'));      return (0,&mt('Message copied to new folder but status was not, A network error occurred.'));
  }   }
  my $result=&Apache::lonnet::put('email_status'.$trgsuffix,   my $result=&Apache::lonnet::put('email_status'.$trgsuffix,
  {$msgid => $status{$msgid}});   {$msgid => $status{$msgid}});
  if (&Apache::slotrequest::network_error($result)) {   if (&Apache::lonnet::error($result)) {
     return (0,&mt('Message copied to new folder but status was not, A network error occurred.'));      return (0,&mt('Message copied to new folder but status was not, A network error occurred.'));
  }   }
     }      }
Line 246  sub movemsg { Line 249  sub movemsg {
  &Apache::lonnet::del('nohist_email'.$srcsuffix,[$msgid]);   &Apache::lonnet::del('nohist_email'.$srcsuffix,[$msgid]);
     my $result_del_stat =      my $result_del_stat =
  &Apache::lonnet::del('email_status'.$srcsuffix,[$msgid]);   &Apache::lonnet::del('email_status'.$srcsuffix,[$msgid]);
     if (&Apache::slotrequest::network_error($result_del_msg)) {      if (&Apache::lonnet::error($result_del_msg)) {
  return (0,&mt('Message copied, but unable to delete the original from the source folder.'));   return (0,&mt('Message copied, but unable to delete the original from the source folder.'));
     }      }
     if (&Apache::slotrequest::network_error($result_del_stat)) {      if (&Apache::lonnet::error($result_del_stat)) {
  return (0,&mt('Message copied, but unable to delete the original status from the source folder.'));   return (0,&mt('Message copied, but unable to delete the original status from the source folder.'));
     }      }
   
Line 259  sub movemsg { Line 262  sub movemsg {
 # ======================================================= Display a course list  # ======================================================= Display a course list
   
 sub discourse {  sub discourse {
     my $r=shift;      my $result;
     my $classlist = &Apache::loncoursedata::get_classlist();      my ($course_personnel,
     my $now=time;   $current_members,
     my %lt=&Apache::lonlocal::texthash('cfa' => 'Check All',   $expired_members,
             'cfs' => 'Check Section/Group',   $future_members) = 
             'cfn' => 'Uncheck All');      &Apache::lonselstudent::get_people_in_class($env{'request.course.sec'});
     $r->print(<<ENDDISHEADER);      unshift @$current_members, (@$course_personnel);
 <input type="hidden" name="sendmode" value="group" />      my %defaultUsers;
 <script pe="text/javascript">  
     function checkall() {      $result = &Apache::lonselstudent::render_student_list($current_members,
  for (i=0; i<document.forms.compemail.elements.length; i++) {    "compemail",
             if     "current",
           (document.forms.compemail.elements[i].name.indexOf('send_to_')==0) {    \%defaultUsers,
       document.forms.compemail.elements[i].checked=true;    1,"selectedusers",1);
             }  
         }      $result .= &Apache::lonselstudent::render_student_list($expired_members,
     }     "compemail",
      "expired",
     function checksec() {     \%defaultUsers,
  for (i=0; i<document.forms.compemail.elements.length; i++) {     1, "selectedusers",0);
             if       $result .= &Apache::lonselstudent::render_student_list($future_members,
           (document.forms.compemail.elements[i].name.indexOf     "compemail",
            ('send_to_&&&'+document.forms.compemail.chksec.value+'&&&')==0) {     "future",
       document.forms.compemail.elements[i].checked=true;     \%defaultUsers,
             }     1, "selectedusers", 0);
         }      return $result;
     }  
   
     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'}" />&nbsp;  
 <input type="button" onClick="checksec()" value="$lt{'cfs'}" />  
 <input type="text" size="5" name="chksec" />&nbsp;  
 <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" />}.('&nbsp;'x2).  
                   $fullname.'</label></td><td>'.$sname.':'.$sdom.'</td><td>'.$section.  
                   '</td></tr>');  
     }  
     $r->print('</table>');  
 }  }
   
 # ==================================================== Display Critical Message  # ==================================================== Display Critical Message
Line 374  $content{'sendername'}.':'. Line 320  $content{'sendername'}.':'.
     # Check to see if there were any messages.      # Check to see if there were any messages.
     if ($result eq '') {      if ($result eq '') {
         $result = "<h2>".&mt('You have no critical messages.')."</h2>".          $result = "<h2>".&mt('You have no critical messages.')."</h2>".
     '<a href="/adm/roles">'.&mt('Select a course').'</a><br />'.      '<a href="/adm/roles">'.&mt('Select a course or group').'</a><br />'.
             '<a href="/adm/email">'.&mt('Communicate').'</a>';              '<a href="/adm/email">'.&mt('Communicate').'</a>';
     } else {      } else {
         $r->print($header);          $r->print($header);
Line 400  sub sortedmessages { Line 346  sub sortedmessages {
     }      }
   
     foreach my $msgid (@messages) {      foreach my $msgid (@messages) {
  my $esc_msgid=&Apache::lonnet::escape($msgid);   my $esc_msgid=&escape($msgid);
  my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid)=   my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid)=
     &Apache::lonmsg::unpackmsgid($esc_msgid,$folder,undef,      &Apache::lonmsg::unpackmsgid($esc_msgid,$folder,undef,
  \%status_cache);   \%status_cache);
Line 507  sub disnew { Line 453  sub disnew {
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
        'nm' => 'New Messages',         'nm' => 'New Messages',
        'su' => 'Subject',         'su' => 'Subject',
                                        'co' => 'Course',                                         'co' => 'Course/Group',
        'da' => 'Date',         'da' => 'Date',
        'us' => 'Username',         'us' => 'Username',
        'op' => 'Open',         'op' => 'Open',
Line 526  sub disnew { Line 472  sub disnew {
  &Apache::lonnet::get('email_status',\@msgids);   &Apache::lonnet::get('email_status',\@msgids);
     my %descriptions;      my %descriptions;
     foreach (@msgids) {      foreach (@msgids) {
  my $msgid=&Apache::lonnet::escape($_);   my $msgid=&escape($_);
         my ($sendtime,$shortsubj,$fromname,$fromdom,$status,$fromcid)=          my ($sendtime,$shortsubj,$fromname,$fromdom,$status,$fromcid)=
     &Apache::lonmsg::unpackmsgid($msgid,undef,undef,\%status_cache);      &Apache::lonmsg::unpackmsgid($msgid,undef,undef,\%status_cache);
         if (defined($sendtime) && $sendtime!~/error/) {          if (defined($sendtime) && $sendtime!~/error/) {
Line 625  sub disfolder { Line 571  sub disfolder {
     function uncheckall() {      function uncheckall() {
  for (i=0; i<document.forms.disall.elements.length; i++) {   for (i=0; i<document.forms.disall.elements.length; i++) {
             if               if 
           (document.forms.disall.elements[i].name.indexOf('delmark_')==0) {            (document.forms.disall.elements[i].name.indexof('delmark_')==0) {
       document.forms.disall.elements[i].checked=false;        document.forms.disall.elements[i].checked=false;
             }              }
         }          }
Line 676  ENDDISHEADER Line 622  ENDDISHEADER
     }      }
     $r->print('</th><th>');      $r->print('</th><th>');
     if ($env{'form.sortedby'} eq "revcourse") {      if ($env{'form.sortedby'} eq "revcourse") {
         $r->print('<a href = "?sortedby=course'.$fsqs.'">'.&mt('Course').'</a>');          $r->print('<a href = "?sortedby=course'.$fsqs.'">'.&mt('Course/Group').'</a>');
     } else {      } else {
         $r->print('<a href = "?sortedby=revcourse'.$fsqs.'">'.&mt('Course').'</a>');          $r->print('<a href = "?sortedby=revcourse'.$fsqs.'">'.&mt('Course/Group').'</a>');
     }      }
     $r->print('</th><th>');      $r->print('</th><th>');
     if ($env{'form.sortedby'} eq "revstatus") {      if ($env{'form.sortedby'} eq "revstatus") {
Line 709  ENDDISHEADER Line 655  ENDDISHEADER
     $dis_name   = join('<br />',@{$recv_name});      $dis_name   = join('<br />',@{$recv_name});
     $dis_domain = join('<br />',@{$recv_domain});      $dis_domain = join('<br />',@{$recv_domain});
  } else {   } else {
     my $msg_id  = &Apache::lonnet::unescape($origID);      my $msg_id  = &unescape($origID);
     my %message = &Apache::lonnet::get('nohist_email'.$suffix,      my %message = &Apache::lonnet::get('nohist_email'.$suffix,
        [$msg_id]);         [$msg_id]);
     my %content = &Apache::lonmsg::unpackagemsg($message{$msg_id});      my %content = &Apache::lonmsg::unpackagemsg($message{$msg_id});
Line 728  ENDDISHEADER Line 674  ENDDISHEADER
  } elsif ($status eq 'deleted') {   } elsif ($status eq 'deleted') {
 # purge  # purge
     my ($result,$msg) =       my ($result,$msg) = 
  &movemsg(&Apache::lonnet::unescape($origID),$folder,'trash');   &movemsg(&unescape($origID),$folder,'trash');
           
  }   }
     }         }   
Line 772  sub compout { Line 718  sub compout {
      'Broadcast Message');       'Broadcast Message');
     } elsif ($forwarding) {      } elsif ($forwarding) {
  &Apache::lonhtmlcommon::add_breadcrumb   &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"/adm/email?display=".&Apache::lonnet::escape($forwarding),          ({href=>"/adm/email?display=".&escape($forwarding),
           text=>"Display Message"});            text=>"Display Message"});
  &printheader($r,'/adm/email?forward='.&Apache::lonnet::escape($forwarding),   &printheader($r,'/adm/email?forward='.&escape($forwarding),
      'Forwarding a Message');       'Forwarding a Message');
     } elsif ($replying) {      } elsif ($replying) {
  &Apache::lonhtmlcommon::add_breadcrumb   &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"/adm/email?display=".&Apache::lonnet::escape($replying),          ({href=>"/adm/email?display=".&escape($replying),
           text=>"Display Message"});            text=>"Display Message"});
  &printheader($r,'/adm/email?replyto='.&Apache::lonnet::escape($replying),   &printheader($r,'/adm/email?replyto='.&escape($replying),
      'Replying to a Message');       'Replying to a Message');
     } elsif ($replycrit) {      } elsif ($replycrit) {
  $r->print('<h3>'.&mt('Replying to a Critical Message').'</h3>');   $r->print('<h3>'.&mt('Replying to a Critical Message').'</h3>');
Line 830  sub compout { Line 776  sub compout {
  $dismsg=&mt('Forwarded message from').' '.   $dismsg=&mt('Forwarded message from').' '.
     $content{'sendername'}.' '.&mt('at').' '.$content{'senderdomain'};      $content{'sendername'}.' '.&mt('at').' '.$content{'senderdomain'};
  if ($content{'baseurl'}) {   if ($content{'baseurl'}) {
     $disbase='<input type="hidden" name="baseurl" value="'.&Apache::lonnet::escape($content{'baseurl'}).'" />';      $disbase='<input type="hidden" name="baseurl" value="'.&escape($content{'baseurl'}).'" />';
  }   }
     }      }
     if ($replying) {      if ($replying) {
Line 846  sub compout { Line 792  sub compout {
  $dismsg=~s/\f/\n/g;   $dismsg=~s/\f/\n/g;
  $dismsg=~s/\n+/\n\> /g;   $dismsg=~s/\n+/\n\> /g;
  if ($content{'baseurl'}) {   if ($content{'baseurl'}) {
     $disbase='<input type="hidden" name="baseurl" value="'.&Apache::lonnet::escape($content{'baseurl'}).'" />';      $disbase='<input type="hidden" name="baseurl" value="'.&escape($content{'baseurl'}).'" />';
     if ($env{'user.adv'}) {      if ($env{'user.adv'}) {
  $disbase.='<label><input type="checkbox" name="storebasecomment" />'.&mt('Store message for re-use').   $disbase.='<label><input type="checkbox" name="storebasecomment" />'.&mt('Store message for re-use').
     '</label> <a href="/adm/email?showcommentbaseurl='.      '</label> <a href="/adm/email?showcommentbaseurl='.
     &Apache::lonnet::escape($content{'baseurl'}).'" target="comments">'.      &escape($content{'baseurl'}).'" target="comments">'.
     &mt('Show re-usable messages').'</a><br />';      &mt('Show re-usable messages').'</a><br />';
     }      }
  }   }
     }      }
     my $citation=&displayresource(%content);      my $citation=&displayresource(%content);
     if ($env{'form.recdom'}) { $defdom=$env{'form.recdom'}; }      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"'.                  '<form action="/adm/email"  name="compemail" method="post"'.
                 ' enctype="multipart/form-data">'."\n".                  ' enctype="multipart/form-data">'."\n".
                 '<input type="hidden" name="sendmail" value="on" />'."\n".                  '<input type="hidden" name="sendmail" value="on" />'."\n".
Line 932  ENDUPLOAD Line 880  ENDUPLOAD
     }      }
     if ($broadcast eq 'group') {      if ($broadcast eq 'group') {
        &discourse($r);         &discourse($r);
          my $studentsel = &discourse();
          $r->print($studentsel);
     }      }
     $r->print('</form>'.      $r->print('</form>'.
       &Apache::lonfeedback::generate_preview_button('compemail','message').        &Apache::lonfeedback::generate_preview_button('compemail','message').
Line 992  sub disfacetoface { Line 942  sub disfacetoface {
             $result .='<h3>'.&mt('Broadcast Message').'</h3>';              $result .='<h3>'.&mt('Broadcast Message').'</h3>';
             if ($content{'subject'}=~/^Broadcast\./) {              if ($content{'subject'}=~/^Broadcast\./) {
                 if (defined($content{'coursemsgid'})) {                  if (defined($content{'coursemsgid'})) {
                     my $crsmsgid = &Apache::lonnet::escape($content{'coursemsgid'});                      my $crsmsgid = &escape($content{'coursemsgid'});
                     my $broadcast_message = &general_message($crsmsgid);                      my $broadcast_message = &general_message($crsmsgid);
                     $content{'message'} = '<b>'.&mt('Subject').': '.$content{'message'}.'</b><br />'.$broadcast_message;                      $content{'message'} = '<b>'.&mt('Subject').': '.$content{'message'}.'</b><br />'.$broadcast_message;
                 } else {                  } else {
Line 1005  sub disfacetoface { Line 955  sub disfacetoface {
         } else {          } else {
             $result.='<h3>'.&mt('Critical Message').'</h3>';              $result.='<h3>'.&mt('Critical Message').'</h3>';
             if (defined($content{'coursemsgid'})) {              if (defined($content{'coursemsgid'})) {
                 my $crsmsgid=&Apache::lonnet::escape($content{'coursemsgid'});                  my $crsmsgid=&escape($content{'coursemsgid'});
                 my $critical_message = &general_message($crsmsgid);                  my $critical_message = &general_message($crsmsgid);
                 $content{'message'} = '<b>'.&mt('Subject').': '.$content{'message'}.'</b><br />'.$critical_message;                  $content{'message'} = '<b>'.&mt('Subject').': '.$content{'message'}.'</b><br />'.$critical_message;
             } else {              } else {
Line 1026  $content{'sendername'}.':'. Line 976  $content{'sendername'}.':'.
      }       }
     # Check to see if there were any messages.      # Check to see if there were any messages.
     if ($result eq '') {      if ($result eq '') {
           my $lctype = lc(&Apache::loncommon::course_type());
  if ($target ne 'tex') {    if ($target ne 'tex') { 
     $r->print("<p><b>".&mt("No notes, face-to-face discussion records, critical messages, or broadcast messages in this course.")."</b></p>");      $r->print("<p><b>".&mt('No notes, face-to-face discussion records, critical messages, or broadcast messages in this [_1].',$lctype)."</b></p>");
  } else {   } else {
     $r->print('\textbf{'.&mt("No notes, face-to-face discussion records, critical messages or broadcast messages in this course.").'}\\\\');      $r->print('\textbf{'.&mt('No notes, face-to-face discussion records, critical messages or broadcast messages in this [_1].',$lctype).'}\\\\');
  }   }
     } else {      } else {
        $r->print($result);         $r->print($result);
Line 1058  sub facetoface { Line 1009  sub facetoface {
  $r->print('Not allowed');   $r->print('Not allowed');
  return;   return;
     }      }
       my $crstype = &Apache::loncommon::course_type();
       my $leaders = ($crstype eq 'Group') ? 'coordinators and leaders'
                                           : 'faculty and staff';
     &printheader($r,      &printheader($r,
  '/adm/email?recordftf=query',   '/adm/email?recordftf=query',
  "User Notes, Face-to-Face, Critical Messages, Broadcast Messages");   "User Notes, Face-to-Face, Critical Messages, Broadcast Messages");
Line 1075  sub facetoface { Line 1029  sub facetoface {
  ('stdselect','recuname','recdomain');   ('stdselect','recuname','recdomain');
     my %lt=&Apache::lonlocal::texthash('user' => 'Username',      my %lt=&Apache::lonlocal::texthash('user' => 'Username',
        'dom' => 'Domain',         'dom' => 'Domain',
        'head' => 'User Notes, Records of Face-To-Face Discussions, Critical Messages, and Broadcast Messages in Course',         'head' => "User Notes, Records of Face-To-Face Discussions, Critical Messages, and Broadcast Messages in $crstype",
        'subm' => 'Retrieve discussion and message records',         'subm' => 'Retrieve discussion and message records',
        'newr' => 'New Record (record is visible to course faculty and staff)',         'newr' => 'New Record (record is visible to '.lc($crstype).' '.$leaders.')',
        'post' => 'Post this Record');         'post' => 'Post this Record');
     $r->print(<<"ENDTREC");      $r->print(<<"ENDTREC");
 <h3>$lt{'head'}</h3>  <h3>$lt{'head'}</h3>
Line 1098  ENDTREC Line 1052  ENDTREC
         ($env{'form.recdomain'}) && ($env{'form.recuname'})) {          ($env{'form.recdomain'}) && ($env{'form.recuname'})) {
         chomp($env{'form.newrecord'});          chomp($env{'form.newrecord'});
         if ($env{'form.newrecord'}) {          if ($env{'form.newrecord'}) {
            my $recordtxt = $env{'form.newrecord'};      &Apache::lonmsg::store_instructor_comment($env{'form.newrecord'},
            &Apache::lonmsg::user_normal_msg_raw(        $env{'form.recuname'},
             $env{'course.'.$env{'request.course.id'}.'.num'},        $env{'form.recdomain'});
             $env{'course.'.$env{'request.course.id'}.'.domain'},  
             &mt('Record').  
      ' ['.$env{'form.recuname'}.':'.$env{'form.recdomain'}.']',  
     $recordtxt);  
         }          }
         $r->print('<h3>'.&Apache::loncommon::plainname($env{'form.recuname'},          $r->print('<h3>'.&Apache::loncommon::plainname($env{'form.recuname'},
      $env{'form.recdomain'}).'</h3>');       $env{'form.recdomain'}).'</h3>');
Line 1136  sub examblock { Line 1086  sub examblock {
  $r->print('Not allowed');   $r->print('Not allowed');
  return;   return;
     }      }
       my $usertype = (&Apache::loncommon::course_type() eq 'Group') ? 'members'
                                                             : 'students';
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
             'comb' => 'Communication Blocking',              'comb' => 'Communication Blocking',
             'cbds' => 'Communication blocking during scheduled exams',              'cbds' => 'Communication blocking during scheduled exams',
             'desc' => 'You can use communication blocking to prevent students enrolled in this course from displaying LON-CAPA messages sent by other students during an online exam. As blocking of communication could potentially interrupt legitimate communication between students who are also both enrolled in a different LON-CAPA course, please be careful that you select the correct start and end times for your scheduled exam when setting or modifying these parameters.',              'desc' => "You can use communication blocking to prevent $usertype enrolled in this course from displaying LON-CAPA messages sent by other $usertype during an online exam. As blocking of communication could potentially interrupt legitimate communication between $usertype who are also both enrolled in a different LON-CAPA course, please be careful that you select the correct start and end times for your scheduled exam when setting or modifying these parameters.",
              'mecb' => 'Modify existing communication blocking periods',               'mecb' => 'Modify existing communication blocking periods',
              'ncbc' => 'No communication blocks currently stored'               'ncbc' => 'No communication blocks currently stored'
     );      );
Line 1310  END Line 1262  END
   
  my ($setuname,$setudom,$title) =    my ($setuname,$setudom,$title) = 
     &parse_block_record($$records{$record});      &parse_block_record($$records{$record});
  $title = &HTML::Entities::encode($title,'"<>');   $title = &HTML::Entities::encode($title,'"<>&');
         my $settername = &Apache::loncommon::plainname($setuname,$setudom);          my $settername = &Apache::loncommon::plainname($setuname,$setudom);
         $r->print(&Apache::loncommon::start_data_table_row());          $r->print(&Apache::loncommon::start_data_table_row());
         $r->print(<<"END");          $r->print(<<"END");
Line 1427  sub build_block_table { Line 1379  sub build_block_table {
     my ($r,$startblock,$endblock,$setters) = @_;      my ($r,$startblock,$endblock,$setters) = @_;
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         'cacb' => 'Currently active communication blocks',          'cacb' => 'Currently active communication blocks',
         'cour' => 'Course',          'cour' => 'Course/Group',
         'dura' => 'Duration',          'dura' => 'Duration',
         'blse' => 'Block set by'          'blse' => 'Block set by'
     );      );
Line 1471  sub displaymessage { Line 1423  sub displaymessage {
     my $startblock = 0;      my $startblock = 0;
     my $endblock = 0;      my $endblock = 0;
     my $numblocked = 0;      my $numblocked = 0;
       my $crstype = &Apache::loncommon::course_type();
   
 # info to generate "next" and "previous" buttons and check if message is blocked  # info to generate "next" and "previous" buttons and check if message is blocked
     &blockcheck(\%setters,\$startblock,\$endblock);      &blockcheck(\%setters,\$startblock,\$endblock);
     my @messages=&sortedmessages(\%blocked,$startblock,$endblock,\$numblocked,$folder);      my @messages=&sortedmessages(\%blocked,$startblock,$endblock,\$numblocked,$folder);
Line 1486  sub displaymessage { Line 1440  sub displaymessage {
   
     my $counter=0;      my $counter=0;
     $r->print('<pre>');      $r->print('<pre>');
     my $escmsgid=&Apache::lonnet::escape($msgid);      my $escmsgid=&escape($msgid);
     foreach (@messages) {      foreach (@messages) {
  if ($_->[5] eq $escmsgid){   if ($_->[5] eq $escmsgid){
     last;      last;
Line 1496  sub displaymessage { Line 1450  sub displaymessage {
     $r->print('</pre>');      $r->print('</pre>');
     my $number_of_messages = scalar(@messages); #subtract 1 for last index      my $number_of_messages = scalar(@messages); #subtract 1 for last index
 # start output  # start output
     &printheader($r,'/adm/email?display='.&Apache::lonnet::escape($msgid),'Display a Message','',$content{'baseurl'});      &printheader($r,'/adm/email?display='.&escape($msgid),'Display a Message','',$content{'baseurl'});
     my %courseinfo=&Apache::lonnet::coursedescription($content{'courseid'});      my %courseinfo=&Apache::lonnet::coursedescription($content{'courseid'});
 # Functions  # Functions
     $r->print('<table border="2" width="100%"><tr bgcolor="#FFFFAA"><td>'.&mt('Functions').':</td>'.      $r->print('<table border="2" width="100%"><tr bgcolor="#FFFFAA"><td>'.&mt('Functions').':</td>'.
       '<td><a href="/adm/email?replyto='.&Apache::lonnet::escape($msgid).$sqs.        '<td><a href="/adm/email?replyto='.&escape($msgid).$sqs.
       '"><b>'.&mt('Reply').'</b></a></td>'.        '"><b>'.&mt('Reply').'</b></a></td>'.
       '<td><a href="/adm/email?forward='.&Apache::lonnet::escape($msgid).$sqs.        '<td><a href="/adm/email?forward='.&escape($msgid).$sqs.
       '"><b>'.&mt('Forward').'</b></a></td>'.        '"><b>'.&mt('Forward').'</b></a></td>'.
       '<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid).$sqs.        '<td><a href="/adm/email?markunread='.&escape($msgid).$sqs.
       '"><b>'.&mt('Mark Unread').'</b></a></td>'.        '"><b>'.&mt('Mark Unread').'</b></a></td>'.
       '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.        '<td><a href="/adm/email?markdel='.&escape($msgid).$sqs.
       '"><b>'.&mt('Delete').'</b></a></td>'.        '"><b>'.&mt('Delete').'</b></a></td>'.
       '<td><a href="/adm/email?'.$sqs.        '<td><a href="/adm/email?'.$sqs.
       ($env{'form.dismode'} eq 'new'?'&folder=new':'').        ($env{'form.dismode'} eq 'new'?'&folder=new':'').
Line 1552  sub displaymessage { Line 1506  sub displaymessage {
       $content{'sendername'}.' at '.        $content{'sendername'}.' at '.
       $content{'senderdomain'}.') ':'<br /><b>'.&mt('To').':</b> '.        $content{'senderdomain'}.') ':'<br /><b>'.&mt('To').':</b> '.
               $tolist).                $tolist).
       ($content{'courseid'}?'<br /><b>'.&mt('Course').':</b> '.$courseinfo{'description'}.        ($content{'courseid'}?'<br /><b>'.&mt($crstype).':</b> '.$courseinfo{'description'}.
        ($content{'coursesec'}?' ('.&mt('Group/Section').': '.$content{'coursesec'}.')':''):'').         ($content{'coursesec'}?' ('.&mt('Section').': '.$content{'coursesec'}.')':''):'').
       '<br /><b>'.&mt('Time').':</b> '.$content{'time'}.        '<br /><b>'.&mt('Time').':</b> '.$content{'time'}.
       ($content{'baseurl'}?'<br /><b>'.&mt('Refers to').':</b> <a href="'.$content{'baseurl'}.'">'.        ($content{'baseurl'}?'<br /><b>'.&mt('Refers to').':</b> <a href="'.$content{'baseurl'}.'">'.
        $content{'baseurl'}.' ('.&Apache::lonnet::gettitle($content{'baseurl'}).')</a>':'').         $content{'baseurl'}.' ('.&Apache::lonnet::gettitle($content{'baseurl'}).')</a>':'').
Line 1610  sub header { Line 1564  sub header {
     $r->print(&Apache::loncommon::start_page('Communication and Messages',      $r->print(&Apache::loncommon::start_page('Communication and Messages',
      $extra));       $extra));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs      $r->print(&Apache::lonhtmlcommon::breadcrumbs
       (undef,($title?$title:'Communication and Messages')));        (($title?$title:'Communication and Messages')));
   
 }  }
   
Line 1635  sub storecomment { Line 1589  sub storecomment {
     $cleanmsgtxt.=$_."\n";      $cleanmsgtxt.=$_."\n";
  }   }
     }      }
     my $key=&Apache::lonnet::escape($env{'form.baseurl'}).'___'.time;      my $key=&escape($env{'form.baseurl'}).'___'.time;
     &Apache::lonnet::put('nohist_stored_comments',{ $key => $cleanmsgtxt });      &Apache::lonnet::put('nohist_stored_comments',{ $key => $cleanmsgtxt });
 }  }
   
 sub storedcommentlisting {  sub storedcommentlisting {
     my ($r)=@_;      my ($r)=@_;
     my %msgs=&Apache::lonnet::dump('nohist_stored_comments',undef,undef,      my %msgs=&Apache::lonnet::dump('nohist_stored_comments',undef,undef,
        '^'.&Apache::lonnet::escape(&Apache::lonnet::escape($env{'form.showcommentbaseurl'})));         '^'.&escape(&escape($env{'form.showcommentbaseurl'})));
     $r->print(&Apache::loncommon::start_page('Stored Comment Listing',undef,      $r->print(&Apache::loncommon::start_page('Stored Comment Listing',undef,
      {'onlybody' => 1}));       {'onlybody' => 1}));
     if ((keys %msgs)[0]=~/^error\:/) {      if ((keys %msgs)[0]=~/^error\:/) {
Line 1687  sub sendoffmail { Line 1641  sub sendoffmail {
     &statuschange($msgid,'replied',$folder);      &statuschange($msgid,'replied',$folder);
  }   }
   
    my @to =
       &Apache::loncommon::get_env_multiple('form.selectedusers.forminput');
    my $mode = $env{'form.sendmode'};
   
  my %toaddr;   my %toaddr;
  if ($env{'form.sendmode'} eq 'group') {   if (@to) {
     foreach my $address (keys(%env)) {      foreach my $dest (@to) {
  if ($address=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {   my ($user,$domain) = split(/:/, $dest);
     $toaddr{$1}='';   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') {   } elsif ($env{'form.sendmode'} eq 'upload') {
     foreach my $line (split(/[\n\r\f]+/,$env{'form.upfile'})) {      foreach my $line (split(/[\n\r\f]+/,$env{'form.upfile'})) {
  my ($rec,$txt)=split(/\s*\:\s*/,$line);   my ($rec,$txt)=split(/\s*\:\s*/,$line);
Line 1703  sub sendoffmail { Line 1671  sub sendoffmail {
  }   }
     }      }
  } else {   } 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'}) {   if ($env{'form.additionalrec'}) {
     foreach (split(/\,/,$env{'form.additionalrec'})) {      foreach (split(/\,/,$env{'form.additionalrec'})) {
  my ($auname,$audom)=split(/\@/,$_);   my ($auname,$audom)=split(/\@/,$_);
  $toaddr{$auname.':'.$audom}='';   if (($auname ne "") && ($audom ne "")) {
       $toaddr{$auname.':'.$audom}='';
    }
     }      }
  }   }
   
Line 1777  sub sendoffmail { Line 1749  sub sendoffmail {
             my ($specialmsgid,$specialresult);              my ($specialmsgid,$specialresult);
             my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};              my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
             my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};              my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
             my $course_str = &Apache::lonnet::escape('['.$cnum.':'.$cdom.']');              my $course_str = &escape('['.$cnum.':'.$cdom.']');
   
             if ($numspecial) {              if ($numspecial) {
                 $specialresult = &Apache::lonmsg::user_normal_msg_raw($cnum,$cdom,$subj_prefix.                  $specialresult = &Apache::lonmsg::user_normal_msg_raw($cnum,$cdom,$subj_prefix.
                     ' '.$course_str,$savemsg,undef,undef,undef,                      ' '.$course_str,$savemsg,undef,undef,undef,
                     undef,undef,\$specialmsgid);                      undef,undef,\$specialmsgid);
                 $specialmsgid = &Apache::lonnet::unescape($specialmsgid);                  $specialmsgid = &unescape($specialmsgid);
             }              }
             if ($specialresult eq 'ok') {              if ($specialresult eq 'ok') {
                 my $record_sent;                  my $record_sent;
                 my @recusers;                  my @recusers;
                 my @recudoms;                  my @recudoms;
                 my ($stamp,$crssubj,$msgname,$msgdom,$msgcount,$context,$pid) =                  my ($stamp,$crssubj,$msgname,$msgdom,$msgcount,$context,$pid) =
     split(/\:/,&Apache::lonnet::unescape($specialmsgid));      split(/\:/,&unescape($specialmsgid));
   
                 foreach my $recipient (sort(keys(%toaddr))) {                  foreach my $recipient (sort(keys(%toaddr))) {
                     if ($specialmsg_status{$recipient} eq 'ok') {                      if ($specialmsg_status{$recipient} eq 'ok') {
Line 1837  sub sendoffmail { Line 1809  sub sendoffmail {
  }   }
     } else {      } else {
  $r->print('<p><span class="LC_error">'.&mt('Could not deliver message').'</span> '.   $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>');
     }      }
 }  }
   
Line 1858  sub handler { Line 1830  sub handler {
         ['display','replyto','forward','markread','markdel','markunread',          ['display','replyto','forward','markread','markdel','markunread',
          'sendreply','compose','sendmail','critical','recname','recdom',           'sendreply','compose','sendmail','critical','recname','recdom',
          'recordftf','sortedby','block','folder','startdis','interdis',           'recordftf','sortedby','block','folder','startdis','interdis',
  'showcommentbaseurl','dismode']);   'showcommentbaseurl','dismode','group','subject','text']);
     $sqs='&sortedby='.$env{'form.sortedby'};      $sqs='&sortedby='.$env{'form.sortedby'};
   
 # ------------------------------------------------------ They checked for email  # ------------------------------------------------------ They checked for email
Line 1880  sub handler { Line 1852  sub handler {
     unless ($folder) {       unless ($folder) { 
  $folder='';    $folder=''; 
     } else {      } else {
  $sqs.='&folder='.&Apache::lonnet::escape($folder);   $sqs.='&folder='.&escape($folder);
     }      }
 # ------------------------------------------------------------ Get Display Mode  # ------------------------------------------------------------ Get Display Mode
   
Line 1888  sub handler { Line 1860  sub handler {
     unless ($dismode) {       unless ($dismode) { 
  $dismode='';    $dismode=''; 
     } else {      } else {
  $sqs.='&dismode='.&Apache::lonnet::escape($dismode);   $sqs.='&dismode='.&escape($dismode);
     }      }
   
 # --------------------------------------------------------------------- Display  # --------------------------------------------------------------------- Display
Line 1958  sub handler { Line 1930  sub handler {
  foreach my $key (keys(%env)) {   foreach my $key (keys(%env)) {
     if ($key=~/^form\.delmark_(.*)$/) {      if ($key=~/^form\.delmark_(.*)$/) {
  my ($result,$msg) =   my ($result,$msg) =
     &movemsg(&Apache::lonnet::unescape($1),$folder,      &movemsg(&unescape($1),$folder,
      $env{'form.movetofolder'});       $env{'form.movetofolder'});
  if ($result) {   if ($result) {
     $total++;      $total++;
Line 1985  sub handler { Line 1957  sub handler {
  foreach my $key (keys(%env)) {   foreach my $key (keys(%env)) {
     if ($key=~/^form\.delmark_(.*)$/) {      if ($key=~/^form\.delmark_(.*)$/) {
  my ($result,$msg) =    my ($result,$msg) = 
     &statuschange(&Apache::lonnet::unescape($1),'deleted',      &statuschange(&unescape($1),'deleted',
   $folder);    $folder);
  if ($result) {   if ($result) {
     $total++;      $total++;

Removed from v.1.19  
changed lines
  Added in v.1.35


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>