Annotation of loncom/interface/lonfeedback.pm, revision 1.34

1.1       www         1: # The LearningOnline Network
                      2: # Feedback
                      3: #
1.34    ! www         4: # $Id: lonfeedback.pm,v 1.33 2002/10/03 15:04:29 www Exp $
1.19      albertel    5: #
                      6: # Copyright Michigan State University Board of Trustees
                      7: #
                      8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
                      9: #
                     10: # LON-CAPA is free software; you can redistribute it and/or modify
                     11: # it under the terms of the GNU General Public License as published by
                     12: # the Free Software Foundation; either version 2 of the License, or
                     13: # (at your option) any later version.
                     14: #
                     15: # LON-CAPA is distributed in the hope that it will be useful,
                     16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     18: # GNU General Public License for more details.
                     19: #
                     20: # You should have received a copy of the GNU General Public License
                     21: # along with LON-CAPA; if not, write to the Free Software
                     22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     23: #
                     24: # /home/httpd/html/adm/gpl.txt
                     25: #
                     26: # http://www.lon-capa.org/
                     27: #
1.1       www        28: # (Internal Server Error Handler
                     29: #
                     30: # (Login Screen
                     31: # 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14,
                     32: # 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer)
                     33: #
                     34: # 3/1/1 Gerd Kortemeyer)
                     35: #
1.5       www        36: # 3/1,2/3,2/5,2/6,2/8 Gerd Kortemeyer
1.7       albertel   37: # 2/9 Guy Albertelli
1.8       www        38: # 2/10 Gerd Kortemeyer
1.9       albertel   39: # 2/13 Guy Albertelli
1.10      www        40: # 7/25 Gerd Kortemeyer
1.13      www        41: # 7/26 Guy Albertelli
1.21      www        42: # 7/26,8/10,10/1,11/5,11/6,12/27,12/29 Gerd Kortemeyer
1.22      www        43: # YEAR=2002
1.23      www        44: # 1/1,1/16 Gerd Kortemeyer
1.22      www        45: #
1.7       albertel   46: 
1.1       www        47: package Apache::lonfeedback;
                     48: 
                     49: use strict;
                     50: use Apache::Constants qw(:common);
