Diff for /loncom/interface/lonfeedback.pm between versions 1.43 and 1.56

version 1.43, 2003/03/30 21:58:17 version 1.56, 2003/09/15 18:43:54
Line 52  use Apache::lonmsg(); Line 52  use Apache::lonmsg();
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lontexconvert();  use Apache::lontexconvert();
   
   sub list_discussion {
       my ($discussiononly,$symb)=@_;
       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 $discussion='';
       my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
     $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
     $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
       if ($contrib{'version'}) {
    unless ($discussiononly) {
       $discussion.=
    '<address><hr />';
    }
    my $idx;
    for ($idx=1;$idx<=$contrib{'version'};$idx++) {
       my $hidden=($contrib{'hidden'}=~/\.$idx\./);
       my $deleted=($contrib{'deleted'}=~/\.$idx\./);
       unless ((($hidden) && (!$seeid)) || ($deleted)) {
    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>Attachment: <a href="'.
    &Apache::lonnet::tokenwrapper(
                                                $contrib{$idx.':attachmenturl'}).
    '"><tt>'.$fname.'.'.$ft.'</tt></a>';
    }
    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='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.=' [anonymous] '.
    $screenname;
    }
    if ($seeid) {
       if ($hidden) {
    $sender.=' <a href="/adm/feedback?unhide='.
       $symb.':::'.$idx.'">Make Visible</a>';
       } else {
    $sender.=' <a href="/adm/feedback?hide='.
       $symb.':::'.$idx.'">Hide</a>';
       }                     
       $sender.=' <a href="/adm/feedback?deldisc='.
    $symb.':::'.$idx.'">Delete</a>';
    }
       } else {
    if ($screenname) {
       $sender='<i>'.$screenname.'</i>';
    }
       }
       my $vgrlink;
       if ($viewgrades) {
    $vgrlink=&Apache::loncommon::submlink('Submissions',
               $contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'},$symb);
       }
       $discussion.='<p><b>'.$sender.'</b> '.$vgrlink.' ('.
    localtime($contrib{$idx.':timestamp'}).
    '):<blockquote>'.$message.
    '</blockquote></p>';
           }
       } 
    }
    unless ($discussiononly) {
       $discussion.='</address>';
    }
       }
       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 $latexHelp = Apache::loncommon::helpLatexCheatsheet();
   $r->print(<<ENDDOCUMENT);    $r->print(<<ENDDOCUMENT);
 <html>  <html>
 <head>  <head>
