Diff for /loncom/interface/lonfeedback.pm between versions 1.387 and 1.388

version 1.387, 2021/12/31 20:34:24 version 1.388, 2022/01/18 16:55:30
Line 2751  sub get_post_attachments { Line 2751  sub get_post_attachments {
         $$attachments{'0'}{'filename'} = $attachmenturls;          $$attachments{'0'}{'filename'} = $attachmenturls;
         $$attachments{'0'}{'0'} = 'n';          $$attachments{'0'}{'0'} = 'n';
     }      }
   
     return;      return;
 }  }
   
 sub fail_redirect {  sub fail_redirect {
   my ($r,$feedurl) = @_;    my ($r,$feedurl,$delay) = @_;
   if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };    if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };
   my %lt = &Apache::lonlocal::texthash(    my %lt = &Apache::lonlocal::texthash(
                  'sorr' => 'Sorry, no recipients ...',                   'sorr' => 'Sorry, no recipients ...',
   );    );
   my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');    my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');
   $r->print(&Apache::loncommon::start_page('Feedback not sent',undef,    my %parms=('only_body'   => 1);
    {'redirect'  => [2,$feedurl],    if ($delay !~ /^\d+(|\.\d+)$/) {
     'only_body' => 1,}));        $delay = 0;
     }
     if ($env{'form.modal'}) {
         my $onload = 'document.forms.reldt.submit()';
         if ($delay) {
             my $js_delay = int(1000 * $delay);
             $onload = "setTimeout(function(){
                        document.forms.reldt.submit();
                        },$js_delay);";
         }
         $parms{'add_entries'}={'onload' => $onload};
     } else {
         $parms{'redirect'}=[$delay,$feedurl];
     }
     $r->print(&Apache::loncommon::start_page('Feedback not sent',undef,\%parms));
     my $windowname = 'loncapaclient';
     if ($env{'request.lti.login'}) {
        $windowname .= 'lti';
     }
   $r->print(<<ENDFAILREDIR);    $r->print(<<ENDFAILREDIR);
 <img align="right" src="$logo" />  <img align="right" src="$logo" />
 <p class="LC_warning">$lt{'sorr'}</p>  <p class="LC_warning">$lt{'sorr'}</p>
   <form name="reldt" action="$feedurl" target="$windowname">
   </form>
 ENDFAILREDIR  ENDFAILREDIR
   $r->print(&Apache::loncommon::end_page());    $r->print(&Apache::loncommon::end_page());
 }  }
   
 sub redirect_back {  sub redirect_back {
   my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$blog,$status,$previous,$sort,$rolefilter,$statusfilter,$sectionpick,$grouppick,$numpicks,$group,$toolarge) = @_;    my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$blog,$status,$previous,$sort,
         $rolefilter,$statusfilter,$sectionpick,$grouppick,$numpicks,$group,$toolarge) = @_;
   my $sorttag = '';    my $sorttag = '';
   my $roletag = '';    my $roletag = '';
   my $statustag = '';    my $statustag = '';
