Diff for /loncom/interface/lonfeedback.pm between versions 1.50 and 1.70

version 1.50, 2003/08/06 17:00:30 version 1.70, 2003/11/24 16:00:45
Line 51  use Apache::Constants qw(:common); Line 51  use Apache::Constants qw(:common);
 use Apache::lonmsg();  use Apache::lonmsg();
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lontexconvert();  use Apache::lontexconvert();
   use Apache::lonlocal;
   
   sub list_discussion {
       my ($mode,$status,$symb)=@_;
       my $discussiononly=0;
       if ($mode eq 'board') { $discussiononly=1; }
       unless ($ENV{'request.course.id'}) { return ''; }
       my $crs='/'.$ENV{'request.course.id'};
       if ($ENV{'request.course.sec'}) {
    $crs.='_'.$ENV{'request.course.sec'};
       }                 
       $crs=~s/\_/\//g;
       unless ($symb) {
    $symb=&Apache::lonnet::symbread();
       }
       unless ($symb) { return ''; }
       my $seeid=&Apache::lonnet::allowed('rin',$crs);
       my $viewgrades=&Apache::lonnet::allowed('vgr',$crs);
       my @discussionitems=();
       my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
     $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
     $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
       my $visible=0;
       my @depth=();
       my @original=();
       my @index=();
       my @replies=();
       my %alldiscussion=();
       my $maxdepth=0;
   
       my $target='';
       unless ($ENV{'browser.interface'} eq 'textual' ||
       $ENV{'environment.remote'} eq 'off' ) {
    $target='target="LONcom"';
       }
       if ($contrib{'version'}) {
    for (my $id=1;$id<=$contrib{'version'};$id++) {
       my $idx=$id;
       my $hidden=($contrib{'hidden'}=~/\.$idx\./);
       my $deleted=($contrib{'deleted'}=~/\.$idx\./);
       my $origindex='0.';
       if (($contrib{$idx.':replyto'}) && ($ENV{'environment.threadeddiscussion'})) {
   # this is a follow-up message
    $original[$idx]=$original[$contrib{$idx.':replyto'}];
    $depth[$idx]=$depth[$contrib{$idx.':replyto'}]+1;
    $origindex=$index[$contrib{$idx.':replyto'}];
    if ($depth[$idx]>$maxdepth) { $maxdepth=$depth[$idx]; }
       } else {
   # this is an original message
    $original[$idx]=0;
    $depth[$idx]=0;
       }
       if ($replies[$depth[$idx]]) {
    $replies[$depth[$idx]]++;
       } else {
    $replies[$depth[$idx]]=1;
       }
       unless ((($hidden) && (!$seeid)) || ($deleted)) {
    $visible++;
    my $message=$contrib{$idx.':message'};
    $message=~s/\n/\<br \/\>/g;
    $message=&Apache::lontexconvert::msgtexconverted($message);
    if ($contrib{$idx.':attachmenturl'}) {
       my ($fname,$ft)
                           =($contrib{$idx.':attachmenturl'}=~/\/(\w+)\.(\w+)$/);
       $message.='<p>'.&mt('Attachment').': <a href="'.
    &Apache::lonnet::tokenwrapper(
                                                $contrib{$idx.':attachmenturl'}).
    '"><tt>'.$fname.'.'.$ft.'</tt></a></p>';
    }
    if ($message) {
       if ($hidden) {
    $message='<font color="#888888">'.$message.'</font>';
       }
       my $screenname=&Apache::loncommon::screenname(
       $contrib{$idx.':sendername'},
       $contrib{$idx.':senderdomain'});
       my $plainname=&Apache::loncommon::nickname(
       $contrib{$idx.':sendername'},
       $contrib{$idx.':senderdomain'});
       
       my $sender=&mt('Anonymous');
       if ((!$contrib{$idx.':anonymous'}) || ($seeid)) {
    $sender=&Apache::loncommon::aboutmewrapper(
    $plainname,
    $contrib{$idx.':sendername'},
    $contrib{$idx.':senderdomain'}).' ('.
    $contrib{$idx.':sendername'}.' at '.
    $contrib{$idx.':senderdomain'}.')';
    if ($contrib{$idx.':anonymous'}) {
       $sender.=' ['.&mt('anonymous').'] '.
    $screenname;
    }
    if ($seeid) {
       if ($hidden) {
    $sender.=' <a href="/adm/feedback?unhide='.
       $symb.':::'.$idx.'">'.&mt('Make Visible').'</a>';
       } else {
    $sender.=' <a href="/adm/feedback?hide='.
       $symb.':::'.$idx.'">'.&mt('Hide').'</a>';
       }                     
       $sender.=' <a href="/adm/feedback?deldisc='.
    $symb.':::'.$idx.'">'.&mt('Delete').'</a>';
    }
    if (&Apache::lonnet::allowed('pch',
      $ENV{'request.course.id'}.
    ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
       $sender.=' <a href="/adm/feedback?replydisc='.
    $symb.':::'.$idx.'" '.$target.'>'.&mt('Reply').'</a>';
    }
       } else {
    if ($screenname) {
       $sender='<i>'.$screenname.'</i>';
    }
       }
       my $vgrlink;
       if ($viewgrades) {
    $vgrlink=&Apache::loncommon::submlink('Submissions',
               $contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'},$symb);
       }
   #figure out at what position this needs to print
       my $thisindex=$idx;
       if ($ENV{'environment.threadeddiscussion'}) {
    $thisindex=$origindex.substr('00'.$replies[$depth[$idx]],-2,2);
       }
       $alldiscussion{$thisindex}=$idx;
       $index[$idx]=$thisindex;
       $discussionitems[$idx]='<p><b>'.$sender.'</b> '.$vgrlink.' ('.
    localtime($contrib{$idx.':timestamp'}).
    '):<blockquote>'.$message.
    '</blockquote></p>';
           }
       } 
    }
       }
       my $discussion='';
       if ($visible) {
   # Print a the discusssion
    $discussion.='<table bgcolor="#AAAAAA" cellpadding="2" cellspacing="2" border="0">';
    if ($visible>2) {
       my $colspan=$maxdepth+1;
       $discussion.='<tr><td bgcolor="DDDDBB" colspan="'.$colspan.'">'.
     '<a href="/adm/feedback?threadedon='.$symb.'">'.&mt('Threaded View').'</a>&nbsp;&nbsp;'.
     '<a href="/adm/feedback?threadedoff='.$symb.'">'.&mt('Chronological View').'</a>'.
     '</td></tr>';
    }
   
    foreach (sort { $a <=> $b } keys %alldiscussion) {
       $discussion.="\n<tr>";
       my $thisdepth=$depth[$alldiscussion{$_}];
       for (1..$thisdepth) {
    $discussion.='<td>&nbsp;&nbsp;&nbsp;</td>';
       }
       my $colspan=$maxdepth-$thisdepth+1;
               $discussion.="<td  bgcolor='#CCCCCC' colspan='".$colspan."'>".$discussionitems[$alldiscussion{$_}].
    "</td></tr>";
    }
           $discussion.='</table>';
       }
       if ($discussiononly) {
    $discussion.=(<<ENDDISCUSS);
   <form action="/adm/feedback" method="post" name="mailform" enctype="multipart/form-data">
   <input type="submit" name="discuss" value="Post Discussion" />
   <input type="submit" name="anondiscuss" value="Post Anonymous Discussion" />
   <input type="hidden" name="symb" value="$symb" />
   <input type="hidden" name="sendit" value="true" />
   <br />
   <font size="1">Note: in anonymous discussion, your name is visible only to
   course faculty</font><br />
   <textarea name="comment" cols="60" rows="10" wrap="hard"></textarea>
   <p>
   Attachment (128 KB max size): <input type="file" name="attachment" />
   </p>
   </form>
   ENDDISCUSS
         $discussion.=&generate_preview_button();
      }
      return $discussion;
   }
   
 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();"');
     my $title=&Apache::lonnet::gettitle($feedurl);
     if (!$title) { $title = $feedurl; }
     my $quote='';
     if ($ENV{'form.replydisc'}) {
         my ($symb,$idx)=split(/\:\:\:/,$ENV{'form.replydisc'});
         my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
      $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
         unless (($contrib{'hidden'}=~/\.$idx\./) || ($contrib{'deleted'}=~/\.$idx\./)) { 
     my $message=$contrib{$idx.':message'};
     $message=~s/\n/\<br \/\>/g;
     $quote='<blockquote>'.&Apache::lontexconvert::msgtexconverted($message).'</blockquote>';
         }
     }
   my $latexHelp = Apache::loncommon::helpLatexCheatsheet();    my $latexHelp = Apache::loncommon::helpLatexCheatsheet();
   $r->print(<<ENDDOCUMENT);    $r->print(<<ENDDOCUMENT);
 <html>  <html>
 <head>  <head>
 <title>The LearningOnline Network with CAPA</title>  <title>The LearningOnline Network with CAPA</title>
 <meta http-equiv="pragma" content="no-cache"></meta>  <meta http-equiv="pragma" content="no-cache"></meta>
 <script>  <script type="text/javascript">
   //<!--
     function gosubmit() {      function gosubmit() {
         var rec=0;          var rec=0;
         if (typeof(document.mailform.elements.author)!="undefined") {          if (typeof(document.mailform.elements.author)!="undefined") {
Line 102  sub mail_screen { Line 296  sub mail_screen {
             alert('Please check a feedback type.');              alert('Please check a feedback type.');
  }   }
     }      }
   //-->
 </script>  </script>
 </head>  </head>
 $bodytag  $bodytag
 <h2><tt>$feedurl</tt></h2>  <h2><tt>$title</tt></h2>
 <form action="/adm/feedback" method="post" name="mailform"  <form action="/adm/feedback" method="post" name="mailform"
 enctype="multipart/form-data">  enctype="multipart/form-data">
 <input type=hidden name=postdata value="$feedurl">  <input type="hidden" name="postdata" value="$feedurl" />
   <input type="hidden" name="replydisc" value="$ENV{'form.replydisc'}" />
 Please check at least one of the following feedback types:  Please check at least one of the following feedback types:
 $options<hr>  $options<hr />
 My question/comment/feedback:<p>  $quote
   <p>My question/comment/feedback:</p>
   <p>
 $latexHelp  $latexHelp
 <textarea name=comment cols=60 rows=10 wrap=hard>  <textarea name="comment" cols="60" rows="10" wrap="hard">
 </textarea><p>  </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>
 <p>  <p>
 <input type="hidden" name="sendit" value="1" />  <input type="hidden" name="sendit" value="1" />
 <input type=button value="Send Feedback" onClick='gosubmit();' />  <input type="button" value="Send Feedback" onClick='gosubmit();' />
 </p>  </p>
 </form>  </form>
 ENDDOCUMENT  ENDDOCUMENT
Line 128  $r->print(&generate_preview_button().'</ Line 327  $r->print(&generate_preview_button().'</
   
 sub fail_redirect {  sub fail_redirect {
   my ($r,$feedurl) = @_;    my ($r,$feedurl) = @_;
     if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };
   $r->print (<<ENDFAILREDIR);    $r->print (<<ENDFAILREDIR);
 <head><title>Feedback not sent</title>  <head><title>Feedback not sent</title>
 <meta http-equiv="pragma" content="no-cache"></meta>  <meta http-equiv="pragma" content="no-cache" />
 <meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl">  <meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl" />
 </head>  </head>
 <html>  <html>
 <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>
 </body>  </body>
 </html>  </html>
Line 144  ENDFAILREDIR Line 344  ENDFAILREDIR
   
 sub redirect_back {  sub redirect_back {
   my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$status) = @_;    my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$status) = @_;
     if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };
   $r->print (<<ENDREDIR);    $r->print (<<ENDREDIR);
 <head>  <head>
 <title>Feedback sent</title>  <title>Feedback sent</title>
 <meta http-equiv="pragma" content="no-cache"></meta>  <meta http-equiv="pragma" content="no-cache" />
 <meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl">  <meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl">
 </head>  </head>
 <html>  <html>
 <body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { this.document.reldt.submit(); self.close(); }'>  <body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { this.document.reldt.submit(); self.close(); }'>
 <img align=right src=/adm/lonIcons/lonlogos.gif>  <img align="right" src="/adm/lonIcons/lonlogos.gif" />
 $typestyle  $typestyle
 <b>Sent $sendsomething message(s), and $sendposts post(s).</b>  <b>Sent $sendsomething message(s), and $sendposts post(s).</b>
 <font color=red>$status</font>  <font color="red">$status</font>
 <form name="reldt" action="$feedurl" target="loncapaclient">  <form name="reldt" action="$feedurl" target="loncapaclient">
 </form>  </form>
 </body>  </body>
Line 167  sub no_redirect_back { Line 368  sub no_redirect_back {
   my ($r,$feedurl) = @_;    my ($r,$feedurl) = @_;
   $r->print (<<ENDNOREDIR);    $r->print (<<ENDNOREDIR);
 <head><title>Feedback not sent</title>  <head><title>Feedback not sent</title>
 <meta http-equiv="pragma" content="no-cache"></meta>  <meta http-equiv="pragma" content="no-cache" />
 ENDNOREDIR  ENDNOREDIR
   
   if ($feedurl!~/^\/adm\/feedback/) {     if ($feedurl!~/^\/adm\/feedback/) { 
Line 178  ENDNOREDIR Line 379  ENDNOREDIR
 </head>  </head>
 <html>  <html>
 <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>
 </body>  </body>
 </html>  </html>
Line 186  ENDNOREDIRTWO Line 387  ENDNOREDIRTWO
 }  }
   
 sub screen_header {  sub screen_header {
   my ($feedurl) = @_;      my ($feedurl) = @_;
   my $msgoptions='';      my $msgoptions='';
   my $discussoptions='';      my $discussoptions='';
   if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) {      unless ($ENV{'form.replydisc'}) {
     $msgoptions=    if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) {
       '<p><input type=checkbox name=author> Feedback to resource author';      $msgoptions= 
   }   '<p><input type="checkbox" name="author" /> '.
   if (&feedback_available(1)) {   &mt('Feedback to resource author').'</p>';
     $msgoptions.=   }
     '<br><input type=checkbox name=question> Question about resource content';   if (&feedback_available(1)) {
   }      $msgoptions.=
   if (&feedback_available(0,1)) {   '<br /><input type="checkbox" name="question" /> '.
     $msgoptions.=   &mt('Question about resource content');
       '<br><input type=checkbox name=course> '.   }
  'Question/Comment/Feedback about course content';   if (&feedback_available(0,1)) {
   }      $msgoptions.=
   if (&feedback_available(0,0,1)) {   '<br /><input type="checkbox" name="course" /> '.
     $msgoptions.=   &mt('Question/Comment/Feedback about course content');
       '<br><input type=checkbox name=policy> '.   }
  'Question/Comment/Feedback about course policy';   if (&feedback_available(0,0,1)) {
   }      $msgoptions.=
    '<br /><input type="checkbox" name="policy" /> '.
   if ($ENV{'request.course.id'}) {   &mt('Question/Comment/Feedback about course policy');
       if (&Apache::lonnet::allowed('pch',   }
         $ENV{'request.course.id'}.      }
         ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {      if ($ENV{'request.course.id'}) {
     $discussoptions='<input type="checkbox" name="discuss" onClick="this.form.anondiscuss.checked=false;"> '.   if (&Apache::lonnet::allowed('pch',
  'Contribution to course discussion of resource';       $ENV{'request.course.id'}.
     $discussoptions.='<br><input type="checkbox" name="anondiscuss" onClick="this.form.discuss.checked=false;"> '.       ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
  'Anonymous contribution to course discussion of resource'.      $discussoptions='<input type="checkbox" name="discuss" onClick="this.form.anondiscuss.checked=false;" /> '.
         ' <i>(name only visible to course faculty)</i>';   &mt('Contribution to course discussion of resource');
       $discussoptions.='<br /><input type="checkbox" name="anondiscuss" onClick="this.form.discuss.checked=false;" /> '.
    &mt('Anonymous contribution to course discussion of resource').
    ' <i>('.&mt('name only visible to course faculty').')</i>';
       }        }
   }      }
   if ($msgoptions) { $msgoptions='<h2>Sending Messages</h2>'.$msgoptions; }      if ($msgoptions) { $msgoptions='<h2>'.&mt('Sending Messages').'</h2>'.$msgoptions; }
   if ($discussoptions) {       if ($discussoptions) { 
      $discussoptions='<h2>Discussion Contributions</h2>'.$discussoptions; }   $discussoptions='<h2>'.&mt('Discussion Contributions').'</h2>'.$discussoptions; }
   return $msgoptions.$discussoptions;      return $msgoptions.$discussoptions;
 }  }
   
 sub resource_output {  sub resource_output {
Line 246  sub clear_out_html { Line 450  sub clear_out_html {
       # 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>
       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);
   
       $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;
       $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 {    } else {
       $message=~s/\<\/*m\s*\>//g;  
       $message=~s/\</\&lt\;/g;        $message=~s/\</\&lt\;/g;
       $message=~s/\>/\&gt\;/g;        $message=~s/\>/\&gt\;/g;
   }    }
Line 270  ENDEMAIL Line 474  ENDEMAIL
     my $citations=<<"ENDCITE";      my $citations=<<"ENDCITE";
 <h2>Previous attempts of student (if applicable)</h2>  <h2>Previous attempts of student (if applicable)</h2>
 $prevattempts  $prevattempts
 <p><hr>  <br /><hr />
 <h2>Original screen output (if applicable)</h2>  <h2>Original screen output (if applicable)</h2>
 $usersaw  $usersaw
 <h2>Correct Answer(s) (if applicable)</h2>  <h2>Correct Answer(s) (if applicable)</h2>
Line 317  sub decide_receiver { Line 521  sub decide_receiver {
     }       } 
   }    }
   if ($ENV{'form.course'}||$course) {    if ($ENV{'form.course'}||$course) {
     $typestyle.='Submitting as Comment<br>';      $typestyle.='Submitting as Comment<br />';
     foreach (split(/\,/,      foreach (split(/\,/,
    $ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'})     $ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'})
      ) {       ) {
Line 326  sub decide_receiver { Line 530  sub decide_receiver {
     }       } 
   }    }
   if ($ENV{'form.policy'}||$policy) {    if ($ENV{'form.policy'}||$policy) {
     $typestyle.='Submitting as Policy Feedback<br>';      $typestyle.='Submitting as Policy Feedback<br />';
     foreach (split(/\,/,      foreach (split(/\,/,
    $ENV{'course.'.$ENV{'request.course.id'}.'.policy.email'})     $ENV{'course.'.$ENV{'request.course.id'}.'.policy.email'})
      ) {       ) {
Line 357  sub send_msg { Line 561  sub send_msg {
       unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$_),        unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$_),
                'Feedback ['.$declutter.']',$email,$citations,$feedurl,                 'Feedback ['.$declutter.']',$email,$citations,$feedurl,
                 $attachmenturl)=~/ok/) {                  $attachmenturl)=~/ok/) {
  $status.='<br>Error sending message to '.$_.'<br>';   $status.='<br />'.&mt('Error sending message to').' '.$_.'<br />';
       } else {        } else {
  $sendsomething++;   $sendsomething++;
       }        }
Line 371  sub send_msg { Line 575  sub send_msg {
        $newrecord{'resource'}=$feedurl;         $newrecord{'resource'}=$feedurl;
        $newrecord{'subnumber'}=$record{'subnumber'}+1;         $newrecord{'subnumber'}=$record{'subnumber'}+1;
        unless (&Apache::lonnet::cstore(\%newrecord,'_feedback') eq 'ok') {         unless (&Apache::lonnet::cstore(\%newrecord,'_feedback') eq 'ok') {
    $status.='<br>Not registered<br>';     $status.='<br />'.&mt('Not registered').'<br />';
        }         }
     }      }
                 
Line 393  sub adddiscuss { Line 597  sub adddiscuss {
                                    $ENV{'environment.lastname'}.' '.                                     $ENV{'environment.lastname'}.' '.
                                    $ENV{'enrironment.generation'},                                     $ENV{'enrironment.generation'},
                  'attachmenturl'=> $attachmenturl);                   'attachmenturl'=> $attachmenturl);
       if ($ENV{'form.replydisc'}) {
    $contrib{'replyto'}=(split(/\:\:\:/,$ENV{'form.replydisc'}))[1];
       }
     if ($anon) {      if ($anon) {
  $contrib{'anonymous'}='true';   $contrib{'anonymous'}='true';
     }      }
Line 402  sub adddiscuss { Line 609  sub adddiscuss {
                      $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>Updating discussion time: '.          $status.='<br />'.&mt('Updating discussion time').': '.
         &Apache::lonnet::put('discussiontimes',\%storenewentry,          &Apache::lonnet::put('discussiontimes',\%storenewentry,
                      $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'});
Line 413  sub adddiscuss { Line 620  sub adddiscuss {
        my %newrecord=();         my %newrecord=();
        $newrecord{'resource'}=$symb;         $newrecord{'resource'}=$symb;
        $newrecord{'subnumber'}=$record{'subnumber'}+1;         $newrecord{'subnumber'}=$record{'subnumber'}+1;
        $status.='<br>Registering: '.         $status.='<br />'.&mt('Registering').': '.
                &Apache::lonnet::cstore(\%newrecord,'_discussion');                 &Apache::lonnet::cstore(\%newrecord,'_discussion');
     }      }
     } else {      } else {
  $status.='Failed.';   $status.='Failed.';
     }      }
     return $status.'<br>';         return $status.'<br />';   
 }  }
   
 # ----------------------------------------------------------- Preview function  # ----------------------------------------------------------- Preview function
Line 434  sub show_preview { Line 641  sub show_preview {
 }  }
   
 sub generate_preview_button {  sub generate_preview_button {
       my $pre=&mt("Show Preview");
     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="comment" />  <input type="hidden" name="comment" />
 <input type="button" value="Show Preview"  <input type="button" value="$pre"
 onClick="this.form.comment.value=document.mailform.comment.value;this.form.submit();" />  onClick="this.form.comment.value=document.mailform.comment.value;this.form.submit();" />
 </form>  </form>
 ENDPREVIEW  ENDPREVIEW
Line 453  sub handler { Line 661  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']);           ['hide','unhide','deldisc','postdata','preview','replydisc','threadedon','threadedoff']);
   
   if (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) {    if (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) {
 # ----------------------------------------------------------------- Hide/unhide  # ----------------------------------------------------------------- Hide/unhide
Line 463  sub handler { Line 671  sub handler {
     my $entry=$ENV{'form.hide'}?$ENV{'form.hide'}:$ENV{'form.unhide'};      my $entry=$ENV{'form.hide'}?$ENV{'form.hide'}:$ENV{'form.unhide'};
   
     my ($symb,$idx)=split(/\:\:\:/,$entry);      my ($symb,$idx)=split(/\:\:\:/,$entry);
     my ($map,$ind,$url)=split(/\_\_\_/,$symb);      my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
   
     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'},
Line 484  sub handler { Line 692  sub handler {
      $ENV{'course.'.$ENV{'request.course.id'}.'.num'});       $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
   
     &redirect_back($r,&Apache::lonnet::clutter($url),      &redirect_back($r,&Apache::lonnet::clutter($url),
        'Changed discussion status<p>','0','0');         &mt('Changed discussion status').'<br />','0','0');
     } elsif (($ENV{'form.threadedon'}) || ($ENV{'form.threadedoff'})) {
         if ($ENV{'form.threadedon'}) {
     &Apache::lonnet::put('environment',{'threadeddiscussion' => 'on'});
     &Apache::lonnet::appenv('environment.threadeddiscussion' => 'on');
         } else {
      &Apache::lonnet::del('environment',['threadeddiscussion']);
     &Apache::lonnet::delenv('environment\.threadeddiscussion');
        }
         my $symb=$ENV{'form.threadedon'}?$ENV{'form.threadedon'}:$ENV{'form.threadedoff'};
         my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
         &redirect_back($r,&Apache::lonnet::clutter($url),
        &mt('Changed discussion view mode').'<br />','0','0');
   } elsif ($ENV{'form.deldisc'}) {    } elsif ($ENV{'form.deldisc'}) {
 # --------------------------------------------------------------- Hide for good  # --------------------------------------------------------------- Hide for good
     $r->content_type('text/html');      $r->content_type('text/html');
Line 493  sub handler { Line 713  sub handler {
     my $entry=$ENV{'form.deldisc'};      my $entry=$ENV{'form.deldisc'};
   
     my ($symb,$idx)=split(/\:\:\:/,$entry);      my ($symb,$idx)=split(/\:\:\:/,$entry);
     my ($map,$ind,$url)=split(/\_\_\_/,$symb);      my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
   
     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'},
Line 511  sub handler { Line 731  sub handler {
      $ENV{'course.'.$ENV{'request.course.id'}.'.num'});       $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
   
     &redirect_back($r,&Apache::lonnet::clutter($url),      &redirect_back($r,&Apache::lonnet::clutter($url),
        'Changed discussion status<p>','0','0');         &mt('Changed discussion status').'<br />','0','0');
   } elsif ($ENV{'form.preview'}) {    } elsif ($ENV{'form.preview'}) {
 # -------------------------------------------------------- User wants a preview  # -------------------------------------------------------- User wants a preview
       &show_preview($r);        &show_preview($r);
Line 521  sub handler { Line 741  sub handler {
   $feedurl=~s/^http\:\/\///;    $feedurl=~s/^http\:\/\///;
   $feedurl=~s/^$ENV{'SERVER_NAME'}//;    $feedurl=~s/^$ENV{'SERVER_NAME'}//;
   $feedurl=~s/^$ENV{'HTTP_HOST'}//;    $feedurl=~s/^$ENV{'HTTP_HOST'}//;
     $feedurl=~s/\?.+$//;
   
   my $symb=&Apache::lonnet::symbread($feedurl);    my $symb;
     if ($ENV{'form.replydisc'}) {
         $symb=(split(/\:\:\:/,$ENV{'form.replydisc'}))[0];
         my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
         $feedurl=&Apache::lonnet::clutter($url);
     } else {
         $symb=&Apache::lonnet::symbread($feedurl);
     }
   unless ($symb) {    unless ($symb) {
       $symb=$ENV{'form.symb'};        $symb=$ENV{'form.symb'};
       if ($symb) {        if ($symb) {
   my ($map,$id,$url)=split(/\_\_\_/,$symb);    my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
           $feedurl=&Apache::lonnet::clutter($url);            $feedurl=&Apache::lonnet::clutter($url);
       }        }
   }    }
Line 618  sub handler { Line 846  sub handler {
    }     }
   } else {    } else {
 # Ambiguous Problem Resource  # Ambiguous Problem Resource
     $r->internal_redirect('/adm/ambiguous');        if ( &Apache::lonnet::mod_perl_version() == 2 ) {
     &Apache::lonnet::cleanenv();
         }
         $r->internal_redirect('/adm/ambiguous');
   }    }
 }  }
   return OK;    return OK;

Removed from v.1.50  
changed lines
  Added in v.1.70


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.