Diff for /loncom/interface/lonmsgdisplay.pm between versions 1.10 and 1.24

version 1.10, 2006/04/23 05:49:57 version 1.24, 2006/05/11 20:05:03
Line 260  sub movemsg { Line 260  sub movemsg {
   
 sub discourse {  sub discourse {
     my $r=shift;      my $r=shift;
     my $classlist = &Apache::loncoursedata::get_classlist();      my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist();
     my $now=time;      my ($classgroups,$studentgroups) = 
    &Apache::loncoursedata::get_group_memberships($classlist,$keylist);
     my %lt=&Apache::lonlocal::texthash('cfa' => 'Check All',      my %lt=&Apache::lonlocal::texthash('cfa' => 'Check All',
             'cfs' => 'Check Section/Group',              'cfs' => 'Check Section/Group',
             'cfn' => 'Uncheck All');              'cfn' => 'Uncheck All');
       if (defined($env{'form.group'})) {
           $r->print('<input type="hidden" name="group" value="'.
                     $env{'form.group'}.'" />'."\n");
       }
     $r->print(<<ENDDISHEADER);      $r->print(<<ENDDISHEADER);
 <input type="hidden" name="sendmode" value="group" />  <input type="hidden" name="sendmode" value="group" />
 <script>  <script pe="text/javascript">
     function checkall() {      function checkall() {
  for (i=0; i<document.forms.compemail.elements.length; i++) {   for (i=0; i<document.forms.compemail.elements.length; i++) {
             if               if 
Line 284  sub discourse { Line 289  sub discourse {
            ('send_to_&&&'+document.forms.compemail.chksec.value+'&&&')==0) {             ('send_to_&&&'+document.forms.compemail.chksec.value+'&&&')==0) {
       document.forms.compemail.elements[i].checked=true;        document.forms.compemail.elements[i].checked=true;
             }              }
               if
             (document.forms.compemail.elements[i].name.indexOf
              ('group_&&&'+document.forms.compemail.chksec.value+'&&&_')==0) {
                 var count = i - document.forms.compemail.elements[i].value;
                 document.forms.compemail.elements[count].checked=true;
               }
         }          }
     }      }
   
Line 298  sub discourse { Line 309  sub discourse {
 </script>  </script>
 <input type="button" onClick="checkall()" value="$lt{'cfa'}" />&nbsp;  <input type="button" onClick="checkall()" value="$lt{'cfa'}" />&nbsp;
 <input type="button" onClick="checksec()" value="$lt{'cfs'}" />  <input type="button" onClick="checksec()" value="$lt{'cfs'}" />
 <input type="text" size="5" name="chksec" />&nbsp;  <input type="text" size="15" name="chksec" value="$env{'form.group'}" />&nbsp;
 <input type="button" onClick="uncheckall()" value="$lt{'cfn'}" />  <input type="button" onClick="uncheckall()" value="$lt{'cfn'}" />
 <p>  <p>
 ENDDISHEADER  ENDDISHEADER
     my %coursepersonnel=&Apache::lonnet::get_course_adv_roles();      my %coursepersonnel=&Apache::lonnet::get_course_adv_roles();
     $r->print('<table>');      $r->print(&Apache::loncommon::start_data_table());
     foreach my $role (sort keys %coursepersonnel) {      if (keys(%coursepersonnel) > 0) {
         foreach (split(/\,/,$coursepersonnel{$role})) {          $r->print('<h3>Non-students</h3>');
             my ($puname,$pudom)=split(/\:/,$_);          $r->print(&Apache::loncommon::start_data_table());
             $r->print('<tr><td><label>'.          $r->print('<tr><th>Name</th><th>Username:Domain</th><th>Role</th></tr>');
                       '<input type="checkbox" name="send_to_&&&&&&_'.          foreach my $role (sort(keys(%coursepersonnel))) {
                       $puname.':'.$pudom.'" /> '.              foreach my $user (split(/\,/,$coursepersonnel{$role})) {
                       &Apache::loncommon::plainname($puname,$pudom).                  my ($puname,$pudom)=split(/\:/,$user);
                       '</label></td>'.                  $r->print(&Apache::loncommon::start_data_table_row());
                       '<td>('.$_.'),</td><td><i>'.$role.'</i></td></tr>');                  $r->print('<td><label>'.
         }                            '<input type="checkbox" name="send_to_&&&&&&_'.
     }                            $puname.':'.$pudom.'" /> '.
     $r->print('</table><table>');                            &Apache::loncommon::plainname($puname,$pudom).
     my $sort = sub {                            '</label></td>'.
  my $aname=lc($classlist->{$a}[&Apache::loncoursedata::CL_FULLNAME()]);                            '<td>('.$user.'),</td><td><i>'.$role.'</i></td>');
  if (!$aname) { $aname=$a; }                  $r->print(&Apache::loncommon::end_data_table_row());
  my $bname=lc($classlist->{$b}[&Apache::loncoursedata::CL_FULLNAME()]);              }
  if (!$bname) { $bname=$b; }          }
  return $aname cmp $bname;          $r->print(&Apache::loncommon::end_data_table());
     };      }
     foreach my $student (sort $sort (keys(%{$classlist}))) {      if (keys(%{$classlist}) > 0) {
  my $info=$classlist->{$student};          $r->print('<h3>Students</h3>');
         my ($sname,$sdom,$status,$fullname,$section) =          $r->print(&Apache::loncommon::start_data_table());
             (@{$info}[&Apache::loncoursedata::CL_SNAME(),          $r->print('<tr><th>Name</th><th>Username:Domain</th><th>Section</th><th>Groups</th></tr>');
                       &Apache::loncoursedata::CL_SDOM(),          my $sort = sub {
                       &Apache::loncoursedata::CL_STATUS(),      my $aname=lc($classlist->{$a}[&Apache::loncoursedata::CL_FULLNAME()]);
                       &Apache::loncoursedata::CL_FULLNAME(),      if (!$aname) { $aname=$a; }
                       &Apache::loncoursedata::CL_SECTION()]);      my $bname=lc($classlist->{$b}[&Apache::loncoursedata::CL_FULLNAME()]);
         next if ($status ne 'Active');      if (!$bname) { $bname=$b; }
  next if ($env{'request.course.sec'} &&      return $aname cmp $bname;
  $section ne $env{'request.course.sec'});          };
         my $key = 'send_to_&&&'.$section.'&&&_'.$student;          foreach my $student (sort $sort (keys(%{$classlist}))) {
         if (! defined($fullname) || $fullname eq '') { $fullname = $sname; }      my $info=$classlist->{$student};
         $r->print('<tr><td><label>'.              my ($sname,$sdom,$status,$fullname,$section) =
                   qq{<input type="checkbox" name="$key" />}.('&nbsp;'x2).                  (@{$info}[&Apache::loncoursedata::CL_SNAME(),
                   $fullname.'</label></td><td>'.$sname.'@'.$sdom.'</td><td>'.$section.                            &Apache::loncoursedata::CL_SDOM(),
                   '</td></tr>');                            &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 @studentsgroups = 
    &Apache::loncoursedata::get_students_groups($student,$status,
       $classgroups);
               my $grouplist = join(', ',@studentsgroups);
               my $key = 'send_to_&&&'.$section.'&&&_'.$student;
               if (! defined($fullname) || $fullname eq '') {$fullname = $sname;}
               my $checked = '';
               my $groupcount = 0;
               my $groupitems;
               $r->print(&Apache::loncommon::start_data_table_row());
               $r->print('<td><label>');
               foreach my $group (@studentsgroups) {
                   $groupcount ++;
                   $groupitems .= ('<input type="hidden" name="group_&&&'.
                                   $group.'&&&_'.$student.'" value="'.
                                   $groupcount.'" />');
                   if (defined($env{'form.group'})) {
                       if ($env{'form.group'} eq $group) {
                           $checked = 'checked="checked"';
                       }
                   }
               }
               $r->print(qq{<input type="checkbox" name="$key" $checked />}.
                         ('&nbsp;'x2).$fullname.'</label>'.$groupitems.
                         '</td><td>'.$sname.':'.$sdom.'</td><td>'.$section.
                         '</td><td>'.$grouplist.'</td>');
               $r->print(&Apache::loncommon::end_data_table_row());
           }
           $r->print(&Apache::loncommon::end_data_table());
     }      }
     $r->print('</table>');  
 }  }
   
 # ==================================================== Display Critical Message  # ==================================================== Display Critical Message
Line 359  sub discrit { Line 403  sub discrit {
         $result.='<hr />'.&mt('From').': <b>'.          $result.='<hr />'.&mt('From').': <b>'.
 &Apache::loncommon::aboutmewrapper(  &Apache::loncommon::aboutmewrapper(
  &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('.   &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('.
 $content{'sendername'}.'@'.  $content{'sendername'}.':'.
             $content{'senderdomain'}.') '.$content{'time'}.              $content{'senderdomain'}.') '.$content{'time'}.
             '<br />'.&mt('Subject').': '.$content{'subject'}.              '<br />'.&mt('Subject').': '.$content{'subject'}.
             '<br /><pre>'.              '<br /><pre>'.
Line 392  sub sortedmessages { Line 436  sub sortedmessages {
     my %descriptions;      my %descriptions;
     my %status_cache =       my %status_cache = 
  &Apache::lonnet::get('email_status'.&Apache::lonmsg::foldersuffix($folder),\@messages);   &Apache::lonnet::get('email_status'.&Apache::lonmsg::foldersuffix($folder),\@messages);
     foreach (@messages) {  
  my $msgid=&Apache::lonnet::escape($_);      my $get_received;
       if ($folder eq 'sent' 
    && ($env{'form.sortedby'} =~ m/^(rev)?(user|domain)$/)) {
    $get_received = 1;
       }
   
       foreach my $msgid (@messages) {
    my $esc_msgid=&Apache::lonnet::escape($msgid);
  my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid)=   my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid)=
     &Apache::lonmsg::unpackmsgid($msgid,$folder,undef,      &Apache::lonmsg::unpackmsgid($esc_msgid,$folder,undef,
  \%status_cache);   \%status_cache);
         my $description = &get_course_desc($fromcid,\%descriptions);          my $description = &get_course_desc($fromcid,\%descriptions);
  my @temp1 = ($sendtime,$shortsubj,$fromname,$fromdomain,$status,   my @temp1 = ($sendtime,$shortsubj,$fromname,$fromdomain,$status,
      $msgid,$description);       $esc_msgid,$description);
    if ($get_received) {
       my %message = &Apache::lonnet::get('nohist_email'.$suffix,
          [$msgid]);
       my %content = &Apache::lonmsg::unpackagemsg($message{$msgid});
       push(@temp1,$content{'recuser'},$content{'recdomain'});
    }
         # Check whether message was sent during blocking period.          # Check whether message was sent during blocking period.
         if ($sendtime >= $startblock && ($sendtime <= $endblock && $endblock > 0) ) {          if ($sendtime >= $startblock && ($sendtime <= $endblock && $endblock > 0) ) {
             my $escid = &Apache::lonnet::unescape($msgid);              $$blocked{$msgid} = 'ON';
             $$blocked{$escid} = 'ON';  
             $$numblocked ++;              $$numblocked ++;
         } else {           } else { 
             push @temp ,\@temp1;              push @temp ,\@temp1;
Line 418  sub sortedmessages { Line 474  sub sortedmessages {
     @temp = sort  {$b->[0] <=> $a->[0]} @temp;       @temp = sort  {$b->[0] <=> $a->[0]} @temp; 
     }      }
     if ($env{'form.sortedby'} eq "user"){      if ($env{'form.sortedby'} eq "user"){
  @temp = sort  {lc($a->[2]) cmp lc($b->[2])} @temp;   if ($get_received) {
       @temp = sort  {lc($a->[7][0]) cmp lc($b->[7][0])} @temp;
    } else {
       @temp = sort  {lc($a->[2])    cmp lc($b->[2])}    @temp;
    }
     }      }
     if ($env{'form.sortedby'} eq "revuser"){      if ($env{'form.sortedby'} eq "revuser"){
  @temp = sort  {lc($b->[2]) cmp lc($a->[2])} @temp;   if ($get_received) {
       @temp = sort  {lc($b->[7][0]) cmp lc($a->[7][0])} @temp;
    } else {
       @temp = sort  {lc($b->[2])    cmp lc($a->[2])}    @temp;
    }
     }      }
     if ($env{'form.sortedby'} eq "domain"){      if ($env{'form.sortedby'} eq "domain"){
         @temp = sort  {$a->[3] cmp $b->[3]} @temp;   if ($get_received) {
       @temp = sort  {$a->[8][0] cmp $b->[8][0]} @temp;
    } else {
       @temp = sort  {$a->[3]    cmp $b->[3]}    @temp;
    }
     }      }
     if ($env{'form.sortedby'} eq "revdomain"){      if ($env{'form.sortedby'} eq "revdomain"){
         @temp = sort  {$b->[3] cmp $a->[3]} @temp;   if ($get_received) {
       @temp = sort  {$b->[8][0] cmp $a->[8][0]} @temp;
    } else {
       @temp = sort  {$b->[3]    cmp $a->[3]}    @temp;
    }
     }      }
     if ($env{'form.sortedby'} eq "subject"){      if ($env{'form.sortedby'} eq "subject"){
         @temp = sort  {lc($a->[1]) cmp lc($b->[1])} @temp;          @temp = sort  {lc($a->[1]) cmp lc($b->[1])} @temp;
Line 584  sub disfolder { Line 656  sub disfolder {
     my $numblocked = 0;      my $numblocked = 0;
     &blockcheck(\%setters,\$startblock,\$endblock);      &blockcheck(\%setters,\$startblock,\$endblock);
     $r->print(<<ENDDISHEADER);      $r->print(<<ENDDISHEADER);
 <script>  <script type="text/javascript">
     function checkall() {      function checkall() {
  for (i=0; i<document.forms.disall.elements.length; i++) {   for (i=0; i<document.forms.disall.elements.length; i++) {
             if               if 
Line 662  ENDDISHEADER Line 734  ENDDISHEADER
   
     my $suffix = &Apache::lonmsg::foldersuffix($folder);      my $suffix = &Apache::lonmsg::foldersuffix($folder);
     for (my $n=$firstdis;$n<=$lastdis;$n++) {      for (my $n=$firstdis;$n<=$lastdis;$n++) {
  my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$origID,$description)= @{$temp[$n]};   my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$origID,
       $description,$recv_name,$recv_domain)= 
    @{$temp[$n]};
  if (($status ne 'deleted') && defined($sendtime) && $sendtime!~/error/) {   if (($status ne 'deleted') && defined($sendtime) && $sendtime!~/error/) {
     if ($status eq 'new') {      if ($status eq 'new') {
  $r->print('<tr class="LC_mail_new">');   $r->print('<tr class="LC_mail_new">');
Line 675  ENDDISHEADER Line 749  ENDDISHEADER
     }      }
     my ($dis_name,$dis_domain) = ($fromname,$fromdomain);      my ($dis_name,$dis_domain) = ($fromname,$fromdomain);
     if ($folder eq 'sent') {      if ($folder eq 'sent') {
  my $msg_id = &Apache::lonnet::unescape($origID);   if (defined($recv_name) && !defined($recv_domain)) {
  my %message=&Apache::lonnet::get('nohist_email'.$suffix,      $dis_name   = join('<br />',@{$recv_name});
  [$msg_id]);      $dis_domain = join('<br />',@{$recv_domain});
  my %content=&Apache::lonmsg::unpackagemsg($message{$msg_id});   } else {
  $dis_name   = join('<br />',@{$content{'recuser'}});      my $msg_id  = &Apache::lonnet::unescape($origID);
  $dis_domain = join('<br />',@{$content{'recdomain'}});      my %message = &Apache::lonnet::get('nohist_email'.$suffix,
          [$msg_id]);
       my %content = &Apache::lonmsg::unpackagemsg($message{$msg_id});
       $dis_name   = join('<br />',@{$content{'recuser'}});
       $dis_domain = join('<br />',@{$content{'recdomain'}});
    }
     }      }
     $r->print('<td><input type="checkbox" name="delmark_'.$origID.'" /></td><td><a href="/adm/email?display='.$origID.$sqs.       $r->print('<td><input type="checkbox" name="delmark_'.$origID.'" /></td><td><a href="/adm/email?display='.$origID.$sqs. 
       '">'.&mt('Open').'</a></td><td>'.        '">'.&mt('Open').'</a></td><td>'.
Line 822  sub compout { Line 901  sub compout {
     }      }
     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 832  sub compout { Line 913  sub compout {
     $r->print('<tr><td colspan="2">'.&mt('Replying to').' '.      $r->print('<tr><td colspan="2">'.&mt('Replying to').' '.
       &Apache::loncommon::aboutmewrapper(        &Apache::loncommon::aboutmewrapper(
  &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('.   &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('.
       $content{'sendername'}.'@'.        $content{'sendername'}.':'.
       $content{'senderdomain'}.')'.        $content{'senderdomain'}.')'.
       '<input type="hidden" name="recuname" value="'.$content{'sendername'}.'" />'.        '<input type="hidden" name="recuname" value="'.$content{'sendername'}.'" />'.
       '<input type="hidden" name="recdomain" value="'.$content{'senderdomain'}.'" />'.        '<input type="hidden" name="recdomain" value="'.$content{'senderdomain'}.'" />'.
Line 925  sub retrieve_instructor_comments { Line 1006  sub retrieve_instructor_comments {
         next if ($content{'subject'} !~ /^Record/);          next if ($content{'subject'} !~ /^Record/);
  # &Apache::lonfeedback::newline_to_br(\$content{'message'});   # &Apache::lonfeedback::newline_to_br(\$content{'message'});
  $result.='Recorded by '.   $result.='Recorded by '.
             $content{'sendername'}.'@'.$content{'senderdomain'}."\n";              $content{'sendername'}.':'.$content{'senderdomain'}."\n";
         $result.=          $result.=
             &Apache::lontexconvert::msgtexconverted($content{'message'})."\n";              &Apache::lontexconvert::msgtexconverted($content{'message'})."\n";
      }       }
Line 983  sub disfacetoface { Line 1064  sub disfacetoface {
         $result.=&mt('By').': <b>'.          $result.=&mt('By').': <b>'.
 &Apache::loncommon::aboutmewrapper(  &Apache::loncommon::aboutmewrapper(
  &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('.   &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('.
 $content{'sendername'}.'@'.  $content{'sendername'}.':'.
             $content{'senderdomain'}.') '.$content{'time'}.              $content{'senderdomain'}.') '.$content{'time'}.
             '<br /><pre>'.              '<br /><pre>'.
               &Apache::lontexconvert::msgtexconverted($content{'message'}).                &Apache::lontexconvert::msgtexconverted($content{'message'}).
Line 1197  sub blockstore { Line 1278  sub blockstore {
         unless ( defined($cancels{$_}) ) {          unless ( defined($cancels{$_}) ) {
             my ($newstart,$newend) = &get_dates_from_form($_);              my ($newstart,$newend) = &get_dates_from_form($_);
             my $newkey = $newstart.'____'.$newend;              my $newkey = $newstart.'____'.$newend;
             $blocking{$newkey} = $env{'user.name'}.'@'.$env{'user.domain'}.':'.$env{'form.title_'.$_};              $blocking{$newkey} = $env{'user.name'}.':'.$env{'user.domain'}.':'.$env{'form.title_'.$_};
         }          }
     }      }
     if ($addtotal + $modtotal > 0) {      if ($addtotal + $modtotal > 0) {
Line 1240  sub get_blockdates { Line 1321  sub get_blockdates {
                          $env{'course.'.$env{'request.course.id'}.'.domain'},                           $env{'course.'.$env{'request.course.id'}.'.domain'},
                          $env{'course.'.$env{'request.course.id'}.'.num'}                           $env{'course.'.$env{'request.course.id'}.'.num'}
                          );                           );
     $$blockcount = keys %{$records};      $$blockcount = keys(%{$records});
                                                                                                                
     foreach (keys %{$records}) {      if ((keys(%{$records}))[0] =~ /^error: 2 /) {
         if ($_ eq 'error: 2 tie(GDBM) Failed while attempting dump') {   $records = {};
             $$blockcount = 0;   $$blockcount = 0;
             last;  
         }  
     }      }
 }  }
   
 sub display_blocker_status {  sub display_blocker_status {
     my ($r,$records,$ltext) = @_;      my ($r,$records,$ltext) = @_;
     my $parmcount = 0;      my $parmcount = 0;
     my @bgcols = ("#eeeeee","#dddddd");    
     my $function = &Apache::loncommon::get_users_function();  
     my $color = &Apache::loncommon::designparm($function.'.tabbg',  
                                                     $env{'user.domain'});  
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         'modi' => 'Modify',          'modi' => 'Modify',
         'canc' => 'Cancel',          'canc' => 'Cancel',
     );      );
       $r->print(&Apache::loncommon::start_data_table());
     $r->print(<<"END");      $r->print(<<"END");
 <table border="0" cellpadding="0" cellspacing="0">    <tr>
  <tr>      <th>$$ltext{'dura'}</th>
   <td width="100%" bgcolor="#000000">      <th>$$ltext{'setb'}</th>
    <table width="100%" border="0" cellpadding="1" cellspacing="0">      <th>$$ltext{'even'}</th>
     <tr>      <th>$$ltext{'actn'}?</th>
      <td width="100%" bgcolor="#000000">    </tr>
       <table border="0" cellpadding="3" cellspacing="3" bgcolor="#FFFFFF">  
        <tr bgcolor="$color">  
         <td><b>$$ltext{'dura'}</b></td>  
         <td><b>$$ltext{'setb'}</b></td>  
         <td><b>$$ltext{'even'}</b></td>  
         <td><b>$$ltext{'actn'}?</b></td>  
        </tr>  
 END  END
     foreach (sort keys %{$records}) {      foreach my $record (sort(keys(%{$records}))) {
         my $iter = $parmcount%2;  
         my $onchange = 'onFocus="javascript:window.document.forms['.          my $onchange = 'onFocus="javascript:window.document.forms['.
                        "'blockform'].elements['modify_".$parmcount."'].".                         "'blockform'].elements['modify_".$parmcount."'].".
                        'checked=true;"';                         'checked=true;"';
         my ($start,$end) = split/____/,$_;          my ($start,$end) = split(/____/,$record);
         my $startform = &Apache::lonhtmlcommon::date_setter('blockform','startdate_'.$parmcount,$start,$onchange);          my $startform = &Apache::lonhtmlcommon::date_setter('blockform','startdate_'.$parmcount,$start,$onchange);
         my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange);          my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange);
         my ($setter,$title) = split/:/,$$records{$_};  
         my ($setuname,$setudom) = split/@/,$setter;   my ($setuname,$setudom,$title) = 
       &parse_block_record($$records{$record});
    $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(<<"END");          $r->print(<<"END");
        <tr bgcolor="$bgcols[$iter]">  
         <td>$$ltext{'star'}:&nbsp;$startform<br/>$$ltext{'endd'}:&nbsp;&nbsp;$endform</td>          <td>$$ltext{'star'}:&nbsp;$startform<br/>$$ltext{'endd'}:&nbsp;&nbsp;$endform</td>
         <td>$settername</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'}?&nbsp;<input type="checkbox" name="modify_$parmcount" /></label><br /><label>$lt{'canc'}?&nbsp;&nbsp;<input type="checkbox" name="cancel_$parmcount" /></label>          <td><label>$lt{'modi'}?&nbsp;<input type="checkbox" name="modify_$parmcount" /></label><br /><label>$lt{'canc'}?&nbsp;&nbsp;<input type="checkbox" name="cancel_$parmcount" /></label>
        </tr>  
 END  END
         $parmcount ++;          $r->print(&Apache::loncommon::end_data_table_row());
           $parmcount++;
     }      }
     $r->print(<<"END");      $r->print(<<"END");
       </table>  
      </td>  
     </tr>  
    </table>  
   </td>  
  </tr>  
 </table>  </table>
 <br />  <br />
 <br />  <br />
Line 1311  END Line 1376  END
     return $parmcount;      return $parmcount;
 }  }
   
   sub parse_block_record {
       my ($record) = @_;
       my ($setuname,$setudom,$title);
       my @data = split(/:/,$record,3);
       if (scalar(@data) eq 2) {
    $title = $data[1];
    ($setuname,$setudom) = split(/@/,$data[0]);
       } else {
    ($setuname,$setudom,$title) = @data;
       }
       return ($setuname,$setudom,$title);
   }
   
 sub display_addblocker_table {  sub display_addblocker_table {
     my ($r,$parmcount,$ltext) = @_;      my ($r,$parmcount,$ltext) = @_;
     my $start = time;      my $start = time;
Line 1320  sub display_addblocker_table { Line 1398  sub display_addblocker_table {
                    'checked=true;"';                     'checked=true;"';
     my $startform = &Apache::lonhtmlcommon::date_setter('blockform','startdate_'.$parmcount,$start,$onchange);      my $startform = &Apache::lonhtmlcommon::date_setter('blockform','startdate_'.$parmcount,$start,$onchange);
     my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange);      my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange);
     my $function = &Apache::loncommon::get_users_function();  
     my $color = &Apache::loncommon::designparm($function.'.tabbg',  
                                                     $env{'user.domain'});  
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         'addb' => 'Add block',          'addb' => 'Add block',
         'exam' => 'e.g., Exam 1',          'exam' => 'e.g., Exam 1',
Line 1330  sub display_addblocker_table { Line 1405  sub display_addblocker_table {
     );      );
     $r->print(<<"END");      $r->print(<<"END");
 <h4>$lt{'addn'}</h4>   <h4>$lt{'addn'}</h4> 
 <table border="0" cellpadding="0" cellspacing="0">  
  <tr>  
   <td width="100%" bgcolor="#000000">  
    <table width="100%" border="0" cellpadding="1" cellspacing="0">  
     <tr>  
      <td width="100%" bgcolor="#000000">  
       <table border="0" cellpadding="3" cellspacing="3" bgcolor="#FFFFFF">  
        <tr bgcolor="#CCCCFF">  
         <td><b>$$ltext{'dura'}</b></td>  
         <td><b>$$ltext{'even'} $lt{'exam'}</b></td>  
         <td><b>$$ltext{'actn'}?</b></td>  
        </tr>  
        <tr bgcolor="#eeeeee">  
         <td>$$ltext{'star'}:&nbsp;$startform<br />$$ltext{'endd'}:&nbsp;&nbsp;$endform</td>  
         <td><input type="text" name="title_$parmcount" size="15" value="" /></td>  
         <td><label>$lt{'addb'}?&nbsp;<input type="checkbox" name="add_$parmcount" value="1" /></label></td>  
        </tr>  
       </table>  
      </td>  
     </tr>  
    </table>  
   </td>  
  </tr>  
 </table>  
 END  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>
   END
      $r->print(&Apache::loncommon::start_data_table_row());
       $r->print(<<"END");
        <td>$$ltext{'star'}:&nbsp;$startform<br />$$ltext{'endd'}:&nbsp;&nbsp;$endform</td>
        <td><input type="text" name="title_$parmcount" size="15" value="" /></td>
        <td><label>$lt{'addb'}?&nbsp;<input type="checkbox" name="add_$parmcount" value="1" /></label></td>
   END
       $r->print(&Apache::loncommon::end_data_table_row());
       $r->print(&Apache::loncommon::end_data_table());
     return;      return;
 }  }
   
 sub blockcheck {  sub blockcheck {
     my ($setters,$startblock,$endblock) = @_;      my ($setters,$startblock,$endblock) = @_;
     # Retrieve active student roles and active course coordinator/instructor roles      # Retrieve active student roles and active course coordinator/instructor roles
     my @livecses = ();      my %live_courses =
     my @staffcses = ();   map { $_ => 1} &Apache::loncommon::findallcourses();
     $$startblock = 0;      # FIXME should really probe for apriv, but ::allowed can only probe the 
     $$endblock = 0;      #       currently active role
     foreach (keys %env) {      my %staff_of =
         if ($_ =~ m-^user\.role\.(st|cc|in)\./(.+)$-) {   map { $_ => 1} &Apache::loncommon::findallcourses(['cc','in']);
             my $role = $1;  
             my $cse = $2;      # Retrieve blocking times and identity of blocker for active courses
             $cse =~ s|/|_|;      # for students.
             if ($env{$_} =~ m/^(\d*)\.(\d*)$/) {      return if (!%live_courses);
                 unless (($2 > 0 && $2 < time) || ($1 > time)) {  
                     if ($role eq 'st') {      foreach my $course (keys(%live_courses)) {
                         push @livecses, $cse;   my $cdom = $env{'course.'.$course.'.domain'};
                     } else {   my $cnum = $env{'course.'.$course.'.num'};
                         unless (grep/^$cse$/,@staffcses) {  
                             push @staffcses, $cse;   # if they are a staff member and are currently not playing student
                         }   next if ( $staff_of{$course} 
                     }    && ($env{'request.role'} !~ m{^st\./$cdom/$cnum}));
                 }  
             }   $setters->{$course} = {};
         } elsif ($_ =~ m-user\.role\.cr/(\w+)/(\w+)/([^/]+)\./(.+)$- ) {    $setters->{$course}{'staff'} = [];
             my $rolepriv = $env{'user.role..rolesdef_'.$3};   $setters->{$course}{'times'} = [];
         }   my %records = &Apache::lonnet::dump('comm_block',$cdom,$cnum);
     }   foreach my $record (keys %records) {
     # Retrieve blocking times and identity of blocker for active courses for students.      my ($start,$end) = ($record =~ m/^(\d+)____(\d+)$/);
     if (@livecses > 0) {      if ($start <= time && $end >= time) {
         foreach my $cse (@livecses) {   my ($staff_name,$staff_dom,$title) = 
             my ($cdom,$crs) = split/_/,$cse;      &parse_block_record($records{$record});
             if ( (grep/^$cse$/,@staffcses) && ($env{'request.role'} !~ m-^st\./$cdom/$crs$-) ) {   push(@{$$setters{$course}{'staff'}}, [$staff_name,$staff_dom]);
                 next;   push(@{$$setters{$course}{'times'}}, [$start,$end]);
             } else {   if ( ($$startblock == 0) || ($$startblock > $1) ) {
                 %{$$setters{$cse}} = ();      $$startblock = $1;
                 @{$$setters{$cse}{'staff'}} = ();   }
                 @{$$setters{$cse}{'times'}} = ();   if ( ($$endblock == 0) || ($$endblock < $2) ) {
                 my %records = &Apache::lonnet::dump('comm_block',$cdom,$crs);      $$endblock = $2;
                 foreach (keys %records) {   }
                     if ($_ =~ m/^(\d+)____(\d+)$/) {      }
                         if ($1 <= time && $2 >= time) {   }
                             my ($staff,$title) = split/:/,$records{$_};  
                             push @{$$setters{$cse}{'staff'}}, $staff;  
                             push @{$$setters{$cse}{'times'}}, $_;  
                             if ( ($$startblock == 0) || ($$startblock > $1) ) {  
                                 $$startblock = $1;  
                             }  
                             if ( ($$endblock == 0) || ($$endblock < $2) ) {  
                                 $$endblock = $2;  
                             }  
                         }  
                     }  
                 }  
             }  
         }  
     }      }
 }  }
   
 sub build_block_table {  sub build_block_table {
     my ($r,$startblock,$endblock,$setters) = @_;      my ($r,$startblock,$endblock,$setters) = @_;
     my $function = &Apache::loncommon::get_users_function();  
     my $color = &Apache::loncommon::designparm($function.'.tabbg',  
                                                     $env{'user.domain'});  
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         'cacb' => 'Currently active communication blocks',          'cacb' => 'Currently active communication blocks',
         'cour' => 'Course',          'cour' => 'Course',
         'dura' => 'Duration',          'dura' => 'Duration',
         'blse' => 'Block set by'          'blse' => 'Block set by'
     );       );
     $r->print(<<"END");      $r->print(<<"END");
 <br /<br />$lt{'cacb'}:<br /><br />  <br /><br />$lt{'cacb'}:<br /><br />
 <table border="0" cellpadding="0" cellspacing="0">  
  <tr>  
   <td width="100%" bgcolor="#000000">  
    <table width="100%" border="0" cellpadding="1" cellspacing="0">  
     <tr>  
      <td width="100%" bgcolor="#000000">  
       <table border="0" cellpadding="3" cellspacing="3" bgcolor="#FFFFFF">  
        <tr bgcolor="$color">  
         <td><b>$lt{'cour'}</b></td>  
         <td><b>$lt{'dura'}</b></td>  
         <td><b>$lt{'blse'}</b></td>  
        </tr>  
 END  END
     foreach (keys %{$setters}) {      $r->print(&Apache::loncommon::start_data_table());
         my %courseinfo=&Apache::lonnet::coursedescription($_);      $r->print(<<"END");
         for (my $i=0; $i<@{$$setters{$_}{staff}}; $i++) {  <tr>
             my ($uname,$udom) = split/\@/,$$setters{$_}{staff}[$i];   <th>$lt{'cour'}</th>
    <th>$lt{'dura'}</th>
    <th>$lt{'blse'}</th>
   </tr>
   END
       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 $fullname = &Apache::loncommon::plainname($uname,$udom);
             my ($openblock,$closeblock) = split/____/,$$setters{$_}{times}[$i];              my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]};
             $openblock = &Apache::lonlocal::locallocaltime($openblock);              $openblock = &Apache::lonlocal::locallocaltime($openblock);
             $closeblock= &Apache::lonlocal::locallocaltime($closeblock);              $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>'.$openblock.' to '.$closeblock.'</td>'.
                       '<td>'.$fullname.' ('.$uname.'@'.$udom.                        '<td>'.$fullname.' ('.$uname.':'.$udom.
                       ')</td></tr>');                        ')</td>'.
          &Apache::loncommon::end_data_table_row());
         }          }
     }      }
     $r->print('</table></td></tr></table></td></tr></table>');      $r->print(&Apache::loncommon::end_data_table());
 }  }
   
 # ----------------------------------------------------------- Display a message  # ----------------------------------------------------------- Display a message
Line 1608  sub header { Line 1656  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 1684  sub sendoffmail { Line 1732  sub sendoffmail {
     %content=&Apache::lonmsg::unpackagemsg($message{$msgid},1);      %content=&Apache::lonmsg::unpackagemsg($message{$msgid},1);
     &statuschange($msgid,'replied',$folder);      &statuschange($msgid,'replied',$folder);
  }   }
  my %toaddr=();  
  undef %toaddr;   my %toaddr;
  if ($env{'form.sendmode'} eq 'group') {   if ($env{'form.sendmode'} eq 'group') {
     foreach (keys %env) {      foreach my $address (keys(%env)) {
  if ($_=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {   if ($address=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {
     $toaddr{$1}='';      $toaddr{$1}='';
  }   }
     }      }
  } elsif ($env{'form.sendmode'} eq 'upload') {   } elsif ($env{'form.sendmode'} eq 'upload') {
     foreach (split(/[\n\r\f]+/,$env{'form.upfile'})) {      foreach my $line (split(/[\n\r\f]+/,$env{'form.upfile'})) {
  my ($rec,$txt)=split(/\s*\:\s*/,$_);   my ($rec,$txt)=split(/\s*\:\s*/,$line);
  if ($txt) {   if ($txt) {
     $rec=~s/\@/\:/;      $rec=~s/\@/\:/;
     $toaddr{$rec}.=$txt."\n";      $toaddr{$rec}.=$txt."\n";
Line 1726  sub sendoffmail { Line 1774  sub sendoffmail {
             $savemsg=&Apache::lonfeedback::clear_out_html($env{'form.message'});              $savemsg=&Apache::lonfeedback::clear_out_html($env{'form.message'});
         }          }
   
  foreach (keys %toaddr) {   foreach my $address (sort(keys(%toaddr))) {
     my ($recuname,$recdomain)=split(/\:/,$_);      my ($recuname,$recdomain)=split(/\:/,$address);
             my $msgtxt = $savemsg;              my $msgtxt = $savemsg;
     if ($toaddr{$_}) { $msgtxt.='<hr />'.$toaddr{$_}; }      if ($toaddr{$address}) { $msgtxt.='<hr />'.$toaddr{$address}; }
     my $thismsg;      my @thismsg;
     if ((($env{'form.critmsg'}) || ($env{'form.sendbck'})) &&       if ((($env{'form.critmsg'}) || ($env{'form.sendbck'})) && 
  (&Apache::lonnet::allowed('srm',$env{'request.course.id'})   (&Apache::lonnet::allowed('srm',$env{'request.course.id'})
  || &Apache::lonnet::allowed('srm',$env{'request.course.id'}.   || &Apache::lonnet::allowed('srm',$env{'request.course.id'}.
      '/'.$env{'request.course.sec'}))) {       '/'.$env{'request.course.sec'}))) {
  $r->print(&mt('Sending critical message').' '.$recuname.'@'.$recdomain.': ');   $r->print(&mt('Sending critical message').' '.$recuname.':'.$recdomain.': ');
  $thismsg=&Apache::lonmsg::user_crit_msg($recuname,$recdomain,$msgsubj,$msgtxt,   @thismsg=
  $env{'form.sendbck'},$env{'form.permanent'},      &Apache::lonmsg::user_crit_msg($recuname,$recdomain,
                                                              \$sentmessage{$_});     $msgsubj,$msgtxt,
      $env{'form.sendbck'},
      $env{'form.permanent'},
      \$sentmessage{$address});
     } else {      } else {
  $r->print(&mt('Sending').' '.$recuname.'@'.$recdomain.': ');   $r->print(&mt('Sending').' '.$recuname.':'.$recdomain.': ');
  $thismsg=&Apache::lonmsg::user_normal_msg($recuname,$recdomain,$msgsubj,$msgtxt,   @thismsg=
   $content{'citation'},undef,undef,$env{'form.permanent'},\$sentmessage{$_});      &Apache::lonmsg::user_normal_msg($recuname,$recdomain,
        $msgsubj,$msgtxt,
        $content{'citation'},
        undef,undef,
        $env{'form.permanent'},
        \$sentmessage{$address});
             }              }
     if (($env{'request.course.id'}) && (($msgtype eq 'critical') ||       if (($env{'request.course.id'}) && (($msgtype eq 'critical') || 
                                          ($env{'form.sendmode'} eq 'group'))) {                                           ($env{'form.sendmode'} eq 'group'))) {
         $specialmsg_status{$recuname.':'.$recdomain}  = $thismsg;          $specialmsg_status{$recuname.':'.$recdomain} =
                 if ($thismsg eq 'ok') {      join(' ',@thismsg);
                     $numspecial ++;   foreach my $result (@thismsg) {
                 }      if ($result eq 'ok') {
    $numspecial++;
       }
    }
     }      }
     $r->print($thismsg.'<br />');      $sendstatus.=' '.join(' ',@thismsg);
     $sendstatus.=' '.$thismsg;  
  }   }
         if (($env{'request.course.id'}) && (($env{'form.sendmode'} eq 'group')          if (($env{'request.course.id'}) && (($env{'form.sendmode'} eq 'group')
                                               || ($msgtype eq 'critical'))) {                                                || ($msgtype eq 'critical'))) {
Line 1775  sub sendoffmail { Line 1833  sub sendoffmail {
             }              }
             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(/\:/,&Apache::lonnet::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') {
                         my $usersubj = $subj_prefix.'['.$recipient.']';                          my $usersubj = $subj_prefix.'['.$recipient.']';
Line 1790  sub sendoffmail { Line 1849  sub sendoffmail {
                         &Apache::lonmsg::user_normal_msg_raw($cnum,$cdom,$subj_prefix.                          &Apache::lonmsg::user_normal_msg_raw($cnum,$cdom,$subj_prefix.
                                              ' ['.$recipient.']',$msgsubj,undef,                                               ' ['.$recipient.']',$msgsubj,undef,
                         undef,undef,undef,$usermsgid,undef,undef,$specialmsgid);                          undef,undef,undef,$usermsgid,undef,undef,$specialmsgid);
                         my ($uname,$udom) = split/:/,$recipient;                          my ($uname,$udom) = split(/:/,$recipient);
                         push(@recusers,$uname);                          push(@recusers,$uname);
                         push(@recudoms,$udom);                          push(@recudoms,$udom);
                     }                      }
                 }                  }
                 if (@recusers) {                  if (@recusers) {
                     my $specialmessage;                      my $specialmessage;
                     my $sentsubj = $subj_prefix.' ('.$numspecial.' sent) '.                      my $sentsubj = 
                                                                        $msgsubj;   $subj_prefix.' ('.$numspecial.' sent) '.$msgsubj;
                     $sentsubj = &HTML::Entities::encode($sentsubj,'<>&"');                      $sentsubj = &HTML::Entities::encode($sentsubj,'<>&"');
                     my $sentmsgid =                       my $sentmsgid = 
  &Apache::lonmsg::buildmsgid($stamp,$sentsubj,$msgname,   &Apache::lonmsg::buildmsgid($stamp,$sentsubj,$msgname,
Line 1845  sub handler { Line 1904  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

Removed from v.1.10  
changed lines
  Added in v.1.24


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