Line 2873  sub redirect_back { Line 2893  sub redirect_back {
   my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');    my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');
   my %parms=('only_body'   => 1);    my %parms=('only_body'   => 1);
   if ($env{'form.modal'}) {    if ($env{'form.modal'}) {
       $parms{'add_entries'}={'onLoad' => 'document.forms.reldt.submit()'};        my $onload = 'document.forms.reldt.submit()';
         $parms{'add_entries'}={'onload' => $onload};
   } else {    } else {
       $parms{'redirect'}=[0,$feedurl];        $parms{'redirect'}=[0,$feedurl];
   }    }
Line 2907  ENDREDIR Line 2928  ENDREDIR
 }  }
   
 sub no_redirect_back {  sub no_redirect_back {
   my ($r,$feedurl) = @_;    my ($r,$feedurl,$delay) = @_;
   my $nofeed=&mt('Sorry, no feedback possible on this resource ...');    my $nofeed=&mt('Sorry, no feedback possible on this resource ...');
      my $form_for_modal;
   my %onload;    my %parms=('only_body'   => 1,
                'bgcolor'     => '#FFFFFF',);
   my %body_options = ('only_body'   => 1,    if ($delay !~ /^\d+(|\.\d+)$/) {
       'bgcolor'     => '#FFFFFF',        $delay = 0;
       'add_entries' => \%onload,);  
   
   if ($feedurl !~ m{^/adm/feedback}) {   
       $body_options{'redirect'} = [2,$feedurl];  
   }    }
     if ($env{'form.modal'}) {
         if (($feedurl !~ m{^/adm/feedback}) && ($feedurl ne '')) {
             my $onload = 'document.forms.reldt.submit()';
             if ($delay) {
                 my $js_delay = int(1000 * $delay);
                 $onload = "setTimeout(function(){
                            document.forms.reldt.submit();
                            },$js_delay);";
             }
             $parms{'add_entries'}={'onload' => $onload};
             my $windowname = 'loncapaclient';
             if ($env{'request.lti.login'}) {
                 $windowname .= 'lti';
             }
             $form_for_modal = <<ENDFORM;
   <form name="reldt" action="$feedurl" target="$windowname">
   </form>
   ENDFORM
         }
     } else {
         if (($feedurl !~ m{^/adm/feedback}) && ($feedurl ne '')) {
             $parms{'redirect'}=[$delay,$feedurl];
         }
     }
    
   my $start_page=    my $start_page=
       &Apache::loncommon::start_page('Feedback not sent',undef,        &Apache::loncommon::start_page('Feedback not sent',undef,
      \%body_options);       \%parms);
         
   my $end_page = &Apache::loncommon::end_page();    my $end_page = &Apache::loncommon::end_page();
   
   &Apache::lonenc::check_encrypt(\$feedurl);  
   my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');    my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');
   $r->print (<<ENDNOREDIRTWO);    $r->print (<<ENDNOREDIRTWO);
 $start_page  $start_page
 <img align="right" src="$logo" />  <img align="right" src="$logo" />
 <b>$nofeed</b>  <b>$nofeed</b>
 <br />  <br />
   $form_for_modal
 $end_page  $end_page
 ENDNOREDIRTWO  ENDNOREDIRTWO
 }  }
   
 sub screen_header {  sub screen_header {
     my ($feedurl,$symb,$group) = @_;      my ($feedurl,$symb,$group) = @_;
     my $crscontent = &mt('Question/Comment/Feedback about course content');      my %default = &Apache::lonlocal::texthash (
     my $crspolicy = &mt('Question/Comment/Feedback about course policy');                      question => 'Question about resource content',
                       comment => 'Question/Comment/Feedback about course content',
                       policy => 'Question/Comment/Feedback about course policy',
                     );  
     my $contribdisc = &mt('Contribution to course discussion of resource');      my $contribdisc = &mt('Contribution to course discussion of resource');
     my $anoncontrib = &mt('Anonymous contribution to course discussion of resource');      my $anoncontrib = &mt('Anonymous contribution to course discussion of resource');
     my $namevis = &mt('name only visible to course faculty');      my $namevis = &mt('name only visible to course faculty');
Line 2947  sub screen_header { Line 2992  sub screen_header {
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
         $crstype = &Apache::loncommon::course_type();          $crstype = &Apache::loncommon::course_type();
         if ($crstype eq 'Community') {          if ($crstype eq 'Community') {
             $crscontent = &mt('Question/Comment/Feedback about community content');              $default{'comment'} = &mt('Question/Comment/Feedback about community content');
             $crspolicy = &mt('Question/Comment/Feedback about community policy');              $default{'policy'} = &mt('Question/Comment/Feedback about community policy'); 
             $contribdisc = &mt('Contribution to community discussion of resource');              $contribdisc = &mt('Contribution to community discussion of resource');
             $anoncontrib = &mt('Anonymous contribution to community discussion of resource');              $anoncontrib = &mt('Anonymous contribution to community discussion of resource');
             $namevis = &mt('name only visible to community facilitators');              $namevis = &mt('name only visible to community facilitators');
Line 2956  sub screen_header { Line 3001  sub screen_header {
     }      }
     my $msgoptions='';      my $msgoptions='';
     my $discussoptions='';      my $discussoptions='';
       my $checkradio = '';
       my $blockblog;
       my (%fdbkoptions,%discoptions);
     unless (($env{'form.replydisc'}) || ($env{'form.editdisc'})) {      unless (($env{'form.replydisc'}) || ($env{'form.editdisc'})) {
  if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/) && ($env{'user.adv'})) {          if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/) && ($env{'user.adv'})) {
     $msgoptions=               $fdbkoptions{'author'} = 1;
  '<label><input type="radio" name="discuss" value="author" /> '.          }
  &mt('Feedback to resource author').'</label><br />';          if (&feedback_available(1)) {
  }              $fdbkoptions{'question'} = 1;
         my %optionhash=();          }
         foreach my $type ('question','comment','policy') {          if (&feedback_available(0,1)) {
     $optionhash{$type}=$env{'course.'.$env{'request.course.id'}.'.'.$type.'.email.text'};              $fdbkoptions{'course'} = 1;
  }          }
  if (&feedback_available(1)) {          if (&feedback_available(0,0,1)) {
     $msgoptions.=              $fdbkoptions{'policy'} = 1;
  '<label><input type="radio" name="discuss" value="question" /> '.          }
  ($optionhash{'question'}?$optionhash{'question'}:&mt('Question about resource content')).'</label><br />';  
  }  
  if (&feedback_available(0,1)) {  
     $msgoptions.=  
  '<label><input type="radio" name="discuss" value="course" /> '.  
  ($optionhash{'comment'}?$optionhash{'comment'}:$crscontent).  
  '</label><br />';  
  }  
  if (&feedback_available(0,0,1)) {  
     $msgoptions.=  
  '<label><input type="radio" name="discuss" value="policy" /> '.  
  ($optionhash{'policy'}?$optionhash{'policy'}:$crspolicy).  
  '</label><br />';  
  }  
     }      }
     if (($env{'request.course.id'}) && (!$env{'form.sendmessageonly'})) {      if (($env{'request.course.id'}) && (!$env{'form.sendmessageonly'})) {
         my ($blocked,$blocktext) = &Apache::loncommon::blocking_status('boards');          my ($blocked,$blocktext) = &Apache::loncommon::blocking_status('boards');
         my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};          my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
         my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};          my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
         my $realsymb = &get_realsymb($symb);          my $realsymb = &get_realsymb($symb);
         if (!$blocked && &discussion_open(undef,$realsymb) &&           if (!$blocked && &discussion_open(undef,$realsymb) &&
     (&Apache::lonnet::allowed('pch',              (&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'}:'')) ||
             (($group ne '') && ($symb =~ m{^bulletin___\d+___adm/wrapper/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard$}) && (&check_group_priv($group,'pgd') eq 'ok')))) {              (($group ne '') && ($symb =~ m{^bulletin___\d+___adm/wrapper/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard$}) && (&check_group_priv($group,'pgd') eq 'ok')))) {
             $discussoptions='<label><input type="radio" name="discuss" value="nonanon" checked="checked" /> '.              $discoptions{'nonanon'} = 1;
                             $contribdisc.  
                             '</label>';   
             if (&Apache::lonnet::allowed('pac',$env{'request.course.id'}.              if (&Apache::lonnet::allowed('pac',$env{'request.course.id'}.
                ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) {                 ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) {
         $discussoptions .= '<br /><label><input type="radio" name="discuss" value="anon" /> '.                  $discoptions{'anon'} = 1;
                    $anoncontrib.  
                    ' <i>('.$namevis.')</i></label> '.  
                    '<a href="/adm/preferences?action=changescreenname">'.&mt('Change Screenname').'</a>';  
             }              }
             my $blockblog = &Apache::loncommon::blocking_status('blogs');              $blockblog = &Apache::loncommon::blocking_status('blogs');
             if (!$blockblog) {          }
                 $discussoptions.= &add_blog_checkbox($crstype);      }
       my $total = scalar(keys(%fdbkoptions)) + scalar(keys(%discoptions));
       return if (!$total);
       if ($total == 1) {
           $checkradio = ' checked="checked"';
       }
       if (keys(%fdbkoptions)) {
           if ($fdbkoptions{'author'}) {
       $msgoptions =
    '<label><input type="radio" name="discuss" value="author"'.$checkradio.' /> '.
    &mt('Feedback to resource author').'</label><br />';
    }
           foreach my $item ('question','comment','policy') {
               my $type = $item;
               if ($item eq 'comment') {
                   $type = 'course';
             }              }
               my $optionhash=$env{'course.'.$env{'request.course.id'}.'.'.$item.'.email.text'};
               if ($fdbkoptions{$type}) {
                   $msgoptions .=
                       '<label><input type="radio" name="discuss" value="'.$type.'"'.$checkradio.' />'.
                       ($optionhash?$optionhash:$default{$item}).'</label><br />'; 
       }
           }
       }
       if (keys(%discoptions)) {
           if ($discoptions{'nonanon'}) {
               $discussoptions='<label><input type="radio" name="discuss" value="nonanon" checked="checked" /> '.
                               $contribdisc.
                               '</label>';
           }
           if ($discoptions{'anon'}) {
               $discussoptions .= '<br /><label><input type="radio" name="discuss" value="anon"'.$checkradio.' /> '.
                                  $anoncontrib.
                                  ' <i>('.$namevis.')</i></label> '.
                                  '<a href="/adm/preferences?action=changescreenname">'.&mt('Change Screenname').'</a>';
           }
           if (!$blockblog) {
               $discussoptions.= &add_blog_checkbox($crstype);
         }          }
     }      }
     if ($msgoptions) {      if ($msgoptions) {
Line 3947  sub handler { Line 4013  sub handler {
           my $symb=(split(/\:\:\:/,$env{'form.editdisc'}))[0];            my $symb=(split(/\:\:\:/,$env{'form.editdisc'}))[0];
           my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);            my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
           my $feedurl=&Apache::lonnet::clutter($url);            my $feedurl=&Apache::lonnet::clutter($url);
           &redirect_back($r,$feedurl,&mt('Editing not permitted').'<br />',                     '0','0','','',$env{'form.previous'},undef,undef,undef,            &redirect_back($r,$feedurl,&mt('Editing not permitted').'<br />',
                     undef,undef,undef,$group);                           '0','0','','',$env{'form.previous'},undef,undef,undef,
                            undef,undef,undef,$group);
           return OK;            return OK;
       }        }
   }     } 
Line 4159  ENDREDIR Line 4226  ENDREDIR
       unless (($seehidden) || (&editing_allowed($env{'form.hide'},$group))) {        unless (($seehidden) || (&editing_allowed($env{'form.hide'},$group))) {
           &redirect_back($r,$feedurl,&mt('Hiding not permitted').'<br />',            &redirect_back($r,$feedurl,&mt('Hiding not permitted').'<br />',
                          '0','0','','',$env{'form.previous'},'','','','',                           '0','0','','',$env{'form.previous'},'','','','',
                          undef,undef,$group,);                           undef,undef,$group);
           return OK;            return OK;
       }        }
   
Line 4591  ENDREDIR Line 4658  ENDREDIR
   $r->internal_redirect('/adm/ambiguous');    $r->internal_redirect('/adm/ambiguous');
   return OK;    return OK;
       }        }
         if ($feedurl eq '') {
             &Apache::loncommon::content_type($r,'text/html');
             $r->send_http_header;
             &no_redirect_back($r);
             return OK;
         }
 # Go ahead with feedback, no ambiguous reference  # Go ahead with feedback, no ambiguous reference
       unless (        unless (
   (    (
Line 4607  ENDREDIR Line 4680  ENDREDIR
   $r->send_http_header;    $r->send_http_header;
 # Unable to give feedback  # Unable to give feedback
           &Apache::lonenc::check_encrypt(\$feedurl);            &Apache::lonenc::check_encrypt(\$feedurl);
   &no_redirect_back($r,$feedurl);    &no_redirect_back($r,$feedurl,2);
   return OK;    return OK;
       }        }
 # --------------------------------------------------- Print login screen header  # --------------------------------------------------- Print login screen header
Line 4627  ENDREDIR Line 4700  ENDREDIR
   if ($options) {    if ($options) {
       &mail_screen($r,$feedurl,$options,$symb,$attachmax{'text'});        &mail_screen($r,$feedurl,$options,$symb,$attachmax{'text'});
   } else {    } else {
       &fail_redirect($r,$feedurl);        &fail_redirect($r,$feedurl,1);
   }    }
   return OK;    return OK;
       }        }
Line 4730  ENDREDIR Line 4803  ENDREDIR
       }        }
       
 # Receipt screen and redirect back to where came from  # Receipt screen and redirect back to where came from
       &redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$blog,$status,$env{'form.previous'},undef,undef,undef,undef,undef,undef,$group,$toolarge);        &redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$blog,$status,$env{'form.previous'},
                        undef,undef,undef,undef,undef,undef,$group,$toolarge);
   }    }
   return OK;    return OK;
 }  }

Removed from v.1.387  
changed lines
  Added in v.1.388


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