Diff for /loncom/interface/lonfeedback.pm between versions 1.101 and 1.107

version 1.101, 2004/07/21 23:57:24 version 1.107, 2004/07/27 23:35:34
Line 36  use Apache::loncommon(); Line 36  use Apache::loncommon();
 use Apache::lontexconvert();  use Apache::lontexconvert();
 use Apache::lonlocal; # must not have ()  use Apache::lonlocal; # must not have ()
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
   use Apache::lonspeller();
   
 sub discussion_open {  sub discussion_open {
     my ($status)=@_;      my ($status)=@_;
Line 222  sub list_discussion { Line 223  sub list_discussion {
                 $newpostsflag = 1;                  $newpostsflag = 1;
             }              }
     my $hidden=($contrib{'hidden'}=~/\.$idx\./);      my $hidden=($contrib{'hidden'}=~/\.$idx\./);
               my $studenthidden=($contrib{'studenthidden'}=~/\.$idx\./);
     my $deleted=($contrib{'deleted'}=~/\.$idx\./);      my $deleted=($contrib{'deleted'}=~/\.$idx\./);
     my $origindex='0.';      my $origindex='0.';
               my $numoldver=0;
     if ($contrib{$idx.':replyto'}) {      if ($contrib{$idx.':replyto'}) {
                 if ( (($ENV{'environment.threadeddiscussion'}) && (($sortposts eq '') || ($sortposts eq 'ascdate'))) || ($sortposts eq 'thread')) {                  if ( (($ENV{'environment.threadeddiscussion'}) && (($sortposts eq '') || ($sortposts eq 'ascdate'))) || ($sortposts eq 'thread')) {
 # this is a follow-up message  # this is a follow-up message
Line 247  sub list_discussion { Line 250  sub list_discussion {
     }      }
     unless ((($hidden) && (!$seeid)) || ($deleted)) {      unless ((($hidden) && (!$seeid)) || ($deleted)) {
  $visible++;   $visible++;
                   if ($contrib{$idx.':history'}) {
                       if ($contrib{$idx.':history'} =~ /:/) {
                           my @oldversions = split/:/,$contrib{$idx.':history'};
                           $numoldver = @oldversions;
                       } else {
                           $numoldver = 1;
                       } 
                   }
  my $message=$contrib{$idx.':message'};   my $message=$contrib{$idx.':message'};
  $message=~s/\n/\<br \/\>/g;   $message=~s/\n/\<br \/\>/g;
  $message=&Apache::lontexconvert::msgtexconverted($message);   $message=&Apache::lontexconvert::msgtexconverted($message,undef,$numoldver);
                 my $subject=$contrib{$idx.':subject'};                  my $subject=$contrib{$idx.':subject'};
                 if (defined($subject)) {                  if (defined($subject)) {
                     $subject=~s/\n/\<br \/\>/g;                      $subject=~s/\n/\<br \/\>/g;
                     $subject=&Apache::lontexconvert::msgtexconverted($subject);                      $subject=&Apache::lontexconvert::msgtexconverted($subject,undef,$numoldver);
                 }                  }
  if ($contrib{$idx.':attachmenturl'}) {   if ($contrib{$idx.':attachmenturl'}) {
     my ($fname)      my ($fname)
Line 267  sub list_discussion { Line 278  sub list_discussion {
  if ($message) {   if ($message) {
     if ($hidden) {      if ($hidden) {
  $message='<font color="#888888">'.$message.'</font>';   $message='<font color="#888888">'.$message.'</font>';
                           if ($studenthidden) {
                               $message .='<br /><br />Deleted by poster (student).';
                           }
     }      }
     my $screenname=&Apache::loncommon::screenname(      my $screenname=&Apache::loncommon::screenname(
     $contrib{$idx.':sendername'},      $contrib{$idx.':sendername'},
Line 329  sub list_discussion { Line 343  sub list_discussion {
                         } else {                          } else {
                             @{$namesort{$lastname}{$firstname}} = ("$idx");                              @{$namesort{$lastname}{$firstname}} = ("$idx");
                         }                          }
  if ($seeid) {                          if ($ENV{"course.$cid.allow_discussion_post_editing"} =~ m/yes/i) {
     if ($hidden) {                              if (($ENV{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($ENV{'user.name'} eq $contrib{$idx.':sendername'})) {
  $sender.=' <a href="/adm/feedback?unhide='.                                  $sender.=' <a href="/adm/feedback?editdisc='.
     $ressymb.':::'.$idx;                                      $ressymb.':::'.$idx;
                                 if ($newpostsflag) {                                  if ($newpostsflag) {
                                     $sender .= '&previous='.$prevread;                                      $sender .= '&previous='.$prevread;
                                 }                                  }
                                 $sender .= '">'.&mt('Make Visible').'</a>';                                  $sender .= '" '.$target.'>'.&mt('Edit').'</a>';                                      unless ($seeid) {
                                       $sender.=" <a href=\"javascript:studentdelete('$ressymb','$idx','$newpostsflag','$prevread')";
                                       $sender .= '">'.&mt('Delete').'</a>';
                                   }
                               }
                           }
    if ($seeid) {
       if ($hidden) {
                                   unless ($studenthidden) {
       $sender.=' <a href="/adm/feedback?unhide='.
           $ressymb.':::'.$idx;
                                       if ($newpostsflag) {
                                           $sender .= '&previous='.$prevread;
                                       }
                                       $sender .= '">'.&mt('Make Visible').'</a>';
                                   }
     } else {      } else {
  $sender.=' <a href="/adm/feedback?hide='.   $sender.=' <a href="/adm/feedback?hide='.
     $ressymb.':::'.$idx;      $ressymb.':::'.$idx;
Line 346  sub list_discussion { Line 375  sub list_discussion {
                                 $sender .= '">'.&mt('Hide').'</a>';                                  $sender .= '">'.&mt('Hide').'</a>';
     }                           }                     
     $sender.=' <a href="/adm/feedback?deldisc='.      $sender.=' <a href="/adm/feedback?deldisc='.
  $ressymb.':::'.$idx;      $ressymb.':::'.$idx;
                             if ($newpostsflag) {                              if ($newpostsflag) {
                                 $sender .= '&previous='.$prevread;                                  $sender .= '&previous='.$prevread;
                             }                              }
Line 466  sub list_discussion { Line 495  sub list_discussion {
                             $sender.'</b> '.$vgrlink.' ('.                              $sender.'</b> '.$vgrlink.' ('.
                             localtime($posttime).')</td></tr>'.                              localtime($posttime).')</td></tr>'.
                             '</table><blockquote>'.$message.'</blockquote></p>';                              '</table><blockquote>'.$message.'</blockquote></p>';
                           if ($contrib{$idx.':history'}) {
                               my @postversions = ();
                               $discussionitems[$idx] .= '<br />'.&mt('This post has been edited by the author.').'<br/>'.&mt('Earlier version(s) were posted on: ');
                               if ($contrib{$idx.':history'} =~ m/:/) {
                                   @postversions = split/:/,$contrib{$idx.':history'};
                               } else {
                                   @postversions = ("$contrib{$idx.':history'}");
                               }
                               for (my $i=0; $i<@postversions; $i++) {
                                   my $version = $i+1;
                                   $discussionitems[$idx] .= '<b>'.$version.'.</b> - '.&Apache::lonlocal::locallocaltime($postversions[$i]).'  ';
                               }
                               $discussionitems[$idx] .= '<br />';
                           }
                     }                      }
                 }                  }
             }              }
Line 520  sub list_discussion { Line 563  sub list_discussion {
 # Print the discusssion  # Print the discusssion
  if ($outputtarget ne 'tex') {   if ($outputtarget ne 'tex') {
             my $colspan=$maxdepth+1;              my $colspan=$maxdepth+1;
               $discussion.= qq|
   <script>
      function studentdelete (symb,idx,newflag,previous) {
          var symbparm = symb+':::'+idx
          var prevparm = ""
          if (newflag == 1) {
              prevparm = "&previous="+previous
          }
          if (confirm("Are you sure you want to delete this post?\\nDeleted posts will no longer be visible to you and other students,\\nbut will continue to be visible to your instructor")) {
              document.location.href = "/adm/feedback?hide="+symbparm+prevparm
          }  
      }
   </script>
               |;
     $discussion.='<table bgcolor="#AAAAAA" cellpadding="2" cellspacing="2" border="0">';      $discussion.='<table bgcolor="#AAAAAA" cellpadding="2" cellspacing="2" border="0">';
     $discussion .='<tr><td bgcolor="#DDDDBB" colspan="'.$colspan.'">'.      $discussion .='<tr><td bgcolor="#DDDDBB" colspan="'.$colspan.'">'.
  '<table border="0" width="100%" bgcolor="#DDDDBB"><tr>';   '<table border="0" width="100%" bgcolor="#DDDDBB"><tr>';
Line 634  sub list_discussion { Line 691  sub list_discussion {
  $threadinsert='<br /><strong>Reply: '.$thisdepth.'</strong>';   $threadinsert='<br /><strong>Reply: '.$thisdepth.'</strong>';
     }      }
     $discussionitems[$alldiscussion{$_}]=~s/<\/td><td([^>]*)>/$threadinsert<\/td><td TeXwidth="65 mm" align="left">/;      $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/<a([^>]+)>(Edit|Hide|Delete|Reply|Submissions)<\/a>//g;
                     $discussionitems[$alldiscussion{$_}]=~s/(<b>|<\/b>|<\/a>|<a([^>]+)>)//g;                      $discussionitems[$alldiscussion{$_}]=~s/(<b>|<\/b>|<\/a>|<a([^>]+)>)//g;
           
                     #FIXME xmlparse can't be safely called from inside xmlparse                      #FIXME xmlparse can't be safely called from inside xmlparse
Line 722  ENDDISCUSS Line 779  ENDDISCUSS
 sub mail_screen {  sub mail_screen {
   my ($r,$feedurl,$options) = @_;    my ($r,$feedurl,$options) = @_;
   my $bodytag=&Apache::loncommon::bodytag('Resource Feedback and Discussion',    my $bodytag=&Apache::loncommon::bodytag('Resource Feedback and Discussion',
                                           '','onLoad="window.focus();"');                                            '','onLoad="window.focus();setposttype();"');
   my $title=&Apache::lonnet::gettitle($feedurl);    my $title=&Apache::lonnet::gettitle($feedurl);
   if (!$title) { $title = $feedurl; }    if (!$title) { $title = $feedurl; }
   my $quote='';    my $quote='';
   my $subject = '';    my $subject = '';
     my $oldmessage = '';
   my $prevtag = '';    my $prevtag = '';
   if ($ENV{'form.replydisc'}) {    my $parentmsg = '';
       my ($symb,$idx)=split(/\:\:\:/,$ENV{'form.replydisc'});    my $anonscript = (<<END);
     function setposttype() {
         return
     }
   END
     if (($ENV{'form.replydisc'}) || ($ENV{'form.editdisc'})) {
         my ($symb,$idx);
         if ($ENV{'form.replydisc'}) {
             ($symb,$idx)=split(/\:\:\:/,$ENV{'form.replydisc'});
         } else {
             ($symb,$idx)=split(/\:\:\:/,$ENV{'form.editdisc'});
         }
       my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},        my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
    $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'});
       unless (($contrib{'hidden'}=~/\.$idx\./) || ($contrib{'deleted'}=~/\.$idx\./)) {        unless (($contrib{'hidden'}=~/\.$idx\./) || ($contrib{'deleted'}=~/\.$idx\./)) {
   my $message=$contrib{$idx.':message'};            if ($ENV{'form.replydisc'}) {
   $message=~s/\n/\<br \/\>/g;                my $numoldver = 0;
   $quote='<blockquote>'.&Apache::lontexconvert::msgtexconverted($message).'</blockquote>';                if ($contrib{$idx.':history'}) {
           if ($idx > 0) {                    if ($contrib{$idx.':history'} =~ /:/) {
               $subject = 'Re: '.$contrib{$idx.':subject'};                        my @oldversions = split/:/,$contrib{$idx.':history'};
                         $numoldver = @oldversions;
                     } else {
                         $numoldver = 1;
                     }
                 }
         my $message=$contrib{$idx.':message'};
         $message=~s/\n/\<br \/\>/g;
         $quote='<blockquote>'.&Apache::lontexconvert::msgtexconverted($message,undef,$numoldver).'</blockquote>';
                 if ($idx > 0) {
                     if ($contrib{'subject'} =~ /::::\d+::::(.+)$/si) {
                         $subject = $1;
                     } else {
                         $subject = $contrib{$idx.':subject'};
                     }
                     $subject = 'Re: '.$subject;
                 }
             } else {
                 if ($contrib{$idx.':message'} =~ /::::\d+::::(.+)$/si) {
                     $oldmessage = $1;
                 } else {
                     $oldmessage = $contrib{$idx.':message'};
                 }
         $oldmessage=&HTML::Entities::encode($oldmessage,'<>&"');
                 if ($contrib{$idx.':subject'} =~ /::::\d+::::(.+)$/si) {
                     $subject = $1;
                 } else {
                     $subject = $contrib{$idx.':subject'};
                 }
                 if (defined($contrib{$idx.':replyto'})) {
                     $parentmsg = $contrib{$idx.':replyto'};
                 }
                 my $anonflag = 0;
                 if ($contrib{$idx.':anonymous'}) {
                     $anonflag = 1;
                 }
                 $anonscript = (<<END);
     function setposttype () {
         var currtype = $anonflag
         if (currtype == 1) {
             document.mailform.elements.discuss.checked = false
             document.mailform.elements.anondiscuss.checked = true
         }
         if (currtype == 0) {
             document.mailform.elements.anondiscuss.checked = false
             document.mailform.elements.discuss.checked = true
         }
         return
     }
   END
           }            }
       }        }
       if ($ENV{'form.previous'}) {        if ($ENV{'form.previous'}) {
Line 747  sub mail_screen { Line 865  sub mail_screen {
   }    }
   my $latexHelp=&Apache::loncommon::helpLatexCheatsheet();    my $latexHelp=&Apache::loncommon::helpLatexCheatsheet();
   my $htmlheader=&Apache::lonhtmlcommon::htmlareaheaders();    my $htmlheader=&Apache::lonhtmlcommon::htmlareaheaders();
   my $onsubmit='';  
   if ((&Apache::lonhtmlcommon::htmlareabrowser()) &&  
       (!&Apache::lonhtmlcommon::htmlareablocked())) {  
       $onsubmit='document.mailform.onsubmit();';  
   }  
   my $send=&mt('Send');    my $send=&mt('Send');
   $r->print(<<ENDDOCUMENT);    $r->print(<<END);
 <html>  <html>
 <head>  <head>
 <title>The LearningOnline Network with CAPA</title>  <title>The LearningOnline Network with CAPA</title>
Line 795  $htmlheader Line 908  $htmlheader
         }          }
   
         if (rec) {          if (rec) {
             $onsubmit              if (typeof(document.mailform.onsubmit)!='undefined') {
    document.mailform.onsubmit();
       }
     document.mailform.submit();      document.mailform.submit();
         } else {          } else {
             alert('Please check a feedback type.');              alert('Please check a feedback type.');
  }   }
     }      }
       $anonscript
 //-->  //-->
 </script>  </script>
 </head>  </head>
Line 810  $bodytag Line 926  $bodytag
 enctype="multipart/form-data">  enctype="multipart/form-data">
 $prevtag  $prevtag
 <input type="hidden" name="postdata" value="$feedurl" />  <input type="hidden" name="postdata" value="$feedurl" />
   END
     if ($ENV{'form.replydisc'}) {
         $r->print(<<END);
 <input type="hidden" name="replydisc" value="$ENV{'form.replydisc'}" />  <input type="hidden" name="replydisc" value="$ENV{'form.replydisc'}" />
   END
     } elsif ($ENV{'form.editdisc'}) {
        $r->print(<<END);
   <input type="hidden" name="editdisc" value ="$ENV{'form.editdisc'}" />
   <input type="hidden" name="parentmsg" value ="$parentmsg" />
   END
     }
     $r->print(<<ENDDOCUMENT);
 Please check at least one of the following feedback types:  Please check at least one of the following feedback types:
 $options<hr />  $options<hr />
 $quote  $quote
Line 819  $quote Line 946  $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" id="comment" cols="60" rows="10" wrap="hard">  <textarea name="comment" id="comment" cols="60" rows="10" wrap="hard">$oldmessage
 </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 1118  sub print_showposters { Line 1245  sub print_showposters {
         }          }
     }      }
     my $crs='/'.$ENV{'request.course.id'};      my $crs='/'.$ENV{'request.course.id'};
       if ($ENV{'request.course.sec'}) {
           $crs.='_'.$ENV{'request.course.sec'};
       }
     $crs=~s/\_/\//g;      $crs=~s/\_/\//g;
     my $seeid=&Apache::lonnet::allowed('rin',$crs);      my $seeid=&Apache::lonnet::allowed('rin',$crs);
     my %contrib=&Apache::lonnet::restore($ressymb,$ENV{'request.course.id'},      my %contrib=&Apache::lonnet::restore($ressymb,$ENV{'request.course.id'},
Line 1298  ENDREDIR Line 1428  ENDREDIR
   
 sub no_redirect_back {  sub no_redirect_back {
   my ($r,$feedurl) = @_;    my ($r,$feedurl) = @_;
     my $nofeed=&mt('Sorry, no feedback possible on this resource  ...');
   $r->print (<<ENDNOREDIR);    $r->print (<<ENDNOREDIR);
 <html>  <html>
 <head><title>Feedback not sent</title>  <head><title>Feedback not sent</title>
Line 1312  ENDNOREDIR Line 1443  ENDNOREDIR
 </head>  </head>
 <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>$nofeed</b>
 </body>  </body>
 </html>  </html>
 ENDNOREDIRTWO  ENDNOREDIRTWO
Line 1322  sub screen_header { Line 1453  sub screen_header {
     my ($feedurl) = @_;      my ($feedurl) = @_;
     my $msgoptions='';      my $msgoptions='';
     my $discussoptions='';      my $discussoptions='';
     unless ($ENV{'form.replydisc'}) {      unless (($ENV{'form.replydisc'}) || ($ENV{'form.editdisc'})) {
  if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) {   if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) {
     $msgoptions=       $msgoptions= 
  '<p><input type="checkbox" name="author" /> '.   '<p><input type="checkbox" name="author" /> '.
Line 1379  sub resource_output { Line 1510  sub resource_output {
 sub clear_out_html {  sub clear_out_html {
   my ($message,$override)=@_;    my ($message,$override)=@_;
   unless (&Apache::lonhtmlcommon::htmlareablocked()) { return $message; }    unless (&Apache::lonhtmlcommon::htmlareablocked()) { return $message; }
   # Always allow the <m>-tag
     my %html=(M=>1);
   # Check if more is allowed
   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> <M> <SPAN> <H1> <H2> <H3> <H4> <SUB>        # <BLOCKQUOTE> <DIV .*> <DIV> <IMG> <M> <SPAN> <H1> <H2> <H3> <H4> <SUB>
       # <SUP>        # <SUP>
       my %html=(B=>1, I=>1, P=>1, A=>1, LI=>1, OL=>1, UL=>1, EM=>1,        %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, SUB=>1, SUP=>1, SPAN=>1,        M=>1, SUB=>1, SUP=>1, SPAN=>1, 
  H1=>1, H2=>1, H3=>1, H4=>1, H5=>1);       H1=>1, H2=>1, H3=>1, H4=>1, H5=>1);
     }
       $message =~ s/\<(\/?\s*(\w+)[^\>\<]*)/  # Do the substitution of everything that is not explicitly allowed
     $message =~ s/\<(\/?\s*(\w+)[^\>\<]*)/
   {($html{uc($2)}&&(length($1)<1000))?"\<$1":"\&lt;$1"}/ge;    {($html{uc($2)}&&(length($1)<1000))?"\<$1":"\&lt;$1"}/ge;
       $message =~ s/(\<?\s*(\w+)[^\<\>]*)\>/    $message =~ s/(\<?\s*(\w+)[^\<\>]*)\>/
   {($html{uc($2)}&&(length($1)<1000))?"$1\>":"$1\&gt;"}/ge;    {($html{uc($2)}&&(length($1)<1000))?"$1\>":"$1\&gt;"}/ge;
   } else {  
       $message=~s/\</\&lt\;/g;  
       $message=~s/\>/\&gt\;/g;  
   }  
   return $message;    return $message;
 }  }
   
Line 1543  sub adddiscuss { Line 1674  sub adddiscuss {
  $contrib{'anonymous'}='true';   $contrib{'anonymous'}='true';
     }      }
     if (($symb) && ($email)) {      if (($symb) && ($email)) {
        $status='Adding to class discussion'.($anon?' (anonymous)':'').': '.          if ($ENV{'form.editdisc'}) {
         &Apache::lonnet::store(\%contrib,$symb,$ENV{'request.course.id'},              my %newcontrib = ();
               $contrib{'ip'}=$ENV{'REMOTE_ADDR'};
               $contrib{'host'}=$Apache::lonnet::perlvar{'lonHostID'};
               $contrib{'timestamp'} = time;
               $contrib{'history'} = '';
               my $numoldver = 0;
               my ($oldsymb,$oldidx)=split(/\:\:\:/,$ENV{'form.editdisc'});
   # get timestamp for last post and history
               my %oldcontrib=&Apache::lonnet::restore($oldsymb,$ENV{'request.course.id'},
                        $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
                        $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
               if (defined($oldcontrib{$oldidx.':replyto'})) {
                   $contrib{'replyto'} = $oldcontrib{$oldidx.':replyto'};
               }
               if (defined($oldcontrib{$oldidx.':history'})) {
                   if ($oldcontrib{$oldidx.':history'} =~ /:/) {
                       my @oldversions = split/:/,$oldcontrib{$oldidx.':history'};
                       $numoldver = @oldversions;
                   } else {
                       $numoldver = 1;
                   }
                   $contrib{'history'} = $oldcontrib{$oldidx.':history'}.':';
               }
               if (defined($oldcontrib{$oldidx.':subject'})) {
                   $contrib{'subject'} = $oldcontrib{$oldidx.':subject'}.'::::'.$numoldver.'::::'.$contrib{'subject'};            
               } 
               if (defined($oldcontrib{$oldidx.':message'})) {
                   $contrib{'message'} = $oldcontrib{$oldidx.':message'}.'::::'.$numoldver.'::::'.$contrib{'message'};
               }
               $contrib{'history'} .= $oldcontrib{$oldidx.':timestamp'};
               foreach (keys %contrib) {
                   my $key = $oldidx.':'.&Apache::lonnet::escape($oldsymb).':'.$_;                                                                               
                   $newcontrib{$key} = $contrib{$_};
               }
               my $put_reply = &Apache::lonnet::putstore($ENV{'request.course.id'},
                     \%newcontrib,
                     $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
                     $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
               $status='Editing class discussion'.($anon?' (anonymous)':'');
           } else {
              $status='Adding to class discussion'.($anon?' (anonymous)':'').': '.
              &Apache::lonnet::store(\%contrib,$symb,$ENV{'request.course.id'},
                      $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'});
           }
         my %storenewentry=($symb => time);          my %storenewentry=($symb => time);
         $status.='<br />'.&mt('Updating discussion time').': '.          $status.='<br />'.&mt('Updating discussion time').': '.
         &Apache::lonnet::put('discussiontimes',\%storenewentry,          &Apache::lonnet::put('discussiontimes',\%storenewentry,
Line 1574  sub show_preview { Line 1747  sub show_preview {
     my $r=shift;      my $r=shift;
     my $message=&clear_out_html($ENV{'form.comment'});      my $message=&clear_out_html($ENV{'form.comment'});
     $message=~s/\n/\<br \/\>/g;      $message=~s/\n/\<br \/\>/g;
       $message=&Apache::lonspeller::markeduptext($message);
     $message=&Apache::lontexconvert::msgtexconverted($message);      $message=&Apache::lontexconvert::msgtexconverted($message);
     my $subject=&clear_out_html($ENV{'form.subject'});      my $subject=&clear_out_html($ENV{'form.subject'});
     $subject=~s/\n/\<br \/\>/g;      $subject=~s/\n/\<br \/\>/g;
Line 1584  sub show_preview { Line 1758  sub show_preview {
 }  }
   
 sub generate_preview_button {  sub generate_preview_button {
     my $pre=&mt("Show Preview");      my $pre=&mt("Show Preview and Check Spelling");
     return(<<ENDPREVIEW);      return(<<ENDPREVIEW);
 <form name="preview" action="/adm/feedback?preview=1" method="post" target="preview">  <form name="preview" action="/adm/feedback?preview=1" method="post" target="preview">
 <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="document.mailform.onsubmit();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)!='undefined') {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 1606  sub handler { Line 1780  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','modifydisp','changes','navmaps','navurl','sortfilter','sortposts','applysort','rolefilter','statusfilter','sectionpick','posterlist','userpick']);           ['hide','unhide','deldisc','postdata','preview','replydisc','editdisc','threadedon','threadedoff','onlyunread','allposts','previous','markread','markonread','markondisp','modifydisp','changes','navmaps','navurl','sortfilter','sortposts','applysort','rolefilter','statusfilter','sectionpick','posterlist','userpick']);
   if ($ENV{'form.posterlist'}) {    if ($ENV{'form.posterlist'}) {
       &Apache::loncommon::content_type($r,'text/html');        &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;        $r->send_http_header;
Line 1826  ENDREDIR Line 2000  ENDREDIR
   
                   
     my $currenthidden=$contrib{'hidden'};      my $currenthidden=$contrib{'hidden'};
       my $currentstudenthidden=$contrib{'studenthidden'};
   
       my $crs='/'.$ENV{'request.course.id'};
       if ($ENV{'request.course.sec'}) {
           $crs.='_'.$ENV{'request.course.sec'};
       }
       $crs=~s/\_/\//g;
       my $seeid=&Apache::lonnet::allowed('rin',$crs);
           
     if ($ENV{'form.hide'}) {      if ($ENV{'form.hide'}) {
  $currenthidden.='.'.$idx.'.';   $currenthidden.='.'.$idx.'.';
           unless ($seeid) {
               $currentstudenthidden.='.'.$idx.'.';
           }
     } else {      } else {
         $currenthidden=~s/\.$idx\.//g;          $currenthidden=~s/\.$idx\.//g;
     }      }
     my %newhash=('hidden' => $currenthidden);      my %newhash=('hidden' => $currenthidden);
       if ( ($ENV{'form.hide'}) && (!$seeid) ) {
           $newhash{'studenthidden'} = $currentstudenthidden;
       }
   
     &Apache::lonnet::store(\%newhash,$symb,$ENV{'request.course.id'},      &Apache::lonnet::store(\%newhash,$symb,$ENV{'request.course.id'},
                      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},                       $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
Line 1899  ENDREDIR Line 2087  ENDREDIR
       $symb=(split(/\:\:\:/,$ENV{'form.replydisc'}))[0];        $symb=(split(/\:\:\:/,$ENV{'form.replydisc'}))[0];
       my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);        my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
       $feedurl=&Apache::lonnet::clutter($url);        $feedurl=&Apache::lonnet::clutter($url);
     } elsif ($ENV{'form.editdisc'}) {
         $symb=(split(/\:\:\:/,$ENV{'form.editdisc'}))[0];
         my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
         $feedurl=&Apache::lonnet::clutter($url);
   } else {    } else {
       $symb=&Apache::lonnet::symbread($feedurl);        $symb=&Apache::lonnet::symbread($feedurl);
   }    }

Removed from v.1.101  
changed lines
  Added in v.1.107


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