Diff for /loncom/interface/lonfeedback.pm between versions 1.86 and 1.99.2.7

version 1.86, 2004/06/02 16:41:46 version 1.99.2.7, 2004/09/15 20:29:37
Line 37  use Apache::lontexconvert(); Line 37  use Apache::lontexconvert();
 use Apache::lonlocal; # must not have ()  use Apache::lonlocal; # must not have ()
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
   
 sub list_discussion {  sub discussion_open {
     my ($mode,$status,$symb)=@_;      my ($status)=@_;
 #    &Apache::lonnet::logthis("status is $status");      if (defined($status) &&
     if (!($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER'   !($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER'
   || $status eq 'OPEN')) {    || $status eq 'OPEN')) {
  return '';   return 0;
       }
       my $close=&Apache::lonnet::EXT('resource.0.discussend');
       if (defined($close) && $close ne '' && $close < time) {
    return 0;
       }
       return 1;
   }
   
   sub discussion_visible {
       my ($status)=@_;
       if (not &discussion_open($status)) {
    my $hidden=&Apache::lonnet::EXT('resource.0.discusshide');
    if (lc($hidden) eq 'yes' or $hidden eq '' or !defined($hidden))  {
       return 0;
    }
     }      }
       return 1;
   }
   
   sub list_discussion {
       my ($mode,$status,$symb)=@_;
   
       my $outputtarget=$ENV{'form.grade_target'};
       if (not &discussion_visible($status)) { return ''; }
     my @bgcols = ("#cccccc","#eeeeee");      my @bgcols = ("#cccccc","#eeeeee");
     my $discussiononly=0;      my $discussiononly=0;
     if ($mode eq 'board') { $discussiononly=1; }      if ($mode eq 'board') { $discussiononly=1; }
Line 93  sub list_discussion { Line 115  sub list_discussion {
     }      }
   
 # Get discussion display default settings for user  # Get discussion display default settings for user
     my %userenv = &Apache::lonnet::get('environment',['discdisplay','discmarkread'],$ENV{'user.domain'},$ENV{'user.name'});      if ($ENV{'environment.discdisplay'} eq 'unread') {
     my $discdisplay=$userenv{'discdisplay'};  
     if ($discdisplay eq 'unread') {  
         $showonlyunread = 1;          $showonlyunread = 1;
     }      }
     my $discmarkread=$userenv{'discmarkread'};      if ($ENV{'environment.discmarkread'} eq 'ondisp') {
     if ($discmarkread eq 'ondisp') {  
         $markondisp = 1;          $markondisp = 1;
     }      }
   
 # Override user's default if user specified display setting for this discussion  # Override user's default if user specified display setting for this discussion
     if (defined($dischash{$ondispkey})) {      if (defined($dischash{$ondispkey})) {
         $markondisp = $dischash{$ondispkey};   unless ($dischash{$showkey} eq '') {
       $markondisp = $dischash{$ondispkey};
    }
     }      }
     if ($markondisp) {      if ($markondisp) {
         $discinfo{$lastkey} = time;          $discinfo{$lastkey} = time;
     }      }
   
     if (defined($dischash{$showkey})) {      if (defined($dischash{$showkey})) {
         $showonlyunread = $dischash{$showkey};   unless ($dischash{$showkey} eq '') {
       $showonlyunread = $dischash{$showkey};
    }
     }      }
   
     if (defined($dischash{$visitkey})) {      if (defined($dischash{$visitkey})) {
         $visit = $dischash{$visitkey};   unless ($dischash{$showkey} eq '') {
       $visit = $dischash{$visitkey};
    }
     }      }
     $visit ++;      $visit ++;
   
Line 201  sub list_discussion { Line 226  sub list_discussion {
     if ($hidden) {      if ($hidden) {
  $message='<font color="#888888">'.$message.'</font>';   $message='<font color="#888888">'.$message.'</font>';
     }      }
     my $screenname=&Apache::loncommon::screenname(  #    my $screenname=&Apache::loncommon::screenname(
     $contrib{$idx.':sendername'},  #    $contrib{$idx.':sendername'},
     $contrib{$idx.':senderdomain'});  #    $contrib{$idx.':senderdomain'});
     my $plainname=&Apache::loncommon::nickname(  #    my $plainname=&Apache::loncommon::nickname(
     $contrib{$idx.':sendername'},  #    $contrib{$idx.':sendername'},
     $contrib{$idx.':senderdomain'});  #    $contrib{$idx.':senderdomain'});
           ($$screenname,$$plainname)=($$contrib{$idx.':screenname'},
    $$contrib{$idx.':plainname'});
     my $sender=&mt('Anonymous');      my $sender=&mt('Anonymous');
     if ((!$contrib{$idx.':anonymous'}) || ($seeid)) {      if ((!$contrib{$idx.':anonymous'}) || ($seeid)) {
  $sender=&Apache::loncommon::aboutmewrapper(   $sender=&Apache::loncommon::aboutmewrapper(
Line 248  sub list_discussion { Line 274  sub list_discussion {
     $sender='<i>'.$screenname.'</i>';      $sender='<i>'.$screenname.'</i>';
  }   }
     }      }
     if (&Apache::lonnet::allowed('pch',      if (&discussion_open($status) &&
    &Apache::lonnet::allowed('pch',
  $ENV{'request.course.id'}.   $ENV{'request.course.id'}.
  ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {   ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
  $sender.=' <a href="/adm/feedback?replydisc='.   $sender.=' <a href="/adm/feedback?replydisc='.
Line 302  sub list_discussion { Line 329  sub list_discussion {
     my $color = &Apache::loncommon::designparm($function.'.tabbg',      my $color = &Apache::loncommon::designparm($function.'.tabbg',
                                                     $ENV{'user.domain'});                                                      $ENV{'user.domain'});
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         'cuse' => 'Current settings for this discussion',          'cuse' => 'Current discussion settings',
         'allposts' => 'All posts',          'allposts' => 'All posts',
         'unread' => 'New posts only',          'unread' => 'New posts only',
         'ondisp' => 'Once displayed',          'ondisp' => 'Once displayed',
         'onmark' => 'Once marked read',          'onmark' => 'Once marked read',
         'disa' => 'Posts to be displayed',          'disa' => 'Posts to be displayed',
         'npce' => 'Posts cease to be marked "NEW"',          'npce' => 'Posts cease to be marked "NEW"',
         'chgt' => 'Change to ',          'chgt' => 'Change',
           'disp' => 'Display',
           'nolo' => 'Not new',
     );      );
   
     my $currdisp = $lt{'allposts'};      my $currdisp = $lt{'allposts'};
     my $currmark = $lt{'onmark'};      my $currmark = $lt{'onmark'};
     my $dispchange = $lt{'unread'};      my $dispchange = $lt{'unread'};
     my $markchange = $lt{'ondisp'};      my $markchange = $lt{'ondisp'};
     my $displink = '/adm/feedback?onlyunread='.$ressymb;      my $chglink = '/adm/feedback?modifydisp='.$ressymb;
     my $marklink = '/adm/feedback?markondisp='.$ressymb;      my $displink = 'onlyunread';
       my $marklink = 'markondisp';
   
     if ($markondisp) {      if ($markondisp) {
         $currmark = $lt{'ondisp'};          $currmark = $lt{'ondisp'};
         $markchange = $lt{'onmark'};          $markchange = $lt{'onmark'};
         $marklink = '/adm/feedback?markonread='.$ressymb;          $marklink = 'markonread';
         if ($newpostsflag) {  
             $marklink .= '&previous='.$prevread;  
         }  
     }      }
   
     if ($showonlyunread) {      if ($showonlyunread) {
         $currdisp = $lt{'unread'};          $currdisp = $lt{'unread'};
         $dispchange = $lt{'allposts'};          $dispchange = $lt{'allposts'};
         $displink = '/adm/feedback?allposts='.$ressymb;          $displink = 'allposts';
     }      }
      
       $chglink .= '&changes='.$displink.'_'.$marklink;
   
     if ($newpostsflag) {      if ($newpostsflag) {
         $displink .= '&previous='.$prevread;          $chglink .= '&previous='.$prevread;
     }      }
   
     if ($visible) {      if ($visible) {
 # Print the discusssion  # Print the discusssion
  $discussion.='<table bgcolor="#AAAAAA" cellpadding="2" cellspacing="2" border="0">';   if ($outputtarget ne 'tex') {
  my $colspan=$maxdepth+1;              my $colspan=$maxdepth+1;
         $discussion .= '<tr bgcolor="#FFFFFF"><td colspan="'.$colspan.'" valign="top">'.      $discussion.='<table bgcolor="#AAAAAA" cellpadding="2" cellspacing="2" border="0">';
         '<table border="0" bgcolor="#FFFFFF" width="100%" cellspacing="2" cellpadding="2">'.      $discussion .='<tr><td bgcolor="#DDDDBB" colspan="'.$colspan.'">'.
         '<tr><td align="left"><b>'.$lt{'cuse'}.'</b></td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td align="right"><b>'.$lt{'chgt'}.'</b></td></tr>'.   '<table border="0" width="100%" bgcolor="#DDDDBB"><tr>';
         '<tr><td>'.$lt{'disa'}.':&nbsp;<i>'.$currdisp.'</i></td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td align="right"><a href="'.$displink.'">'.$dispchange.'</a></td></tr>'.      if ($visible>2) {
         '<tr><td>'.$lt{'npce'}.':&nbsp;<i>'.$currmark.'</i></td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td align="right"><a href="'.$marklink.'">'.$markchange.'</a></td></tr>'.   $discussion.='<td align="left">'.
         '</table></td></tr>'.      '<a href="/adm/feedback?threadedon='.$ressymb;
         '<tr><td bgcolor="#DDDDBB" colspan="'.$colspan.'">'.   if ($newpostsflag) {
         '<table border="0" width="100%" bgcolor="#DDDDBB"><tr>';      $discussion .= '&previous='.$prevread;
         if ($visible>2) {   }
     $discussion.='<td align="left">'.   $discussion .='">'.&mt('Threaded View').'</a>&nbsp;&nbsp;'.
             '<a href="/adm/feedback?threadedon='.$ressymb;      '<a href="/adm/feedback?threadedoff='.$ressymb;
             if ($newpostsflag) {   if ($newpostsflag) {
                 $discussion .= '&previous='.$prevread;      $discussion .= '&previous='.$prevread;
             }   }
             $discussion .='">'.&mt('Threaded View').'</a>&nbsp;&nbsp;'.   $discussion .='">'.&mt('Chronological View').'</a>&nbsp;&nbsp;</td>';
             '<a href="/adm/feedback?threadedoff='.$ressymb;      }
             if ($newpostsflag) {      if ($newpostsflag) {
                 $discussion .= '&previous='.$prevread;   if (!$markondisp) {
             }      $discussion .='<td align="right"><a href="/adm/feedback?markread='.$ressymb.'">'.&mt('Mark new posts as read').'</a>&nbsp;&nbsp;';
             $discussion .='">'.&mt('Chronological View').'</a>&nbsp;&nbsp;</td>';   } else {
  }       $discussion .= '<td>&nbsp;</td>';
         if ($newpostsflag) {   }
             if (!$markondisp) {      } else {
                 $discussion .='<td align="right"><a href="/adm/feedback?markread='.$ressymb.'">'.&mt('Mark new posts as read').'</a>&nbsp;&nbsp;';   $discussion .= '<td>&nbsp;</td>';
             } else {      }
                 $discussion .= '<td>&nbsp;</td>';      $discussion .= '</tr></table></td></tr>';
             }   } else {
         } else {      $discussion.='\vskip 0 mm\noindent\makebox[2 cm][b]{\hrulefill}'.
             $discussion .= '<td>&nbsp;</td>';                           '\textbf{DISCUSSIONS}\makebox[2 cm][b]{\hrulefill}'.
         }                           '\vskip 0 mm\noindent\textbf{'.$lt{'cuse'}.'}:\vskip 0 mm'.
         $discussion .= '</tr></table></td></tr>';                           '\noindent\textbf{'.$lt{'disa'}.'}: \textit{'.$currdisp.'}\vskip 0 mm'.
                            '\noindent\textbf{'.$lt{'npce'}.'}: \textit{'.$currmark.'}';
    }
         my $numhidden = keys %notshown;          my $numhidden = keys %notshown;
         if ($numhidden > 0) {          if ($numhidden > 0) {
             my $colspan = $maxdepth+1;              my $colspan = $maxdepth+1;
Line 388  sub list_discussion { Line 418  sub list_discussion {
         }          }
  foreach (sort { $a <=> $b } keys %alldiscussion) {   foreach (sort { $a <=> $b } keys %alldiscussion) {
             unless ($notshown{$alldiscussion{$_}} eq '1') {              unless ($notshown{$alldiscussion{$_}} eq '1') {
         $discussion.="\n<tr>";                  if ($outputtarget ne 'tex') {
       $discussion.="\n<tr>";
    } else {
       $discussion.='\vskip 0 mm\noindent\makebox[2 cm][b]{\hrulefill}';
    }
         my $thisdepth=$depth[$alldiscussion{$_}];          my $thisdepth=$depth[$alldiscussion{$_}];
         for (1..$thisdepth) {                  if ($outputtarget ne 'tex') {
     $discussion.='<td>&nbsp;&nbsp;&nbsp;</td>';      for (1..$thisdepth) {
         }   $discussion.='<td>&nbsp;&nbsp;&nbsp;</td>';
       }
    }
         my $colspan=$maxdepth-$thisdepth+1;          my $colspan=$maxdepth-$thisdepth+1;
                 $discussion.='<td  bgcolor="'.$bgcols[$newitem{$alldiscussion{$_}}].'" colspan="'.$colspan.'">'.                  if ($outputtarget ne 'tex') {
       $discussion.='<td  bgcolor="'.$bgcols[$newitem{$alldiscussion{$_}}].'" colspan="'.$colspan.'">'.
                              $discussionitems[$alldiscussion{$_}].                               $discussionitems[$alldiscussion{$_}].
                      '</td></tr>';                       '</td></tr>';
    } else {
       #cleanup block
       $discussionitems[$alldiscussion{$_}]=~s/<table([^>]*)>/<table TeXwidth="90 mm">/;
       $discussionitems[$alldiscussion{$_}]=~s/<tr([^>]*)><td([^>]*)>/<tr><td TeXwidth="20 mm" align="left">/;
                       my $threadinsert='';
                       if ($thisdepth > 0) {
    $threadinsert='<br /><strong>Reply: '.$thisdepth.'</strong>';
       }
       $discussionitems[$alldiscussion{$_}]=~s/<\/td><td([^>]*)>/$threadinsert<\/td><td TeXwidth="65 mm" align="left">/;
       $discussionitems[$alldiscussion{$_}]=~s/<a([^>]+)>(Hide|Delete|Reply|Submissions)<\/a>//g;
                       $discussionitems[$alldiscussion{$_}]=~s/(<b>|<\/b>|<\/a>|<a([^>]+)>)//g;
       
                       #FIXME xmlparse can't be safely called from inside xmlparse
                       #   due to the global variables that are use, the safe
                       #   space etc. I expect this has unforseen issues that
                       #   need resolving.
       
                       $discussion.=&Apache::lonxml::xmlparse('','tex',$discussionitems[$alldiscussion{$_}]);
    }
     }      }
         }          }
         $discussion.='</table><br /><br />';   if ($outputtarget ne 'tex') {
               my $colspan=$maxdepth+1;
               $discussion .= <<END; 
               <tr bgcolor="#FFFFFF">
                <td colspan="$colspan" valign="top">
                 <table border="0" bgcolor="#FFFFFF" width="100%" cellspacing="2" cellpadding="2">
                  <tr>
                   <td align="left">
                    <table border="0" cellpadding="0" cellspacing="4">
                     <tr>
                      <td>
                       <font size="-1"><b>$lt{'cuse'}</b>:</td>
                      <td>&nbsp;</td>
   END
               if ($newpostsflag) {
                   $discussion .= 
                      '<td><font size="-1">1.&nbsp;'.$lt{'disp'}.'&nbsp;-&nbsp;<i>'.$currdisp.'</i>&nbsp;&nbsp;2.&nbsp;'.$lt{'nolo'}.'&nbsp;-&nbsp;<i>'.$currmark.'</i></font></td>';
               } else {
                   $discussion .=
                      '<td><font size="-1">'.$lt{'disp'}.'&nbsp;-&nbsp;<i>'.$currdisp.'</i></font></td>';
               }
               $discussion .= <<END;
                      <td>&nbsp;</td>
                      <td>
                       <font size="-1"><b><a href="$chglink">$lt{'chgt'}</a>?</font></b></td>
                     </tr>
                    </table>
                   </td>
                  </tr>
                 </table>
                </td>
               </tr>
              </table>
              <br /><br />
   END
    }
     }      }
     if ($discussiononly) {      if ($discussiononly) {
  $discussion.=(<<ENDDISCUSS);   $discussion.=(<<ENDDISCUSS);
Line 412  sub list_discussion { Line 503  sub list_discussion {
 <font size="1">Note: in anonymous discussion, your name is visible only to  <font size="1">Note: in anonymous discussion, your name is visible only to
 course faculty</font><br />  course faculty</font><br />
 <b>Title:</b>&nbsp;<input type="text" name="subject" value="" size="30" /><br /><br />  <b>Title:</b>&nbsp;<input type="text" name="subject" value="" size="30" /><br /><br />
 <textarea name="comment" cols="60" rows="10" wrap="hard"></textarea>  <textarea name="comment" cols="80" rows="14" wrap="hard"></textarea>
 <p>  <p>
 Attachment (128 KB max size): <input type="file" name="attachment" />  Attachment (128 KB max size): <input type="file" name="attachment" />
 </p>  </p>
 </form>  </form>
 ENDDISCUSS  ENDDISCUSS
       $discussion.=&generate_preview_button();          if ($outputtarget ne 'tex') {
       $discussion.=&generate_preview_button();
    }
     } else {      } else {
  if (&Apache::lonnet::allowed('pch',   if (&discussion_open($status) &&
       &Apache::lonnet::allowed('pch',
    $ENV{'request.course.id'}.     $ENV{'request.course.id'}.
  ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {   ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
     $discussion.='<table bgcolor="#BBBBBB"><tr><td><a href="/adm/feedback?replydisc='.      if ($outputtarget ne 'tex') {
  $symb.':::" '.$target.'>'.   $discussion.='<table bgcolor="#BBBBBB"><tr><td><a href="/adm/feedback?replydisc='.
  '<img src="/adm/lonMisc/chat.gif" border="0" />'.      $symb.':::" '.$target.'>'.
  &mt('Post Discussion').'</a></td></tr></table>';      '<img src="/adm/lonMisc/chat.gif" border="0" />'.
       &mt('Post Discussion').'</a></td></tr></table>';
       }
  }   }
     }      }
    return $discussion;     return $discussion;
Line 503  $htmlheader Line 599  $htmlheader
         }          }
   
         if (rec) {          if (rec) {
     document.mailform.onsubmit();              if (typeof(document.mailform.onsubmit)=='function') {
    document.mailform.onsubmit();
       }
     document.mailform.submit();      document.mailform.submit();
         } else {          } else {
             alert('Please check a feedback type.');              alert('Please check a feedback type.');
Line 527  $quote Line 625  $quote
 $latexHelp  $latexHelp
 Title: <input type="text" name="subject" size="30" value="$subject" /></p>  Title: <input type="text" name="subject" size="30" value="$subject" /></p>
 <p>  <p>
 <textarea name="comment" cols="60" rows="10" wrap="hard">  <textarea name="comment" id="comment" cols="60" rows="10" wrap="hard">
 </textarea></p>  </textarea></p>
 <p>  <p>
 Attachment (128 KB max size): <input type="file" name="attachment" />  Attachment (128 KB max size): <input type="file" name="attachment" />
Line 539  Attachment (128 KB max size): <input typ Line 637  Attachment (128 KB max size): <input typ
 </form>  </form>
 ENDDOCUMENT  ENDDOCUMENT
 $r->print(&generate_preview_button().  $r->print(&generate_preview_button().
 &Apache::lonhtmlcommon::htmlareaactive().  &Apache::lonhtmlcommon::htmlareaselectactive('comment').
 '</body></html>');  '</body></html>');
 }  }
   
   sub print_display_options {
       my ($r,$symb,$previous,$dispchg,$markchg,$feedurl) = @_;
    # backward compatibility (bulletin boards used to be 'wrapped')
       if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
           $feedurl=~s|^/adm/wrapper||;
       }
   
       my $function = &Apache::loncommon::get_users_function();
       my $tabcolor = &Apache::loncommon::designparm($function.'.tabbg',
                                                       $ENV{'user.domain'});
       my $bodytag=&Apache::loncommon::bodytag('Discussion options',
                                             '','');
   
       my %lt = &Apache::lonlocal::texthash(
           'dido' => 'Discussion display options',
           'pref' => 'Display Preference',
           'curr' => 'Current setting ',
           'actn' => 'Action',
           'deff' => 'Default for all discussions',
           'prca' => 'Preferences can be set for this discussion that determine ....',
           'whpo' => 'Which posts are displayed when you display this bulletin board or resource, and',
           'unwh' => 'Under what circumstances posts are identfied as "New."',
           'allposts' => 'All posts',
           'unread' => 'New posts only',
           'ondisp' => 'Once displayed',
           'onmark' => 'Once marked as read',
           'disa' => 'Posts displayed?',
           'npmr' => 'New posts cease to be identified as "New"?',
           'chgt' => 'Change to ',
           'mkdf' => 'Set to ',
           'yhni' => 'You have not indicated that you wish to change either of the discussion settings',
           'ywbr' => 'You will be returned to the previous page if you click OK.'
       );
   
       my $dispchange = $lt{'unread'};
       my $markchange = $lt{'ondisp'};
       my $currdisp = $lt{'allposts'};
       my $currmark = $lt{'onmark'};
       my $discdisp = 'allposts';
       my $discmark = 'onmark';
                                                                                         
       if ($dispchg eq 'allposts') {
           $dispchange = $lt{'allposts'};
           $currdisp = $lt{'unread'};
           $discdisp = 'unread';
       }
                                                                                         
       if ($markchg eq 'markonread') {
           $markchange = $lt{'onmark'};
           $currmark = $lt{'ondisp'};
           $discmark = 'ondisp';
       }
       $r->print(<<END);
   <html>
   <head>
   <title>$lt{'dido'}</title>
   <meta http-equiv="pragma" content="no-cache" />
   <script>
   function setDisp() {
       var prev = "$previous"
       var chktotal = 0
       if (document.modifydisp.discdisp.checked == true) {
           document.modifydisp.$dispchg.value = "$symb"
           chktotal ++
       }
       if (document.modifydisp.discmark.checked == true) {
           document.modifydisp.$markchg.value = "$symb"
           chktotal ++
       }
       if (chktotal > 0) { 
           document.modifydisp.submit()
       } else {
           if(confirm("$lt{'yhni'}. \\n$lt{'ywbr'}"))      {
               if (prev > 0) {
                   location.href = "$feedurl?previous=$previous"
               } else {
                   location.href = "$feedurl"
               }
           }
       }
   }
   </script>
   </head>
   $bodytag
   <form name="modifydisp" method="post" action="/adm/feedback">
   $lt{'sdpf'}<br/> $lt{'prca'}  <ol><li>$lt{'whpo'}</li><li>$lt{'unwh'}</li></ol>
   <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="1" bgcolor="#FFFFFF">
          <tr bgcolor="$tabcolor">
           <td><b>$lt{'pref'}</b></td>
           <td><b>$lt{'curr'}</b></td>
           <td><b>$lt{'actn'}?</b></td>
          </tr>
          <tr bgcolor="#dddddd">
          <td>$lt{'disa'}</td>
          <td>$lt{$discdisp}</td>
          <td><input type="checkbox" name="discdisp" />&nbsp;$lt{'chgt'} "$dispchange"</td>
         </tr><tr bgcolor="#eeeeee">
          <td>$lt{'npmr'}</td>
          <td>$lt{$discmark}</td>
          <td><input type="checkbox" name="discmark" />$lt{'chgt'} "$markchange"</td>
         </tr>
        </table>
       </td>
      </tr>
     </table>
    </td>
   </tr>
   </table>
   <br />
   <br />
   <input type="hidden" name="previous" value="$previous" />
   <input type="hidden" name="$dispchg" value=""/>
   <input type="hidden" name="$markchg" value=""/>
   <input type="button" name="sub" value="Store Changes" onClick="javascript:setDisp()" />
   <br />
   <br />
   </form>
   </body>
   </html>
   END
       return;
   }
   
 sub fail_redirect {  sub fail_redirect {
   my ($r,$feedurl) = @_;    my ($r,$feedurl) = @_;
   if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };    if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };
Line 555  sub fail_redirect { Line 783  sub fail_redirect {
 <body bgcolor="#FFFFFF">  <body bgcolor="#FFFFFF">
 <img align="right" src="/adm/lonIcons/lonlogos.gif" />  <img align="right" src="/adm/lonIcons/lonlogos.gif" />
 <b>Sorry, no recipients  ...</b>  <b>Sorry, no recipients  ...</b>
   <br /><a href="$feedurl">Continue</a>
 </body>  </body>
 </html>  </html>
 ENDFAILREDIR  ENDFAILREDIR
Line 564  sub redirect_back { Line 793  sub redirect_back {
   my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$status,$previous) = @_;    my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$status,$previous) = @_;
   my $prevtag = '';    my $prevtag = '';
   my $qrystr = '';    my $qrystr = '';
    # backward compatibility (bulletin boards used to be 'wrapped')
     if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
         $feedurl=~s|^/adm/wrapper||;
     }
   
   if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };    if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };
   if ($previous > 0) {    if ($previous > 0) {
       $qrystr = 'previous='.$previous;        $qrystr = 'previous='.$previous;
Line 589  $typestyle Line 823  $typestyle
 <form name="reldt" action="$feedurl" target="loncapaclient">  <form name="reldt" action="$feedurl" target="loncapaclient">
 $prevtag  $prevtag
 </form>  </form>
   <br /><a href="$feedurl">Continue</a>
 </body>  </body>
 </html>  </html>
 ENDREDIR  ENDREDIR
Line 611  ENDNOREDIR Line 846  ENDNOREDIR
 <body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { self.close(); }'>  <body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { self.close(); }'>
 <img align="right" src="/adm/lonIcons/lonlogos.gif" />  <img align="right" src="/adm/lonIcons/lonlogos.gif" />
 <b>Sorry, no feedback possible on this resource  ...</b>  <b>Sorry, no feedback possible on this resource  ...</b>
   <br /><a href="$feedurl">Continue</a>
 </body>  </body>
 </html>  </html>
 ENDNOREDIRTWO  ENDNOREDIRTWO
Line 643  sub screen_header { Line 879  sub screen_header {
  }   }
     }      }
     if ($ENV{'request.course.id'}) {      if ($ENV{'request.course.id'}) {
  if (&Apache::lonnet::allowed('pch',   if (&discussion_open() &&
       &Apache::lonnet::allowed('pch',
      $ENV{'request.course.id'}.       $ENV{'request.course.id'}.
      ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {       ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
     $discussoptions='<input type="checkbox" name="discuss" onClick="this.form.anondiscuss.checked=false;" '.      $discussoptions='<input type="checkbox" name="discuss" onClick="this.form.anondiscuss.checked=false;" '.
Line 675  sub resource_output { Line 912  sub resource_output {
   
 sub clear_out_html {  sub clear_out_html {
   my ($message,$override)=@_;    my ($message,$override)=@_;
     unless (&Apache::lonhtmlcommon::htmlareablocked()) { return $message; }
   my $cid=$ENV{'request.course.id'};    my $cid=$ENV{'request.course.id'};
   if (($ENV{"course.$cid.allow_limited_html_in_feedback"} =~ m/yes/i) ||    if (($ENV{"course.$cid.allow_limited_html_in_feedback"} =~ m/yes/i) ||
       ($override)) {        ($override)) {
       # allows <B> <I> <P> <A> <LI> <OL> <UL> <EM> <BR> <TT> <STRONG>         # allows <B> <I> <P> <A> <LI> <OL> <UL> <EM> <BR> <TT> <STRONG> 
       # <BLOCKQUOTE> <DIV .*> <DIV> <IMG>        # <BLOCKQUOTE> <DIV .*> <DIV> <IMG> <M> <SPAN> <H1> <H2> <H3> <H4> <SUB>
         # <SUP>
       my %html=(B=>1, I=>1, P=>1, A=>1, LI=>1, OL=>1, UL=>1, EM=>1,        my %html=(B=>1, I=>1, P=>1, A=>1, LI=>1, OL=>1, UL=>1, EM=>1,
  BR=>1, TT=>1, STRONG=>1, BLOCKQUOTE=>1, DIV=>1, IMG=>1,   BR=>1, TT=>1, STRONG=>1, BLOCKQUOTE=>1, DIV=>1, IMG=>1,
                 M=>1);                  M=>1, SUB=>1, SUP=>1, SPAN=>1, 
    H1=>1, H2=>1, H3=>1, H4=>1, H5=>1);
   
       $message =~ s/\<(\/?\s*(\w+)[^\>\<]*)/        $message =~ s/\<(\/?\s*(\w+)[^\>\<]*)/
   {($html{uc($2)}&&(length($1)<1000))?"\<$1":"\&lt;$1"}/ge;    {($html{uc($2)}&&(length($1)<1000))?"\<$1":"\&lt;$1"}/ge;
Line 816  sub send_msg { Line 1056  sub send_msg {
 sub adddiscuss {  sub adddiscuss {
     my ($symb,$email,$anon,$attachmenturl,$subject)=@_;      my ($symb,$email,$anon,$attachmenturl,$subject)=@_;
     my $status='';      my $status='';
     if (&Apache::lonnet::allowed('pch',$ENV{'request.course.id'}.      if (&discussion_open() &&
    &Apache::lonnet::allowed('pch',$ENV{'request.course.id'}.
         ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {          ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
   
     my %contrib=('message'      => $email,      my %contrib=('message'      => $email,
Line 883  sub generate_preview_button { Line 1124  sub generate_preview_button {
 <input type="hidden" name="subject">  <input type="hidden" name="subject">
 <input type="hidden" name="comment" />  <input type="hidden" name="comment" />
 <input type="button" value="$pre"  <input type="button" value="$pre"
 onClick="this.form.comment.value=document.mailform.comment.value;this.form.subject.value=document.mailform.subject.value;this.form.submit();" />  onClick="if (typeof(document.mailform.onsubmit)=='function') {document.mailform.onsubmit();};this.form.comment.value=document.mailform.comment.value;this.form.subject.value=document.mailform.subject.value;this.form.submit();" />
 </form>  </form>
 ENDPREVIEW  ENDPREVIEW
 }  }
Line 898  sub handler { Line 1139  sub handler {
   
 # --------------------------- Get query string for limited number of parameters  # --------------------------- Get query string for limited number of parameters
   
    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
          ['hide','unhide','deldisc','postdata','preview','replydisc','threadedon','threadedoff','onlyunread','allposts','previous','markread','markonread','markondisp']);           ['hide','unhide','deldisc','postdata','preview','replydisc','threadedon','threadedoff','onlyunread','allposts','previous','markread','markonread','markondisp','modifydisp','changes','navmaps','navurl']);
     if ($ENV{'form.navmaps'}) {
   if (($ENV{'form.markondisp'}) || ($ENV{'form.markonread'})) {  
 # ---------------------- Modify setting for identification of 'NEW' posts in this discussion  
   
       &Apache::loncommon::content_type($r,'text/html');  
       $r->send_http_header;  
       my $symb=$ENV{'form.markondisp'}?$ENV{'form.markondisp'}:$ENV{'form.markonread'};  
       my $ressymb = $symb;  
       my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);  
       unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {  
           $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;  
       }  
                                                                                             
       my %discinfo = ();        my %discinfo = ();
       my $lastkey = $ressymb.'_lastread';        my @resources = ();
       my $ondispkey = $ressymb.'_markondisp';        if ($ENV{'form.navmaps'} =~ /:/) {
       if ($ENV{'form.markondisp'}) {            @resources = split/:/,$ENV{'form.navmaps'};
           $discinfo{$lastkey} = time;        } else {
           $discinfo{$ondispkey} = 1;            @resources = ("$ENV{'form.navmaps'}");
       } elsif ($ENV{'form.markonread'}) {        }
           if ( defined($ENV{'previous'}) ) {        my $numitems = @resources;
               $discinfo{$lastkey} = $ENV{'previous'};        my $feedurl = '/adm/navmaps';
         if ($ENV{'form.navurl'}) {
             $feedurl .= '?'.$ENV{'form.navurl'};
         }
         my %lt = &Apache::lonlocal::texthash(
             'mnpa' => 'Marked "New" posts as read in a total of',
             'robb' => 'resources/bulletin boards.'
         );       
         foreach (@resources) {
   # backward compatibility (bulletin boards used to be 'wrapped')
             my $ressymb=$_;
             if ($ressymb =~ m/bulletin___\d+___/) {
                 unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
                     $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper/|;
                 }
           }            }
           $discinfo{$ondispkey} = 0;            my $lastkey = $ressymb.'_lastread';
             $discinfo{$lastkey} = time;
       }        }
       &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});        &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
       if ($ENV{'form.markondisp'}) {        &Apache::loncommon::content_type($r,'text/html');
           &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').'<br />','0','0');        $r->send_http_header;
       } else {        $r->print (<<ENDREDIR);
           &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').'<br />','0','0','',$ENV{'form.previous'});  <html>
       }  <head>
   <title>New posts marked as read</title>
   <meta http-equiv="pragma" content="no-cache" />
   <meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl" />
   </head>
   <body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { this.document.reldt.submit(); self.close(); }'>
   <img align="right" src="/adm/lonIcons/lonlogos.gif" />
   <b>$lt{'mnpa'} $numitems $lt{'robb'}</b>
   <form name="reldt" action="$feedurl" target="loncapaclient">
   </form>
   <br /><a href="$feedurl">Continue</a>
   </body>
   </html>
   ENDREDIR
       return OK;        return OK;
   } elsif (($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'})) {    } elsif ($ENV{'form.modifydisp'}) {
 # ----------------------------------------------------------------- Modify display setting for this discussion   
       &Apache::loncommon::content_type($r,'text/html');        &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;        $r->send_http_header;
       my $symb=$ENV{'form.allposts'}?$ENV{'form.allposts'}:$ENV{'form.onlyunread'};        my $symb=$ENV{'form.modifydisp'};
       my $ressymb = $symb;  
       my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);        my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
       unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {        my $previous=$ENV{'form.previous'};
           $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;        my ($dispchg,$markchg) = split/_/,$ENV{'form.changes'};
         my $feedurl = &Apache::lonnet::clutter($url);
    # backward compatibility (bulletin boards used to be 'wrapped')  
         if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
             $feedurl=~s|^/adm/wrapper||;
       }        }
       my %discinfo = ();        &print_display_options($r,$symb,$previous,$dispchg,$markchg,$feedurl);
       if ($ENV{'form.allposts'}) {        return OK;
           $discinfo{$ressymb.'_showonlyunread'} = 0;    } elsif (($ENV{'form.markondisp'}) || ($ENV{'form.markonread'}) || ($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'}) ) {
       } elsif ($ENV{'form.onlyunread'}) {        &Apache::loncommon::content_type($r,'text/html');
           $discinfo{$ressymb.'_showonlyunread'} = 1;        $r->send_http_header;
         my $previous=$ENV{'form.previous'};
         my ($map,$ind,$url);
         if (($ENV{'form.markondisp'}) || ($ENV{'form.markonread'})) {
   # ---------------------- Modify setting for identification of 'NEW' posts in this discussion
             my $symb=$ENV{'form.markondisp'}?$ENV{'form.markondisp'}:$ENV{'form.markonread'};
             my $ressymb = $symb;
             ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
             unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
                 $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
             }
             my %discinfo = ();
             my $lastkey = $ressymb.'_lastread';
             my $ondispkey = $ressymb.'_markondisp';
             if ($ENV{'form.markondisp'}) {
                 $discinfo{$lastkey} = time;
                 $discinfo{$ondispkey} = 1;
             } elsif ($ENV{'form.markonread'}) {
                 if ( $previous > 0 ) {
                     $discinfo{$lastkey} = $previous;
                 }
                 $discinfo{$ondispkey} = 0;
             }
             &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
         }
         if (($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'})) {
   # ----------------------------------------------------------------- Modify display setting for this discussion 
             my $symb=$ENV{'form.allposts'}?$ENV{'form.allposts'}:$ENV{'form.onlyunread'};
             my $ressymb = $symb;
             ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
             unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
                 $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
             }
             my %discinfo = ();
             if ($ENV{'form.allposts'}) {
                 $discinfo{$ressymb.'_showonlyunread'} = 0;
             } elsif ($ENV{'form.onlyunread'}) {
                 $discinfo{$ressymb.'_showonlyunread'} = 1;
             }
             &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
         }
         if (($ENV{'form.markonread'}) || ($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'}) ) {
             &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').'<br />','0','0','',$previous);
         } else {
             &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').'<br />','0','0');
       }        }
       &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});  
       &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').'<br />','0','0','',$ENV{'form.previous'});  
       return OK;        return OK;
   } elsif ($ENV{'form.markread'}) {    } elsif ($ENV{'form.markread'}) {
 # ----------------------------------------------------------------- Mark new posts as read  # ----------------------------------------------------------------- Mark new posts as read
Line 1070  sub handler { Line 1371  sub handler {
   if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form)$/) {    if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form)$/) {
       unless ($symb) { $goahead=0; }        unless ($symb) { $goahead=0; }
   }    }
   # backward compatibility (bulltin boards used to be 'wrapped')    # backward compatibility (bulletin boards used to be 'wrapped')
   if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {    if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
       $feedurl=~s|^/adm/wrapper||;        $feedurl=~s|^/adm/wrapper||;
   }    }

Removed from v.1.86  
changed lines
  Added in v.1.99.2.7


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