1.3       www        51: use Apache::lonmsg();
1.9       albertel   52: use Apache::loncommon();
1.33      www        53: use Apache::lontexconvert();
1.1       www        54: 
1.6       albertel   55: sub mail_screen {
                     56:   my ($r,$feedurl,$options) = @_;
1.29      www        57:   my $bodytag=&Apache::loncommon::bodytag('Resource Feedback and Discussion',
                     58:                                           '','onLoad="window.focus();"');
1.6       albertel   59:   $r->print(<<ENDDOCUMENT);
1.1       www        60: <html>
                     61: <head>
                     62: <title>The LearningOnline Network with CAPA</title>
1.7       albertel   63: <meta http-equiv="pragma" content="no-cache"></meta>
1.5       www        64: <script>
                     65:     function gosubmit() {
                     66:         var rec=0;
1.12      albertel   67:         if (typeof(document.mailform.elements.author)!="undefined") {
1.5       www        68:           if (document.mailform.elements.author.checked) {
                     69:              rec=1;
                     70:           } 
                     71:         }
1.12      albertel   72:         if (typeof(document.mailform.elements.question)!="undefined") {
1.5       www        73:           if (document.mailform.elements.question.checked) {
                     74:              rec=1;
                     75:           } 
                     76:         }
1.12      albertel   77:         if (typeof(document.mailform.elements.course)!="undefined") {
1.5       www        78:           if (document.mailform.elements.course.checked) {
                     79:              rec=1;
                     80:           } 
                     81:         }
1.12      albertel   82:         if (typeof(document.mailform.elements.policy)!="undefined") {
1.5       www        83:           if (document.mailform.elements.policy.checked) {
                     84:              rec=1;
                     85:           } 
                     86:         }
1.12      albertel   87:         if (typeof(document.mailform.elements.discuss)!="undefined") {
1.10      www        88:           if (document.mailform.elements.discuss.checked) {
                     89:              rec=1;
                     90:           } 
                     91:         }
1.14      www        92:         if (typeof(document.mailform.elements.anondiscuss)!="undefined") {
                     93:           if (document.mailform.elements.anondiscuss.checked) {
                     94:              rec=1;
                     95:           } 
                     96:         }
1.5       www        97: 
                     98:         if (rec) {
                     99: 	    document.mailform.submit();
                    100:         } else {
                    101:             alert('Please check a feedback type.');
                    102: 	}
                    103:     }
                    104: </script>
1.1       www       105: </head>
1.29      www       106: $bodytag
1.2       www       107: <h2><tt>$feedurl</tt></h2>
1.5       www       108: <form action="/adm/feedback" method=post name=mailform>
1.2       www       109: <input type=hidden name=postdata value="$feedurl">
1.5       www       110: Please check at least one of the following feedback types:
1.2       www       111: $options<hr>
                    112: My question/comment/feedback:<p>
1.16      www       113: <textarea name=comment cols=60 rows=10 wrap=hard>
1.2       www       114: </textarea><p>
1.5       www       115: <input type=hidden name=sendit value=1>
                    116: <input type=button value="Send Feedback" onClick='gosubmit();'></input>
1.2       www       117: </form>
1.1       www       118: ENDDOCUMENT
1.33      www       119: $r->print(&generate_preview_button().'</body></html>');
1.6       albertel  120: }
                    121: 
                    122: sub fail_redirect {
                    123:   my ($r,$feedurl) = @_;
                    124:   $r->print (<<ENDFAILREDIR);
1.5       www       125: <head><title>Feedback not sent</title>
1.7       albertel  126: <meta http-equiv="pragma" content="no-cache"></meta>
1.5       www       127: <meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl">
                    128: </head>
                    129: <html>
                    130: <body bgcolor="#FFFFFF">
1.8       www       131: <img align=right src=/adm/lonIcons/lonlogos.gif>
                    132: <b>Sorry, no recipients  ...</b>
1.5       www       133: </body>
                    134: </html>
                    135: ENDFAILREDIR
                    136: }
1.4       www       137: 
1.6       albertel  138: sub redirect_back {
1.32      albertel  139:   my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$status) = @_;
1.6       albertel  140:   $r->print (<<ENDREDIR);
1.3       www       141: <head>
                    142: <title>Feedback sent</title>
1.7       albertel  143: <meta http-equiv="pragma" content="no-cache"></meta>
1.5       www       144: <meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl">
1.2       www       145: </head>
                    146: <html>
                    147: <body bgcolor="#FFFFFF">
1.8       www       148: <img align=right src=/adm/lonIcons/lonlogos.gif>
1.5       www       149: $typestyle
1.32      albertel  150: <b>Sent $sendsomething message(s), and $sendposts post(s).</b>
1.3       www       151: <font color=red>$status</font>
1.2       www       152: </body>
                    153: </html>
                    154: ENDREDIR
                    155: }