Line 104  sub mail_screen { Line 222  sub mail_screen {
 </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">
 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>  My question/comment/feedback:<p>
   $latexHelp
 <textarea name=comment cols=60 rows=10 wrap=hard>  <textarea name=comment cols=60 rows=10 wrap=hard>
 </textarea><p>  </textarea><p>
 Attachment (128 KB max size): <input type="file" name="attachment" />  Attachment (128 KB max size): <input type="file" name="attachment" />
Line 149  sub redirect_back { Line 268  sub redirect_back {
 <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" 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>
 </body>  </body>
 </html>  </html>
 ENDREDIR  ENDREDIR
Line 173  ENDNOREDIR Line 294  ENDNOREDIR
   $r->print (<<ENDNOREDIRTWO);    $r->print (<<ENDNOREDIRTWO);
 </head>  </head>
 <html>  <html>
 <body bgcolor="#FFFFFF">  <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>
Line 183  ENDNOREDIRTWO Line 304  ENDNOREDIRTWO
   
 sub screen_header {  sub screen_header {
   my ($feedurl) = @_;    my ($feedurl) = @_;
   my $options='';    my $msgoptions='';
     my $discussoptions='';
   if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) {    if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) {
     $options=       $msgoptions= 
       '<p><input type=checkbox name=author> Feedback to resource author';        '<p><input type=checkbox name=author> Feedback to resource author';
   }    }
   if (&feedback_available(1)) {    if (&feedback_available(1)) {
     $options.=      $msgoptions.=
     '<br><input type=checkbox name=question> Question about resource content';      '<br><input type=checkbox name=question> Question about resource content';
   }    }
   if (&feedback_available(0,1)) {    if (&feedback_available(0,1)) {
     $options.=      $msgoptions.=
       '<br><input type=checkbox name=course> '.        '<br><input type=checkbox name=course> '.
  'Question/Comment/Feedback about course content';   'Question/Comment/Feedback about course content';
   }    }
   if (&feedback_available(0,0,1)) {    if (&feedback_available(0,0,1)) {
     $options.=      $msgoptions.=
       '<br><input type=checkbox name=policy> '.        '<br><input type=checkbox name=policy> '.
  'Question/Comment/Feedback about course policy';   'Question/Comment/Feedback about course policy';
   }    }
Line 207  sub screen_header { Line 329  sub screen_header {
       if (&Apache::lonnet::allowed('pch',        if (&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'}:''))) {
     $options.='<br><input type=checkbox name=discuss> '.      $discussoptions='<input type="checkbox" name="discuss" onClick="this.form.anondiscuss.checked=false;"> '.
  '<b>Contribution to course discussion of resource</b>';   'Contribution to course discussion of resource';
     $options.='<br><input type=checkbox name=anondiscuss> '.      $discussoptions.='<br><input type="checkbox" name="anondiscuss" onClick="this.form.discuss.checked=false;"> '.
  '<b>Anonymous contribution to course discussion of resource</b>'.   'Anonymous contribution to course discussion of resource'.
         ' (name only visible to course faculty)';          ' <i>(name only visible to course faculty)</i>';
       }        }
   }    }
   return $options;    if ($msgoptions) { $msgoptions='<h2>Sending Messages</h2>'.$msgoptions; }
     if ($discussoptions) { 
        $discussoptions='<h2>Discussion Contributions</h2>'.$discussoptions; }
     return $msgoptions.$discussoptions;
 }  }
   
 sub resource_output {  sub resource_output {
   my ($feedurl) = @_;    my ($feedurl) = @_;
   my $usersaw=&Apache::lonnet::ssi($feedurl);    my $usersaw=&Apache::lonnet::ssi_body($feedurl);
   $usersaw=~s/\<body[^\>]*\>//gi;    $usersaw=~s/\<body[^\>]*\>//gi;
   $usersaw=~s/\<\/body\>//gi;    $usersaw=~s/\<\/body\>//gi;
   $usersaw=~s/\<html\>//gi;    $usersaw=~s/\<html\>//gi;
Line 241  sub clear_out_html { Line 366  sub clear_out_html {
  BR=>1, TT=>1, STRONG=>1, BLOCKQUOTE=>1, DIV=>1, IMG=>1);   BR=>1, TT=>1, STRONG=>1, BLOCKQUOTE=>1, DIV=>1, IMG=>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/\<\/*m\s*\>//g;
       $message=~s/\</\&lt\;/g;        $message=~s/\</\&lt\;/g;
Line 455  sub handler { Line 580  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 485  sub handler { Line 610  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 518  sub handler { Line 643  sub handler {
   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 559  sub handler { Line 684  sub handler {
 # Get output from resource  # Get output from resource
       my $usersaw=&resource_output($feedurl);        my $usersaw=&resource_output($feedurl);
   
 # Get resource answer  # Get resource answer (need to allow student to view grades for this to work)
         &Apache::lonnet::appenv(('allowed.vgr'=>'F'));
       my $useranswer=&Apache::loncommon::get_student_answers(        my $useranswer=&Apache::loncommon::get_student_answers(
                        $symb,$ENV{'user.name'},$ENV{'user.domain'},                         $symb,$ENV{'user.name'},$ENV{'user.domain'},
        $ENV{'request.course.id'});         $ENV{'request.course.id'});
         &Apache::lonnet::delenv('allowed.vgr');
 # Get attachments, if any, and not too large  # Get attachments, if any, and not too large
       my $attachmenturl='';        my $attachmenturl='';
       if ($ENV{'form.attachment.filename'}) {        if ($ENV{'form.attachment.filename'}) {
Line 608  sub handler { Line 735  sub handler {
    }     }
   } else {    } else {
 # Ambiguous Problem Resource  # Ambiguous Problem Resource
     $r->internal_redirect('/adm/ambiguous');  
     &Apache::lonnet::cleanenv();
   
         $r->internal_redirect('/adm/ambiguous');
   }    }
 }  }
   return OK;    return OK;

Removed from v.1.43  
changed lines
  Added in v.1.56


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