1.6       albertel  156: 
                    157: sub no_redirect_back {
                    158:   my ($r,$feedurl) = @_;
                    159:   $r->print (<<ENDNOREDIR);
1.2       www       160: <head><title>Feedback not sent</title>
1.7       albertel  161: <meta http-equiv="pragma" content="no-cache"></meta>
                    162: ENDNOREDIR
                    163: 
1.8       www       164:   if ($feedurl!~/^\/adm\/feedback/) { 
1.7       albertel  165:     $r->print('<meta HTTP-EQUIV="Refresh" CONTENT="2; url='.$feedurl.'">');
                    166:   }
                    167:   
1.8       www       168:   $r->print (<<ENDNOREDIRTWO);
1.2       www       169: </head>
                    170: <html>
                    171: <body bgcolor="#FFFFFF">
1.8       www       172: <img align=right src=/adm/lonIcons/lonlogos.gif>
                    173: <b>Sorry, no feedback possible on this resource  ...</b>
1.2       www       174: </body>
                    175: </html>
1.8       www       176: ENDNOREDIRTWO
1.2       www       177: }
1.6       albertel  178: 
                    179: sub screen_header {
                    180:   my ($feedurl) = @_;
                    181:   my $options='';
                    182:   if (($feedurl=~/^\/res/) && ($feedurl!~/^\/res\/adm/)) {
                    183:     $options= 
                    184:       '<p><input type=checkbox name=author> Feedback to resource author';
                    185:   }
                    186:   if ($ENV{'course.'.$ENV{'request.course.id'}.'.question.email'}) {
                    187:     $options.=
1.8       www       188:     '<br><input type=checkbox name=question> Question about resource content';
1.6       albertel  189:   }
                    190:   if ($ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'}) {
                    191:     $options.=
                    192:       '<br><input type=checkbox name=course> '.
                    193: 	'Question/Comment/Feedback about course content';
                    194:   }
                    195:   if ($ENV{'course.'.$ENV{'request.course.id'}.'.policy.email'}) {
                    196:     $options.=
                    197:       '<br><input type=checkbox name=policy> '.
                    198: 	'Question/Comment/Feedback about course policy';
1.10      www       199:   }
1.20      www       200: 
1.10      www       201:   if ($ENV{'request.course.id'}) {
1.23      www       202:       if (&Apache::lonnet::allowed('pch',
                    203:         $ENV{'request.course.id'}.
                    204:         ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
1.10      www       205:     $options.='<br><input type=checkbox name=discuss> '.
                    206: 	'<b>Contribution to course discussion of resource</b>';
1.14      www       207:     $options.='<br><input type=checkbox name=anondiscuss> '.
                    208: 	'<b>Anonymous contribution to course discussion of resource</b>'.
                    209:         ' (name only visible to course faculty)';
1.20      www       210:       }
1.14      www       211:   }
1.6       albertel  212:   return $options;
                    213: }
                    214: 
                    215: sub resource_output {
                    216:   my ($feedurl) = @_;
                    217:   my $usersaw=&Apache::lonnet::ssi($feedurl);
                    218:   $usersaw=~s/\<body[^\>]*\>//gi;
                    219:   $usersaw=~s/\<\/body\>//gi;
                    220:   $usersaw=~s/\<html\>//gi;
                    221:   $usersaw=~s/\<\/html\>//gi;
                    222:   $usersaw=~s/\<head\>//gi;
                    223:   $usersaw=~s/\<\/head\>//gi;
                    224:   $usersaw=~s/action\s*\=/would_be_action\=/gi;
                    225:   return $usersaw;
                    226: }
                    227: 
                    228: sub clear_out_html {
                    229:   my $message=$ENV{'form.comment'};
1.33      www       230:   $message=~s/\<\/*m\s*\>//g;
1.6       albertel  231:   $message=~s/\</\&lt\;/g;
                    232:   $message=~s/\>/\&gt\;/g;
                    233:   return $message;
                    234: }
                    235: 
                    236: sub assemble_email {
                    237:   my ($feedurl,$message,$prevattempts,$usersaw)=@_;
                    238:   my $email=<<"ENDEMAIL";
                    239: Refers to <a href="$feedurl">$feedurl</a>
                    240: 
                    241: $message
                    242: ENDEMAIL
                    243:     my $citations=<<"ENDCITE";
                    244: <h2>Previous attempts of student (if applicable)</h2>
                    245: $prevattempts
                    246: <p><hr>
                    247: <h2>Original screen output (if applicable)</h2>
                    248: $usersaw
                    249: ENDCITE
                    250:   return ($email,$citations);
                    251: }
                    252: 
                    253: sub decide_receiver {
                    254:   my ($feedurl) = @_;
                    255:   my $typestyle='';
                    256:   my %to=();
                    257:   if ($ENV{'form.author'}) {
1.8       www       258:     $typestyle.='Submitting as Author Feedback<br>';
1.6       albertel  259:     $feedurl=~/^\/res\/(\w+)\/(\w+)\//;
                    260:     $to{$2.':'.$1}=1;
                    261:   }
                    262:   if ($ENV{'form.question'}) {
1.8       www       263:     $typestyle.='Submitting as Question<br>';
1.24      harris41  264:     foreach (split(/\,/,
                    265: 		   $ENV{'course.'.$ENV{'request.course.id'}.'.question.email'})
                    266: 	     ) {
1.6       albertel  267:       $to{$_}=1;
1.24      harris41  268:     } 
1.6       albertel  269:   }
                    270:   if ($ENV{'form.course'}) {
1.8       www       271:     $typestyle.='Submitting as Comment<br>';
1.24      harris41  272:     foreach (split(/\,/,
                    273: 		   $ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'})
                    274: 	     ) {
1.6       albertel  275:       $to{$_}=1;
1.24      harris41  276:     } 
1.6       albertel  277:   }
                    278:   if ($ENV{'form.policy'}) {
1.8       www       279:     $typestyle.='Submitting as Policy Feedback<br>';
1.24      harris41  280:     foreach (split(/\,/,
                    281: 		   $ENV{'course.'.$ENV{'request.course.id'}.'.policy.email'})
                    282: 	     ) {
1.6       albertel  283:       $to{$_}=1;
1.24      harris41  284:     } 
1.6       albertel  285:   }
                    286:   return ($typestyle,%to);
                    287: }
                    288: 
                    289: sub send_msg {
                    290:   my ($feedurl,$email,$citations,%to)=@_;
                    291:   my $status='';
                    292:   my $sendsomething=0;
1.24      harris41  293:   foreach (keys %to) {
1.6       albertel  294:     if ($_) {
1.22      www       295:       my $declutter=&Apache::lonnet::declutter($feedurl);
1.8       www       296:       unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$_),
1.34    ! www       297:                'Feedback ['.$declutter.']',$email,$citations)=~/ok/) {
1.6       albertel  298: 	$status.='<br>Error sending message to '.$_.'<br>';
                    299:       } else {
                    300: 	$sendsomething++;
                    301:       }
                    302:     }
1.24      harris41  303:   }
1.18      www       304: 
                    305:     my %record=&Apache::lonnet::restore('_feedback');
                    306:     my ($temp)=keys %record;
                    307:     unless ($temp=~/^error\:/) {
                    308:        my %newrecord=();
                    309:        $newrecord{'resource'}=$feedurl;
                    310:        $newrecord{'subnumber'}=$record{'subnumber'}+1;
                    311:        unless (&Apache::lonnet::cstore(\%newrecord,'_feedback') eq 'ok') {
                    312: 	   $status.='<br>Not registered<br>';
                    313:        }
                    314:     }
                    315:        
1.6       albertel  316:   return ($status,$sendsomething);
                    317: }
                    318: 
1.13      www       319: sub adddiscuss {
1.14      www       320:     my ($symb,$email,$anon)=@_;
1.13      www       321:     my $status='';
1.23      www       322:     if (&Apache::lonnet::allowed('pch',$ENV{'request.course.id'}.
                    323:         ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
1.20      www       324: 
1.13      www       325:     my %contrib=('message'      => $email,
                    326:                  'sendername'   => $ENV{'user.name'},
1.26      www       327:                  'senderdomain' => $ENV{'user.domain'},
                    328:                  'screenname'   => $ENV{'environment.screenname'},
                    329:                  'plainname'    => $ENV{'environment.firstname'}.' '.
                    330: 		                   $ENV{'environment.middlename'}.' '.
                    331:                                    $ENV{'environment.lastname'}.' '.
                    332:                                    $ENV{'enrironment.generation'});
1.14      www       333:     if ($anon) {
                    334: 	$contrib{'anonymous'}='true';
                    335:     }
1.13      www       336:     if (($symb) && ($email)) {
1.14      www       337:        $status='Adding to class discussion'.($anon?' (anonymous)':'').': '.
1.13      www       338:         &Apache::lonnet::store(\%contrib,$symb,$ENV{'request.course.id'},
                    339:                      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
1.17      www       340: 		     $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
1.21      www       341:         my %storenewentry=($symb => time);
                    342:         $status.='<br>Updating discussion time: '.
                    343:         &Apache::lonnet::put('discussiontimes',\%storenewentry,
                    344:                      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
                    345: 		     $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
1.13      www       346:     }
1.17      www       347:     my %record=&Apache::lonnet::restore('_discussion');
                    348:     my ($temp)=keys %record;
                    349:     unless ($temp=~/^error\:/) {
                    350:        my %newrecord=();
                    351:        $newrecord{'resource'}=$symb;
                    352:        $newrecord{'subnumber'}=$record{'subnumber'}+1;
1.21      www       353:        $status.='<br>Registering: '.
                    354:                &Apache::lonnet::cstore(\%newrecord,'_discussion');
1.20      www       355:     }
                    356:     } else {
                    357: 	$status.='Failed.';
1.17      www       358:     }
                    359:     return $status.'<br>';   
1.13      www       360: }
                    361: 
1.33      www       362: # ----------------------------------------------------------- Preview function
                    363: 
                    364: sub show_preview {
                    365:     my $r=shift;
                    366:     my $message=&clear_out_html($ENV{'form.comment'});
                    367:     $message=~s/\n/\<br \/\>/g;
                    368:     $message=&Apache::lontexconvert::msgtexconverted($message);
                    369:     $r->print('<table border="2"><tr><td>'.
                    370:        $message.'</td></tr></table>');
                    371: }
                    372: 
                    373: sub generate_preview_button {
                    374:     return(<<ENDPREVIEW);
                    375: <form name="preview" action="/adm/feedback?preview=1" method="post" target="preview">
                    376: <input type="hidden" name="comment" />
                    377: <input type="button" value="Show Preview"
                    378: onClick="this.form.comment.value=document.mailform.comment.value;this.form.submit();" />
                    379: </form>
                    380: ENDPREVIEW
                    381: }
1.6       albertel  382: sub handler {
                    383:   my $r = shift;
1.8       www       384:   if ($r->header_only) {
                    385:      $r->content_type('text/html');
                    386:      $r->send_http_header;
                    387:      return OK;
                    388:   }
1.15      www       389: 
                    390: # --------------------------- Get query string for limited number of parameters
                    391: 
1.27      stredwic  392:    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
1.33      www       393:                                        ['hide','unhide','postdata','preview']);
1.15      www       394: 
                    395:   if (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) {
                    396: # ----------------------------------------------------------------- Hide/unhide
                    397:     $r->content_type('text/html');
                    398:     $r->send_http_header;
                    399: 
                    400:     my $entry=$ENV{'form.hide'}?$ENV{'form.hide'}:$ENV{'form.unhide'};
                    401: 
                    402:     my ($symb,$idx)=split(/\:\:\:/,$entry);
                    403:     my ($map,$ind,$url)=split(/\_\_\_/,$symb);
                    404: 
                    405:     my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
                    406:                      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
                    407: 		     $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
                    408: 
                    409:         
                    410:     my $currenthidden=$contrib{'hidden'};
                    411:     
                    412:     if ($ENV{'form.hide'}) {
                    413: 	$currenthidden.='.'.$idx.'.';
                    414:     } else {
                    415:         $currenthidden=~s/\.$idx\.//g;
                    416:     }
                    417:     my %newhash=('hidden' => $currenthidden);
                    418: 
                    419:     &Apache::lonnet::store(\%newhash,$symb,$ENV{'request.course.id'},
                    420:                      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
                    421: 		     $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
                    422: 
1.30      www       423:     &redirect_back($r,&Apache::lonnet::clutter($url),
1.32      albertel  424:        'Changed discussion status<p>','0','0');
1.33      www       425:   } elsif ($ENV{'form.preview'}) {
                    426: # -------------------------------------------------------- User wants a preview
                    427:       &show_preview($r);
1.15      www       428:   } else {
                    429: # ------------------------------------------------------------- Normal feedback
1.6       albertel  430:   my $feedurl=$ENV{'form.postdata'};
                    431:   $feedurl=~s/^http\:\/\///;
                    432:   $feedurl=~s/^$ENV{'SERVER_NAME'}//;
                    433:   $feedurl=~s/^$ENV{'HTTP_HOST'}//;
1.8       www       434: 
                    435:   my $symb=&Apache::lonnet::symbread($feedurl);
1.31      www       436:   unless ($symb) {
                    437:       $symb=$ENV{'form.symb'};
                    438:       if ($symb) {
                    439: 	  my ($map,$id,$url)=split(/\_\_\_/,$symb);
                    440:           $feedurl=&Apache::lonnet::clutter($url);
                    441:       }
                    442:   }
1.8       www       443:   my $goahead=1;
                    444:   if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form)$/) {
                    445:       unless ($symb) { $goahead=0; }
                    446:   }
                    447: 
                    448:   if ($goahead) {
                    449: # Go ahead with feedback, no ambiguous reference
                    450:     $r->content_type('text/html');
                    451:     $r->send_http_header;
1.6       albertel  452:   
1.8       www       453:     if (
1.7       albertel  454:       (
                    455:        ($feedurl=~m:^/res:) && ($feedurl!~m:^/res/adm:)
                    456:       ) 
                    457:       || 
                    458:       ($ENV{'request.course.id'} && ($feedurl!~m:^/adm:))
1.31      www       459:       ||
                    460:       ($ENV{'request.course.id'} && ($symb=~/^bulletin\_\_\_/))
1.7       albertel  461:      ) {
1.6       albertel  462: # --------------------------------------------------- Print login screen header
                    463:     unless ($ENV{'form.sendit'}) {
                    464:       my $options=&screen_header($feedurl);
                    465:       if ($options) {
                    466: 	&mail_screen($r,$feedurl,$options);
                    467:       } else {
                    468: 	&fail_redirect($r,$feedurl);
                    469:       }
                    470:     } else {
                    471:       
                    472: # Get previous user input
1.9       albertel  473:       my $prevattempts=&Apache::loncommon::get_previous_attempt(
1.11      albertel  474:             $symb,$ENV{'user.name'},$ENV{'user.domain'},
1.9       albertel  475:             $ENV{'request.course.id'});
1.6       albertel  476: 
                    477: # Get output from resource
                    478:       my $usersaw=&resource_output($feedurl);
                    479: 
                    480: # Filter HTML out of message (could be nasty)
                    481:       my $message=&clear_out_html;
                    482: 
                    483: # Assemble email
1.8       www       484:       my ($email,$citations)=&assemble_email($feedurl,$message,$prevattempts,
                    485:           $usersaw);
1.6       albertel  486: 
                    487: # Who gets this?
                    488:       my ($typestyle,%to) = &decide_receiver($feedurl);
                    489: 
                    490: # Actually send mail
                    491:       my ($status,$numsent)=&send_msg($feedurl,$email,$citations,%to);
1.13      www       492: 
                    493: # Discussion? Store that.
                    494: 
1.32      albertel  495:       my $numpost=0;
1.13      www       496:       if ($ENV{'form.discuss'}) {
                    497: 	  $typestyle.=&adddiscuss($symb,$message);
1.32      albertel  498: 	  $numpost++;
1.13      www       499:       }
1.6       albertel  500: 
1.14      www       501:       if ($ENV{'form.anondiscuss'}) {
                    502: 	  $typestyle.=&adddiscuss($symb,$message,1);
1.32      albertel  503: 	  $numpost++;
1.14      www       504:       }
                    505: 
                    506: 
1.6       albertel  507: # Receipt screen and redirect back to where came from
1.32      albertel  508:       &redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$status);
1.6       albertel  509: 
                    510:     }
1.8       www       511:    } else {
1.7       albertel  512: # Unable to give feedback
1.6       albertel  513:     &no_redirect_back($r,$feedurl);
1.8       www       514:    }
                    515:   } else {
                    516: # Ambiguous Problem Resource
                    517:     $r->internal_redirect('/adm/ambiguous');
1.6       albertel  518:   }
1.15      www       519: }
1.6       albertel  520:   return OK;
1.1       www       521: } 
                    522: 
                    523: 1;
                    524: __END__

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.